Name: series-workflowbjfv7 Phase: Succeeded StartedAt: 2026-08-06 12:02:13 +0000 UTC FinishedAt: 2026-08-06 15:51:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[0] Phase: Succeeded StartedAt: 2026-08-06 12:02:13 +0000 UTC FinishedAt: 2026-08-06 12:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 12:02:13 +0000 UTC FinishedAt: 2026-08-06 12:05:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "44871eadd07a7f004aa00cb87399461eea08c630", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "44871eadd07a7f004aa00cb87399461eea08c630", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "b0166c3f-e0ee-4ab4-af76-00e685ad32a1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_sk_clone_init", "mptcp_token_accept", "mptcp_token_move_request", "mptcp_token_destroy_request", "mptcp_subflow_reqsk_clone" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9za19jbG9uZV9pbml0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2FjY2VwdCYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwYXRoLCBzcGVjaWZpY2FsbHkgaG93IHJlcXVlc3Qgc29ja2V0cyBhcmUgY2xvbmVkIGFuZCBob3cgdG9rZW5zIGFyZSBtYW5hZ2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLiBJdCBpbnRyb2R1Y2VzIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgdG8gaGFuZGxlIGZhaWx1cmVzIGFuZCByZXR1cm4gYSBib29sZWFuLCB3aGljaCBpcyB0aGVuIGNoZWNrZWQgaW4gYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIE1QVENQIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIGR1cmluZyBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM4N2NlMWQ5YTRmMTZmYzE4YmNmYzkyNmE0MjhkZjE2ZTgwMjJmY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDEyOjAzOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21wdGNwLmggYi9pbmNsdWRlL25ldC9tcHRjcC5oXG5pbmRleCA3MWI5ZmM1YTU3OTYzLi4wYTAyYWMxZWQyMmQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuQEAgLTIyMyw2ICYjNDM7MjIzLDggQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG4gXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4gXHRcdFx0XHRcdCAgICAgICBib29sIGF0dGFjaF9saXN0ZW5lcik7XG4mIzQzO3ZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiBcbiBfX2JlMzIgbXB0Y3BfZ2V0X3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbkBAIC0zMDksNiAmIzQzOzMxMSwxMSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjg5NmY0NzJkY2JhMjkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMjEsNiAmIzQzOzIxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcF9lY24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbXB0Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrX3JldXNlcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2FkZHJjb25mLmhcdTAwM2VcbiBcbkBAIC05NjEsNiAmIzQzOzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVx1MDAzZXNrKS1cdTAwM2VmYXN0b3Blbl9yc2ssIG5yZXEpO1xuIFx0fVxuIFxuJiM0MztcdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcbiYjNDM7XHRcdG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUocmVxLCBucmVxKTtcbiYjNDM7XG4gXHRyZXR1cm4gbnJlcTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggY2E2NDRlYzUzZWVkYi4uMDdlYWE2ODU4ZDA1MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTM2MDgsMTcgJiM0MzszNjA4LDE5IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdCAqL1xuIFx0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0VTVEFCTElTSEVEKTtcbiBcbiYjNDM7XHRpZiAoIW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKSkge1xuJiM0MztcdFx0bXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spO1xuJiM0MztcdFx0aW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2UobnNrKTtcbiYjNDM7XHRcdHRjcF9kb25lKG5zayk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogVGhlIG1zayBtYWludGFpbiBhIHJlZiB0byBlYWNoIHN1YmZsb3cgaW4gdGhlIGNvbm5lY3Rpb25zIGxpc3QgKi9cbiBcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWZpcnN0LCBzc2spO1xuIFx0c3ViZmxvdyA9IG1wdGNwX3N1YmZsb3dfY3R4KHNzayk7XG4gXHRsaXN0X2FkZChcdTAwMjZzdWJmbG93LVx1MDAzZW5vZGUsIFx1MDAyNm1zay1cdTAwM2Vjb25uX2xpc3QpO1xuIFx0c29ja19ob2xkKHNzayk7XG4gXG4tXHQvKiBuZXcgbXBjIHN1YmZsb3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBuZXdseVxuLVx0ICogY3JlYXRlZCBtcHRjcCBzb2NrZXRcbi1cdCAqL1xuLVx0bXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spO1xuLVxuIFx0Lyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpXG4gXHQgKiB1c2VzIHRoZSBjb3JyZWN0IGRhdGFcbiBcdCAqL1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbmluZGV4IDRhMmQ0MGNkN2IxMzIuLmM1OGNmYjEzMjZiNzMgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbkBAIC0xMDc0LDkgJiM0MzsxMDc0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIH1cbiBcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbiYjNDM7dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXG4mIzQzO2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pO1xuIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF90b2tlbl9nZXRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0b2tlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbmluZGV4IDhlMzg2ODk5Y2ViOTguLjY1ZDg3NmEwODIzMzggMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5AQCAtNDcsNiAmIzQzOzQ3LDE5IEBAIHN0YXRpYyB2b2lkIHN1YmZsb3dfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0bXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHJlcSk7XG4gfVxuIFxuJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXE7XG4mIzQzO1xuJiM0MztcdHN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2sobmV3X3JlcSk7XG4mIzQzO1xuJiM0MztcdGlmIChzdWJmbG93X3JlcS1cdTAwM2Vtc2spXG4mIzQzO1x0XHRzb2NrX2hvbGQoKHN0cnVjdCBzb2NrICopc3ViZmxvd19yZXEtXHUwMDNlbXNrKTtcbiYjNDM7XG4mIzQzO1x0bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHJlcSwgbmV3X3JlcSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgc3ViZmxvd19nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5MiwgdTMyIG5vbmNlMSwgdTMyIG5vbmNlMixcbiBcdFx0XHRcdCAgdm9pZCAqaG1hYylcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuLmMgYi9uZXQvbXB0Y3AvdG9rZW4uY1xuaW5kZXggZjFhNTBmMzY3YWRkOC4uMjQ4NzdhMmMzNzcyNyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC90b2tlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvdG9rZW4uY1xuQEAgLTE4MCw2ICYjNDM7MTgwLDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0Mzt2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbiYjNDM7XHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4mIzQzO1xuJiM0MztcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xuJiM0MztcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbiYjNDM7XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbiYjNDM7XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuJiM0MztcdFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSlcbiYjNDM7XHRcdFx0aGxpc3RfbnVsbHNfcmVwbGFjZV9pbml0X3JjdShcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ld19zdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoXG4gICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGJlIHJlbW92ZWRcbkBAIC0xODcsMjQgJiM0MzsyMTcsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXG4gICpcbiAgKiBDYWxsZWQgd2hlbiBhIFNZTiBwYWNrZXQgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIGNvbm5lY3Rpb24sIGkuZS5cbiAgKiBpcyBub3QgYSBqb2luIHJlcXVlc3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBvbiBzdWNjZXNzLlxuICAqL1xuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuIFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xuJiM0MztcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXG4tXHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4gXHRidWNrZXQgPSB0b2tlbl9idWNrZXQocmVxLVx1MDAzZXRva2VuKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4mIzQzO1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0LyogcGVkYW50aWMgbG9va3VwIGNoZWNrIGZvciB0aGUgbW92ZWQgdG9rZW4gKi9cbiBcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSlcbi1cdFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiYjNDM7XHRpZiAocG9zICE9IHJlcSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cmVxLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0X19za19udWxsc19hZGRfbm9kZV9yY3UoKHN0cnVjdCBzb2NrICopbXNrLCBcdTAwMjZidWNrZXQtXHUwMDNlbXNrX2NoYWluKTtcbiYjNDM7XHRyZXQgPSB0cnVlO1xuJiM0MztcbiYjNDM7dW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbilcbkBAIC0zNTUsMTYgJiM0MzszOTcsMjEgQEAgdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4gXG4tXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4mIzQzO1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4gXHRwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCBzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gc3ViZmxvd19yZXEpKSB7XG4mIzQzO1x0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xuIFx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cG9zLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0XHRidWNrZXQtXHUwMDNlY2hhaW5fbGVuLS07XG4gXHR9XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXG5pbmRleCA0ZmMzOWZhMmUyNjJkLi5iZTlhY2NlOGE1NjczIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuQEAgLTk5LDcgJiM0Mzs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKFx1MDAyNmluaXRfbmV0LCBtc2stXHUwMDNldG9rZW4pKTtcbiBcbiBcdC8qIHRoaXMgaXMgbm93IGEgbm8tb3AgKi9cbkBAIC0xMjIsNyAmIzQzOzEyMiw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfZGVzdHJveWVkKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFxuIFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2c2stXHUwMDNlc2tfcmVmY250LCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7TVBUQ1BfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX3NrX2Nsb25lX2luaXQmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fYWNjZXB0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHBhdGgsIHNwZWNpZmljYWxseSBob3cgcmVxdWVzdCBzb2NrZXRzIGFyZSBjbG9uZWQgYW5kIGhvdyB0b2tlbnMgYXJlIG1hbmFnZWQgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuIEl0IGludHJvZHVjZXMgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIGFuZCBtb2RpZmllcyBgbXB0Y3BfdG9rZW5fYWNjZXB0YCB0byBoYW5kbGUgZmFpbHVyZXMgYW5kIHJldHVybiBhIGJvb2xlYW4sIHdoaWNoIGlzIHRoZW4gY2hlY2tlZCBpbiBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgTVBUQ1Agc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzg3Y2UxZDlhNGYxNmZjMThiY2ZjOTI2YTQyOGRmMTZlODAyMmZjZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMTI6MDM6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaAppbmRleCA3MWI5ZmM1YTU3OTYzLi4wYTAyYWMxZWQyMmQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tcHRjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21wdGNwLmgKQEAgLTIyMyw2ICYjNDM7MjIzLDggQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywKIAkJCQkJICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lciwKIAkJCQkJICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTsKJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTsKIAogX19iZTMyIG1wdGNwX2dldF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKQEAgLTMwOSw2ICYjNDM7MzExLDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgX19iZTMyIG1wdGNwX3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAgeyByZXR1cm4gaHRvbmwoMHUpOyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTIxLDYgJiM0MzsyMSw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3hmcm0uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjcF9lY24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L21wdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2tfcmV1c2Vwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2FkZHJjb25mLmgmZ3Q7CiAKQEAgLTk2MSw2ICYjNDM7OTYyLDkgQEAgc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQlyY3VfYXNzaWduX3BvaW50ZXIodGNwX3NrKG5yZXEtJmd0O3NrKS0mZ3Q7ZmFzdG9wZW5fcnNrLCBucmVxKTsKIAl9CiAKJiM0MzsJaWYgKHJza19pc19tcHRjcChyZXEpKQomIzQzOwkJbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpOwomIzQzOwogCXJldHVybiBucmVxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IGNhNjQ0ZWM1M2VlZGIuLjA3ZWFhNjg1OGQwNTMgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0zNjA4LDE3ICYjNDM7MzYwOCwxOSBAQCBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJICovCiAJbXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0VTVEFCTElTSEVEKTsKIAomIzQzOwlpZiAoIW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKSkgewomIzQzOwkJbXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spOwomIzQzOwkJaW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2UobnNrKTsKJiM0MzsJCXRjcF9kb25lKG5zayk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwogCS8qIFRoZSBtc2sgbWFpbnRhaW4gYSByZWYgdG8gZWFjaCBzdWJmbG93IGluIHRoZSBjb25uZWN0aW9ucyBsaXN0ICovCiAJV1JJVEVfT05DRShtc2stJmd0O2ZpcnN0LCBzc2spOwogCXN1YmZsb3cgPSBtcHRjcF9zdWJmbG93X2N0eChzc2spOwogCWxpc3RfYWRkKCZhbXA7c3ViZmxvdy0mZ3Q7bm9kZSwgJmFtcDttc2stJmd0O2Nvbm5fbGlzdCk7CiAJc29ja19ob2xkKHNzayk7CiAKLQkvKiBuZXcgbXBjIHN1YmZsb3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBuZXdseQotCSAqIGNyZWF0ZWQgbXB0Y3Agc29ja2V0Ci0JICovCi0JbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spOwotCiAJLyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpCiAJICogdXNlcyB0aGUgY29ycmVjdCBkYXRhCiAJICovCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oCmluZGV4IDRhMmQ0MGNkN2IxMzIuLmM1OGNmYjEzMjZiNzMgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5oCkBAIC0xMDc0LDkgJiM0MzsxMDc0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogfQogCiBpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKJiM0Mzt2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7CiB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOwogaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spOwotdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLAomIzQzO2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqciwKIAkJCXN0cnVjdCBtcHRjcF9zb2NrICptc2spOwogYm9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKTsKIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF90b2tlbl9nZXRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0b2tlbik7CmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuYwppbmRleCA4ZTM4Njg5OWNlYjk4Li42NWQ4NzZhMDgyMzM4IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9zdWJmbG93LmMKQEAgLTQ3LDYgJiM0Mzs0NywxOSBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X3JlcV9kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIAltcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QocmVxKTsKIH0KIAomIzQzO3ZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxOwomIzQzOwomIzQzOwlzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpOwomIzQzOwomIzQzOwlpZiAoc3ViZmxvd19yZXEtJmd0O21zaykKJiM0MzsJCXNvY2tfaG9sZCgoc3RydWN0IHNvY2sgKilzdWJmbG93X3JlcS0mZ3Q7bXNrKTsKJiM0MzsKJiM0MzsJbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHJlcSwgbmV3X3JlcSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgc3ViZmxvd19nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5MiwgdTMyIG5vbmNlMSwgdTMyIG5vbmNlMiwKIAkJCQkgIHZvaWQgKmhtYWMpCiB7CmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW4uYyBiL25ldC9tcHRjcC90b2tlbi5jCmluZGV4IGYxYTUwZjM2N2FkZDguLjI0ODc3YTJjMzc3MjcgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC90b2tlbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC90b2tlbi5jCkBAIC0xODAsNiAmIzQzOzE4MCwzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxOwomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvczsKJiM0MzsJc3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0OwomIzQzOwomIzQzOwluZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTsKJiM0MzsKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKSB7CiYjNDM7CQltcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLSZndDt0b2tlbik7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkgewomIzQzOwkJbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtJmd0O3Rva2VuKTsKJiM0MzsJCWlmIChwb3MgPT0gc3ViZmxvd19yZXEpCiYjNDM7CQkJaGxpc3RfbnVsbHNfcmVwbGFjZV9pbml0X3JjdSgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlLAomIzQzOwkJCQkJCSAgICAgJmFtcDtuZXdfc3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpOwomIzQzOwkJZWxzZQomIzQzOwkJCW1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBtcHRjcF90b2tlbl9hY2NlcHQgLSByZXBsYWNlIGEgcmVxIHNrIHdpdGggZnVsbCBzb2NrIGluIHRva2VuIGhhc2gKICAqIEByZXE6IHRoZSByZXF1ZXN0IHNvY2tldCB0byBiZSByZW1vdmVkCkBAIC0xODcsMjQgJiM0MzsyMTcsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spCiAgKgogICogQ2FsbGVkIHdoZW4gYSBTWU4gcGFja2V0IGNyZWF0ZXMgYSBuZXcgbG9naWNhbCBjb25uZWN0aW9uLCBpLmUuCiAgKiBpcyBub3QgYSBqb2luIHJlcXVlc3QuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgb24gc3VjY2Vzcy4KICAqLwotdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7Ym9vbCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEsCiAJCQlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKQogewogCXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zOwogCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zazsKIAlzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7CiYjNDM7CWJvb2wgcmV0ID0gZmFsc2U7CiAKLQlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stJmd0O3NrX3Byb3QsIDEpOwogCWJ1Y2tldCA9IHRva2VuX2J1Y2tldChyZXEtJmd0O3Rva2VuKTsKIAlzcGluX2xvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmFtcDtyZXEtJmd0O3Rva2VuX25vZGUpKQomIzQzOwkJZ290byB1bmxvY2s7CiAKLQkvKiBwZWRhbnRpYyBsb29rdXAgY2hlY2sgZm9yIHRoZSBtb3ZlZCB0b2tlbiAqLwogCXBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS0mZ3Q7dG9rZW4pOwotCWlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSByZXEpKQotCQlobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoJmFtcDtyZXEtJmd0O3Rva2VuX25vZGUpOwomIzQzOwlpZiAocG9zICE9IHJlcSkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoJmFtcDtyZXEtJmd0O3Rva2VuX25vZGUpOwogCV9fc2tfbnVsbHNfYWRkX25vZGVfcmN1KChzdHJ1Y3Qgc29jayAqKW1zaywgJmFtcDtidWNrZXQtJmd0O21za19jaGFpbik7CiYjNDM7CXJldCA9IHRydWU7CiYjNDM7CiYjNDM7dW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay0mZ3Q7c2tfcHJvdCwgMSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbikKQEAgLTM1NSwxNiAmIzQzOzM5NywyMSBAQCB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7CiAJc3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0OwogCi0JaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKQomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpCiAJCXJldHVybjsKIAogCWJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS0mZ3Q7dG9rZW4pOwogCXNwaW5fbG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwogCXBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLSZndDt0b2tlbik7Ci0JaWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHN1YmZsb3dfcmVxKSkgewomIzQzOwlpZiAocG9zID09IHN1YmZsb3dfcmVxKSB7CiAJCWhsaXN0X251bGxzX2RlbF9pbml0X3JjdSgmYW1wO3Bvcy0mZ3Q7dG9rZW5fbm9kZSk7CiAJCWJ1Y2tldC0mZ3Q7Y2hhaW5fbGVuLS07CiAJfQomIzQzOwomIzQzO3VubG9jazoKIAlzcGluX3VubG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jCmluZGV4IDRmYzM5ZmEyZTI2MmQuLmJlOWFjY2U4YTU2NzMgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYwpAQCAtOTksNyAmIzQzOzk5LDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9hY2NlcHQoc3RydWN0IGt1bml0ICp0ZXN0KQogCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLAogCQkJbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTsKIAltc2stJmd0O3Rva2VuID0gcmVxLSZndDt0b2tlbjsKLQltcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spOwomIzQzOwlLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTsKIAlLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIG1zaywgbXB0Y3BfdG9rZW5fZ2V0X3NvY2soJmFtcDtpbml0X25ldCwgbXNrLSZndDt0b2tlbikpOwogCiAJLyogdGhpcyBpcyBub3cgYSBuby1vcCAqLwpAQCAtMTIyLDcgJiM0MzsxMjIsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2Rlc3Ryb3llZChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIDAsCiAJCQltcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpOwogCW1zay0mZ3Q7dG9rZW4gPSByZXEtJmd0O3Rva2VuOwotCW1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7CiYjNDM7CUtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpOwogCiAJLyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovCiAJcmVmY291bnRfc2V0KCZhbXA7c2stJmd0O3NrX3JlZmNudCwgMCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNUFRDUCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgTVBUQ1Agc3Vic3lzdGVtIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgdGFja2xpbmcgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGFnYWluLCBpbnRlcmVzdGluZy4mIzM0OyBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBpcyBhcm91bmQgaG93IHJlcXVlc3Qgc29ja2V0cyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgLCB3aGljaCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgaW5ldF9yZXFza19jbG9uZWAuIFRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZOKAlGhvdyB0aGUgcmVxdWVzdCBzb2NrZXRzIGFyZSBiZWluZyBjbG9uZWQgYW5kIG1hbmFnZWQgYWNyb3NzIHN1YmZsb3dzIHdpdGhpbiB0aGUgTVBUQ1AgZnJhbWV3b3JrLgoKVGhlbiBJIHNlZSBjaGFuZ2VzIHRvIGBtcHRjcF90b2tlbl9hY2NlcHRgLCBzaGlmdGluZyBpdHMgcmV0dXJuIHRvIGEgYm9vbGVhbiBhbmQgaW5jb3Jwb3JhdGluZyBmYWlsdXJlIGhhbmRsaW5nLiBUaGlzIGlzIGNyaXRpY2FsLiBOb3cgdGhlIGNsb25pbmcgaW5pdCBmdW5jdGlvbiwgYG1wdGNwX3NrX2Nsb25lX2luaXRgLCBpcyBnb2luZyB0byBiZSBkZXBlbmRlbnQgb24gdGhlIGJvb2xlYW4gdmFsdWUgcmV0dXJuZWQgZnJvbSBgbXB0Y3BfdG9rZW5fYWNjZXB0YC4gQW55IHRpbWUgeW91IGFsdGVyIGEgcmV0dXJuIHR5cGUgdG8gaW5jb3Jwb3JhdGUgZmFpbHVyZSBzdGF0ZXMsIHlvdSBuZWVkIHRvIGVuc3VyZSBldmVyeSBzaW5nbGUgY2FsbCBzaXRlIGNvcnJlY3RseSBwcm9jZXNzZXMgdGhlIGFkZGVkIGNvbXBsZXhpdHkuIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSwgaGFyZC10by1kZWJ1ZyBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgY2FyZWZ1bGx5LgoKSSBhbHNvIHNwb3QgbW9kaWZpY2F0aW9ucyB0byBgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0YCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZXNlIG1vcmUgY2xvc2VseSB0byBncmFzcCB0aGUgbG9naWMgYmVoaW5kIGl0LCBidXQgaXQgc2VlbXMgbGlrZSB0aGlzIGlzIGFib3V0IHJlc291cmNlIG1hbmFnZW1lbnQuIExpa2VseSBtb3Zpbmcgb3IgZGVzdHJveWluZyB0b2tlbnMgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3Qgc29ja2V0cyBhcyBwYXJ0IG9mIHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4KClRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGVzZSBzZWVtIHRvIGJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgYW5kIHRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNvIHRoaXMgd2lsbCBhZmZlY3QgdGhlIG92ZXJhbGwgTVBUQ1AgZnVuY3Rpb25hbGl0eS4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBpbXBhY3RpbmcgdGhlIGNvcmUgc3RhY2ssIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIE1QVENQIGNvbmZpZ3VyYXRpb25zIGFyZSB3aGF0IEkmIzM5O20gZXhwZWN0aW5nLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgTVBUQ1AsIHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgaXMgY29uZmlndXJlZCBjb3JyZWN0bHksIGFuZCBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgbmVlZCB0byBiZSB2ZXJpZmllZCBvciBhZGp1c3RlZC4gU28sIGxldCYjMzk7cyBzdGFydCBzZWFyY2hpbmcgZm9yIE1QVENQIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVBUQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWctMS1cbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1Rcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTI1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gYE1QVENQYC4gQWxyaWdodCwgdGhhdCBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjaG9pY2UuIEl0IGltbWVkaWF0ZWx5IHJhaXNlcyBxdWVzdGlvbnMgaW4gbXkgbWluZDogV2hhdCBvdGhlciBuZXR3b3JrIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQgYXJvdW5kIE1QVENQPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzIGxvYWRlZCBhbmQgYWN0aXZlIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBhcnRpY3VsYXIgTVBUQ1Agc2V0dXA/IFdoYXQgYWJvdXQgdGhlIHJvdXRpbmcgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgbWVudGFsbHkgbWFwIG91dCB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb25mbGljdHMgb3Igb3ZlcnNpZ2h0cy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGNoZWNrLiBJIG5lZWQgdG8gZW5zdXJlIGFsbCB0aGUgcHJlcmVxdWlzaXRlcyBhcmUgbWV0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWctMS1cbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1Rcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTUwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXBlbmRlbmN5IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3IgTXVsdGlwYXRoIFRDUCBhcmUgZGVmaW5lZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCByaWdodD8gQ2hlY2tpbmcgS2NvbmZpZyBmaXJzdCBtYWtlcyB0aGUgbW9zdCBzZW5zZS4gSXQmIzM5O2xsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIHJlcXVpcmVkIGJlZm9yZSBJIGNhbiB0cnVseSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBwb3J0aW9ucy4gSXQgYWxzbyBhdm9pZHMgbWUgZ29pbmcgZG93biBhbnkgYmxpbmQgYWxsZXlzIG9mIGludmVzdGlnYXRpbmcgdGhpbmdzIHRoYXQgYXJlIG9idmlvdXNseSBnb2luZyB0byBiZSB1bmF2YWlsYWJsZSBiZWNhdXNlIGRlcGVuZGVuY2llcyBhcmUgdW5tZXQuIFRoaXMgYXBwcm9hY2ggc2hvdWxkIHNhdmUgbWUgdGltZSBpbiB0aGUgbG9uZyBydW4uIEdvb2QgcGxhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0XG4gICAyOlx0Y29uZmlnIE1QVENQXG4gICAzOlx0XHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDU6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcbiAgMTA6XHRcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcbiAgMTE6XHRcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxuICAxMjpcdFx0ICBNUFRDUC5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBNUFRDUFxuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcbiAgMTc6XHRcdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4gIDE4Olx0XHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIE1QVENQX0lQVjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDAwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQW5hbHl6aW5nIE1QVENQIENvbmZpZ3VyYXRpb24gYW5kIFNvY2tldCBDbG9uaW5nKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYE1QVENQYCBjb25maWd1cmF0aW9uIGhlcmUsIGFuZCB0aGlua2luZyB0aGF0IGBNUFRDUF9JUFY2YCBjb3VsZCBwb3RlbnRpYWxseSBiZSByZWxldmFudCBhcyB3ZWxsLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHNldHRpbmdzIGltcGFjdCBjb25uZWN0aW9uIGhhbmRsaW5nLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMuIE15IHBsYW4gaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgLCBiZWNhdXNlIEkgcmVtZW1iZXIgdGhhdCYjMzk7cyB3aGVyZSBhIGNydWNpYWwgZnVuY3Rpb24sIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCwgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aGluIHRoZSBJUHY0IGNvbm5lY3Rpb24gcHJvY2Vzcy4gVGhhdCYjMzk7bGwgdGVsbCBtZSBob3cgdGhlIG11bHRpLXBhdGggVENQIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZCwgYW5kIGhvdyB0aGUgc3ViZmxvdyBjbG9uaW5nIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9OTE0PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTk2NS1cdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6OTY2Olx0XHRtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHJlcSwgbnJlcSk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTk2Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQwNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEluZXQgUmVxdWVzdCBTb2NrZXQgQ2xvbmUqKgoKQWxyaWdodCwgc28gYGluZXRfcmVxc2tfY2xvbmVgIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUmIzM5O3MgdGhpcyBmdW5jdGlvbiAqYWN0dWFsbHkqIGJlaW5nIGNhbGxlZD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbCBjaGFpbiBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIHdpdGhpbiB0aGUgSVAgc3RhY2suIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRvIGZpZ3VyZSBvdXQgdGhlIHNjZW5hcmlvcyB3aGVyZSByZXF1ZXN0IHNvY2tldHMgYXJlIGJlaW5nIGNsb25lZCwgYW5kIHdoeS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGtleSB0byBhIG1lYW5pbmdmdWwgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfcmVxc2tfY2xvbmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz05MDU9dm9pZCBfX3JlcXNrX2ZyZWUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtOTEzLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo5MTQ6c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05MTUtXHRcdFx0XHRcdCAgICAgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzNz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTA1My1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTA1NDpcdFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBuc2spO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMDU1LVx0XHRpZiAoIW5yZXEpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDIxPXN0cnVjdCBzb2NrICppbmV0X2Nza19jb21wbGV0ZV9oYXNoZGFuY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqY2hpbGQsXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM0LVx0XHRcdC8qIGhvbGQgYSByZWZjbnQgZm9yIHRoZSBucmVxLVx1MDAzZXJza19saXN0ZW5lclxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDM1Olx0XHRcdCAqIHdoaWNoIGlzIGFzc2lnbmVkIGluIGluZXRfcmVxc2tfY2xvbmUoKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM2LVx0XHRcdCAqL1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM3LVx0XHRcdHNvY2tfaG9sZChzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjE0Mzg6XHRcdFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0MzktXHRcdFx0aWYgKCFucmVxKSB7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDcwPXZvaWQgaW5ldF9jc2tfbGlzdGVuX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQ5NC1cdFx0aWYgKG5zaykge1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDk1Olx0XHRcdG5yZXEgPSBpbmV0X3JlcXNrX2Nsb25lKHJlcSwgbnNrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQ5Ni1cdFx0XHRpZiAobnJlcSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTYzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgSW50ZXJhY3Rpb25zIEJldHdlZW4gVENQIFJlcXVlc3QgQ2xvbmVzIGFuZCBNUFRDUCBUb2tlbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJIHNlZSBgaW5ldF9yZXFza19jbG9uZWAgaXMgdHJpZ2dlcmVkIGZyb20gYSBmZXcgZGlmZmVyZW50IHBsYWNlczogdGhlIGByZXFza190aW1lcl9oYW5kbGVyYCwgYGluZXRfY3NrX2NvbXBsZXRlX2hhc2hkYW5jZWAsIGFuZCBhbHNvIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIFRoYXQgbWVhbnMgYW55IGludGVyYWN0aW9ucyB3aXRoIE1QVENQIGhhdmUgYSBzdHJvbmcgcG9zc2liaWxpdHkgb2YgcnVubmluZyBpbnRvIGlzc3VlcyB3aXRoIHN0YW5kYXJkIFRDUCByZXF1ZXN0IGNsb25lcy4KCk15IG5leHQgc3RlcCBpcyB0byBsb29rIGF0IHRoZSByZWNlbnQgY2hhbmdlcyByZWxhdGVkIHRvIHRva2VuIGhhbmRsaW5nIGluIHRoZSBNUFRDUCBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGNoZWNrIHRoZSBmdW5jdGlvbnMgbW9kaWZpZWQgaW4gYG5ldC9tcHRjcC90b2tlbi5jYDogYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9hY2NlcHRgLCBhbmQgYG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdGAuIFRoZXNlIGFyZSBhbGwgZmFpcmx5IGNvcmUgb3BlcmF0aW9ucyBmb3IgdG9rZW4gbWFuYWdlbWVudCwgc28gYW55IGludGVycGxheSB3aXRoIHJlcXVlc3QgY2xvbmluZyBoZXJlIGlzIGdvaW5nIHRvIGJlIGNyaXRpY2FsLgoKVGhlbiwgdGhlcmUmIzM5O3MgYG5ldC9tcHRjcC9wcm90b2NvbC5jYCB0byBjb25zaWRlciwgYW5kIHNwZWNpZmljYWxseSwgYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGlzIG9uZSBpcyBwb3RlbnRpYWxseSB2ZXJ5IGludGVyZXN0aW5nLiBJdCYjMzk7cyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgYSBzb2NrZXQgY2xvbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBtcHRjcF9za19jbG9uZV9pbml0YCB3b3JrcyBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBXaGF0IGlzIHRoZSBjbG9uaW5nIGxvZ2ljIGFuZCB3aGF0IHBhcnRzIG9mIE1QVENQIGFyZSBiZWluZyBjbG9uZWQ/IEFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgc3RhbmRhcmQgVENQIGNsb25pbmcgcHJvY2VzcyB0cmlnZ2VyZWQgYnkgYGluZXRfcmVxc2tfY2xvbmVgPyBJIG5lZWQgdG8gYW5hbHl6ZSBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgaW4gZGV0YWlsLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgYmVzdCB1bmRlcnN0YW5kaW5nIG9mIGFueSBwb3RlbnRpYWwgaXNzdWVzIGFuZCBpZGVudGlmeSB3aGVyZSB0byBmb2N1cyBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3Bfc2tfY2xvbmVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTM1Mzg9c3RhdGljIHZvaWQgbXB0Y3BfY29weV9pcF9vcHRpb25zKHN0cnVjdCBzb2NrICpuZXdzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1NTctXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNTU4OnN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1NTktXHRcdFx0XHQgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgQ2FsbHNpdGVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtZSwgaXQmIzM5O3MgaW52b2x2ZWQgaW4gY2xvbmluZyBvciBpbml0aWFsaXppbmcgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIHNvY2tldCBzdHJ1Y3R1cmVzLiBLbm93aW5nIHRoZSBjYWxsIGhpZXJhcmNoeSB3aWxsIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGVzZSBjbG9uZXMgYXJlIGJlaW5nIGNyZWF0ZWQgYW5kIGNvbmZpZ3VyZWQsIGFuZCB0byBwcm9wZXJseSBkZWJ1ZyBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHRvb2xzLCBsaWtlbHkgYSBjb21iaW5hdGlvbiBvZiBzdGF0aWMgYW5hbHlzaXMgKGxpa2UgYGNzY29wZWAgb3IgYGNsYW5nZGApIGFuZCBkeW5hbWljIGFuYWx5c2lzIChtYXliZSBgcGVyZmAgb3IgYGZ0cmFjZWAgaWYgc3RhdGljIGFuYWx5c2lzIGlzIGluc3VmZmljaWVudCksIHRvIHF1aWNrbHkgbWFwIG91dCB0aGUgZnVuY3Rpb24mIzM5O3MgdXNhZ2UuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNyaXRpY2FsIHBvaW50cywgbGlrZSB3aXRoaW4gdGhlIHNvY2tldCBjcmVhdGlvbiBwYXRoLCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIG9yIHBlcmhhcHMgZHVyaW5nIGFkZHJlc3MgZmFpbG92ZXIgc2NlbmFyaW9zLiBJIGFudGljaXBhdGUgZW5jb3VudGVyaW5nIG90aGVyIE1QVENQLXNwZWNpZmljIGZ1bmN0aW9ucyBpbiB0aGUgY2FsbCBncmFwaC4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3NrX2Nsb25lX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MzUzOD1zdGF0aWMgdm9pZCBtcHRjcF9jb3B5X2lwX29wdGlvbnMoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU1Ny1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NTg6c3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU1OS1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTkxNT12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZCk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtOTE3LVxubmV0L21wdGNwL3Byb3RvY29sLmg6OTE4OnN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTkxOS1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9ODE5PXN0YXRpYyBzdHJ1Y3Qgc29jayAqc3ViZmxvd19zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg5NS1cdFx0aWYgKGN0eC1cdTAwM2VtcF9jYXBhYmxlKSB7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjg5NjpcdFx0XHRjdHgtXHUwMDNlY29ubiA9IG1wdGNwX3NrX2Nsb25lX2luaXQobGlzdGVuZXItXHUwMDNlY29ubiwgXHUwMDI2bXBfb3B0LCBjaGlsZCwgcmVxKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtODk3LVx0XHRcdGlmICghY3R4LVx1MDAzZWNvbm4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MDMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNUFRDUCBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQgUGF0aCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGhvdyBNUFRDUCBjb25uZWN0aW9ucyBhcmUgZXN0YWJsaXNoZWQsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBzdWJmbG93X3N5bl9yZWN2X3NvY2tgIGNhbGwsIHdoZXJlIGBtcHRjcF9za19jbG9uZV9pbml0YCBpcyBpbnZva2VkLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBub3cgcmV0dXJucyBhIGJvb2xlYW4sIGFuZCBpZiBpdCBmYWlscywgaXQgdHJpZ2dlcnMgdGhlIGNsZWFudXAgd2l0aGluIGBtcHRjcF9za19jbG9uZV9pbml0YCBhbmQgcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIGV4cGxvcmUgdGhpcyBjaGFuZ2UgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLgoKTXkgZm9jdXMgc3ltYm9scyBhcmU6IGBtcHRjcF9za19jbG9uZV9pbml0YCwgYG1wdGNwX3Rva2VuX2FjY2VwdGAsIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0YCwgYW5kIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYC4KCkdvb2QsIGl0IHNlZW1zIHRoZXNlIHN5bWJvbHMgYXJlICpub3QqIHN0YXRpYywgd2hpY2ggZ2l2ZXMgdXMgbW9yZSBlbnRyeSBwb2ludHMuIEFuZCwgdGhleSYjMzk7cmUgZ2xvYmFsIHRvIHRoZSBNUFRDUCBzdWJzeXN0ZW0uIFRoaXMgbWVhbnMgdGhleSBhcmUgYWNjZXNzaWJsZSBmcm9tIHZhcmlvdXMgcGFydHMgb2YgdGhlIGtlcm5lbCwgaW5jcmVhc2luZyB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLgoKTm93IEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIHNwZWNpZmljYWxseSwgYW5kIGhvdyBpdCBpcyBpbXBsZW1lbnRlZCBpbiBgbmV0L21wdGNwL3N1YmZsb3cuY2AuIEl0IGlzIGxpa2VseSB0aGUgcGxhY2Ugd2hlcmUgdGhlIG5ldyByZXR1cm4gcGF0aCBmcm9tIGBtcHRjcF90b2tlbl9hY2NlcHRgIHdvdWxkIGJlIG1vc3QgcmVsZXZhbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc3ViZmxvdy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zdWJmbG93LmM9Mzg9c3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy00OS1cbm5ldC9tcHRjcC9zdWJmbG93LmM6NTA6dm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNTEtXHRcdFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkFuYWx5emluZyB0aGUgRHluYW1pYyBOYXR1cmUgb2YgVGhpcyoqCgpSaWdodCwgdGhpcyBpc24mIzM5O3QgYSBzaW1wbGUsIHN0YXRpYyBzaXR1YXRpb24uIEl0JiMzOTtzIGNsZWFybHkgY2hhbmdpbmcgYW5kIHJlcXVpcmVzIGEgZHluYW1pYyBhcHByb2FjaCB0byB1bmRlcnN0YW5kIGl0IGZ1bGx5LiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgc3BlY2lmaWMgZnVuY3Rpb246IGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgIHdpdGhpbiB0aGUgYG5ldC9tcHRjcC90b2tlbi5jYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGlzIG1vdmluZy10b2tlbiBzeXN0ZW0uIExldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGF0IGZ1bmN0aW9uJiMzOTtzIHNwZWNpZmljcy4uLiBpdCYjMzk7cyBiZWVuIGEgd2hpbGUsIGJ1dCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlbGF0ZWQgdG8gdG9rZW4gbWlncmF0aW9uIHNob3VsZCByZXNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC90b2tlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC90b2tlbi5jPTE1MT1pbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvdG9rZW4uYy0xODItXG5uZXQvbXB0Y3AvdG9rZW4uYzoxODM6dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L21wdGNwL3Rva2VuLmMtMTg0LVx0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjM5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTVBUQ1AgVG9rZW4gQWNjZXB0YW5jZSoqCgpSaWdodCwgdGhpcyBpc24mIzM5O3QgYSBzaW1wbGUsIHN0YXRpYyBzdGF0ZS4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGR5bmFtaWMuIFRoZSBrZXkgbGllcyBpbiBob3cgTVBUQ1AgdG9rZW5zIGFyZSBhY2NlcHRlZCBhbmQgaGFuZGxlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIGRpcmVjdGx5LiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGBtcHRjcF90b2tlbl9hY2NlcHRgIGZ1bmN0aW9uLCB3aGljaCBJICprbm93KiByZXNpZGVzIHdpdGhpbiBgbmV0L21wdGNwL3Rva2VuLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgYWNjZXB0YW5jZSBsb2dpYyBpcyBnb2luZyB0byBiZS4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHRoZSBjb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF90b2tlbl9hY2NlcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvdG9rZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvdG9rZW4uYz0xODM9dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC90b2tlbi5jLTIxMy0vKipcbm5ldC9tcHRjcC90b2tlbi5jOjIxNDogKiBtcHRjcF90b2tlbl9hY2NlcHQgLSByZXBsYWNlIGEgcmVxIHNrIHdpdGggZnVsbCBzb2NrIGluIHRva2VuIGhhc2hcbm5ldC9tcHRjcC90b2tlbi5jLTIxNS0gKiBAcmVxOiB0aGUgcmVxdWVzdCBzb2NrZXQgdG8gYmUgcmVtb3ZlZFxuLS1cbm5ldC9tcHRjcC90b2tlbi5jLTIyMi0gKi9cbm5ldC9tcHRjcC90b2tlbi5jOjIyMzpib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbm5ldC9tcHRjcC90b2tlbi5jLTIyNC1cdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC90b2tlbi5jPTQ2Nz1FWFBPUlRfU1lNQk9MX0dQTChtcHRjcF90b2tlbl9uZXdfY29ubmVjdCk7XG5uZXQvbXB0Y3AvdG9rZW4uYzo0Njg6RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3BfdG9rZW5fYWNjZXB0KTtcbm5ldC9tcHRjcC90b2tlbi5jLTQ2OS1FWFBPUlRfU1lNQk9MX0dQTChtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE0MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgRHluYW1pYyBOYXR1cmUgb2YgVG9rZW5zKioKClJpZ2h0LCBub3QgYSBzdGF0aWMgc2l0dWF0aW9uIGF0IGFsbC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCYjMzk7cyBjaGFuZ2luZy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGlzIHRva2VuIGRlc3RydWN0aW9uIGlzIGhhbmRsZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzLCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdGAgZnVuY3Rpb24uIFRoYXQgZnVuY3Rpb24gbGl2ZXMgaW4gYG5ldC9tcHRjcC90b2tlbi5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBiZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGR5bmFtaWMgYmVoYXZpb3Igd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Rva2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Rva2VuLmM9Mzg2PUVYUE9SVF9TWU1CT0xfR1BMKG1wdGNwX3Rva2VuX2l0ZXJfbmV4dCk7XG4tLVxubmV0L21wdGNwL3Rva2VuLmMtMzg4LS8qKlxubmV0L21wdGNwL3Rva2VuLmM6Mzg5OiAqIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdCAtIHJlbW92ZSBtcHRjcCBjb25uZWN0aW9uL3Rva2VuXG5uZXQvbXB0Y3AvdG9rZW4uYy0zOTAtICogQHJlcTogbXB0Y3AgcmVxdWVzdCBzb2NrZXQgZHJvcHBpbmcgdGhlIHRva2VuXG4tLVxubmV0L21wdGNwL3Rva2VuLmMtMzkzLSAqL1xubmV0L21wdGNwL3Rva2VuLmM6Mzk0OnZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbm5ldC9tcHRjcC90b2tlbi5jLTM5NS17XG4tLVxubmV0L21wdGNwL3Rva2VuLmM9NDY4PUVYUE9SVF9TWU1CT0xfR1BMKG1wdGNwX3Rva2VuX2FjY2VwdCk7XG5uZXQvbXB0Y3AvdG9rZW4uYzo0Njk6RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KTtcbm5ldC9tcHRjcC90b2tlbi5jLTQ3MC1FWFBPUlRfU1lNQk9MX0dQTChtcHRjcF90b2tlbl9kZXN0cm95KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTVBUQ1AgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhpcyBpc24mIzM5O3QgYSBzdGF0aWMgc2l0dWF0aW9uLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgTVBUQ1AgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSwgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBtcHRjcF9za19jbG9uZV9pbml0YCwgYG1wdGNwX3Rva2VuX2FjY2VwdGAsIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0YCwgYW5kIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYC4KCk5vdyBmb3IgdGhlIGNvbmZpZyBvcHRpb25zLCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGRlZmluaXRlbHkgbmVlZCBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAuIEJ1dCBiZWZvcmUgSSBzaWduIG9mZiBvbiB0aGF0LCBJIHNob3VsZCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlsZS4KCkFscmlnaHQsIGhlcmUgaXQgaXM6CmBgYApjb25maWcgTVBUQ1AKCWJvb2wgJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUCYjMzQ7CglkZXBlbmRzIG9uIElORVQKCXNlbGVjdCBTS0JfRVhURU5TSU9OUwoJc2VsZWN0IENSWVBUT19MSUJfU0hBMjU2CglzZWxlY3QgQ1JZUFRPX0xJQl9VVElMUwpgYGAKU28sIGxvb2tzIGxpa2UganVzdCBgTVBUQ1BgIGlzIHRoZSBlc3NlbnRpYWwgb25lLiBUaGUgc2VsZWN0cyBhcmUgYWxsIHRha2VuIGNhcmUgb2YgaW4gdGhvc2Ugb3B0aW9ucy4gYE1QVENQX0lQVjZgIGlzIGFsc28gYSBnb29kIGlkZWEgZm9yIElQdjYgc3VwcG9ydCwgc28gSSYjMzk7bGwgaW5jbHVkZSB0aGF0IGFzIHdlbGwuIEJ1dCB3YWl0LCBgTVBUQ1BfSVBWNmAgZGVwZW5kcyBvbiBgSVBWNmAsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgZGVwZW5kZW5jeSBpbiBtaW5kLiBKdXN0IHRvIGJlIHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgbmV0L21wdGNwL0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVBUQ1BfSVBWNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM1NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWx2aW5nIGludG8gdGhlIE1QVENQIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtUaW1lIHRvIGRpZyBpbnRvIHRoZSByZXN0IG9mIHRoZSBgbmV0L21wdGNwL0tjb25maWdgIGZpbGUuJiMzNDsgSSYjMzk7bSBvYnZpb3VzbHkgZmFtaWxpYXIgd2l0aCBNUFRDUCBhbmQgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eSwgc28gSSYjMzk7bSBsaWtlbHkgbm90IG5lZWRpbmcgYSBwcmltZXIuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3Igc29tZXRoaW5nIHNwZWNpZmljLiBQZXJoYXBzIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGEgbmV3IGZlYXR1cmUgSSYjMzk7bSBldmFsdWF0aW5nIG9yIGRlYnVnZ2luZy4gTWF5YmUgSSBuZWVkIHRvIGdyYXNwIGhvdyBjZXJ0YWluIGRlcGVuZGVuY2llcyB3b3JrIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLCBvciBpZGVudGlmeSB3aGljaCBzcGVjaWZpYyBLY29uZmlnIHN5bWJvbHMgY29udHJvbCBhIHBhcnRpY3VsYXIgcGFyYW1ldGVyIG9yIGJlaGF2aW9yLiBJIGNvdWxkIGJlIHRyYWNpbmcgdGhlIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgb2YgY2VydGFpbiBNUFRDUCBmZWF0dXJlcy4gT3IgSSBtaWdodCBiZSByZXNlYXJjaGluZyBwb3RlbnRpYWwgY29uZmxpY3RzIGJldHdlZW4gdmFyaW91cyBNUFRDUCBtb2R1bGVzIG9yIHRoZWlyIGludGVyYWN0aW9uIHdpdGggb3RoZXIgbmV0d29ya2luZyBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBsaWtlbHkgYmUgc2Nhbm5pbmcgZm9yIHJlbGV2YW50IG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgdmFsdWVzIOKAkyBhbGwgd2l0aCB0aGUgZ29hbCBvZiBnZXR0aW5nIGEgY29tcGxldGUgYW5kIHByZWNpc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBLY29uZmlnIGNvbmZpZ3VyYXRpb24gc3BhY2UuIFRoZSBnb2FsIGlzIHRvIGRlZXBseSBjb21wcmVoZW5kIHRoZSBjb25maWd1cmFibGUgYXNwZWN0cyBvZiB0aGUgTVBUQ1AgaW1wbGVtZW50YXRpb24gc28gSSBjYW4gZWZmaWNpZW50bHkgZGlhZ25vc2UsIG1vZGlmeSBvciB1c2UgdGhlIHNvZnR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcbiAgMTc6XHRcdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4gIDE4Olx0XHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIE1QVENQX0lQVjZcbiAgMjE6XHRcdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAyMjpcdFx0ZGVwZW5kcyBvbiBJUFY2PXlcbiAgMjM6XHRcdGRlZmF1bHQgeVxuICAyNDpcdFxuICAyNTpcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG4gIDI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBLVU5JVFxuICAyODpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMjk6XHRcdGhlbHBcbiAgMzA6XHRcdCAgQ3VycmVudGx5IGNvdmVycyB0aGUgTVBUQ1AgY3J5cHRvIGFuZCB0b2tlbiBoZWxwZXJzLlxuICAzMTpcdFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcbiAgMzI6XHRcdCAgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvbiBidWlsZC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCBwbGVhc2UgcmVmZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MzQKCQkJCQkJCW91dHB1dDogMjA4CgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIE1QVENQIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0YXJnZXRpbmcgTVBUQ1AsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyBpdC4gSSBzZWUgdGhhdCBgTVBUQ1BfSVBWNmAgcmVsaWVzIG9uIGBJUFY2PXlgLCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIGluY2x1ZGUgYm90aCBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAgaW4gbXkgY29uZmlndXJhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhbHRlcmluZyB0aGUgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MsIHBhcnRpY3VsYXJseSBob3cgcmVxdWVzdCBzb2NrZXRzIGFyZSBjbG9uZWQgYW5kIGhvdyB0b2tlbnMgYXJlIGhhbmRsZWQgZHVyaW5nIHNldHVwLiBJdCBpbnRyb2R1Y2VzIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgdG8gcmV0dXJuIGEgYm9vbGVhbiwgd2hpY2ggcmVmbGVjdHMgaG93IGZhaWx1cmVzIGluIGBtcHRjcF9za19jbG9uZV9pbml0YCBhcmUgbWFuYWdlZC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGltcGFjdGluZyBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuCgpNeSB0aGlua2luZyBpcywgaXMgYG1wdGNwX3NrX2Nsb25lX2luaXRgIGEgZ29vZCBzdGFydGluZyBwb2ludD8gSXQmIzM5O3MgY2FsbGVkIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIHdoaWNoIGlzbiYjMzk7dCB0aGUgbW9zdCBoaWdoLXZvbHVtZSBjb2RlIHBhdGggbGlrZSBwYWNrZXQgcHJvY2Vzc2luZywgYnV0IGl0JiMzOTtzICpjcml0aWNhbCogdG8gdGhlIGNvbm5lY3Rpb24gc2V0dXAgcHJvY2Vzcy4gRGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGF0LiBgbXB0Y3BfdG9rZW5fYWNjZXB0YCwgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3RgLCBhbmQgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIOKAkyBhbGwgb2YgdGhlc2UgbG9vayBsaWtlIHNvbGlkIGZvY3VzIHN5bWJvbHMuIFRoZXkmIzM5O3JlIGFsbCB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIG1vZGlmaWVkIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBsb2dpYy4KCkFscmlnaHQsIHdpdGggdGhhdCBhbmFseXNpcyBkb25lLCBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZCBhbmQgc3RhcnQgc2V0dGluZyB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCB3aXRoIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3Bfc2tfY2xvbmVfaW5pdCYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9hY2NlcHQmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDttcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcGF0aCwgc3BlY2lmaWNhbGx5IGhvdyByZXF1ZXN0IHNvY2tldHMgYXJlIGNsb25lZCBhbmQgaG93IHRva2VucyBhcmUgbWFuYWdlZCBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cC4gSXQgaW50cm9kdWNlcyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgYW5kIG1vZGlmaWVzIGBtcHRjcF90b2tlbl9hY2NlcHRgIHRvIGhhbmRsZSBmYWlsdXJlcyBhbmQgcmV0dXJuIGEgYm9vbGVhbiwgd2hpY2ggaXMgdGhlbiBjaGVja2VkIGluIGBtcHRjcF9za19jbG9uZV9pbml0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBNUFRDUCBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9za19jbG9uZV9pbml0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2FjY2VwdCYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwYXRoLCBzcGVjaWZpY2FsbHkgaG93IHJlcXVlc3Qgc29ja2V0cyBhcmUgY2xvbmVkIGFuZCBob3cgdG9rZW5zIGFyZSBtYW5hZ2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLiBJdCBpbnRyb2R1Y2VzIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgdG8gaGFuZGxlIGZhaWx1cmVzIGFuZCByZXR1cm4gYSBib29sZWFuLCB3aGljaCBpcyB0aGVuIGNoZWNrZWQgaW4gYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIE1QVENQIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIGR1cmluZyBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjAzOjUzLjk0MzYwMDUzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzUzNDc3Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCIsXG4gICAgXCJNUFRDUF9JUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3Bfc2tfY2xvbmVfaW5pdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fYWNjZXB0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RcIixcbiAgICBcIm1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdFwiLFxuICAgIFwibXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcGF0aCwgc3BlY2lmaWNhbGx5IGhvdyByZXF1ZXN0IHNvY2tldHMgYXJlIGNsb25lZCBhbmQgaG93IHRva2VucyBhcmUgbWFuYWdlZCBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cC4gSXQgaW50cm9kdWNlcyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgYW5kIG1vZGlmaWVzIGBtcHRjcF90b2tlbl9hY2NlcHRgIHRvIGhhbmRsZSBmYWlsdXJlcyBhbmQgcmV0dXJuIGEgYm9vbGVhbiwgd2hpY2ggaXMgdGhlbiBjaGVja2VkIGluIGBtcHRjcF9za19jbG9uZV9pbml0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBNUFRDUCBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjAzOjUzLjk0MzYxMDMwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMzM2NTkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM4N2NlMWQ5YTRmMTZmYzE4YmNmYzkyNmE0MjhkZjE2ZTgwMjJmY2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAxMjowMzo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxcbmluZGV4IDcxYjlmYzVhNTc5NjMuLjBhMDJhYzFlZDIyZDkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxcbisrKyBiL2luY2x1ZGUvbmV0L21wdGNwLmhcXG5AQCAtMjIzLDYgKzIyMyw4IEBAIGludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTtcXG4rdm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpO1xcbiBcXG4gX19iZTMyIG1wdGNwX2dldF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbkBAIC0zMDksNiArMzExLDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcXG4re1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX2FjdGl2ZV9kZXRlY3RfYmxhY2tob2xlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBleHBpcmVkKSB7IH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG5pbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXFxuQEAgLTIxLDYgKzIxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC94ZnJtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwX2Vjbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L21wdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9hZGRyY29uZi5oXFx1MDAzZVxcbiBcXG5AQCAtOTYxLDYgKzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVxcdTAwM2VzayktXFx1MDAzZWZhc3RvcGVuX3JzaywgbnJlcSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcXG4rXFx0XFx0bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpO1xcbitcXG4gXFx0cmV0dXJuIG5yZXE7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCBjYTY0NGVjNTNlZWRiLi4wN2VhYTY4NThkMDUzIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMzYwOCwxNyArMzYwOCwxOSBAQCBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdCAqL1xcbiBcXHRtcHRjcF9zZXRfc3RhdGUobnNrLCBUQ1BfRVNUQUJMSVNIRUQpO1xcbiBcXG4rXFx0aWYgKCFtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zaykpIHtcXG4rXFx0XFx0bXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spO1xcbitcXHRcXHRpbmV0X2Nza19wcmVwYXJlX2ZvcmNlZF9jbG9zZShuc2spO1xcbitcXHRcXHR0Y3BfZG9uZShuc2spO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4gXFx0LyogVGhlIG1zayBtYWludGFpbiBhIHJlZiB0byBlYWNoIHN1YmZsb3cgaW4gdGhlIGNvbm5lY3Rpb25zIGxpc3QgKi9cXG4gXFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWZpcnN0LCBzc2spO1xcbiBcXHRzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTtcXG4gXFx0bGlzdF9hZGQoXFx1MDAyNnN1YmZsb3ctXFx1MDAzZW5vZGUsIFxcdTAwMjZtc2stXFx1MDAzZWNvbm5fbGlzdCk7XFxuIFxcdHNvY2tfaG9sZChzc2spO1xcbiBcXG4tXFx0LyogbmV3IG1wYyBzdWJmbG93IHRha2VzIG93bmVyc2hpcCBvZiB0aGUgbmV3bHlcXG4tXFx0ICogY3JlYXRlZCBtcHRjcCBzb2NrZXRcXG4tXFx0ICovXFxuLVxcdG1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKTtcXG4tXFxuIFxcdC8qIHNldCBtc2sgYWRkcmVzc2VzIGVhcmx5IHRvIGVuc3VyZSBtcHRjcF9wbV9nZXRfbG9jYWxfaWQoKVxcbiBcXHQgKiB1c2VzIHRoZSBjb3JyZWN0IGRhdGFcXG4gXFx0ICovXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcXG5pbmRleCA0YTJkNDBjZDdiMTMyLi5jNThjZmIxMzI2YjczIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcXG5AQCAtMTA3NCw5ICsxMDc0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbiB9XFxuIFxcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcXG4rdm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcXG4gdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcXG4gaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spO1xcbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXFxuK2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcXG4gXFx0XFx0XFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XFxuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbik7XFxuIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF90b2tlbl9nZXRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0b2tlbik7XFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXFxuaW5kZXggOGUzODY4OTljZWI5OC4uNjVkODc2YTA4MjMzOCAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXFxuKysrIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xcbkBAIC00Nyw2ICs0NywxOSBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X3JlcV9kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gXFx0bXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHJlcSk7XFxuIH1cXG4gXFxuK3ZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXE7XFxuK1xcbitcXHRzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xcbitcXG4rXFx0aWYgKHN1YmZsb3dfcmVxLVxcdTAwM2Vtc2spXFxuK1xcdFxcdHNvY2tfaG9sZCgoc3RydWN0IHNvY2sgKilzdWJmbG93X3JlcS1cXHUwMDNlbXNrKTtcXG4rXFxuK1xcdG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChyZXEsIG5ld19yZXEpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBzdWJmbG93X2dlbmVyYXRlX2htYWModTY0IGtleTEsIHU2NCBrZXkyLCB1MzIgbm9uY2UxLCB1MzIgbm9uY2UyLFxcbiBcXHRcXHRcXHRcXHQgIHZvaWQgKmhtYWMpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuLmMgYi9uZXQvbXB0Y3AvdG9rZW4uY1xcbmluZGV4IGYxYTUwZjM2N2FkZDguLjI0ODc3YTJjMzc3MjcgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3Rva2VuLmNcXG4rKysgYi9uZXQvbXB0Y3AvdG9rZW4uY1xcbkBAIC0xODAsNiArMTgwLDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rdm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTtcXG4rXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XFxuK1xcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcXG4rXFxuK1xcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xcbitcXG4rXFx0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNldG9rZW5fbm9kZSkpIHtcXG4rXFx0XFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cXHUwMDNldG9rZW4pO1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpKSB7XFxuK1xcdFxcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXFx1MDAzZXRva2VuKTtcXG4rXFx0XFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSlcXG4rXFx0XFx0XFx0aGxpc3RfbnVsbHNfcmVwbGFjZV9pbml0X3JjdShcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm5ld19zdWJmbG93X3JlcS1cXHUwMDNldG9rZW5fbm9kZSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbit9XFxuK1xcbiAvKipcXG4gICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoXFxuICAqIEByZXE6IHRoZSByZXF1ZXN0IHNvY2tldCB0byBiZSByZW1vdmVkXFxuQEAgLTE4NywyNCArMjE3LDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxcbiAgKlxcbiAgKiBDYWxsZWQgd2hlbiBhIFNZTiBwYWNrZXQgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIGNvbm5lY3Rpb24sIGkuZS5cXG4gICogaXMgbm90IGEgam9pbiByZXF1ZXN0LlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgb24gc3VjY2Vzcy5cXG4gICovXFxuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxcbitib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFx0XFx0XFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xcbiBcXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XFxuK1xcdGJvb2wgcmV0ID0gZmFsc2U7XFxuIFxcbi1cXHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXFx1MDAzZXNrX3Byb3QsIDEpO1xcbiBcXHRidWNrZXQgPSB0b2tlbl9idWNrZXQocmVxLVxcdTAwM2V0b2tlbik7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YnVja2V0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFxcdTAwMjZyZXEtXFx1MDAzZXRva2VuX25vZGUpKVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4gXFxuLVxcdC8qIHBlZGFudGljIGxvb2t1cCBjaGVjayBmb3IgdGhlIG1vdmVkIHRva2VuICovXFxuIFxcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS1cXHUwMDNldG9rZW4pO1xcbi1cXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSlcXG4tXFx0XFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFxcdTAwMjZyZXEtXFx1MDAzZXRva2VuX25vZGUpO1xcbitcXHRpZiAocG9zICE9IHJlcSlcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXFx1MDAyNnJlcS1cXHUwMDNldG9rZW5fbm9kZSk7XFxuIFxcdF9fc2tfbnVsbHNfYWRkX25vZGVfcmN1KChzdHJ1Y3Qgc29jayAqKW1zaywgXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbXNrX2NoYWluKTtcXG4rXFx0cmV0ID0gdHJ1ZTtcXG4rXFxuK3VubG9jazpcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cXHUwMDNlc2tfcHJvdCwgMSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pXFxuQEAgLTM1NSwxNiArMzk3LDIxIEBAIHZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XFxuIFxcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcXG4gXFxuLVxcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpKVxcbitcXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbl9ub2RlKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbik7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YnVja2V0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNldG9rZW5fbm9kZSkpXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4gXFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXFx1MDAzZXRva2VuKTtcXG4tXFx0aWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHN1YmZsb3dfcmVxKSkge1xcbitcXHRpZiAocG9zID09IHN1YmZsb3dfcmVxKSB7XFxuIFxcdFxcdGhsaXN0X251bGxzX2RlbF9pbml0X3JjdShcXHUwMDI2cG9zLVxcdTAwM2V0b2tlbl9ub2RlKTtcXG4gXFx0XFx0YnVja2V0LVxcdTAwM2VjaGFpbl9sZW4tLTtcXG4gXFx0fVxcbitcXG4rdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YnVja2V0LVxcdTAwM2Vsb2NrKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcXG5pbmRleCA0ZmMzOWZhMmUyNjJkLi5iZTlhY2NlOGE1NjczIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcXG4rKysgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXFxuQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9hY2NlcHQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcXG4gXFx0XFx0XFx0bXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTtcXG4gXFx0bXNrLVxcdTAwM2V0b2tlbiA9IHJlcS1cXHUwMDNldG9rZW47XFxuLVxcdG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7XFxuK1xcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIG1zaywgbXB0Y3BfdG9rZW5fZ2V0X3NvY2soXFx1MDAyNmluaXRfbmV0LCBtc2stXFx1MDAzZXRva2VuKSk7XFxuIFxcbiBcXHQvKiB0aGlzIGlzIG5vdyBhIG5vLW9wICovXFxuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2Rlc3Ryb3llZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxcbiBcXHRcXHRcXHRtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpO1xcbiBcXHRtc2stXFx1MDAzZXRva2VuID0gcmVxLVxcdTAwM2V0b2tlbjtcXG4tXFx0bXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTtcXG4rXFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKSk7XFxuIFxcbiBcXHQvKiBzaW11bGF0ZSByYWNlIG9uIHJlbW92YWwgKi9cXG4gXFx0cmVmY291bnRfc2V0KFxcdTAwMjZzay1cXHUwMDNlc2tfcmVmY250LCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MDM6NTUuNDY3OTkwNzg4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODA4MjkwNjc3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9za19jbG9uZV9pbml0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9hY2NlcHRcIixcbiAgICBcIm1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwYXRoLCBzcGVjaWZpY2FsbHkgaG93IHJlcXVlc3Qgc29ja2V0cyBhcmUgY2xvbmVkIGFuZCBob3cgdG9rZW5zIGFyZSBtYW5hZ2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLiBJdCBpbnRyb2R1Y2VzIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgdG8gaGFuZGxlIGZhaWx1cmVzIGFuZCByZXR1cm4gYSBib29sZWFuLCB3aGljaCBpcyB0aGVuIGNoZWNrZWQgaW4gYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIE1QVENQIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIGR1cmluZyBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzg3Y2UxZDlhNGYxNmZjMThiY2ZjOTI2YTQyOGRmMTZlODAyMmZjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMTI6MDM6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuaW5kZXggNzFiOWZjNWE1Nzk2My4uMGEwMmFjMWVkMjJkOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21wdGNwLmhcbisrKyBiL2luY2x1ZGUvbmV0L21wdGNwLmhcbkBAIC0yMjMsNiArMjIzLDggQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG4gXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4gXHRcdFx0XHRcdCAgICAgICBib29sIGF0dGFjaF9saXN0ZW5lcik7XG4rdm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XG4gXG4gX19iZTMyIG1wdGNwX2dldF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG5AQCAtMzA5LDYgKzMxMSwxMSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxuK3tcbit9XG4rXG4gc3RhdGljIGlubGluZSBfX2JlMzIgbXB0Y3BfcmVzZXRfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpICB7IHJldHVybiBodG9ubCgwdSk7IH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfYWN0aXZlX2RldGVjdF9ibGFja2hvbGUoc3RydWN0IHNvY2sgKnNrLCBib29sIGV4cGlyZWQpIHsgfVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5pbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuKysrIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuQEAgLTIxLDYgKzIxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcF9lY24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9tcHRjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2tfcmV1c2Vwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvYWRkcmNvbmYuaFx1MDAzZVxuIFxuQEAgLTk2MSw2ICs5NjIsOSBAQCBzdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih0Y3Bfc2sobnJlcS1cdTAwM2VzayktXHUwMDNlZmFzdG9wZW5fcnNrLCBucmVxKTtcbiBcdH1cbiBcbitcdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcbitcdFx0bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpO1xuK1xuIFx0cmV0dXJuIG5yZXE7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGNhNjQ0ZWM1M2VlZGIuLjA3ZWFhNjg1OGQwNTMgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbkBAIC0zNjA4LDE3ICszNjA4LDE5IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdCAqL1xuIFx0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0VTVEFCTElTSEVEKTtcbiBcbitcdGlmICghbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spKSB7XG4rXHRcdG1wdGNwX3JlbGVhc2Vfc2NoZWQobXNrKTtcbitcdFx0aW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2UobnNrKTtcbitcdFx0dGNwX2RvbmUobnNrKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4gXHQvKiBUaGUgbXNrIG1haW50YWluIGEgcmVmIHRvIGVhY2ggc3ViZmxvdyBpbiB0aGUgY29ubmVjdGlvbnMgbGlzdCAqL1xuIFx0V1JJVEVfT05DRShtc2stXHUwMDNlZmlyc3QsIHNzayk7XG4gXHRzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTtcbiBcdGxpc3RfYWRkKFx1MDAyNnN1YmZsb3ctXHUwMDNlbm9kZSwgXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCk7XG4gXHRzb2NrX2hvbGQoc3NrKTtcbiBcbi1cdC8qIG5ldyBtcGMgc3ViZmxvdyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG5ld2x5XG4tXHQgKiBjcmVhdGVkIG1wdGNwIHNvY2tldFxuLVx0ICovXG4tXHRtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zayk7XG4tXG4gXHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcbiBcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxuIFx0ICovXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggNGEyZDQwY2Q3YjEzMi4uYzU4Y2ZiMTMyNmI3MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTEwNzQsOSArMTA3NCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiB9XG4gXG4gaW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7XG4rdm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpO1xuIHZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7XG4gaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spO1xuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcbitib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXG4gXHRcdFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4gYm9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKTtcbiBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdG9rZW5fZ2V0X3NvY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgdG9rZW4pO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5pbmRleCA4ZTM4Njg5OWNlYjk4Li42NWQ4NzZhMDgyMzM4IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xuKysrIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuQEAgLTQ3LDYgKzQ3LDE5IEBAIHN0YXRpYyB2b2lkIHN1YmZsb3dfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0bXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHJlcSk7XG4gfVxuIFxuK3ZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4re1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcTtcbitcbitcdHN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2sobmV3X3JlcSk7XG4rXG4rXHRpZiAoc3ViZmxvd19yZXEtXHUwMDNlbXNrKVxuK1x0XHRzb2NrX2hvbGQoKHN0cnVjdCBzb2NrICopc3ViZmxvd19yZXEtXHUwMDNlbXNrKTtcbitcbitcdG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChyZXEsIG5ld19yZXEpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBzdWJmbG93X2dlbmVyYXRlX2htYWModTY0IGtleTEsIHU2NCBrZXkyLCB1MzIgbm9uY2UxLCB1MzIgbm9uY2UyLFxuIFx0XHRcdFx0ICB2b2lkICpobWFjKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW4uYyBiL25ldC9tcHRjcC90b2tlbi5jXG5pbmRleCBmMWE1MGYzNjdhZGQ4Li4yNDg3N2EyYzM3NzI3IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Rva2VuLmNcbisrKyBiL25ldC9tcHRjcC90b2tlbi5jXG5AQCAtMTgwLDYgKzE4MCwzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbit2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4rXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4rXG4rXHRuZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcbitcbitcdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSkge1xuK1x0XHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKSB7XG4rXHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdH0gZWxzZSB7XG4rXHRcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbitcdFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSlcbitcdFx0XHRobGlzdF9udWxsc19yZXBsYWNlX2luaXRfcmN1KFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUsXG4rXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZuZXdfc3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rfVxuK1xuIC8qKlxuICAqIG1wdGNwX3Rva2VuX2FjY2VwdCAtIHJlcGxhY2UgYSByZXEgc2sgd2l0aCBmdWxsIHNvY2sgaW4gdG9rZW4gaGFzaFxuICAqIEByZXE6IHRoZSByZXF1ZXN0IHNvY2tldCB0byBiZSByZW1vdmVkXG5AQCAtMTg3LDI0ICsyMTcsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXG4gICpcbiAgKiBDYWxsZWQgd2hlbiBhIFNZTiBwYWNrZXQgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIGNvbm5lY3Rpb24sIGkuZS5cbiAgKiBpcyBub3QgYSBqb2luIHJlcXVlc3QuXG4rICpcbisgKiBSZXR1cm46IHRydWUgb24gc3VjY2Vzcy5cbiAgKi9cbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbitib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuIFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xuK1x0Ym9vbCByZXQgPSBmYWxzZTtcbiBcbi1cdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cdTAwM2Vza19wcm90LCAxKTtcbiBcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChyZXEtXHUwMDNldG9rZW4pO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbitcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZyZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4rXHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0LyogcGVkYW50aWMgbG9va3VwIGNoZWNrIGZvciB0aGUgbW92ZWQgdG9rZW4gKi9cbiBcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSlcbi1cdFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbitcdGlmIChwb3MgIT0gcmVxKVxuK1x0XHRnb3RvIHVubG9jaztcbitcbitcdGhsaXN0X251bGxzX2RlbF9pbml0X3JjdShcdTAwMjZyZXEtXHUwMDNldG9rZW5fbm9kZSk7XG4gXHRfX3NrX251bGxzX2FkZF9ub2RlX3JjdSgoc3RydWN0IHNvY2sgKiltc2ssIFx1MDAyNmJ1Y2tldC1cdTAwM2Vtc2tfY2hhaW4pO1xuK1x0cmV0ID0gdHJ1ZTtcbitcbit1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pXG5AQCAtMzU1LDE2ICszOTcsMjEgQEAgdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4gXG4tXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKVxuK1x0XHRnb3RvIHVubG9jaztcbitcbiBcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbi1cdGlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSBzdWJmbG93X3JlcSkpIHtcbitcdGlmIChwb3MgPT0gc3ViZmxvd19yZXEpIHtcbiBcdFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnBvcy1cdTAwM2V0b2tlbl9ub2RlKTtcbiBcdFx0YnVja2V0LVx1MDAzZWNoYWluX2xlbi0tO1xuIFx0fVxuK1xuK3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbmluZGV4IDRmYzM5ZmEyZTI2MmQuLmJlOWFjY2U4YTU2NzMgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXG4rKysgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXG5AQCAtOTksNyArOTksNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2FjY2VwdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcbiBcdFx0XHRtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpO1xuIFx0bXNrLVx1MDAzZXRva2VuID0gcmVxLVx1MDAzZXRva2VuO1xuLVx0bXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTtcbitcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKFx1MDAyNmluaXRfbmV0LCBtc2stXHUwMDNldG9rZW4pKTtcbiBcbiBcdC8qIHRoaXMgaXMgbm93IGEgbm8tb3AgKi9cbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIDAsXG4gXHRcdFx0bXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTtcbiBcdG1zay1cdTAwM2V0b2tlbiA9IHJlcS1cdTAwM2V0b2tlbjtcbi1cdG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7XG4rXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTtcbiBcbiBcdC8qIHNpbXVsYXRlIHJhY2Ugb24gcmVtb3ZhbCAqL1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCwgMCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowMzo1NS40Njc5OTMzMDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQxNzA1NTM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIE1QVENQIHN1YnN5c3RlbSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQWgsIHRhY2tsaW5nIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhZ2FpbiwgaW50ZXJlc3RpbmcuXCIgSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgYXJvdW5kIGhvdyByZXF1ZXN0IHNvY2tldHMgYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgaXQncyBhZGRpbmcgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgLCB3aGljaCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgaW5ldF9yZXFza19jbG9uZWAuIFRoYXQncyBhIGtleSBmdW5jdGlvbiB0byB1bmRlcnN0YW5k4oCUaG93IHRoZSByZXF1ZXN0IHNvY2tldHMgYXJlIGJlaW5nIGNsb25lZCBhbmQgbWFuYWdlZCBhY3Jvc3Mgc3ViZmxvd3Mgd2l0aGluIHRoZSBNUFRDUCBmcmFtZXdvcmsuXG5cblRoZW4gSSBzZWUgY2hhbmdlcyB0byBgbXB0Y3BfdG9rZW5fYWNjZXB0YCwgc2hpZnRpbmcgaXRzIHJldHVybiB0byBhIGJvb2xlYW4gYW5kIGluY29ycG9yYXRpbmcgZmFpbHVyZSBoYW5kbGluZy4gVGhpcyBpcyBjcml0aWNhbC4gTm93IHRoZSBjbG9uaW5nIGluaXQgZnVuY3Rpb24sIGBtcHRjcF9za19jbG9uZV9pbml0YCwgaXMgZ29pbmcgdG8gYmUgZGVwZW5kZW50IG9uIHRoZSBib29sZWFuIHZhbHVlIHJldHVybmVkIGZyb20gYG1wdGNwX3Rva2VuX2FjY2VwdGAuIEFueSB0aW1lIHlvdSBhbHRlciBhIHJldHVybiB0eXBlIHRvIGluY29ycG9yYXRlIGZhaWx1cmUgc3RhdGVzLCB5b3UgbmVlZCB0byBlbnN1cmUgZXZlcnkgc2luZ2xlIGNhbGwgc2l0ZSBjb3JyZWN0bHkgcHJvY2Vzc2VzIHRoZSBhZGRlZCBjb21wbGV4aXR5LiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBzdWJ0bGUsIGhhcmQtdG8tZGVidWcgaXNzdWVzIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS5cblxuSSBhbHNvIHNwb3QgbW9kaWZpY2F0aW9ucyB0byBgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0YCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gdGhlc2UgbW9yZSBjbG9zZWx5IHRvIGdyYXNwIHRoZSBsb2dpYyBiZWhpbmQgaXQsIGJ1dCBpdCBzZWVtcyBsaWtlIHRoaXMgaXMgYWJvdXQgcmVzb3VyY2UgbWFuYWdlbWVudC4gTGlrZWx5IG1vdmluZyBvciBkZXN0cm95aW5nIHRva2VucyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCBzb2NrZXRzIGFzIHBhcnQgb2YgdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LlxuXG5UaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhlc2Ugc2VlbSB0byBiZSBmdW5jdGlvbmFsIGNoYW5nZXMsIGFuZCB0aGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzbyB0aGlzIHdpbGwgYWZmZWN0IHRoZSBvdmVyYWxsIE1QVENQIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIHRoYXQgaXQncyBpbXBhY3RpbmcgdGhlIGNvcmUgc3RhY2ssIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIE1QVENQIGNvbmZpZ3VyYXRpb25zIGFyZSB3aGF0IEknbSBleHBlY3RpbmcuIFRoZSBmaXJzdCB0aGluZyBJJ2xsIGRvIGlzIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIE1QVENQLCB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBhbmQgaWRlbnRpZnkgYW55IGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUgdmVyaWZpZWQgb3IgYWRqdXN0ZWQuIFNvLCBsZXQncyBzdGFydCBzZWFyY2hpbmcgZm9yIE1QVENQIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjA1Ljg4NTA1MDM4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDgzODc1NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUFRDUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZy0xLVxcbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMy1cXHRib29sIFxcXCJNUFRDUDogTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxcbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxubmV0L21wdGNwL0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIlRoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNDowOC4zNjg5MzA5NzRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY4MDE0MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNUFRDUCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gYE1QVENQYC4gQWxyaWdodCwgdGhhdCBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjaG9pY2UuIEl0IGltbWVkaWF0ZWx5IHJhaXNlcyBxdWVzdGlvbnMgaW4gbXkgbWluZDogV2hhdCBvdGhlciBuZXR3b3JrIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQgYXJvdW5kIE1QVENQPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzIGxvYWRlZCBhbmQgYWN0aXZlIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBhcnRpY3VsYXIgTVBUQ1Agc2V0dXA/IFdoYXQgYWJvdXQgdGhlIHJvdXRpbmcgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgbWVudGFsbHkgbWFwIG91dCB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb25mbGljdHMgb3Igb3ZlcnNpZ2h0cy4gTGV0J3Mgc3RhcnQgd2l0aCBhIHN5c3RlbWF0aWMgY2hlY2suIEkgbmVlZCB0byBlbnN1cmUgYWxsIHRoZSBwcmVyZXF1aXNpdGVzIGFyZSBtZXQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjEyLjIzNjk0OTEzN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDMwNDYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWctMS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MDQ6MTIuMzAxMjU3OTMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMTY5ODc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXBlbmRlbmN5IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgZm9yIE11bHRpcGF0aCBUQ1AgYXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgcmlnaHQ/IENoZWNraW5nIEtjb25maWcgZmlyc3QgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuIEl0J2xsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIHJlcXVpcmVkIGJlZm9yZSBJIGNhbiB0cnVseSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBwb3J0aW9ucy4gSXQgYWxzbyBhdm9pZHMgbWUgZ29pbmcgZG93biBhbnkgYmxpbmQgYWxsZXlzIG9mIGludmVzdGlnYXRpbmcgdGhpbmdzIHRoYXQgYXJlIG9idmlvdXNseSBnb2luZyB0byBiZSB1bmF2YWlsYWJsZSBiZWNhdXNlIGRlcGVuZGVuY2llcyBhcmUgdW5tZXQuIFRoaXMgYXBwcm9hY2ggc2hvdWxkIHNhdmUgbWUgdGltZSBpbiB0aGUgbG9uZyBydW4uIEdvb2QgcGxhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjE1LjQwMjk1ODU1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0XFxuICAgMjpcXHRjb25maWcgTVBUQ1BcXG4gICAzOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXFxuICAxMDpcXHRcXHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XFxuICAxMTpcXHRcXHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcXG4gIDEyOlxcdFxcdCAgTVBUQ1AuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGlmIE1QVENQXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuICAxODpcXHRcXHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBNUFRDUF9JUFY2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjE1LjQwMzAxNzY0N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTcxODA4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkFuYWx5emluZyBNUFRDUCBDb25maWd1cmF0aW9uIGFuZCBTb2NrZXQgQ2xvbmluZyoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBgTVBUQ1BgIGNvbmZpZ3VyYXRpb24gaGVyZSwgYW5kIHRoaW5raW5nIHRoYXQgYE1QVENQX0lQVjZgIGNvdWxkIHBvdGVudGlhbGx5IGJlIHJlbGV2YW50IGFzIHdlbGwuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgaW1wYWN0IGNvbm5lY3Rpb24gaGFuZGxpbmcsIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocy4gTXkgcGxhbiBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIGJlY2F1c2UgSSByZW1lbWJlciB0aGF0J3Mgd2hlcmUgYSBjcnVjaWFsIGZ1bmN0aW9uLCBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAsIGlzIGltcGxlbWVudGVkLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGhpbiB0aGUgSVB2NCBjb25uZWN0aW9uIHByb2Nlc3MuIFRoYXQnbGwgdGVsbCBtZSBob3cgdGhlIG11bHRpLXBhdGggVENQIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZCwgYW5kIGhvdyB0aGUgc3ViZmxvdyBjbG9uaW5nIGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjIwLjIwMDIwMDY1NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyNzE5ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9OTE0PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtOTY1LVxcdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjk2NjpcXHRcXHRtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHJlcSwgbnJlcSk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05NjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjIwLjI5OTQ3Njc1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk5NjA2OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBJbmV0IFJlcXVlc3QgU29ja2V0IENsb25lKipcblxuQWxyaWdodCwgc28gYGluZXRfcmVxc2tfY2xvbmVgIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUncyB0aGlzIGZ1bmN0aW9uICphY3R1YWxseSogYmVpbmcgY2FsbGVkP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBLbm93aW5nIHRoZSBjYWxsIGNoYWluIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgd2l0aGluIHRoZSBJUCBzdGFjay4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBmaWd1cmUgb3V0IHRoZSBzY2VuYXJpb3Mgd2hlcmUgcmVxdWVzdCBzb2NrZXRzIGFyZSBiZWluZyBjbG9uZWQsIGFuZCB3aHkuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkgdG8gYSBtZWFuaW5nZnVsIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDA0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MDQ6MjMuNjk5MDg2MDcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA1OTg1ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfcmVxc2tfY2xvbmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz05MDU9dm9pZCBfX3JlcXNrX2ZyZWUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05MTMtXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo5MTQ6c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtOTE1LVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMDM3PXN0YXRpYyB2b2lkIHJlcXNrX3RpbWVyX2hhbmRsZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEwNTMtXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMDU0OlxcdFxcdG5yZXEgPSBpbmV0X3JlcXNrX2Nsb25lKHJlcSwgbnNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEwNTUtXFx0XFx0aWYgKCFucmVxKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDIxPXN0cnVjdCBzb2NrICppbmV0X2Nza19jb21wbGV0ZV9oYXNoZGFuY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqY2hpbGQsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0MzQtXFx0XFx0XFx0LyogaG9sZCBhIHJlZmNudCBmb3IgdGhlIG5yZXEtXFx1MDAzZXJza19saXN0ZW5lclxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTQzNTpcXHRcXHRcXHQgKiB3aGljaCBpcyBhc3NpZ25lZCBpbiBpbmV0X3JlcXNrX2Nsb25lKClcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0MzYtXFx0XFx0XFx0ICovXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM3LVxcdFxcdFxcdHNvY2tfaG9sZChzayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDM4OlxcdFxcdFxcdG5yZXEgPSBpbmV0X3JlcXNrX2Nsb25lKHJlcSwgc2spO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQzOS1cXHRcXHRcXHRpZiAoIW5yZXEpIHtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTQ3MD12b2lkIGluZXRfY3NrX2xpc3Rlbl9zdG9wKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQ5NC1cXHRcXHRpZiAobnNrKSB7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDk1OlxcdFxcdFxcdG5yZXEgPSBpbmV0X3JlcXNrX2Nsb25lKHJlcSwgbnNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0OTYtXFx0XFx0XFx0aWYgKG5yZXEpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MDQ6MjYuMDA1MDc3NzAzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjY3OTM2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlcmFjdGlvbnMgQmV0d2VlbiBUQ1AgUmVxdWVzdCBDbG9uZXMgYW5kIE1QVENQIFRva2VuIEhhbmRsaW5nKipcblxuT2theSwgc28gSSBzZWUgYGluZXRfcmVxc2tfY2xvbmVgIGlzIHRyaWdnZXJlZCBmcm9tIGEgZmV3IGRpZmZlcmVudCBwbGFjZXM6IHRoZSBgcmVxc2tfdGltZXJfaGFuZGxlcmAsIGBpbmV0X2Nza19jb21wbGV0ZV9oYXNoZGFuY2VgLCBhbmQgYWxzbyBgaW5ldF9jc2tfbGlzdGVuX3N0b3BgLiBUaGF0IG1lYW5zIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBNUFRDUCBoYXZlIGEgc3Ryb25nIHBvc3NpYmlsaXR5IG9mIHJ1bm5pbmcgaW50byBpc3N1ZXMgd2l0aCBzdGFuZGFyZCBUQ1AgcmVxdWVzdCBjbG9uZXMuXG5cbk15IG5leHQgc3RlcCBpcyB0byBsb29rIGF0IHRoZSByZWNlbnQgY2hhbmdlcyByZWxhdGVkIHRvIHRva2VuIGhhbmRsaW5nIGluIHRoZSBNUFRDUCBjb2RlLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkIGluIGBuZXQvbXB0Y3AvdG9rZW4uY2A6IGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fYWNjZXB0YCwgYW5kIGBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3RgLiBUaGVzZSBhcmUgYWxsIGZhaXJseSBjb3JlIG9wZXJhdGlvbnMgZm9yIHRva2VuIG1hbmFnZW1lbnQsIHNvIGFueSBpbnRlcnBsYXkgd2l0aCByZXF1ZXN0IGNsb25pbmcgaGVyZSBpcyBnb2luZyB0byBiZSBjcml0aWNhbC5cblxuVGhlbiwgdGhlcmUncyBgbmV0L21wdGNwL3Byb3RvY29sLmNgIHRvIGNvbnNpZGVyLCBhbmQgc3BlY2lmaWNhbGx5LCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAuIFRoaXMgb25lIGlzIHBvdGVudGlhbGx5IHZlcnkgaW50ZXJlc3RpbmcuIEl0J3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGEgc29ja2V0IGNsb25lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgd29ya3MgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gV2hhdCBpcyB0aGUgY2xvbmluZyBsb2dpYyBhbmQgd2hhdCBwYXJ0cyBvZiBNUFRDUCBhcmUgYmVpbmcgY2xvbmVkPyBBbmQsIG1vc3QgaW1wb3J0YW50bHksIGhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHN0YW5kYXJkIFRDUCBjbG9uaW5nIHByb2Nlc3MgdHJpZ2dlcmVkIGJ5IGBpbmV0X3JlcXNrX2Nsb25lYD8gSSBuZWVkIHRvIGFuYWx5emUgYG1wdGNwX3NrX2Nsb25lX2luaXRgIGluIGRldGFpbC4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgYmVzdCB1bmRlcnN0YW5kaW5nIG9mIGFueSBwb3RlbnRpYWwgaXNzdWVzIGFuZCBpZGVudGlmeSB3aGVyZSB0byBmb2N1cyBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE2MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNDozMi4zNzE4NzQ0NTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTM4MTk3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9za19jbG9uZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTM1Mzg9c3RhdGljIHZvaWQgbXB0Y3BfY29weV9pcF9vcHRpb25zKHN0cnVjdCBzb2NrICpuZXdzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU1Ny1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNTU4OnN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTU5LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNDozMi40ODcyNjE5MTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0NzE1ODk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIGBtcHRjcF9za19jbG9uZV9pbml0YCBDYWxsc2l0ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0ICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtZSwgaXQncyBpbnZvbHZlZCBpbiBjbG9uaW5nIG9yIGluaXRpYWxpemluZyBNdWx0aXBhdGggVENQIChNUFRDUCkgc29ja2V0IHN0cnVjdHVyZXMuIEtub3dpbmcgdGhlIGNhbGwgaGllcmFyY2h5IHdpbGwgYmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXNlIGNsb25lcyBhcmUgYmVpbmcgY3JlYXRlZCBhbmQgY29uZmlndXJlZCwgYW5kIHRvIHByb3Blcmx5IGRlYnVnIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCB0b29scywgbGlrZWx5IGEgY29tYmluYXRpb24gb2Ygc3RhdGljIGFuYWx5c2lzIChsaWtlIGBjc2NvcGVgIG9yIGBjbGFuZ2RgKSBhbmQgZHluYW1pYyBhbmFseXNpcyAobWF5YmUgYHBlcmZgIG9yIGBmdHJhY2VgIGlmIHN0YXRpYyBhbmFseXNpcyBpcyBpbnN1ZmZpY2llbnQpLCB0byBxdWlja2x5IG1hcCBvdXQgdGhlIGZ1bmN0aW9uJ3MgdXNhZ2UuIEknbGwgYmUgbG9va2luZyBmb3IgY3JpdGljYWwgcG9pbnRzLCBsaWtlIHdpdGhpbiB0aGUgc29ja2V0IGNyZWF0aW9uIHBhdGgsIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgb3IgcGVyaGFwcyBkdXJpbmcgYWRkcmVzcyBmYWlsb3ZlciBzY2VuYXJpb3MuIEkgYW50aWNpcGF0ZSBlbmNvdW50ZXJpbmcgb3RoZXIgTVBUQ1Atc3BlY2lmaWMgZnVuY3Rpb25zIGluIHRoZSBjYWxsIGdyYXBoLiBMZXQncyBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MDQ6MzYuOTM0NDI0NzU1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzYzMjMzOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3NrX2Nsb25lX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9MzUzOD1zdGF0aWMgdm9pZCBtcHRjcF9jb3B5X2lwX29wdGlvbnMoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTU3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NTg6c3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1NTktXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD05MTU9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtOTE3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjkxODpzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L21wdGNwL3Byb3RvY29sLmgtOTE5LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz04MTk9c3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy04OTUtXFx0XFx0aWYgKGN0eC1cXHUwMDNlbXBfY2FwYWJsZSkge1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6ODk2OlxcdFxcdFxcdGN0eC1cXHUwMDNlY29ubiA9IG1wdGNwX3NrX2Nsb25lX2luaXQobGlzdGVuZXItXFx1MDAzZWNvbm4sIFxcdTAwMjZtcF9vcHQsIGNoaWxkLCByZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtODk3LVxcdFxcdFxcdGlmICghY3R4LVxcdTAwM2Vjb25uKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNDozOS4yOTc2NjMwMzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5NzYxNTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCBQYXRoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBob3cgTVBUQ1AgY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgc3ViZmxvd19zeW5fcmVjdl9zb2NrYCBjYWxsLCB3aGVyZSBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgaXMgaW52b2tlZC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYG1wdGNwX3Rva2VuX2FjY2VwdGAgbm93IHJldHVybnMgYSBib29sZWFuLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWdnZXJzIHRoZSBjbGVhbnVwIHdpdGhpbiBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgYW5kIHJldHVybnMgTlVMTC4gVGhpcyBpcyBhIGNsZWFyIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBleHBsb3JlIHRoaXMgY2hhbmdlIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZSBubyB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy5cblxuTXkgZm9jdXMgc3ltYm9scyBhcmU6IGBtcHRjcF9za19jbG9uZV9pbml0YCwgYG1wdGNwX3Rva2VuX2FjY2VwdGAsIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0YCwgYW5kIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYC5cblxuR29vZCwgaXQgc2VlbXMgdGhlc2Ugc3ltYm9scyBhcmUgKm5vdCogc3RhdGljLCB3aGljaCBnaXZlcyB1cyBtb3JlIGVudHJ5IHBvaW50cy4gQW5kLCB0aGV5J3JlIGdsb2JhbCB0byB0aGUgTVBUQ1Agc3Vic3lzdGVtLiBUaGlzIG1lYW5zIHRoZXkgYXJlIGFjY2Vzc2libGUgZnJvbSB2YXJpb3VzIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGluY3JlYXNpbmcgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS5cblxuTm93IEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIHNwZWNpZmljYWxseSwgYW5kIGhvdyBpdCBpcyBpbXBsZW1lbnRlZCBpbiBgbmV0L21wdGNwL3N1YmZsb3cuY2AuIEl0IGlzIGxpa2VseSB0aGUgcGxhY2Ugd2hlcmUgdGhlIG5ldyByZXR1cm4gcGF0aCBmcm9tIGBtcHRjcF90b2tlbl9hY2NlcHRgIHdvdWxkIGJlIG1vc3QgcmVsZXZhbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MDMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MDQ6NDQuOTk1Mjc5OTE3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0ODgyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3Avc3ViZmxvdy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9zdWJmbG93LmM9Mzg9c3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTQ5LVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NTA6dm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTUxLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNDo0NS4wOTk3NzIzODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyNzkyNjg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBUaGlzKipcblxuUmlnaHQsIHRoaXMgaXNuJ3QgYSBzaW1wbGUsIHN0YXRpYyBzaXR1YXRpb24uIEl0J3MgY2xlYXJseSBjaGFuZ2luZyBhbmQgcmVxdWlyZXMgYSBkeW5hbWljIGFwcHJvYWNoIHRvIHVuZGVyc3RhbmQgaXQgZnVsbHkuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBzcGVjaWZpYyBmdW5jdGlvbjogYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAgd2l0aGluIHRoZSBgbmV0L21wdGNwL3Rva2VuLmNgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMgb2YgdGhpcyBtb3ZpbmctdG9rZW4gc3lzdGVtLiBMZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb2YgdGhhdCBmdW5jdGlvbidzIHNwZWNpZmljcy4uLiBpdCdzIGJlZW4gYSB3aGlsZSwgYnV0IHRoYXQncyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZWxhdGVkIHRvIHRva2VuIG1pZ3JhdGlvbiBzaG91bGQgcmVzaWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMwMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjQ5LjIyNzcwMzE0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg3NjM1NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC90b2tlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC90b2tlbi5jPTE1MT1pbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jLTE4Mi1cXG5uZXQvbXB0Y3AvdG9rZW4uYzoxODM6dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbm5ldC9tcHRjcC90b2tlbi5jLTE4NC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNDo0OS4yOTY0NzAyODlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyNTU4MDU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBNUFRDUCBUb2tlbiBBY2NlcHRhbmNlKipcblxuUmlnaHQsIHRoaXMgaXNuJ3QgYSBzaW1wbGUsIHN0YXRpYyBzdGF0ZS4gV2UncmUgbG9va2luZyBhdCBzb21ldGhpbmcgZHluYW1pYy4gVGhlIGtleSBsaWVzIGluIGhvdyBNUFRDUCB0b2tlbnMgYXJlIGFjY2VwdGVkIGFuZCBoYW5kbGVkLiBMZXQncyBkaWcgaW50byB0aGUgY29kZSBkaXJlY3RseS4gTXkgaW1tZWRpYXRlIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBmdW5jdGlvbiwgd2hpY2ggSSAqa25vdyogcmVzaWRlcyB3aXRoaW4gYG5ldC9tcHRjcC90b2tlbi5jYC4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgYWNjZXB0YW5jZSBsb2dpYyBpcyBnb2luZyB0byBiZS4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHRoZSBjb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjUyLjkyMjA1NDQyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxMDkxNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfdG9rZW5fYWNjZXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC90b2tlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC90b2tlbi5jPTE4Mz12b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMTMtLyoqXFxubmV0L21wdGNwL3Rva2VuLmM6MjE0OiAqIG1wdGNwX3Rva2VuX2FjY2VwdCAtIHJlcGxhY2UgYSByZXEgc2sgd2l0aCBmdWxsIHNvY2sgaW4gdG9rZW4gaGFzaFxcbm5ldC9tcHRjcC90b2tlbi5jLTIxNS0gKiBAcmVxOiB0aGUgcmVxdWVzdCBzb2NrZXQgdG8gYmUgcmVtb3ZlZFxcbi0tXFxubmV0L21wdGNwL3Rva2VuLmMtMjIyLSAqL1xcbm5ldC9tcHRjcC90b2tlbi5jOjIyMzpib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMjQtXFx0XFx0XFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jPTQ2Nz1FWFBPUlRfU1lNQk9MX0dQTChtcHRjcF90b2tlbl9uZXdfY29ubmVjdCk7XFxubmV0L21wdGNwL3Rva2VuLmM6NDY4OkVYUE9SVF9TWU1CT0xfR1BMKG1wdGNwX3Rva2VuX2FjY2VwdCk7XFxubmV0L21wdGNwL3Rva2VuLmMtNDY5LUVYUE9SVF9TWU1CT0xfR1BMKG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjUyLjk4NjE2NjgzM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ2NTM4NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyB0aGUgRHluYW1pYyBOYXR1cmUgb2YgVG9rZW5zKipcblxuUmlnaHQsIG5vdCBhIHN0YXRpYyBzaXR1YXRpb24gYXQgYWxsLiBXZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQncyBjaGFuZ2luZy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgaG93IHRoaXMgdG9rZW4gZGVzdHJ1Y3Rpb24gaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3MsIHNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0YCBmdW5jdGlvbi4gVGhhdCBmdW5jdGlvbiBsaXZlcyBpbiBgbmV0L21wdGNwL3Rva2VuLmNgLCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBiZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGR5bmFtaWMgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE0MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjU3LjEzMjcwODMwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAyNzkzMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC90b2tlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC90b2tlbi5jPTM4Nj1FWFBPUlRfU1lNQk9MX0dQTChtcHRjcF90b2tlbl9pdGVyX25leHQpO1xcbi0tXFxubmV0L21wdGNwL3Rva2VuLmMtMzg4LS8qKlxcbm5ldC9tcHRjcC90b2tlbi5jOjM4OTogKiBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QgLSByZW1vdmUgbXB0Y3AgY29ubmVjdGlvbi90b2tlblxcbm5ldC9tcHRjcC90b2tlbi5jLTM5MC0gKiBAcmVxOiBtcHRjcCByZXF1ZXN0IHNvY2tldCBkcm9wcGluZyB0aGUgdG9rZW5cXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jLTM5My0gKi9cXG5uZXQvbXB0Y3AvdG9rZW4uYzozOTQ6dm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbm5ldC9tcHRjcC90b2tlbi5jLTM5NS17XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYz00Njg9RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3BfdG9rZW5fYWNjZXB0KTtcXG5uZXQvbXB0Y3AvdG9rZW4uYzo0Njk6RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KTtcXG5uZXQvbXB0Y3AvdG9rZW4uYy00NzAtRVhQT1JUX1NZTUJPTF9HUEwobXB0Y3BfdG9rZW5fZGVzdHJveSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjU3LjIwMjk5MTkyMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTM2MDU4NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE1QVENQIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aGlzIGlzbid0IGEgc3RhdGljIHNpdHVhdGlvbi4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIE1QVENQIGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZSwgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBtcHRjcF9za19jbG9uZV9pbml0YCwgYG1wdGNwX3Rva2VuX2FjY2VwdGAsIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0YCwgYW5kIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYC5cblxuTm93IGZvciB0aGUgY29uZmlnIG9wdGlvbnMsIEknbSB0aGlua2luZyBJJ2xsIGRlZmluaXRlbHkgbmVlZCBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAuIEJ1dCBiZWZvcmUgSSBzaWduIG9mZiBvbiB0aGF0LCBJIHNob3VsZCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0L21wdGNwL0tjb25maWdgIGZpbGUuXG5cbkFscmlnaHQsIGhlcmUgaXQgaXM6XG5gYGBcbmNvbmZpZyBNUFRDUFxuXHRib29sIFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcIlxuXHRkZXBlbmRzIG9uIElORVRcblx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG5cdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuYGBgXG5TbywgbG9va3MgbGlrZSBqdXN0IGBNUFRDUGAgaXMgdGhlIGVzc2VudGlhbCBvbmUuIFRoZSBzZWxlY3RzIGFyZSBhbGwgdGFrZW4gY2FyZSBvZiBpbiB0aG9zZSBvcHRpb25zLiBgTVBUQ1BfSVBWNmAgaXMgYWxzbyBhIGdvb2QgaWRlYSBmb3IgSVB2NiBzdXBwb3J0LCBzbyBJJ2xsIGluY2x1ZGUgdGhhdCBhcyB3ZWxsLiBCdXQgd2FpdCwgYE1QVENQX0lQVjZgIGRlcGVuZHMgb24gYElQVjZgLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGRlcGVuZGVuY3kgaW4gbWluZC4gSnVzdCB0byBiZSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgbmV0L21wdGNwL0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYyOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNTowNC43MzkwNTI5ODhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NjM2MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUFRDUF9JUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MDU6MDQuODA1NjkzNzI0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODIwMjc1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWx2aW5nIGludG8gdGhlIE1QVENQIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcsIFwiVGltZSB0byBkaWcgaW50byB0aGUgcmVzdCBvZiB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlLlwiIEknbSBvYnZpb3VzbHkgZmFtaWxpYXIgd2l0aCBNUFRDUCBhbmQgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eSwgc28gSSdtIGxpa2VseSBub3QgbmVlZGluZyBhIHByaW1lci4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHNvbWV0aGluZyBzcGVjaWZpYy4gUGVyaGFwcyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGEgbmV3IGZlYXR1cmUgSSdtIGV2YWx1YXRpbmcgb3IgZGVidWdnaW5nLiBNYXliZSBJIG5lZWQgdG8gZ3Jhc3AgaG93IGNlcnRhaW4gZGVwZW5kZW5jaWVzIHdvcmsgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0sIG9yIGlkZW50aWZ5IHdoaWNoIHNwZWNpZmljIEtjb25maWcgc3ltYm9scyBjb250cm9sIGEgcGFydGljdWxhciBwYXJhbWV0ZXIgb3IgYmVoYXZpb3IuIEkgY291bGQgYmUgdHJhY2luZyB0aGUgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBvZiBjZXJ0YWluIE1QVENQIGZlYXR1cmVzLiBPciBJIG1pZ2h0IGJlIHJlc2VhcmNoaW5nIHBvdGVudGlhbCBjb25mbGljdHMgYmV0d2VlbiB2YXJpb3VzIE1QVENQIG1vZHVsZXMgb3IgdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBuZXR3b3JraW5nIHN1YnN5c3RlbXMuIEknbGwgbGlrZWx5IGJlIHNjYW5uaW5nIGZvciByZWxldmFudCBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHZhbHVlcyDigJMgYWxsIHdpdGggdGhlIGdvYWwgb2YgZ2V0dGluZyBhIGNvbXBsZXRlIGFuZCBwcmVjaXNlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGN1cnJlbnQgS2NvbmZpZyBjb25maWd1cmF0aW9uIHNwYWNlLiBUaGUgZ29hbCBpcyB0byBkZWVwbHkgY29tcHJlaGVuZCB0aGUgY29uZmlndXJhYmxlIGFzcGVjdHMgb2YgdGhlIE1QVENQIGltcGxlbWVudGF0aW9uIHNvIEkgY2FuIGVmZmljaWVudGx5IGRpYWdub3NlLCBtb2RpZnkgb3IgdXNlIHRoZSBzb2Z0d2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNTowOC42ODc3MjM0MTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG4gIDIxOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIElQVjY9eVxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICAyODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBDdXJyZW50bHkgY292ZXJzIHRoZSBNUFRDUCBjcnlwdG8gYW5kIHRva2VuIGhlbHBlcnMuXFxuICAzMTpcXHRcXHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxcbiAgMzI6XFx0XFx0ICBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA1OjA4LjY4NzkyMDU3NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDg0NTY4MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIE1QVENQIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIE1QVENQLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgaXQuIEkgc2VlIHRoYXQgYE1QVENQX0lQVjZgIHJlbGllcyBvbiBgSVBWNj15YCwgc28gSSdsbCBiZSBzdXJlIHRvIGluY2x1ZGUgYm90aCBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAgaW4gbXkgY29uZmlndXJhdGlvbi5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgaG93IHJlcXVlc3Qgc29ja2V0cyBhcmUgY2xvbmVkIGFuZCBob3cgdG9rZW5zIGFyZSBoYW5kbGVkIGR1cmluZyBzZXR1cC4gSXQgaW50cm9kdWNlcyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgYW5kIG1vZGlmaWVzIGBtcHRjcF90b2tlbl9hY2NlcHRgIHRvIHJldHVybiBhIGJvb2xlYW4sIHdoaWNoIHJlZmxlY3RzIGhvdyBmYWlsdXJlcyBpbiBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgYXJlIG1hbmFnZWQuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbXBhY3RpbmcgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLlxuXG5NeSB0aGlua2luZyBpcywgaXMgYG1wdGNwX3NrX2Nsb25lX2luaXRgIGEgZ29vZCBzdGFydGluZyBwb2ludD8gSXQncyBjYWxsZWQgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgd2hpY2ggaXNuJ3QgdGhlIG1vc3QgaGlnaC12b2x1bWUgY29kZSBwYXRoIGxpa2UgcGFja2V0IHByb2Nlc3NpbmcsIGJ1dCBpdCdzICpjcml0aWNhbCogdG8gdGhlIGNvbm5lY3Rpb24gc2V0dXAgcHJvY2Vzcy4gRGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGF0LiBgbXB0Y3BfdG9rZW5fYWNjZXB0YCwgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3RgLCBhbmQgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIOKAkyBhbGwgb2YgdGhlc2UgbG9vayBsaWtlIHNvbGlkIGZvY3VzIHN5bWJvbHMuIFRoZXkncmUgYWxsIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgbW9kaWZpZWQgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGxvZ2ljLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgYW5hbHlzaXMgZG9uZSwgSSdtIHJlYWR5IHRvIG1vdmUgZm9yd2FyZCBhbmQgc3RhcnQgc2V0dGluZyB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCB3aXRoIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTM0LCJPdXRwdXRUb2tlbnMiOjIwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA1OjE2LjE3MjQ5MjY3NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDU2Mjc1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9za19jbG9uZV9pbml0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9hY2NlcHRcIixcbiAgICBcIm1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwYXRoLCBzcGVjaWZpY2FsbHkgaG93IHJlcXVlc3Qgc29ja2V0cyBhcmUgY2xvbmVkIGFuZCBob3cgdG9rZW5zIGFyZSBtYW5hZ2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLiBJdCBpbnRyb2R1Y2VzIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgdG8gaGFuZGxlIGZhaWx1cmVzIGFuZCByZXR1cm4gYSBib29sZWFuLCB3aGljaCBpcyB0aGVuIGNoZWNrZWQgaW4gYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIE1QVENQIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIGR1cmluZyBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3NrX2Nsb25lX2luaXRcIixcbiAgICBcIm1wdGNwX3Rva2VuX2FjY2VwdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3RcIixcbiAgICBcIm1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHBhdGgsIHNwZWNpZmljYWxseSBob3cgcmVxdWVzdCBzb2NrZXRzIGFyZSBjbG9uZWQgYW5kIGhvdyB0b2tlbnMgYXJlIG1hbmFnZWQgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuIEl0IGludHJvZHVjZXMgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIGFuZCBtb2RpZmllcyBgbXB0Y3BfdG9rZW5fYWNjZXB0YCB0byBoYW5kbGUgZmFpbHVyZXMgYW5kIHJldHVybiBhIGJvb2xlYW4sIHdoaWNoIGlzIHRoZW4gY2hlY2tlZCBpbiBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgTVBUQ1Agc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjfv7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 12:02:13 +0000 UTC FinishedAt: 2026-08-06 12:05:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "44871eadd07a7f004aa00cb87399461eea08c630", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "44871eadd07a7f004aa00cb87399461eea08c630", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "b0166c3f-e0ee-4ab4-af76-00e685ad32a1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_sk_clone_init", "mptcp_token_accept", "mptcp_token_move_request", "mptcp_token_destroy_request", "mptcp_subflow_reqsk_clone" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9za19jbG9uZV9pbml0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2FjY2VwdCYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwYXRoLCBzcGVjaWZpY2FsbHkgaG93IHJlcXVlc3Qgc29ja2V0cyBhcmUgY2xvbmVkIGFuZCBob3cgdG9rZW5zIGFyZSBtYW5hZ2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLiBJdCBpbnRyb2R1Y2VzIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgdG8gaGFuZGxlIGZhaWx1cmVzIGFuZCByZXR1cm4gYSBib29sZWFuLCB3aGljaCBpcyB0aGVuIGNoZWNrZWQgaW4gYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIE1QVENQIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIGR1cmluZyBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM4N2NlMWQ5YTRmMTZmYzE4YmNmYzkyNmE0MjhkZjE2ZTgwMjJmY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDEyOjAzOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21wdGNwLmggYi9pbmNsdWRlL25ldC9tcHRjcC5oXG5pbmRleCA3MWI5ZmM1YTU3OTYzLi4wYTAyYWMxZWQyMmQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuQEAgLTIyMyw2ICYjNDM7MjIzLDggQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG4gXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4gXHRcdFx0XHRcdCAgICAgICBib29sIGF0dGFjaF9saXN0ZW5lcik7XG4mIzQzO3ZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiBcbiBfX2JlMzIgbXB0Y3BfZ2V0X3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbkBAIC0zMDksNiAmIzQzOzMxMSwxMSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjg5NmY0NzJkY2JhMjkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMjEsNiAmIzQzOzIxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcF9lY24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbXB0Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrX3JldXNlcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2FkZHJjb25mLmhcdTAwM2VcbiBcbkBAIC05NjEsNiAmIzQzOzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVx1MDAzZXNrKS1cdTAwM2VmYXN0b3Blbl9yc2ssIG5yZXEpO1xuIFx0fVxuIFxuJiM0MztcdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcbiYjNDM7XHRcdG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUocmVxLCBucmVxKTtcbiYjNDM7XG4gXHRyZXR1cm4gbnJlcTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggY2E2NDRlYzUzZWVkYi4uMDdlYWE2ODU4ZDA1MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTM2MDgsMTcgJiM0MzszNjA4LDE5IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdCAqL1xuIFx0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0VTVEFCTElTSEVEKTtcbiBcbiYjNDM7XHRpZiAoIW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKSkge1xuJiM0MztcdFx0bXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spO1xuJiM0MztcdFx0aW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2UobnNrKTtcbiYjNDM7XHRcdHRjcF9kb25lKG5zayk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogVGhlIG1zayBtYWludGFpbiBhIHJlZiB0byBlYWNoIHN1YmZsb3cgaW4gdGhlIGNvbm5lY3Rpb25zIGxpc3QgKi9cbiBcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWZpcnN0LCBzc2spO1xuIFx0c3ViZmxvdyA9IG1wdGNwX3N1YmZsb3dfY3R4KHNzayk7XG4gXHRsaXN0X2FkZChcdTAwMjZzdWJmbG93LVx1MDAzZW5vZGUsIFx1MDAyNm1zay1cdTAwM2Vjb25uX2xpc3QpO1xuIFx0c29ja19ob2xkKHNzayk7XG4gXG4tXHQvKiBuZXcgbXBjIHN1YmZsb3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBuZXdseVxuLVx0ICogY3JlYXRlZCBtcHRjcCBzb2NrZXRcbi1cdCAqL1xuLVx0bXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spO1xuLVxuIFx0Lyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpXG4gXHQgKiB1c2VzIHRoZSBjb3JyZWN0IGRhdGFcbiBcdCAqL1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbmluZGV4IDRhMmQ0MGNkN2IxMzIuLmM1OGNmYjEzMjZiNzMgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbkBAIC0xMDc0LDkgJiM0MzsxMDc0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIH1cbiBcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbiYjNDM7dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXG4mIzQzO2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pO1xuIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF90b2tlbl9nZXRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0b2tlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbmluZGV4IDhlMzg2ODk5Y2ViOTguLjY1ZDg3NmEwODIzMzggMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5AQCAtNDcsNiAmIzQzOzQ3LDE5IEBAIHN0YXRpYyB2b2lkIHN1YmZsb3dfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0bXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHJlcSk7XG4gfVxuIFxuJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXE7XG4mIzQzO1xuJiM0MztcdHN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2sobmV3X3JlcSk7XG4mIzQzO1xuJiM0MztcdGlmIChzdWJmbG93X3JlcS1cdTAwM2Vtc2spXG4mIzQzO1x0XHRzb2NrX2hvbGQoKHN0cnVjdCBzb2NrICopc3ViZmxvd19yZXEtXHUwMDNlbXNrKTtcbiYjNDM7XG4mIzQzO1x0bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHJlcSwgbmV3X3JlcSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgc3ViZmxvd19nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5MiwgdTMyIG5vbmNlMSwgdTMyIG5vbmNlMixcbiBcdFx0XHRcdCAgdm9pZCAqaG1hYylcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuLmMgYi9uZXQvbXB0Y3AvdG9rZW4uY1xuaW5kZXggZjFhNTBmMzY3YWRkOC4uMjQ4NzdhMmMzNzcyNyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC90b2tlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvdG9rZW4uY1xuQEAgLTE4MCw2ICYjNDM7MTgwLDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0Mzt2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbiYjNDM7XHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4mIzQzO1xuJiM0MztcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xuJiM0MztcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbiYjNDM7XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbiYjNDM7XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuJiM0MztcdFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSlcbiYjNDM7XHRcdFx0aGxpc3RfbnVsbHNfcmVwbGFjZV9pbml0X3JjdShcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ld19zdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoXG4gICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGJlIHJlbW92ZWRcbkBAIC0xODcsMjQgJiM0MzsyMTcsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXG4gICpcbiAgKiBDYWxsZWQgd2hlbiBhIFNZTiBwYWNrZXQgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIGNvbm5lY3Rpb24sIGkuZS5cbiAgKiBpcyBub3QgYSBqb2luIHJlcXVlc3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBvbiBzdWNjZXNzLlxuICAqL1xuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuIFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xuJiM0MztcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXG4tXHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4gXHRidWNrZXQgPSB0b2tlbl9idWNrZXQocmVxLVx1MDAzZXRva2VuKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4mIzQzO1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0LyogcGVkYW50aWMgbG9va3VwIGNoZWNrIGZvciB0aGUgbW92ZWQgdG9rZW4gKi9cbiBcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSlcbi1cdFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiYjNDM7XHRpZiAocG9zICE9IHJlcSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cmVxLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0X19za19udWxsc19hZGRfbm9kZV9yY3UoKHN0cnVjdCBzb2NrICopbXNrLCBcdTAwMjZidWNrZXQtXHUwMDNlbXNrX2NoYWluKTtcbiYjNDM7XHRyZXQgPSB0cnVlO1xuJiM0MztcbiYjNDM7dW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbilcbkBAIC0zNTUsMTYgJiM0MzszOTcsMjEgQEAgdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4gXG4tXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4mIzQzO1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4gXHRwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCBzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gc3ViZmxvd19yZXEpKSB7XG4mIzQzO1x0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xuIFx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cG9zLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0XHRidWNrZXQtXHUwMDNlY2hhaW5fbGVuLS07XG4gXHR9XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXG5pbmRleCA0ZmMzOWZhMmUyNjJkLi5iZTlhY2NlOGE1NjczIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuQEAgLTk5LDcgJiM0Mzs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKFx1MDAyNmluaXRfbmV0LCBtc2stXHUwMDNldG9rZW4pKTtcbiBcbiBcdC8qIHRoaXMgaXMgbm93IGEgbm8tb3AgKi9cbkBAIC0xMjIsNyAmIzQzOzEyMiw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfZGVzdHJveWVkKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFxuIFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2c2stXHUwMDNlc2tfcmVmY250LCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7TVBUQ1BfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX3NrX2Nsb25lX2luaXQmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fYWNjZXB0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHBhdGgsIHNwZWNpZmljYWxseSBob3cgcmVxdWVzdCBzb2NrZXRzIGFyZSBjbG9uZWQgYW5kIGhvdyB0b2tlbnMgYXJlIG1hbmFnZWQgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuIEl0IGludHJvZHVjZXMgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIGFuZCBtb2RpZmllcyBgbXB0Y3BfdG9rZW5fYWNjZXB0YCB0byBoYW5kbGUgZmFpbHVyZXMgYW5kIHJldHVybiBhIGJvb2xlYW4sIHdoaWNoIGlzIHRoZW4gY2hlY2tlZCBpbiBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgTVBUQ1Agc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzg3Y2UxZDlhNGYxNmZjMThiY2ZjOTI2YTQyOGRmMTZlODAyMmZjZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMTI6MDM6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaAppbmRleCA3MWI5ZmM1YTU3OTYzLi4wYTAyYWMxZWQyMmQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tcHRjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21wdGNwLmgKQEAgLTIyMyw2ICYjNDM7MjIzLDggQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywKIAkJCQkJICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lciwKIAkJCQkJICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTsKJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTsKIAogX19iZTMyIG1wdGNwX2dldF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKQEAgLTMwOSw2ICYjNDM7MzExLDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgX19iZTMyIG1wdGNwX3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAgeyByZXR1cm4gaHRvbmwoMHUpOyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTIxLDYgJiM0MzsyMSw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3hmcm0uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjcF9lY24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L21wdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2tfcmV1c2Vwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2FkZHJjb25mLmgmZ3Q7CiAKQEAgLTk2MSw2ICYjNDM7OTYyLDkgQEAgc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQlyY3VfYXNzaWduX3BvaW50ZXIodGNwX3NrKG5yZXEtJmd0O3NrKS0mZ3Q7ZmFzdG9wZW5fcnNrLCBucmVxKTsKIAl9CiAKJiM0MzsJaWYgKHJza19pc19tcHRjcChyZXEpKQomIzQzOwkJbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpOwomIzQzOwogCXJldHVybiBucmVxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IGNhNjQ0ZWM1M2VlZGIuLjA3ZWFhNjg1OGQwNTMgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0zNjA4LDE3ICYjNDM7MzYwOCwxOSBAQCBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJICovCiAJbXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0VTVEFCTElTSEVEKTsKIAomIzQzOwlpZiAoIW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKSkgewomIzQzOwkJbXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spOwomIzQzOwkJaW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2UobnNrKTsKJiM0MzsJCXRjcF9kb25lKG5zayk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwogCS8qIFRoZSBtc2sgbWFpbnRhaW4gYSByZWYgdG8gZWFjaCBzdWJmbG93IGluIHRoZSBjb25uZWN0aW9ucyBsaXN0ICovCiAJV1JJVEVfT05DRShtc2stJmd0O2ZpcnN0LCBzc2spOwogCXN1YmZsb3cgPSBtcHRjcF9zdWJmbG93X2N0eChzc2spOwogCWxpc3RfYWRkKCZhbXA7c3ViZmxvdy0mZ3Q7bm9kZSwgJmFtcDttc2stJmd0O2Nvbm5fbGlzdCk7CiAJc29ja19ob2xkKHNzayk7CiAKLQkvKiBuZXcgbXBjIHN1YmZsb3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBuZXdseQotCSAqIGNyZWF0ZWQgbXB0Y3Agc29ja2V0Ci0JICovCi0JbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spOwotCiAJLyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpCiAJICogdXNlcyB0aGUgY29ycmVjdCBkYXRhCiAJICovCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oCmluZGV4IDRhMmQ0MGNkN2IxMzIuLmM1OGNmYjEzMjZiNzMgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5oCkBAIC0xMDc0LDkgJiM0MzsxMDc0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogfQogCiBpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKJiM0Mzt2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7CiB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOwogaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spOwotdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLAomIzQzO2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqciwKIAkJCXN0cnVjdCBtcHRjcF9zb2NrICptc2spOwogYm9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKTsKIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF90b2tlbl9nZXRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0b2tlbik7CmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuYwppbmRleCA4ZTM4Njg5OWNlYjk4Li42NWQ4NzZhMDgyMzM4IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9zdWJmbG93LmMKQEAgLTQ3LDYgJiM0Mzs0NywxOSBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X3JlcV9kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIAltcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QocmVxKTsKIH0KIAomIzQzO3ZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxOwomIzQzOwomIzQzOwlzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpOwomIzQzOwomIzQzOwlpZiAoc3ViZmxvd19yZXEtJmd0O21zaykKJiM0MzsJCXNvY2tfaG9sZCgoc3RydWN0IHNvY2sgKilzdWJmbG93X3JlcS0mZ3Q7bXNrKTsKJiM0MzsKJiM0MzsJbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHJlcSwgbmV3X3JlcSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgc3ViZmxvd19nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5MiwgdTMyIG5vbmNlMSwgdTMyIG5vbmNlMiwKIAkJCQkgIHZvaWQgKmhtYWMpCiB7CmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW4uYyBiL25ldC9tcHRjcC90b2tlbi5jCmluZGV4IGYxYTUwZjM2N2FkZDguLjI0ODc3YTJjMzc3MjcgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC90b2tlbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC90b2tlbi5jCkBAIC0xODAsNiAmIzQzOzE4MCwzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxOwomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvczsKJiM0MzsJc3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0OwomIzQzOwomIzQzOwluZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTsKJiM0MzsKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKSB7CiYjNDM7CQltcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLSZndDt0b2tlbik7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkgewomIzQzOwkJbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtJmd0O3Rva2VuKTsKJiM0MzsJCWlmIChwb3MgPT0gc3ViZmxvd19yZXEpCiYjNDM7CQkJaGxpc3RfbnVsbHNfcmVwbGFjZV9pbml0X3JjdSgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlLAomIzQzOwkJCQkJCSAgICAgJmFtcDtuZXdfc3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpOwomIzQzOwkJZWxzZQomIzQzOwkJCW1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBtcHRjcF90b2tlbl9hY2NlcHQgLSByZXBsYWNlIGEgcmVxIHNrIHdpdGggZnVsbCBzb2NrIGluIHRva2VuIGhhc2gKICAqIEByZXE6IHRoZSByZXF1ZXN0IHNvY2tldCB0byBiZSByZW1vdmVkCkBAIC0xODcsMjQgJiM0MzsyMTcsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spCiAgKgogICogQ2FsbGVkIHdoZW4gYSBTWU4gcGFja2V0IGNyZWF0ZXMgYSBuZXcgbG9naWNhbCBjb25uZWN0aW9uLCBpLmUuCiAgKiBpcyBub3QgYSBqb2luIHJlcXVlc3QuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgb24gc3VjY2Vzcy4KICAqLwotdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7Ym9vbCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEsCiAJCQlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKQogewogCXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zOwogCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zazsKIAlzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7CiYjNDM7CWJvb2wgcmV0ID0gZmFsc2U7CiAKLQlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stJmd0O3NrX3Byb3QsIDEpOwogCWJ1Y2tldCA9IHRva2VuX2J1Y2tldChyZXEtJmd0O3Rva2VuKTsKIAlzcGluX2xvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmFtcDtyZXEtJmd0O3Rva2VuX25vZGUpKQomIzQzOwkJZ290byB1bmxvY2s7CiAKLQkvKiBwZWRhbnRpYyBsb29rdXAgY2hlY2sgZm9yIHRoZSBtb3ZlZCB0b2tlbiAqLwogCXBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS0mZ3Q7dG9rZW4pOwotCWlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSByZXEpKQotCQlobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoJmFtcDtyZXEtJmd0O3Rva2VuX25vZGUpOwomIzQzOwlpZiAocG9zICE9IHJlcSkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoJmFtcDtyZXEtJmd0O3Rva2VuX25vZGUpOwogCV9fc2tfbnVsbHNfYWRkX25vZGVfcmN1KChzdHJ1Y3Qgc29jayAqKW1zaywgJmFtcDtidWNrZXQtJmd0O21za19jaGFpbik7CiYjNDM7CXJldCA9IHRydWU7CiYjNDM7CiYjNDM7dW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay0mZ3Q7c2tfcHJvdCwgMSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbikKQEAgLTM1NSwxNiAmIzQzOzM5NywyMSBAQCB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7CiAJc3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0OwogCi0JaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKQomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpCiAJCXJldHVybjsKIAogCWJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS0mZ3Q7dG9rZW4pOwogCXNwaW5fbG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwogCXBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLSZndDt0b2tlbik7Ci0JaWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHN1YmZsb3dfcmVxKSkgewomIzQzOwlpZiAocG9zID09IHN1YmZsb3dfcmVxKSB7CiAJCWhsaXN0X251bGxzX2RlbF9pbml0X3JjdSgmYW1wO3Bvcy0mZ3Q7dG9rZW5fbm9kZSk7CiAJCWJ1Y2tldC0mZ3Q7Y2hhaW5fbGVuLS07CiAJfQomIzQzOwomIzQzO3VubG9jazoKIAlzcGluX3VubG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jCmluZGV4IDRmYzM5ZmEyZTI2MmQuLmJlOWFjY2U4YTU2NzMgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYwpAQCAtOTksNyAmIzQzOzk5LDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9hY2NlcHQoc3RydWN0IGt1bml0ICp0ZXN0KQogCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLAogCQkJbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTsKIAltc2stJmd0O3Rva2VuID0gcmVxLSZndDt0b2tlbjsKLQltcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spOwomIzQzOwlLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTsKIAlLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIG1zaywgbXB0Y3BfdG9rZW5fZ2V0X3NvY2soJmFtcDtpbml0X25ldCwgbXNrLSZndDt0b2tlbikpOwogCiAJLyogdGhpcyBpcyBub3cgYSBuby1vcCAqLwpAQCAtMTIyLDcgJiM0MzsxMjIsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2Rlc3Ryb3llZChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIDAsCiAJCQltcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpOwogCW1zay0mZ3Q7dG9rZW4gPSByZXEtJmd0O3Rva2VuOwotCW1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7CiYjNDM7CUtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpOwogCiAJLyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovCiAJcmVmY291bnRfc2V0KCZhbXA7c2stJmd0O3NrX3JlZmNudCwgMCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNUFRDUCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgTVBUQ1Agc3Vic3lzdGVtIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgdGFja2xpbmcgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGFnYWluLCBpbnRlcmVzdGluZy4mIzM0OyBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBpcyBhcm91bmQgaG93IHJlcXVlc3Qgc29ja2V0cyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgLCB3aGljaCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgaW5ldF9yZXFza19jbG9uZWAuIFRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZOKAlGhvdyB0aGUgcmVxdWVzdCBzb2NrZXRzIGFyZSBiZWluZyBjbG9uZWQgYW5kIG1hbmFnZWQgYWNyb3NzIHN1YmZsb3dzIHdpdGhpbiB0aGUgTVBUQ1AgZnJhbWV3b3JrLgoKVGhlbiBJIHNlZSBjaGFuZ2VzIHRvIGBtcHRjcF90b2tlbl9hY2NlcHRgLCBzaGlmdGluZyBpdHMgcmV0dXJuIHRvIGEgYm9vbGVhbiBhbmQgaW5jb3Jwb3JhdGluZyBmYWlsdXJlIGhhbmRsaW5nLiBUaGlzIGlzIGNyaXRpY2FsLiBOb3cgdGhlIGNsb25pbmcgaW5pdCBmdW5jdGlvbiwgYG1wdGNwX3NrX2Nsb25lX2luaXRgLCBpcyBnb2luZyB0byBiZSBkZXBlbmRlbnQgb24gdGhlIGJvb2xlYW4gdmFsdWUgcmV0dXJuZWQgZnJvbSBgbXB0Y3BfdG9rZW5fYWNjZXB0YC4gQW55IHRpbWUgeW91IGFsdGVyIGEgcmV0dXJuIHR5cGUgdG8gaW5jb3Jwb3JhdGUgZmFpbHVyZSBzdGF0ZXMsIHlvdSBuZWVkIHRvIGVuc3VyZSBldmVyeSBzaW5nbGUgY2FsbCBzaXRlIGNvcnJlY3RseSBwcm9jZXNzZXMgdGhlIGFkZGVkIGNvbXBsZXhpdHkuIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSwgaGFyZC10by1kZWJ1ZyBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgY2FyZWZ1bGx5LgoKSSBhbHNvIHNwb3QgbW9kaWZpY2F0aW9ucyB0byBgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0YCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZXNlIG1vcmUgY2xvc2VseSB0byBncmFzcCB0aGUgbG9naWMgYmVoaW5kIGl0LCBidXQgaXQgc2VlbXMgbGlrZSB0aGlzIGlzIGFib3V0IHJlc291cmNlIG1hbmFnZW1lbnQuIExpa2VseSBtb3Zpbmcgb3IgZGVzdHJveWluZyB0b2tlbnMgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3Qgc29ja2V0cyBhcyBwYXJ0IG9mIHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4KClRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGVzZSBzZWVtIHRvIGJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgYW5kIHRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNvIHRoaXMgd2lsbCBhZmZlY3QgdGhlIG92ZXJhbGwgTVBUQ1AgZnVuY3Rpb25hbGl0eS4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBpbXBhY3RpbmcgdGhlIGNvcmUgc3RhY2ssIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIE1QVENQIGNvbmZpZ3VyYXRpb25zIGFyZSB3aGF0IEkmIzM5O20gZXhwZWN0aW5nLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgTVBUQ1AsIHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgaXMgY29uZmlndXJlZCBjb3JyZWN0bHksIGFuZCBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgbmVlZCB0byBiZSB2ZXJpZmllZCBvciBhZGp1c3RlZC4gU28sIGxldCYjMzk7cyBzdGFydCBzZWFyY2hpbmcgZm9yIE1QVENQIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVBUQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWctMS1cbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1Rcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTI1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gYE1QVENQYC4gQWxyaWdodCwgdGhhdCBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjaG9pY2UuIEl0IGltbWVkaWF0ZWx5IHJhaXNlcyBxdWVzdGlvbnMgaW4gbXkgbWluZDogV2hhdCBvdGhlciBuZXR3b3JrIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQgYXJvdW5kIE1QVENQPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzIGxvYWRlZCBhbmQgYWN0aXZlIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBhcnRpY3VsYXIgTVBUQ1Agc2V0dXA/IFdoYXQgYWJvdXQgdGhlIHJvdXRpbmcgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgbWVudGFsbHkgbWFwIG91dCB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb25mbGljdHMgb3Igb3ZlcnNpZ2h0cy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGNoZWNrLiBJIG5lZWQgdG8gZW5zdXJlIGFsbCB0aGUgcHJlcmVxdWlzaXRlcyBhcmUgbWV0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWctMS1cbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1Rcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTUwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXBlbmRlbmN5IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3IgTXVsdGlwYXRoIFRDUCBhcmUgZGVmaW5lZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCByaWdodD8gQ2hlY2tpbmcgS2NvbmZpZyBmaXJzdCBtYWtlcyB0aGUgbW9zdCBzZW5zZS4gSXQmIzM5O2xsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIHJlcXVpcmVkIGJlZm9yZSBJIGNhbiB0cnVseSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBwb3J0aW9ucy4gSXQgYWxzbyBhdm9pZHMgbWUgZ29pbmcgZG93biBhbnkgYmxpbmQgYWxsZXlzIG9mIGludmVzdGlnYXRpbmcgdGhpbmdzIHRoYXQgYXJlIG9idmlvdXNseSBnb2luZyB0byBiZSB1bmF2YWlsYWJsZSBiZWNhdXNlIGRlcGVuZGVuY2llcyBhcmUgdW5tZXQuIFRoaXMgYXBwcm9hY2ggc2hvdWxkIHNhdmUgbWUgdGltZSBpbiB0aGUgbG9uZyBydW4uIEdvb2QgcGxhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0XG4gICAyOlx0Y29uZmlnIE1QVENQXG4gICAzOlx0XHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDU6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcbiAgMTA6XHRcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcbiAgMTE6XHRcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxuICAxMjpcdFx0ICBNUFRDUC5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBNUFRDUFxuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcbiAgMTc6XHRcdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4gIDE4Olx0XHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIE1QVENQX0lQVjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDAwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQW5hbHl6aW5nIE1QVENQIENvbmZpZ3VyYXRpb24gYW5kIFNvY2tldCBDbG9uaW5nKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYE1QVENQYCBjb25maWd1cmF0aW9uIGhlcmUsIGFuZCB0aGlua2luZyB0aGF0IGBNUFRDUF9JUFY2YCBjb3VsZCBwb3RlbnRpYWxseSBiZSByZWxldmFudCBhcyB3ZWxsLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHNldHRpbmdzIGltcGFjdCBjb25uZWN0aW9uIGhhbmRsaW5nLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMuIE15IHBsYW4gaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgLCBiZWNhdXNlIEkgcmVtZW1iZXIgdGhhdCYjMzk7cyB3aGVyZSBhIGNydWNpYWwgZnVuY3Rpb24sIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCwgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aGluIHRoZSBJUHY0IGNvbm5lY3Rpb24gcHJvY2Vzcy4gVGhhdCYjMzk7bGwgdGVsbCBtZSBob3cgdGhlIG11bHRpLXBhdGggVENQIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZCwgYW5kIGhvdyB0aGUgc3ViZmxvdyBjbG9uaW5nIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9OTE0PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTk2NS1cdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6OTY2Olx0XHRtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHJlcSwgbnJlcSk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTk2Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQwNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEluZXQgUmVxdWVzdCBTb2NrZXQgQ2xvbmUqKgoKQWxyaWdodCwgc28gYGluZXRfcmVxc2tfY2xvbmVgIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUmIzM5O3MgdGhpcyBmdW5jdGlvbiAqYWN0dWFsbHkqIGJlaW5nIGNhbGxlZD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbCBjaGFpbiBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIHdpdGhpbiB0aGUgSVAgc3RhY2suIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRvIGZpZ3VyZSBvdXQgdGhlIHNjZW5hcmlvcyB3aGVyZSByZXF1ZXN0IHNvY2tldHMgYXJlIGJlaW5nIGNsb25lZCwgYW5kIHdoeS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGtleSB0byBhIG1lYW5pbmdmdWwgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfcmVxc2tfY2xvbmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz05MDU9dm9pZCBfX3JlcXNrX2ZyZWUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtOTEzLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo5MTQ6c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05MTUtXHRcdFx0XHRcdCAgICAgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzNz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTA1My1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTA1NDpcdFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBuc2spO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMDU1LVx0XHRpZiAoIW5yZXEpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDIxPXN0cnVjdCBzb2NrICppbmV0X2Nza19jb21wbGV0ZV9oYXNoZGFuY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqY2hpbGQsXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM0LVx0XHRcdC8qIGhvbGQgYSByZWZjbnQgZm9yIHRoZSBucmVxLVx1MDAzZXJza19saXN0ZW5lclxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDM1Olx0XHRcdCAqIHdoaWNoIGlzIGFzc2lnbmVkIGluIGluZXRfcmVxc2tfY2xvbmUoKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM2LVx0XHRcdCAqL1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM3LVx0XHRcdHNvY2tfaG9sZChzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjE0Mzg6XHRcdFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0MzktXHRcdFx0aWYgKCFucmVxKSB7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDcwPXZvaWQgaW5ldF9jc2tfbGlzdGVuX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQ5NC1cdFx0aWYgKG5zaykge1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDk1Olx0XHRcdG5yZXEgPSBpbmV0X3JlcXNrX2Nsb25lKHJlcSwgbnNrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQ5Ni1cdFx0XHRpZiAobnJlcSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTYzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgSW50ZXJhY3Rpb25zIEJldHdlZW4gVENQIFJlcXVlc3QgQ2xvbmVzIGFuZCBNUFRDUCBUb2tlbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJIHNlZSBgaW5ldF9yZXFza19jbG9uZWAgaXMgdHJpZ2dlcmVkIGZyb20gYSBmZXcgZGlmZmVyZW50IHBsYWNlczogdGhlIGByZXFza190aW1lcl9oYW5kbGVyYCwgYGluZXRfY3NrX2NvbXBsZXRlX2hhc2hkYW5jZWAsIGFuZCBhbHNvIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAuIFRoYXQgbWVhbnMgYW55IGludGVyYWN0aW9ucyB3aXRoIE1QVENQIGhhdmUgYSBzdHJvbmcgcG9zc2liaWxpdHkgb2YgcnVubmluZyBpbnRvIGlzc3VlcyB3aXRoIHN0YW5kYXJkIFRDUCByZXF1ZXN0IGNsb25lcy4KCk15IG5leHQgc3RlcCBpcyB0byBsb29rIGF0IHRoZSByZWNlbnQgY2hhbmdlcyByZWxhdGVkIHRvIHRva2VuIGhhbmRsaW5nIGluIHRoZSBNUFRDUCBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGNoZWNrIHRoZSBmdW5jdGlvbnMgbW9kaWZpZWQgaW4gYG5ldC9tcHRjcC90b2tlbi5jYDogYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9hY2NlcHRgLCBhbmQgYG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdGAuIFRoZXNlIGFyZSBhbGwgZmFpcmx5IGNvcmUgb3BlcmF0aW9ucyBmb3IgdG9rZW4gbWFuYWdlbWVudCwgc28gYW55IGludGVycGxheSB3aXRoIHJlcXVlc3QgY2xvbmluZyBoZXJlIGlzIGdvaW5nIHRvIGJlIGNyaXRpY2FsLgoKVGhlbiwgdGhlcmUmIzM5O3MgYG5ldC9tcHRjcC9wcm90b2NvbC5jYCB0byBjb25zaWRlciwgYW5kIHNwZWNpZmljYWxseSwgYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGlzIG9uZSBpcyBwb3RlbnRpYWxseSB2ZXJ5IGludGVyZXN0aW5nLiBJdCYjMzk7cyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgYSBzb2NrZXQgY2xvbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBtcHRjcF9za19jbG9uZV9pbml0YCB3b3JrcyBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBXaGF0IGlzIHRoZSBjbG9uaW5nIGxvZ2ljIGFuZCB3aGF0IHBhcnRzIG9mIE1QVENQIGFyZSBiZWluZyBjbG9uZWQ/IEFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgc3RhbmRhcmQgVENQIGNsb25pbmcgcHJvY2VzcyB0cmlnZ2VyZWQgYnkgYGluZXRfcmVxc2tfY2xvbmVgPyBJIG5lZWQgdG8gYW5hbHl6ZSBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgaW4gZGV0YWlsLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgYmVzdCB1bmRlcnN0YW5kaW5nIG9mIGFueSBwb3RlbnRpYWwgaXNzdWVzIGFuZCBpZGVudGlmeSB3aGVyZSB0byBmb2N1cyBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3Bfc2tfY2xvbmVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTM1Mzg9c3RhdGljIHZvaWQgbXB0Y3BfY29weV9pcF9vcHRpb25zKHN0cnVjdCBzb2NrICpuZXdzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1NTctXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNTU4OnN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1NTktXHRcdFx0XHQgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgQ2FsbHNpdGVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtZSwgaXQmIzM5O3MgaW52b2x2ZWQgaW4gY2xvbmluZyBvciBpbml0aWFsaXppbmcgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIHNvY2tldCBzdHJ1Y3R1cmVzLiBLbm93aW5nIHRoZSBjYWxsIGhpZXJhcmNoeSB3aWxsIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGVzZSBjbG9uZXMgYXJlIGJlaW5nIGNyZWF0ZWQgYW5kIGNvbmZpZ3VyZWQsIGFuZCB0byBwcm9wZXJseSBkZWJ1ZyBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHRvb2xzLCBsaWtlbHkgYSBjb21iaW5hdGlvbiBvZiBzdGF0aWMgYW5hbHlzaXMgKGxpa2UgYGNzY29wZWAgb3IgYGNsYW5nZGApIGFuZCBkeW5hbWljIGFuYWx5c2lzIChtYXliZSBgcGVyZmAgb3IgYGZ0cmFjZWAgaWYgc3RhdGljIGFuYWx5c2lzIGlzIGluc3VmZmljaWVudCksIHRvIHF1aWNrbHkgbWFwIG91dCB0aGUgZnVuY3Rpb24mIzM5O3MgdXNhZ2UuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNyaXRpY2FsIHBvaW50cywgbGlrZSB3aXRoaW4gdGhlIHNvY2tldCBjcmVhdGlvbiBwYXRoLCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIG9yIHBlcmhhcHMgZHVyaW5nIGFkZHJlc3MgZmFpbG92ZXIgc2NlbmFyaW9zLiBJIGFudGljaXBhdGUgZW5jb3VudGVyaW5nIG90aGVyIE1QVENQLXNwZWNpZmljIGZ1bmN0aW9ucyBpbiB0aGUgY2FsbCBncmFwaC4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3NrX2Nsb25lX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MzUzOD1zdGF0aWMgdm9pZCBtcHRjcF9jb3B5X2lwX29wdGlvbnMoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU1Ny1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NTg6c3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU1OS1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTkxNT12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZCk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtOTE3LVxubmV0L21wdGNwL3Byb3RvY29sLmg6OTE4OnN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTkxOS1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9ODE5PXN0YXRpYyBzdHJ1Y3Qgc29jayAqc3ViZmxvd19zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg5NS1cdFx0aWYgKGN0eC1cdTAwM2VtcF9jYXBhYmxlKSB7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjg5NjpcdFx0XHRjdHgtXHUwMDNlY29ubiA9IG1wdGNwX3NrX2Nsb25lX2luaXQobGlzdGVuZXItXHUwMDNlY29ubiwgXHUwMDI2bXBfb3B0LCBjaGlsZCwgcmVxKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtODk3LVx0XHRcdGlmICghY3R4LVx1MDAzZWNvbm4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MDMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNUFRDUCBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQgUGF0aCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGhvdyBNUFRDUCBjb25uZWN0aW9ucyBhcmUgZXN0YWJsaXNoZWQsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBzdWJmbG93X3N5bl9yZWN2X3NvY2tgIGNhbGwsIHdoZXJlIGBtcHRjcF9za19jbG9uZV9pbml0YCBpcyBpbnZva2VkLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBub3cgcmV0dXJucyBhIGJvb2xlYW4sIGFuZCBpZiBpdCBmYWlscywgaXQgdHJpZ2dlcnMgdGhlIGNsZWFudXAgd2l0aGluIGBtcHRjcF9za19jbG9uZV9pbml0YCBhbmQgcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIGV4cGxvcmUgdGhpcyBjaGFuZ2UgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLgoKTXkgZm9jdXMgc3ltYm9scyBhcmU6IGBtcHRjcF9za19jbG9uZV9pbml0YCwgYG1wdGNwX3Rva2VuX2FjY2VwdGAsIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0YCwgYW5kIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYC4KCkdvb2QsIGl0IHNlZW1zIHRoZXNlIHN5bWJvbHMgYXJlICpub3QqIHN0YXRpYywgd2hpY2ggZ2l2ZXMgdXMgbW9yZSBlbnRyeSBwb2ludHMuIEFuZCwgdGhleSYjMzk7cmUgZ2xvYmFsIHRvIHRoZSBNUFRDUCBzdWJzeXN0ZW0uIFRoaXMgbWVhbnMgdGhleSBhcmUgYWNjZXNzaWJsZSBmcm9tIHZhcmlvdXMgcGFydHMgb2YgdGhlIGtlcm5lbCwgaW5jcmVhc2luZyB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLgoKTm93IEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIHNwZWNpZmljYWxseSwgYW5kIGhvdyBpdCBpcyBpbXBsZW1lbnRlZCBpbiBgbmV0L21wdGNwL3N1YmZsb3cuY2AuIEl0IGlzIGxpa2VseSB0aGUgcGxhY2Ugd2hlcmUgdGhlIG5ldyByZXR1cm4gcGF0aCBmcm9tIGBtcHRjcF90b2tlbl9hY2NlcHRgIHdvdWxkIGJlIG1vc3QgcmVsZXZhbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc3ViZmxvdy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zdWJmbG93LmM9Mzg9c3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy00OS1cbm5ldC9tcHRjcC9zdWJmbG93LmM6NTA6dm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNTEtXHRcdFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkFuYWx5emluZyB0aGUgRHluYW1pYyBOYXR1cmUgb2YgVGhpcyoqCgpSaWdodCwgdGhpcyBpc24mIzM5O3QgYSBzaW1wbGUsIHN0YXRpYyBzaXR1YXRpb24uIEl0JiMzOTtzIGNsZWFybHkgY2hhbmdpbmcgYW5kIHJlcXVpcmVzIGEgZHluYW1pYyBhcHByb2FjaCB0byB1bmRlcnN0YW5kIGl0IGZ1bGx5LiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgc3BlY2lmaWMgZnVuY3Rpb246IGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgIHdpdGhpbiB0aGUgYG5ldC9tcHRjcC90b2tlbi5jYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGlzIG1vdmluZy10b2tlbiBzeXN0ZW0uIExldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGF0IGZ1bmN0aW9uJiMzOTtzIHNwZWNpZmljcy4uLiBpdCYjMzk7cyBiZWVuIGEgd2hpbGUsIGJ1dCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlbGF0ZWQgdG8gdG9rZW4gbWlncmF0aW9uIHNob3VsZCByZXNpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC90b2tlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC90b2tlbi5jPTE1MT1pbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvdG9rZW4uYy0xODItXG5uZXQvbXB0Y3AvdG9rZW4uYzoxODM6dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L21wdGNwL3Rva2VuLmMtMTg0LVx0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjM5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTVBUQ1AgVG9rZW4gQWNjZXB0YW5jZSoqCgpSaWdodCwgdGhpcyBpc24mIzM5O3QgYSBzaW1wbGUsIHN0YXRpYyBzdGF0ZS4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGR5bmFtaWMuIFRoZSBrZXkgbGllcyBpbiBob3cgTVBUQ1AgdG9rZW5zIGFyZSBhY2NlcHRlZCBhbmQgaGFuZGxlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIGRpcmVjdGx5LiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGBtcHRjcF90b2tlbl9hY2NlcHRgIGZ1bmN0aW9uLCB3aGljaCBJICprbm93KiByZXNpZGVzIHdpdGhpbiBgbmV0L21wdGNwL3Rva2VuLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgYWNjZXB0YW5jZSBsb2dpYyBpcyBnb2luZyB0byBiZS4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHRoZSBjb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF90b2tlbl9hY2NlcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvdG9rZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvdG9rZW4uYz0xODM9dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC90b2tlbi5jLTIxMy0vKipcbm5ldC9tcHRjcC90b2tlbi5jOjIxNDogKiBtcHRjcF90b2tlbl9hY2NlcHQgLSByZXBsYWNlIGEgcmVxIHNrIHdpdGggZnVsbCBzb2NrIGluIHRva2VuIGhhc2hcbm5ldC9tcHRjcC90b2tlbi5jLTIxNS0gKiBAcmVxOiB0aGUgcmVxdWVzdCBzb2NrZXQgdG8gYmUgcmVtb3ZlZFxuLS1cbm5ldC9tcHRjcC90b2tlbi5jLTIyMi0gKi9cbm5ldC9tcHRjcC90b2tlbi5jOjIyMzpib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbm5ldC9tcHRjcC90b2tlbi5jLTIyNC1cdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC90b2tlbi5jPTQ2Nz1FWFBPUlRfU1lNQk9MX0dQTChtcHRjcF90b2tlbl9uZXdfY29ubmVjdCk7XG5uZXQvbXB0Y3AvdG9rZW4uYzo0Njg6RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3BfdG9rZW5fYWNjZXB0KTtcbm5ldC9tcHRjcC90b2tlbi5jLTQ2OS1FWFBPUlRfU1lNQk9MX0dQTChtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE0MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgRHluYW1pYyBOYXR1cmUgb2YgVG9rZW5zKioKClJpZ2h0LCBub3QgYSBzdGF0aWMgc2l0dWF0aW9uIGF0IGFsbC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCYjMzk7cyBjaGFuZ2luZy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGlzIHRva2VuIGRlc3RydWN0aW9uIGlzIGhhbmRsZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzLCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdGAgZnVuY3Rpb24uIFRoYXQgZnVuY3Rpb24gbGl2ZXMgaW4gYG5ldC9tcHRjcC90b2tlbi5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBiZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGR5bmFtaWMgYmVoYXZpb3Igd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Rva2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Rva2VuLmM9Mzg2PUVYUE9SVF9TWU1CT0xfR1BMKG1wdGNwX3Rva2VuX2l0ZXJfbmV4dCk7XG4tLVxubmV0L21wdGNwL3Rva2VuLmMtMzg4LS8qKlxubmV0L21wdGNwL3Rva2VuLmM6Mzg5OiAqIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdCAtIHJlbW92ZSBtcHRjcCBjb25uZWN0aW9uL3Rva2VuXG5uZXQvbXB0Y3AvdG9rZW4uYy0zOTAtICogQHJlcTogbXB0Y3AgcmVxdWVzdCBzb2NrZXQgZHJvcHBpbmcgdGhlIHRva2VuXG4tLVxubmV0L21wdGNwL3Rva2VuLmMtMzkzLSAqL1xubmV0L21wdGNwL3Rva2VuLmM6Mzk0OnZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbm5ldC9tcHRjcC90b2tlbi5jLTM5NS17XG4tLVxubmV0L21wdGNwL3Rva2VuLmM9NDY4PUVYUE9SVF9TWU1CT0xfR1BMKG1wdGNwX3Rva2VuX2FjY2VwdCk7XG5uZXQvbXB0Y3AvdG9rZW4uYzo0Njk6RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KTtcbm5ldC9tcHRjcC90b2tlbi5jLTQ3MC1FWFBPUlRfU1lNQk9MX0dQTChtcHRjcF90b2tlbl9kZXN0cm95KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTVBUQ1AgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhpcyBpc24mIzM5O3QgYSBzdGF0aWMgc2l0dWF0aW9uLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgTVBUQ1AgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSwgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBtcHRjcF9za19jbG9uZV9pbml0YCwgYG1wdGNwX3Rva2VuX2FjY2VwdGAsIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0YCwgYW5kIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYC4KCk5vdyBmb3IgdGhlIGNvbmZpZyBvcHRpb25zLCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGRlZmluaXRlbHkgbmVlZCBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAuIEJ1dCBiZWZvcmUgSSBzaWduIG9mZiBvbiB0aGF0LCBJIHNob3VsZCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlsZS4KCkFscmlnaHQsIGhlcmUgaXQgaXM6CmBgYApjb25maWcgTVBUQ1AKCWJvb2wgJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUCYjMzQ7CglkZXBlbmRzIG9uIElORVQKCXNlbGVjdCBTS0JfRVhURU5TSU9OUwoJc2VsZWN0IENSWVBUT19MSUJfU0hBMjU2CglzZWxlY3QgQ1JZUFRPX0xJQl9VVElMUwpgYGAKU28sIGxvb2tzIGxpa2UganVzdCBgTVBUQ1BgIGlzIHRoZSBlc3NlbnRpYWwgb25lLiBUaGUgc2VsZWN0cyBhcmUgYWxsIHRha2VuIGNhcmUgb2YgaW4gdGhvc2Ugb3B0aW9ucy4gYE1QVENQX0lQVjZgIGlzIGFsc28gYSBnb29kIGlkZWEgZm9yIElQdjYgc3VwcG9ydCwgc28gSSYjMzk7bGwgaW5jbHVkZSB0aGF0IGFzIHdlbGwuIEJ1dCB3YWl0LCBgTVBUQ1BfSVBWNmAgZGVwZW5kcyBvbiBgSVBWNmAsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgZGVwZW5kZW5jeSBpbiBtaW5kLiBKdXN0IHRvIGJlIHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgbmV0L21wdGNwL0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVBUQ1BfSVBWNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM1NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWx2aW5nIGludG8gdGhlIE1QVENQIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtUaW1lIHRvIGRpZyBpbnRvIHRoZSByZXN0IG9mIHRoZSBgbmV0L21wdGNwL0tjb25maWdgIGZpbGUuJiMzNDsgSSYjMzk7bSBvYnZpb3VzbHkgZmFtaWxpYXIgd2l0aCBNUFRDUCBhbmQgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eSwgc28gSSYjMzk7bSBsaWtlbHkgbm90IG5lZWRpbmcgYSBwcmltZXIuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3Igc29tZXRoaW5nIHNwZWNpZmljLiBQZXJoYXBzIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGEgbmV3IGZlYXR1cmUgSSYjMzk7bSBldmFsdWF0aW5nIG9yIGRlYnVnZ2luZy4gTWF5YmUgSSBuZWVkIHRvIGdyYXNwIGhvdyBjZXJ0YWluIGRlcGVuZGVuY2llcyB3b3JrIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLCBvciBpZGVudGlmeSB3aGljaCBzcGVjaWZpYyBLY29uZmlnIHN5bWJvbHMgY29udHJvbCBhIHBhcnRpY3VsYXIgcGFyYW1ldGVyIG9yIGJlaGF2aW9yLiBJIGNvdWxkIGJlIHRyYWNpbmcgdGhlIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgb2YgY2VydGFpbiBNUFRDUCBmZWF0dXJlcy4gT3IgSSBtaWdodCBiZSByZXNlYXJjaGluZyBwb3RlbnRpYWwgY29uZmxpY3RzIGJldHdlZW4gdmFyaW91cyBNUFRDUCBtb2R1bGVzIG9yIHRoZWlyIGludGVyYWN0aW9uIHdpdGggb3RoZXIgbmV0d29ya2luZyBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBsaWtlbHkgYmUgc2Nhbm5pbmcgZm9yIHJlbGV2YW50IG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgdmFsdWVzIOKAkyBhbGwgd2l0aCB0aGUgZ29hbCBvZiBnZXR0aW5nIGEgY29tcGxldGUgYW5kIHByZWNpc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBLY29uZmlnIGNvbmZpZ3VyYXRpb24gc3BhY2UuIFRoZSBnb2FsIGlzIHRvIGRlZXBseSBjb21wcmVoZW5kIHRoZSBjb25maWd1cmFibGUgYXNwZWN0cyBvZiB0aGUgTVBUQ1AgaW1wbGVtZW50YXRpb24gc28gSSBjYW4gZWZmaWNpZW50bHkgZGlhZ25vc2UsIG1vZGlmeSBvciB1c2UgdGhlIHNvZnR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcbiAgMTc6XHRcdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4gIDE4Olx0XHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIE1QVENQX0lQVjZcbiAgMjE6XHRcdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAyMjpcdFx0ZGVwZW5kcyBvbiBJUFY2PXlcbiAgMjM6XHRcdGRlZmF1bHQgeVxuICAyNDpcdFxuICAyNTpcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG4gIDI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBLVU5JVFxuICAyODpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMjk6XHRcdGhlbHBcbiAgMzA6XHRcdCAgQ3VycmVudGx5IGNvdmVycyB0aGUgTVBUQ1AgY3J5cHRvIGFuZCB0b2tlbiBoZWxwZXJzLlxuICAzMTpcdFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcbiAgMzI6XHRcdCAgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvbiBidWlsZC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCBwbGVhc2UgcmVmZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MzQKCQkJCQkJCW91dHB1dDogMjA4CgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIE1QVENQIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0YXJnZXRpbmcgTVBUQ1AsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyBpdC4gSSBzZWUgdGhhdCBgTVBUQ1BfSVBWNmAgcmVsaWVzIG9uIGBJUFY2PXlgLCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIGluY2x1ZGUgYm90aCBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAgaW4gbXkgY29uZmlndXJhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhbHRlcmluZyB0aGUgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MsIHBhcnRpY3VsYXJseSBob3cgcmVxdWVzdCBzb2NrZXRzIGFyZSBjbG9uZWQgYW5kIGhvdyB0b2tlbnMgYXJlIGhhbmRsZWQgZHVyaW5nIHNldHVwLiBJdCBpbnRyb2R1Y2VzIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgdG8gcmV0dXJuIGEgYm9vbGVhbiwgd2hpY2ggcmVmbGVjdHMgaG93IGZhaWx1cmVzIGluIGBtcHRjcF9za19jbG9uZV9pbml0YCBhcmUgbWFuYWdlZC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGltcGFjdGluZyBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuCgpNeSB0aGlua2luZyBpcywgaXMgYG1wdGNwX3NrX2Nsb25lX2luaXRgIGEgZ29vZCBzdGFydGluZyBwb2ludD8gSXQmIzM5O3MgY2FsbGVkIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIHdoaWNoIGlzbiYjMzk7dCB0aGUgbW9zdCBoaWdoLXZvbHVtZSBjb2RlIHBhdGggbGlrZSBwYWNrZXQgcHJvY2Vzc2luZywgYnV0IGl0JiMzOTtzICpjcml0aWNhbCogdG8gdGhlIGNvbm5lY3Rpb24gc2V0dXAgcHJvY2Vzcy4gRGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGF0LiBgbXB0Y3BfdG9rZW5fYWNjZXB0YCwgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3RgLCBhbmQgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIOKAkyBhbGwgb2YgdGhlc2UgbG9vayBsaWtlIHNvbGlkIGZvY3VzIHN5bWJvbHMuIFRoZXkmIzM5O3JlIGFsbCB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIG1vZGlmaWVkIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBsb2dpYy4KCkFscmlnaHQsIHdpdGggdGhhdCBhbmFseXNpcyBkb25lLCBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZCBhbmQgc3RhcnQgc2V0dGluZyB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCB3aXRoIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3Bfc2tfY2xvbmVfaW5pdCYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9hY2NlcHQmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDttcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcGF0aCwgc3BlY2lmaWNhbGx5IGhvdyByZXF1ZXN0IHNvY2tldHMgYXJlIGNsb25lZCBhbmQgaG93IHRva2VucyBhcmUgbWFuYWdlZCBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cC4gSXQgaW50cm9kdWNlcyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgYW5kIG1vZGlmaWVzIGBtcHRjcF90b2tlbl9hY2NlcHRgIHRvIGhhbmRsZSBmYWlsdXJlcyBhbmQgcmV0dXJuIGEgYm9vbGVhbiwgd2hpY2ggaXMgdGhlbiBjaGVja2VkIGluIGBtcHRjcF9za19jbG9uZV9pbml0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBNUFRDUCBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9za19jbG9uZV9pbml0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2FjY2VwdCYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwYXRoLCBzcGVjaWZpY2FsbHkgaG93IHJlcXVlc3Qgc29ja2V0cyBhcmUgY2xvbmVkIGFuZCBob3cgdG9rZW5zIGFyZSBtYW5hZ2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLiBJdCBpbnRyb2R1Y2VzIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgdG8gaGFuZGxlIGZhaWx1cmVzIGFuZCByZXR1cm4gYSBib29sZWFuLCB3aGljaCBpcyB0aGVuIGNoZWNrZWQgaW4gYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIE1QVENQIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIGR1cmluZyBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjAzOjUzLjk0MzYwMDUzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzUzNDc3Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCIsXG4gICAgXCJNUFRDUF9JUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3Bfc2tfY2xvbmVfaW5pdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fYWNjZXB0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RcIixcbiAgICBcIm1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdFwiLFxuICAgIFwibXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcGF0aCwgc3BlY2lmaWNhbGx5IGhvdyByZXF1ZXN0IHNvY2tldHMgYXJlIGNsb25lZCBhbmQgaG93IHRva2VucyBhcmUgbWFuYWdlZCBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cC4gSXQgaW50cm9kdWNlcyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgYW5kIG1vZGlmaWVzIGBtcHRjcF90b2tlbl9hY2NlcHRgIHRvIGhhbmRsZSBmYWlsdXJlcyBhbmQgcmV0dXJuIGEgYm9vbGVhbiwgd2hpY2ggaXMgdGhlbiBjaGVja2VkIGluIGBtcHRjcF9za19jbG9uZV9pbml0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBNUFRDUCBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjAzOjUzLjk0MzYxMDMwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMzM2NTkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM4N2NlMWQ5YTRmMTZmYzE4YmNmYzkyNmE0MjhkZjE2ZTgwMjJmY2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAxMjowMzo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxcbmluZGV4IDcxYjlmYzVhNTc5NjMuLjBhMDJhYzFlZDIyZDkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxcbisrKyBiL2luY2x1ZGUvbmV0L21wdGNwLmhcXG5AQCAtMjIzLDYgKzIyMyw4IEBAIGludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTtcXG4rdm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpO1xcbiBcXG4gX19iZTMyIG1wdGNwX2dldF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbkBAIC0zMDksNiArMzExLDExIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcXG4re1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX2FjdGl2ZV9kZXRlY3RfYmxhY2tob2xlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBleHBpcmVkKSB7IH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG5pbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXFxuQEAgLTIxLDYgKzIxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC94ZnJtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwX2Vjbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L21wdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9hZGRyY29uZi5oXFx1MDAzZVxcbiBcXG5AQCAtOTYxLDYgKzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVxcdTAwM2VzayktXFx1MDAzZWZhc3RvcGVuX3JzaywgbnJlcSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcXG4rXFx0XFx0bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpO1xcbitcXG4gXFx0cmV0dXJuIG5yZXE7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCBjYTY0NGVjNTNlZWRiLi4wN2VhYTY4NThkMDUzIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMzYwOCwxNyArMzYwOCwxOSBAQCBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdCAqL1xcbiBcXHRtcHRjcF9zZXRfc3RhdGUobnNrLCBUQ1BfRVNUQUJMSVNIRUQpO1xcbiBcXG4rXFx0aWYgKCFtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zaykpIHtcXG4rXFx0XFx0bXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spO1xcbitcXHRcXHRpbmV0X2Nza19wcmVwYXJlX2ZvcmNlZF9jbG9zZShuc2spO1xcbitcXHRcXHR0Y3BfZG9uZShuc2spO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4gXFx0LyogVGhlIG1zayBtYWludGFpbiBhIHJlZiB0byBlYWNoIHN1YmZsb3cgaW4gdGhlIGNvbm5lY3Rpb25zIGxpc3QgKi9cXG4gXFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWZpcnN0LCBzc2spO1xcbiBcXHRzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTtcXG4gXFx0bGlzdF9hZGQoXFx1MDAyNnN1YmZsb3ctXFx1MDAzZW5vZGUsIFxcdTAwMjZtc2stXFx1MDAzZWNvbm5fbGlzdCk7XFxuIFxcdHNvY2tfaG9sZChzc2spO1xcbiBcXG4tXFx0LyogbmV3IG1wYyBzdWJmbG93IHRha2VzIG93bmVyc2hpcCBvZiB0aGUgbmV3bHlcXG4tXFx0ICogY3JlYXRlZCBtcHRjcCBzb2NrZXRcXG4tXFx0ICovXFxuLVxcdG1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKTtcXG4tXFxuIFxcdC8qIHNldCBtc2sgYWRkcmVzc2VzIGVhcmx5IHRvIGVuc3VyZSBtcHRjcF9wbV9nZXRfbG9jYWxfaWQoKVxcbiBcXHQgKiB1c2VzIHRoZSBjb3JyZWN0IGRhdGFcXG4gXFx0ICovXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcXG5pbmRleCA0YTJkNDBjZDdiMTMyLi5jNThjZmIxMzI2YjczIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcXG5AQCAtMTA3NCw5ICsxMDc0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbiB9XFxuIFxcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcXG4rdm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcXG4gdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcXG4gaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spO1xcbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXFxuK2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcXG4gXFx0XFx0XFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XFxuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbik7XFxuIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF90b2tlbl9nZXRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0b2tlbik7XFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXFxuaW5kZXggOGUzODY4OTljZWI5OC4uNjVkODc2YTA4MjMzOCAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXFxuKysrIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xcbkBAIC00Nyw2ICs0NywxOSBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X3JlcV9kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gXFx0bXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHJlcSk7XFxuIH1cXG4gXFxuK3ZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXE7XFxuK1xcbitcXHRzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xcbitcXG4rXFx0aWYgKHN1YmZsb3dfcmVxLVxcdTAwM2Vtc2spXFxuK1xcdFxcdHNvY2tfaG9sZCgoc3RydWN0IHNvY2sgKilzdWJmbG93X3JlcS1cXHUwMDNlbXNrKTtcXG4rXFxuK1xcdG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChyZXEsIG5ld19yZXEpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBzdWJmbG93X2dlbmVyYXRlX2htYWModTY0IGtleTEsIHU2NCBrZXkyLCB1MzIgbm9uY2UxLCB1MzIgbm9uY2UyLFxcbiBcXHRcXHRcXHRcXHQgIHZvaWQgKmhtYWMpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuLmMgYi9uZXQvbXB0Y3AvdG9rZW4uY1xcbmluZGV4IGYxYTUwZjM2N2FkZDguLjI0ODc3YTJjMzc3MjcgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3Rva2VuLmNcXG4rKysgYi9uZXQvbXB0Y3AvdG9rZW4uY1xcbkBAIC0xODAsNiArMTgwLDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rdm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTtcXG4rXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XFxuK1xcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcXG4rXFxuK1xcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xcbitcXG4rXFx0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNldG9rZW5fbm9kZSkpIHtcXG4rXFx0XFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cXHUwMDNldG9rZW4pO1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpKSB7XFxuK1xcdFxcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXFx1MDAzZXRva2VuKTtcXG4rXFx0XFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSlcXG4rXFx0XFx0XFx0aGxpc3RfbnVsbHNfcmVwbGFjZV9pbml0X3JjdShcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm5ld19zdWJmbG93X3JlcS1cXHUwMDNldG9rZW5fbm9kZSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbit9XFxuK1xcbiAvKipcXG4gICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoXFxuICAqIEByZXE6IHRoZSByZXF1ZXN0IHNvY2tldCB0byBiZSByZW1vdmVkXFxuQEAgLTE4NywyNCArMjE3LDM2IEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxcbiAgKlxcbiAgKiBDYWxsZWQgd2hlbiBhIFNZTiBwYWNrZXQgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIGNvbm5lY3Rpb24sIGkuZS5cXG4gICogaXMgbm90IGEgam9pbiByZXF1ZXN0LlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgb24gc3VjY2Vzcy5cXG4gICovXFxuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxcbitib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFx0XFx0XFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xcbiBcXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XFxuK1xcdGJvb2wgcmV0ID0gZmFsc2U7XFxuIFxcbi1cXHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXFx1MDAzZXNrX3Byb3QsIDEpO1xcbiBcXHRidWNrZXQgPSB0b2tlbl9idWNrZXQocmVxLVxcdTAwM2V0b2tlbik7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YnVja2V0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFxcdTAwMjZyZXEtXFx1MDAzZXRva2VuX25vZGUpKVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4gXFxuLVxcdC8qIHBlZGFudGljIGxvb2t1cCBjaGVjayBmb3IgdGhlIG1vdmVkIHRva2VuICovXFxuIFxcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS1cXHUwMDNldG9rZW4pO1xcbi1cXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSlcXG4tXFx0XFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFxcdTAwMjZyZXEtXFx1MDAzZXRva2VuX25vZGUpO1xcbitcXHRpZiAocG9zICE9IHJlcSlcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXFx1MDAyNnJlcS1cXHUwMDNldG9rZW5fbm9kZSk7XFxuIFxcdF9fc2tfbnVsbHNfYWRkX25vZGVfcmN1KChzdHJ1Y3Qgc29jayAqKW1zaywgXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbXNrX2NoYWluKTtcXG4rXFx0cmV0ID0gdHJ1ZTtcXG4rXFxuK3VubG9jazpcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cXHUwMDNlc2tfcHJvdCwgMSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pXFxuQEAgLTM1NSwxNiArMzk3LDIxIEBAIHZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XFxuIFxcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcXG4gXFxuLVxcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpKVxcbitcXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbl9ub2RlKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbik7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YnVja2V0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNldG9rZW5fbm9kZSkpXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4gXFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXFx1MDAzZXRva2VuKTtcXG4tXFx0aWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHN1YmZsb3dfcmVxKSkge1xcbitcXHRpZiAocG9zID09IHN1YmZsb3dfcmVxKSB7XFxuIFxcdFxcdGhsaXN0X251bGxzX2RlbF9pbml0X3JjdShcXHUwMDI2cG9zLVxcdTAwM2V0b2tlbl9ub2RlKTtcXG4gXFx0XFx0YnVja2V0LVxcdTAwM2VjaGFpbl9sZW4tLTtcXG4gXFx0fVxcbitcXG4rdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YnVja2V0LVxcdTAwM2Vsb2NrKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcXG5pbmRleCA0ZmMzOWZhMmUyNjJkLi5iZTlhY2NlOGE1NjczIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcXG4rKysgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXFxuQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9hY2NlcHQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcXG4gXFx0XFx0XFx0bXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTtcXG4gXFx0bXNrLVxcdTAwM2V0b2tlbiA9IHJlcS1cXHUwMDNldG9rZW47XFxuLVxcdG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7XFxuK1xcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIG1zaywgbXB0Y3BfdG9rZW5fZ2V0X3NvY2soXFx1MDAyNmluaXRfbmV0LCBtc2stXFx1MDAzZXRva2VuKSk7XFxuIFxcbiBcXHQvKiB0aGlzIGlzIG5vdyBhIG5vLW9wICovXFxuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2Rlc3Ryb3llZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxcbiBcXHRcXHRcXHRtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpO1xcbiBcXHRtc2stXFx1MDAzZXRva2VuID0gcmVxLVxcdTAwM2V0b2tlbjtcXG4tXFx0bXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTtcXG4rXFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKSk7XFxuIFxcbiBcXHQvKiBzaW11bGF0ZSByYWNlIG9uIHJlbW92YWwgKi9cXG4gXFx0cmVmY291bnRfc2V0KFxcdTAwMjZzay1cXHUwMDNlc2tfcmVmY250LCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MDM6NTUuNDY3OTkwNzg4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODA4MjkwNjc3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9za19jbG9uZV9pbml0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9hY2NlcHRcIixcbiAgICBcIm1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwYXRoLCBzcGVjaWZpY2FsbHkgaG93IHJlcXVlc3Qgc29ja2V0cyBhcmUgY2xvbmVkIGFuZCBob3cgdG9rZW5zIGFyZSBtYW5hZ2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLiBJdCBpbnRyb2R1Y2VzIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgdG8gaGFuZGxlIGZhaWx1cmVzIGFuZCByZXR1cm4gYSBib29sZWFuLCB3aGljaCBpcyB0aGVuIGNoZWNrZWQgaW4gYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIE1QVENQIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIGR1cmluZyBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzg3Y2UxZDlhNGYxNmZjMThiY2ZjOTI2YTQyOGRmMTZlODAyMmZjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMTI6MDM6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuaW5kZXggNzFiOWZjNWE1Nzk2My4uMGEwMmFjMWVkMjJkOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21wdGNwLmhcbisrKyBiL2luY2x1ZGUvbmV0L21wdGNwLmhcbkBAIC0yMjMsNiArMjIzLDggQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG4gXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4gXHRcdFx0XHRcdCAgICAgICBib29sIGF0dGFjaF9saXN0ZW5lcik7XG4rdm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XG4gXG4gX19iZTMyIG1wdGNwX2dldF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG5AQCAtMzA5LDYgKzMxMSwxMSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxuK3tcbit9XG4rXG4gc3RhdGljIGlubGluZSBfX2JlMzIgbXB0Y3BfcmVzZXRfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpICB7IHJldHVybiBodG9ubCgwdSk7IH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfYWN0aXZlX2RldGVjdF9ibGFja2hvbGUoc3RydWN0IHNvY2sgKnNrLCBib29sIGV4cGlyZWQpIHsgfVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5pbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuKysrIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuQEAgLTIxLDYgKzIxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcF9lY24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9tcHRjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2tfcmV1c2Vwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvYWRkcmNvbmYuaFx1MDAzZVxuIFxuQEAgLTk2MSw2ICs5NjIsOSBAQCBzdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih0Y3Bfc2sobnJlcS1cdTAwM2VzayktXHUwMDNlZmFzdG9wZW5fcnNrLCBucmVxKTtcbiBcdH1cbiBcbitcdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcbitcdFx0bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpO1xuK1xuIFx0cmV0dXJuIG5yZXE7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGNhNjQ0ZWM1M2VlZGIuLjA3ZWFhNjg1OGQwNTMgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbkBAIC0zNjA4LDE3ICszNjA4LDE5IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdCAqL1xuIFx0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0VTVEFCTElTSEVEKTtcbiBcbitcdGlmICghbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spKSB7XG4rXHRcdG1wdGNwX3JlbGVhc2Vfc2NoZWQobXNrKTtcbitcdFx0aW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2UobnNrKTtcbitcdFx0dGNwX2RvbmUobnNrKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4gXHQvKiBUaGUgbXNrIG1haW50YWluIGEgcmVmIHRvIGVhY2ggc3ViZmxvdyBpbiB0aGUgY29ubmVjdGlvbnMgbGlzdCAqL1xuIFx0V1JJVEVfT05DRShtc2stXHUwMDNlZmlyc3QsIHNzayk7XG4gXHRzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTtcbiBcdGxpc3RfYWRkKFx1MDAyNnN1YmZsb3ctXHUwMDNlbm9kZSwgXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCk7XG4gXHRzb2NrX2hvbGQoc3NrKTtcbiBcbi1cdC8qIG5ldyBtcGMgc3ViZmxvdyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG5ld2x5XG4tXHQgKiBjcmVhdGVkIG1wdGNwIHNvY2tldFxuLVx0ICovXG4tXHRtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zayk7XG4tXG4gXHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcbiBcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxuIFx0ICovXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggNGEyZDQwY2Q3YjEzMi4uYzU4Y2ZiMTMyNmI3MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTEwNzQsOSArMTA3NCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiB9XG4gXG4gaW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7XG4rdm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpO1xuIHZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7XG4gaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spO1xuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcbitib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXG4gXHRcdFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4gYm9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKTtcbiBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdG9rZW5fZ2V0X3NvY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgdG9rZW4pO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5pbmRleCA4ZTM4Njg5OWNlYjk4Li42NWQ4NzZhMDgyMzM4IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xuKysrIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuQEAgLTQ3LDYgKzQ3LDE5IEBAIHN0YXRpYyB2b2lkIHN1YmZsb3dfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0bXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHJlcSk7XG4gfVxuIFxuK3ZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4re1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcTtcbitcbitcdHN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2sobmV3X3JlcSk7XG4rXG4rXHRpZiAoc3ViZmxvd19yZXEtXHUwMDNlbXNrKVxuK1x0XHRzb2NrX2hvbGQoKHN0cnVjdCBzb2NrICopc3ViZmxvd19yZXEtXHUwMDNlbXNrKTtcbitcbitcdG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChyZXEsIG5ld19yZXEpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBzdWJmbG93X2dlbmVyYXRlX2htYWModTY0IGtleTEsIHU2NCBrZXkyLCB1MzIgbm9uY2UxLCB1MzIgbm9uY2UyLFxuIFx0XHRcdFx0ICB2b2lkICpobWFjKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW4uYyBiL25ldC9tcHRjcC90b2tlbi5jXG5pbmRleCBmMWE1MGYzNjdhZGQ4Li4yNDg3N2EyYzM3NzI3IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Rva2VuLmNcbisrKyBiL25ldC9tcHRjcC90b2tlbi5jXG5AQCAtMTgwLDYgKzE4MCwzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbit2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4rXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4rXG4rXHRuZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcbitcbitcdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSkge1xuK1x0XHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKSB7XG4rXHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdH0gZWxzZSB7XG4rXHRcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbitcdFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSlcbitcdFx0XHRobGlzdF9udWxsc19yZXBsYWNlX2luaXRfcmN1KFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUsXG4rXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZuZXdfc3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rfVxuK1xuIC8qKlxuICAqIG1wdGNwX3Rva2VuX2FjY2VwdCAtIHJlcGxhY2UgYSByZXEgc2sgd2l0aCBmdWxsIHNvY2sgaW4gdG9rZW4gaGFzaFxuICAqIEByZXE6IHRoZSByZXF1ZXN0IHNvY2tldCB0byBiZSByZW1vdmVkXG5AQCAtMTg3LDI0ICsyMTcsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXG4gICpcbiAgKiBDYWxsZWQgd2hlbiBhIFNZTiBwYWNrZXQgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIGNvbm5lY3Rpb24sIGkuZS5cbiAgKiBpcyBub3QgYSBqb2luIHJlcXVlc3QuXG4rICpcbisgKiBSZXR1cm46IHRydWUgb24gc3VjY2Vzcy5cbiAgKi9cbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbitib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuIFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xuK1x0Ym9vbCByZXQgPSBmYWxzZTtcbiBcbi1cdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cdTAwM2Vza19wcm90LCAxKTtcbiBcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChyZXEtXHUwMDNldG9rZW4pO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbitcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZyZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4rXHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0LyogcGVkYW50aWMgbG9va3VwIGNoZWNrIGZvciB0aGUgbW92ZWQgdG9rZW4gKi9cbiBcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSlcbi1cdFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbitcdGlmIChwb3MgIT0gcmVxKVxuK1x0XHRnb3RvIHVubG9jaztcbitcbitcdGhsaXN0X251bGxzX2RlbF9pbml0X3JjdShcdTAwMjZyZXEtXHUwMDNldG9rZW5fbm9kZSk7XG4gXHRfX3NrX251bGxzX2FkZF9ub2RlX3JjdSgoc3RydWN0IHNvY2sgKiltc2ssIFx1MDAyNmJ1Y2tldC1cdTAwM2Vtc2tfY2hhaW4pO1xuK1x0cmV0ID0gdHJ1ZTtcbitcbit1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pXG5AQCAtMzU1LDE2ICszOTcsMjEgQEAgdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4gXG4tXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKVxuK1x0XHRnb3RvIHVubG9jaztcbitcbiBcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbi1cdGlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSBzdWJmbG93X3JlcSkpIHtcbitcdGlmIChwb3MgPT0gc3ViZmxvd19yZXEpIHtcbiBcdFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnBvcy1cdTAwM2V0b2tlbl9ub2RlKTtcbiBcdFx0YnVja2V0LVx1MDAzZWNoYWluX2xlbi0tO1xuIFx0fVxuK1xuK3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbmluZGV4IDRmYzM5ZmEyZTI2MmQuLmJlOWFjY2U4YTU2NzMgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXG4rKysgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXG5AQCAtOTksNyArOTksNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2FjY2VwdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcbiBcdFx0XHRtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpO1xuIFx0bXNrLVx1MDAzZXRva2VuID0gcmVxLVx1MDAzZXRva2VuO1xuLVx0bXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTtcbitcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKFx1MDAyNmluaXRfbmV0LCBtc2stXHUwMDNldG9rZW4pKTtcbiBcbiBcdC8qIHRoaXMgaXMgbm93IGEgbm8tb3AgKi9cbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIDAsXG4gXHRcdFx0bXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTtcbiBcdG1zay1cdTAwM2V0b2tlbiA9IHJlcS1cdTAwM2V0b2tlbjtcbi1cdG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7XG4rXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTtcbiBcbiBcdC8qIHNpbXVsYXRlIHJhY2Ugb24gcmVtb3ZhbCAqL1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCwgMCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowMzo1NS40Njc5OTMzMDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQxNzA1NTM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIE1QVENQIHN1YnN5c3RlbSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQWgsIHRhY2tsaW5nIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhZ2FpbiwgaW50ZXJlc3RpbmcuXCIgSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgYXJvdW5kIGhvdyByZXF1ZXN0IHNvY2tldHMgYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgaXQncyBhZGRpbmcgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgLCB3aGljaCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgaW5ldF9yZXFza19jbG9uZWAuIFRoYXQncyBhIGtleSBmdW5jdGlvbiB0byB1bmRlcnN0YW5k4oCUaG93IHRoZSByZXF1ZXN0IHNvY2tldHMgYXJlIGJlaW5nIGNsb25lZCBhbmQgbWFuYWdlZCBhY3Jvc3Mgc3ViZmxvd3Mgd2l0aGluIHRoZSBNUFRDUCBmcmFtZXdvcmsuXG5cblRoZW4gSSBzZWUgY2hhbmdlcyB0byBgbXB0Y3BfdG9rZW5fYWNjZXB0YCwgc2hpZnRpbmcgaXRzIHJldHVybiB0byBhIGJvb2xlYW4gYW5kIGluY29ycG9yYXRpbmcgZmFpbHVyZSBoYW5kbGluZy4gVGhpcyBpcyBjcml0aWNhbC4gTm93IHRoZSBjbG9uaW5nIGluaXQgZnVuY3Rpb24sIGBtcHRjcF9za19jbG9uZV9pbml0YCwgaXMgZ29pbmcgdG8gYmUgZGVwZW5kZW50IG9uIHRoZSBib29sZWFuIHZhbHVlIHJldHVybmVkIGZyb20gYG1wdGNwX3Rva2VuX2FjY2VwdGAuIEFueSB0aW1lIHlvdSBhbHRlciBhIHJldHVybiB0eXBlIHRvIGluY29ycG9yYXRlIGZhaWx1cmUgc3RhdGVzLCB5b3UgbmVlZCB0byBlbnN1cmUgZXZlcnkgc2luZ2xlIGNhbGwgc2l0ZSBjb3JyZWN0bHkgcHJvY2Vzc2VzIHRoZSBhZGRlZCBjb21wbGV4aXR5LiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBzdWJ0bGUsIGhhcmQtdG8tZGVidWcgaXNzdWVzIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS5cblxuSSBhbHNvIHNwb3QgbW9kaWZpY2F0aW9ucyB0byBgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0YCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gdGhlc2UgbW9yZSBjbG9zZWx5IHRvIGdyYXNwIHRoZSBsb2dpYyBiZWhpbmQgaXQsIGJ1dCBpdCBzZWVtcyBsaWtlIHRoaXMgaXMgYWJvdXQgcmVzb3VyY2UgbWFuYWdlbWVudC4gTGlrZWx5IG1vdmluZyBvciBkZXN0cm95aW5nIHRva2VucyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCBzb2NrZXRzIGFzIHBhcnQgb2YgdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LlxuXG5UaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhlc2Ugc2VlbSB0byBiZSBmdW5jdGlvbmFsIGNoYW5nZXMsIGFuZCB0aGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzbyB0aGlzIHdpbGwgYWZmZWN0IHRoZSBvdmVyYWxsIE1QVENQIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIHRoYXQgaXQncyBpbXBhY3RpbmcgdGhlIGNvcmUgc3RhY2ssIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIE1QVENQIGNvbmZpZ3VyYXRpb25zIGFyZSB3aGF0IEknbSBleHBlY3RpbmcuIFRoZSBmaXJzdCB0aGluZyBJJ2xsIGRvIGlzIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIE1QVENQLCB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBhbmQgaWRlbnRpZnkgYW55IGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUgdmVyaWZpZWQgb3IgYWRqdXN0ZWQuIFNvLCBsZXQncyBzdGFydCBzZWFyY2hpbmcgZm9yIE1QVENQIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjA1Ljg4NTA1MDM4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDgzODc1NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUFRDUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZy0xLVxcbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMy1cXHRib29sIFxcXCJNUFRDUDogTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxcbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxubmV0L21wdGNwL0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIlRoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNDowOC4zNjg5MzA5NzRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY4MDE0MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNUFRDUCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gYE1QVENQYC4gQWxyaWdodCwgdGhhdCBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjaG9pY2UuIEl0IGltbWVkaWF0ZWx5IHJhaXNlcyBxdWVzdGlvbnMgaW4gbXkgbWluZDogV2hhdCBvdGhlciBuZXR3b3JrIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQgYXJvdW5kIE1QVENQPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzIGxvYWRlZCBhbmQgYWN0aXZlIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBhcnRpY3VsYXIgTVBUQ1Agc2V0dXA/IFdoYXQgYWJvdXQgdGhlIHJvdXRpbmcgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgbWVudGFsbHkgbWFwIG91dCB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb25mbGljdHMgb3Igb3ZlcnNpZ2h0cy4gTGV0J3Mgc3RhcnQgd2l0aCBhIHN5c3RlbWF0aWMgY2hlY2suIEkgbmVlZCB0byBlbnN1cmUgYWxsIHRoZSBwcmVyZXF1aXNpdGVzIGFyZSBtZXQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjEyLjIzNjk0OTEzN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDMwNDYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWctMS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MDQ6MTIuMzAxMjU3OTMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMTY5ODc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXBlbmRlbmN5IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgZm9yIE11bHRpcGF0aCBUQ1AgYXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgcmlnaHQ/IENoZWNraW5nIEtjb25maWcgZmlyc3QgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuIEl0J2xsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgYXJlIHJlcXVpcmVkIGJlZm9yZSBJIGNhbiB0cnVseSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBwb3J0aW9ucy4gSXQgYWxzbyBhdm9pZHMgbWUgZ29pbmcgZG93biBhbnkgYmxpbmQgYWxsZXlzIG9mIGludmVzdGlnYXRpbmcgdGhpbmdzIHRoYXQgYXJlIG9idmlvdXNseSBnb2luZyB0byBiZSB1bmF2YWlsYWJsZSBiZWNhdXNlIGRlcGVuZGVuY2llcyBhcmUgdW5tZXQuIFRoaXMgYXBwcm9hY2ggc2hvdWxkIHNhdmUgbWUgdGltZSBpbiB0aGUgbG9uZyBydW4uIEdvb2QgcGxhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjE1LjQwMjk1ODU1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0XFxuICAgMjpcXHRjb25maWcgTVBUQ1BcXG4gICAzOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXFxuICAxMDpcXHRcXHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XFxuICAxMTpcXHRcXHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcXG4gIDEyOlxcdFxcdCAgTVBUQ1AuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGlmIE1QVENQXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuICAxODpcXHRcXHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBNUFRDUF9JUFY2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjE1LjQwMzAxNzY0N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTcxODA4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkFuYWx5emluZyBNUFRDUCBDb25maWd1cmF0aW9uIGFuZCBTb2NrZXQgQ2xvbmluZyoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBgTVBUQ1BgIGNvbmZpZ3VyYXRpb24gaGVyZSwgYW5kIHRoaW5raW5nIHRoYXQgYE1QVENQX0lQVjZgIGNvdWxkIHBvdGVudGlhbGx5IGJlIHJlbGV2YW50IGFzIHdlbGwuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgaW1wYWN0IGNvbm5lY3Rpb24gaGFuZGxpbmcsIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocy4gTXkgcGxhbiBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIGJlY2F1c2UgSSByZW1lbWJlciB0aGF0J3Mgd2hlcmUgYSBjcnVjaWFsIGZ1bmN0aW9uLCBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAsIGlzIGltcGxlbWVudGVkLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGhpbiB0aGUgSVB2NCBjb25uZWN0aW9uIHByb2Nlc3MuIFRoYXQnbGwgdGVsbCBtZSBob3cgdGhlIG11bHRpLXBhdGggVENQIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZCwgYW5kIGhvdyB0aGUgc3ViZmxvdyBjbG9uaW5nIGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjIwLjIwMDIwMDY1NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyNzE5ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9OTE0PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtOTY1LVxcdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjk2NjpcXHRcXHRtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHJlcSwgbnJlcSk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05NjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjIwLjI5OTQ3Njc1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk5NjA2OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBJbmV0IFJlcXVlc3QgU29ja2V0IENsb25lKipcblxuQWxyaWdodCwgc28gYGluZXRfcmVxc2tfY2xvbmVgIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUncyB0aGlzIGZ1bmN0aW9uICphY3R1YWxseSogYmVpbmcgY2FsbGVkP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBLbm93aW5nIHRoZSBjYWxsIGNoYWluIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgd2l0aGluIHRoZSBJUCBzdGFjay4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBmaWd1cmUgb3V0IHRoZSBzY2VuYXJpb3Mgd2hlcmUgcmVxdWVzdCBzb2NrZXRzIGFyZSBiZWluZyBjbG9uZWQsIGFuZCB3aHkuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkgdG8gYSBtZWFuaW5nZnVsIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDA0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MDQ6MjMuNjk5MDg2MDcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA1OTg1ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfcmVxc2tfY2xvbmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz05MDU9dm9pZCBfX3JlcXNrX2ZyZWUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05MTMtXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo5MTQ6c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtOTE1LVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMDM3PXN0YXRpYyB2b2lkIHJlcXNrX3RpbWVyX2hhbmRsZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEwNTMtXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMDU0OlxcdFxcdG5yZXEgPSBpbmV0X3JlcXNrX2Nsb25lKHJlcSwgbnNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEwNTUtXFx0XFx0aWYgKCFucmVxKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDIxPXN0cnVjdCBzb2NrICppbmV0X2Nza19jb21wbGV0ZV9oYXNoZGFuY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqY2hpbGQsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0MzQtXFx0XFx0XFx0LyogaG9sZCBhIHJlZmNudCBmb3IgdGhlIG5yZXEtXFx1MDAzZXJza19saXN0ZW5lclxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTQzNTpcXHRcXHRcXHQgKiB3aGljaCBpcyBhc3NpZ25lZCBpbiBpbmV0X3JlcXNrX2Nsb25lKClcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0MzYtXFx0XFx0XFx0ICovXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM3LVxcdFxcdFxcdHNvY2tfaG9sZChzayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDM4OlxcdFxcdFxcdG5yZXEgPSBpbmV0X3JlcXNrX2Nsb25lKHJlcSwgc2spO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQzOS1cXHRcXHRcXHRpZiAoIW5yZXEpIHtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTQ3MD12b2lkIGluZXRfY3NrX2xpc3Rlbl9zdG9wKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQ5NC1cXHRcXHRpZiAobnNrKSB7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDk1OlxcdFxcdFxcdG5yZXEgPSBpbmV0X3JlcXNrX2Nsb25lKHJlcSwgbnNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0OTYtXFx0XFx0XFx0aWYgKG5yZXEpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MDQ6MjYuMDA1MDc3NzAzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjY3OTM2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlcmFjdGlvbnMgQmV0d2VlbiBUQ1AgUmVxdWVzdCBDbG9uZXMgYW5kIE1QVENQIFRva2VuIEhhbmRsaW5nKipcblxuT2theSwgc28gSSBzZWUgYGluZXRfcmVxc2tfY2xvbmVgIGlzIHRyaWdnZXJlZCBmcm9tIGEgZmV3IGRpZmZlcmVudCBwbGFjZXM6IHRoZSBgcmVxc2tfdGltZXJfaGFuZGxlcmAsIGBpbmV0X2Nza19jb21wbGV0ZV9oYXNoZGFuY2VgLCBhbmQgYWxzbyBgaW5ldF9jc2tfbGlzdGVuX3N0b3BgLiBUaGF0IG1lYW5zIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBNUFRDUCBoYXZlIGEgc3Ryb25nIHBvc3NpYmlsaXR5IG9mIHJ1bm5pbmcgaW50byBpc3N1ZXMgd2l0aCBzdGFuZGFyZCBUQ1AgcmVxdWVzdCBjbG9uZXMuXG5cbk15IG5leHQgc3RlcCBpcyB0byBsb29rIGF0IHRoZSByZWNlbnQgY2hhbmdlcyByZWxhdGVkIHRvIHRva2VuIGhhbmRsaW5nIGluIHRoZSBNUFRDUCBjb2RlLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkIGluIGBuZXQvbXB0Y3AvdG9rZW4uY2A6IGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fYWNjZXB0YCwgYW5kIGBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3RgLiBUaGVzZSBhcmUgYWxsIGZhaXJseSBjb3JlIG9wZXJhdGlvbnMgZm9yIHRva2VuIG1hbmFnZW1lbnQsIHNvIGFueSBpbnRlcnBsYXkgd2l0aCByZXF1ZXN0IGNsb25pbmcgaGVyZSBpcyBnb2luZyB0byBiZSBjcml0aWNhbC5cblxuVGhlbiwgdGhlcmUncyBgbmV0L21wdGNwL3Byb3RvY29sLmNgIHRvIGNvbnNpZGVyLCBhbmQgc3BlY2lmaWNhbGx5LCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAuIFRoaXMgb25lIGlzIHBvdGVudGlhbGx5IHZlcnkgaW50ZXJlc3RpbmcuIEl0J3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGEgc29ja2V0IGNsb25lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgd29ya3MgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gV2hhdCBpcyB0aGUgY2xvbmluZyBsb2dpYyBhbmQgd2hhdCBwYXJ0cyBvZiBNUFRDUCBhcmUgYmVpbmcgY2xvbmVkPyBBbmQsIG1vc3QgaW1wb3J0YW50bHksIGhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHN0YW5kYXJkIFRDUCBjbG9uaW5nIHByb2Nlc3MgdHJpZ2dlcmVkIGJ5IGBpbmV0X3JlcXNrX2Nsb25lYD8gSSBuZWVkIHRvIGFuYWx5emUgYG1wdGNwX3NrX2Nsb25lX2luaXRgIGluIGRldGFpbC4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgYmVzdCB1bmRlcnN0YW5kaW5nIG9mIGFueSBwb3RlbnRpYWwgaXNzdWVzIGFuZCBpZGVudGlmeSB3aGVyZSB0byBmb2N1cyBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE2MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNDozMi4zNzE4NzQ0NTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTM4MTk3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9za19jbG9uZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTM1Mzg9c3RhdGljIHZvaWQgbXB0Y3BfY29weV9pcF9vcHRpb25zKHN0cnVjdCBzb2NrICpuZXdzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU1Ny1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNTU4OnN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTU5LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNDozMi40ODcyNjE5MTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0NzE1ODk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIGBtcHRjcF9za19jbG9uZV9pbml0YCBDYWxsc2l0ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0ICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtZSwgaXQncyBpbnZvbHZlZCBpbiBjbG9uaW5nIG9yIGluaXRpYWxpemluZyBNdWx0aXBhdGggVENQIChNUFRDUCkgc29ja2V0IHN0cnVjdHVyZXMuIEtub3dpbmcgdGhlIGNhbGwgaGllcmFyY2h5IHdpbGwgYmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXNlIGNsb25lcyBhcmUgYmVpbmcgY3JlYXRlZCBhbmQgY29uZmlndXJlZCwgYW5kIHRvIHByb3Blcmx5IGRlYnVnIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCB0b29scywgbGlrZWx5IGEgY29tYmluYXRpb24gb2Ygc3RhdGljIGFuYWx5c2lzIChsaWtlIGBjc2NvcGVgIG9yIGBjbGFuZ2RgKSBhbmQgZHluYW1pYyBhbmFseXNpcyAobWF5YmUgYHBlcmZgIG9yIGBmdHJhY2VgIGlmIHN0YXRpYyBhbmFseXNpcyBpcyBpbnN1ZmZpY2llbnQpLCB0byBxdWlja2x5IG1hcCBvdXQgdGhlIGZ1bmN0aW9uJ3MgdXNhZ2UuIEknbGwgYmUgbG9va2luZyBmb3IgY3JpdGljYWwgcG9pbnRzLCBsaWtlIHdpdGhpbiB0aGUgc29ja2V0IGNyZWF0aW9uIHBhdGgsIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgb3IgcGVyaGFwcyBkdXJpbmcgYWRkcmVzcyBmYWlsb3ZlciBzY2VuYXJpb3MuIEkgYW50aWNpcGF0ZSBlbmNvdW50ZXJpbmcgb3RoZXIgTVBUQ1Atc3BlY2lmaWMgZnVuY3Rpb25zIGluIHRoZSBjYWxsIGdyYXBoLiBMZXQncyBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MDQ6MzYuOTM0NDI0NzU1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzYzMjMzOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3NrX2Nsb25lX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9MzUzOD1zdGF0aWMgdm9pZCBtcHRjcF9jb3B5X2lwX29wdGlvbnMoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTU3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NTg6c3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1NTktXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD05MTU9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtOTE3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjkxODpzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L21wdGNwL3Byb3RvY29sLmgtOTE5LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz04MTk9c3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy04OTUtXFx0XFx0aWYgKGN0eC1cXHUwMDNlbXBfY2FwYWJsZSkge1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6ODk2OlxcdFxcdFxcdGN0eC1cXHUwMDNlY29ubiA9IG1wdGNwX3NrX2Nsb25lX2luaXQobGlzdGVuZXItXFx1MDAzZWNvbm4sIFxcdTAwMjZtcF9vcHQsIGNoaWxkLCByZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtODk3LVxcdFxcdFxcdGlmICghY3R4LVxcdTAwM2Vjb25uKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNDozOS4yOTc2NjMwMzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5NzYxNTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCBQYXRoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBob3cgTVBUQ1AgY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgc3ViZmxvd19zeW5fcmVjdl9zb2NrYCBjYWxsLCB3aGVyZSBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgaXMgaW52b2tlZC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYG1wdGNwX3Rva2VuX2FjY2VwdGAgbm93IHJldHVybnMgYSBib29sZWFuLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWdnZXJzIHRoZSBjbGVhbnVwIHdpdGhpbiBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgYW5kIHJldHVybnMgTlVMTC4gVGhpcyBpcyBhIGNsZWFyIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBleHBsb3JlIHRoaXMgY2hhbmdlIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZSBubyB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy5cblxuTXkgZm9jdXMgc3ltYm9scyBhcmU6IGBtcHRjcF9za19jbG9uZV9pbml0YCwgYG1wdGNwX3Rva2VuX2FjY2VwdGAsIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0YCwgYW5kIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYC5cblxuR29vZCwgaXQgc2VlbXMgdGhlc2Ugc3ltYm9scyBhcmUgKm5vdCogc3RhdGljLCB3aGljaCBnaXZlcyB1cyBtb3JlIGVudHJ5IHBvaW50cy4gQW5kLCB0aGV5J3JlIGdsb2JhbCB0byB0aGUgTVBUQ1Agc3Vic3lzdGVtLiBUaGlzIG1lYW5zIHRoZXkgYXJlIGFjY2Vzc2libGUgZnJvbSB2YXJpb3VzIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGluY3JlYXNpbmcgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS5cblxuTm93IEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIHNwZWNpZmljYWxseSwgYW5kIGhvdyBpdCBpcyBpbXBsZW1lbnRlZCBpbiBgbmV0L21wdGNwL3N1YmZsb3cuY2AuIEl0IGlzIGxpa2VseSB0aGUgcGxhY2Ugd2hlcmUgdGhlIG5ldyByZXR1cm4gcGF0aCBmcm9tIGBtcHRjcF90b2tlbl9hY2NlcHRgIHdvdWxkIGJlIG1vc3QgcmVsZXZhbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MDMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MDQ6NDQuOTk1Mjc5OTE3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0ODgyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3Avc3ViZmxvdy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9zdWJmbG93LmM9Mzg9c3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTQ5LVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NTA6dm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTUxLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNDo0NS4wOTk3NzIzODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyNzkyNjg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBUaGlzKipcblxuUmlnaHQsIHRoaXMgaXNuJ3QgYSBzaW1wbGUsIHN0YXRpYyBzaXR1YXRpb24uIEl0J3MgY2xlYXJseSBjaGFuZ2luZyBhbmQgcmVxdWlyZXMgYSBkeW5hbWljIGFwcHJvYWNoIHRvIHVuZGVyc3RhbmQgaXQgZnVsbHkuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBzcGVjaWZpYyBmdW5jdGlvbjogYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAgd2l0aGluIHRoZSBgbmV0L21wdGNwL3Rva2VuLmNgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMgb2YgdGhpcyBtb3ZpbmctdG9rZW4gc3lzdGVtLiBMZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb2YgdGhhdCBmdW5jdGlvbidzIHNwZWNpZmljcy4uLiBpdCdzIGJlZW4gYSB3aGlsZSwgYnV0IHRoYXQncyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZWxhdGVkIHRvIHRva2VuIG1pZ3JhdGlvbiBzaG91bGQgcmVzaWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMwMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjQ5LjIyNzcwMzE0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg3NjM1NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC90b2tlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC90b2tlbi5jPTE1MT1pbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jLTE4Mi1cXG5uZXQvbXB0Y3AvdG9rZW4uYzoxODM6dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbm5ldC9tcHRjcC90b2tlbi5jLTE4NC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNDo0OS4yOTY0NzAyODlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyNTU4MDU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBNUFRDUCBUb2tlbiBBY2NlcHRhbmNlKipcblxuUmlnaHQsIHRoaXMgaXNuJ3QgYSBzaW1wbGUsIHN0YXRpYyBzdGF0ZS4gV2UncmUgbG9va2luZyBhdCBzb21ldGhpbmcgZHluYW1pYy4gVGhlIGtleSBsaWVzIGluIGhvdyBNUFRDUCB0b2tlbnMgYXJlIGFjY2VwdGVkIGFuZCBoYW5kbGVkLiBMZXQncyBkaWcgaW50byB0aGUgY29kZSBkaXJlY3RseS4gTXkgaW1tZWRpYXRlIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBmdW5jdGlvbiwgd2hpY2ggSSAqa25vdyogcmVzaWRlcyB3aXRoaW4gYG5ldC9tcHRjcC90b2tlbi5jYC4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgYWNjZXB0YW5jZSBsb2dpYyBpcyBnb2luZyB0byBiZS4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHRoZSBjb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjUyLjkyMjA1NDQyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxMDkxNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfdG9rZW5fYWNjZXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC90b2tlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC90b2tlbi5jPTE4Mz12b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMTMtLyoqXFxubmV0L21wdGNwL3Rva2VuLmM6MjE0OiAqIG1wdGNwX3Rva2VuX2FjY2VwdCAtIHJlcGxhY2UgYSByZXEgc2sgd2l0aCBmdWxsIHNvY2sgaW4gdG9rZW4gaGFzaFxcbm5ldC9tcHRjcC90b2tlbi5jLTIxNS0gKiBAcmVxOiB0aGUgcmVxdWVzdCBzb2NrZXQgdG8gYmUgcmVtb3ZlZFxcbi0tXFxubmV0L21wdGNwL3Rva2VuLmMtMjIyLSAqL1xcbm5ldC9tcHRjcC90b2tlbi5jOjIyMzpib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMjQtXFx0XFx0XFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jPTQ2Nz1FWFBPUlRfU1lNQk9MX0dQTChtcHRjcF90b2tlbl9uZXdfY29ubmVjdCk7XFxubmV0L21wdGNwL3Rva2VuLmM6NDY4OkVYUE9SVF9TWU1CT0xfR1BMKG1wdGNwX3Rva2VuX2FjY2VwdCk7XFxubmV0L21wdGNwL3Rva2VuLmMtNDY5LUVYUE9SVF9TWU1CT0xfR1BMKG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjUyLjk4NjE2NjgzM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ2NTM4NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyB0aGUgRHluYW1pYyBOYXR1cmUgb2YgVG9rZW5zKipcblxuUmlnaHQsIG5vdCBhIHN0YXRpYyBzaXR1YXRpb24gYXQgYWxsLiBXZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQncyBjaGFuZ2luZy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgaG93IHRoaXMgdG9rZW4gZGVzdHJ1Y3Rpb24gaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3MsIHNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0YCBmdW5jdGlvbi4gVGhhdCBmdW5jdGlvbiBsaXZlcyBpbiBgbmV0L21wdGNwL3Rva2VuLmNgLCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBiZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGR5bmFtaWMgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE0MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjU3LjEzMjcwODMwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAyNzkzMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC90b2tlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC90b2tlbi5jPTM4Nj1FWFBPUlRfU1lNQk9MX0dQTChtcHRjcF90b2tlbl9pdGVyX25leHQpO1xcbi0tXFxubmV0L21wdGNwL3Rva2VuLmMtMzg4LS8qKlxcbm5ldC9tcHRjcC90b2tlbi5jOjM4OTogKiBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QgLSByZW1vdmUgbXB0Y3AgY29ubmVjdGlvbi90b2tlblxcbm5ldC9tcHRjcC90b2tlbi5jLTM5MC0gKiBAcmVxOiBtcHRjcCByZXF1ZXN0IHNvY2tldCBkcm9wcGluZyB0aGUgdG9rZW5cXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jLTM5My0gKi9cXG5uZXQvbXB0Y3AvdG9rZW4uYzozOTQ6dm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbm5ldC9tcHRjcC90b2tlbi5jLTM5NS17XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYz00Njg9RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3BfdG9rZW5fYWNjZXB0KTtcXG5uZXQvbXB0Y3AvdG9rZW4uYzo0Njk6RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KTtcXG5uZXQvbXB0Y3AvdG9rZW4uYy00NzAtRVhQT1JUX1NZTUJPTF9HUEwobXB0Y3BfdG9rZW5fZGVzdHJveSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA0OjU3LjIwMjk5MTkyMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTM2MDU4NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE1QVENQIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aGlzIGlzbid0IGEgc3RhdGljIHNpdHVhdGlvbi4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIE1QVENQIGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZSwgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBtcHRjcF9za19jbG9uZV9pbml0YCwgYG1wdGNwX3Rva2VuX2FjY2VwdGAsIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0YCwgYW5kIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYC5cblxuTm93IGZvciB0aGUgY29uZmlnIG9wdGlvbnMsIEknbSB0aGlua2luZyBJJ2xsIGRlZmluaXRlbHkgbmVlZCBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAuIEJ1dCBiZWZvcmUgSSBzaWduIG9mZiBvbiB0aGF0LCBJIHNob3VsZCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0L21wdGNwL0tjb25maWdgIGZpbGUuXG5cbkFscmlnaHQsIGhlcmUgaXQgaXM6XG5gYGBcbmNvbmZpZyBNUFRDUFxuXHRib29sIFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcIlxuXHRkZXBlbmRzIG9uIElORVRcblx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG5cdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuYGBgXG5TbywgbG9va3MgbGlrZSBqdXN0IGBNUFRDUGAgaXMgdGhlIGVzc2VudGlhbCBvbmUuIFRoZSBzZWxlY3RzIGFyZSBhbGwgdGFrZW4gY2FyZSBvZiBpbiB0aG9zZSBvcHRpb25zLiBgTVBUQ1BfSVBWNmAgaXMgYWxzbyBhIGdvb2QgaWRlYSBmb3IgSVB2NiBzdXBwb3J0LCBzbyBJJ2xsIGluY2x1ZGUgdGhhdCBhcyB3ZWxsLiBCdXQgd2FpdCwgYE1QVENQX0lQVjZgIGRlcGVuZHMgb24gYElQVjZgLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGRlcGVuZGVuY3kgaW4gbWluZC4gSnVzdCB0byBiZSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgbmV0L21wdGNwL0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYyOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNTowNC43MzkwNTI5ODhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NjM2MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUFRDUF9JUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MDU6MDQuODA1NjkzNzI0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODIwMjc1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWx2aW5nIGludG8gdGhlIE1QVENQIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcsIFwiVGltZSB0byBkaWcgaW50byB0aGUgcmVzdCBvZiB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlLlwiIEknbSBvYnZpb3VzbHkgZmFtaWxpYXIgd2l0aCBNUFRDUCBhbmQgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eSwgc28gSSdtIGxpa2VseSBub3QgbmVlZGluZyBhIHByaW1lci4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHNvbWV0aGluZyBzcGVjaWZpYy4gUGVyaGFwcyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGEgbmV3IGZlYXR1cmUgSSdtIGV2YWx1YXRpbmcgb3IgZGVidWdnaW5nLiBNYXliZSBJIG5lZWQgdG8gZ3Jhc3AgaG93IGNlcnRhaW4gZGVwZW5kZW5jaWVzIHdvcmsgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0sIG9yIGlkZW50aWZ5IHdoaWNoIHNwZWNpZmljIEtjb25maWcgc3ltYm9scyBjb250cm9sIGEgcGFydGljdWxhciBwYXJhbWV0ZXIgb3IgYmVoYXZpb3IuIEkgY291bGQgYmUgdHJhY2luZyB0aGUgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBvZiBjZXJ0YWluIE1QVENQIGZlYXR1cmVzLiBPciBJIG1pZ2h0IGJlIHJlc2VhcmNoaW5nIHBvdGVudGlhbCBjb25mbGljdHMgYmV0d2VlbiB2YXJpb3VzIE1QVENQIG1vZHVsZXMgb3IgdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBuZXR3b3JraW5nIHN1YnN5c3RlbXMuIEknbGwgbGlrZWx5IGJlIHNjYW5uaW5nIGZvciByZWxldmFudCBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHZhbHVlcyDigJMgYWxsIHdpdGggdGhlIGdvYWwgb2YgZ2V0dGluZyBhIGNvbXBsZXRlIGFuZCBwcmVjaXNlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGN1cnJlbnQgS2NvbmZpZyBjb25maWd1cmF0aW9uIHNwYWNlLiBUaGUgZ29hbCBpcyB0byBkZWVwbHkgY29tcHJlaGVuZCB0aGUgY29uZmlndXJhYmxlIGFzcGVjdHMgb2YgdGhlIE1QVENQIGltcGxlbWVudGF0aW9uIHNvIEkgY2FuIGVmZmljaWVudGx5IGRpYWdub3NlLCBtb2RpZnkgb3IgdXNlIHRoZSBzb2Z0d2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjowNTowOC42ODc3MjM0MTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG4gIDIxOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIElQVjY9eVxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICAyODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBDdXJyZW50bHkgY292ZXJzIHRoZSBNUFRDUCBjcnlwdG8gYW5kIHRva2VuIGhlbHBlcnMuXFxuICAzMTpcXHRcXHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxcbiAgMzI6XFx0XFx0ICBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA1OjA4LjY4NzkyMDU3NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDg0NTY4MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIE1QVENQIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIE1QVENQLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgaXQuIEkgc2VlIHRoYXQgYE1QVENQX0lQVjZgIHJlbGllcyBvbiBgSVBWNj15YCwgc28gSSdsbCBiZSBzdXJlIHRvIGluY2x1ZGUgYm90aCBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAgaW4gbXkgY29uZmlndXJhdGlvbi5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgaG93IHJlcXVlc3Qgc29ja2V0cyBhcmUgY2xvbmVkIGFuZCBob3cgdG9rZW5zIGFyZSBoYW5kbGVkIGR1cmluZyBzZXR1cC4gSXQgaW50cm9kdWNlcyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgYW5kIG1vZGlmaWVzIGBtcHRjcF90b2tlbl9hY2NlcHRgIHRvIHJldHVybiBhIGJvb2xlYW4sIHdoaWNoIHJlZmxlY3RzIGhvdyBmYWlsdXJlcyBpbiBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAgYXJlIG1hbmFnZWQuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbXBhY3RpbmcgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLlxuXG5NeSB0aGlua2luZyBpcywgaXMgYG1wdGNwX3NrX2Nsb25lX2luaXRgIGEgZ29vZCBzdGFydGluZyBwb2ludD8gSXQncyBjYWxsZWQgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgd2hpY2ggaXNuJ3QgdGhlIG1vc3QgaGlnaC12b2x1bWUgY29kZSBwYXRoIGxpa2UgcGFja2V0IHByb2Nlc3NpbmcsIGJ1dCBpdCdzICpjcml0aWNhbCogdG8gdGhlIGNvbm5lY3Rpb24gc2V0dXAgcHJvY2Vzcy4gRGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGF0LiBgbXB0Y3BfdG9rZW5fYWNjZXB0YCwgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3RgLCBhbmQgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIOKAkyBhbGwgb2YgdGhlc2UgbG9vayBsaWtlIHNvbGlkIGZvY3VzIHN5bWJvbHMuIFRoZXkncmUgYWxsIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgbW9kaWZpZWQgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGxvZ2ljLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgYW5hbHlzaXMgZG9uZSwgSSdtIHJlYWR5IHRvIG1vdmUgZm9yd2FyZCBhbmQgc3RhcnQgc2V0dGluZyB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCB3aXRoIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTM0LCJPdXRwdXRUb2tlbnMiOjIwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjA1OjE2LjE3MjQ5MjY3NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDU2Mjc1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9za19jbG9uZV9pbml0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9hY2NlcHRcIixcbiAgICBcIm1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwYXRoLCBzcGVjaWZpY2FsbHkgaG93IHJlcXVlc3Qgc29ja2V0cyBhcmUgY2xvbmVkIGFuZCBob3cgdG9rZW5zIGFyZSBtYW5hZ2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLiBJdCBpbnRyb2R1Y2VzIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCBhbmQgbW9kaWZpZXMgYG1wdGNwX3Rva2VuX2FjY2VwdGAgdG8gaGFuZGxlIGZhaWx1cmVzIGFuZCByZXR1cm4gYSBib29sZWFuLCB3aGljaCBpcyB0aGVuIGNoZWNrZWQgaW4gYG1wdGNwX3NrX2Nsb25lX2luaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIE1QVENQIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIGR1cmluZyBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3NrX2Nsb25lX2luaXRcIixcbiAgICBcIm1wdGNwX3Rva2VuX2FjY2VwdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3RcIixcbiAgICBcIm1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHBhdGgsIHNwZWNpZmljYWxseSBob3cgcmVxdWVzdCBzb2NrZXRzIGFyZSBjbG9uZWQgYW5kIGhvdyB0b2tlbnMgYXJlIG1hbmFnZWQgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuIEl0IGludHJvZHVjZXMgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIGFuZCBtb2RpZmllcyBgbXB0Y3BfdG9rZW5fYWNjZXB0YCB0byBoYW5kbGUgZmFpbHVyZXMgYW5kIHJldHVybiBhIGJvb2xlYW4sIHdoaWNoIGlzIHRoZW4gY2hlY2tlZCBpbiBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgTVBUQ1Agc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjfv7[1] Phase: Succeeded StartedAt: 2026-08-06 12:05:28 +0000 UTC FinishedAt: 2026-08-06 12:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 12:05:28 +0000 UTC FinishedAt: 2026-08-06 12:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2] Phase: Succeeded StartedAt: 2026-08-06 12:05:28 +0000 UTC FinishedAt: 2026-08-06 15:51:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-06 12:05:28 +0000 UTC FinishedAt: 2026-08-06 15:51:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-06 12:05:28 +0000 UTC FinishedAt: 2026-08-06 12:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-06 12:05:28 +0000 UTC FinishedAt: 2026-08-06 12:05:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowbjfv7/series-workflowbjfv7-convert-artifact-2623420497/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-06 12:05:38 +0000 UTC FinishedAt: 2026-08-06 12:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-06 12:05:38 +0000 UTC FinishedAt: 2026-08-06 12:25:21 +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:*d6dd5cb5-7310-4a90-9081-42279b110348,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-workflowbjfv7/series-workflowbjfv7-convert-artifact-2623420497/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": "f04654ac-3cde-4bba-b5a9-a923a7a29ba4", "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-workflowbjfv7/series-workflowbjfv7-build-action-1197396479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-06 12:05:38 +0000 UTC FinishedAt: 2026-08-06 12:25:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d6dd5cb5-7310-4a90-9081-42279b110348,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-workflowbjfv7/series-workflowbjfv7-convert-artifact-2623420497/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": "f04654ac-3cde-4bba-b5a9-a923a7a29ba4", "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-workflowbjfv7/series-workflowbjfv7-build-action-1197396479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-06 12:25:21 +0000 UTC FinishedAt: 2026-08-06 12:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-06 12:25:21 +0000 UTC FinishedAt: 2026-08-06 12:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-06 12:25:21 +0000 UTC FinishedAt: 2026-08-06 12:25:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-06 12:25:21 +0000 UTC FinishedAt: 2026-08-06 12:25:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowbjfv7/series-workflowbjfv7-convert-artifact-3017557028/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-06 12:25:42 +0000 UTC FinishedAt: 2026-08-06 12:27:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-06 12:25:42 +0000 UTC FinishedAt: 2026-08-06 12:27:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f04654ac-3cde-4bba-b5a9-a923a7a29ba4,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-workflowbjfv7/series-workflowbjfv7-build-action-1197396479/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-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-06 12:27:31 +0000 UTC FinishedAt: 2026-08-06 12:27:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-06 12:27:31 +0000 UTC FinishedAt: 2026-08-06 12:27:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-06 12:27:31 +0000 UTC FinishedAt: 2026-08-06 12:48:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-06 12:27:31 +0000 UTC FinishedAt: 2026-08-06 12:48:09 +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:*d6dd5cb5-7310-4a90-9081-42279b110348,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-workflowbjfv7/series-workflowbjfv7-convert-artifact-3017557028/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": "1eca006c-a48d-4a1c-baab-e3dcbbeeca62", "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-workflowbjfv7/series-workflowbjfv7-build-action-169523888/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-06 12:27:31 +0000 UTC FinishedAt: 2026-08-06 12:47:59 +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:*d6dd5cb5-7310-4a90-9081-42279b110348,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-workflowbjfv7/series-workflowbjfv7-convert-artifact-3017557028/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": "1eca006c-a48d-4a1c-baab-e3dcbbeeca62", "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-workflowbjfv7/series-workflowbjfv7-build-action-169523888/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-06 12:48:09 +0000 UTC FinishedAt: 2026-08-06 12:48:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-06 12:48:09 +0000 UTC FinishedAt: 2026-08-06 12:48:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-06 12:48:09 +0000 UTC FinishedAt: 2026-08-06 12:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-06 12:48:09 +0000 UTC FinishedAt: 2026-08-06 12:49:50 +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:*1eca006c-a48d-4a1c-baab-e3dcbbeeca62,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-workflowbjfv7/series-workflowbjfv7-build-action-169523888/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-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-06 12:50:00 +0000 UTC FinishedAt: 2026-08-06 15:51:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-06 12:50:00 +0000 UTC FinishedAt: 2026-08-06 15:51:42 +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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"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:*f04654ac-3cde-4bba-b5a9-a923a7a29ba4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1eca006c-a48d-4a1c-baab-e3dcbbeeca62,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-workflowbjfv7/series-workflowbjfv7-build-action-1197396479/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-workflowbjfv7/series-workflowbjfv7-build-action-169523888/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-06 12:50:00 +0000 UTC FinishedAt: 2026-08-06 12:50:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-06 12:50:00 +0000 UTC FinishedAt: 2026-08-06 12:50:07 +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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"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-workflowbjfv7/series-workflowbjfv7-convert-artifact-136430509/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-06 12:50:00 +0000 UTC FinishedAt: 2026-08-06 12:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-06 12:50:00 +0000 UTC FinishedAt: 2026-08-06 12:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-06 12:50:00 +0000 UTC FinishedAt: 2026-08-06 12:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-06 12:50:10 +0000 UTC FinishedAt: 2026-08-06 15:51:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbjfv7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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_sk_clone_init","mptcp_token_accept","mptcp_token_move_request","mptcp_token_destroy_request","mptcp_subflow_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44871eadd07a7f004aa00cb87399461eea08c630","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"b0166c3f-e0ee-4ab4-af76-00e685ad32a1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-06 12:50:10 +0000 UTC FinishedAt: 2026-08-06 15:51:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f04654ac-3cde-4bba-b5a9-a923a7a29ba4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1eca006c-a48d-4a1c-baab-e3dcbbeeca62,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-workflowbjfv7/series-workflowbjfv7-build-action-1197396479/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-workflowbjfv7/series-workflowbjfv7-build-action-169523888/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-workflowbjfv7/series-workflowbjfv7-convert-artifact-136430509/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,}