Name: series-workflow6j52p Phase: Succeeded StartedAt: 2026-07-31 07:57:41 +0000 UTC FinishedAt: 2026-07-31 12:25:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[0] Phase: Succeeded StartedAt: 2026-07-31 07:57:41 +0000 UTC FinishedAt: 2026-07-31 08:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 07:57:41 +0000 UTC FinishedAt: 2026-07-31 08:26:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e366c15e1610ef11d0717ecd875ae63050282676", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET_SCTP_DIAG", "INET_DIAG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e366c15e1610ef11d0717ecd875ae63050282676", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET_SCTP_DIAG", "INET_DIAG" ], "series_id": "49551097-9ef8-45e4-bd30-de739b655142" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_diag_dump", "sctp_diag_dump_one", "inet_sctp_diag_fill" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVF9TQ1RQX0RJQUcmIzM0OywKICAgICYjMzQ7SU5FVF9ESUFHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF9kaWFnX2R1bXAmIzM0OywKICAgICYjMzQ7c2N0cF9kaWFnX2R1bXBfb25lJiMzNDssCiAgICAmIzM0O2luZXRfc2N0cF9kaWFnX2ZpbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay9vdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBjb3B5aW5nIFNDVFAgc29ja2V0IGFkZHJlc3NlcyB0byB1c2Vyc3BhY2UgdmlhIHRoZSBuZXRsaW5rIGRpYWcgaW50ZXJmYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODhlZDRjZTNjN2FmMzM3OTgwYWYyM2M1OWJmNWQ5YjU3ODg5M2NiYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDA4OjI0OjQwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2RpYWcuYyBiL25ldC9zY3RwL2RpYWcuY1xuaW5kZXggZDc1OGY1YzNlMDZlNS4uMzZkNzE4MGVlMDQ3ZCAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL2RpYWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvZGlhZy5jXG5AQCAtODUsOCAmIzQzOzg1LDEyIEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGluZm8gPSBubGFfZGF0YShhdHRyKTtcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxhZGRyLCBhZGRyZXNzX2xpc3QsIGxpc3QpIHtcbi1cdFx0bWVtY3B5KGluZm8sIFx1MDAyNmxhZGRyLVx1MDAzZWEsIHNpemVvZihsYWRkci1cdTAwM2VhKSk7XG4tXHRcdG1lbXNldChpbmZvICYjNDM7IHNpemVvZihsYWRkci1cdTAwM2VhKSwgMCwgYWRkcmxlbiAtIHNpemVvZihsYWRkci1cdTAwM2VhKSk7XG4mIzQzO1x0XHRzaXplX3QgY29weV9sZW4gPSBsYWRkci1cdTAwM2VhLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUID9cbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIDpcbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQoaW5mbywgMCwgYWRkcmxlbik7XG4mIzQzO1x0XHRtZW1jcHkoaW5mbywgXHUwMDI2bGFkZHItXHUwMDNlYSwgY29weV9sZW4pO1xuIFx0XHRpbmZvICYjNDM7PSBhZGRybGVuO1xuIFxuIFx0XHRpZiAoIS0tYWRkcmNudClcbkBAIC0xMTMsOSAmIzQzOzExNywxMiBAQCBzdGF0aWMgaW50IGluZXRfZGlhZ19tc2dfc2N0cGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGluZm8gPSBubGFfZGF0YShhdHRyKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZnJvbSwgXHUwMDI2YXNvYy1cdTAwM2VwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsXG4gXHRcdFx0ICAgIHRyYW5zcG9ydHMpIHtcbi1cdFx0bWVtY3B5KGluZm8sIFx1MDAyNmZyb20tXHUwMDNlaXBhZGRyLCBzaXplb2YoZnJvbS1cdTAwM2VpcGFkZHIpKTtcbi1cdFx0bWVtc2V0KGluZm8gJiM0Mzsgc2l6ZW9mKGZyb20tXHUwMDNlaXBhZGRyKSwgMCxcbi1cdFx0ICAgICAgIGFkZHJsZW4gLSBzaXplb2YoZnJvbS1cdTAwM2VpcGFkZHIpKTtcbiYjNDM7XHRcdHNpemVfdCBjb3B5X2xlbiA9IGZyb20tXHUwMDNlaXBhZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUID9cbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIDpcbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQoaW5mbywgMCwgYWRkcmxlbik7XG4mIzQzO1x0XHRtZW1jcHkoaW5mbywgXHUwMDI2ZnJvbS1cdTAwM2VpcGFkZHIsIGNvcHlfbGVuKTtcbiBcdFx0aW5mbyAmIzQzOz0gYWRkcmxlbjtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7LAogICAgJiMzNDtJTkVUX1NDVFBfRElBRyYjMzQ7LAogICAgJiMzNDtJTkVUX0RJQUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX2RpYWdfZHVtcCYjMzQ7LAogICAgJiMzNDtzY3RwX2RpYWdfZHVtcF9vbmUmIzM0OywKICAgICYjMzQ7aW5ldF9zY3RwX2RpYWdfZmlsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrL291dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGNvcHlpbmcgU0NUUCBzb2NrZXQgYWRkcmVzc2VzIHRvIHVzZXJzcGFjZSB2aWEgdGhlIG5ldGxpbmsgZGlhZyBpbnRlcmZhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OGVkNGNlM2M3YWYzMzc5ODBhZjIzYzU5YmY1ZDliNTc4ODkzY2JhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMDg6MjQ6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9kaWFnLmMgYi9uZXQvc2N0cC9kaWFnLmMKaW5kZXggZDc1OGY1YzNlMDZlNS4uMzZkNzE4MGVlMDQ3ZCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvZGlhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL2RpYWcuYwpAQCAtODUsOCAmIzQzOzg1LDEyIEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpbmZvID0gbmxhX2RhdGEoYXR0cik7CiAJcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxhZGRyLCBhZGRyZXNzX2xpc3QsIGxpc3QpIHsKLQkJbWVtY3B5KGluZm8sICZhbXA7bGFkZHItJmd0O2EsIHNpemVvZihsYWRkci0mZ3Q7YSkpOwotCQltZW1zZXQoaW5mbyAmIzQzOyBzaXplb2YobGFkZHItJmd0O2EpLCAwLCBhZGRybGVuIC0gc2l6ZW9mKGxhZGRyLSZndDthKSk7CiYjNDM7CQlzaXplX3QgY29weV9sZW4gPSBsYWRkci0mZ3Q7YS5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCA/CiYjNDM7CQkJCSAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgOgomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKJiM0MzsKJiM0MzsJCW1lbXNldChpbmZvLCAwLCBhZGRybGVuKTsKJiM0MzsJCW1lbWNweShpbmZvLCAmYW1wO2xhZGRyLSZndDthLCBjb3B5X2xlbik7CiAJCWluZm8gJiM0Mzs9IGFkZHJsZW47CiAKIAkJaWYgKCEtLWFkZHJjbnQpCkBAIC0xMTMsOSAmIzQzOzExNywxMiBAQCBzdGF0aWMgaW50IGluZXRfZGlhZ19tc2dfc2N0cGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpbmZvID0gbmxhX2RhdGEoYXR0cik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmcm9tLCAmYW1wO2Fzb2MtJmd0O3BlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwKIAkJCSAgICB0cmFuc3BvcnRzKSB7Ci0JCW1lbWNweShpbmZvLCAmYW1wO2Zyb20tJmd0O2lwYWRkciwgc2l6ZW9mKGZyb20tJmd0O2lwYWRkcikpOwotCQltZW1zZXQoaW5mbyAmIzQzOyBzaXplb2YoZnJvbS0mZ3Q7aXBhZGRyKSwgMCwKLQkJICAgICAgIGFkZHJsZW4gLSBzaXplb2YoZnJvbS0mZ3Q7aXBhZGRyKSk7CiYjNDM7CQlzaXplX3QgY29weV9sZW4gPSBmcm9tLSZndDtpcGFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQgPwomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIDoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CiYjNDM7CiYjNDM7CQltZW1zZXQoaW5mbywgMCwgYWRkcmxlbik7CiYjNDM7CQltZW1jcHkoaW5mbywgJmFtcDtmcm9tLSZndDtpcGFkZHIsIGNvcHlfbGVuKTsKIAkJaW5mbyAmIzQzOz0gYWRkcmxlbjsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4OAoJCQkJCQkJb3V0cHV0OiA4NAoJCQkJCQkJdGhvdWdodHM6IDE1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTQ1RQIERpYWdub3N0aWMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIGBuZXQvc2N0cC9kaWFnLmNgLiBTb3VuZHMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIHNvbWV0aGluZyBpbiB0aGUgU0NUUCBkaWFnbm9zdGljIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IHdpdGggaG93IGxvY2FsIGFkZHJlc3NlcyAoYGxhZGRyYCkgYW5kIGZyb20gYWRkcmVzc2VzIChgZnJvbWApIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlcy4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGxgIGFuZCBgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbGAuIEZyb20gdGhlIGRlc2NyaXB0aW9uLCBpdCBhcHBlYXJzIHRvIGJlIGEgbWVtb3J5IHNhZmV0eSBmaXgg4oCTIGEgcG90ZW50aWFsIGxlYWsgb3IgaW5lZmZpY2llbnQgY29weSBzaXR1YXRpb24uIEFwcGFyZW50bHksIHdlIHdlcmUgY29weWluZyB0aGUgKmVudGlyZSogYHVuaW9uYCBjb250YWluaW5nIHRoZSBhZGRyZXNzLCBpbnN0ZWFkIG9mIGp1c3QgdGhlIHJlbGV2YW50IGBzb2NrYWRkcl9pbmAgb3IgYHNvY2thZGRyX2luNmAgc3RydWN0dXJlLiBUaGF0IGNvdWxkIGRlZmluaXRlbHkgYmUgcHJvYmxlbWF0aWMsIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCB3YXN0aW5nIHNvbWUgY3ljbGVzLiBUaGUgZml4LCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIG5vdyBjb3B5IG9ubHkgdGhlIG5lY2Vzc2FyeSBgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbilgIG9yIGBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNilgIGJhc2VkIG9uIHRoZSBhZGRyZXNzIGZhbWlseS4KCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBjb2RlIG5vdyB0byB2ZXJpZnkgdGhpcyBhbmQgdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBgbmV0L3NjdHAvZGlhZy5jYCBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBJJiMzOTttIGdvaW5nIHRvIGZpcmUgdXAgYGdyZXBwZXJgIOKAkyB0aGF0JiMzOTtzIHRoZSBxdWlja2VzdCB3YXkgdG8gZmluZCB0aGVzZSBmdW5jdGlvbnMgYW5kIHRyYWNlIHRoZWlyIGNhbGxlcnMgdG8gc2VlIGV4YWN0bHkgd2hlcmUgdGhleSYjMzk7cmUgYmVpbmcgdXNlZCBhbmQgaG93IHRoaXMgY2hhbmdlIHdpbGwgaW1wYWN0IHRoZSBsYXJnZXIgZGlhZ25vc3RpYyBmbG93LiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0cyB0byBhcHByZWNpYXRlIHRoZSBmdWxsIGV4dGVudCBvZiB0aGUgY2hhbmdlIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfZGlhZ19tc2dfc2N0cGxhZGRyc19maWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2RpYWcuYz0yNj1zdGF0aWMgdm9pZCBpbmV0X2RpYWdfbXNnX3NjdHBhc29jX2ZpbGwoc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsXG4tLVxubmV0L3NjdHAvZGlhZy5jLTY2LVxubmV0L3NjdHAvZGlhZy5jOjY3OnN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY3RwL2RpYWcuYy02OC1cdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmFkZHJlc3NfbGlzdClcbi0tXG5uZXQvc2N0cC9kaWFnLmM9MTMzPXN0YXRpYyBpbnQgaW5ldF9zY3RwX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbm5ldC9zY3RwL2RpYWcuYy0yMTItXHRcdFx0IDogXHUwMDI2ZXAtXHUwMDNlYmFzZS5iaW5kX2FkZHIuYWRkcmVzc19saXN0O1xubmV0L3NjdHAvZGlhZy5jOjIxMzpcdGlmIChpbmV0X2RpYWdfbXNnX3NjdHBsYWRkcnNfZmlsbChza2IsIGFkZHJfbGlzdCkpXG5uZXQvc2N0cC9kaWFnLmMtMjE0LVx0XHRnb3RvIGVycm91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0X2RpYWdfbXNnX3NjdHBhZGRyc19maWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2RpYWcuYz02Nz1zdGF0aWMgaW50IGluZXRfZGlhZ19tc2dfc2N0cGxhZGRyc19maWxsKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjdHAvZGlhZy5jLTEwMy1cbm5ldC9zY3RwL2RpYWcuYzoxMDQ6c3RhdGljIGludCBpbmV0X2RpYWdfbXNnX3NjdHBhZGRyc19maWxsKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2N0cC9kaWFnLmMtMTA1LVx0XHRcdFx0XHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbi0tXG5uZXQvc2N0cC9kaWFnLmM9MTMzPXN0YXRpYyBpbnQgaW5ldF9zY3RwX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbm5ldC9zY3RwL2RpYWcuYy0yMTktXG5uZXQvc2N0cC9kaWFnLmM6MjIwOlx0aWYgKGFzb2MgXHUwMDI2XHUwMDI2IGluZXRfZGlhZ19tc2dfc2N0cGFkZHJzX2ZpbGwoc2tiLCBhc29jKSlcbm5ldC9zY3RwL2RpYWcuYy0yMjEtXHRcdGdvdG8gZXJyb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU0NUUCBEaWFnbm9zdGljIEludGVyZmFjZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgU0NUUCBkaWFnbm9zdGljIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IHRoZSBuZXRsaW5rIGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLiBJIHNlZSB0d28ga2V5IGZ1bmN0aW9ucyBoZXJlOiBgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGxgIGFuZCBgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbGAuIFRoZXNlIGFyZSB1bHRpbWF0ZWx5IGNhbGxlZCBieSBgaW5ldF9zY3RwX2RpYWdfZmlsbGAuIFRoaXMgZnVuY3Rpb24sIGluIHR1cm4sIGdldHMgaW52b2tlZCBieSBgc2N0cF9kaWFnX2R1bXBfb25lYCBhbmQgYHNjdHBfZGlhZ19kdW1wYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGVsZW1lbnRzIGZvciBkdW1waW5nIHRoZSBTQ1RQIGRpYWdub3N0aWMgaW5mb3JtYXRpb24gb3ZlciB0aGUgbmV0d29yay4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lY2Vzc2FyeSB0byBlbmFibGUgYW5kIHVzZSB0aGlzIFNDVFAgZGlhZ25vc3RpYyBpbnRlcmZhY2UuIEkgaGF2ZSBhIGh1bmNoIGl0JiMzOTtzIG5vdCBhIGRlZmF1bHQgZW5hYmxlZCBmZWF0dXJlLCBzbyBJIHNob3VsZCBzZWUgd2hhdCBjb25maWcgb3B0aW9ucyBJIG5lZWQgdG8gc2V0IHRvIGFjdHVhbGx5IGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0NUUF9ESUFHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODE1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBTQ1RQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UgbmVlZCB0byBsb29rIGludG8gdGhlIFNDVFAgY29uZmlndXJhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBpbW1lZGlhdGVseSBuYXZpZ2F0ZSB0byB0aGUgYG5ldC9zY3RwL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEl0IGNvbnRhaW5zIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBldmVyeXRoaW5nIGRlZmluZWQgdGhlcmU6IG1vZHVsZXMsIGZlYXR1cmVzLCBwcm9iYWJseSBzb21lIGRlZmF1bHRzLCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbmV0d29ya2luZyBzdWJzeXN0ZW1zLCBhbmQgbWF5YmUgc29tZSBoaW50cyBhYm91dCBwZXJmb3JtYW5jZSB0dW5pbmcuIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSBvZiB3aGF0JiMzOTtzIGNvbmZpZ3VyYWJsZSwgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgY29uc3RyYWludHMgdGhhdCBtaWdodCBiZSByZWxldmFudCBmb3IgYSBzcGVjaWZpYyB1c2UgY2FzZSBJIGhhdmUgaW4gbWluZC4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB0aGUgZW50aXJlIFNDVFAgY29uZmlndXJhdGlvbiBzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTQ1RQX0RJQUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvS2NvbmZpZz02OD1lbmRjaG9pY2Vcbm5ldC9zY3RwL0tjb25maWctNjktXG5uZXQvc2N0cC9LY29uZmlnOjcwOmNvbmZpZyBJTkVUX1NDVFBfRElBR1xubmV0L3NjdHAvS2NvbmZpZy03MS1cdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4tLVxubmV0L3NjdHAvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVBfU0NUUCkgJiM0Mzs9IHNjdHAub1xubmV0L3NjdHAvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfSU5FVF9TQ1RQX0RJQUcpICYjNDM7PSBzY3RwX2RpYWcub1xubmV0L3NjdHAvTWFrZWZpbGUtOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE4NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBTQ1RQIERpYWdub3N0aWMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IFNDVFAgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpcyBlbmFibGVkIGluIHRoaXMgc3lzdGVtLiBGcm9tIHdoYXQgSSYjMzk7dmUgZ2F0aGVyZWQsIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGZvY3VzIG9uIGlzIGBJTkVUX1NDVFBfRElBR2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGl0IHNlZW1zLgoKTmF0dXJhbGx5LCBgSU5FVF9TQ1RQX0RJQUdgIGRlcGVuZHMgb24gYSBjb3VwbGUgb2Ygb3RoZXIgdGhpbmdzIOKAkyBzcGVjaWZpY2FsbHksIGBJTkVUX0RJQUdgIGFuZCBgSVBfU0NUUGAuIEdpdmVuIHRoYXQgdGhlc2UgYXJlIGRlcGVuZGVuY2llcywgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgdHdvIGFyZSBhbHJlYWR5IGVuYWJsZWQgb3IgY29uc2lkZXJlZCB3aGVuIEkgY29uZmlndXJlIGBJTkVUX1NDVFBfRElBR2AuCgpOb3csIHdoZXJlJiMzOTtzIHRoZSBtb3N0IHJlbGlhYmxlIHBsYWNlIHRvIGNvbmZpcm0gdGhlIGRldGFpbHMgYXJvdW5kIGBJUF9TQ1RQYD8gUmlnaHQsIHRoZSBgbmV0L3NjdHAvS2NvbmZpZ2AgZmlsZSBzaG91bGQgaGF2ZSB0aGUgZGVmaW5pdGl2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGF0LiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgdG8gdmVyaWZ5IGl0cyBkZWZpbml0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9ucy4gVGltZSB0byBkZWx2ZSBpbnRvIHRoYXQgS2NvbmZpZyBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfU0NUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnLTUtXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXG5uZXQvc2N0cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgU0NUUCBQcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTYwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlNDVFAgRGlhZ25vc3RpYyBOZXRsaW5rIFBhdGNoIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGBJUF9TQ1RQYCBhbmQgYElORVRfU0NUUF9ESUFHYC4gVGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgbWVtb3J5IGxlYWsgYW5kIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyB3aXRoaW4gU0NUUCBkaWFnbm9zdGljIG5ldGxpbmsgbWVzc2FnZXMuIEZ1bmN0aW9uYWxseSwgaXQgbG9va3Mgc29saWQsIGFuZCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXgsIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGxgLCBgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbGAsIGFuZCBgaW5ldF9zY3RwX2RpYWdfZmlsbGAuIFdhaXQgYSBzZWNvbmTigKYgYXJlIGBpbmV0X2RpYWdfbXNnX3NjdHBsYWRkcnNfZmlsbGAgYW5kIGBpbmV0X2RpYWdfbXNnX3NjdHBhZGRyc19maWxsYCBzdGF0aWMgZnVuY3Rpb25zPyBUaGF0IGNvdWxkIHN1Z2dlc3QgdGhleSYjMzk7cmUgaW5saW5lZC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhleSYjMzk7cmUgaW5saW5lZCBiZWNhdXNlIGlmIHNvLCBteSBmdXp6aW5nIGVmZm9ydCBtaWdodCBiZSBiZXR0ZXIgZm9jdXNlZCBlbHNld2hlcmUuIEkgc3VzcGVjdCB0aGV5ICphcmUqIGlubGluZWQgaW50byBgaW5ldF9zY3RwX2RpYWdfZmlsbGAuCgpUbyBrZWVwIHRoaW5ncyBzdHJhaWdodGZvcndhcmQsIEkmIzM5O2xsIGNvbmNlbnRyYXRlIG15IGF0dGVudGlvbiBvbiBgaW5ldF9zY3RwX2RpYWdfZmlsbGAgYWxvbmcgd2l0aCBgc2N0cF9kaWFnX2R1bXBgIGFuZCBgc2N0cF9kaWFnX2R1bXBfb25lYCBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgaW5saW5pbmcuIFRoYXQmIzM5O2xsIGdpdmUgbWUgdGhlIG1vc3QgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9zY3RwX2RpYWdfZmlsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwL2RpYWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9kaWFnLmM9MTA0PXN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY3RwL2RpYWcuYy0xMzItLyogc2N0cCBhc29jL2VwIGZpbGwqL1xubmV0L3NjdHAvZGlhZy5jOjEzMzpzdGF0aWMgaW50IGluZXRfc2N0cF9kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL2RpYWcuYy0xMzQtXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjdHAvZGlhZy5jPTI2MD1zdGF0aWMgaW50IHNjdHBfc29ja19kdW1wX29uZShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHNwLCB2b2lkICpwKVxuLS1cbm5ldC9zY3RwL2RpYWcuYy0yODYtXG5uZXQvc2N0cC9kaWFnLmM6Mjg3Olx0ZXJyID0gaW5ldF9zY3RwX2RpYWdfZmlsbChzaywgYXNzb2MsIHJlcCwgcmVxLCBza191c2VyX25zKE5FVExJTktfQ0Ioc2tiKS5zayksXG5uZXQvc2N0cC9kaWFnLmMtMjg4LVx0XHRcdFx0ICBORVRMSU5LX0NCKHNrYikucG9ydGlkLCBjb21tcC1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuLS1cbm5ldC9zY3RwL2RpYWcuYz0zMDU9c3RhdGljIGludCBzY3RwX3NvY2tfZHVtcChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHNwLCB2b2lkICpwKVxuLS1cbm5ldC9zY3RwL2RpYWcuYy0zMjktXHRcdGlmICghY2ItXHUwMDNlYXJnc1szXSBcdTAwMjZcdTAwMjZcbm5ldC9zY3RwL2RpYWcuYzozMzA6XHRcdCAgICBpbmV0X3NjdHBfZGlhZ19maWxsKHNrLCBOVUxMLCBza2IsIHIsXG5uZXQvc2N0cC9kaWFnLmMtMzMxLVx0XHRcdFx0XHRza191c2VyX25zKE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5zayksXG4tLVxubmV0L3NjdHAvZGlhZy5jLTM0MC1cbm5ldC9zY3RwL2RpYWcuYzozNDE6XHRcdGlmIChpbmV0X3NjdHBfZGlhZ19maWxsKHNrLCBhc3NvYywgc2tiLCByLFxubmV0L3NjdHAvZGlhZy5jLTM0Mi1cdFx0XHRcdFx0c2tfdXNlcl9ucyhORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikuc2spLFxuLS1cbm5ldC9zY3RwL2RpYWcuYz0zNzY9c3RhdGljIGludCBzY3RwX2VwX2R1bXAoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCB2b2lkICpwKVxuLS1cbm5ldC9zY3RwL2RpYWcuYy00MDctXG5uZXQvc2N0cC9kaWFnLmM6NDA4Olx0aWYgKGluZXRfc2N0cF9kaWFnX2ZpbGwoc2ssIE5VTEwsIHNrYiwgcixcbm5ldC9zY3RwL2RpYWcuYy00MDktXHRcdFx0XHRza191c2VyX25zKE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5zayksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NzkKCQkJCQkJCW91dHB1dDogNjYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYG5ldC9zY3RwL2RpYWcuY2AgRnVuY3Rpb24gU2NvcGUqKgoKUmlnaHQsIGBpbmV0X3NjdHBfZGlhZ19maWxsYCBpcyBhbm90aGVyIG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMgZGVjbGFyZWQgc3RhdGljLCBqdXN0IGxpa2UgSSB0aG91Z2h0LiBPa2F5LCB0aW1lIHRvIGdldCBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvc2N0cC9kaWFnLmNgIHNvdXJjZSBjb2RlLCBidXQgdGhpcyB0aW1lIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCAqYXJlbiYjMzk7dCogc3RhdGljLiBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoaWNoIG9mIHRob3NlIGFyZSBleHRlcm5hbGx5IGFjY2Vzc2libGUgYW5kIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgZGlhZ25vc3RpYyBhbmQgbW9uaXRvcmluZyBpbnRlcmZhY2VzLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBtZW50YWwgbWFwIG9mIHRoZSBtb2R1bGUmIzM5O3MgcHVibGljIGVudHJ5IHBvaW50cyBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBkaWFnbm9zdGljIGZhY2lsaXRpZXMgaXQgZXhwb3Nlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA2MAoJCQkJCQkJb3V0cHV0OiA2NAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipRdWljayBhbmQgRGlydHkgQ29kZSBJbnNwZWN0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29kZSBxdWlja2x5LiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGxpa2VseSBzY2VuYXJpbywgaXMgdG8gYnlwYXNzIGFueSBjb21wbGV4IGFuYWx5c2lzIGluaXRpYWxseS4gSSYjMzk7bSBnb2luZyB0byBsZWFuIG9uIHRoZSB0cmllZCBhbmQgdHJ1ZSBtZXRob2RzOiBqdXN0ICpyZWFkKiB0aGUgZmlsZSBkaXJlY3RseS4gVGhhdCYjMzk7cyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGZhc3QgYXNzZXNzbWVudC4gSWYgdGhhdCBwcm92ZXMgdG9vIHNsb3csIG9yIEkgbmVlZCB0byBuYXJyb3cgdGhpbmdzIGRvd24sIEkmIzM5O2xsIHN3aXRjaCBvdmVyIHRvIHNvbWV0aGluZyBtb3JlIGVmZmljaWVudCwgc3VjaCBhcyBgZ3JlcGAuIEkmIzM5O2QgaW1tZWRpYXRlbHkgdGFyZ2V0IHNwZWNpZmljIHBhdHRlcm5zLCBsaWtlIGxpbmVzIHN0YXJ0aW5nIHdpdGggYF5zdGF0aWNgIG9yIGBeaW50YCwgZXRjLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSB0eXBlcyBvZiBpbmRpY2F0b3JzIHRvIHF1aWNrbHkgZ2V0IGEgc2Vuc2Ugb2YgdGhlIGNvZGViYXNlJiMzOTtzIHN0cnVjdHVyZSBhbmQga2V5IGVsZW1lbnRzIHdpdGhvdXQgZGlnZ2luZyBpbnRvIGFueXRoaW5nIHRvbyBjb21wbGljYXRlZCByaWdodCBvZmYgdGhlIGJhdC4gSXQmIzM5O3MgYWJvdXQgZ2V0dGluZyBhIGhpZ2gtbGV2ZWwgdmlldyAqZmFzdCouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC9kaWFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwL2RpYWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjAKCQkJCQkJCW91dHB1dDogNjYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZ1bmN0aW9uIERlZmluaXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSBkZWZpbmVkIGluIHRoZSBjb2RlLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhleSYjMzk7bGwgYmUgZGVjbGFyZWQgYXMgYHN0YXRpYyBpbnRgIG9yIGBzdGF0aWMgdm9pZGAsIGxpa2VseSB3aXRoaW4gdGhlIHNvdXJjZSBmaWxlLiBJdCYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuLiBUbyBiZSB0aG9yb3VnaCwgSSBzaG91bGQgYWxzbyBjaGVjayBmb3IgYGludGAgYW5kIGB2b2lkYCBkZWNsYXJhdGlvbnMgdG9vLCBqdXN0IGluIGNhc2UgdGhleSYjMzk7cmUgbm90IHN0YXRpYyBvciBkZWNsYXJlZCBlbHNld2hlcmUuIFNvLCBJJiMzOTtsbCBydW4gYSBxdWljayBgZ3JlcGAgd2l0aCB0aG9zZSBwYXR0ZXJuczogYF5zdGF0aWMgaW50IGAsIGBec3RhdGljIHZvaWQgYCwgYF5pbnQgYCwgYW5kIGBedm9pZCBgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcG90ZW50aWFsIGZ1bmN0aW9uIHNpZ25hdHVyZXMgSSYjMzk7bSBkZWFsaW5nIHdpdGguIFRoaXMgc2hvdWxkIGhlbHAgdG8gcmFwaWRseSB1bmRlcnN0YW5kIGhvdyB0aGUgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCwgd2hldGhlciB0aGV5IGhhdmUgcmV0dXJuIHR5cGVzLCBhbmQgdGhlaXIgc2NvcGUgd2l0aGluIHRoZSBjb2RlYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBpbnQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2RpYWcuYz0yNj1zdGF0aWMgdm9pZCBpbmV0X2RpYWdfbXNnX3NjdHBhc29jX2ZpbGwoc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsXG4tLVxubmV0L3NjdHAvZGlhZy5jLTY2LVxubmV0L3NjdHAvZGlhZy5jOjY3OnN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY3RwL2RpYWcuYy02OC1cdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmFkZHJlc3NfbGlzdClcbi0tXG5uZXQvc2N0cC9kaWFnLmMtMTAzLVxubmV0L3NjdHAvZGlhZy5jOjEwNDpzdGF0aWMgaW50IGluZXRfZGlhZ19tc2dfc2N0cGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY3RwL2RpYWcuYy0xMDUtXHRcdFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuLS1cbm5ldC9zY3RwL2RpYWcuYy0xMzItLyogc2N0cCBhc29jL2VwIGZpbGwqL1xubmV0L3NjdHAvZGlhZy5jOjEzMzpzdGF0aWMgaW50IGluZXRfc2N0cF9kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL2RpYWcuYy0xMzQtXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjdHAvZGlhZy5jPTI0MD1zdGF0aWMgc2l6ZV90IGluZXRfYXNzb2NfYXR0cl9zaXplKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvc2N0cC9kaWFnLmMtMjU5LVxubmV0L3NjdHAvZGlhZy5jOjI2MDpzdGF0aWMgaW50IHNjdHBfc29ja19kdW1wX29uZShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHNwLCB2b2lkICpwKVxubmV0L3NjdHAvZGlhZy5jLTI2MS17XG4tLVxubmV0L3NjdHAvZGlhZy5jLTMwNC1cbm5ldC9zY3RwL2RpYWcuYzozMDU6c3RhdGljIGludCBzY3RwX3NvY2tfZHVtcChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHNwLCB2b2lkICpwKVxubmV0L3NjdHAvZGlhZy5jLTMwNi17XG4tLVxubmV0L3NjdHAvZGlhZy5jLTM1OS1cbm5ldC9zY3RwL2RpYWcuYzozNjA6c3RhdGljIGludCBzY3RwX3NvY2tfZmlsdGVyKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0c3AsIHZvaWQgKnApXG5uZXQvc2N0cC9kaWFnLmMtMzYxLXtcbi0tXG5uZXQvc2N0cC9kaWFnLmMtMzc1LVxubmV0L3NjdHAvZGlhZy5jOjM3NjpzdGF0aWMgaW50IHNjdHBfZXBfZHVtcChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHZvaWQgKnApXG5uZXQvc2N0cC9kaWFnLmMtMzc3LXtcbi0tXG5uZXQvc2N0cC9kaWFnLmM9NDIzPXN0YXRpYyB2b2lkIHNjdHBfZGlhZ19nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLFxuLS1cbm5ldC9zY3RwL2RpYWcuYy00MzgtXG5uZXQvc2N0cC9kaWFnLmM6NDM5OnN0YXRpYyBpbnQgc2N0cF9kaWFnX2R1bXBfb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbm5ldC9zY3RwL2RpYWcuYy00NDAtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnJlcSlcbi0tXG5uZXQvc2N0cC9kaWFnLmM9NTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgc2N0cF9kaWFnX2hhbmRsZXIgPSB7XG4tLVxubmV0L3NjdHAvZGlhZy5jLTUzNi1cbm5ldC9zY3RwL2RpYWcuYzo1Mzc6c3RhdGljIGludCBfX2luaXQgc2N0cF9kaWFnX2luaXQodm9pZClcbm5ldC9zY3RwL2RpYWcuYy01Mzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIHZvaWQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2RpYWcuYy0yMS1cbm5ldC9zY3RwL2RpYWcuYzoyMjpzdGF0aWMgdm9pZCBzY3RwX2RpYWdfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcbm5ldC9zY3RwL2RpYWcuYy0yMy1cdFx0XHQgICAgICAgdm9pZCAqaW5mbyk7XG4tLVxubmV0L3NjdHAvZGlhZy5jLTI1LS8qIGRlZmluZSBzb21lIGZ1bmN0aW9ucyB0byBtYWtlIGFzb2MvZXAgZmlsbCBsb29rIGNsZWFuICovXG5uZXQvc2N0cC9kaWFnLmM6MjY6c3RhdGljIHZvaWQgaW5ldF9kaWFnX21zZ19zY3RwYXNvY19maWxsKHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLFxubmV0L3NjdHAvZGlhZy5jLTI3LVx0XHRcdFx0XHRzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3NjdHAvZGlhZy5jPTM3Nj1zdGF0aWMgaW50IHNjdHBfZXBfZHVtcChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHZvaWQgKnApXG4tLVxubmV0L3NjdHAvZGlhZy5jLTQyMi0vKiBkZWZpbmUgdGhlIGZ1bmN0aW9ucyBmb3Igc2N0cF9kaWFnX2hhbmRsZXIqL1xubmV0L3NjdHAvZGlhZy5jOjQyMzpzdGF0aWMgdm9pZCBzY3RwX2RpYWdfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcbm5ldC9zY3RwL2RpYWcuYy00MjQtXHRcdFx0ICAgICAgIHZvaWQgKmluZm8pXG4tLVxubmV0L3NjdHAvZGlhZy5jPTQzOT1zdGF0aWMgaW50IHNjdHBfZGlhZ19kdW1wX29uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L3NjdHAvZGlhZy5jLTQ3Ny1cbm5ldC9zY3RwL2RpYWcuYzo0Nzg6c3RhdGljIHZvaWQgc2N0cF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxubmV0L3NjdHAvZGlhZy5jLTQ3OS1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcilcbi0tXG5uZXQvc2N0cC9kaWFnLmM9NTM3PXN0YXRpYyBpbnQgX19pbml0IHNjdHBfZGlhZ19pbml0KHZvaWQpXG4tLVxubmV0L3NjdHAvZGlhZy5jLTU0MS1cbm5ldC9zY3RwL2RpYWcuYzo1NDI6c3RhdGljIHZvaWQgX19leGl0IHNjdHBfZGlhZ19leGl0KHZvaWQpXG5uZXQvc2N0cC9kaWFnLmMtNTQzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNDVFAgRGlhZ25vc3RpYyBIYW5kbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFNDVFAgZGlhZ25vc3RpYyBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGF0IG1lIGlzIHRoZSBmdW5jdGlvbiByZWdpc3RyYXRpb24uIEl0ICpsb29rcyogbGlrZSBhbGwgdGhlIGZ1bmN0aW9ucyBtaWdodCBiZSBzdGF0aWMsIHJpZ2h0PyBUaGV5JiMzOTtyZSByZWdpc3RlcmVkIHRocm91Z2ggYGluZXRfZGlhZ19yZWdpc3RlcigmYW1wO3NjdHBfZGlhZ19oYW5kbGVyKWAsIGFuZCBpbml0aWFsbHksIEkgYXNzdW1lZCB0aGF0IGltcGxpZWQgdGhleSB3ZXJlIGFsbCBzdGF0aWMuIEJ1dCBoYW5nIG9uIGEgc2Vjb25kLi4uCgpOb3cgSSYjMzk7bSBzZWVpbmcgdGhhdCBgc2N0cF9kaWFnX2R1bXBgIGFuZCBgc2N0cF9kaWFnX2R1bXBfb25lYCAqYXJlKiBpbmRlZWQgc3RhdGljLiBCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiB0aGV5JiMzOTtyZSBhc3NpZ25lZCB0byBgc2N0cF9kaWFnX2hhbmRsZXIuZHVtcGAgYW5kIGBzY3RwX2RpYWdfaGFuZGxlci5kdW1wX29uZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzIGhhcHBlbmluZy4KCkFscmlnaHQsIHNvIG5vdyBteSBmb2N1cyBpcyBjbGVhci4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIsIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBzY3RwX2RpYWdfaGFuZGxlcmAgc3RydWN0dXJlIGl0c2VsZi4gSXQmIzM5O3MgdGhlIGtleSB0byB1bmxvY2tpbmcgdGhpcyB3aG9sZSBkaWFnbm9zdGljIG1lY2hhbmlzbS4gTGV0IG1lIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjdHBfZGlhZ19oYW5kbGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2RpYWcuYz0zNzY9c3RhdGljIGludCBzY3RwX2VwX2R1bXAoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCB2b2lkICpwKVxuLS1cbm5ldC9zY3RwL2RpYWcuYy00MjEtXG5uZXQvc2N0cC9kaWFnLmM6NDIyOi8qIGRlZmluZSB0aGUgZnVuY3Rpb25zIGZvciBzY3RwX2RpYWdfaGFuZGxlciovXG5uZXQvc2N0cC9kaWFnLmMtNDIzLXN0YXRpYyB2b2lkIHNjdHBfZGlhZ19nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLFxuLS1cbm5ldC9zY3RwL2RpYWcuYz00Nzg9c3RhdGljIHZvaWQgc2N0cF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbm5ldC9zY3RwL2RpYWcuYy01MjctXG5uZXQvc2N0cC9kaWFnLmM6NTI4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgc2N0cF9kaWFnX2hhbmRsZXIgPSB7XG5uZXQvc2N0cC9kaWFnLmMtNTI5LVx0Lm93bmVyXHRcdCA9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC9zY3RwL2RpYWcuYz01Mzc9c3RhdGljIGludCBfX2luaXQgc2N0cF9kaWFnX2luaXQodm9pZClcbm5ldC9zY3RwL2RpYWcuYy01Mzgte1xubmV0L3NjdHAvZGlhZy5jOjUzOTpcdHJldHVybiBpbmV0X2RpYWdfcmVnaXN0ZXIoXHUwMDI2c2N0cF9kaWFnX2hhbmRsZXIpO1xubmV0L3NjdHAvZGlhZy5jLTU0MC19XG4tLVxubmV0L3NjdHAvZGlhZy5jPTU0Mj1zdGF0aWMgdm9pZCBfX2V4aXQgc2N0cF9kaWFnX2V4aXQodm9pZClcbm5ldC9zY3RwL2RpYWcuYy01NDMte1xubmV0L3NjdHAvZGlhZy5jOjU0NDpcdGluZXRfZGlhZ191bnJlZ2lzdGVyKFx1MDAyNnNjdHBfZGlhZ19oYW5kbGVyKTtcbm5ldC9zY3RwL2RpYWcuYy01NDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODM5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIFNDVFAgRGlhZ25vc3RpY3MgZm9yIEVmZmVjdGl2ZSBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBiZXN0IHRvIGltcHJvdmUgY292ZXJhZ2UgZm9yIFNDVFAgZGlhZ25vc3RpY3MuIFNpbmNlIGBzY3RwX2RpYWdfZHVtcGAgYW5kIGBzY3RwX2RpYWdfZHVtcF9vbmVgIGFyZSBzdGF0aWMsIHRoZXNlIHNob3VsZCBhYnNvbHV0ZWx5IGJlIHRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMuIEkgYWxzbyBuZWVkIHRvIGluY2x1ZGUgYGluZXRfc2N0cF9kaWFnX2ZpbGxgLiBJJiMzOTttIHJlbWluZGluZyBteXNlbGYgdGhhdCBzeXprYWxsZXIgY2FuIHJlc29sdmUgc3RhdGljIHN5bWJvbHMgZm9yIGNvdmVyYWdlLCBidXQgZm9yIHRydWUgZm9jdXMsIEkgbmVlZCB0byBwcmlvcml0aXplIG5vbi1pbmxpbmVkIHN5bWJvbHMuIGBzY3RwX2RpYWdfZHVtcGAgYW5kIGBzY3RwX2RpYWdfZHVtcF9vbmVgIGFyZSBkZWZpbml0ZWx5IG5vdCBpbmxpbmVkIGJlY2F1c2UgdGhlaXIgYWRkcmVzc2VzIGFyZSBleHBsaWNpdGx5IHRha2VuLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IGBpbmV0X3NjdHBfZGlhZ19maWxsYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIG5vdCBpbmxpbmVkLCBzaW5jZSBJJiMzOTttIHNlZWluZyBpdCBjYWxsZWQgZnJvbSBgc2N0cF9zb2NrX2R1bXBfb25lYCwgYHNjdHBfc29ja19kdW1wYCwgYW5kIGBzY3RwX2VwX2R1bXBgLiBCYXNlZCBvbiBpdHMgc2l6ZSBhbmQgdGhlIG11bHRpcGxlIGNhbGwgc2l0ZXMsIGl0JiMzOTtzIGxpa2VseSBub3QgaW5saW5lZC4KCk9rYXksIGxldCBtZSBjb25maXJtIHRoYXQgYHNjdHBfZGlhZ19kdW1wYCBhbmQgYHNjdHBfZGlhZ19kdW1wX29uZWAgYXJlIGFjdHVhbGx5IHRoZSBtYWluIGVudHJ5IHBvaW50cy4gSSBzaG91bGQgcXVpY2tseSBjaGVjayBgbmV0L3NjdHAvZGlhZy5jYCBmb3IgdGhvc2Ugc3ltYm9scy4gWWVzLCBjb25maXJtZWQuIFRob3NlIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdGhlIFNDVFAgZGlhZ25vc3RpYyBmdW5jdGlvbnMuCgpOb3csIGZvciB0aGUgY29uZmlncy4gSSBrbm93IEkgbmVlZCBgSVBfU0NUUGAgYW5kIGBJTkVUX1NDVFBfRElBR2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgYElORVRfRElBR2AgaXMgcmVxdWlyZWQuIEkga25vdyBpdCYjMzk7cyB1c3VhbGx5IGVuYWJsZWQuIFllcywgaXQmIzM5O3MgYSBkZXBlbmRlbmN5IG9mIGBJTkVUX1NDVFBfRElBR2AuIEkgc2hvdWxkIGluY2x1ZGUgaXQuCgpIYW5nIG9uLiBJJiMzOTttIGp1c3QgbWFraW5nIHN1cmUuIElzIGBJTkVUX0RJQUdgIGEgbWVudWNvbmZpZyBvciBjb25maWcgaXRzZWxmPyBJIHNob3VsZCBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRElBRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTQxOT1jb25maWcgSU5FVF9UVU5ORUxcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQyMi1cbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDI0LVx0dHJpc3RhdGUgXCYjMzQ7SU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZz00NDc9Y29uZmlnIElORVRfUkFXX0RJQUdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQ1NC1cbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvS2NvbmZpZy00NTYtXHRib29sIFwmIzM0O0lORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgwMQoJCQkJCQkJb3V0cHV0OiAxMzEKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0NUUCBEaWFnbm9zdGljIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gU0NUUCBkaWFnbm9zdGljcywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBuZXRsaW5rIG1lc3NhZ2VzLiBSaWdodCwgYElORVRfRElBR2AgaXMgZGVmaW5pdGVseSBhIGNvcmUgY29uZmlndXJhdGlvbiBpdGVtIGhlcmUuIEFuZCB0byBlbmFibGUgdGhpcyBzcGVjaWZpYyBkaWFnbm9zdGljIGZ1bmN0aW9uYWxpdHksIEkgbmVlZCB0byBiZSBzdXJlIGBJUF9TQ1RQYCwgYElORVRfU0NUUF9ESUFHYCwgYW5kIGBJTkVUX0RJQUdgIGFyZSBhbGwgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4KClRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgYHNjdHBfZGlhZ19kdW1wYCwgYHNjdHBfZGlhZ19kdW1wX29uZWAsIGFuZCBgaW5ldF9zY3RwX2RpYWdfZmlsbGAg4oCTIHRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIGhhbmRsaW5nIHRoZSBkYXRhIGNvbGxlY3Rpb24gYW5kIGZvcm1hdHRpbmcgZm9yIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2VzLgoKVGhpcyBwYXRjaCwgZnJvbSB3aGF0IEkgY2FuIHNlZSwgYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIFNDVFAgZGlhZ25vc3RpYyBuZXRsaW5rIGludGVyZmFjZS4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCYjMzk7cyB3b3J0aCBmdXp6aW5nIHRvIGV4cGxvcmUsIHBvdGVudGlhbGx5IEkgY2FuIGZpbmQgb3RoZXIgYXJlYXMuCgpOb3csIGxldCYjMzk7cyB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgY29kZSBmaXggaXRzZWxmOgoKYGBgYwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxhZGRyLCBhZGRyZXNzX2xpc3QsIGxpc3QpIHsKLQkJbWVtY3B5KGluZm8sICZhbXA7bGFkZHItJmd0O2EsIHNpemVvZihsYWRkci0mZ3Q7YSkpOwotCQltZW1zZXQoaW5mbyAmIzQzOyBzaXplb2YobGFkZHItJmd0O2EpLCAwLCBhZGRybGVuIC0gc2l6ZW9mKGxhZGRyLSZndDthKSk7CiYjNDM7CQlzaXplX3QgY29weV9sZW4gPSBsYWRkci0mZ3Q7YS5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCA/CiYjNDM7CQkJCSAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgOgomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKJiM0MzsKJiM0MzsJCW1lbXNldChpbmZvLCAwLCBhZGRybGVuKTsKJiM0MzsJCW1lbWNweShpbmZvLCAmYW1wO2xhZGRyLSZndDthLCBjb3B5X2xlbik7CiAJCWluZm8gJiM0Mzs9IGFkZHJsZW47CmBgYAoKQWgsIHllcywgSSBzZWUgaXQuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBkb2luZyBhIGBtZW1jcHlgIG9mIHRoZSBzb2NrZXQgYWRkcmVzcyBhbmQgdGhlbiB6ZXJvaW5nIG91dCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIGBpbmZvYC4gSG93ZXZlciwgaXQgd2FzIGFzc3VtaW5nIGEgZml4ZWQgc2l6ZSBmb3IgdGhlIGFkZHJlc3MgKGBzaXplb2YobGFkZHItJmd0O2EpYCkuIFRoZSBmaXggY2xldmVybHkgY2FsY3VsYXRlcyB0aGUgY29ycmVjdCBgY29weV9sZW5gIGJhc2VkIG9uIHRoZSBhZGRyZXNzIGZhbWlseSAoSVB2NCBvciBJUHY2KSBhbmQgdXNlcyB0aGF0IHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBtZW1vcnkgY29waWVkLiBDcnVjaWFsbHksIHRoZSBjb2RlIG5vdyB6ZXJvZXMgb3V0IHRoZSAqZW50aXJlKiBgYWRkcmxlbmAgcmVnaW9uIGZpcnN0IGJlZm9yZSBjb3B5aW5nLiBUaGF0IGVsaW1pbmF0ZXMgdGhlIHJpc2sgb2YgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIHBhc3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBnb29kLgoKSSYjMzk7bSBjb25maWRlbnQgdGhpcyBpcyBhIHZhbGlkIGFuZCBpbXBvcnRhbnQgZml4LiBJJiMzOTtsbCBmbGFnIHRoaXMgYXMgcmVhZHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDssCiAgICAmIzM0O0lORVRfU0NUUF9ESUFHJiMzNDssCiAgICAmIzM0O0lORVRfRElBRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfZGlhZ19kdW1wJiMzNDssCiAgICAmIzM0O3NjdHBfZGlhZ19kdW1wX29uZSYjMzQ7LAogICAgJiMzNDtpbmV0X3NjdHBfZGlhZ19maWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsvb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gY29weWluZyBTQ1RQIHNvY2tldCBhZGRyZXNzZXMgdG8gdXNlcnNwYWNlIHZpYSB0aGUgbmV0bGluayBkaWFnIGludGVyZmFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7LAogICAgJiMzNDtJTkVUX1NDVFBfRElBRyYjMzQ7LAogICAgJiMzNDtJTkVUX0RJQUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX2RpYWdfZHVtcCYjMzQ7LAogICAgJiMzNDtzY3RwX2RpYWdfZHVtcF9vbmUmIzM0OywKICAgICYjMzQ7aW5ldF9zY3RwX2RpYWdfZmlsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrL291dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGNvcHlpbmcgU0NUUCBzb2NrZXQgYWRkcmVzc2VzIHRvIHVzZXJzcGFjZSB2aWEgdGhlIG5ldGxpbmsgZGlhZyBpbnRlcmZhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNDo0MS4yNzc1NjA0NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjU0NDcyMTExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCIsXG4gICAgXCJJTkVUX1NDVFBfRElBR1wiLFxuICAgIFwiSU5FVF9ESUFHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9kaWFnX2R1bXBcIixcbiAgICBcInNjdHBfZGlhZ19kdW1wX29uZVwiLFxuICAgIFwiaW5ldF9zY3RwX2RpYWdfZmlsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsvb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gY29weWluZyBTQ1RQIHNvY2tldCBhZGRyZXNzZXMgdG8gdXNlcnNwYWNlIHZpYSB0aGUgbmV0bGluayBkaWFnIGludGVyZmFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjQ6NDEuMjc3NTY3MDI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzczNTEwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4OGVkNGNlM2M3YWYzMzc5ODBhZjIzYzU5YmY1ZDliNTc4ODkzY2JhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDA4OjI0OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2RpYWcuYyBiL25ldC9zY3RwL2RpYWcuY1xcbmluZGV4IGQ3NThmNWMzZTA2ZTUuLjM2ZDcxODBlZTA0N2QgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjdHAvZGlhZy5jXFxuKysrIGIvbmV0L3NjdHAvZGlhZy5jXFxuQEAgLTg1LDggKzg1LDEyIEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aW5mbyA9IG5sYV9kYXRhKGF0dHIpO1xcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxhZGRyLCBhZGRyZXNzX2xpc3QsIGxpc3QpIHtcXG4tXFx0XFx0bWVtY3B5KGluZm8sIFxcdTAwMjZsYWRkci1cXHUwMDNlYSwgc2l6ZW9mKGxhZGRyLVxcdTAwM2VhKSk7XFxuLVxcdFxcdG1lbXNldChpbmZvICsgc2l6ZW9mKGxhZGRyLVxcdTAwM2VhKSwgMCwgYWRkcmxlbiAtIHNpemVvZihsYWRkci1cXHUwMDNlYSkpO1xcbitcXHRcXHRzaXplX3QgY29weV9sZW4gPSBsYWRkci1cXHUwMDNlYS5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCA/XFxuK1xcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgOlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTtcXG4rXFxuK1xcdFxcdG1lbXNldChpbmZvLCAwLCBhZGRybGVuKTtcXG4rXFx0XFx0bWVtY3B5KGluZm8sIFxcdTAwMjZsYWRkci1cXHUwMDNlYSwgY29weV9sZW4pO1xcbiBcXHRcXHRpbmZvICs9IGFkZHJsZW47XFxuIFxcbiBcXHRcXHRpZiAoIS0tYWRkcmNudClcXG5AQCAtMTEzLDkgKzExNywxMiBAQCBzdGF0aWMgaW50IGluZXRfZGlhZ19tc2dfc2N0cGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aW5mbyA9IG5sYV9kYXRhKGF0dHIpO1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGZyb20sIFxcdTAwMjZhc29jLVxcdTAwM2VwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsXFxuIFxcdFxcdFxcdCAgICB0cmFuc3BvcnRzKSB7XFxuLVxcdFxcdG1lbWNweShpbmZvLCBcXHUwMDI2ZnJvbS1cXHUwMDNlaXBhZGRyLCBzaXplb2YoZnJvbS1cXHUwMDNlaXBhZGRyKSk7XFxuLVxcdFxcdG1lbXNldChpbmZvICsgc2l6ZW9mKGZyb20tXFx1MDAzZWlwYWRkciksIDAsXFxuLVxcdFxcdCAgICAgICBhZGRybGVuIC0gc2l6ZW9mKGZyb20tXFx1MDAzZWlwYWRkcikpO1xcbitcXHRcXHRzaXplX3QgY29weV9sZW4gPSBmcm9tLVxcdTAwM2VpcGFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQgP1xcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIDpcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7XFxuK1xcbitcXHRcXHRtZW1zZXQoaW5mbywgMCwgYWRkcmxlbik7XFxuK1xcdFxcdG1lbWNweShpbmZvLCBcXHUwMDI2ZnJvbS1cXHUwMDNlaXBhZGRyLCBjb3B5X2xlbik7XFxuIFxcdFxcdGluZm8gKz0gYWRkcmxlbjtcXG4gXFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjQ6NDEuNzU1OTA4ODg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTYwNjYzNjIwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiLFxuICAgIFwiSU5FVF9TQ1RQX0RJQUdcIixcbiAgICBcIklORVRfRElBR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfZGlhZ19kdW1wXCIsXG4gICAgXCJzY3RwX2RpYWdfZHVtcF9vbmVcIixcbiAgICBcImluZXRfc2N0cF9kaWFnX2ZpbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrL291dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGNvcHlpbmcgU0NUUCBzb2NrZXQgYWRkcmVzc2VzIHRvIHVzZXJzcGFjZSB2aWEgdGhlIG5ldGxpbmsgZGlhZyBpbnRlcmZhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4ZWQ0Y2UzYzdhZjMzNzk4MGFmMjNjNTliZjVkOWI1Nzg4OTNjYmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwODoyNDo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2RpYWcuYyBiL25ldC9zY3RwL2RpYWcuY1xuaW5kZXggZDc1OGY1YzNlMDZlNS4uMzZkNzE4MGVlMDQ3ZCAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL2RpYWcuY1xuKysrIGIvbmV0L3NjdHAvZGlhZy5jXG5AQCAtODUsOCArODUsMTIgQEAgc3RhdGljIGludCBpbmV0X2RpYWdfbXNnX3NjdHBsYWRkcnNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aW5mbyA9IG5sYV9kYXRhKGF0dHIpO1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGFkZHIsIGFkZHJlc3NfbGlzdCwgbGlzdCkge1xuLVx0XHRtZW1jcHkoaW5mbywgXHUwMDI2bGFkZHItXHUwMDNlYSwgc2l6ZW9mKGxhZGRyLVx1MDAzZWEpKTtcbi1cdFx0bWVtc2V0KGluZm8gKyBzaXplb2YobGFkZHItXHUwMDNlYSksIDAsIGFkZHJsZW4gLSBzaXplb2YobGFkZHItXHUwMDNlYSkpO1xuK1x0XHRzaXplX3QgY29weV9sZW4gPSBsYWRkci1cdTAwM2VhLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUID9cbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgOlxuK1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7XG4rXG4rXHRcdG1lbXNldChpbmZvLCAwLCBhZGRybGVuKTtcbitcdFx0bWVtY3B5KGluZm8sIFx1MDAyNmxhZGRyLVx1MDAzZWEsIGNvcHlfbGVuKTtcbiBcdFx0aW5mbyArPSBhZGRybGVuO1xuIFxuIFx0XHRpZiAoIS0tYWRkcmNudClcbkBAIC0xMTMsOSArMTE3LDEyIEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aW5mbyA9IG5sYV9kYXRhKGF0dHIpO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmcm9tLCBcdTAwMjZhc29jLVx1MDAzZXBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCxcbiBcdFx0XHQgICAgdHJhbnNwb3J0cykge1xuLVx0XHRtZW1jcHkoaW5mbywgXHUwMDI2ZnJvbS1cdTAwM2VpcGFkZHIsIHNpemVvZihmcm9tLVx1MDAzZWlwYWRkcikpO1xuLVx0XHRtZW1zZXQoaW5mbyArIHNpemVvZihmcm9tLVx1MDAzZWlwYWRkciksIDAsXG4tXHRcdCAgICAgICBhZGRybGVuIC0gc2l6ZW9mKGZyb20tXHUwMDNlaXBhZGRyKSk7XG4rXHRcdHNpemVfdCBjb3B5X2xlbiA9IGZyb20tXHUwMDNlaXBhZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUID9cbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgOlxuK1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7XG4rXG4rXHRcdG1lbXNldChpbmZvLCAwLCBhZGRybGVuKTtcbitcdFx0bWVtY3B5KGluZm8sIFx1MDAyNmZyb20tXHUwMDNlaXBhZGRyLCBjb3B5X2xlbik7XG4gXHRcdGluZm8gKz0gYWRkcmxlbjtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjI0OjQxLjc1NTkxMjM1NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NDIwNjcyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU0NUUCBEaWFnbm9zdGljIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBgbmV0L3NjdHAvZGlhZy5jYC4gU291bmRzIGxpa2UgaXQncyBhZGRyZXNzaW5nIHNvbWV0aGluZyBpbiB0aGUgU0NUUCBkaWFnbm9zdGljIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IHdpdGggaG93IGxvY2FsIGFkZHJlc3NlcyAoYGxhZGRyYCkgYW5kIGZyb20gYWRkcmVzc2VzIChgZnJvbWApIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlcy4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGxgIGFuZCBgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbGAuIEZyb20gdGhlIGRlc2NyaXB0aW9uLCBpdCBhcHBlYXJzIHRvIGJlIGEgbWVtb3J5IHNhZmV0eSBmaXgg4oCTIGEgcG90ZW50aWFsIGxlYWsgb3IgaW5lZmZpY2llbnQgY29weSBzaXR1YXRpb24uIEFwcGFyZW50bHksIHdlIHdlcmUgY29weWluZyB0aGUgKmVudGlyZSogYHVuaW9uYCBjb250YWluaW5nIHRoZSBhZGRyZXNzLCBpbnN0ZWFkIG9mIGp1c3QgdGhlIHJlbGV2YW50IGBzb2NrYWRkcl9pbmAgb3IgYHNvY2thZGRyX2luNmAgc3RydWN0dXJlLiBUaGF0IGNvdWxkIGRlZmluaXRlbHkgYmUgcHJvYmxlbWF0aWMsIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCB3YXN0aW5nIHNvbWUgY3ljbGVzLiBUaGUgZml4LCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIG5vdyBjb3B5IG9ubHkgdGhlIG5lY2Vzc2FyeSBgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbilgIG9yIGBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNilgIGJhc2VkIG9uIHRoZSBhZGRyZXNzIGZhbWlseS5cblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgY29kZSBub3cgdG8gdmVyaWZ5IHRoaXMgYW5kIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBgbmV0L3NjdHAvZGlhZy5jYCBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBJJ20gZ29pbmcgdG8gZmlyZSB1cCBgZ3JlcHBlcmAg4oCTIHRoYXQncyB0aGUgcXVpY2tlc3Qgd2F5IHRvIGZpbmQgdGhlc2UgZnVuY3Rpb25zIGFuZCB0cmFjZSB0aGVpciBjYWxsZXJzIHRvIHNlZSBleGFjdGx5IHdoZXJlIHRoZXkncmUgYmVpbmcgdXNlZCBhbmQgaG93IHRoaXMgY2hhbmdlIHdpbGwgaW1wYWN0IHRoZSBsYXJnZXIgZGlhZ25vc3RpYyBmbG93LiBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHRzIHRvIGFwcHJlY2lhdGUgdGhlIGZ1bGwgZXh0ZW50IG9mIHRoZSBjaGFuZ2UgYW5kIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODgsIk91dHB1dFRva2VucyI6ODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNDo0Ny4yOTc5ODE4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjYzMzAwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL2RpYWcuYz0yNj1zdGF0aWMgdm9pZCBpbmV0X2RpYWdfbXNnX3NjdHBhc29jX2ZpbGwoc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsXFxuLS1cXG5uZXQvc2N0cC9kaWFnLmMtNjYtXFxubmV0L3NjdHAvZGlhZy5jOjY3OnN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2N0cC9kaWFnLmMtNjgtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2hlYWQgKmFkZHJlc3NfbGlzdClcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz0xMzM9c3RhdGljIGludCBpbmV0X3NjdHBfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9kaWFnLmMtMjEyLVxcdFxcdFxcdCA6IFxcdTAwMjZlcC1cXHUwMDNlYmFzZS5iaW5kX2FkZHIuYWRkcmVzc19saXN0O1xcbm5ldC9zY3RwL2RpYWcuYzoyMTM6XFx0aWYgKGluZXRfZGlhZ19tc2dfc2N0cGxhZGRyc19maWxsKHNrYiwgYWRkcl9saXN0KSlcXG5uZXQvc2N0cC9kaWFnLmMtMjE0LVxcdFxcdGdvdG8gZXJyb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNDo0Ny41MjQzMTYyMTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg4NDQwNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9kaWFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvZGlhZy5jPTY3PXN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYy0xMDMtXFxubmV0L3NjdHAvZGlhZy5jOjEwNDpzdGF0aWMgaW50IGluZXRfZGlhZ19tc2dfc2N0cGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2N0cC9kaWFnLmMtMTA1LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxcbi0tXFxubmV0L3NjdHAvZGlhZy5jPTEzMz1zdGF0aWMgaW50IGluZXRfc2N0cF9kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYy0yMTktXFxubmV0L3NjdHAvZGlhZy5jOjIyMDpcXHRpZiAoYXNvYyBcXHUwMDI2XFx1MDAyNiBpbmV0X2RpYWdfbXNnX3NjdHBhZGRyc19maWxsKHNrYiwgYXNvYykpXFxubmV0L3NjdHAvZGlhZy5jLTIyMS1cXHRcXHRnb3RvIGVycm91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjQ6NDcuNjIzMTY1NDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA0Mzg5NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlNDVFAgRGlhZ25vc3RpYyBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBTQ1RQIGRpYWdub3N0aWMgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgdGhlIG5ldGxpbmsgaW1wbGVtZW50YXRpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UuIEkgc2VlIHR3byBrZXkgZnVuY3Rpb25zIGhlcmU6IGBpbmV0X2RpYWdfbXNnX3NjdHBsYWRkcnNfZmlsbGAgYW5kIGBpbmV0X2RpYWdfbXNnX3NjdHBhZGRyc19maWxsYC4gVGhlc2UgYXJlIHVsdGltYXRlbHkgY2FsbGVkIGJ5IGBpbmV0X3NjdHBfZGlhZ19maWxsYC4gVGhpcyBmdW5jdGlvbiwgaW4gdHVybiwgZ2V0cyBpbnZva2VkIGJ5IGBzY3RwX2RpYWdfZHVtcF9vbmVgIGFuZCBgc2N0cF9kaWFnX2R1bXBgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZWxlbWVudHMgZm9yIGR1bXBpbmcgdGhlIFNDVFAgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBvdmVyIHRoZSBuZXR3b3JrLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBuZWNlc3NhcnkgdG8gZW5hYmxlIGFuZCB1c2UgdGhpcyBTQ1RQIGRpYWdub3N0aWMgaW50ZXJmYWNlLiBJIGhhdmUgYSBodW5jaCBpdCdzIG5vdCBhIGRlZmF1bHQgZW5hYmxlZCBmZWF0dXJlLCBzbyBJIHNob3VsZCBzZWUgd2hhdCBjb25maWcgb3B0aW9ucyBJIG5lZWQgdG8gc2V0IHRvIGFjdHVhbGx5IGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0ODEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjI0OjUxLjIyNzU1Nzc2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ5Mzk3NjIwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0NUUF9ESUFHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNDo1My40NzY5NjQ1NzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzk0MDU1MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFNDVFAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gbG9vayBpbnRvIHRoZSBTQ1RQIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gaW1tZWRpYXRlbHkgbmF2aWdhdGUgdG8gdGhlIGBuZXQvc2N0cC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEl0IGNvbnRhaW5zIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGV2ZXJ5dGhpbmcgZGVmaW5lZCB0aGVyZTogbW9kdWxlcywgZmVhdHVyZXMsIHByb2JhYmx5IHNvbWUgZGVmYXVsdHMsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBuZXR3b3JraW5nIHN1YnN5c3RlbXMsIGFuZCBtYXliZSBzb21lIGhpbnRzIGFib3V0IHBlcmZvcm1hbmNlIHR1bmluZy4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlIG9mIHdoYXQncyBjb25maWd1cmFibGUsIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBhbmQgYW55IGNvbnN0cmFpbnRzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIGEgc3BlY2lmaWMgdXNlIGNhc2UgSSBoYXZlIGluIG1pbmQuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIGVudGlyZSBTQ1RQIGNvbmZpZ3VyYXRpb24gc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNDo1Ni4yNzEwMjIzNzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3NDk4OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0NUUF9ESUFHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9LY29uZmlnPTY4PWVuZGNob2ljZVxcbm5ldC9zY3RwL0tjb25maWctNjktXFxubmV0L3NjdHAvS2NvbmZpZzo3MDpjb25maWcgSU5FVF9TQ1RQX0RJQUdcXG5uZXQvc2N0cC9LY29uZmlnLTcxLVxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuLS1cXG5uZXQvc2N0cC9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JUF9TQ1RQKSArPSBzY3RwLm9cXG5uZXQvc2N0cC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19JTkVUX1NDVFBfRElBRykgKz0gc2N0cF9kaWFnLm9cXG5uZXQvc2N0cC9NYWtlZmlsZS04LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNDo1Ni4zMjc3Nzc3MjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwNTU3NjI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFNDVFAgRGlhZ25vc3RpYyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFNDVFAgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpcyBlbmFibGVkIGluIHRoaXMgc3lzdGVtLiBGcm9tIHdoYXQgSSd2ZSBnYXRoZXJlZCwgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYElORVRfU0NUUF9ESUFHYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCBzZWVtcy5cblxuTmF0dXJhbGx5LCBgSU5FVF9TQ1RQX0RJQUdgIGRlcGVuZHMgb24gYSBjb3VwbGUgb2Ygb3RoZXIgdGhpbmdzIOKAkyBzcGVjaWZpY2FsbHksIGBJTkVUX0RJQUdgIGFuZCBgSVBfU0NUUGAuIEdpdmVuIHRoYXQgdGhlc2UgYXJlIGRlcGVuZGVuY2llcywgSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSB0d28gYXJlIGFscmVhZHkgZW5hYmxlZCBvciBjb25zaWRlcmVkIHdoZW4gSSBjb25maWd1cmUgYElORVRfU0NUUF9ESUFHYC5cblxuTm93LCB3aGVyZSdzIHRoZSBtb3N0IHJlbGlhYmxlIHBsYWNlIHRvIGNvbmZpcm0gdGhlIGRldGFpbHMgYXJvdW5kIGBJUF9TQ1RQYD8gUmlnaHQsIHRoZSBgbmV0L3NjdHAvS2NvbmZpZ2AgZmlsZSBzaG91bGQgaGF2ZSB0aGUgZGVmaW5pdGl2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGF0LiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgdG8gdmVyaWZ5IGl0cyBkZWZpbml0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9ucy4gVGltZSB0byBkZWx2ZSBpbnRvIHRoYXQgS2NvbmZpZyBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MDIuMDMzMzU2Njc1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTY2Nzc3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfU0NUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvS2NvbmZpZy01LVxcbm5ldC9zY3RwL0tjb25maWc6NjptZW51Y29uZmlnIElQX1NDVFBcXG5uZXQvc2N0cC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlRoZSBTQ1RQIFByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNTowMi4xMjUwMzE5ODlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0Njg5NzE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipTQ1RQIERpYWdub3N0aWMgTmV0bGluayBQYXRjaCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYElQX1NDVFBgIGFuZCBgSU5FVF9TQ1RQX0RJQUdgLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGFkZHJlc3MgYSBtZW1vcnkgbGVhayBhbmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHdpdGhpbiBTQ1RQIGRpYWdub3N0aWMgbmV0bGluayBtZXNzYWdlcy4gRnVuY3Rpb25hbGx5LCBpdCBsb29rcyBzb2xpZCwgYW5kIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgaXQncyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGxgLCBgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbGAsIGFuZCBgaW5ldF9zY3RwX2RpYWdfZmlsbGAuIFdhaXQgYSBzZWNvbmTigKYgYXJlIGBpbmV0X2RpYWdfbXNnX3NjdHBsYWRkcnNfZmlsbGAgYW5kIGBpbmV0X2RpYWdfbXNnX3NjdHBhZGRyc19maWxsYCBzdGF0aWMgZnVuY3Rpb25zPyBUaGF0IGNvdWxkIHN1Z2dlc3QgdGhleSdyZSBpbmxpbmVkLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGV5J3JlIGlubGluZWQgYmVjYXVzZSBpZiBzbywgbXkgZnV6emluZyBlZmZvcnQgbWlnaHQgYmUgYmV0dGVyIGZvY3VzZWQgZWxzZXdoZXJlLiBJIHN1c3BlY3QgdGhleSAqYXJlKiBpbmxpbmVkIGludG8gYGluZXRfc2N0cF9kaWFnX2ZpbGxgLlxuXG5UbyBrZWVwIHRoaW5ncyBzdHJhaWdodGZvcndhcmQsIEknbGwgY29uY2VudHJhdGUgbXkgYXR0ZW50aW9uIG9uIGBpbmV0X3NjdHBfZGlhZ19maWxsYCBhbG9uZyB3aXRoIGBzY3RwX2RpYWdfZHVtcGAgYW5kIGBzY3RwX2RpYWdfZHVtcF9vbmVgIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBpbmxpbmluZy4gVGhhdCdsbCBnaXZlIG1lIHRoZSBtb3N0IGNvbXByZWhlbnNpdmUgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MDcuNzcxOTMxODQ4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUzMjAzMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9zY3RwX2RpYWdfZmlsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9kaWFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvZGlhZy5jPTEwND1zdGF0aWMgaW50IGluZXRfZGlhZ19tc2dfc2N0cGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYy0xMzItLyogc2N0cCBhc29jL2VwIGZpbGwqL1xcbm5ldC9zY3RwL2RpYWcuYzoxMzM6c3RhdGljIGludCBpbmV0X3NjdHBfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxubmV0L3NjdHAvZGlhZy5jLTEzNC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz0yNjA9c3RhdGljIGludCBzY3RwX3NvY2tfZHVtcF9vbmUoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRzcCwgdm9pZCAqcClcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYy0yODYtXFxubmV0L3NjdHAvZGlhZy5jOjI4NzpcXHRlcnIgPSBpbmV0X3NjdHBfZGlhZ19maWxsKHNrLCBhc3NvYywgcmVwLCByZXEsIHNrX3VzZXJfbnMoTkVUTElOS19DQihza2IpLnNrKSxcXG5uZXQvc2N0cC9kaWFnLmMtMjg4LVxcdFxcdFxcdFxcdCAgTkVUTElOS19DQihza2IpLnBvcnRpZCwgY29tbXAtXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCAwLFxcbi0tXFxubmV0L3NjdHAvZGlhZy5jPTMwNT1zdGF0aWMgaW50IHNjdHBfc29ja19kdW1wKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0c3AsIHZvaWQgKnApXFxuLS1cXG5uZXQvc2N0cC9kaWFnLmMtMzI5LVxcdFxcdGlmICghY2ItXFx1MDAzZWFyZ3NbM10gXFx1MDAyNlxcdTAwMjZcXG5uZXQvc2N0cC9kaWFnLmM6MzMwOlxcdFxcdCAgICBpbmV0X3NjdHBfZGlhZ19maWxsKHNrLCBOVUxMLCBza2IsIHIsXFxubmV0L3NjdHAvZGlhZy5jLTMzMS1cXHRcXHRcXHRcXHRcXHRza191c2VyX25zKE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikuc2spLFxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTM0MC1cXG5uZXQvc2N0cC9kaWFnLmM6MzQxOlxcdFxcdGlmIChpbmV0X3NjdHBfZGlhZ19maWxsKHNrLCBhc3NvYywgc2tiLCByLFxcbm5ldC9zY3RwL2RpYWcuYy0zNDItXFx0XFx0XFx0XFx0XFx0c2tfdXNlcl9ucyhORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnNrKSxcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz0zNzY9c3RhdGljIGludCBzY3RwX2VwX2R1bXAoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCB2b2lkICpwKVxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTQwNy1cXG5uZXQvc2N0cC9kaWFnLmM6NDA4OlxcdGlmIChpbmV0X3NjdHBfZGlhZ19maWxsKHNrLCBOVUxMLCBza2IsIHIsXFxubmV0L3NjdHAvZGlhZy5jLTQwOS1cXHRcXHRcXHRcXHRza191c2VyX25zKE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikuc2spLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNTowOC4wMjcyNTc0NTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MzczMTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBuZXQvc2N0cC9kaWFnLmNgIEZ1bmN0aW9uIFNjb3BlKipcblxuUmlnaHQsIGBpbmV0X3NjdHBfZGlhZ19maWxsYCBpcyBhbm90aGVyIG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMgZGVjbGFyZWQgc3RhdGljLCBqdXN0IGxpa2UgSSB0aG91Z2h0LiBPa2F5LCB0aW1lIHRvIGdldCBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvc2N0cC9kaWFnLmNgIHNvdXJjZSBjb2RlLCBidXQgdGhpcyB0aW1lIEknbGwgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0ICphcmVuJ3QqIHN0YXRpYy4gVGhhdCdsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoaWNoIG9mIHRob3NlIGFyZSBleHRlcm5hbGx5IGFjY2Vzc2libGUgYW5kIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgZGlhZ25vc3RpYyBhbmQgbW9uaXRvcmluZyBpbnRlcmZhY2VzLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBtZW50YWwgbWFwIG9mIHRoZSBtb2R1bGUncyBwdWJsaWMgZW50cnkgcG9pbnRzIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGRpYWdub3N0aWMgZmFjaWxpdGllcyBpdCBleHBvc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzc5LCJPdXRwdXRUb2tlbnMiOjY2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MTEuNTkwOTkxMzYxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTgxMTUwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL2RpYWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MTEuNjQ2ODE2Mzg4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTExNzUxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipRdWljayBhbmQgRGlydHkgQ29kZSBJbnNwZWN0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlIHF1aWNrbHkuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgbGlrZWx5IHNjZW5hcmlvLCBpcyB0byBieXBhc3MgYW55IGNvbXBsZXggYW5hbHlzaXMgaW5pdGlhbGx5LiBJJ20gZ29pbmcgdG8gbGVhbiBvbiB0aGUgdHJpZWQgYW5kIHRydWUgbWV0aG9kczoganVzdCAqcmVhZCogdGhlIGZpbGUgZGlyZWN0bHkuIFRoYXQncyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGZhc3QgYXNzZXNzbWVudC4gSWYgdGhhdCBwcm92ZXMgdG9vIHNsb3csIG9yIEkgbmVlZCB0byBuYXJyb3cgdGhpbmdzIGRvd24sIEknbGwgc3dpdGNoIG92ZXIgdG8gc29tZXRoaW5nIG1vcmUgZWZmaWNpZW50LCBzdWNoIGFzIGBncmVwYC4gSSdkIGltbWVkaWF0ZWx5IHRhcmdldCBzcGVjaWZpYyBwYXR0ZXJucywgbGlrZSBsaW5lcyBzdGFydGluZyB3aXRoIGBec3RhdGljYCBvciBgXmludGAsIGV0Yy4gSSdsbCBmb2N1cyBvbiB0aGVzZSB0eXBlcyBvZiBpbmRpY2F0b3JzIHRvIHF1aWNrbHkgZ2V0IGEgc2Vuc2Ugb2YgdGhlIGNvZGViYXNlJ3Mgc3RydWN0dXJlIGFuZCBrZXkgZWxlbWVudHMgd2l0aG91dCBkaWdnaW5nIGludG8gYW55dGhpbmcgdG9vIGNvbXBsaWNhdGVkIHJpZ2h0IG9mZiB0aGUgYmF0LiBJdCdzIGFib3V0IGdldHRpbmcgYSBoaWdoLWxldmVsIHZpZXcgKmZhc3QqLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDYwLCJPdXRwdXRUb2tlbnMiOjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MTUuNzk3OTk0NDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTk4MjAxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNToxNS45MDM5ODE1NjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTY2MTg4NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL2RpYWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MTYuMDA5NjUwNzI3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjI5NDk3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdW5jdGlvbiBEZWZpbml0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIGRlZmluZWQgaW4gdGhlIGNvZGUuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGV5J2xsIGJlIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW50YCBvciBgc3RhdGljIHZvaWRgLCBsaWtlbHkgd2l0aGluIHRoZSBzb3VyY2UgZmlsZS4gSXQncyBhIGNvbW1vbiBwYXR0ZXJuLiBUbyBiZSB0aG9yb3VnaCwgSSBzaG91bGQgYWxzbyBjaGVjayBmb3IgYGludGAgYW5kIGB2b2lkYCBkZWNsYXJhdGlvbnMgdG9vLCBqdXN0IGluIGNhc2UgdGhleSdyZSBub3Qgc3RhdGljIG9yIGRlY2xhcmVkIGVsc2V3aGVyZS4gU28sIEknbGwgcnVuIGEgcXVpY2sgYGdyZXBgIHdpdGggdGhvc2UgcGF0dGVybnM6IGBec3RhdGljIGludCBgLCBgXnN0YXRpYyB2b2lkIGAsIGBeaW50IGAsIGFuZCBgXnZvaWQgYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHBvdGVudGlhbCBmdW5jdGlvbiBzaWduYXR1cmVzIEknbSBkZWFsaW5nIHdpdGguIFRoaXMgc2hvdWxkIGhlbHAgdG8gcmFwaWRseSB1bmRlcnN0YW5kIGhvdyB0aGUgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCwgd2hldGhlciB0aGV5IGhhdmUgcmV0dXJuIHR5cGVzLCBhbmQgdGhlaXIgc2NvcGUgd2l0aGluIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2MCwiT3V0cHV0VG9rZW5zIjo2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNToxOS41MzI2MDMxNjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDg2NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgaW50IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9kaWFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvZGlhZy5jPTI2PXN0YXRpYyB2b2lkIGluZXRfZGlhZ19tc2dfc2N0cGFzb2NfZmlsbChzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYy02Ni1cXG5uZXQvc2N0cC9kaWFnLmM6Njc6c3RhdGljIGludCBpbmV0X2RpYWdfbXNnX3NjdHBsYWRkcnNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY3RwL2RpYWcuYy02OC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqYWRkcmVzc19saXN0KVxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTEwMy1cXG5uZXQvc2N0cC9kaWFnLmM6MTA0OnN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY3RwL2RpYWcuYy0xMDUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuLS1cXG5uZXQvc2N0cC9kaWFnLmMtMTMyLS8qIHNjdHAgYXNvYy9lcCBmaWxsKi9cXG5uZXQvc2N0cC9kaWFnLmM6MTMzOnN0YXRpYyBpbnQgaW5ldF9zY3RwX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbm5ldC9zY3RwL2RpYWcuYy0xMzQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2N0cC9kaWFnLmM9MjQwPXN0YXRpYyBzaXplX3QgaW5ldF9hc3NvY19hdHRyX3NpemUoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTI1OS1cXG5uZXQvc2N0cC9kaWFnLmM6MjYwOnN0YXRpYyBpbnQgc2N0cF9zb2NrX2R1bXBfb25lKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0c3AsIHZvaWQgKnApXFxubmV0L3NjdHAvZGlhZy5jLTI2MS17XFxuLS1cXG5uZXQvc2N0cC9kaWFnLmMtMzA0LVxcbm5ldC9zY3RwL2RpYWcuYzozMDU6c3RhdGljIGludCBzY3RwX3NvY2tfZHVtcChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHNwLCB2b2lkICpwKVxcbm5ldC9zY3RwL2RpYWcuYy0zMDYte1xcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTM1OS1cXG5uZXQvc2N0cC9kaWFnLmM6MzYwOnN0YXRpYyBpbnQgc2N0cF9zb2NrX2ZpbHRlcihzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHNwLCB2b2lkICpwKVxcbm5ldC9zY3RwL2RpYWcuYy0zNjEte1xcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTM3NS1cXG5uZXQvc2N0cC9kaWFnLmM6Mzc2OnN0YXRpYyBpbnQgc2N0cF9lcF9kdW1wKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwgdm9pZCAqcClcXG5uZXQvc2N0cC9kaWFnLmMtMzc3LXtcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz00MjM9c3RhdGljIHZvaWQgc2N0cF9kaWFnX2dldF9pbmZvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsXFxuLS1cXG5uZXQvc2N0cC9kaWFnLmMtNDM4LVxcbm5ldC9zY3RwL2RpYWcuYzo0Mzk6c3RhdGljIGludCBzY3RwX2RpYWdfZHVtcF9vbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbm5ldC9zY3RwL2RpYWcuYy00NDAtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnJlcSlcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz01Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciBzY3RwX2RpYWdfaGFuZGxlciA9IHtcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYy01MzYtXFxubmV0L3NjdHAvZGlhZy5jOjUzNzpzdGF0aWMgaW50IF9faW5pdCBzY3RwX2RpYWdfaW5pdCh2b2lkKVxcbm5ldC9zY3RwL2RpYWcuYy01Mzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNToxOS42MjI2OTQ0MjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NTk0NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgdm9pZCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL2RpYWcuYy0yMS1cXG5uZXQvc2N0cC9kaWFnLmM6MjI6c3RhdGljIHZvaWQgc2N0cF9kaWFnX2dldF9pbmZvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsXFxubmV0L3NjdHAvZGlhZy5jLTIzLVxcdFxcdFxcdCAgICAgICB2b2lkICppbmZvKTtcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYy0yNS0vKiBkZWZpbmUgc29tZSBmdW5jdGlvbnMgdG8gbWFrZSBhc29jL2VwIGZpbGwgbG9vayBjbGVhbiAqL1xcbm5ldC9zY3RwL2RpYWcuYzoyNjpzdGF0aWMgdm9pZCBpbmV0X2RpYWdfbXNnX3NjdHBhc29jX2ZpbGwoc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsXFxubmV0L3NjdHAvZGlhZy5jLTI3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz0zNzY9c3RhdGljIGludCBzY3RwX2VwX2R1bXAoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCB2b2lkICpwKVxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTQyMi0vKiBkZWZpbmUgdGhlIGZ1bmN0aW9ucyBmb3Igc2N0cF9kaWFnX2hhbmRsZXIqL1xcbm5ldC9zY3RwL2RpYWcuYzo0MjM6c3RhdGljIHZvaWQgc2N0cF9kaWFnX2dldF9pbmZvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsXFxubmV0L3NjdHAvZGlhZy5jLTQyNC1cXHRcXHRcXHQgICAgICAgdm9pZCAqaW5mbylcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz00Mzk9c3RhdGljIGludCBzY3RwX2RpYWdfZHVtcF9vbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTQ3Ny1cXG5uZXQvc2N0cC9kaWFnLmM6NDc4OnN0YXRpYyB2b2lkIHNjdHBfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG5uZXQvc2N0cC9kaWFnLmMtNDc5LVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyKVxcbi0tXFxubmV0L3NjdHAvZGlhZy5jPTUzNz1zdGF0aWMgaW50IF9faW5pdCBzY3RwX2RpYWdfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTU0MS1cXG5uZXQvc2N0cC9kaWFnLmM6NTQyOnN0YXRpYyB2b2lkIF9fZXhpdCBzY3RwX2RpYWdfZXhpdCh2b2lkKVxcbm5ldC9zY3RwL2RpYWcuYy01NDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNToxOS43MjIyOTc1MjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3OTA0NDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNDVFAgRGlhZ25vc3RpYyBIYW5kbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBTQ1RQIGRpYWdub3N0aWMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGUgZnVuY3Rpb24gcmVnaXN0cmF0aW9uLiBJdCAqbG9va3MqIGxpa2UgYWxsIHRoZSBmdW5jdGlvbnMgbWlnaHQgYmUgc3RhdGljLCByaWdodD8gVGhleSdyZSByZWdpc3RlcmVkIHRocm91Z2ggYGluZXRfZGlhZ19yZWdpc3RlcihcdTAwMjZzY3RwX2RpYWdfaGFuZGxlcilgLCBhbmQgaW5pdGlhbGx5LCBJIGFzc3VtZWQgdGhhdCBpbXBsaWVkIHRoZXkgd2VyZSBhbGwgc3RhdGljLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLlxuXG5Ob3cgSSdtIHNlZWluZyB0aGF0IGBzY3RwX2RpYWdfZHVtcGAgYW5kIGBzY3RwX2RpYWdfZHVtcF9vbmVgICphcmUqIGluZGVlZCBzdGF0aWMuIEJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogdGhleSdyZSBhc3NpZ25lZCB0byBgc2N0cF9kaWFnX2hhbmRsZXIuZHVtcGAgYW5kIGBzY3RwX2RpYWdfaGFuZGxlci5kdW1wX29uZWAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gaXMgaGFwcGVuaW5nLlxuXG5BbHJpZ2h0LCBzbyBub3cgbXkgZm9jdXMgaXMgY2xlYXIuIFRvIHJlYWxseSB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgc2N0cF9kaWFnX2hhbmRsZXJgIHN0cnVjdHVyZSBpdHNlbGYuIEl0J3MgdGhlIGtleSB0byB1bmxvY2tpbmcgdGhpcyB3aG9sZSBkaWFnbm9zdGljIG1lY2hhbmlzbS4gTGV0IG1lIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MjQuMDAxMzQ0ODExWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1OTAzNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9kaWFnX2hhbmRsZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL2RpYWcuYz0zNzY9c3RhdGljIGludCBzY3RwX2VwX2R1bXAoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCB2b2lkICpwKVxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTQyMS1cXG5uZXQvc2N0cC9kaWFnLmM6NDIyOi8qIGRlZmluZSB0aGUgZnVuY3Rpb25zIGZvciBzY3RwX2RpYWdfaGFuZGxlciovXFxubmV0L3NjdHAvZGlhZy5jLTQyMy1zdGF0aWMgdm9pZCBzY3RwX2RpYWdfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz00Nzg9c3RhdGljIHZvaWQgc2N0cF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTUyNy1cXG5uZXQvc2N0cC9kaWFnLmM6NTI4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgc2N0cF9kaWFnX2hhbmRsZXIgPSB7XFxubmV0L3NjdHAvZGlhZy5jLTUyOS1cXHQub3duZXJcXHRcXHQgPSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz01Mzc9c3RhdGljIGludCBfX2luaXQgc2N0cF9kaWFnX2luaXQodm9pZClcXG5uZXQvc2N0cC9kaWFnLmMtNTM4LXtcXG5uZXQvc2N0cC9kaWFnLmM6NTM5OlxcdHJldHVybiBpbmV0X2RpYWdfcmVnaXN0ZXIoXFx1MDAyNnNjdHBfZGlhZ19oYW5kbGVyKTtcXG5uZXQvc2N0cC9kaWFnLmMtNTQwLX1cXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz01NDI9c3RhdGljIHZvaWQgX19leGl0IHNjdHBfZGlhZ19leGl0KHZvaWQpXFxubmV0L3NjdHAvZGlhZy5jLTU0My17XFxubmV0L3NjdHAvZGlhZy5jOjU0NDpcXHRpbmV0X2RpYWdfdW5yZWdpc3RlcihcXHUwMDI2c2N0cF9kaWFnX2hhbmRsZXIpO1xcbm5ldC9zY3RwL2RpYWcuYy01NDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNToyNC4xMTA5Mzk5OTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc4Njc4NzIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBTQ1RQIERpYWdub3N0aWNzIGZvciBFZmZlY3RpdmUgQ292ZXJhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGJlc3QgdG8gaW1wcm92ZSBjb3ZlcmFnZSBmb3IgU0NUUCBkaWFnbm9zdGljcy4gU2luY2UgYHNjdHBfZGlhZ19kdW1wYCBhbmQgYHNjdHBfZGlhZ19kdW1wX29uZWAgYXJlIHN0YXRpYywgdGhlc2Ugc2hvdWxkIGFic29sdXRlbHkgYmUgdGhlIHByaW1hcnkgZm9jdXMgc3ltYm9scy4gSSBhbHNvIG5lZWQgdG8gaW5jbHVkZSBgaW5ldF9zY3RwX2RpYWdfZmlsbGAuIEknbSByZW1pbmRpbmcgbXlzZWxmIHRoYXQgc3l6a2FsbGVyIGNhbiByZXNvbHZlIHN0YXRpYyBzeW1ib2xzIGZvciBjb3ZlcmFnZSwgYnV0IGZvciB0cnVlIGZvY3VzLCBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBub24taW5saW5lZCBzeW1ib2xzLiBgc2N0cF9kaWFnX2R1bXBgIGFuZCBgc2N0cF9kaWFnX2R1bXBfb25lYCBhcmUgZGVmaW5pdGVseSBub3QgaW5saW5lZCBiZWNhdXNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgZXhwbGljaXRseSB0YWtlbi5cblxuTm93LCBsZXQncyBzZWUgYWJvdXQgYGluZXRfc2N0cF9kaWFnX2ZpbGxgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQncyBub3QgaW5saW5lZCwgc2luY2UgSSdtIHNlZWluZyBpdCBjYWxsZWQgZnJvbSBgc2N0cF9zb2NrX2R1bXBfb25lYCwgYHNjdHBfc29ja19kdW1wYCwgYW5kIGBzY3RwX2VwX2R1bXBgLiBCYXNlZCBvbiBpdHMgc2l6ZSBhbmQgdGhlIG11bHRpcGxlIGNhbGwgc2l0ZXMsIGl0J3MgbGlrZWx5IG5vdCBpbmxpbmVkLlxuXG5Pa2F5LCBsZXQgbWUgY29uZmlybSB0aGF0IGBzY3RwX2RpYWdfZHVtcGAgYW5kIGBzY3RwX2RpYWdfZHVtcF9vbmVgIGFyZSBhY3R1YWxseSB0aGUgbWFpbiBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgYG5ldC9zY3RwL2RpYWcuY2AgZm9yIHRob3NlIHN5bWJvbHMuIFllcywgY29uZmlybWVkLiBUaG9zZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHRoZSBTQ1RQIGRpYWdub3N0aWMgZnVuY3Rpb25zLlxuXG5Ob3csIGZvciB0aGUgY29uZmlncy4gSSBrbm93IEkgbmVlZCBgSVBfU0NUUGAgYW5kIGBJTkVUX1NDVFBfRElBR2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgYElORVRfRElBR2AgaXMgcmVxdWlyZWQuIEkga25vdyBpdCdzIHVzdWFsbHkgZW5hYmxlZC4gWWVzLCBpdCdzIGEgZGVwZW5kZW5jeSBvZiBgSU5FVF9TQ1RQX0RJQUdgLiBJIHNob3VsZCBpbmNsdWRlIGl0LlxuXG5IYW5nIG9uLiBJJ20ganVzdCBtYWtpbmcgc3VyZS4gSXMgYElORVRfRElBR2AgYSBtZW51Y29uZmlnIG9yIGNvbmZpZyBpdHNlbGY/IEkgc2hvdWxkIGNoZWNrIGBuZXQvaXB2NC9LY29uZmlnYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODM5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjI1OjMwLjg5NzczMDY1MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExOTQ3MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUX0RJQUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NDE5PWNvbmZpZyBJTkVUX1RVTk5FTFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MjItXFxubmV0L2lwdjQvS2NvbmZpZzo0MjM6Y29uZmlnIElORVRfRElBR1xcbm5ldC9pcHY0L0tjb25maWctNDI0LVxcdHRyaXN0YXRlIFxcXCJJTkVUOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTQ0Nz1jb25maWcgSU5FVF9SQVdfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00NTQtXFxubmV0L2lwdjQvS2NvbmZpZzo0NTU6Y29uZmlnIElORVRfRElBR19ERVNUUk9ZXFxubmV0L2lwdjQvS2NvbmZpZy00NTYtXFx0Ym9vbCBcXFwiSU5FVDogYWxsb3cgcHJpdmlsZWdlZCBwcm9jZXNzIHRvIGFkbWluaXN0cmF0aXZlbHkgY2xvc2Ugc29ja2V0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MzEuMDA5NjgyNTc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NjY0MTM0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0NUUCBEaWFnbm9zdGljIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIFNDVFAgZGlhZ25vc3RpY3MsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgbmV0bGluayBtZXNzYWdlcy4gUmlnaHQsIGBJTkVUX0RJQUdgIGlzIGRlZmluaXRlbHkgYSBjb3JlIGNvbmZpZ3VyYXRpb24gaXRlbSBoZXJlLiBBbmQgdG8gZW5hYmxlIHRoaXMgc3BlY2lmaWMgZGlhZ25vc3RpYyBmdW5jdGlvbmFsaXR5LCBJIG5lZWQgdG8gYmUgc3VyZSBgSVBfU0NUUGAsIGBJTkVUX1NDVFBfRElBR2AsIGFuZCBgSU5FVF9ESUFHYCBhcmUgYWxsIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuXG5cblRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgYHNjdHBfZGlhZ19kdW1wYCwgYHNjdHBfZGlhZ19kdW1wX29uZWAsIGFuZCBgaW5ldF9zY3RwX2RpYWdfZmlsbGAg4oCTIHRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIGhhbmRsaW5nIHRoZSBkYXRhIGNvbGxlY3Rpb24gYW5kIGZvcm1hdHRpbmcgZm9yIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2VzLlxuXG5UaGlzIHBhdGNoLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgU0NUUCBkaWFnbm9zdGljIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0J3Mgd29ydGggZnV6emluZyB0byBleHBsb3JlLCBwb3RlbnRpYWxseSBJIGNhbiBmaW5kIG90aGVyIGFyZWFzLlxuXG5Ob3csIGxldCdzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBjb2RlIGZpeCBpdHNlbGY6XG5cbmBgYGNcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxhZGRyLCBhZGRyZXNzX2xpc3QsIGxpc3QpIHtcbi1cdFx0bWVtY3B5KGluZm8sIFx1MDAyNmxhZGRyLVx1MDAzZWEsIHNpemVvZihsYWRkci1cdTAwM2VhKSk7XG4tXHRcdG1lbXNldChpbmZvICsgc2l6ZW9mKGxhZGRyLVx1MDAzZWEpLCAwLCBhZGRybGVuIC0gc2l6ZW9mKGxhZGRyLVx1MDAzZWEpKTtcbitcdFx0c2l6ZV90IGNvcHlfbGVuID0gbGFkZHItXHUwMDNlYS5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCA/XG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIDpcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpO1xuK1xuK1x0XHRtZW1zZXQoaW5mbywgMCwgYWRkcmxlbik7XG4rXHRcdG1lbWNweShpbmZvLCBcdTAwMjZsYWRkci1cdTAwM2VhLCBjb3B5X2xlbik7XG4gXHRcdGluZm8gKz0gYWRkcmxlbjtcbmBgYFxuXG5BaCwgeWVzLCBJIHNlZSBpdC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGRvaW5nIGEgYG1lbWNweWAgb2YgdGhlIHNvY2tldCBhZGRyZXNzIGFuZCB0aGVuIHplcm9pbmcgb3V0IHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gYGluZm9gLiBIb3dldmVyLCBpdCB3YXMgYXNzdW1pbmcgYSBmaXhlZCBzaXplIGZvciB0aGUgYWRkcmVzcyAoYHNpemVvZihsYWRkci1cdTAwM2VhKWApLiBUaGUgZml4IGNsZXZlcmx5IGNhbGN1bGF0ZXMgdGhlIGNvcnJlY3QgYGNvcHlfbGVuYCBiYXNlZCBvbiB0aGUgYWRkcmVzcyBmYW1pbHkgKElQdjQgb3IgSVB2NikgYW5kIHVzZXMgdGhhdCB0byBjb250cm9sIHRoZSBhbW91bnQgb2YgbWVtb3J5IGNvcGllZC4gQ3J1Y2lhbGx5LCB0aGUgY29kZSBub3cgemVyb2VzIG91dCB0aGUgKmVudGlyZSogYGFkZHJsZW5gIHJlZ2lvbiBmaXJzdCBiZWZvcmUgY29weWluZy4gVGhhdCBlbGltaW5hdGVzIHRoZSByaXNrIG9mIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciBwYXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgZ29vZC5cblxuSSdtIGNvbmZpZGVudCB0aGlzIGlzIGEgdmFsaWQgYW5kIGltcG9ydGFudCBmaXguIEknbGwgZmxhZyB0aGlzIGFzIHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODAxLCJPdXRwdXRUb2tlbnMiOjEzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNTozNy42NzYwOTk0NTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYxNjg0ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIixcbiAgICBcIklORVRfU0NUUF9ESUFHXCIsXG4gICAgXCJJTkVUX0RJQUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX2RpYWdfZHVtcFwiLFxuICAgIFwic2N0cF9kaWFnX2R1bXBfb25lXCIsXG4gICAgXCJpbmV0X3NjdHBfZGlhZ19maWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay9vdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBjb3B5aW5nIFNDVFAgc29ja2V0IGFkZHJlc3NlcyB0byB1c2Vyc3BhY2UgdmlhIHRoZSBuZXRsaW5rIGRpYWcgaW50ZXJmYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIixcbiAgICBcIklORVRfU0NUUF9ESUFHXCIsXG4gICAgXCJJTkVUX0RJQUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX2RpYWdfZHVtcFwiLFxuICAgIFwic2N0cF9kaWFnX2R1bXBfb25lXCIsXG4gICAgXCJpbmV0X3NjdHBfZGlhZ19maWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay9vdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBjb3B5aW5nIFNDVFAgc29ja2V0IGFkZHJlc3NlcyB0byB1c2Vyc3BhY2UgdmlhIHRoZSBuZXRsaW5rIGRpYWcgaW50ZXJmYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6j52p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 07:57:41 +0000 UTC FinishedAt: 2026-07-31 08:25:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e366c15e1610ef11d0717ecd875ae63050282676", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET_SCTP_DIAG", "INET_DIAG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e366c15e1610ef11d0717ecd875ae63050282676", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET_SCTP_DIAG", "INET_DIAG" ], "series_id": "49551097-9ef8-45e4-bd30-de739b655142" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_diag_dump", "sctp_diag_dump_one", "inet_sctp_diag_fill" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVF9TQ1RQX0RJQUcmIzM0OywKICAgICYjMzQ7SU5FVF9ESUFHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF9kaWFnX2R1bXAmIzM0OywKICAgICYjMzQ7c2N0cF9kaWFnX2R1bXBfb25lJiMzNDssCiAgICAmIzM0O2luZXRfc2N0cF9kaWFnX2ZpbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay9vdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBjb3B5aW5nIFNDVFAgc29ja2V0IGFkZHJlc3NlcyB0byB1c2Vyc3BhY2UgdmlhIHRoZSBuZXRsaW5rIGRpYWcgaW50ZXJmYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODhlZDRjZTNjN2FmMzM3OTgwYWYyM2M1OWJmNWQ5YjU3ODg5M2NiYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDA4OjI0OjQwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2RpYWcuYyBiL25ldC9zY3RwL2RpYWcuY1xuaW5kZXggZDc1OGY1YzNlMDZlNS4uMzZkNzE4MGVlMDQ3ZCAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL2RpYWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvZGlhZy5jXG5AQCAtODUsOCAmIzQzOzg1LDEyIEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGluZm8gPSBubGFfZGF0YShhdHRyKTtcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxhZGRyLCBhZGRyZXNzX2xpc3QsIGxpc3QpIHtcbi1cdFx0bWVtY3B5KGluZm8sIFx1MDAyNmxhZGRyLVx1MDAzZWEsIHNpemVvZihsYWRkci1cdTAwM2VhKSk7XG4tXHRcdG1lbXNldChpbmZvICYjNDM7IHNpemVvZihsYWRkci1cdTAwM2VhKSwgMCwgYWRkcmxlbiAtIHNpemVvZihsYWRkci1cdTAwM2VhKSk7XG4mIzQzO1x0XHRzaXplX3QgY29weV9sZW4gPSBsYWRkci1cdTAwM2VhLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUID9cbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIDpcbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQoaW5mbywgMCwgYWRkcmxlbik7XG4mIzQzO1x0XHRtZW1jcHkoaW5mbywgXHUwMDI2bGFkZHItXHUwMDNlYSwgY29weV9sZW4pO1xuIFx0XHRpbmZvICYjNDM7PSBhZGRybGVuO1xuIFxuIFx0XHRpZiAoIS0tYWRkcmNudClcbkBAIC0xMTMsOSAmIzQzOzExNywxMiBAQCBzdGF0aWMgaW50IGluZXRfZGlhZ19tc2dfc2N0cGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGluZm8gPSBubGFfZGF0YShhdHRyKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZnJvbSwgXHUwMDI2YXNvYy1cdTAwM2VwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsXG4gXHRcdFx0ICAgIHRyYW5zcG9ydHMpIHtcbi1cdFx0bWVtY3B5KGluZm8sIFx1MDAyNmZyb20tXHUwMDNlaXBhZGRyLCBzaXplb2YoZnJvbS1cdTAwM2VpcGFkZHIpKTtcbi1cdFx0bWVtc2V0KGluZm8gJiM0Mzsgc2l6ZW9mKGZyb20tXHUwMDNlaXBhZGRyKSwgMCxcbi1cdFx0ICAgICAgIGFkZHJsZW4gLSBzaXplb2YoZnJvbS1cdTAwM2VpcGFkZHIpKTtcbiYjNDM7XHRcdHNpemVfdCBjb3B5X2xlbiA9IGZyb20tXHUwMDNlaXBhZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUID9cbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIDpcbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQoaW5mbywgMCwgYWRkcmxlbik7XG4mIzQzO1x0XHRtZW1jcHkoaW5mbywgXHUwMDI2ZnJvbS1cdTAwM2VpcGFkZHIsIGNvcHlfbGVuKTtcbiBcdFx0aW5mbyAmIzQzOz0gYWRkcmxlbjtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7LAogICAgJiMzNDtJTkVUX1NDVFBfRElBRyYjMzQ7LAogICAgJiMzNDtJTkVUX0RJQUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX2RpYWdfZHVtcCYjMzQ7LAogICAgJiMzNDtzY3RwX2RpYWdfZHVtcF9vbmUmIzM0OywKICAgICYjMzQ7aW5ldF9zY3RwX2RpYWdfZmlsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrL291dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGNvcHlpbmcgU0NUUCBzb2NrZXQgYWRkcmVzc2VzIHRvIHVzZXJzcGFjZSB2aWEgdGhlIG5ldGxpbmsgZGlhZyBpbnRlcmZhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OGVkNGNlM2M3YWYzMzc5ODBhZjIzYzU5YmY1ZDliNTc4ODkzY2JhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMDg6MjQ6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9kaWFnLmMgYi9uZXQvc2N0cC9kaWFnLmMKaW5kZXggZDc1OGY1YzNlMDZlNS4uMzZkNzE4MGVlMDQ3ZCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvZGlhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL2RpYWcuYwpAQCAtODUsOCAmIzQzOzg1LDEyIEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpbmZvID0gbmxhX2RhdGEoYXR0cik7CiAJcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxhZGRyLCBhZGRyZXNzX2xpc3QsIGxpc3QpIHsKLQkJbWVtY3B5KGluZm8sICZhbXA7bGFkZHItJmd0O2EsIHNpemVvZihsYWRkci0mZ3Q7YSkpOwotCQltZW1zZXQoaW5mbyAmIzQzOyBzaXplb2YobGFkZHItJmd0O2EpLCAwLCBhZGRybGVuIC0gc2l6ZW9mKGxhZGRyLSZndDthKSk7CiYjNDM7CQlzaXplX3QgY29weV9sZW4gPSBsYWRkci0mZ3Q7YS5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCA/CiYjNDM7CQkJCSAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgOgomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKJiM0MzsKJiM0MzsJCW1lbXNldChpbmZvLCAwLCBhZGRybGVuKTsKJiM0MzsJCW1lbWNweShpbmZvLCAmYW1wO2xhZGRyLSZndDthLCBjb3B5X2xlbik7CiAJCWluZm8gJiM0Mzs9IGFkZHJsZW47CiAKIAkJaWYgKCEtLWFkZHJjbnQpCkBAIC0xMTMsOSAmIzQzOzExNywxMiBAQCBzdGF0aWMgaW50IGluZXRfZGlhZ19tc2dfc2N0cGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpbmZvID0gbmxhX2RhdGEoYXR0cik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmcm9tLCAmYW1wO2Fzb2MtJmd0O3BlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwKIAkJCSAgICB0cmFuc3BvcnRzKSB7Ci0JCW1lbWNweShpbmZvLCAmYW1wO2Zyb20tJmd0O2lwYWRkciwgc2l6ZW9mKGZyb20tJmd0O2lwYWRkcikpOwotCQltZW1zZXQoaW5mbyAmIzQzOyBzaXplb2YoZnJvbS0mZ3Q7aXBhZGRyKSwgMCwKLQkJICAgICAgIGFkZHJsZW4gLSBzaXplb2YoZnJvbS0mZ3Q7aXBhZGRyKSk7CiYjNDM7CQlzaXplX3QgY29weV9sZW4gPSBmcm9tLSZndDtpcGFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQgPwomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIDoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CiYjNDM7CiYjNDM7CQltZW1zZXQoaW5mbywgMCwgYWRkcmxlbik7CiYjNDM7CQltZW1jcHkoaW5mbywgJmFtcDtmcm9tLSZndDtpcGFkZHIsIGNvcHlfbGVuKTsKIAkJaW5mbyAmIzQzOz0gYWRkcmxlbjsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4OAoJCQkJCQkJb3V0cHV0OiA4NAoJCQkJCQkJdGhvdWdodHM6IDE1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTQ1RQIERpYWdub3N0aWMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIGBuZXQvc2N0cC9kaWFnLmNgLiBTb3VuZHMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIHNvbWV0aGluZyBpbiB0aGUgU0NUUCBkaWFnbm9zdGljIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IHdpdGggaG93IGxvY2FsIGFkZHJlc3NlcyAoYGxhZGRyYCkgYW5kIGZyb20gYWRkcmVzc2VzIChgZnJvbWApIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlcy4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGxgIGFuZCBgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbGAuIEZyb20gdGhlIGRlc2NyaXB0aW9uLCBpdCBhcHBlYXJzIHRvIGJlIGEgbWVtb3J5IHNhZmV0eSBmaXgg4oCTIGEgcG90ZW50aWFsIGxlYWsgb3IgaW5lZmZpY2llbnQgY29weSBzaXR1YXRpb24uIEFwcGFyZW50bHksIHdlIHdlcmUgY29weWluZyB0aGUgKmVudGlyZSogYHVuaW9uYCBjb250YWluaW5nIHRoZSBhZGRyZXNzLCBpbnN0ZWFkIG9mIGp1c3QgdGhlIHJlbGV2YW50IGBzb2NrYWRkcl9pbmAgb3IgYHNvY2thZGRyX2luNmAgc3RydWN0dXJlLiBUaGF0IGNvdWxkIGRlZmluaXRlbHkgYmUgcHJvYmxlbWF0aWMsIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCB3YXN0aW5nIHNvbWUgY3ljbGVzLiBUaGUgZml4LCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIG5vdyBjb3B5IG9ubHkgdGhlIG5lY2Vzc2FyeSBgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbilgIG9yIGBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNilgIGJhc2VkIG9uIHRoZSBhZGRyZXNzIGZhbWlseS4KCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBjb2RlIG5vdyB0byB2ZXJpZnkgdGhpcyBhbmQgdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBgbmV0L3NjdHAvZGlhZy5jYCBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBJJiMzOTttIGdvaW5nIHRvIGZpcmUgdXAgYGdyZXBwZXJgIOKAkyB0aGF0JiMzOTtzIHRoZSBxdWlja2VzdCB3YXkgdG8gZmluZCB0aGVzZSBmdW5jdGlvbnMgYW5kIHRyYWNlIHRoZWlyIGNhbGxlcnMgdG8gc2VlIGV4YWN0bHkgd2hlcmUgdGhleSYjMzk7cmUgYmVpbmcgdXNlZCBhbmQgaG93IHRoaXMgY2hhbmdlIHdpbGwgaW1wYWN0IHRoZSBsYXJnZXIgZGlhZ25vc3RpYyBmbG93LiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0cyB0byBhcHByZWNpYXRlIHRoZSBmdWxsIGV4dGVudCBvZiB0aGUgY2hhbmdlIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfZGlhZ19tc2dfc2N0cGxhZGRyc19maWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2RpYWcuYz0yNj1zdGF0aWMgdm9pZCBpbmV0X2RpYWdfbXNnX3NjdHBhc29jX2ZpbGwoc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsXG4tLVxubmV0L3NjdHAvZGlhZy5jLTY2LVxubmV0L3NjdHAvZGlhZy5jOjY3OnN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY3RwL2RpYWcuYy02OC1cdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmFkZHJlc3NfbGlzdClcbi0tXG5uZXQvc2N0cC9kaWFnLmM9MTMzPXN0YXRpYyBpbnQgaW5ldF9zY3RwX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbm5ldC9zY3RwL2RpYWcuYy0yMTItXHRcdFx0IDogXHUwMDI2ZXAtXHUwMDNlYmFzZS5iaW5kX2FkZHIuYWRkcmVzc19saXN0O1xubmV0L3NjdHAvZGlhZy5jOjIxMzpcdGlmIChpbmV0X2RpYWdfbXNnX3NjdHBsYWRkcnNfZmlsbChza2IsIGFkZHJfbGlzdCkpXG5uZXQvc2N0cC9kaWFnLmMtMjE0LVx0XHRnb3RvIGVycm91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0X2RpYWdfbXNnX3NjdHBhZGRyc19maWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2RpYWcuYz02Nz1zdGF0aWMgaW50IGluZXRfZGlhZ19tc2dfc2N0cGxhZGRyc19maWxsKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjdHAvZGlhZy5jLTEwMy1cbm5ldC9zY3RwL2RpYWcuYzoxMDQ6c3RhdGljIGludCBpbmV0X2RpYWdfbXNnX3NjdHBhZGRyc19maWxsKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2N0cC9kaWFnLmMtMTA1LVx0XHRcdFx0XHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbi0tXG5uZXQvc2N0cC9kaWFnLmM9MTMzPXN0YXRpYyBpbnQgaW5ldF9zY3RwX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbm5ldC9zY3RwL2RpYWcuYy0yMTktXG5uZXQvc2N0cC9kaWFnLmM6MjIwOlx0aWYgKGFzb2MgXHUwMDI2XHUwMDI2IGluZXRfZGlhZ19tc2dfc2N0cGFkZHJzX2ZpbGwoc2tiLCBhc29jKSlcbm5ldC9zY3RwL2RpYWcuYy0yMjEtXHRcdGdvdG8gZXJyb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU0NUUCBEaWFnbm9zdGljIEludGVyZmFjZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgU0NUUCBkaWFnbm9zdGljIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IHRoZSBuZXRsaW5rIGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLiBJIHNlZSB0d28ga2V5IGZ1bmN0aW9ucyBoZXJlOiBgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGxgIGFuZCBgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbGAuIFRoZXNlIGFyZSB1bHRpbWF0ZWx5IGNhbGxlZCBieSBgaW5ldF9zY3RwX2RpYWdfZmlsbGAuIFRoaXMgZnVuY3Rpb24sIGluIHR1cm4sIGdldHMgaW52b2tlZCBieSBgc2N0cF9kaWFnX2R1bXBfb25lYCBhbmQgYHNjdHBfZGlhZ19kdW1wYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGVsZW1lbnRzIGZvciBkdW1waW5nIHRoZSBTQ1RQIGRpYWdub3N0aWMgaW5mb3JtYXRpb24gb3ZlciB0aGUgbmV0d29yay4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lY2Vzc2FyeSB0byBlbmFibGUgYW5kIHVzZSB0aGlzIFNDVFAgZGlhZ25vc3RpYyBpbnRlcmZhY2UuIEkgaGF2ZSBhIGh1bmNoIGl0JiMzOTtzIG5vdCBhIGRlZmF1bHQgZW5hYmxlZCBmZWF0dXJlLCBzbyBJIHNob3VsZCBzZWUgd2hhdCBjb25maWcgb3B0aW9ucyBJIG5lZWQgdG8gc2V0IHRvIGFjdHVhbGx5IGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0NUUF9ESUFHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODE1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBTQ1RQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UgbmVlZCB0byBsb29rIGludG8gdGhlIFNDVFAgY29uZmlndXJhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBpbW1lZGlhdGVseSBuYXZpZ2F0ZSB0byB0aGUgYG5ldC9zY3RwL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEl0IGNvbnRhaW5zIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBldmVyeXRoaW5nIGRlZmluZWQgdGhlcmU6IG1vZHVsZXMsIGZlYXR1cmVzLCBwcm9iYWJseSBzb21lIGRlZmF1bHRzLCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbmV0d29ya2luZyBzdWJzeXN0ZW1zLCBhbmQgbWF5YmUgc29tZSBoaW50cyBhYm91dCBwZXJmb3JtYW5jZSB0dW5pbmcuIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSBvZiB3aGF0JiMzOTtzIGNvbmZpZ3VyYWJsZSwgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgY29uc3RyYWludHMgdGhhdCBtaWdodCBiZSByZWxldmFudCBmb3IgYSBzcGVjaWZpYyB1c2UgY2FzZSBJIGhhdmUgaW4gbWluZC4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB0aGUgZW50aXJlIFNDVFAgY29uZmlndXJhdGlvbiBzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTQ1RQX0RJQUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvS2NvbmZpZz02OD1lbmRjaG9pY2Vcbm5ldC9zY3RwL0tjb25maWctNjktXG5uZXQvc2N0cC9LY29uZmlnOjcwOmNvbmZpZyBJTkVUX1NDVFBfRElBR1xubmV0L3NjdHAvS2NvbmZpZy03MS1cdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4tLVxubmV0L3NjdHAvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVBfU0NUUCkgJiM0Mzs9IHNjdHAub1xubmV0L3NjdHAvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfSU5FVF9TQ1RQX0RJQUcpICYjNDM7PSBzY3RwX2RpYWcub1xubmV0L3NjdHAvTWFrZWZpbGUtOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE4NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBTQ1RQIERpYWdub3N0aWMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IFNDVFAgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpcyBlbmFibGVkIGluIHRoaXMgc3lzdGVtLiBGcm9tIHdoYXQgSSYjMzk7dmUgZ2F0aGVyZWQsIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGZvY3VzIG9uIGlzIGBJTkVUX1NDVFBfRElBR2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGl0IHNlZW1zLgoKTmF0dXJhbGx5LCBgSU5FVF9TQ1RQX0RJQUdgIGRlcGVuZHMgb24gYSBjb3VwbGUgb2Ygb3RoZXIgdGhpbmdzIOKAkyBzcGVjaWZpY2FsbHksIGBJTkVUX0RJQUdgIGFuZCBgSVBfU0NUUGAuIEdpdmVuIHRoYXQgdGhlc2UgYXJlIGRlcGVuZGVuY2llcywgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgdHdvIGFyZSBhbHJlYWR5IGVuYWJsZWQgb3IgY29uc2lkZXJlZCB3aGVuIEkgY29uZmlndXJlIGBJTkVUX1NDVFBfRElBR2AuCgpOb3csIHdoZXJlJiMzOTtzIHRoZSBtb3N0IHJlbGlhYmxlIHBsYWNlIHRvIGNvbmZpcm0gdGhlIGRldGFpbHMgYXJvdW5kIGBJUF9TQ1RQYD8gUmlnaHQsIHRoZSBgbmV0L3NjdHAvS2NvbmZpZ2AgZmlsZSBzaG91bGQgaGF2ZSB0aGUgZGVmaW5pdGl2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGF0LiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgdG8gdmVyaWZ5IGl0cyBkZWZpbml0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9ucy4gVGltZSB0byBkZWx2ZSBpbnRvIHRoYXQgS2NvbmZpZyBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfU0NUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnLTUtXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXG5uZXQvc2N0cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgU0NUUCBQcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTYwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlNDVFAgRGlhZ25vc3RpYyBOZXRsaW5rIFBhdGNoIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGBJUF9TQ1RQYCBhbmQgYElORVRfU0NUUF9ESUFHYC4gVGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgbWVtb3J5IGxlYWsgYW5kIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyB3aXRoaW4gU0NUUCBkaWFnbm9zdGljIG5ldGxpbmsgbWVzc2FnZXMuIEZ1bmN0aW9uYWxseSwgaXQgbG9va3Mgc29saWQsIGFuZCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmaXgsIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGxgLCBgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbGAsIGFuZCBgaW5ldF9zY3RwX2RpYWdfZmlsbGAuIFdhaXQgYSBzZWNvbmTigKYgYXJlIGBpbmV0X2RpYWdfbXNnX3NjdHBsYWRkcnNfZmlsbGAgYW5kIGBpbmV0X2RpYWdfbXNnX3NjdHBhZGRyc19maWxsYCBzdGF0aWMgZnVuY3Rpb25zPyBUaGF0IGNvdWxkIHN1Z2dlc3QgdGhleSYjMzk7cmUgaW5saW5lZC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhleSYjMzk7cmUgaW5saW5lZCBiZWNhdXNlIGlmIHNvLCBteSBmdXp6aW5nIGVmZm9ydCBtaWdodCBiZSBiZXR0ZXIgZm9jdXNlZCBlbHNld2hlcmUuIEkgc3VzcGVjdCB0aGV5ICphcmUqIGlubGluZWQgaW50byBgaW5ldF9zY3RwX2RpYWdfZmlsbGAuCgpUbyBrZWVwIHRoaW5ncyBzdHJhaWdodGZvcndhcmQsIEkmIzM5O2xsIGNvbmNlbnRyYXRlIG15IGF0dGVudGlvbiBvbiBgaW5ldF9zY3RwX2RpYWdfZmlsbGAgYWxvbmcgd2l0aCBgc2N0cF9kaWFnX2R1bXBgIGFuZCBgc2N0cF9kaWFnX2R1bXBfb25lYCBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgaW5saW5pbmcuIFRoYXQmIzM5O2xsIGdpdmUgbWUgdGhlIG1vc3QgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9zY3RwX2RpYWdfZmlsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwL2RpYWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9kaWFnLmM9MTA0PXN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY3RwL2RpYWcuYy0xMzItLyogc2N0cCBhc29jL2VwIGZpbGwqL1xubmV0L3NjdHAvZGlhZy5jOjEzMzpzdGF0aWMgaW50IGluZXRfc2N0cF9kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL2RpYWcuYy0xMzQtXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjdHAvZGlhZy5jPTI2MD1zdGF0aWMgaW50IHNjdHBfc29ja19kdW1wX29uZShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHNwLCB2b2lkICpwKVxuLS1cbm5ldC9zY3RwL2RpYWcuYy0yODYtXG5uZXQvc2N0cC9kaWFnLmM6Mjg3Olx0ZXJyID0gaW5ldF9zY3RwX2RpYWdfZmlsbChzaywgYXNzb2MsIHJlcCwgcmVxLCBza191c2VyX25zKE5FVExJTktfQ0Ioc2tiKS5zayksXG5uZXQvc2N0cC9kaWFnLmMtMjg4LVx0XHRcdFx0ICBORVRMSU5LX0NCKHNrYikucG9ydGlkLCBjb21tcC1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuLS1cbm5ldC9zY3RwL2RpYWcuYz0zMDU9c3RhdGljIGludCBzY3RwX3NvY2tfZHVtcChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHNwLCB2b2lkICpwKVxuLS1cbm5ldC9zY3RwL2RpYWcuYy0zMjktXHRcdGlmICghY2ItXHUwMDNlYXJnc1szXSBcdTAwMjZcdTAwMjZcbm5ldC9zY3RwL2RpYWcuYzozMzA6XHRcdCAgICBpbmV0X3NjdHBfZGlhZ19maWxsKHNrLCBOVUxMLCBza2IsIHIsXG5uZXQvc2N0cC9kaWFnLmMtMzMxLVx0XHRcdFx0XHRza191c2VyX25zKE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5zayksXG4tLVxubmV0L3NjdHAvZGlhZy5jLTM0MC1cbm5ldC9zY3RwL2RpYWcuYzozNDE6XHRcdGlmIChpbmV0X3NjdHBfZGlhZ19maWxsKHNrLCBhc3NvYywgc2tiLCByLFxubmV0L3NjdHAvZGlhZy5jLTM0Mi1cdFx0XHRcdFx0c2tfdXNlcl9ucyhORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikuc2spLFxuLS1cbm5ldC9zY3RwL2RpYWcuYz0zNzY9c3RhdGljIGludCBzY3RwX2VwX2R1bXAoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCB2b2lkICpwKVxuLS1cbm5ldC9zY3RwL2RpYWcuYy00MDctXG5uZXQvc2N0cC9kaWFnLmM6NDA4Olx0aWYgKGluZXRfc2N0cF9kaWFnX2ZpbGwoc2ssIE5VTEwsIHNrYiwgcixcbm5ldC9zY3RwL2RpYWcuYy00MDktXHRcdFx0XHRza191c2VyX25zKE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5zayksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NzkKCQkJCQkJCW91dHB1dDogNjYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYG5ldC9zY3RwL2RpYWcuY2AgRnVuY3Rpb24gU2NvcGUqKgoKUmlnaHQsIGBpbmV0X3NjdHBfZGlhZ19maWxsYCBpcyBhbm90aGVyIG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMgZGVjbGFyZWQgc3RhdGljLCBqdXN0IGxpa2UgSSB0aG91Z2h0LiBPa2F5LCB0aW1lIHRvIGdldCBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvc2N0cC9kaWFnLmNgIHNvdXJjZSBjb2RlLCBidXQgdGhpcyB0aW1lIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCAqYXJlbiYjMzk7dCogc3RhdGljLiBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoaWNoIG9mIHRob3NlIGFyZSBleHRlcm5hbGx5IGFjY2Vzc2libGUgYW5kIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgZGlhZ25vc3RpYyBhbmQgbW9uaXRvcmluZyBpbnRlcmZhY2VzLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBtZW50YWwgbWFwIG9mIHRoZSBtb2R1bGUmIzM5O3MgcHVibGljIGVudHJ5IHBvaW50cyBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBkaWFnbm9zdGljIGZhY2lsaXRpZXMgaXQgZXhwb3Nlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA2MAoJCQkJCQkJb3V0cHV0OiA2NAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipRdWljayBhbmQgRGlydHkgQ29kZSBJbnNwZWN0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29kZSBxdWlja2x5LiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGxpa2VseSBzY2VuYXJpbywgaXMgdG8gYnlwYXNzIGFueSBjb21wbGV4IGFuYWx5c2lzIGluaXRpYWxseS4gSSYjMzk7bSBnb2luZyB0byBsZWFuIG9uIHRoZSB0cmllZCBhbmQgdHJ1ZSBtZXRob2RzOiBqdXN0ICpyZWFkKiB0aGUgZmlsZSBkaXJlY3RseS4gVGhhdCYjMzk7cyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGZhc3QgYXNzZXNzbWVudC4gSWYgdGhhdCBwcm92ZXMgdG9vIHNsb3csIG9yIEkgbmVlZCB0byBuYXJyb3cgdGhpbmdzIGRvd24sIEkmIzM5O2xsIHN3aXRjaCBvdmVyIHRvIHNvbWV0aGluZyBtb3JlIGVmZmljaWVudCwgc3VjaCBhcyBgZ3JlcGAuIEkmIzM5O2QgaW1tZWRpYXRlbHkgdGFyZ2V0IHNwZWNpZmljIHBhdHRlcm5zLCBsaWtlIGxpbmVzIHN0YXJ0aW5nIHdpdGggYF5zdGF0aWNgIG9yIGBeaW50YCwgZXRjLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSB0eXBlcyBvZiBpbmRpY2F0b3JzIHRvIHF1aWNrbHkgZ2V0IGEgc2Vuc2Ugb2YgdGhlIGNvZGViYXNlJiMzOTtzIHN0cnVjdHVyZSBhbmQga2V5IGVsZW1lbnRzIHdpdGhvdXQgZGlnZ2luZyBpbnRvIGFueXRoaW5nIHRvbyBjb21wbGljYXRlZCByaWdodCBvZmYgdGhlIGJhdC4gSXQmIzM5O3MgYWJvdXQgZ2V0dGluZyBhIGhpZ2gtbGV2ZWwgdmlldyAqZmFzdCouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC9kaWFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwL2RpYWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjAKCQkJCQkJCW91dHB1dDogNjYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZ1bmN0aW9uIERlZmluaXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSBkZWZpbmVkIGluIHRoZSBjb2RlLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhleSYjMzk7bGwgYmUgZGVjbGFyZWQgYXMgYHN0YXRpYyBpbnRgIG9yIGBzdGF0aWMgdm9pZGAsIGxpa2VseSB3aXRoaW4gdGhlIHNvdXJjZSBmaWxlLiBJdCYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuLiBUbyBiZSB0aG9yb3VnaCwgSSBzaG91bGQgYWxzbyBjaGVjayBmb3IgYGludGAgYW5kIGB2b2lkYCBkZWNsYXJhdGlvbnMgdG9vLCBqdXN0IGluIGNhc2UgdGhleSYjMzk7cmUgbm90IHN0YXRpYyBvciBkZWNsYXJlZCBlbHNld2hlcmUuIFNvLCBJJiMzOTtsbCBydW4gYSBxdWljayBgZ3JlcGAgd2l0aCB0aG9zZSBwYXR0ZXJuczogYF5zdGF0aWMgaW50IGAsIGBec3RhdGljIHZvaWQgYCwgYF5pbnQgYCwgYW5kIGBedm9pZCBgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcG90ZW50aWFsIGZ1bmN0aW9uIHNpZ25hdHVyZXMgSSYjMzk7bSBkZWFsaW5nIHdpdGguIFRoaXMgc2hvdWxkIGhlbHAgdG8gcmFwaWRseSB1bmRlcnN0YW5kIGhvdyB0aGUgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCwgd2hldGhlciB0aGV5IGhhdmUgcmV0dXJuIHR5cGVzLCBhbmQgdGhlaXIgc2NvcGUgd2l0aGluIHRoZSBjb2RlYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBpbnQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2RpYWcuYz0yNj1zdGF0aWMgdm9pZCBpbmV0X2RpYWdfbXNnX3NjdHBhc29jX2ZpbGwoc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsXG4tLVxubmV0L3NjdHAvZGlhZy5jLTY2LVxubmV0L3NjdHAvZGlhZy5jOjY3OnN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY3RwL2RpYWcuYy02OC1cdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmFkZHJlc3NfbGlzdClcbi0tXG5uZXQvc2N0cC9kaWFnLmMtMTAzLVxubmV0L3NjdHAvZGlhZy5jOjEwNDpzdGF0aWMgaW50IGluZXRfZGlhZ19tc2dfc2N0cGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY3RwL2RpYWcuYy0xMDUtXHRcdFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuLS1cbm5ldC9zY3RwL2RpYWcuYy0xMzItLyogc2N0cCBhc29jL2VwIGZpbGwqL1xubmV0L3NjdHAvZGlhZy5jOjEzMzpzdGF0aWMgaW50IGluZXRfc2N0cF9kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL2RpYWcuYy0xMzQtXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjdHAvZGlhZy5jPTI0MD1zdGF0aWMgc2l6ZV90IGluZXRfYXNzb2NfYXR0cl9zaXplKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvc2N0cC9kaWFnLmMtMjU5LVxubmV0L3NjdHAvZGlhZy5jOjI2MDpzdGF0aWMgaW50IHNjdHBfc29ja19kdW1wX29uZShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHNwLCB2b2lkICpwKVxubmV0L3NjdHAvZGlhZy5jLTI2MS17XG4tLVxubmV0L3NjdHAvZGlhZy5jLTMwNC1cbm5ldC9zY3RwL2RpYWcuYzozMDU6c3RhdGljIGludCBzY3RwX3NvY2tfZHVtcChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHNwLCB2b2lkICpwKVxubmV0L3NjdHAvZGlhZy5jLTMwNi17XG4tLVxubmV0L3NjdHAvZGlhZy5jLTM1OS1cbm5ldC9zY3RwL2RpYWcuYzozNjA6c3RhdGljIGludCBzY3RwX3NvY2tfZmlsdGVyKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0c3AsIHZvaWQgKnApXG5uZXQvc2N0cC9kaWFnLmMtMzYxLXtcbi0tXG5uZXQvc2N0cC9kaWFnLmMtMzc1LVxubmV0L3NjdHAvZGlhZy5jOjM3NjpzdGF0aWMgaW50IHNjdHBfZXBfZHVtcChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHZvaWQgKnApXG5uZXQvc2N0cC9kaWFnLmMtMzc3LXtcbi0tXG5uZXQvc2N0cC9kaWFnLmM9NDIzPXN0YXRpYyB2b2lkIHNjdHBfZGlhZ19nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLFxuLS1cbm5ldC9zY3RwL2RpYWcuYy00MzgtXG5uZXQvc2N0cC9kaWFnLmM6NDM5OnN0YXRpYyBpbnQgc2N0cF9kaWFnX2R1bXBfb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbm5ldC9zY3RwL2RpYWcuYy00NDAtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnJlcSlcbi0tXG5uZXQvc2N0cC9kaWFnLmM9NTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgc2N0cF9kaWFnX2hhbmRsZXIgPSB7XG4tLVxubmV0L3NjdHAvZGlhZy5jLTUzNi1cbm5ldC9zY3RwL2RpYWcuYzo1Mzc6c3RhdGljIGludCBfX2luaXQgc2N0cF9kaWFnX2luaXQodm9pZClcbm5ldC9zY3RwL2RpYWcuYy01Mzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIHZvaWQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2RpYWcuYy0yMS1cbm5ldC9zY3RwL2RpYWcuYzoyMjpzdGF0aWMgdm9pZCBzY3RwX2RpYWdfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcbm5ldC9zY3RwL2RpYWcuYy0yMy1cdFx0XHQgICAgICAgdm9pZCAqaW5mbyk7XG4tLVxubmV0L3NjdHAvZGlhZy5jLTI1LS8qIGRlZmluZSBzb21lIGZ1bmN0aW9ucyB0byBtYWtlIGFzb2MvZXAgZmlsbCBsb29rIGNsZWFuICovXG5uZXQvc2N0cC9kaWFnLmM6MjY6c3RhdGljIHZvaWQgaW5ldF9kaWFnX21zZ19zY3RwYXNvY19maWxsKHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLFxubmV0L3NjdHAvZGlhZy5jLTI3LVx0XHRcdFx0XHRzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3NjdHAvZGlhZy5jPTM3Nj1zdGF0aWMgaW50IHNjdHBfZXBfZHVtcChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHZvaWQgKnApXG4tLVxubmV0L3NjdHAvZGlhZy5jLTQyMi0vKiBkZWZpbmUgdGhlIGZ1bmN0aW9ucyBmb3Igc2N0cF9kaWFnX2hhbmRsZXIqL1xubmV0L3NjdHAvZGlhZy5jOjQyMzpzdGF0aWMgdm9pZCBzY3RwX2RpYWdfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcbm5ldC9zY3RwL2RpYWcuYy00MjQtXHRcdFx0ICAgICAgIHZvaWQgKmluZm8pXG4tLVxubmV0L3NjdHAvZGlhZy5jPTQzOT1zdGF0aWMgaW50IHNjdHBfZGlhZ19kdW1wX29uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L3NjdHAvZGlhZy5jLTQ3Ny1cbm5ldC9zY3RwL2RpYWcuYzo0Nzg6c3RhdGljIHZvaWQgc2N0cF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxubmV0L3NjdHAvZGlhZy5jLTQ3OS1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcilcbi0tXG5uZXQvc2N0cC9kaWFnLmM9NTM3PXN0YXRpYyBpbnQgX19pbml0IHNjdHBfZGlhZ19pbml0KHZvaWQpXG4tLVxubmV0L3NjdHAvZGlhZy5jLTU0MS1cbm5ldC9zY3RwL2RpYWcuYzo1NDI6c3RhdGljIHZvaWQgX19leGl0IHNjdHBfZGlhZ19leGl0KHZvaWQpXG5uZXQvc2N0cC9kaWFnLmMtNTQzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNDVFAgRGlhZ25vc3RpYyBIYW5kbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFNDVFAgZGlhZ25vc3RpYyBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGF0IG1lIGlzIHRoZSBmdW5jdGlvbiByZWdpc3RyYXRpb24uIEl0ICpsb29rcyogbGlrZSBhbGwgdGhlIGZ1bmN0aW9ucyBtaWdodCBiZSBzdGF0aWMsIHJpZ2h0PyBUaGV5JiMzOTtyZSByZWdpc3RlcmVkIHRocm91Z2ggYGluZXRfZGlhZ19yZWdpc3RlcigmYW1wO3NjdHBfZGlhZ19oYW5kbGVyKWAsIGFuZCBpbml0aWFsbHksIEkgYXNzdW1lZCB0aGF0IGltcGxpZWQgdGhleSB3ZXJlIGFsbCBzdGF0aWMuIEJ1dCBoYW5nIG9uIGEgc2Vjb25kLi4uCgpOb3cgSSYjMzk7bSBzZWVpbmcgdGhhdCBgc2N0cF9kaWFnX2R1bXBgIGFuZCBgc2N0cF9kaWFnX2R1bXBfb25lYCAqYXJlKiBpbmRlZWQgc3RhdGljLiBCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiB0aGV5JiMzOTtyZSBhc3NpZ25lZCB0byBgc2N0cF9kaWFnX2hhbmRsZXIuZHVtcGAgYW5kIGBzY3RwX2RpYWdfaGFuZGxlci5kdW1wX29uZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzIGhhcHBlbmluZy4KCkFscmlnaHQsIHNvIG5vdyBteSBmb2N1cyBpcyBjbGVhci4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIsIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBzY3RwX2RpYWdfaGFuZGxlcmAgc3RydWN0dXJlIGl0c2VsZi4gSXQmIzM5O3MgdGhlIGtleSB0byB1bmxvY2tpbmcgdGhpcyB3aG9sZSBkaWFnbm9zdGljIG1lY2hhbmlzbS4gTGV0IG1lIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjdHBfZGlhZ19oYW5kbGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2RpYWcuYz0zNzY9c3RhdGljIGludCBzY3RwX2VwX2R1bXAoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCB2b2lkICpwKVxuLS1cbm5ldC9zY3RwL2RpYWcuYy00MjEtXG5uZXQvc2N0cC9kaWFnLmM6NDIyOi8qIGRlZmluZSB0aGUgZnVuY3Rpb25zIGZvciBzY3RwX2RpYWdfaGFuZGxlciovXG5uZXQvc2N0cC9kaWFnLmMtNDIzLXN0YXRpYyB2b2lkIHNjdHBfZGlhZ19nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLFxuLS1cbm5ldC9zY3RwL2RpYWcuYz00Nzg9c3RhdGljIHZvaWQgc2N0cF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbm5ldC9zY3RwL2RpYWcuYy01MjctXG5uZXQvc2N0cC9kaWFnLmM6NTI4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgc2N0cF9kaWFnX2hhbmRsZXIgPSB7XG5uZXQvc2N0cC9kaWFnLmMtNTI5LVx0Lm93bmVyXHRcdCA9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC9zY3RwL2RpYWcuYz01Mzc9c3RhdGljIGludCBfX2luaXQgc2N0cF9kaWFnX2luaXQodm9pZClcbm5ldC9zY3RwL2RpYWcuYy01Mzgte1xubmV0L3NjdHAvZGlhZy5jOjUzOTpcdHJldHVybiBpbmV0X2RpYWdfcmVnaXN0ZXIoXHUwMDI2c2N0cF9kaWFnX2hhbmRsZXIpO1xubmV0L3NjdHAvZGlhZy5jLTU0MC19XG4tLVxubmV0L3NjdHAvZGlhZy5jPTU0Mj1zdGF0aWMgdm9pZCBfX2V4aXQgc2N0cF9kaWFnX2V4aXQodm9pZClcbm5ldC9zY3RwL2RpYWcuYy01NDMte1xubmV0L3NjdHAvZGlhZy5jOjU0NDpcdGluZXRfZGlhZ191bnJlZ2lzdGVyKFx1MDAyNnNjdHBfZGlhZ19oYW5kbGVyKTtcbm5ldC9zY3RwL2RpYWcuYy01NDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODM5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIFNDVFAgRGlhZ25vc3RpY3MgZm9yIEVmZmVjdGl2ZSBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBiZXN0IHRvIGltcHJvdmUgY292ZXJhZ2UgZm9yIFNDVFAgZGlhZ25vc3RpY3MuIFNpbmNlIGBzY3RwX2RpYWdfZHVtcGAgYW5kIGBzY3RwX2RpYWdfZHVtcF9vbmVgIGFyZSBzdGF0aWMsIHRoZXNlIHNob3VsZCBhYnNvbHV0ZWx5IGJlIHRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMuIEkgYWxzbyBuZWVkIHRvIGluY2x1ZGUgYGluZXRfc2N0cF9kaWFnX2ZpbGxgLiBJJiMzOTttIHJlbWluZGluZyBteXNlbGYgdGhhdCBzeXprYWxsZXIgY2FuIHJlc29sdmUgc3RhdGljIHN5bWJvbHMgZm9yIGNvdmVyYWdlLCBidXQgZm9yIHRydWUgZm9jdXMsIEkgbmVlZCB0byBwcmlvcml0aXplIG5vbi1pbmxpbmVkIHN5bWJvbHMuIGBzY3RwX2RpYWdfZHVtcGAgYW5kIGBzY3RwX2RpYWdfZHVtcF9vbmVgIGFyZSBkZWZpbml0ZWx5IG5vdCBpbmxpbmVkIGJlY2F1c2UgdGhlaXIgYWRkcmVzc2VzIGFyZSBleHBsaWNpdGx5IHRha2VuLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IGBpbmV0X3NjdHBfZGlhZ19maWxsYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIG5vdCBpbmxpbmVkLCBzaW5jZSBJJiMzOTttIHNlZWluZyBpdCBjYWxsZWQgZnJvbSBgc2N0cF9zb2NrX2R1bXBfb25lYCwgYHNjdHBfc29ja19kdW1wYCwgYW5kIGBzY3RwX2VwX2R1bXBgLiBCYXNlZCBvbiBpdHMgc2l6ZSBhbmQgdGhlIG11bHRpcGxlIGNhbGwgc2l0ZXMsIGl0JiMzOTtzIGxpa2VseSBub3QgaW5saW5lZC4KCk9rYXksIGxldCBtZSBjb25maXJtIHRoYXQgYHNjdHBfZGlhZ19kdW1wYCBhbmQgYHNjdHBfZGlhZ19kdW1wX29uZWAgYXJlIGFjdHVhbGx5IHRoZSBtYWluIGVudHJ5IHBvaW50cy4gSSBzaG91bGQgcXVpY2tseSBjaGVjayBgbmV0L3NjdHAvZGlhZy5jYCBmb3IgdGhvc2Ugc3ltYm9scy4gWWVzLCBjb25maXJtZWQuIFRob3NlIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdGhlIFNDVFAgZGlhZ25vc3RpYyBmdW5jdGlvbnMuCgpOb3csIGZvciB0aGUgY29uZmlncy4gSSBrbm93IEkgbmVlZCBgSVBfU0NUUGAgYW5kIGBJTkVUX1NDVFBfRElBR2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgYElORVRfRElBR2AgaXMgcmVxdWlyZWQuIEkga25vdyBpdCYjMzk7cyB1c3VhbGx5IGVuYWJsZWQuIFllcywgaXQmIzM5O3MgYSBkZXBlbmRlbmN5IG9mIGBJTkVUX1NDVFBfRElBR2AuIEkgc2hvdWxkIGluY2x1ZGUgaXQuCgpIYW5nIG9uLiBJJiMzOTttIGp1c3QgbWFraW5nIHN1cmUuIElzIGBJTkVUX0RJQUdgIGEgbWVudWNvbmZpZyBvciBjb25maWcgaXRzZWxmPyBJIHNob3VsZCBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRElBRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTQxOT1jb25maWcgSU5FVF9UVU5ORUxcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQyMi1cbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDI0LVx0dHJpc3RhdGUgXCYjMzQ7SU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZz00NDc9Y29uZmlnIElORVRfUkFXX0RJQUdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQ1NC1cbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvS2NvbmZpZy00NTYtXHRib29sIFwmIzM0O0lORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgwMQoJCQkJCQkJb3V0cHV0OiAxMzEKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0NUUCBEaWFnbm9zdGljIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gU0NUUCBkaWFnbm9zdGljcywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBuZXRsaW5rIG1lc3NhZ2VzLiBSaWdodCwgYElORVRfRElBR2AgaXMgZGVmaW5pdGVseSBhIGNvcmUgY29uZmlndXJhdGlvbiBpdGVtIGhlcmUuIEFuZCB0byBlbmFibGUgdGhpcyBzcGVjaWZpYyBkaWFnbm9zdGljIGZ1bmN0aW9uYWxpdHksIEkgbmVlZCB0byBiZSBzdXJlIGBJUF9TQ1RQYCwgYElORVRfU0NUUF9ESUFHYCwgYW5kIGBJTkVUX0RJQUdgIGFyZSBhbGwgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4KClRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgYHNjdHBfZGlhZ19kdW1wYCwgYHNjdHBfZGlhZ19kdW1wX29uZWAsIGFuZCBgaW5ldF9zY3RwX2RpYWdfZmlsbGAg4oCTIHRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIGhhbmRsaW5nIHRoZSBkYXRhIGNvbGxlY3Rpb24gYW5kIGZvcm1hdHRpbmcgZm9yIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2VzLgoKVGhpcyBwYXRjaCwgZnJvbSB3aGF0IEkgY2FuIHNlZSwgYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIFNDVFAgZGlhZ25vc3RpYyBuZXRsaW5rIGludGVyZmFjZS4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCYjMzk7cyB3b3J0aCBmdXp6aW5nIHRvIGV4cGxvcmUsIHBvdGVudGlhbGx5IEkgY2FuIGZpbmQgb3RoZXIgYXJlYXMuCgpOb3csIGxldCYjMzk7cyB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgY29kZSBmaXggaXRzZWxmOgoKYGBgYwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxhZGRyLCBhZGRyZXNzX2xpc3QsIGxpc3QpIHsKLQkJbWVtY3B5KGluZm8sICZhbXA7bGFkZHItJmd0O2EsIHNpemVvZihsYWRkci0mZ3Q7YSkpOwotCQltZW1zZXQoaW5mbyAmIzQzOyBzaXplb2YobGFkZHItJmd0O2EpLCAwLCBhZGRybGVuIC0gc2l6ZW9mKGxhZGRyLSZndDthKSk7CiYjNDM7CQlzaXplX3QgY29weV9sZW4gPSBsYWRkci0mZ3Q7YS5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCA/CiYjNDM7CQkJCSAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgOgomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKJiM0MzsKJiM0MzsJCW1lbXNldChpbmZvLCAwLCBhZGRybGVuKTsKJiM0MzsJCW1lbWNweShpbmZvLCAmYW1wO2xhZGRyLSZndDthLCBjb3B5X2xlbik7CiAJCWluZm8gJiM0Mzs9IGFkZHJsZW47CmBgYAoKQWgsIHllcywgSSBzZWUgaXQuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBkb2luZyBhIGBtZW1jcHlgIG9mIHRoZSBzb2NrZXQgYWRkcmVzcyBhbmQgdGhlbiB6ZXJvaW5nIG91dCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIGBpbmZvYC4gSG93ZXZlciwgaXQgd2FzIGFzc3VtaW5nIGEgZml4ZWQgc2l6ZSBmb3IgdGhlIGFkZHJlc3MgKGBzaXplb2YobGFkZHItJmd0O2EpYCkuIFRoZSBmaXggY2xldmVybHkgY2FsY3VsYXRlcyB0aGUgY29ycmVjdCBgY29weV9sZW5gIGJhc2VkIG9uIHRoZSBhZGRyZXNzIGZhbWlseSAoSVB2NCBvciBJUHY2KSBhbmQgdXNlcyB0aGF0IHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBtZW1vcnkgY29waWVkLiBDcnVjaWFsbHksIHRoZSBjb2RlIG5vdyB6ZXJvZXMgb3V0IHRoZSAqZW50aXJlKiBgYWRkcmxlbmAgcmVnaW9uIGZpcnN0IGJlZm9yZSBjb3B5aW5nLiBUaGF0IGVsaW1pbmF0ZXMgdGhlIHJpc2sgb2YgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIHBhc3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBnb29kLgoKSSYjMzk7bSBjb25maWRlbnQgdGhpcyBpcyBhIHZhbGlkIGFuZCBpbXBvcnRhbnQgZml4LiBJJiMzOTtsbCBmbGFnIHRoaXMgYXMgcmVhZHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDssCiAgICAmIzM0O0lORVRfU0NUUF9ESUFHJiMzNDssCiAgICAmIzM0O0lORVRfRElBRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfZGlhZ19kdW1wJiMzNDssCiAgICAmIzM0O3NjdHBfZGlhZ19kdW1wX29uZSYjMzQ7LAogICAgJiMzNDtpbmV0X3NjdHBfZGlhZ19maWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsvb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gY29weWluZyBTQ1RQIHNvY2tldCBhZGRyZXNzZXMgdG8gdXNlcnNwYWNlIHZpYSB0aGUgbmV0bGluayBkaWFnIGludGVyZmFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7LAogICAgJiMzNDtJTkVUX1NDVFBfRElBRyYjMzQ7LAogICAgJiMzNDtJTkVUX0RJQUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX2RpYWdfZHVtcCYjMzQ7LAogICAgJiMzNDtzY3RwX2RpYWdfZHVtcF9vbmUmIzM0OywKICAgICYjMzQ7aW5ldF9zY3RwX2RpYWdfZmlsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrL291dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGNvcHlpbmcgU0NUUCBzb2NrZXQgYWRkcmVzc2VzIHRvIHVzZXJzcGFjZSB2aWEgdGhlIG5ldGxpbmsgZGlhZyBpbnRlcmZhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNDo0MS4yNzc1NjA0NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjU0NDcyMTExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCIsXG4gICAgXCJJTkVUX1NDVFBfRElBR1wiLFxuICAgIFwiSU5FVF9ESUFHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9kaWFnX2R1bXBcIixcbiAgICBcInNjdHBfZGlhZ19kdW1wX29uZVwiLFxuICAgIFwiaW5ldF9zY3RwX2RpYWdfZmlsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsvb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gY29weWluZyBTQ1RQIHNvY2tldCBhZGRyZXNzZXMgdG8gdXNlcnNwYWNlIHZpYSB0aGUgbmV0bGluayBkaWFnIGludGVyZmFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjQ6NDEuMjc3NTY3MDI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzczNTEwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4OGVkNGNlM2M3YWYzMzc5ODBhZjIzYzU5YmY1ZDliNTc4ODkzY2JhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDA4OjI0OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2RpYWcuYyBiL25ldC9zY3RwL2RpYWcuY1xcbmluZGV4IGQ3NThmNWMzZTA2ZTUuLjM2ZDcxODBlZTA0N2QgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjdHAvZGlhZy5jXFxuKysrIGIvbmV0L3NjdHAvZGlhZy5jXFxuQEAgLTg1LDggKzg1LDEyIEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aW5mbyA9IG5sYV9kYXRhKGF0dHIpO1xcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxhZGRyLCBhZGRyZXNzX2xpc3QsIGxpc3QpIHtcXG4tXFx0XFx0bWVtY3B5KGluZm8sIFxcdTAwMjZsYWRkci1cXHUwMDNlYSwgc2l6ZW9mKGxhZGRyLVxcdTAwM2VhKSk7XFxuLVxcdFxcdG1lbXNldChpbmZvICsgc2l6ZW9mKGxhZGRyLVxcdTAwM2VhKSwgMCwgYWRkcmxlbiAtIHNpemVvZihsYWRkci1cXHUwMDNlYSkpO1xcbitcXHRcXHRzaXplX3QgY29weV9sZW4gPSBsYWRkci1cXHUwMDNlYS5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCA/XFxuK1xcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgOlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTtcXG4rXFxuK1xcdFxcdG1lbXNldChpbmZvLCAwLCBhZGRybGVuKTtcXG4rXFx0XFx0bWVtY3B5KGluZm8sIFxcdTAwMjZsYWRkci1cXHUwMDNlYSwgY29weV9sZW4pO1xcbiBcXHRcXHRpbmZvICs9IGFkZHJsZW47XFxuIFxcbiBcXHRcXHRpZiAoIS0tYWRkcmNudClcXG5AQCAtMTEzLDkgKzExNywxMiBAQCBzdGF0aWMgaW50IGluZXRfZGlhZ19tc2dfc2N0cGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aW5mbyA9IG5sYV9kYXRhKGF0dHIpO1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGZyb20sIFxcdTAwMjZhc29jLVxcdTAwM2VwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsXFxuIFxcdFxcdFxcdCAgICB0cmFuc3BvcnRzKSB7XFxuLVxcdFxcdG1lbWNweShpbmZvLCBcXHUwMDI2ZnJvbS1cXHUwMDNlaXBhZGRyLCBzaXplb2YoZnJvbS1cXHUwMDNlaXBhZGRyKSk7XFxuLVxcdFxcdG1lbXNldChpbmZvICsgc2l6ZW9mKGZyb20tXFx1MDAzZWlwYWRkciksIDAsXFxuLVxcdFxcdCAgICAgICBhZGRybGVuIC0gc2l6ZW9mKGZyb20tXFx1MDAzZWlwYWRkcikpO1xcbitcXHRcXHRzaXplX3QgY29weV9sZW4gPSBmcm9tLVxcdTAwM2VpcGFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQgP1xcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIDpcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7XFxuK1xcbitcXHRcXHRtZW1zZXQoaW5mbywgMCwgYWRkcmxlbik7XFxuK1xcdFxcdG1lbWNweShpbmZvLCBcXHUwMDI2ZnJvbS1cXHUwMDNlaXBhZGRyLCBjb3B5X2xlbik7XFxuIFxcdFxcdGluZm8gKz0gYWRkcmxlbjtcXG4gXFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjQ6NDEuNzU1OTA4ODg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTYwNjYzNjIwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiLFxuICAgIFwiSU5FVF9TQ1RQX0RJQUdcIixcbiAgICBcIklORVRfRElBR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfZGlhZ19kdW1wXCIsXG4gICAgXCJzY3RwX2RpYWdfZHVtcF9vbmVcIixcbiAgICBcImluZXRfc2N0cF9kaWFnX2ZpbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrL291dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGNvcHlpbmcgU0NUUCBzb2NrZXQgYWRkcmVzc2VzIHRvIHVzZXJzcGFjZSB2aWEgdGhlIG5ldGxpbmsgZGlhZyBpbnRlcmZhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4ZWQ0Y2UzYzdhZjMzNzk4MGFmMjNjNTliZjVkOWI1Nzg4OTNjYmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwODoyNDo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2RpYWcuYyBiL25ldC9zY3RwL2RpYWcuY1xuaW5kZXggZDc1OGY1YzNlMDZlNS4uMzZkNzE4MGVlMDQ3ZCAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL2RpYWcuY1xuKysrIGIvbmV0L3NjdHAvZGlhZy5jXG5AQCAtODUsOCArODUsMTIgQEAgc3RhdGljIGludCBpbmV0X2RpYWdfbXNnX3NjdHBsYWRkcnNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aW5mbyA9IG5sYV9kYXRhKGF0dHIpO1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGFkZHIsIGFkZHJlc3NfbGlzdCwgbGlzdCkge1xuLVx0XHRtZW1jcHkoaW5mbywgXHUwMDI2bGFkZHItXHUwMDNlYSwgc2l6ZW9mKGxhZGRyLVx1MDAzZWEpKTtcbi1cdFx0bWVtc2V0KGluZm8gKyBzaXplb2YobGFkZHItXHUwMDNlYSksIDAsIGFkZHJsZW4gLSBzaXplb2YobGFkZHItXHUwMDNlYSkpO1xuK1x0XHRzaXplX3QgY29weV9sZW4gPSBsYWRkci1cdTAwM2VhLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUID9cbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgOlxuK1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7XG4rXG4rXHRcdG1lbXNldChpbmZvLCAwLCBhZGRybGVuKTtcbitcdFx0bWVtY3B5KGluZm8sIFx1MDAyNmxhZGRyLVx1MDAzZWEsIGNvcHlfbGVuKTtcbiBcdFx0aW5mbyArPSBhZGRybGVuO1xuIFxuIFx0XHRpZiAoIS0tYWRkcmNudClcbkBAIC0xMTMsOSArMTE3LDEyIEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aW5mbyA9IG5sYV9kYXRhKGF0dHIpO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmcm9tLCBcdTAwMjZhc29jLVx1MDAzZXBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCxcbiBcdFx0XHQgICAgdHJhbnNwb3J0cykge1xuLVx0XHRtZW1jcHkoaW5mbywgXHUwMDI2ZnJvbS1cdTAwM2VpcGFkZHIsIHNpemVvZihmcm9tLVx1MDAzZWlwYWRkcikpO1xuLVx0XHRtZW1zZXQoaW5mbyArIHNpemVvZihmcm9tLVx1MDAzZWlwYWRkciksIDAsXG4tXHRcdCAgICAgICBhZGRybGVuIC0gc2l6ZW9mKGZyb20tXHUwMDNlaXBhZGRyKSk7XG4rXHRcdHNpemVfdCBjb3B5X2xlbiA9IGZyb20tXHUwMDNlaXBhZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUID9cbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgOlxuK1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7XG4rXG4rXHRcdG1lbXNldChpbmZvLCAwLCBhZGRybGVuKTtcbitcdFx0bWVtY3B5KGluZm8sIFx1MDAyNmZyb20tXHUwMDNlaXBhZGRyLCBjb3B5X2xlbik7XG4gXHRcdGluZm8gKz0gYWRkcmxlbjtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjI0OjQxLjc1NTkxMjM1NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NDIwNjcyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU0NUUCBEaWFnbm9zdGljIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBgbmV0L3NjdHAvZGlhZy5jYC4gU291bmRzIGxpa2UgaXQncyBhZGRyZXNzaW5nIHNvbWV0aGluZyBpbiB0aGUgU0NUUCBkaWFnbm9zdGljIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IHdpdGggaG93IGxvY2FsIGFkZHJlc3NlcyAoYGxhZGRyYCkgYW5kIGZyb20gYWRkcmVzc2VzIChgZnJvbWApIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlcy4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGxgIGFuZCBgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbGAuIEZyb20gdGhlIGRlc2NyaXB0aW9uLCBpdCBhcHBlYXJzIHRvIGJlIGEgbWVtb3J5IHNhZmV0eSBmaXgg4oCTIGEgcG90ZW50aWFsIGxlYWsgb3IgaW5lZmZpY2llbnQgY29weSBzaXR1YXRpb24uIEFwcGFyZW50bHksIHdlIHdlcmUgY29weWluZyB0aGUgKmVudGlyZSogYHVuaW9uYCBjb250YWluaW5nIHRoZSBhZGRyZXNzLCBpbnN0ZWFkIG9mIGp1c3QgdGhlIHJlbGV2YW50IGBzb2NrYWRkcl9pbmAgb3IgYHNvY2thZGRyX2luNmAgc3RydWN0dXJlLiBUaGF0IGNvdWxkIGRlZmluaXRlbHkgYmUgcHJvYmxlbWF0aWMsIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCB3YXN0aW5nIHNvbWUgY3ljbGVzLiBUaGUgZml4LCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIG5vdyBjb3B5IG9ubHkgdGhlIG5lY2Vzc2FyeSBgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbilgIG9yIGBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNilgIGJhc2VkIG9uIHRoZSBhZGRyZXNzIGZhbWlseS5cblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgY29kZSBub3cgdG8gdmVyaWZ5IHRoaXMgYW5kIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBgbmV0L3NjdHAvZGlhZy5jYCBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBJJ20gZ29pbmcgdG8gZmlyZSB1cCBgZ3JlcHBlcmAg4oCTIHRoYXQncyB0aGUgcXVpY2tlc3Qgd2F5IHRvIGZpbmQgdGhlc2UgZnVuY3Rpb25zIGFuZCB0cmFjZSB0aGVpciBjYWxsZXJzIHRvIHNlZSBleGFjdGx5IHdoZXJlIHRoZXkncmUgYmVpbmcgdXNlZCBhbmQgaG93IHRoaXMgY2hhbmdlIHdpbGwgaW1wYWN0IHRoZSBsYXJnZXIgZGlhZ25vc3RpYyBmbG93LiBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHRzIHRvIGFwcHJlY2lhdGUgdGhlIGZ1bGwgZXh0ZW50IG9mIHRoZSBjaGFuZ2UgYW5kIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODgsIk91dHB1dFRva2VucyI6ODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNDo0Ny4yOTc5ODE4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjYzMzAwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL2RpYWcuYz0yNj1zdGF0aWMgdm9pZCBpbmV0X2RpYWdfbXNnX3NjdHBhc29jX2ZpbGwoc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsXFxuLS1cXG5uZXQvc2N0cC9kaWFnLmMtNjYtXFxubmV0L3NjdHAvZGlhZy5jOjY3OnN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2N0cC9kaWFnLmMtNjgtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2hlYWQgKmFkZHJlc3NfbGlzdClcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz0xMzM9c3RhdGljIGludCBpbmV0X3NjdHBfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9kaWFnLmMtMjEyLVxcdFxcdFxcdCA6IFxcdTAwMjZlcC1cXHUwMDNlYmFzZS5iaW5kX2FkZHIuYWRkcmVzc19saXN0O1xcbm5ldC9zY3RwL2RpYWcuYzoyMTM6XFx0aWYgKGluZXRfZGlhZ19tc2dfc2N0cGxhZGRyc19maWxsKHNrYiwgYWRkcl9saXN0KSlcXG5uZXQvc2N0cC9kaWFnLmMtMjE0LVxcdFxcdGdvdG8gZXJyb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNDo0Ny41MjQzMTYyMTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg4NDQwNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9kaWFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvZGlhZy5jPTY3PXN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYy0xMDMtXFxubmV0L3NjdHAvZGlhZy5jOjEwNDpzdGF0aWMgaW50IGluZXRfZGlhZ19tc2dfc2N0cGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2N0cC9kaWFnLmMtMTA1LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxcbi0tXFxubmV0L3NjdHAvZGlhZy5jPTEzMz1zdGF0aWMgaW50IGluZXRfc2N0cF9kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYy0yMTktXFxubmV0L3NjdHAvZGlhZy5jOjIyMDpcXHRpZiAoYXNvYyBcXHUwMDI2XFx1MDAyNiBpbmV0X2RpYWdfbXNnX3NjdHBhZGRyc19maWxsKHNrYiwgYXNvYykpXFxubmV0L3NjdHAvZGlhZy5jLTIyMS1cXHRcXHRnb3RvIGVycm91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjQ6NDcuNjIzMTY1NDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA0Mzg5NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlNDVFAgRGlhZ25vc3RpYyBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBTQ1RQIGRpYWdub3N0aWMgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgdGhlIG5ldGxpbmsgaW1wbGVtZW50YXRpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UuIEkgc2VlIHR3byBrZXkgZnVuY3Rpb25zIGhlcmU6IGBpbmV0X2RpYWdfbXNnX3NjdHBsYWRkcnNfZmlsbGAgYW5kIGBpbmV0X2RpYWdfbXNnX3NjdHBhZGRyc19maWxsYC4gVGhlc2UgYXJlIHVsdGltYXRlbHkgY2FsbGVkIGJ5IGBpbmV0X3NjdHBfZGlhZ19maWxsYC4gVGhpcyBmdW5jdGlvbiwgaW4gdHVybiwgZ2V0cyBpbnZva2VkIGJ5IGBzY3RwX2RpYWdfZHVtcF9vbmVgIGFuZCBgc2N0cF9kaWFnX2R1bXBgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZWxlbWVudHMgZm9yIGR1bXBpbmcgdGhlIFNDVFAgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBvdmVyIHRoZSBuZXR3b3JrLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBuZWNlc3NhcnkgdG8gZW5hYmxlIGFuZCB1c2UgdGhpcyBTQ1RQIGRpYWdub3N0aWMgaW50ZXJmYWNlLiBJIGhhdmUgYSBodW5jaCBpdCdzIG5vdCBhIGRlZmF1bHQgZW5hYmxlZCBmZWF0dXJlLCBzbyBJIHNob3VsZCBzZWUgd2hhdCBjb25maWcgb3B0aW9ucyBJIG5lZWQgdG8gc2V0IHRvIGFjdHVhbGx5IGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0ODEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjI0OjUxLjIyNzU1Nzc2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ5Mzk3NjIwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0NUUF9ESUFHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNDo1My40NzY5NjQ1NzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzk0MDU1MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFNDVFAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gbG9vayBpbnRvIHRoZSBTQ1RQIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gaW1tZWRpYXRlbHkgbmF2aWdhdGUgdG8gdGhlIGBuZXQvc2N0cC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEl0IGNvbnRhaW5zIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGV2ZXJ5dGhpbmcgZGVmaW5lZCB0aGVyZTogbW9kdWxlcywgZmVhdHVyZXMsIHByb2JhYmx5IHNvbWUgZGVmYXVsdHMsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBuZXR3b3JraW5nIHN1YnN5c3RlbXMsIGFuZCBtYXliZSBzb21lIGhpbnRzIGFib3V0IHBlcmZvcm1hbmNlIHR1bmluZy4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlIG9mIHdoYXQncyBjb25maWd1cmFibGUsIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBhbmQgYW55IGNvbnN0cmFpbnRzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIGEgc3BlY2lmaWMgdXNlIGNhc2UgSSBoYXZlIGluIG1pbmQuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIGVudGlyZSBTQ1RQIGNvbmZpZ3VyYXRpb24gc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNDo1Ni4yNzEwMjIzNzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3NDk4OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0NUUF9ESUFHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9LY29uZmlnPTY4PWVuZGNob2ljZVxcbm5ldC9zY3RwL0tjb25maWctNjktXFxubmV0L3NjdHAvS2NvbmZpZzo3MDpjb25maWcgSU5FVF9TQ1RQX0RJQUdcXG5uZXQvc2N0cC9LY29uZmlnLTcxLVxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuLS1cXG5uZXQvc2N0cC9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JUF9TQ1RQKSArPSBzY3RwLm9cXG5uZXQvc2N0cC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19JTkVUX1NDVFBfRElBRykgKz0gc2N0cF9kaWFnLm9cXG5uZXQvc2N0cC9NYWtlZmlsZS04LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNDo1Ni4zMjc3Nzc3MjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwNTU3NjI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFNDVFAgRGlhZ25vc3RpYyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFNDVFAgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpcyBlbmFibGVkIGluIHRoaXMgc3lzdGVtLiBGcm9tIHdoYXQgSSd2ZSBnYXRoZXJlZCwgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYElORVRfU0NUUF9ESUFHYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCBzZWVtcy5cblxuTmF0dXJhbGx5LCBgSU5FVF9TQ1RQX0RJQUdgIGRlcGVuZHMgb24gYSBjb3VwbGUgb2Ygb3RoZXIgdGhpbmdzIOKAkyBzcGVjaWZpY2FsbHksIGBJTkVUX0RJQUdgIGFuZCBgSVBfU0NUUGAuIEdpdmVuIHRoYXQgdGhlc2UgYXJlIGRlcGVuZGVuY2llcywgSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSB0d28gYXJlIGFscmVhZHkgZW5hYmxlZCBvciBjb25zaWRlcmVkIHdoZW4gSSBjb25maWd1cmUgYElORVRfU0NUUF9ESUFHYC5cblxuTm93LCB3aGVyZSdzIHRoZSBtb3N0IHJlbGlhYmxlIHBsYWNlIHRvIGNvbmZpcm0gdGhlIGRldGFpbHMgYXJvdW5kIGBJUF9TQ1RQYD8gUmlnaHQsIHRoZSBgbmV0L3NjdHAvS2NvbmZpZ2AgZmlsZSBzaG91bGQgaGF2ZSB0aGUgZGVmaW5pdGl2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGF0LiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgdG8gdmVyaWZ5IGl0cyBkZWZpbml0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9ucy4gVGltZSB0byBkZWx2ZSBpbnRvIHRoYXQgS2NvbmZpZyBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MDIuMDMzMzU2Njc1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTY2Nzc3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfU0NUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvS2NvbmZpZy01LVxcbm5ldC9zY3RwL0tjb25maWc6NjptZW51Y29uZmlnIElQX1NDVFBcXG5uZXQvc2N0cC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlRoZSBTQ1RQIFByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNTowMi4xMjUwMzE5ODlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0Njg5NzE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipTQ1RQIERpYWdub3N0aWMgTmV0bGluayBQYXRjaCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYElQX1NDVFBgIGFuZCBgSU5FVF9TQ1RQX0RJQUdgLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGFkZHJlc3MgYSBtZW1vcnkgbGVhayBhbmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHdpdGhpbiBTQ1RQIGRpYWdub3N0aWMgbmV0bGluayBtZXNzYWdlcy4gRnVuY3Rpb25hbGx5LCBpdCBsb29rcyBzb2xpZCwgYW5kIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgaXQncyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgaW5ldF9kaWFnX21zZ19zY3RwbGFkZHJzX2ZpbGxgLCBgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbGAsIGFuZCBgaW5ldF9zY3RwX2RpYWdfZmlsbGAuIFdhaXQgYSBzZWNvbmTigKYgYXJlIGBpbmV0X2RpYWdfbXNnX3NjdHBsYWRkcnNfZmlsbGAgYW5kIGBpbmV0X2RpYWdfbXNnX3NjdHBhZGRyc19maWxsYCBzdGF0aWMgZnVuY3Rpb25zPyBUaGF0IGNvdWxkIHN1Z2dlc3QgdGhleSdyZSBpbmxpbmVkLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGV5J3JlIGlubGluZWQgYmVjYXVzZSBpZiBzbywgbXkgZnV6emluZyBlZmZvcnQgbWlnaHQgYmUgYmV0dGVyIGZvY3VzZWQgZWxzZXdoZXJlLiBJIHN1c3BlY3QgdGhleSAqYXJlKiBpbmxpbmVkIGludG8gYGluZXRfc2N0cF9kaWFnX2ZpbGxgLlxuXG5UbyBrZWVwIHRoaW5ncyBzdHJhaWdodGZvcndhcmQsIEknbGwgY29uY2VudHJhdGUgbXkgYXR0ZW50aW9uIG9uIGBpbmV0X3NjdHBfZGlhZ19maWxsYCBhbG9uZyB3aXRoIGBzY3RwX2RpYWdfZHVtcGAgYW5kIGBzY3RwX2RpYWdfZHVtcF9vbmVgIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBpbmxpbmluZy4gVGhhdCdsbCBnaXZlIG1lIHRoZSBtb3N0IGNvbXByZWhlbnNpdmUgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MDcuNzcxOTMxODQ4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUzMjAzMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9zY3RwX2RpYWdfZmlsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9kaWFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvZGlhZy5jPTEwND1zdGF0aWMgaW50IGluZXRfZGlhZ19tc2dfc2N0cGFkZHJzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYy0xMzItLyogc2N0cCBhc29jL2VwIGZpbGwqL1xcbm5ldC9zY3RwL2RpYWcuYzoxMzM6c3RhdGljIGludCBpbmV0X3NjdHBfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxubmV0L3NjdHAvZGlhZy5jLTEzNC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz0yNjA9c3RhdGljIGludCBzY3RwX3NvY2tfZHVtcF9vbmUoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRzcCwgdm9pZCAqcClcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYy0yODYtXFxubmV0L3NjdHAvZGlhZy5jOjI4NzpcXHRlcnIgPSBpbmV0X3NjdHBfZGlhZ19maWxsKHNrLCBhc3NvYywgcmVwLCByZXEsIHNrX3VzZXJfbnMoTkVUTElOS19DQihza2IpLnNrKSxcXG5uZXQvc2N0cC9kaWFnLmMtMjg4LVxcdFxcdFxcdFxcdCAgTkVUTElOS19DQihza2IpLnBvcnRpZCwgY29tbXAtXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCAwLFxcbi0tXFxubmV0L3NjdHAvZGlhZy5jPTMwNT1zdGF0aWMgaW50IHNjdHBfc29ja19kdW1wKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0c3AsIHZvaWQgKnApXFxuLS1cXG5uZXQvc2N0cC9kaWFnLmMtMzI5LVxcdFxcdGlmICghY2ItXFx1MDAzZWFyZ3NbM10gXFx1MDAyNlxcdTAwMjZcXG5uZXQvc2N0cC9kaWFnLmM6MzMwOlxcdFxcdCAgICBpbmV0X3NjdHBfZGlhZ19maWxsKHNrLCBOVUxMLCBza2IsIHIsXFxubmV0L3NjdHAvZGlhZy5jLTMzMS1cXHRcXHRcXHRcXHRcXHRza191c2VyX25zKE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikuc2spLFxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTM0MC1cXG5uZXQvc2N0cC9kaWFnLmM6MzQxOlxcdFxcdGlmIChpbmV0X3NjdHBfZGlhZ19maWxsKHNrLCBhc3NvYywgc2tiLCByLFxcbm5ldC9zY3RwL2RpYWcuYy0zNDItXFx0XFx0XFx0XFx0XFx0c2tfdXNlcl9ucyhORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnNrKSxcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz0zNzY9c3RhdGljIGludCBzY3RwX2VwX2R1bXAoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCB2b2lkICpwKVxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTQwNy1cXG5uZXQvc2N0cC9kaWFnLmM6NDA4OlxcdGlmIChpbmV0X3NjdHBfZGlhZ19maWxsKHNrLCBOVUxMLCBza2IsIHIsXFxubmV0L3NjdHAvZGlhZy5jLTQwOS1cXHRcXHRcXHRcXHRza191c2VyX25zKE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikuc2spLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNTowOC4wMjcyNTc0NTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MzczMTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBuZXQvc2N0cC9kaWFnLmNgIEZ1bmN0aW9uIFNjb3BlKipcblxuUmlnaHQsIGBpbmV0X3NjdHBfZGlhZ19maWxsYCBpcyBhbm90aGVyIG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMgZGVjbGFyZWQgc3RhdGljLCBqdXN0IGxpa2UgSSB0aG91Z2h0LiBPa2F5LCB0aW1lIHRvIGdldCBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvc2N0cC9kaWFnLmNgIHNvdXJjZSBjb2RlLCBidXQgdGhpcyB0aW1lIEknbGwgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0ICphcmVuJ3QqIHN0YXRpYy4gVGhhdCdsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoaWNoIG9mIHRob3NlIGFyZSBleHRlcm5hbGx5IGFjY2Vzc2libGUgYW5kIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgZGlhZ25vc3RpYyBhbmQgbW9uaXRvcmluZyBpbnRlcmZhY2VzLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBtZW50YWwgbWFwIG9mIHRoZSBtb2R1bGUncyBwdWJsaWMgZW50cnkgcG9pbnRzIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGRpYWdub3N0aWMgZmFjaWxpdGllcyBpdCBleHBvc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzc5LCJPdXRwdXRUb2tlbnMiOjY2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MTEuNTkwOTkxMzYxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTgxMTUwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL2RpYWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MTEuNjQ2ODE2Mzg4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTExNzUxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipRdWljayBhbmQgRGlydHkgQ29kZSBJbnNwZWN0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlIHF1aWNrbHkuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgbGlrZWx5IHNjZW5hcmlvLCBpcyB0byBieXBhc3MgYW55IGNvbXBsZXggYW5hbHlzaXMgaW5pdGlhbGx5LiBJJ20gZ29pbmcgdG8gbGVhbiBvbiB0aGUgdHJpZWQgYW5kIHRydWUgbWV0aG9kczoganVzdCAqcmVhZCogdGhlIGZpbGUgZGlyZWN0bHkuIFRoYXQncyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGZhc3QgYXNzZXNzbWVudC4gSWYgdGhhdCBwcm92ZXMgdG9vIHNsb3csIG9yIEkgbmVlZCB0byBuYXJyb3cgdGhpbmdzIGRvd24sIEknbGwgc3dpdGNoIG92ZXIgdG8gc29tZXRoaW5nIG1vcmUgZWZmaWNpZW50LCBzdWNoIGFzIGBncmVwYC4gSSdkIGltbWVkaWF0ZWx5IHRhcmdldCBzcGVjaWZpYyBwYXR0ZXJucywgbGlrZSBsaW5lcyBzdGFydGluZyB3aXRoIGBec3RhdGljYCBvciBgXmludGAsIGV0Yy4gSSdsbCBmb2N1cyBvbiB0aGVzZSB0eXBlcyBvZiBpbmRpY2F0b3JzIHRvIHF1aWNrbHkgZ2V0IGEgc2Vuc2Ugb2YgdGhlIGNvZGViYXNlJ3Mgc3RydWN0dXJlIGFuZCBrZXkgZWxlbWVudHMgd2l0aG91dCBkaWdnaW5nIGludG8gYW55dGhpbmcgdG9vIGNvbXBsaWNhdGVkIHJpZ2h0IG9mZiB0aGUgYmF0LiBJdCdzIGFib3V0IGdldHRpbmcgYSBoaWdoLWxldmVsIHZpZXcgKmZhc3QqLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDYwLCJPdXRwdXRUb2tlbnMiOjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MTUuNzk3OTk0NDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTk4MjAxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNToxNS45MDM5ODE1NjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTY2MTg4NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL2RpYWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MTYuMDA5NjUwNzI3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjI5NDk3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdW5jdGlvbiBEZWZpbml0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIGRlZmluZWQgaW4gdGhlIGNvZGUuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGV5J2xsIGJlIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW50YCBvciBgc3RhdGljIHZvaWRgLCBsaWtlbHkgd2l0aGluIHRoZSBzb3VyY2UgZmlsZS4gSXQncyBhIGNvbW1vbiBwYXR0ZXJuLiBUbyBiZSB0aG9yb3VnaCwgSSBzaG91bGQgYWxzbyBjaGVjayBmb3IgYGludGAgYW5kIGB2b2lkYCBkZWNsYXJhdGlvbnMgdG9vLCBqdXN0IGluIGNhc2UgdGhleSdyZSBub3Qgc3RhdGljIG9yIGRlY2xhcmVkIGVsc2V3aGVyZS4gU28sIEknbGwgcnVuIGEgcXVpY2sgYGdyZXBgIHdpdGggdGhvc2UgcGF0dGVybnM6IGBec3RhdGljIGludCBgLCBgXnN0YXRpYyB2b2lkIGAsIGBeaW50IGAsIGFuZCBgXnZvaWQgYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHBvdGVudGlhbCBmdW5jdGlvbiBzaWduYXR1cmVzIEknbSBkZWFsaW5nIHdpdGguIFRoaXMgc2hvdWxkIGhlbHAgdG8gcmFwaWRseSB1bmRlcnN0YW5kIGhvdyB0aGUgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCwgd2hldGhlciB0aGV5IGhhdmUgcmV0dXJuIHR5cGVzLCBhbmQgdGhlaXIgc2NvcGUgd2l0aGluIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2MCwiT3V0cHV0VG9rZW5zIjo2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNToxOS41MzI2MDMxNjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDg2NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgaW50IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9kaWFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvZGlhZy5jPTI2PXN0YXRpYyB2b2lkIGluZXRfZGlhZ19tc2dfc2N0cGFzb2NfZmlsbChzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYy02Ni1cXG5uZXQvc2N0cC9kaWFnLmM6Njc6c3RhdGljIGludCBpbmV0X2RpYWdfbXNnX3NjdHBsYWRkcnNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY3RwL2RpYWcuYy02OC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqYWRkcmVzc19saXN0KVxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTEwMy1cXG5uZXQvc2N0cC9kaWFnLmM6MTA0OnN0YXRpYyBpbnQgaW5ldF9kaWFnX21zZ19zY3RwYWRkcnNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY3RwL2RpYWcuYy0xMDUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuLS1cXG5uZXQvc2N0cC9kaWFnLmMtMTMyLS8qIHNjdHAgYXNvYy9lcCBmaWxsKi9cXG5uZXQvc2N0cC9kaWFnLmM6MTMzOnN0YXRpYyBpbnQgaW5ldF9zY3RwX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbm5ldC9zY3RwL2RpYWcuYy0xMzQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2N0cC9kaWFnLmM9MjQwPXN0YXRpYyBzaXplX3QgaW5ldF9hc3NvY19hdHRyX3NpemUoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTI1OS1cXG5uZXQvc2N0cC9kaWFnLmM6MjYwOnN0YXRpYyBpbnQgc2N0cF9zb2NrX2R1bXBfb25lKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0c3AsIHZvaWQgKnApXFxubmV0L3NjdHAvZGlhZy5jLTI2MS17XFxuLS1cXG5uZXQvc2N0cC9kaWFnLmMtMzA0LVxcbm5ldC9zY3RwL2RpYWcuYzozMDU6c3RhdGljIGludCBzY3RwX3NvY2tfZHVtcChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHNwLCB2b2lkICpwKVxcbm5ldC9zY3RwL2RpYWcuYy0zMDYte1xcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTM1OS1cXG5uZXQvc2N0cC9kaWFnLmM6MzYwOnN0YXRpYyBpbnQgc2N0cF9zb2NrX2ZpbHRlcihzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHNwLCB2b2lkICpwKVxcbm5ldC9zY3RwL2RpYWcuYy0zNjEte1xcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTM3NS1cXG5uZXQvc2N0cC9kaWFnLmM6Mzc2OnN0YXRpYyBpbnQgc2N0cF9lcF9kdW1wKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwgdm9pZCAqcClcXG5uZXQvc2N0cC9kaWFnLmMtMzc3LXtcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz00MjM9c3RhdGljIHZvaWQgc2N0cF9kaWFnX2dldF9pbmZvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsXFxuLS1cXG5uZXQvc2N0cC9kaWFnLmMtNDM4LVxcbm5ldC9zY3RwL2RpYWcuYzo0Mzk6c3RhdGljIGludCBzY3RwX2RpYWdfZHVtcF9vbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbm5ldC9zY3RwL2RpYWcuYy00NDAtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnJlcSlcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz01Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciBzY3RwX2RpYWdfaGFuZGxlciA9IHtcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYy01MzYtXFxubmV0L3NjdHAvZGlhZy5jOjUzNzpzdGF0aWMgaW50IF9faW5pdCBzY3RwX2RpYWdfaW5pdCh2b2lkKVxcbm5ldC9zY3RwL2RpYWcuYy01Mzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNToxOS42MjI2OTQ0MjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NTk0NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgdm9pZCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL2RpYWcuYy0yMS1cXG5uZXQvc2N0cC9kaWFnLmM6MjI6c3RhdGljIHZvaWQgc2N0cF9kaWFnX2dldF9pbmZvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsXFxubmV0L3NjdHAvZGlhZy5jLTIzLVxcdFxcdFxcdCAgICAgICB2b2lkICppbmZvKTtcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYy0yNS0vKiBkZWZpbmUgc29tZSBmdW5jdGlvbnMgdG8gbWFrZSBhc29jL2VwIGZpbGwgbG9vayBjbGVhbiAqL1xcbm5ldC9zY3RwL2RpYWcuYzoyNjpzdGF0aWMgdm9pZCBpbmV0X2RpYWdfbXNnX3NjdHBhc29jX2ZpbGwoc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsXFxubmV0L3NjdHAvZGlhZy5jLTI3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz0zNzY9c3RhdGljIGludCBzY3RwX2VwX2R1bXAoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCB2b2lkICpwKVxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTQyMi0vKiBkZWZpbmUgdGhlIGZ1bmN0aW9ucyBmb3Igc2N0cF9kaWFnX2hhbmRsZXIqL1xcbm5ldC9zY3RwL2RpYWcuYzo0MjM6c3RhdGljIHZvaWQgc2N0cF9kaWFnX2dldF9pbmZvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsXFxubmV0L3NjdHAvZGlhZy5jLTQyNC1cXHRcXHRcXHQgICAgICAgdm9pZCAqaW5mbylcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz00Mzk9c3RhdGljIGludCBzY3RwX2RpYWdfZHVtcF9vbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTQ3Ny1cXG5uZXQvc2N0cC9kaWFnLmM6NDc4OnN0YXRpYyB2b2lkIHNjdHBfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG5uZXQvc2N0cC9kaWFnLmMtNDc5LVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyKVxcbi0tXFxubmV0L3NjdHAvZGlhZy5jPTUzNz1zdGF0aWMgaW50IF9faW5pdCBzY3RwX2RpYWdfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTU0MS1cXG5uZXQvc2N0cC9kaWFnLmM6NTQyOnN0YXRpYyB2b2lkIF9fZXhpdCBzY3RwX2RpYWdfZXhpdCh2b2lkKVxcbm5ldC9zY3RwL2RpYWcuYy01NDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNToxOS43MjIyOTc1MjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3OTA0NDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNDVFAgRGlhZ25vc3RpYyBIYW5kbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBTQ1RQIGRpYWdub3N0aWMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGUgZnVuY3Rpb24gcmVnaXN0cmF0aW9uLiBJdCAqbG9va3MqIGxpa2UgYWxsIHRoZSBmdW5jdGlvbnMgbWlnaHQgYmUgc3RhdGljLCByaWdodD8gVGhleSdyZSByZWdpc3RlcmVkIHRocm91Z2ggYGluZXRfZGlhZ19yZWdpc3RlcihcdTAwMjZzY3RwX2RpYWdfaGFuZGxlcilgLCBhbmQgaW5pdGlhbGx5LCBJIGFzc3VtZWQgdGhhdCBpbXBsaWVkIHRoZXkgd2VyZSBhbGwgc3RhdGljLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLlxuXG5Ob3cgSSdtIHNlZWluZyB0aGF0IGBzY3RwX2RpYWdfZHVtcGAgYW5kIGBzY3RwX2RpYWdfZHVtcF9vbmVgICphcmUqIGluZGVlZCBzdGF0aWMuIEJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogdGhleSdyZSBhc3NpZ25lZCB0byBgc2N0cF9kaWFnX2hhbmRsZXIuZHVtcGAgYW5kIGBzY3RwX2RpYWdfaGFuZGxlci5kdW1wX29uZWAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gaXMgaGFwcGVuaW5nLlxuXG5BbHJpZ2h0LCBzbyBub3cgbXkgZm9jdXMgaXMgY2xlYXIuIFRvIHJlYWxseSB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgc2N0cF9kaWFnX2hhbmRsZXJgIHN0cnVjdHVyZSBpdHNlbGYuIEl0J3MgdGhlIGtleSB0byB1bmxvY2tpbmcgdGhpcyB3aG9sZSBkaWFnbm9zdGljIG1lY2hhbmlzbS4gTGV0IG1lIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MjQuMDAxMzQ0ODExWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1OTAzNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9kaWFnX2hhbmRsZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL2RpYWcuYz0zNzY9c3RhdGljIGludCBzY3RwX2VwX2R1bXAoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLCB2b2lkICpwKVxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTQyMS1cXG5uZXQvc2N0cC9kaWFnLmM6NDIyOi8qIGRlZmluZSB0aGUgZnVuY3Rpb25zIGZvciBzY3RwX2RpYWdfaGFuZGxlciovXFxubmV0L3NjdHAvZGlhZy5jLTQyMy1zdGF0aWMgdm9pZCBzY3RwX2RpYWdfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz00Nzg9c3RhdGljIHZvaWQgc2N0cF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L3NjdHAvZGlhZy5jLTUyNy1cXG5uZXQvc2N0cC9kaWFnLmM6NTI4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgc2N0cF9kaWFnX2hhbmRsZXIgPSB7XFxubmV0L3NjdHAvZGlhZy5jLTUyOS1cXHQub3duZXJcXHRcXHQgPSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz01Mzc9c3RhdGljIGludCBfX2luaXQgc2N0cF9kaWFnX2luaXQodm9pZClcXG5uZXQvc2N0cC9kaWFnLmMtNTM4LXtcXG5uZXQvc2N0cC9kaWFnLmM6NTM5OlxcdHJldHVybiBpbmV0X2RpYWdfcmVnaXN0ZXIoXFx1MDAyNnNjdHBfZGlhZ19oYW5kbGVyKTtcXG5uZXQvc2N0cC9kaWFnLmMtNTQwLX1cXG4tLVxcbm5ldC9zY3RwL2RpYWcuYz01NDI9c3RhdGljIHZvaWQgX19leGl0IHNjdHBfZGlhZ19leGl0KHZvaWQpXFxubmV0L3NjdHAvZGlhZy5jLTU0My17XFxubmV0L3NjdHAvZGlhZy5jOjU0NDpcXHRpbmV0X2RpYWdfdW5yZWdpc3RlcihcXHUwMDI2c2N0cF9kaWFnX2hhbmRsZXIpO1xcbm5ldC9zY3RwL2RpYWcuYy01NDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNToyNC4xMTA5Mzk5OTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc4Njc4NzIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBTQ1RQIERpYWdub3N0aWNzIGZvciBFZmZlY3RpdmUgQ292ZXJhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGJlc3QgdG8gaW1wcm92ZSBjb3ZlcmFnZSBmb3IgU0NUUCBkaWFnbm9zdGljcy4gU2luY2UgYHNjdHBfZGlhZ19kdW1wYCBhbmQgYHNjdHBfZGlhZ19kdW1wX29uZWAgYXJlIHN0YXRpYywgdGhlc2Ugc2hvdWxkIGFic29sdXRlbHkgYmUgdGhlIHByaW1hcnkgZm9jdXMgc3ltYm9scy4gSSBhbHNvIG5lZWQgdG8gaW5jbHVkZSBgaW5ldF9zY3RwX2RpYWdfZmlsbGAuIEknbSByZW1pbmRpbmcgbXlzZWxmIHRoYXQgc3l6a2FsbGVyIGNhbiByZXNvbHZlIHN0YXRpYyBzeW1ib2xzIGZvciBjb3ZlcmFnZSwgYnV0IGZvciB0cnVlIGZvY3VzLCBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBub24taW5saW5lZCBzeW1ib2xzLiBgc2N0cF9kaWFnX2R1bXBgIGFuZCBgc2N0cF9kaWFnX2R1bXBfb25lYCBhcmUgZGVmaW5pdGVseSBub3QgaW5saW5lZCBiZWNhdXNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgZXhwbGljaXRseSB0YWtlbi5cblxuTm93LCBsZXQncyBzZWUgYWJvdXQgYGluZXRfc2N0cF9kaWFnX2ZpbGxgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQncyBub3QgaW5saW5lZCwgc2luY2UgSSdtIHNlZWluZyBpdCBjYWxsZWQgZnJvbSBgc2N0cF9zb2NrX2R1bXBfb25lYCwgYHNjdHBfc29ja19kdW1wYCwgYW5kIGBzY3RwX2VwX2R1bXBgLiBCYXNlZCBvbiBpdHMgc2l6ZSBhbmQgdGhlIG11bHRpcGxlIGNhbGwgc2l0ZXMsIGl0J3MgbGlrZWx5IG5vdCBpbmxpbmVkLlxuXG5Pa2F5LCBsZXQgbWUgY29uZmlybSB0aGF0IGBzY3RwX2RpYWdfZHVtcGAgYW5kIGBzY3RwX2RpYWdfZHVtcF9vbmVgIGFyZSBhY3R1YWxseSB0aGUgbWFpbiBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgYG5ldC9zY3RwL2RpYWcuY2AgZm9yIHRob3NlIHN5bWJvbHMuIFllcywgY29uZmlybWVkLiBUaG9zZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHRoZSBTQ1RQIGRpYWdub3N0aWMgZnVuY3Rpb25zLlxuXG5Ob3csIGZvciB0aGUgY29uZmlncy4gSSBrbm93IEkgbmVlZCBgSVBfU0NUUGAgYW5kIGBJTkVUX1NDVFBfRElBR2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgYElORVRfRElBR2AgaXMgcmVxdWlyZWQuIEkga25vdyBpdCdzIHVzdWFsbHkgZW5hYmxlZC4gWWVzLCBpdCdzIGEgZGVwZW5kZW5jeSBvZiBgSU5FVF9TQ1RQX0RJQUdgLiBJIHNob3VsZCBpbmNsdWRlIGl0LlxuXG5IYW5nIG9uLiBJJ20ganVzdCBtYWtpbmcgc3VyZS4gSXMgYElORVRfRElBR2AgYSBtZW51Y29uZmlnIG9yIGNvbmZpZyBpdHNlbGY/IEkgc2hvdWxkIGNoZWNrIGBuZXQvaXB2NC9LY29uZmlnYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODM5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjI1OjMwLjg5NzczMDY1MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExOTQ3MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUX0RJQUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NDE5PWNvbmZpZyBJTkVUX1RVTk5FTFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MjItXFxubmV0L2lwdjQvS2NvbmZpZzo0MjM6Y29uZmlnIElORVRfRElBR1xcbm5ldC9pcHY0L0tjb25maWctNDI0LVxcdHRyaXN0YXRlIFxcXCJJTkVUOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTQ0Nz1jb25maWcgSU5FVF9SQVdfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00NTQtXFxubmV0L2lwdjQvS2NvbmZpZzo0NTU6Y29uZmlnIElORVRfRElBR19ERVNUUk9ZXFxubmV0L2lwdjQvS2NvbmZpZy00NTYtXFx0Ym9vbCBcXFwiSU5FVDogYWxsb3cgcHJpdmlsZWdlZCBwcm9jZXNzIHRvIGFkbWluaXN0cmF0aXZlbHkgY2xvc2Ugc29ja2V0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MjU6MzEuMDA5NjgyNTc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NjY0MTM0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0NUUCBEaWFnbm9zdGljIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIFNDVFAgZGlhZ25vc3RpY3MsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgbmV0bGluayBtZXNzYWdlcy4gUmlnaHQsIGBJTkVUX0RJQUdgIGlzIGRlZmluaXRlbHkgYSBjb3JlIGNvbmZpZ3VyYXRpb24gaXRlbSBoZXJlLiBBbmQgdG8gZW5hYmxlIHRoaXMgc3BlY2lmaWMgZGlhZ25vc3RpYyBmdW5jdGlvbmFsaXR5LCBJIG5lZWQgdG8gYmUgc3VyZSBgSVBfU0NUUGAsIGBJTkVUX1NDVFBfRElBR2AsIGFuZCBgSU5FVF9ESUFHYCBhcmUgYWxsIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuXG5cblRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgYHNjdHBfZGlhZ19kdW1wYCwgYHNjdHBfZGlhZ19kdW1wX29uZWAsIGFuZCBgaW5ldF9zY3RwX2RpYWdfZmlsbGAg4oCTIHRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIGhhbmRsaW5nIHRoZSBkYXRhIGNvbGxlY3Rpb24gYW5kIGZvcm1hdHRpbmcgZm9yIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2VzLlxuXG5UaGlzIHBhdGNoLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgU0NUUCBkaWFnbm9zdGljIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0J3Mgd29ydGggZnV6emluZyB0byBleHBsb3JlLCBwb3RlbnRpYWxseSBJIGNhbiBmaW5kIG90aGVyIGFyZWFzLlxuXG5Ob3csIGxldCdzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBjb2RlIGZpeCBpdHNlbGY6XG5cbmBgYGNcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxhZGRyLCBhZGRyZXNzX2xpc3QsIGxpc3QpIHtcbi1cdFx0bWVtY3B5KGluZm8sIFx1MDAyNmxhZGRyLVx1MDAzZWEsIHNpemVvZihsYWRkci1cdTAwM2VhKSk7XG4tXHRcdG1lbXNldChpbmZvICsgc2l6ZW9mKGxhZGRyLVx1MDAzZWEpLCAwLCBhZGRybGVuIC0gc2l6ZW9mKGxhZGRyLVx1MDAzZWEpKTtcbitcdFx0c2l6ZV90IGNvcHlfbGVuID0gbGFkZHItXHUwMDNlYS5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCA/XG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIDpcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpO1xuK1xuK1x0XHRtZW1zZXQoaW5mbywgMCwgYWRkcmxlbik7XG4rXHRcdG1lbWNweShpbmZvLCBcdTAwMjZsYWRkci1cdTAwM2VhLCBjb3B5X2xlbik7XG4gXHRcdGluZm8gKz0gYWRkcmxlbjtcbmBgYFxuXG5BaCwgeWVzLCBJIHNlZSBpdC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGRvaW5nIGEgYG1lbWNweWAgb2YgdGhlIHNvY2tldCBhZGRyZXNzIGFuZCB0aGVuIHplcm9pbmcgb3V0IHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gYGluZm9gLiBIb3dldmVyLCBpdCB3YXMgYXNzdW1pbmcgYSBmaXhlZCBzaXplIGZvciB0aGUgYWRkcmVzcyAoYHNpemVvZihsYWRkci1cdTAwM2VhKWApLiBUaGUgZml4IGNsZXZlcmx5IGNhbGN1bGF0ZXMgdGhlIGNvcnJlY3QgYGNvcHlfbGVuYCBiYXNlZCBvbiB0aGUgYWRkcmVzcyBmYW1pbHkgKElQdjQgb3IgSVB2NikgYW5kIHVzZXMgdGhhdCB0byBjb250cm9sIHRoZSBhbW91bnQgb2YgbWVtb3J5IGNvcGllZC4gQ3J1Y2lhbGx5LCB0aGUgY29kZSBub3cgemVyb2VzIG91dCB0aGUgKmVudGlyZSogYGFkZHJsZW5gIHJlZ2lvbiBmaXJzdCBiZWZvcmUgY29weWluZy4gVGhhdCBlbGltaW5hdGVzIHRoZSByaXNrIG9mIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciBwYXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgZ29vZC5cblxuSSdtIGNvbmZpZGVudCB0aGlzIGlzIGEgdmFsaWQgYW5kIGltcG9ydGFudCBmaXguIEknbGwgZmxhZyB0aGlzIGFzIHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODAxLCJPdXRwdXRUb2tlbnMiOjEzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODoyNTozNy42NzYwOTk0NTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYxNjg0ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIixcbiAgICBcIklORVRfU0NUUF9ESUFHXCIsXG4gICAgXCJJTkVUX0RJQUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX2RpYWdfZHVtcFwiLFxuICAgIFwic2N0cF9kaWFnX2R1bXBfb25lXCIsXG4gICAgXCJpbmV0X3NjdHBfZGlhZ19maWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay9vdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBjb3B5aW5nIFNDVFAgc29ja2V0IGFkZHJlc3NlcyB0byB1c2Vyc3BhY2UgdmlhIHRoZSBuZXRsaW5rIGRpYWcgaW50ZXJmYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIixcbiAgICBcIklORVRfU0NUUF9ESUFHXCIsXG4gICAgXCJJTkVUX0RJQUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX2RpYWdfZHVtcFwiLFxuICAgIFwic2N0cF9kaWFnX2R1bXBfb25lXCIsXG4gICAgXCJpbmV0X3NjdHBfZGlhZ19maWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay9vdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBjb3B5aW5nIFNDVFAgc29ja2V0IGFkZHJlc3NlcyB0byB1c2Vyc3BhY2UgdmlhIHRoZSBuZXRsaW5rIGRpYWcgaW50ZXJmYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6j52p[1] Phase: Succeeded StartedAt: 2026-07-31 08:26:14 +0000 UTC FinishedAt: 2026-07-31 08:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 08:26:14 +0000 UTC FinishedAt: 2026-07-31 08:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2] Phase: Succeeded StartedAt: 2026-07-31 08:26:14 +0000 UTC FinishedAt: 2026-07-31 12:25:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 08:26:14 +0000 UTC FinishedAt: 2026-07-31 12:25:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 08:26:14 +0000 UTC FinishedAt: 2026-07-31 08:26:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 08:26:14 +0000 UTC FinishedAt: 2026-07-31 08:26:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6j52p/series-workflow6j52p-convert-artifact-3161795242/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 08:26:25 +0000 UTC FinishedAt: 2026-07-31 08:50:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 08:26:25 +0000 UTC FinishedAt: 2026-07-31 08:50:23 +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:*c13410a5-5e01-44de-b613-acb7a66a435c,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-workflow6j52p/series-workflow6j52p-convert-artifact-3161795242/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": "74e32a10-8a67-4789-8c70-79cad8b87eeb", "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-workflow6j52p/series-workflow6j52p-build-action-549102616/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 08:26:25 +0000 UTC FinishedAt: 2026-07-31 08:50:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c13410a5-5e01-44de-b613-acb7a66a435c,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-workflow6j52p/series-workflow6j52p-convert-artifact-3161795242/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": "74e32a10-8a67-4789-8c70-79cad8b87eeb", "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-workflow6j52p/series-workflow6j52p-build-action-549102616/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 08:50:23 +0000 UTC FinishedAt: 2026-07-31 08:50:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 08:50:23 +0000 UTC FinishedAt: 2026-07-31 08:50:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 08:50:23 +0000 UTC FinishedAt: 2026-07-31 08:51:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 08:50:23 +0000 UTC FinishedAt: 2026-07-31 08:50:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6j52p/series-workflow6j52p-convert-artifact-1626233285/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 08:51:04 +0000 UTC FinishedAt: 2026-07-31 08:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 08:51:04 +0000 UTC FinishedAt: 2026-07-31 08:52:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*74e32a10-8a67-4789-8c70-79cad8b87eeb,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-workflow6j52p/series-workflow6j52p-build-action-549102616/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-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 08:52:58 +0000 UTC FinishedAt: 2026-07-31 08:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 08:52:58 +0000 UTC FinishedAt: 2026-07-31 08:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 08:52:58 +0000 UTC FinishedAt: 2026-07-31 09:20:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 08:52:58 +0000 UTC FinishedAt: 2026-07-31 09:20:07 +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:*c13410a5-5e01-44de-b613-acb7a66a435c,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-workflow6j52p/series-workflow6j52p-convert-artifact-1626233285/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": "5330a920-0760-46eb-8d2c-2c003e0a4825", "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-workflow6j52p/series-workflow6j52p-build-action-3468279313/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 08:52:58 +0000 UTC FinishedAt: 2026-07-31 09:19:52 +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:*c13410a5-5e01-44de-b613-acb7a66a435c,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-workflow6j52p/series-workflow6j52p-convert-artifact-1626233285/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": "5330a920-0760-46eb-8d2c-2c003e0a4825", "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-workflow6j52p/series-workflow6j52p-build-action-3468279313/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 09:20:07 +0000 UTC FinishedAt: 2026-07-31 09:20:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 09:20:07 +0000 UTC FinishedAt: 2026-07-31 09:20:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 09:20:07 +0000 UTC FinishedAt: 2026-07-31 09:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 09:20:07 +0000 UTC FinishedAt: 2026-07-31 09:21:47 +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:*5330a920-0760-46eb-8d2c-2c003e0a4825,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-workflow6j52p/series-workflow6j52p-build-action-3468279313/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-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 09:22:11 +0000 UTC FinishedAt: 2026-07-31 12:25:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 09:22:11 +0000 UTC FinishedAt: 2026-07-31 12:25:26 +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":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"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:*74e32a10-8a67-4789-8c70-79cad8b87eeb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5330a920-0760-46eb-8d2c-2c003e0a4825,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-workflow6j52p/series-workflow6j52p-build-action-549102616/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-workflow6j52p/series-workflow6j52p-build-action-3468279313/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 09:22:11 +0000 UTC FinishedAt: 2026-07-31 09:22:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 09:22:11 +0000 UTC FinishedAt: 2026-07-31 09:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 09:22:11 +0000 UTC FinishedAt: 2026-07-31 09:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 09:22:12 +0000 UTC FinishedAt: 2026-07-31 09:22:18 +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":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"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-workflow6j52p/series-workflow6j52p-convert-artifact-446388042/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 09:22:13 +0000 UTC FinishedAt: 2026-07-31 09:22:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 09:22:34 +0000 UTC FinishedAt: 2026-07-31 12:25:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j52p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_diag_dump","sctp_diag_dump_one","inet_sctp_diag_fill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET_SCTP_DIAG","INET_DIAG"],"series_id":"49551097-9ef8-45e4-bd30-de739b655142","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 09:22:35 +0000 UTC FinishedAt: 2026-07-31 12:25:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*74e32a10-8a67-4789-8c70-79cad8b87eeb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5330a920-0760-46eb-8d2c-2c003e0a4825,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-workflow6j52p/series-workflow6j52p-build-action-549102616/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-workflow6j52p/series-workflow6j52p-build-action-3468279313/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-workflow6j52p/series-workflow6j52p-convert-artifact-446388042/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,}