Name: series-workflow7xqmz Phase: Succeeded StartedAt: 2026-09-04 16:12:24 +0000 UTC FinishedAt: 2026-09-04 19:03:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[0] Phase: Succeeded StartedAt: 2026-09-04 16:12:24 +0000 UTC FinishedAt: 2026-09-04 17:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 16:12:24 +0000 UTC FinishedAt: 2026-09-04 17:24:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_DUP_IPV4", "NF_DUP_IPV6", "NFT_DUP_IPV4", "NFT_DUP_IPV6", "NETFILTER_XT_TARGET_TEE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_DUP_IPV4", "NF_DUP_IPV6", "NFT_DUP_IPV4", "NFT_DUP_IPV6", "NETFILTER_XT_TARGET_TEE" ], "series_id": "f7d3a499-8077-4f54-8d34-2256f1769892" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_dup_ipv4", "nf_dup_ipv6" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0RVUF9JUFY0JiMzNDssCiAgICAmIzM0O05GX0RVUF9JUFY2JiMzNDssCiAgICAmIzM0O05GVF9EVVBfSVBWNCYjMzQ7LAogICAgJiMzNDtORlRfRFVQX0lQVjYmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9URUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9kdXBfaXB2NCYjMzQ7LAogICAgJiMzNDtuZl9kdXBfaXB2NiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBwZXJtaXNzaW9uL25hbWVzcGFjZSBjaGVjayAoYG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9uc2ApIHRvIGBuZl9kdXBfaXB2NCgpYCBhbmQgYG5mX2R1cF9pcHY2KClgIHRvIHJldHVybiBlYXJseSB3aGVuIGNhbGxlZCBmcm9tIGEgbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2UuXG5cblRoaXMgY2hhbmdlOlxuMS4gRG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBhbnkgc3RhY2svaGVhcCBidWZmZXJzIG9yIGRhdGEgc3RydWN0dXJlcy5cbjIuIERvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3QgcGFkZGluZyB0byB1c2VyIHNwYWNlLlxuMy4gRG9lcyBub3QgbW9kaWZ5IGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBjb250cm9sIGZsb3cgaW4gYW55IHdheSB0aGF0IHdvdWxkIHBlcm1pdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0ZmlsdGVyIHBhY2tldCBkdXBsaWNhdGlvbiBsb2dpYyBpbiBuZl9kdXBfaXB2NCBhbmQgbmZfZHVwX2lwdjYgdG8gcmVzdHJpY3QgZXhlY3V0aW9uIHRvIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlIChuZXQtXHUwMDNldXNlcl9ucyA9PSBcdTAwMjZpbml0X3VzZXJfbnMpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBjb250cm9sIGZsb3cgZm9yIG5mdGFibGVzIChuZnRfZHVwKSBhbmQgeHRhYmxlcyAoeHRfVEVFKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gbmV0d29yayBuYW1lc3BhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDQ2NjNjMzQ4ODU4MWJhZWQ0NjAzNTA3MDJmYjJhNWExNzM1Zjg4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTc6MjM6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuaW5kZXggOWE3NzM1MDJmMTBhYy4uYzMzZGFlMjQ4YzQ3NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuQEAgLTUzLDYgJiM0Mzs1Myw5IEBAIHZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcbiYjNDM7XHRpZiAobmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiBcdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSlcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xuaW5kZXggNmRhMzEwMmI3YzFiMy4uYTVmNmYwNzRhN2U5MSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xuQEAgLTQ3LDYgJiM0Mzs0Nyw5IEBAIHN0YXRpYyBib29sIG5mX2R1cF9pcHY2X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gXHRcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxuIHtcbiYjNDM7XHRpZiAobmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiBcdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSlcbiBcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRFVQX0lQVjQmIzM0OywKICAgICYjMzQ7TkZfRFVQX0lQVjYmIzM0OywKICAgICYjMzQ7TkZUX0RVUF9JUFY0JiMzNDssCiAgICAmIzM0O05GVF9EVVBfSVBWNiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX1RFRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2R1cF9pcHY0JiMzNDssCiAgICAmIzM0O25mX2R1cF9pcHY2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMgaW4gbmZfZHVwX2lwdjQgYW5kIG5mX2R1cF9pcHY2IHRvIHJlc3RyaWN0IGV4ZWN1dGlvbiB0byB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAobmV0LVx1MDAzZXVzZXJfbnMgPT0gXHUwMDI2aW5pdF91c2VyX25zKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgY29udHJvbCBmbG93IGZvciBuZnRhYmxlcyAobmZ0X2R1cCkgYW5kIHh0YWJsZXMgKHh0X1RFRSkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIG5ldHdvcmsgbmFtZXNwYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ0NjYzYzM0ODg1ODFiYWVkNDYwMzUwNzAyZmIyYTVhMTczNWY4OGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDE3OjIzOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYwppbmRleCA5YTc3MzUwMmYxMGFjLi5jMzNkYWUyNDhjNDc3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYwpAQCAtNTMsNiAmIzQzOzUzLDkgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLAogewogCXN0cnVjdCBpcGhkciAqaXBoOwogCiYjNDM7CWlmIChuZXQtJmd0O3VzZXJfbnMgIT0gJmFtcDtpbml0X3VzZXJfbnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWlmIChjdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYwppbmRleCA2ZGEzMTAyYjdjMWIzLi5hNWY2ZjA3NGE3ZTkxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYwpAQCAtNDcsNiAmIzQzOzQ3LDkgQEAgc3RhdGljIGJvb2wgbmZfZHVwX2lwdjZfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLAogCQkgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZikKIHsKJiM0MzsJaWYgKG5ldC0mZ3Q7dXNlcl9ucyAhPSAmYW1wO2luaXRfdXNlcl9ucykKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJaWYgKGN1cnJlbnQtJmd0O2luX25mX2R1cGxpY2F0ZSkKIAkJZ290byBvdXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIEZpbHRlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IGltcHJlc3Npb24gaXMgYWx3YXlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGJlaW5nIHRvdWNoZWQuIFdlJiMzOTt2ZSBnb3QgbW9kaWZpY2F0aW9ucyBpbiBgbmZfZHVwX2lwdjQuY2AgYW5kIGBuZl9kdXBfaXB2Ni5jYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbmV0d29yayBmaWx0ZXJpbmcsIHNwZWNpZmljYWxseSBJUHY0IGFuZCBJUHY2IGR1cGxpY2F0aW9uLCBsaWtlbHkgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBUaGUgZmlsZSBuYW1lcyB0aGVtc2VsdmVzIGFyZSBmYWlybHkgZXhwbGljaXQuCgpOb3csIHRob3NlIGNvZGUgY2hhbmdlc+KApiB0aGV5JiMzOTtyZSBhZGRpbmcgYSBjaGVjazogYGlmIChuZXQtJmd0O3VzZXJfbnMgIT0gJmFtcDtpbml0X3VzZXJfbnMpIHJldHVybjtgIGluIGJvdGggZmlsZXMuIFRoaXMgbG9va3MgbGlrZSBhIG5hbWVzcGFjZSByZXN0cmljdGlvbi4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIGNvZGUgZnJvbSBydW5uaW5nIGlmIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBpc24mIzM5O3QgdGhlIGluaXRpYWwgb25lIChgaW5pdF91c2VyX25zYCkuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZSBkdXBsaWNhdGlvbiBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIHJlc3RyaWN0ZWQgdG8gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UuIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGV5JiMzOTt2ZSBkb25lIHRoaXMuIFdoYXQmIzM5O3MgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbj8gT3IgaXMgaXQgc2ltcGx5IGEgbWF0dGVyIG9mIHJlc291cmNlIGNvbnRyb2w/IFdoYXQmIzM5O3MgdGhlIGludGVuZGVkIHVzZSBjYXNlPwoKVG8gZ2V0IGEgYmV0dGVyIGdyaXAgb24gdGhpcywgSSBuZWVkIGNvbnRleHQuIExldCBtZSBmaXJlIHVwIGBncmVwcGVyYCAob3IsIGlmIGl0JiMzOTtzIG1vcmUgY29udmVuaWVudCwgYHJlYWQtZmlsZWApIGFuZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgbWlnaHQgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBmdW5jdGlvbmFsaXR5LCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi4gVGhlIGdvYWwgaXMgdG8gc2VlIHdoZXJlIHRoZXNlIGZpbGVzIGFyZSB1c2VkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGlmIHRoaXMgY2hhbmdlIGhhcyBhbnkgd2lkZXIgaW1wYWN0IG9uIE5ldGZpbHRlciBhcyBhIHdob2xlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgYmVmb3JlIEkgY2FuIHJlYWxseSBhc3Nlc3MgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHBhdGNoIGFuZCB3aGV0aGVyIGl0JiMzOTtzIGltcGxlbWVudGVkIGNvcnJlY3RseS4gVGhpcyBuYW1lc3BhY2UgY2hlY2sgaXMgc2ltcGxlIGVub3VnaCBvbiBpdHMgb3duLCBidXQgdGhlICp3aHkqIGlzIGFsd2F5cyBtb3JlIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9kdXBfaXB2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz03Mj1jb25maWcgTkZfRFVQX0lQVjRcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy03NS1cdGhlbHBcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjc2Olx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBuZl9kdXBfaXB2NCBjb3JlLCB3aGljaCBkdXBsaWNhdGVzIGFuIElQdjRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTc3LVx0ICBwYWNrZXQgdG8gYmUgcmVyb3V0ZWQgdG8gYW5vdGhlciBkZXN0aW5hdGlvbi5cbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU9NTE9b2JqLSQoQ09ORklHX0lQX05GX0FSUEZJTFRFUikgJiM0Mzs9IGFycHRhYmxlX2ZpbHRlci5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTItXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTM6b2JqLSQoQ09ORklHX05GX0RVUF9JUFY0KSAmIzQzOz0gbmZfZHVwX2lwdjQub1xubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTU0LVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTE4LSNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzoxOTojaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfZHVwX2lwdjQuaFx1MDAzZVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMjAtI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0yMy1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjI0OnN0YXRpYyBib29sIG5mX2R1cF9pcHY0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTI1LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpndywgaW50IG9pZilcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy01MC1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjUxOnZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTUyLVx0XHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTkwLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6OTE6XHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy05Mi1cdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTEwMC19XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzoxMDE6RVhQT1JUX1NZTUJPTF9HUEwobmZfZHVwX2lwdjQpO1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMTAyLVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jPTEwND1NT0RVTEVfQVVUSE9SKFwmIzM0O0phbiBFbmdlbGhhcmR0IFx1MDAzY2plbmdlbGhAbWVkb3phcy5kZVx1MDAzZVwmIzM0Oyk7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzoxMDU6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O25mX2R1cF9pcHY0OiBEdXBsaWNhdGUgSVB2NCBwYWNrZXRcJiMzNDspO1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMTA2LU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jLTEyLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcdTAwM2Vcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYzoxMzojaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfZHVwX2lwdjQuaFx1MDAzZVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jLTE0LVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYz0yMD1zdGF0aWMgdm9pZCBuZnRfZHVwX2lwdjRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jLTI5LVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jOjMwOlx0bmZfZHVwX2lwdjQobmZ0X25ldChwa3QpLCBwa3QtXHUwMDNlc2tiLCBuZnRfaG9vayhwa3QpLCBcdTAwMjZndywgb2lmKTtcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYy0zMS19XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NjE9Y29uZmlnIE5GX0RVUF9JUFY2XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNjQtXHRoZWxwXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo2NTpcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbmZfZHVwX2lwdjYgY29yZSwgd2hpY2ggZHVwbGljYXRlcyBhbiBJUHY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02Ni1cdCAgcGFja2V0IHRvIGJlIHJlcm91dGVkIHRvIGFub3RoZXIgZGVzdGluYXRpb24uXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19ORl9SRUpFQ1RfSVBWNikgJiM0Mzs9IG5mX3JlamVjdF9pcHY2Lm9cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0yMy1cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTkZfRFVQX0lQVjYpICYjNDM7PSBuZl9kdXBfaXB2Ni5vXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMjUtXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtMTMtI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXHUwMDNlXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYzoxNDojaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfZHVwX2lwdjYuaFx1MDAzZVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtMTUtI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy0xOC1cbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jOjE5OnN0YXRpYyBib29sIG5mX2R1cF9pcHY2X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jLTIwLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNDYtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYzo0Nzp2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy00OC1cdFx0IGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNjgtXHR9XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYzo2OTpcdGlmIChuZl9kdXBfaXB2Nl9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jLTcwLVx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNzgtfVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmM6Nzk6RVhQT1JUX1NZTUJPTF9HUEwobmZfZHVwX2lwdjYpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtODAtXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmM9ODI9TU9EVUxFX0FVVEhPUihcJiMzNDtKYW4gRW5nZWxoYXJkdCBcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcdTAwM2VcJiMzNDspO1xubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmM6ODM6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O25mX2R1cF9pcHY2OiBJUHY2IHBhY2tldCBkdXBsaWNhdGlvblwmIzM0Oyk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy04NC1NT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZHVwX2lwdjYuYy0xMi0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXHUwMDNlXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmM6MTM6I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY2L25mX2R1cF9pcHY2LmhcdTAwM2Vcbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZHVwX2lwdjYuYy0xNC1cbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmM9MjA9c3RhdGljIHZvaWQgbmZ0X2R1cF9pcHY2X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZHVwX2lwdjYuYy0yNy1cbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZHVwX2lwdjYuYzoyODpcdG5mX2R1cF9pcHY2KG5mdF9uZXQocGt0KSwgcGt0LVx1MDAzZXNrYiwgbmZ0X2hvb2socGt0KSwgZ3csIG9pZik7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmMtMjktfVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtMTYtI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmM6MTc6I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmM6MTg6I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY2L25mX2R1cF9pcHY2LmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL3h0X1RFRS5oXHUwMDNlXG4tLVxubmV0L25ldGZpbHRlci94dF9URUUuYz0zNz10ZWVfdGc0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTQxLVxubmV0L25ldGZpbHRlci94dF9URUUuYzo0MjpcdG5mX2R1cF9pcHY0KHh0X25ldChwYXIpLCBza2IsIHh0X2hvb2tudW0ocGFyKSwgXHUwMDI2aW5mby1cdTAwM2Vndy5pbiwgb2lmKTtcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNDMtXG4tLVxubmV0L25ldGZpbHRlci94dF9URUUuYz00OT10ZWVfdGc2KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTUzLVxubmV0L25ldGZpbHRlci94dF9URUUuYzo1NDpcdG5mX2R1cF9pcHY2KHh0X25ldChwYXIpLCBza2IsIHh0X2hvb2tudW0ocGFyKSwgXHUwMDI2aW5mby1cdTAwM2Vndy5pbjYsIG9pZik7XG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNDAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgUGFja2V0IER1cGxpY2F0aW9uIGluIE5ldGZpbHRlcioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgTmV0ZmlsdGVyIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgSVB2NCBhbmQgSVB2NiBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHJlYWQtZmlsZWAgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBkdXBsaWNhdGlvbiBmdW5jdGlvbmFsaXR5LiBJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgYG5mX2R1cF9pcHY0LmNgIGluIGBuZXQvaXB2NC9uZXRmaWx0ZXIvYCBhbmQgdGhlbiBtb3ZlIG9uIHRvIHRoZSBgbmZfZHVwX2lwdjYuY2AgY291bnRlcnBhcnQgbG9jYXRlZCBpbiBgbmV0L2lwdjYvbmV0ZmlsdGVyL2AuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBhbGdvcml0aG1zIGVtcGxveWVkIGFuZCBhbnkgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgSVB2NCBhbmQgSVB2NiBoYW5kbGluZy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBvcmlnaW5hbCBwYWNrZXRzIGFyZSBkdXBsaWNhdGVkLCBob3cgdGhlIG5ldyBwYWNrZXRzIGFyZSBpbmplY3RlZCBpbnRvIHRoZSBuZXR3b3JrIHN0YWNrLCBhbmQgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBlZGdlIGNhc2VzLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgcGFja2V0IGR1cGxpY2F0aW9uIGlzIGltcGxlbWVudGVkIGF0IHRoZSBOZXRmaWx0ZXIgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcdGlmIChJU19FUlIocnQpKVxuICA0MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDQyOlx0XG4gIDQzOlx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbiAgNDQ6XHRcdHNrYl9kc3Rfc2V0KHNrYiwgXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiAgNDU6XHRcdHNrYi1cdTAwM2VkZXYgICAgICA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4gIDQ2Olx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4gIDQ3Olx0XG4gIDQ4Olx0XHRyZXR1cm4gdHJ1ZTtcbiAgNDk6XHR9XG4gIDUwOlx0XG4gIDUxOlx0dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuICA1MjpcdFx0XHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxuICA1MzpcdHtcbiAgNTQ6XHRcdHN0cnVjdCBpcGhkciAqaXBoO1xuICA1NTpcdFxuICA1NjpcdFx0aWYgKG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucylcbiAgNTc6XHRcdFx0cmV0dXJuO1xuICA1ODpcdFxuICA1OTpcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuICA2MDpcdFx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlKVxuICA2MTpcdFx0XHRnb3RvIG91dDtcbiAgNjI6XHRcdC8qXG4gIDYzOlx0XHQgKiBDb3B5IHRoZSBza2IsIGFuZCByb3V0ZSB0aGUgY29weS4gV2lsbCBsYXRlciByZXR1cm4gJVhUX0NPTlRJTlVFIGZvclxuICA2NDpcdFx0ICogdGhlIG9yaWdpbmFsIHNrYiwgd2hpY2ggc2hvdWxkIGNvbnRpbnVlIG9uIGl0cyB3YXkgYXMgaWYgbm90aGluZyBoYXNcbiAgNjU6XHRcdCAqIGhhcHBlbmVkLiBUaGUgY29weSBzaG91bGQgYmUgaW5kZXBlbmRlbnRseSBkZWxpdmVyZWQgdG8gdGhlIGdhdGV3YXkuXG4gIDY2Olx0XHQgKi9cbiAgNjc6XHRcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xuICA2ODpcdFx0aWYgKHNrYiA9PSBOVUxMKVxuICA2OTpcdFx0XHRnb3RvIG91dDtcbiAgNzA6XHRcbiAgNzE6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuICA3MjpcdFx0LyogQXZvaWQgY291bnRpbmcgY2xvbmVkIHBhY2tldHMgdG93YXJkcyB0aGUgb3JpZ2luYWwgY29ubmVjdGlvbi4gKi9cbiAgNzM6XHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4gIDc0Olx0XHRuZl9jdF9zZXQoc2tiLCBOVUxMLCBJUF9DVF9VTlRSQUNLRUQpO1xuICA3NTpcdCNlbmRpZlxuICA3NjpcdFx0LypcbiAgNzc6XHRcdCAqIElmIHdlIGFyZSBpbiBQUkVST1VUSU5HL0lOUFVULCBkZWNyZWFzZSB0aGUgVFRMIHRvIG1pdGlnYXRlIHBvdGVudGlhbFxuICA3ODpcdFx0ICogbG9vcHMgYmV0d2VlbiB0d28gaG9zdHMuXG4gIDc5Olx0XHQgKlxuICA4MDpcdFx0ICogU2V0ICVJUF9ERiBzbyB0aGF0IHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgbm90aWZpZWQgb2YgYSBwb3RlbnRpYWxseVxuICA4MTpcdFx0ICogZGVjcmVhc2VkIE1UVSBvbiB0aGUgY2xvbmUgcm91dGUuIElQdjYgZG9lcyB0aGlzIHRvby5cbiAgODI6XHRcdCAqXG4gIDgzOlx0XHQgKiBJUCBoZWFkZXIgY2hlY2tzdW0gd2lsbCBiZSByZWNhbGN1bGF0ZWQgYXQgaXBfbG9jYWxfb3V0LlxuICA4NDpcdFx0ICovXG4gIDg1Olx0XHRpcGggPSBpcF9oZHIoc2tiKTtcbiAgODY6XHRcdGlwaC1cdTAwM2VmcmFnX29mZiB8PSBodG9ucyhJUF9ERik7XG4gIDg3Olx0XHRpZiAoaG9va251bSA9PSBORl9JTkVUX1BSRV9ST1VUSU5HIHx8XG4gIDg4Olx0XHQgICAgaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX0lOKVxuICA4OTpcdFx0XHQtLWlwaC1cdTAwM2V0dGw7XG4gIDkwOlx0XG4gIDkxOlx0XHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG4gIDkyOlx0XHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gdHJ1ZTtcbiAgOTM6XHRcdFx0aXBfbG9jYWxfb3V0KG5ldCwgc2tiLVx1MDAzZXNrLCBza2IpO1xuICA5NDpcdFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xuICA5NTpcdFx0fSBlbHNlIHtcbiAgOTY6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDk3Olx0XHR9XG4gIDk4Olx0b3V0OlxuICA5OTpcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gMTAwOlx0fVxuIDEwMTpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2R1cF9pcHY0KTtcbiAxMDI6XHRcbiAxMDM6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O1NlYmFzdGlhbiBDbGHDn2VuIFx1MDAzY3NlYmFzdGlhbi5jbGFzc2VuQGZyZWVuZXQuYWdcdTAwM2VcJiMzNDspO1xuIDEwNDpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7SmFuIEVuZ2VsaGFyZHQgXHUwMDNjamVuZ2VsaEBtZWRvemFzLmRlXHUwMDNlXCYjMzQ7KTtcbiAxMDU6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7bmZfZHVwX2lwdjQ6IER1cGxpY2F0ZSBJUHY0IHBhY2tldFwmIzM0Oyk7XG4gMTA2Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDEzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgSVB2NiBEdXBsaWNhdGUgUGFja2V0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHBvdGVudGlhbCBpc3N1ZXMsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIEkmIzM5O20gY292ZXJpbmcgYWxsIHRoZSBiYXNlcyByZWxhdGVkIHRvIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gTXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIGhhcyBsZWQgbWUgZG93biB0aGlzIHBhdGgsIHNvIGl0JiMzOTtzIG9ubHkgbG9naWNhbCB0byBleHRlbmQgbXkgY2hlY2sgdG8gdGhlIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY2AgZmlsZSBhcyB3ZWxsLiBJdCYjMzk7cyBhbG1vc3QgZ3VhcmFudGVlZCB0aGVyZSBhcmUgY3JpdGljYWwgcGllY2VzIG9mIHRoZSBwdXp6bGUgd2FpdGluZyBmb3IgbXkgYW5hbHlzaXMgaGVyZS4gVGltZSB0byBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XHRza2JfZHN0X3NldChza2IsIGRzdCk7XG4gIDQxOlx0XHRza2ItXHUwMDNlZGV2ICAgICAgPSBkc3RfZGV2KGRzdCk7XG4gIDQyOlx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbiAgNDM6XHRcbiAgNDQ6XHRcdHJldHVybiB0cnVlO1xuICA0NTpcdH1cbiAgNDY6XHRcbiAgNDc6XHR2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gIDQ4Olx0XHRcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxuICA0OTpcdHtcbiAgNTA6XHRcdGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpXG4gIDUxOlx0XHRcdHJldHVybjtcbiAgNTI6XHRcbiAgNTM6XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiAgNTQ6XHRcdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSlcbiAgNTU6XHRcdFx0Z290byBvdXQ7XG4gIDU2Olx0XHRza2IgPSBwc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTtcbiAgNTc6XHRcdGlmIChza2IgPT0gTlVMTClcbiAgNTg6XHRcdFx0Z290byBvdXQ7XG4gIDU5Olx0XG4gIDYwOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcbiAgNjE6XHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4gIDYyOlx0XHRuZl9jdF9zZXQoc2tiLCBOVUxMLCBJUF9DVF9VTlRSQUNLRUQpO1xuICA2MzpcdCNlbmRpZlxuICA2NDpcdFx0aWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORyB8fFxuICA2NTpcdFx0ICAgIGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9JTikge1xuICA2NjpcdFx0XHRzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTtcbiAgNjc6XHRcdFx0LS1pcGgtXHUwMDNlaG9wX2xpbWl0O1xuICA2ODpcdFx0fVxuICA2OTpcdFx0aWYgKG5mX2R1cF9pcHY2X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xuICA3MDpcdFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XG4gIDcxOlx0XHRcdGlwNl9sb2NhbF9vdXQobmV0LCBza2ItXHUwMDNlc2ssIHNrYik7XG4gIDcyOlx0XHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XG4gIDczOlx0XHR9IGVsc2Uge1xuICA3NDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNzU6XHRcdH1cbiAgNzY6XHRvdXQ6XG4gIDc3Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiAgNzg6XHR9XG4gIDc5Olx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZHVwX2lwdjYpO1xuICA4MDpcdFxuICA4MTpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7U2ViYXN0aWFuIENsYcOfZW4gXHUwMDNjc2ViYXN0aWFuLmNsYXNzZW5AZnJlZW5ldC5hZ1x1MDAzZVwmIzM0Oyk7XG4gIDgyOlx0TU9EVUxFX0FVVEhPUihcJiMzNDtKYW4gRW5nZWxoYXJkdCBcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcdTAwM2VcJiMzNDspO1xuICA4MzpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtuZl9kdXBfaXB2NjogSVB2NiBwYWNrZXQgZHVwbGljYXRpb25cJiMzNDspO1xuICA4NDpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI4NgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZmlsdGVyIFBhY2tldCBEdXBsaWNhdGlvbiBBY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIGhlcmUuIFRoZXkmIzM5O3JlIGludm9rZWQgYnkgYG5mdF9kdXBfaXB2NF9ldmFsYCBhbmQgYG5mdF9kdXBfaXB2Nl9ldmFsYCwgd2hpY2ggYXJlIHBhcnQgb2YgbmZ0YWJsZXMmIzM5OyBgbmZ0X2R1cGAgbWVjaGFuaXNtLiBJJiMzOTttIGFsc28gc2VlaW5nIHRoZW0gY29ubmVjdGVkIHRvIGB0ZWVfdGc0YCBhbmQgYHRlZV90ZzZgLCB3aGljaCBhcmUgd2l0aGluIHRoZSBpcHRhYmxlcy9pcDZ0YWJsZXMgYHh0X1RFRWAgbW9kdWxlLiBTbywgZXNzZW50aWFsbHksIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gYWN0aW9ucyDigJMgdGhpbmdzIGxpa2UgYG5mdCBkdXAgdG8gLi4uYCBvciB0aGUgY2xhc3NpYyBgaXB0YWJsZXMgLWogVEVFYCBzeW50YXguCgpOb3csIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgc29tZSBjb250ZXh0LiBUaW1lIHRvIGhpdCB0aGUgZ2l0IGNvbW1pdCBsb2dzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb21taXQgbWVzc2FnZXMgc2hlZCBhbnkgbGlnaHQgb24gdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlc2Ugc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBmb3IgYW55IGhlbHBmdWwgYmFja2dyb3VuZCBvciBleHBsYW5hdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBhIHNwZWNpZmljIGNvbW1pdCBsaWtlIGA0NDY2M2MzNDg4NTgxYmFlZDQ2MDM1MDcwMmZiMmE1YTE3MzVmODhmYCwgb3IgYW55IHByZXZpb3VzIGNvbW1pdHMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gTWlnaHQgYmUgYmV0dGVyIHRvIGNoZWNrIGdpdCBsb2cgZm9yIHRoZSBhY3R1YWwgc291cmNlIGZpbGVzLCBsaWtlIGBuZl9kdXBfaXB2NC5jYCBhbmQgYG5mX2R1cF9pcHY2LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgbW9yZSBmb2N1c2VkIHZpZXcgb2YgdGhlIGNoYW5nZXMgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0RVUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9NDc9Y29uZmlnIE5GVF9EVVBfSVBWNFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQ5LVx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NTA6XHRzZWxlY3QgTkZfRFVQX0lQVjRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTUxLVx0aGVscFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTcwPWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy03MS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjcyOmNvbmZpZyBORl9EVVBfSVBWNFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNzMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTUxPW9iai0kKENPTkZJR19JUF9ORl9BUlBGSUxURVIpICYjNDM7PSBhcnB0YWJsZV9maWx0ZXIub1xubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTUyLVxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlOjUzOm9iai0kKENPTkZJR19ORl9EVVBfSVBWNCkgJiM0Mzs9IG5mX2R1cF9pcHY0Lm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS01NC1cbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgTkZUX0RVUF9JUFY2XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNDUtXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo0NjpcdHNlbGVjdCBORl9EVVBfSVBWNlxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNDctXHRoZWxwXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NTk9ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTYwLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6NjE6Y29uZmlnIE5GX0RVUF9JUFY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02Mi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBJUHY2IHBhY2tldCBkdXBsaWNhdGlvbiB0byBhbHRlcm5hdGUgZGVzdGluYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU9MjI9b2JqLSQoQ09ORklHX05GX1JFSkVDVF9JUFY2KSAmIzQzOz0gbmZfcmVqZWN0X2lwdjYub1xubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlLTIzLVxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORl9EVVBfSVBWNikgJiM0Mzs9IG5mX2R1cF9pcHY2Lm9cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0yNS1cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjYwPWlmIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjYyOmNvbmZpZyBORl9EVVBfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjYzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY2OD1jb25maWcgTkZUX0RVUF9ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjktXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9LY29uZmlnOjY3MDpcdHNlbGVjdCBORl9EVVBfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjcxLVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NzQ9Y29uZmlnIE5GVF9GV0RfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc1LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgcGFja2V0IGZvcndhcmRpbmcgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9LY29uZmlnOjY3NjpcdHNlbGVjdCBORl9EVVBfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc3LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMDU3PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX1RFRVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDYxLVx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgIUlQNl9ORl9JUFRBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjEwNjI6XHRzZWxlY3QgTkZfRFVQX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYzOlx0c2VsZWN0IE5GX0RVUF9JUFY2IGlmIElQNl9ORl9JUFRBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNjQtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT04MT1vYmotJChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkgJiM0Mzs9IG5mX2Nvbm5jb3VudC5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04My0jIGdlbmVyaWMgcGFja2V0IGR1cGxpY2F0aW9uIGZyb20gbmV0ZGV2IGZhbWlseVxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4NDpvYmotJChDT05GSUdfTkZfRFVQX05FVERFVilcdCYjNDM7PSBuZl9kdXBfbmV0ZGV2Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MDUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRHVwbGljYXRpb24gaW4gTmV0ZmlsdGVyKioKClJpZ2h0LCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG5ldHdvcmsgZHVwbGljYXRpb24gZnVuY3Rpb25hbGl0aWVzIHdpdGhpbiBOZXRmaWx0ZXIuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBgTkZfRFVQX05FVERFVmAgb3B0aW9uLCBhbmQgdGhlbiBJJiMzOTtsbCBmb2xsb3cgdGhhdCB1cCBieSBsb29raW5nIGF0IGhvdyBgTkZfRFVQX0lQVjRgIGFuZCBgTkZfRFVQX0lQVjZgIGNvbWUgaW50byBwbGF5LiBJJiMzOTttIHByZXR0eSBzdXJlIEkgcmVtZW1iZXIgdGhvc2UsIGJ1dCBhIHF1aWNrIHJldmlldyBuZXZlciBodXJ0cy4gTXkgaW1tZWRpYXRlIGZvY3VzLCB0aG91Z2gsIG5lZWRzIHRvIGJlIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGUgZmlyc3Qgb3B0aW9uLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGxvd2VyLWxldmVsIGFzcGVjdHMsIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCB0byB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBuZXQvbmV0ZmlsdGVyL25mX2R1cF9uZXRkZXYuY2AgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgY29yZSBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbml0X3VzZXJfbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz01MDQ2PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcF92c19jb250cm9sX25ldF9pbml0X3N5c2N0bChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTA1MS1cdHNpemVfdCBjdGxfdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUodnNfdmFycyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NTA1MjpcdGJvb2wgdW5wcml2ID0gbmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUwNTMtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYz01NDk9c3RhdGljIGludCBfX25ldF9pbml0IF9faXBfdnNfbGJsY19pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jLTU2NC1cdFx0LyogRG9uJiMzOTt0IGV4cG9ydCBzeXNjdGxzIHRvIHVucHJpdmlsZWdlZCB1c2VycyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYzo1NjU6XHRcdGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jLTU2Ni1cdFx0XHR2YXJzX3RhYmxlX3NpemUgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jPTczNT1zdGF0aWMgaW50IF9fbmV0X2luaXQgX19pcF92c19sYmxjcl9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYy03NTAtXHRcdC8qIERvbiYjMzk7dCBleHBvcnQgc3lzY3RscyB0byB1bnByaXZpbGVnZWQgdXNlcnMgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jOjc1MTpcdFx0aWYgKG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jLTc1Mi1cdFx0XHR2YXJzX3RhYmxlX3NpemUgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jPTE2OD1zdGF0aWMgdm9pZCBuZl9sb2dfZHVtcF9za191aWRfZ2lkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mX2xvZ19idWYgKm0sXG4tLVxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmMtMTg3LVx0XHRuZl9sb2dfYnVmX2FkZChtLCBcJiMzNDtVSUQ9JXUgR0lEPSV1IFwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jOjE4ODpcdFx0XHQgICAgICAgZnJvbV9rdWlkX211bmdlZChcdTAwMjZpbml0X3VzZXJfbnMsIGNyZWQtXHUwMDNlZnN1aWQpLFxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmM6MTg5Olx0XHRcdCAgICAgICBmcm9tX2tnaWRfbXVuZ2VkKFx1MDAyNmluaXRfdXNlcl9ucywgY3JlZC1cdTAwM2Vmc2dpZCkpO1xubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmMtMTkwLVx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NTY3PXN0YXRpYyBpbnQgbmZxbmxfcHV0X3NrX3VpZGdpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy01ODYtXHRcdGlmIChubGFfcHV0X2JlMzIoc2tiLCBORlFBX1VJRCxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NTg3Olx0XHQgICAgaHRvbmwoZnJvbV9rdWlkX211bmdlZChcdTAwMjZpbml0X3VzZXJfbnMsIGNyZWQtXHUwMDNlZnN1aWQpKSkpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTU4OC1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNTg5LVx0XHRpZiAobmxhX3B1dF9iZTMyKHNrYiwgTkZRQV9HSUQsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjU5MDpcdFx0ICAgIGh0b25sKGZyb21fa2dpZF9tdW5nZWQoXHUwMDI2aW5pdF91c2VyX25zLCBjcmVkLVx1MDAzZWZzZ2lkKSkpKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy01OTEtXHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNDI5PW5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpZmYpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNDMyLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNDMzOlx0aWYgKGUtXHUwMDNlc3RhdGUubmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNDM0LVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTczPXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE4MC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTgxOlx0aWYgKGN0eC1cdTAwM2VuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE4Mi1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jPTMzMj1zdGF0aWMgaW50IHJlY2VudF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcixcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jLTQwNy0jaWZkZWYgQ09ORklHX1BST0NfRlNcbm5ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmM6NDA4Olx0dWlkID0gbWFrZV9rdWlkKFx1MDAyNmluaXRfdXNlcl9ucywgaXBfbGlzdF91aWQpO1xubmV0L25ldGZpbHRlci94dF9yZWNlbnQuYzo0MDk6XHRnaWQgPSBtYWtlX2tnaWQoXHUwMDI2aW5pdF91c2VyX25zLCBpcF9saXN0X2dpZCk7XG5uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jLTQxMC1cdGlmICghdWlkX3ZhbGlkKHVpZCkgfHwgIWdpZF92YWxpZChnaWQpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTA5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogTmV0ZmlsdGVyIFBhY2tldCBEdXBsaWNhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGFkZGluZyBhIGNydWNpYWwgY2hlY2s6IGBpZiAobmV0LSZndDt1c2VyX25zICE9ICZhbXA7aW5pdF91c2VyX25zKSByZXR1cm47YCB0byB0aGUgYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gdGhpcyBjb2RlICphY3R1YWxseSogYmUgcmVhY2hlZCwgd2hpY2ggaXMgdGhlIGtleSBkZXRlcm1pbmFudCBoZXJlPwoKR29vZCEgSSBzZWUgdGhhdCB0b29scyBsaWtlIHN5emthbGxlciwgcnVubmluZyBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBjYW4gdHJpZ2dlciB0aGUgZXhlY3V0aW9uIHBhdGhzLiBUaGlzIGlzIGdyZWF0IG5ld3MuIFRoZSBjb2RlIHBhdGggKmlzKiByZWFjaGFibGUg4oCTIHdlIGtub3cgbmV0ZmlsdGVyIHBhY2tldCBkdXBsaWNhdGlvbiAoYG5mdF9kdXBfaXB2NGAsIGBuZnRfZHVwX2lwdjZgLCBgeHRfVEVFYCkgaXMgZXhlY3V0ZWQgaW4gYm90aCB0aGUgaW5pdGlhbCBhbmQgbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzLCB3aGljaCBtZWFucyB0aGF0IGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAgYXJlIGluZGVlZCBwYXJ0IG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcvbmV0ZmlsdGVyIHN1YnN5c3RlbXMuCgpTbywgdGhpcyBtb2RpZmljYXRpb24gKmFic29sdXRlbHkqIGNoYW5nZXMgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gYG5mX2R1cF9pcHY0KClgIGFuZCBgbmZfZHVwX2lwdjYoKWAhIEEgc2ltcGxlIGVhcmx5IHJldHVybiBpcyBhZGRlZCB0byBndWFyZCB0aGUgbG9naWMuCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgZ3VpZGVsaW5lczogVGhpcyBpcyBhIGRpcmVjdCBtb2RpZmljYXRpb24gdG8gcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIHN1YnN5c3RlbS4gVGhlIGd1aWRlbGluZXMgYXJlIGNyeXN0YWwgY2xlYXI6ICYjMzQ7V29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4mIzM0OyBNb3Jlb3ZlciwgdGhlIGd1aWRlbGluZXMgaGlnaGxpZ2h0IHRoYXQgZXZlbiByZWZhY3RvcmluZ3MsIGNvZGUgY2xlYW51cHMsIGFuZCBkZWZlbnNpdmUgY2hlY2tzIGluIHJlYWNoYWJsZSBjb2RlIHdhcnJhbnQgZnV6emluZywgYW5kIHRoaXMgaXMgYWxsIG9mIHRoZSBhYm92ZS4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY29uZGl0aW9uYWwgY2hlY2sgaW4gY3JpdGljYWwgbmV0d29ya2luZyBjb2RlLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggZGlyZWN0bHkgdG91Y2hlcyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSwgSSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGUgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGB0cnVlYC4gVGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24gYW5kIGZ1enppbmcuIE5vdywgbGV0JiMzOTtzIGludmVzdGlnYXRlIHRoZSBrZXJuZWwgY29uZmlncyBuZWVkZWQgdG8gY29tcGlsZSBhbmQgcmVhY2ggdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORl9EVVBfSVBWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz00Nz1jb25maWcgTkZUX0RVUF9JUFY0XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNDktXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDpcdHNlbGVjdCBORl9EVVBfSVBWNFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNTEtXHRoZWxwXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9NzA9ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTcxLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NzI6Y29uZmlnIE5GX0RVUF9JUFY0XG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy03My1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBJUHY0IHBhY2tldCBkdXBsaWNhdGlvbiB0byBhbHRlcm5hdGUgZGVzdGluYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU9NTE9b2JqLSQoQ09ORklHX0lQX05GX0FSUEZJTFRFUikgJiM0Mzs9IGFycHRhYmxlX2ZpbHRlci5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTItXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTM6b2JqLSQoQ09ORklHX05GX0RVUF9JUFY0KSAmIzQzOz0gbmZfZHVwX2lwdjQub1xubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTU0LVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTQzPWNvbmZpZyBORlRfRFVQX0lQVjZcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00NS1cdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjQ2Olx0c2VsZWN0IE5GX0RVUF9JUFY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00Ny1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz01OT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNjAtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo2MTpjb25maWcgTkZfRFVQX0lQVjZcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTYyLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfTkZfUkVKRUNUX0lQVjYpICYjNDM7PSBuZl9yZWplY3RfaXB2Ni5vXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMjMtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX05GX0RVUF9JUFY2KSAmIzQzOz0gbmZfZHVwX2lwdjYub1xubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlLTI1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMDU3PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX1RFRVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDYxLVx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgIUlQNl9ORl9JUFRBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjEwNjI6XHRzZWxlY3QgTkZfRFVQX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYzOlx0c2VsZWN0IE5GX0RVUF9JUFY2IGlmIElQNl9ORl9JUFRBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNjQtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjE0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBLZXJuZWwmIzM5O3MgRmlyZXdhbGwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmlyZXdhbGwgb3B0aW9ucyBhcmUgc3RydWN0dXJlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHN5c3RlbS4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZXMuIFRoZXNlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gcHJvY2VzcywgYW5kIEkmIzM5O20gYmV0dGluZyB0aGV5JiMzOTtsbCBjbGVhcmx5IHNob3cgbWUgdGhlIGVuY29tcGFzc2luZyBtZW51IHN0cnVjdHVyZSBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgbmV0ZmlsdGVyIG9wdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBvdmVyYWxsIG9yZ2FuaXphdGlvbiBsYWlkIG91dCBoZXJlLCB3aGljaCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgZm91bmRhdGlvbiBJIG5lZWQgdG8gcHJvcGVybHkgbmF2aWdhdGUgYW5kIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IG9wdGlvbnMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHNvIHRvIHNwZWFrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSVAgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudSBcJiMzNDtJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIE5GX0RFRlJBR19JUFY0XG4gIDEwOlx0XHR0cmlzdGF0ZVxuICAxMTpcdFx0ZGVmYXVsdCBuXG4gIDEyOlx0XG4gIDEzOlx0IyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxuICAxNDpcdGNvbmZpZyBJUF9ORl9JUFRBQkxFU19MRUdBQ1lcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBJUCB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbiAgMTc6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcbiAgMTg6XHRcdGRlZmF1bHRcdG0gaWYgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG4gIDE5Olx0XHRoZWxwXG4gIDIwOlx0XHQgIGlwdGFibGVzIGlzIGEgbGVnYWN5IHBhY2tldCBjbGFzc2lmaWVyLlxuICAyMTpcdFx0ICBUaGlzIGlzIG5vdCBuZWVkZWQgaWYgeW91IGFyZSB1c2luZyBpcHRhYmxlcyBvdmVyIG5mdGFibGVzXG4gIDIyOlx0XHQgIChpcHRhYmxlcy1uZnQpLlxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBORl9TT0NLRVRfSVBWNFxuICAyNTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVB2NCBzb2NrZXQgbG9va3VwIHN1cHBvcnRcJiMzNDtcbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgSVB2NCBzb2NrZXQgbG9va3VwIGluZnJhc3RydWN0dXJlLiBUaGlzIGlzXG4gIDI4Olx0XHQgIGlzIHJlcXVpcmVkIGJ5IHRoZSB7aXAsbmZ9dGFibGVzIHNvY2tldCBtYXRjaC5cbiAgMjk6XHRcbiAgMzA6XHRjb25maWcgTkZfVFBST1hZX0lQVjRcbiAgMzE6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjQgdHByb3h5IHN1cHBvcnRcJiMzNDtcbiAgMzI6XHRcbiAgMzM6XHRpZiBORl9UQUJMRVNcbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgTkZfVEFCTEVTX0lQVjRcbiAgMzY6XHRcdGJvb2wgXCYjMzQ7SVB2NCBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuICAzNzpcdFx0aGVscFxuICAzODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBJUHY0IHN1cHBvcnQgZm9yIG5mX3RhYmxlcy5cbiAgMzk6XHRcbiAgNDA6XHRpZiBORl9UQUJMRVNfSVBWNFxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBORlRfUkVKRUNUX0lQVjRcbiAgNDM6XHRcdHNlbGVjdCBORl9SRUpFQ1RfSVBWNFxuICA0NDpcdFx0ZGVmYXVsdCBORlRfUkVKRUNUXG4gIDQ1Olx0XHR0cmlzdGF0ZVxuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBORlRfRFVQX0lQVjRcbiAgNDg6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjQgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gIDQ5Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG4gIDUwOlx0XHRzZWxlY3QgTkZfRFVQX0lQVjRcbiAgNTE6XHRcdGhlbHBcbiAgNTI6XHRcdCAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY0IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0IGZvciBuZl90YWJsZXMuXG4gIDUzOlx0XG4gIDU0Olx0Y29uZmlnIE5GVF9GSUJfSVBWNFxuICA1NTpcdFx0c2VsZWN0IE5GVF9GSUJcbiAgNTY6XHRcdHRyaXN0YXRlIFwmIzM0O25mX3RhYmxlcyBmaWIgLyBpcCByb3V0ZSBsb29rdXAgc3VwcG9ydFwmIzM0O1xuICA1NzpcdFx0aGVscFxuICA1ODpcdFx0ICBUaGlzIG1vZHVsZSBlbmFibGVzIElQdjQgRklCIGxvb2t1cHMsIGUuZy4gZm9yIHJldmVyc2UgcGF0aCBmaWx0ZXJpbmcuXG4gIDU5Olx0XHQgIEl0IGFsc28gYWxsb3dzIHF1ZXJ5IG9mIHRoZSBGSUIgZm9yIHRoZSByb3V0ZSB0eXBlLCBlLmcuIGxvY2FsLCB1bmljYXN0LFxuICA2MDpcdFx0ICBtdWx0aWNhc3Qgb3IgYmxhY2tob2xlLlxuICA2MTpcdFxuICA2MjpcdGVuZGlmICMgTkZfVEFCTEVTX0lQVjRcbiAgNjM6XHRcbiAgNjQ6XHRjb25maWcgTkZfVEFCTEVTX0FSUFxuICA2NTpcdFx0Ym9vbCBcJiMzNDtBUlAgbmZfdGFibGVzIHN1cHBvcnRcJiMzNDtcbiAgNjY6XHRcdHNlbGVjdCBORVRGSUxURVJfRkFNSUxZX0FSUFxuICA2NzpcdFx0aGVscFxuICA2ODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBBUlAgc3VwcG9ydCBmb3IgbmZfdGFibGVzLlxuICA2OTpcdFxuICA3MDpcdGVuZGlmICMgTkZfVEFCTEVTXG4gIDcxOlx0XG4gIDcyOlx0Y29uZmlnIE5GX0RVUF9JUFY0XG4gIDczOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXCYjMzQ7XG4gIDc0Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG4gIDc1Olx0XHRoZWxwXG4gIDc2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG5mX2R1cF9pcHY0IGNvcmUsIHdoaWNoIGR1cGxpY2F0ZXMgYW4gSVB2NFxuICA3NzpcdFx0ICBwYWNrZXQgdG8gYmUgcmVyb3V0ZWQgdG8gYW5vdGhlciBkZXN0aW5hdGlvbi5cbiAgNzg6XHRcbiAgNzk6XHRjb25maWcgTkZfTE9HX0FSUFxuICA4MDpcdFx0dHJpc3RhdGUgXCYjMzQ7QVJQIHBhY2tldCBsb2dnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDU4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBJUHY2IE5ldGZpbHRlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBuZXR3b3JrIGZpbHRlcmluZywgYW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIElQdjYgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24uIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AgaXMgYSBrZXkgZmlsZS4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIElQdjYgTmV0ZmlsdGVyIG9wdGlvbnMgYXJlIGRlZmluZWQgYW5kIGV4cG9zZWQgdG8gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKmNvbmZpZ3VyYWJsZSogYXQgY29tcGlsZSB0aW1lLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIG1hY3JvcyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHdoaWNoIElQdjYgTmV0ZmlsdGVyIGZlYXR1cmVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgaW1hZ2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIG1vZHVsZXMsIHdob2xlIHN1YnN5c3RlbXMsIG9yIGp1c3QgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3M/IFRoZSBzcGVjaWZpY3Mgd2lsbCBkaWN0YXRlIGhvdyBOZXRmaWx0ZXIgaW50ZXJhY3RzIHdpdGggSVB2NiB0cmFmZmljLiBJIGtub3cgdGhpcyBmaWxlIGlzIGdvaW5nIHRvIGJlIG15IHN0YXJ0aW5nIHBvaW50IGluIHRoZSBjb2RlYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIElQIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnUgXCYjMzQ7SVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSVBWNiBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG4gICA4Olx0XG4gICA5Olx0IyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxuICAxMDpcdGNvbmZpZyBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXG4gIDExOlx0XHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgSVA2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4gIDEyOlx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElQVjYgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU1xuICAxNDpcdFx0ZGVmYXVsdFx0bSBpZiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbiAgMTU6XHRcdGhlbHBcbiAgMTY6XHRcdCAgaXA2dGFibGVzIGlzIGEgbGVnYWN5IHBhY2tldCBjbGFzc2lmaWVyLlxuICAxNzpcdFx0ICBUaGlzIGlzIG5vdCBuZWVkZWQgaWYgeW91IGFyZSB1c2luZyBpcHRhYmxlcyBvdmVyIG5mdGFibGVzXG4gIDE4Olx0XHQgIChpcHRhYmxlcy1uZnQpLlxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBORl9TT0NLRVRfSVBWNlxuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVB2NiBzb2NrZXQgbG9va3VwIHN1cHBvcnRcJiMzNDtcbiAgMjI6XHRcdGhlbHBcbiAgMjM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgSVB2NiBzb2NrZXQgbG9va3VwIGluZnJhc3RydWN0dXJlLiBUaGlzXG4gIDI0Olx0XHQgIGlzIHVzZWQgYnkgdGhlIHtpcDYsbmZ9dGFibGVzIHNvY2tldCBtYXRjaC5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgTkZfVFBST1hZX0lQVjZcbiAgMjc6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjYgdHByb3h5IHN1cHBvcnRcJiMzNDtcbiAgMjg6XHRcbiAgMjk6XHRpZiBORl9UQUJMRVNcbiAgMzA6XHRcbiAgMzE6XHRjb25maWcgTkZfVEFCTEVTX0lQVjZcbiAgMzI6XHRcdGJvb2wgXCYjMzQ7SVB2NiBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBJUHY2IHN1cHBvcnQgZm9yIG5mX3RhYmxlcy5cbiAgMzU6XHRcbiAgMzY6XHRpZiBORl9UQUJMRVNfSVBWNlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBORlRfUkVKRUNUX0lQVjZcbiAgMzk6XHRcdHNlbGVjdCBORl9SRUpFQ1RfSVBWNlxuICA0MDpcdFx0ZGVmYXVsdCBORlRfUkVKRUNUXG4gIDQxOlx0XHR0cmlzdGF0ZVxuICA0MjpcdFxuICA0MzpcdGNvbmZpZyBORlRfRFVQX0lQVjZcbiAgNDQ6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjYgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gIDQ1Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG4gIDQ2Olx0XHRzZWxlY3QgTkZfRFVQX0lQVjZcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY2IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0IGZvciBuZl90YWJsZXMuXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIE5GVF9GSUJfSVBWNlxuICA1MTpcdFx0dHJpc3RhdGUgXCYjMzQ7bmZfdGFibGVzIGZpYiAvIGlwdjYgcm91dGUgbG9va3VwIHN1cHBvcnRcJiMzNDtcbiAgNTI6XHRcdHNlbGVjdCBORlRfRklCXG4gIDUzOlx0XHRoZWxwXG4gIDU0Olx0XHQgIFRoaXMgbW9kdWxlIGVuYWJsZXMgSVB2NiBGSUIgbG9va3VwcywgZS5nLiBmb3IgcmV2ZXJzZSBwYXRoIGZpbHRlcmluZy5cbiAgNTU6XHRcdCAgSXQgYWxzbyBhbGxvd3MgcXVlcnkgb2YgdGhlIEZJQiBmb3IgdGhlIHJvdXRlIHR5cGUsIGUuZy4gbG9jYWwsIHVuaWNhc3QsXG4gIDU2Olx0XHQgIG11bHRpY2FzdCBvciBibGFja2hvbGUuXG4gIDU3Olx0XG4gIDU4Olx0ZW5kaWYgIyBORl9UQUJMRVNfSVBWNlxuICA1OTpcdGVuZGlmICMgTkZfVEFCTEVTXG4gIDYwOlx0XG4gIDYxOlx0Y29uZmlnIE5GX0RVUF9JUFY2XG4gIDYyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgSVB2NiBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXCYjMzQ7XG4gIDYzOlx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG4gIDY0Olx0XHRoZWxwXG4gIDY1Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG5mX2R1cF9pcHY2IGNvcmUsIHdoaWNoIGR1cGxpY2F0ZXMgYW4gSVB2NlxuICA2NjpcdFx0ICBwYWNrZXQgdG8gYmUgcmVyb3V0ZWQgdG8gYW5vdGhlciBkZXN0aW5hdGlvbi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgTkZfUkVKRUNUX0lQVjZcbiAgNjk6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjYgcGFja2V0IHJlamVjdGlvblwmIzM0O1xuICA3MDpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gIDcxOlx0XG4gIDcyOlx0Y29uZmlnIE5GX0xPR19JUFY2XG4gIDczOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUHY2IHBhY2tldCBsb2dnaW5nXCYjMzQ7XG4gIDc0Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAgNzU6XHRcdHNlbGVjdCBORl9MT0dfU1lTTE9HXG4gIDc2Olx0XHRoZWxwXG4gIDc3Olx0XHQgIFRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXImIzM5O3MgY29udmVuaWVuY2VcbiAgNzg6XHRcdCAgKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMgQ09ORklHX05GX0xPR19TWVNMT0cuXG4gIDc5Olx0XG4gIDgwOlx0Y29uZmlnIElQNl9ORl9JUFRBQkxFU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc3MAoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiA5ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE5ldGZpbHRlciBQYWNrZXQgRHVwbGljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgdGhlIGZ1enppbmcgc2V0dXAuIFdlJiMzOTtyZSBsb29raW5nIGF0IGVuYWJsaW5nIHBhY2tldCBkdXBsaWNhdGlvbiBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG5ldGZpbHRlciBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBmb3IgSVB2NCBhbmQgSVB2Ni4KClRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIGZlYXR1cmVzIGFyZSBzdHJhaWdodGZvcndhcmQ6IGBORl9EVVBfSVBWNGAgcmVsaWVzIG9uIGBJTkVUICZhbXA7JmFtcDsgTkVURklMVEVSYCBhbmQgZWl0aGVyIGAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS2AuICBTaW1pbGFybHksIGBORl9EVVBfSVBWNmAgbmVlZHMgYElORVQgJmFtcDsmYW1wOyBJUFY2ICZhbXA7JmFtcDsgTkVURklMVEVSYCB3aXRoIHRoZSBzYW1lIGNvbm50cmFjayBkZXBlbmRlbmN5LiBUaGlzIGNoZWNrcyBvdXQ7IHdlIHdhbnQgdGhlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgZW5hYmxlZCBiZWZvcmUgYnVpbGRpbmcgb24gaXQuIFRvIGV4cG9zZSB0aGUgZnVuY3Rpb25hbGl0eSB0aHJvdWdoIG5mdGFibGVzIGFuZCBpcHRhYmxlcywgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIHRoZSByZWxhdGVkIHRhcmdldHM6IGBORlRfRFVQX0lQVjRgLCBgTkZUX0RVUF9JUFY2YCwgYW5kLCBpbiB0aGUgY2FzZSBvZiBpcHRhYmxlcyB3aXRoIGBURUVgLCBgTkVURklMVEVSX1hUX1RBUkdFVF9URUVgLgoKQmFzZWQgb24gdGhlIGNvZGUgZGlmZnMsIHRoZSBzcGVjaWZpYyBzeW1ib2xzIG1vZGlmaWVkIGFyZSBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgLCBsb2NhdGVkIGluIHRoZSBgbmV0L2lwdjQvbmV0ZmlsdGVyYCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlcmAgZGlyZWN0b3JpZXMgcmVzcGVjdGl2ZWx5LiAgVGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGFjdHVhbCBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMuIEltcG9ydGFudGx5LCBhIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIGJvdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgcGFja2V0IGR1cGxpY2F0aW9uIGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcywgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgYW5kIHZlcmlmeSBpZiB0aGUgZnV6emluZyB0YXJnZXQgY2FuIGJlIHNldCB1cCBpbiB0aGUgaW5pdGlhbCBuYW1lc3BhY2UuCgpUaGVzZSBmdW5jdGlvbnMgYXJlbiYjMzk7dCB1bml2ZXJzYWxseSBjYWxsZWQ7IHRoZXkmIzM5O3JlIHNwZWNpZmljIG5ldGZpbHRlciBoZWxwZXJzIHRyaWdnZXJlZCB3aGVuIHJ1bGVzIHdpdGggYGR1cGAgKG5mdGFibGVzKSBvciBgVEVFYCAoeHRhYmxlcykgbWF0Y2ggYSBwYWNrZXQuIFNvLCB0aGV5JiMzOTtyZSBub3QgYSBjb3JlIHBhcnQgb2YgdGhlIGJhc2UgbmV0d29yayBzdGFjayBidXQgcmF0aGVyIGFuIGV4dGVuc2lvbiBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLgoKVGhlIGNvbmZpZyBvcHRpb25zIHRvIGVuYWJsZSB0aGlzIGFyZTogYE5GX0RVUF9JUFY0YCwgYE5GX0RVUF9JUFY2YCwgYE5GVF9EVVBfSVBWNGAsIGBORlRfRFVQX0lQVjZgLCBhbmQgYE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFYC4gIFdlJiMzOTtsbCBlbmFibGUgYWxsIG9mIHRoZXNlLgoKQ29uc2lkZXJpbmcgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwgdGhlIGZ1enppbmcgdGFyZ2V0IGJlaW5nIGBXb3J0aEZ1enppbmdgLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCwgYWxsIGxvb2tzIGdvb2QuIE5vdywgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0RVUF9JUFY0JiMzNDssCiAgICAmIzM0O05GX0RVUF9JUFY2JiMzNDssCiAgICAmIzM0O05GVF9EVVBfSVBWNCYjMzQ7LAogICAgJiMzNDtORlRfRFVQX0lQVjYmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9URUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9kdXBfaXB2NCYjMzQ7LAogICAgJiMzNDtuZl9kdXBfaXB2NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXRmaWx0ZXIgcGFja2V0IGR1cGxpY2F0aW9uIGxvZ2ljIGluIG5mX2R1cF9pcHY0IGFuZCBuZl9kdXBfaXB2NiB0byByZXN0cmljdCBleGVjdXRpb24gdG8gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgKG5ldC1cdTAwM2V1c2VyX25zID09IFx1MDAyNmluaXRfdXNlcl9ucykuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGNvbnRyb2wgZmxvdyBmb3IgbmZ0YWJsZXMgKG5mdF9kdXApIGFuZCB4dGFibGVzICh4dF9URUUpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiBuZXR3b3JrIG5hbWVzcGFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0RVUF9JUFY0JiMzNDssCiAgICAmIzM0O05GX0RVUF9JUFY2JiMzNDssCiAgICAmIzM0O05GVF9EVVBfSVBWNCYjMzQ7LAogICAgJiMzNDtORlRfRFVQX0lQVjYmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9URUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9kdXBfaXB2NCYjMzQ7LAogICAgJiMzNDtuZl9kdXBfaXB2NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXRmaWx0ZXIgcGFja2V0IGR1cGxpY2F0aW9uIGxvZ2ljIGluIG5mX2R1cF9pcHY0IGFuZCBuZl9kdXBfaXB2NiB0byByZXN0cmljdCBleGVjdXRpb24gdG8gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgKG5ldC1cdTAwM2V1c2VyX25zID09IFx1MDAyNmluaXRfdXNlcl9ucykuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGNvbnRyb2wgZmxvdyBmb3IgbmZ0YWJsZXMgKG5mdF9kdXApIGFuZCB4dGFibGVzICh4dF9URUUpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiBuZXR3b3JrIG5hbWVzcGFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgcGVybWlzc2lvbi9uYW1lc3BhY2UgY2hlY2sgKGBuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnNgKSB0byBgbmZfZHVwX2lwdjQoKWAgYW5kIGBuZl9kdXBfaXB2NigpYCB0byByZXR1cm4gZWFybHkgd2hlbiBjYWxsZWQgZnJvbSBhIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlLlxuXG5UaGlzIGNoYW5nZTpcbjEuIERvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IHN0YWNrL2hlYXAgYnVmZmVycyBvciBkYXRhIHN0cnVjdHVyZXMuXG4yLiBEb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgdG8gdXNlciBzcGFjZS5cbjMuIERvZXMgbm90IG1vZGlmeSBidWZmZXIgbGVuZ3RocywgYm91bmRzIGNoZWNrcywgb3IgY29udHJvbCBmbG93IGluIGFueSB3YXkgdGhhdCB3b3VsZCBwZXJtaXQgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NDY2M2MzNDg4NTgxYmFlZDQ2MDM1MDcwMmZiMmE1YTE3MzVmODhmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxNzoyMzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMKaW5kZXggOWE3NzM1MDJmMTBhYy4uYzMzZGFlMjQ4YzQ3NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMKQEAgLTUzLDYgJiM0Mzs1Myw5IEBAIHZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSwKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAomIzQzOwlpZiAobmV0LSZndDt1c2VyX25zICE9ICZhbXA7aW5pdF91c2VyX25zKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlpZiAoY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMKaW5kZXggNmRhMzEwMmI3YzFiMy4uYTVmNmYwNzRhN2U5MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMKQEAgLTQ3LDYgJiM0Mzs0Nyw5IEBAIHN0YXRpYyBib29sIG5mX2R1cF9pcHY2X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIHZvaWQgbmZfZHVwX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSwKIAkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpCiB7CiYjNDM7CWlmIChuZXQtJmd0O3VzZXJfbnMgIT0gJmFtcDtpbml0X3VzZXJfbnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWlmIChjdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUpCiAJCWdvdG8gb3V0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgYG5mX2R1cF9pcHY0LmNgIGFuZCBgbmZfZHVwX2lwdjYuY2AgaW4gdGhlIG5ldGZpbHRlciBjb2RlLiBHb3QgaXQuJiMzNDsgVGhlIGluZGV4IGNoYW5nZXMgbG9vayBzdHJhaWdodGZvcndhcmQsIGFuZCB0aGUgZGlmZiBpdHNlbGYgaXMgbWluaW1hbDogd2UmIzM5O3JlIGFkZGluZyBhIGNoZWNrIGZvciBgbmV0LSZndDt1c2VyX25zYC4KCk15IGV4cGVydCBpbnR1aXRpb24gc3VnZ2VzdHMgdGhpcyBpcyBsaWtlbHkgYSBzZWN1cml0eSBoYXJkZW5pbmcgY2hhbmdlLiBUaGUgYWRkZWQgY29uZGl0aW9uIGBpZiAobmV0LSZndDt1c2VyX25zICE9ICZhbXA7aW5pdF91c2VyX25zKSByZXR1cm47YCBpbW1lZGlhdGVseSBmbGFncyB0byBtZSB0aGF0IHdlIGFyZSB0YWxraW5nIGFib3V0IGEgbmFtZXNwYWNlZCBuZXR3b3JrIGNvbnRleHQuIFRoaXMgaXMgbGlrZWx5IHRvIHByZXZlbnQgY2VydGFpbiBvcGVyYXRpb25zIHdoZW4gdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGlzbiYjMzk7dCB0aGUgaW5pdGlhbCBvbmUuIEkgd291bGQgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgY29udGV4dHMgYW5kIHBvc3NpYmxlIGV4cGxvaXRzIGhlcmUsIGJ1dCwgaW4gZXNzZW5jZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc2FuaXR5IGNoZWNrLCBndWFyZGluZyBhZ2FpbnN0IHBvdGVudGlhbGx5IHVuaW50ZW5kZWQgYmVoYXZpb3IgaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzLiBUaGUgZnVuY3Rpb24gYXBwZWFycyB0byBkdXBsaWNhdGUgcGFja2V0cywgc28gcG90ZW50aWFsbHkgdGhlcmUgaXMgYW4gZXNjYXBlIG9yIGxlYWthZ2Ugc2NlbmFyaW8gdGhhdCB0aGlzIGFkZHJlc3Nlcy4KClRvIGRldGVybWluZSBpZiBLTVNBTiBmdXp6aW5nIGlzICpuZWNlc3NhcnkqLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mICpza2lwcGluZyogdGhlIGR1cGxpY2F0aW9uLiBEb2VzIGl0IGludHJvZHVjZSBhIHVzZS1hZnRlci1mcmVlLCBhbiB1bmluaXRpYWxpemVkIHJlYWQsIG9yIG1heWJlIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIGVkZ2UgY2FzZXM/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgYnV0IHRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgbGlrZSBhIG1pdGlnYXRpb24gZm9yIGEga25vd24sIG9yIHN1c3BlY3RlZCwgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqIChDKSAyMDA3IGJ5IFNlYmFzdGlhbiBDbGHDn2VuIFx1MDAzY3NlYmFzdGlhbi5jbGFzc2VuQGZyZWVuZXQuYWdcdTAwM2VcbiAgIDQ6XHQgKiAoQykgMjAwNy0yMDEwIGJ5IEphbiBFbmdlbGhhcmR0IFx1MDAzY2plbmdlbGhAbWVkb3phcy5kZVx1MDAzZVxuICAgNTpcdCAqXG4gICA2Olx0ICogRXh0cmFjdGVkIGZyb20geHRfVEVFLmNcbiAgIDc6XHQgKi9cbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJjcHUuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JvdXRlLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2NoZWNrc3VtLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZmxvdy5oXHUwMDNlXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2ljbXAuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG4gIDE4Olx0I2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfZHVwX2lwdjQuaFx1MDAzZVxuICAyMDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuICAyMjpcdCNlbmRpZlxuICAyMzpcdFxuICAyNDpcdHN0YXRpYyBib29sIG5mX2R1cF9pcHY0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgMjU6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZ3csIGludCBvaWYpXG4gIDI2Olx0e1xuICAyNzpcdFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTtcbiAgMjg6XHRcdHN0cnVjdCBydGFibGUgKnJ0O1xuICAyOTpcdFx0c3RydWN0IGZsb3dpNCBmbDQ7XG4gIDMwOlx0XG4gIDMxOlx0XHRtZW1zZXQoXHUwMDI2Zmw0LCAwLCBzaXplb2YoZmw0KSk7XG4gIDMyOlx0XHRpZiAob2lmICE9IC0xKVxuICAzMzpcdFx0XHRmbDQuZmxvd2k0X29pZiA9IG9pZjtcbiAgMzQ6XHRcbiAgMzU6XHRcdGZsNC5kYWRkciA9IGd3LVx1MDAzZXNfYWRkcjtcbiAgMzY6XHRcdGZsNC5mbG93aTRfZHNjcCA9IGlwNGhfZHNjcChpcGgpO1xuICAzNzpcdFx0Zmw0LmZsb3dpNF9zY29wZSA9IFJUX1NDT1BFX1VOSVZFUlNFO1xuICAzODpcdFx0Zmw0LmZsb3dpNF9mbGFncyA9IEZMT1dJX0ZMQUdfS05PV05fTkg7XG4gIDM5Olx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcdTAwMjZmbDQpO1xuICA0MDpcdFx0aWYgKElTX0VSUihydCkpXG4gIDQxOlx0XHRcdHJldHVybiBmYWxzZTtcbiAgNDI6XHRcbiAgNDM6XHRcdHNrYl9kc3RfZHJvcChza2IpO1xuICA0NDpcdFx0c2tiX2RzdF9zZXQoc2tiLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuICA0NTpcdFx0c2tiLVx1MDAzZWRldiAgICAgID0gcnQtXHUwMDNlZHN0LmRldjtcbiAgNDY6XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcbiAgNDc6XHRcbiAgNDg6XHRcdHJldHVybiB0cnVlO1xuICA0OTpcdH1cbiAgNTA6XHRcbiAgNTE6XHR2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gIDUyOlx0XHRcdCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZ3csIGludCBvaWYpXG4gIDUzOlx0e1xuICA1NDpcdFx0c3RydWN0IGlwaGRyICppcGg7XG4gIDU1Olx0XG4gIDU2Olx0XHRpZiAobmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKVxuICA1NzpcdFx0XHRyZXR1cm47XG4gIDU4Olx0XG4gIDU5Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gIDYwOlx0XHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXG4gIDYxOlx0XHRcdGdvdG8gb3V0O1xuICA2MjpcdFx0LypcbiAgNjM6XHRcdCAqIENvcHkgdGhlIHNrYiwgYW5kIHJvdXRlIHRoZSBjb3B5LiBXaWxsIGxhdGVyIHJldHVybiAlWFRfQ09OVElOVUUgZm9yXG4gIDY0Olx0XHQgKiB0aGUgb3JpZ2luYWwgc2tiLCB3aGljaCBzaG91bGQgY29udGludWUgb24gaXRzIHdheSBhcyBpZiBub3RoaW5nIGhhc1xuICA2NTpcdFx0ICogaGFwcGVuZWQuIFRoZSBjb3B5IHNob3VsZCBiZSBpbmRlcGVuZGVudGx5IGRlbGl2ZXJlZCB0byB0aGUgZ2F0ZXdheS5cbiAgNjY6XHRcdCAqL1xuICA2NzpcdFx0c2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7XG4gIDY4Olx0XHRpZiAoc2tiID09IE5VTEwpXG4gIDY5Olx0XHRcdGdvdG8gb3V0O1xuICA3MDpcdFxuICA3MTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gIDcyOlx0XHQvKiBBdm9pZCBjb3VudGluZyBjbG9uZWQgcGFja2V0cyB0b3dhcmRzIHRoZSBvcmlnaW5hbCBjb25uZWN0aW9uLiAqL1xuICA3MzpcdFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiAgNzQ6XHRcdG5mX2N0X3NldChza2IsIE5VTEwsIElQX0NUX1VOVFJBQ0tFRCk7XG4gIDc1Olx0I2VuZGlmXG4gIDc2Olx0XHQvKlxuICA3NzpcdFx0ICogSWYgd2UgYXJlIGluIFBSRVJPVVRJTkcvSU5QVVQsIGRlY3JlYXNlIHRoZSBUVEwgdG8gbWl0aWdhdGUgcG90ZW50aWFsXG4gIDc4Olx0XHQgKiBsb29wcyBiZXR3ZWVuIHR3byBob3N0cy5cbiAgNzk6XHRcdCAqXG4gIDgwOlx0XHQgKiBTZXQgJUlQX0RGIHNvIHRoYXQgdGhlIG9yaWdpbmFsIHNvdXJjZSBpcyBub3RpZmllZCBvZiBhIHBvdGVudGlhbGx5XG4gIDgxOlx0XHQgKiBkZWNyZWFzZWQgTVRVIG9uIHRoZSBjbG9uZSByb3V0ZS4gSVB2NiBkb2VzIHRoaXMgdG9vLlxuICA4MjpcdFx0ICpcbiAgODM6XHRcdCAqIElQIGhlYWRlciBjaGVja3N1bSB3aWxsIGJlIHJlY2FsY3VsYXRlZCBhdCBpcF9sb2NhbF9vdXQuXG4gIDg0Olx0XHQgKi9cbiAgODU6XHRcdGlwaCA9IGlwX2hkcihza2IpO1xuICA4NjpcdFx0aXBoLVx1MDAzZWZyYWdfb2ZmIHw9IGh0b25zKElQX0RGKTtcbiAgODc6XHRcdGlmIChob29rbnVtID09IE5GX0lORVRfUFJFX1JPVVRJTkcgfHxcbiAgODg6XHRcdCAgICBob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pXG4gIDg5Olx0XHRcdC0taXBoLVx1MDAzZXR0bDtcbiAgOTA6XHRcbiAgOTE6XHRcdGlmIChuZl9kdXBfaXB2NF9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcbiAgOTI6XHRcdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xuICA5MzpcdFx0XHRpcF9sb2NhbF9vdXQobmV0LCBza2ItXHUwMDNlc2ssIHNrYik7XG4gIDk0Olx0XHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XG4gIDk1Olx0XHR9IGVsc2Uge1xuICA5NjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgOTc6XHRcdH1cbiAgOTg6XHRvdXQ6XG4gIDk5Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiAxMDA6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MzkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDb25zaWRlcmluZyB0aGUgSVB2NiBEdXBsaWNhdGlvbiBDYXNlKioKCkFscmlnaHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gTXkgcHJpbWFyeSBmb2N1cyBpcyBsaWtlbHkgb24gYG5mX2R1cC5jYCwgYnV0IGxldCYjMzk7cyBub3QgYmUgaGFzdHkuIFRvIGVuc3VyZSBJJiMzOTttIGNvdmVyaW5nIGFsbCBiYXNlcyBpbiB0aGlzIElQdjYgc2NlbmFyaW8sIEkgc2hvdWxkIGFsc28gdGhvcm91Z2hseSBleGFtaW5lIGBuZl9kdXBfaXB2Ni5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGR1cGxpY2F0aW9uIHByb2Nlc3Mgc3BlY2lmaWNhbGx5IGhhbmRsZXMgSVB2NiBwYWNrZXRzLiBJJiMzOTttIHRoaW5raW5nIHRoaXMgd2lsbCBoZWxwIGF2b2lkIGFueSBwb3RlbnRpYWwgb3ZlcnNpZ2h0cyBvciBhc3N1bXB0aW9ucyBiYXNlZCBzb2xlbHkgb24gSVB2NCBiZWhhdmlvci4gSXQmIzM5O3MgZ29vZCB0byBiZSB0aG9yb3VnaCBhbmQgY29uc2lkZXIgYWxsIHRoZSByZWxldmFudCBzb3VyY2UgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuICAgMjpcdC8qXG4gICAzOlx0ICogKEMpIDIwMDcgYnkgU2ViYXN0aWFuIENsYcOfZW4gXHUwMDNjc2ViYXN0aWFuLmNsYXNzZW5AZnJlZW5ldC5hZ1x1MDAzZVxuICAgNDpcdCAqIChDKSAyMDA3LTIwMTAgYnkgSmFuIEVuZ2VsaGFyZHQgXHUwMDNjamVuZ2VsaEBtZWRvemFzLmRlXHUwMDNlXG4gICA1Olx0ICpcbiAgIDY6XHQgKiBFeHRyYWN0ZWQgZnJvbSB4dF9URUUuY1xuICAgNzpcdCAqL1xuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kdXBfaXB2Ni5oXHUwMDNlXG4gIDE1Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oXHUwMDNlXG4gIDE3Olx0I2VuZGlmXG4gIDE4Olx0XG4gIDE5Olx0c3RhdGljIGJvb2wgbmZfZHVwX2lwdjZfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICAyMDpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXG4gIDIxOlx0e1xuICAyMjpcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7XG4gIDIzOlx0XHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XG4gIDI0Olx0XHRzdHJ1Y3QgZmxvd2k2IGZsNjtcbiAgMjU6XHRcbiAgMjY6XHRcdG1lbXNldChcdTAwMjZmbDYsIDAsIHNpemVvZihmbDYpKTtcbiAgMjc6XHRcdGlmIChvaWYgIT0gLTEpXG4gIDI4Olx0XHRcdGZsNi5mbG93aTZfb2lmID0gb2lmO1xuICAyOTpcdFxuICAzMDpcdFx0Zmw2LmRhZGRyID0gKmd3O1xuICAzMTpcdFx0Zmw2LmZsb3dsYWJlbCA9IChfX2ZvcmNlIF9fYmUzMikoKChpcGgtXHUwMDNlZmxvd19sYmxbMF0gXHUwMDI2IDB4RikgXHUwMDNjXHUwMDNjIDE2KSB8XG4gIDMyOlx0XHRcdFx0KGlwaC1cdTAwM2VmbG93X2xibFsxXSBcdTAwM2NcdTAwM2MgOCkgfCBpcGgtXHUwMDNlZmxvd19sYmxbMl0pO1xuICAzMzpcdFx0Zmw2LmZsb3dpNl9mbGFncyA9IEZMT1dJX0ZMQUdfS05PV05fTkg7XG4gIDM0Olx0XHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgTlVMTCwgXHUwMDI2Zmw2KTtcbiAgMzU6XHRcdGlmIChkc3QtXHUwMDNlZXJyb3IpIHtcbiAgMzY6XHRcdFx0ZHN0X3JlbGVhc2UoZHN0KTtcbiAgMzc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICAzODpcdFx0fVxuICAzOTpcdFx0c2tiX2RzdF9kcm9wKHNrYik7XG4gIDQwOlx0XHRza2JfZHN0X3NldChza2IsIGRzdCk7XG4gIDQxOlx0XHRza2ItXHUwMDNlZGV2ICAgICAgPSBkc3RfZGV2KGRzdCk7XG4gIDQyOlx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbiAgNDM6XHRcbiAgNDQ6XHRcdHJldHVybiB0cnVlO1xuICA0NTpcdH1cbiAgNDY6XHRcbiAgNDc6XHR2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gIDQ4Olx0XHRcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxuICA0OTpcdHtcbiAgNTA6XHRcdGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpXG4gIDUxOlx0XHRcdHJldHVybjtcbiAgNTI6XHRcbiAgNTM6XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiAgNTQ6XHRcdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSlcbiAgNTU6XHRcdFx0Z290byBvdXQ7XG4gIDU2Olx0XHRza2IgPSBwc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTtcbiAgNTc6XHRcdGlmIChza2IgPT0gTlVMTClcbiAgNTg6XHRcdFx0Z290byBvdXQ7XG4gIDU5Olx0XG4gIDYwOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcbiAgNjE6XHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4gIDYyOlx0XHRuZl9jdF9zZXQoc2tiLCBOVUxMLCBJUF9DVF9VTlRSQUNLRUQpO1xuICA2MzpcdCNlbmRpZlxuICA2NDpcdFx0aWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORyB8fFxuICA2NTpcdFx0ICAgIGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9JTikge1xuICA2NjpcdFx0XHRzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTtcbiAgNjc6XHRcdFx0LS1pcGgtXHUwMDNlaG9wX2xpbWl0O1xuICA2ODpcdFx0fVxuICA2OTpcdFx0aWYgKG5mX2R1cF9pcHY2X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xuICA3MDpcdFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XG4gIDcxOlx0XHRcdGlwNl9sb2NhbF9vdXQobmV0LCBza2ItXHUwMDNlc2ssIHNrYik7XG4gIDcyOlx0XHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XG4gIDczOlx0XHR9IGVsc2Uge1xuICA3NDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNzU6XHRcdH1cbiAgNzY6XHRvdXQ6XG4gIDc3Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiAgNzg6XHR9XG4gIDc5Olx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZHVwX2lwdjYpO1xuICA4MDpcdFxuICA4MTpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7U2ViYXN0aWFuIENsYcOfZW4gXHUwMDNjc2ViYXN0aWFuLmNsYXNzZW5AZnJlZW5ldC5hZ1x1MDAzZVwmIzM0Oyk7XG4gIDgyOlx0TU9EVUxFX0FVVEhPUihcJiMzNDtKYW4gRW5nZWxoYXJkdCBcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcdTAwM2VcJiMzNDspO1xuICA4MzpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtuZl9kdXBfaXB2NjogSVB2NiBwYWNrZXQgZHVwbGljYXRpb25cJiMzNDspO1xuICA4NDpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU2VjdXJpdHkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhleSYjMzk7cmUgYWRkaW5nIGEgY2hlY2ssIGFuIGBpZmAgc3RhdGVtZW50LCBpbiBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgLiBUaGUgY29uZGl0aW9uIGlzIGBuZXQtJmd0O3VzZXJfbnMgIT0gJmFtcDtpbml0X3VzZXJfbnNgLiBTbywgYmFzaWNhbGx5LCBpZiB3ZSYjMzk7cmUgKm5vdCogaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UsIGl0JiMzOTtzIGFuIGltbWVkaWF0ZSByZXR1cm4uIFRoZSByYXRpb25hbGUgaXMgY2xlYXJseSBzZWN1cml0eS1yZWxhdGVkOiBwYWNrZXQgZHVwbGljYXRpb24gaW4gYSBub24taW5pdCBuYW1lc3BhY2UsIHBvdGVudGlhbGx5IHRocm91Z2ggbmZ0YWJsZXMgYGR1cGAgb3IgeHRhYmxlcyBgVEVFYCwgY291bGQgbGVhZCB0byBhIHNlcmlvdXMgcHJvYmxlbS4gSXQgc291bmRzIGxpa2UgdGhlcmUmIzM5O3MgYSByaXNrIG9mIGJyZWFraW5nIG5ldG5zIGlzb2xhdGlvbiwgY3JlYXRpbmcgcm91dGluZyBsb29wcywgb3IgbGVha2luZyBwYWNrZXRzIGJldHdlZW4gbmFtZXNwYWNlcy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHNjYW4gZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0IG1lIG1ha2Ugc3VyZTogTm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAsIG5vIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMsIGFuZCBubyBuZXcgc3RydWN0IGZpZWxkcy4gVGhpcyBhbGwgbG9va3MgZ29vZDsgaXQmIzM5O3MganVzdCBhbiBlYXJseSByZXR1cm4uCgpOb3csIGxldCYjMzk7cyBkaWcgYSBiaXQgZGVlcGVyLiBJdCYjMzk7cyBhIHNpbXBsZSBgaWZgIGFuZCByZXR1cm4sIGJ1dCBpcyB0aGVyZSBhbnl0aGluZyBzdWJ0bGUgSSYjMzk7bSBtaXNzaW5nPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjYWxsZXIgb2YgYG5mX2R1cF9pcHY0YC9gbmZfZHVwX2lwdjZgIHNlZWluZyB0aGlzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnM6IHNwZWNpZmljYWxseSBgbmZ0X2R1cF9pcHY0X2V2YWxgIG9yIGB0ZWVfdGc0YCAtIGxldCBtZSBsb29rIHRoZW0gb3ZlciBhbmQgc2VlIGhvdyB0aGV5IGFyZSBhZmZlY3RlZC4gSXQgc2hvdWxkbiYjMzk7dCBiZSBtdWNoLCBidXQgaXQgYWx3YXlzIHBheXMgdG8gY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2R1cF9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmgtNy1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0Lmg6ODp2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oLTktXHRcdCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZ3csIGludCBvaWYpO1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTcyPWNvbmZpZyBORl9EVVBfSVBWNFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTc1LVx0aGVscFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NzY6XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG5mX2R1cF9pcHY0IGNvcmUsIHdoaWNoIGR1cGxpY2F0ZXMgYW4gSVB2NFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNzctXHQgIHBhY2tldCB0byBiZSByZXJvdXRlZCB0byBhbm90aGVyIGRlc3RpbmF0aW9uLlxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZT01MT1vYmotJChDT05GSUdfSVBfTkZfQVJQRklMVEVSKSAmIzQzOz0gYXJwdGFibGVfZmlsdGVyLm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS01Mi1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfRFVQX0lQVjQpICYjNDM7PSBuZl9kdXBfaXB2NC5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTQtXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMTgtI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2Vcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjE5OiNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oXHUwMDNlXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0yMC0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTIzLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6MjQ6c3RhdGljIGJvb2wgbmZfZHVwX2lwdjRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMjUtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTUwLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6NTE6dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtNTItXHRcdCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZ3csIGludCBvaWYpXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtOTAtXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzo5MTpcdGlmIChuZl9kdXBfaXB2NF9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTkyLVx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMTAwLX1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjEwMTpFWFBPUlRfU1lNQk9MX0dQTChuZl9kdXBfaXB2NCk7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0xMDItXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM9MTA0PU1PRFVMRV9BVVRIT1IoXCYjMzQ7SmFuIEVuZ2VsaGFyZHQgXHUwMDNjamVuZ2VsaEBtZWRvemFzLmRlXHUwMDNlXCYjMzQ7KTtcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjEwNTpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7bmZfZHVwX2lwdjQ6IER1cGxpY2F0ZSBJUHY0IHBhY2tldFwmIzM0Oyk7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0xMDYtTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMTItI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jOjEzOiNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oXHUwMDNlXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMTQtXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jPTIwPXN0YXRpYyB2b2lkIG5mdF9kdXBfaXB2NF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMjktXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmM6MzA6XHRuZl9kdXBfaXB2NChuZnRfbmV0KHBrdCksIHBrdC1cdTAwM2Vza2IsIG5mdF9ob29rKHBrdCksIFx1MDAyNmd3LCBvaWYpO1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jLTMxLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTE2LSNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jOjE3OiNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTE4LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kdXBfaXB2Ni5oXHUwMDNlXG4tLVxubmV0L25ldGZpbHRlci94dF9URUUuYz0zNz10ZWVfdGc0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTQxLVxubmV0L25ldGZpbHRlci94dF9URUUuYzo0MjpcdG5mX2R1cF9pcHY0KHh0X25ldChwYXIpLCBza2IsIHh0X2hvb2tudW0ocGFyKSwgXHUwMDI2aW5mby1cdTAwM2Vndy5pbiwgb2lmKTtcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzcKCQkJCQkJCW91dHB1dDogMTc3CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBjbG9zZWx5IGF0IHRoZXNlIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAgZnVuY3Rpb25zLiBUaGUgZmFjdCB0aGF0IHRoZXkgcmV0dXJuIGB2b2lkYCBpbW1lZGlhdGVseSBjYXVnaHQgbXkgZXllIOKAkyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gQmFzZWQgb24gd2hhdCBJJiMzOTttIHNlZWluZywgYW55IGVhcmx5IHJldHVybnMgZnJvbSB0aGVzZSBmdW5jdGlvbnMgZG9uJiMzOTt0IGxlYXZlIGFueXRoaW5nIGluIGEgbWVzc3kgc3RhdGUuIE5vIGRhdGEgaXMgYmVpbmcgcGFzc2VkIGFyb3VuZCBpbiBhbiB1bmluaXRpYWxpemVkIGNvbmRpdGlvbi4gVGhlcmUmIzM5O3Mgbm8gdW5leHBlY3RlZCBhbGxvY2F0aW9uIG9yIGFjY2VzcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcywgYXQgaXRzIGNvcmUsIGEgc3RyYWlnaHRmb3J3YXJkIGNoZWNrIGZvciBwcml2aWxlZ2UgYW5kIG5hbWVzcGFjZSBpc29sYXRpb24uCgpHaXZlbiB0aGlzIHVuZGVyc3RhbmRpbmcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4gYXJlIGVudGlyZWx5IGFkZXF1YXRlIHRvIGNhdGNoIGFueXRoaW5nIHRoYXQgKm1pZ2h0KiBiZSBjb25jZXJuaW5nLiBXZSBjZXJ0YWlubHkgZG9uJiMzOTt0IG5lZWQgdG8gaW52b2x2ZSBLTVNBTiBmb3IgdGhpcy4gSXQmIzM5O3MgYSBjbGVhbiBjaGFuZ2UuCgpOb3csIGxldCYjMzk7cyBnZXQgdGhhdCBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbCBwcmVwcGVkLiBJJiMzOTt2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB3aGF0IG5lZWRzIHRvIGJlIGNvbW11bmljYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24vbmFtZXNwYWNlIGNoZWNrIChgbmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zYCkgdG8gYG5mX2R1cF9pcHY0KClgIGFuZCBgbmZfZHVwX2lwdjYoKWAgdG8gcmV0dXJuIGVhcmx5IHdoZW4gY2FsbGVkIGZyb20gYSBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZS5cblxuVGhpcyBjaGFuZ2U6XG4xLiBEb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBzdGFjay9oZWFwIGJ1ZmZlcnMgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuMi4gRG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuXG4zLiBEb2VzIG5vdCBtb2RpZnkgYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja3MsIG9yIGNvbnRyb2wgZmxvdyBpbiBhbnkgd2F5IHRoYXQgd291bGQgcGVybWl0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24vbmFtZXNwYWNlIGNoZWNrIChgbmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zYCkgdG8gYG5mX2R1cF9pcHY0KClgIGFuZCBgbmZfZHVwX2lwdjYoKWAgdG8gcmV0dXJuIGVhcmx5IHdoZW4gY2FsbGVkIGZyb20gYSBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZS5cblxuVGhpcyBjaGFuZ2U6XG4xLiBEb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBzdGFjay9oZWFwIGJ1ZmZlcnMgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuMi4gRG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuXG4zLiBEb2VzIG5vdCBtb2RpZnkgYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja3MsIG9yIGNvbnRyb2wgZmxvdyBpbiBhbnkgd2F5IHRoYXQgd291bGQgcGVybWl0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzowMi4zNTcwNjEyMTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUxMTY5NDAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9EVVBfSVBWNFwiLFxuICAgIFwiTkZfRFVQX0lQVjZcIixcbiAgICBcIk5GVF9EVVBfSVBWNFwiLFxuICAgIFwiTkZUX0RVUF9JUFY2XCIsXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX1RFRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2R1cF9pcHY0XCIsXG4gICAgXCJuZl9kdXBfaXB2NlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24vbmFtZXNwYWNlIGNoZWNrIChgbmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnNgKSB0byBgbmZfZHVwX2lwdjQoKWAgYW5kIGBuZl9kdXBfaXB2NigpYCB0byByZXR1cm4gZWFybHkgd2hlbiBjYWxsZWQgZnJvbSBhIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlLlxcblxcblRoaXMgY2hhbmdlOlxcbjEuIERvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IHN0YWNrL2hlYXAgYnVmZmVycyBvciBkYXRhIHN0cnVjdHVyZXMuXFxuMi4gRG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuXFxuMy4gRG9lcyBub3QgbW9kaWZ5IGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBjb250cm9sIGZsb3cgaW4gYW55IHdheSB0aGF0IHdvdWxkIHBlcm1pdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMgaW4gbmZfZHVwX2lwdjQgYW5kIG5mX2R1cF9pcHY2IHRvIHJlc3RyaWN0IGV4ZWN1dGlvbiB0byB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAobmV0LVxcdTAwM2V1c2VyX25zID09IFxcdTAwMjZpbml0X3VzZXJfbnMpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBjb250cm9sIGZsb3cgZm9yIG5mdGFibGVzIChuZnRfZHVwKSBhbmQgeHRhYmxlcyAoeHRfVEVFKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gbmV0d29yayBuYW1lc3BhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzowMi4zNTcwNjQ5OTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTkyODAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ0NjYzYzM0ODg1ODFiYWVkNDYwMzUwNzAyZmIyYTVhMTczNWY4OGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAxNzoyMzowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXFxuaW5kZXggOWE3NzM1MDJmMTBhYy4uYzMzZGFlMjQ4YzQ3NyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xcbisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXFxuQEAgLTUzLDYgKzUzLDkgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbiB7XFxuIFxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiBcXG4rXFx0aWYgKG5ldC1cXHUwMDNldXNlcl9ucyAhPSBcXHUwMDI2aW5pdF91c2VyX25zKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuIFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXFxuaW5kZXggNmRhMzEwMmI3YzFiMy4uYTVmNmYwNzRhN2U5MSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXFxuQEAgLTQ3LDYgKzQ3LDkgQEAgc3RhdGljIGJvb2wgbmZfZHVwX2lwdjZfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiB2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuIFxcdFxcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxcbiB7XFxuK1xcdGlmIChuZXQtXFx1MDAzZXVzZXJfbnMgIT0gXFx1MDAyNmluaXRfdXNlcl9ucylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbiBcXHRpZiAoY3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6MDIuODY5NjIyMjIyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNjI0Mjc3MDQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9EVVBfSVBWNFwiLFxuICAgIFwiTkZfRFVQX0lQVjZcIixcbiAgICBcIk5GVF9EVVBfSVBWNFwiLFxuICAgIFwiTkZUX0RVUF9JUFY2XCIsXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX1RFRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2R1cF9pcHY0XCIsXG4gICAgXCJuZl9kdXBfaXB2NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMgaW4gbmZfZHVwX2lwdjQgYW5kIG5mX2R1cF9pcHY2IHRvIHJlc3RyaWN0IGV4ZWN1dGlvbiB0byB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAobmV0LVxcdTAwM2V1c2VyX25zID09IFxcdTAwMjZpbml0X3VzZXJfbnMpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBjb250cm9sIGZsb3cgZm9yIG5mdGFibGVzIChuZnRfZHVwKSBhbmQgeHRhYmxlcyAoeHRfVEVFKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gbmV0d29yayBuYW1lc3BhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0NjYzYzM0ODg1ODFiYWVkNDYwMzUwNzAyZmIyYTVhMTczNWY4OGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDE3OjIzOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuaW5kZXggOWE3NzM1MDJmMTBhYy4uYzMzZGFlMjQ4YzQ3NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuQEAgLTUzLDYgKzUzLDkgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIHtcbiBcdHN0cnVjdCBpcGhkciAqaXBoO1xuIFxuK1x0aWYgKG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucylcbitcdFx0cmV0dXJuO1xuK1xuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlKVxuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXG5pbmRleCA2ZGEzMTAyYjdjMWIzLi5hNWY2ZjA3NGE3ZTkxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXG5AQCAtNDcsNiArNDcsOSBAQCBzdGF0aWMgYm9vbCBuZl9kdXBfaXB2Nl9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIFx0XHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZilcbiB7XG4rXHRpZiAobmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXG4gXHRcdGdvdG8gb3V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6MDIuODY5NjIzNzIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg1MjkwNTE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgRmlsdGVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IGltcHJlc3Npb24gaXMgYWx3YXlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYmVpbmcgdG91Y2hlZC4gV2UndmUgZ290IG1vZGlmaWNhdGlvbnMgaW4gYG5mX2R1cF9pcHY0LmNgIGFuZCBgbmZfZHVwX2lwdjYuY2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyByZWxhdGVkIHRvIG5ldHdvcmsgZmlsdGVyaW5nLCBzcGVjaWZpY2FsbHkgSVB2NCBhbmQgSVB2NiBkdXBsaWNhdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gVGhlIGZpbGUgbmFtZXMgdGhlbXNlbHZlcyBhcmUgZmFpcmx5IGV4cGxpY2l0LlxuXG5Ob3csIHRob3NlIGNvZGUgY2hhbmdlc+KApiB0aGV5J3JlIGFkZGluZyBhIGNoZWNrOiBgaWYgKG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucykgcmV0dXJuO2AgaW4gYm90aCBmaWxlcy4gVGhpcyBsb29rcyBsaWtlIGEgbmFtZXNwYWNlIHJlc3RyaWN0aW9uLiBFc3NlbnRpYWxseSwgaXQncyBwcmV2ZW50aW5nIHRoZSBjb2RlIGZyb20gcnVubmluZyBpZiB0aGUgbmV0d29yayBuYW1lc3BhY2UgaXNuJ3QgdGhlIGluaXRpYWwgb25lIChgaW5pdF91c2VyX25zYCkuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZSBkdXBsaWNhdGlvbiBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIHJlc3RyaWN0ZWQgdG8gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UuIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGV5J3ZlIGRvbmUgdGhpcy4gV2hhdCdzIHRoZSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb24/IE9yIGlzIGl0IHNpbXBseSBhIG1hdHRlciBvZiByZXNvdXJjZSBjb250cm9sPyBXaGF0J3MgdGhlIGludGVuZGVkIHVzZSBjYXNlP1xuXG5UbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiB0aGlzLCBJIG5lZWQgY29udGV4dC4gTGV0IG1lIGZpcmUgdXAgYGdyZXBwZXJgIChvciwgaWYgaXQncyBtb3JlIGNvbnZlbmllbnQsIGByZWFkLWZpbGVgKSBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IG1pZ2h0IGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uIFRoZSBnb2FsIGlzIHRvIHNlZSB3aGVyZSB0aGVzZSBmaWxlcyBhcmUgdXNlZCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBpZiB0aGlzIGNoYW5nZSBoYXMgYW55IHdpZGVyIGltcGFjdCBvbiBOZXRmaWx0ZXIgYXMgYSB3aG9sZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIGJlZm9yZSBJIGNhbiByZWFsbHkgYXNzZXNzIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBwYXRjaCBhbmQgd2hldGhlciBpdCdzIGltcGxlbWVudGVkIGNvcnJlY3RseS4gVGhpcyBuYW1lc3BhY2UgY2hlY2sgaXMgc2ltcGxlIGVub3VnaCBvbiBpdHMgb3duLCBidXQgdGhlICp3aHkqIGlzIGFsd2F5cyBtb3JlIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzMiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjA4LjcyMjUzMTAzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTg3Mzk5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9kdXBfaXB2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9NzI9Y29uZmlnIE5GX0RVUF9JUFY0XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy03NS1cXHRoZWxwXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NzY6XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBuZl9kdXBfaXB2NCBjb3JlLCB3aGljaCBkdXBsaWNhdGVzIGFuIElQdjRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy03Ny1cXHQgIHBhY2tldCB0byBiZSByZXJvdXRlZCB0byBhbm90aGVyIGRlc3RpbmF0aW9uLlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTUxPW9iai0kKENPTkZJR19JUF9ORl9BUlBGSUxURVIpICs9IGFycHRhYmxlX2ZpbHRlci5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTUyLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfRFVQX0lQVjQpICs9IG5mX2R1cF9pcHY0Lm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTQtXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6MTk6I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oXFx1MDAzZVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTIwLSNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0yMy1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzoyNDpzdGF0aWMgYm9vbCBuZl9kdXBfaXB2NF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMjUtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtNTAtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6NTE6dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTUyLVxcdFxcdCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZ3csIGludCBvaWYpXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy05MC1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzo5MTpcXHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtOTItXFx0XFx0Y3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gdHJ1ZTtcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTEwMC19XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6MTAxOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2R1cF9pcHY0KTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0xMDItXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYz0xMDQ9TU9EVUxFX0FVVEhPUihcXFwiSmFuIEVuZ2VsaGFyZHQgXFx1MDAzY2plbmdlbGhAbWVkb3phcy5kZVxcdTAwM2VcXFwiKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzoxMDU6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJuZl9kdXBfaXB2NDogRHVwbGljYXRlIElQdjQgcGFja2V0XFxcIik7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMTA2LU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxcdTAwM2VcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmM6MTM6I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oXFx1MDAzZVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYy0xNC1cXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYz0yMD1zdGF0aWMgdm9pZCBuZnRfZHVwX2lwdjRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMjktXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jOjMwOlxcdG5mX2R1cF9pcHY0KG5mdF9uZXQocGt0KSwgcGt0LVxcdTAwM2Vza2IsIG5mdF9ob29rKHBrdCksIFxcdTAwMjZndywgb2lmKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMzEtfVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NjE9Y29uZmlnIE5GX0RVUF9JUFY2XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02NC1cXHRoZWxwXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6NjU6XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBuZl9kdXBfaXB2NiBjb3JlLCB3aGljaCBkdXBsaWNhdGVzIGFuIElQdjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02Ni1cXHQgIHBhY2tldCB0byBiZSByZXJvdXRlZCB0byBhbm90aGVyIGRlc3RpbmF0aW9uLlxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19ORl9SRUpFQ1RfSVBWNikgKz0gbmZfcmVqZWN0X2lwdjYub1xcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0yMy1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX05GX0RVUF9JUFY2KSArPSBuZl9kdXBfaXB2Ni5vXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlLTI1LVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtMTMtI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYzoxNDojaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9pcHY2L25mX2R1cF9pcHY2LmhcXHUwMDNlXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtMTUtI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jLTE4LVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jOjE5OnN0YXRpYyBib29sIG5mX2R1cF9pcHY2X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy0yMC1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNDYtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmM6NDc6dm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jLTQ4LVxcdFxcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNjgtXFx0fVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jOjY5OlxcdGlmIChuZl9kdXBfaXB2Nl9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy03MC1cXHRcXHRjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNzgtfVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jOjc5OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2R1cF9pcHY2KTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy04MC1cXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jPTgyPU1PRFVMRV9BVVRIT1IoXFxcIkphbiBFbmdlbGhhcmR0IFxcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcXHUwMDNlXFxcIik7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmM6ODM6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJuZl9kdXBfaXB2NjogSVB2NiBwYWNrZXQgZHVwbGljYXRpb25cXFwiKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy04NC1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmMtMTItI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXHUwMDNlXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9kdXBfaXB2Ni5jOjEzOiNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfZHVwX2lwdjYuaFxcdTAwM2VcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmMtMTQtXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmM9MjA9c3RhdGljIHZvaWQgbmZ0X2R1cF9pcHY2X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9kdXBfaXB2Ni5jLTI3LVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZHVwX2lwdjYuYzoyODpcXHRuZl9kdXBfaXB2NihuZnRfbmV0KHBrdCksIHBrdC1cXHUwMDNlc2tiLCBuZnRfaG9vayhwa3QpLCBndywgb2lmKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmMtMjktfVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9URUUuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci94dF9URUUuYzoxNzojaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci94dF9URUUuYzoxODojaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9pcHY2L25mX2R1cF9pcHY2LmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci94dF9URUUuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL3h0X1RFRS5oXFx1MDAzZVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9URUUuYz0zNz10ZWVfdGc0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNDEtXFxubmV0L25ldGZpbHRlci94dF9URUUuYzo0MjpcXHRuZl9kdXBfaXB2NCh4dF9uZXQocGFyKSwgc2tiLCB4dF9ob29rbnVtKHBhciksIFxcdTAwMjZpbmZvLVxcdTAwM2Vndy5pbiwgb2lmKTtcXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTQzLVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9URUUuYz00OT10ZWVfdGc2KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNTMtXFxubmV0L25ldGZpbHRlci94dF9URUUuYzo1NDpcXHRuZl9kdXBfaXB2Nih4dF9uZXQocGFyKSwgc2tiLCB4dF9ob29rbnVtKHBhciksIFxcdTAwMjZpbmZvLVxcdTAwM2Vndy5pbjYsIG9pZik7XFxubmV0L25ldGZpbHRlci94dF9URUUuYy01NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6MDguNzkyNDEyMTg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQxMjMwNDgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFBhY2tldCBEdXBsaWNhdGlvbiBpbiBOZXRmaWx0ZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgTmV0ZmlsdGVyIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgSVB2NCBhbmQgSVB2NiBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgcmVhZC1maWxlYCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGR1cGxpY2F0aW9uIGZ1bmN0aW9uYWxpdHkuIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyBgbmZfZHVwX2lwdjQuY2AgaW4gYG5ldC9pcHY0L25ldGZpbHRlci9gIGFuZCB0aGVuIG1vdmUgb24gdG8gdGhlIGBuZl9kdXBfaXB2Ni5jYCBjb3VudGVycGFydCBsb2NhdGVkIGluIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvYC4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjb3JlIGFsZ29yaXRobXMgZW1wbG95ZWQgYW5kIGFueSBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBJUHY0IGFuZCBJUHY2IGhhbmRsaW5nLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgb3JpZ2luYWwgcGFja2V0cyBhcmUgZHVwbGljYXRlZCwgaG93IHRoZSBuZXcgcGFja2V0cyBhcmUgaW5qZWN0ZWQgaW50byB0aGUgbmV0d29yayBzdGFjaywgYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgZWRnZSBjYXNlcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHBhY2tldCBkdXBsaWNhdGlvbiBpcyBpbXBsZW1lbnRlZCBhdCB0aGUgTmV0ZmlsdGVyIGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTQwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6MTQuMjA0NzE5NDcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0aWYgKElTX0VSUihydCkpXFxuICA0MTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdHNrYl9kc3RfZHJvcChza2IpO1xcbiAgNDQ6XFx0XFx0c2tiX2RzdF9zZXQoc2tiLCBcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxuICA0NTpcXHRcXHRza2ItXFx1MDAzZWRldiAgICAgID0gcnQtXFx1MDAzZWRzdC5kZXY7XFxuICA0NjpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDQ5OlxcdH1cXG4gIDUwOlxcdFxcbiAgNTE6XFx0dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbiAgNTI6XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpbl9hZGRyICpndywgaW50IG9pZilcXG4gIDUzOlxcdHtcXG4gIDU0OlxcdFxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiAgNTU6XFx0XFxuICA1NjpcXHRcXHRpZiAobmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpXFxuICA1NzpcXHRcXHRcXHRyZXR1cm47XFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDYwOlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXFxuICA2MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDYyOlxcdFxcdC8qXFxuICA2MzpcXHRcXHQgKiBDb3B5IHRoZSBza2IsIGFuZCByb3V0ZSB0aGUgY29weS4gV2lsbCBsYXRlciByZXR1cm4gJVhUX0NPTlRJTlVFIGZvclxcbiAgNjQ6XFx0XFx0ICogdGhlIG9yaWdpbmFsIHNrYiwgd2hpY2ggc2hvdWxkIGNvbnRpbnVlIG9uIGl0cyB3YXkgYXMgaWYgbm90aGluZyBoYXNcXG4gIDY1OlxcdFxcdCAqIGhhcHBlbmVkLiBUaGUgY29weSBzaG91bGQgYmUgaW5kZXBlbmRlbnRseSBkZWxpdmVyZWQgdG8gdGhlIGdhdGV3YXkuXFxuICA2NjpcXHRcXHQgKi9cXG4gIDY3OlxcdFxcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xcbiAgNjg6XFx0XFx0aWYgKHNrYiA9PSBOVUxMKVxcbiAgNjk6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA3MDpcXHRcXG4gIDcxOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuICA3MjpcXHRcXHQvKiBBdm9pZCBjb3VudGluZyBjbG9uZWQgcGFja2V0cyB0b3dhcmRzIHRoZSBvcmlnaW5hbCBjb25uZWN0aW9uLiAqL1xcbiAgNzM6XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gIDc0OlxcdFxcdG5mX2N0X3NldChza2IsIE5VTEwsIElQX0NUX1VOVFJBQ0tFRCk7XFxuICA3NTpcXHQjZW5kaWZcXG4gIDc2OlxcdFxcdC8qXFxuICA3NzpcXHRcXHQgKiBJZiB3ZSBhcmUgaW4gUFJFUk9VVElORy9JTlBVVCwgZGVjcmVhc2UgdGhlIFRUTCB0byBtaXRpZ2F0ZSBwb3RlbnRpYWxcXG4gIDc4OlxcdFxcdCAqIGxvb3BzIGJldHdlZW4gdHdvIGhvc3RzLlxcbiAgNzk6XFx0XFx0ICpcXG4gIDgwOlxcdFxcdCAqIFNldCAlSVBfREYgc28gdGhhdCB0aGUgb3JpZ2luYWwgc291cmNlIGlzIG5vdGlmaWVkIG9mIGEgcG90ZW50aWFsbHlcXG4gIDgxOlxcdFxcdCAqIGRlY3JlYXNlZCBNVFUgb24gdGhlIGNsb25lIHJvdXRlLiBJUHY2IGRvZXMgdGhpcyB0b28uXFxuICA4MjpcXHRcXHQgKlxcbiAgODM6XFx0XFx0ICogSVAgaGVhZGVyIGNoZWNrc3VtIHdpbGwgYmUgcmVjYWxjdWxhdGVkIGF0IGlwX2xvY2FsX291dC5cXG4gIDg0OlxcdFxcdCAqL1xcbiAgODU6XFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuICA4NjpcXHRcXHRpcGgtXFx1MDAzZWZyYWdfb2ZmIHw9IGh0b25zKElQX0RGKTtcXG4gIDg3OlxcdFxcdGlmIChob29rbnVtID09IE5GX0lORVRfUFJFX1JPVVRJTkcgfHxcXG4gIDg4OlxcdFxcdCAgICBob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pXFxuICA4OTpcXHRcXHRcXHQtLWlwaC1cXHUwMDNldHRsO1xcbiAgOTA6XFx0XFxuICA5MTpcXHRcXHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XFxuICA5MjpcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xcbiAgOTM6XFx0XFx0XFx0aXBfbG9jYWxfb3V0KG5ldCwgc2tiLVxcdTAwM2Vzaywgc2tiKTtcXG4gIDk0OlxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xcbiAgOTU6XFx0XFx0fSBlbHNlIHtcXG4gIDk2OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgOTc6XFx0XFx0fVxcbiAgOTg6XFx0b3V0OlxcbiAgOTk6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIDEwMDpcXHR9XFxuIDEwMTpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9kdXBfaXB2NCk7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdE1PRFVMRV9BVVRIT1IoXFxcIlNlYmFzdGlhbiBDbGHDn2VuIFxcdTAwM2NzZWJhc3RpYW4uY2xhc3NlbkBmcmVlbmV0LmFnXFx1MDAzZVxcXCIpO1xcbiAxMDQ6XFx0TU9EVUxFX0FVVEhPUihcXFwiSmFuIEVuZ2VsaGFyZHQgXFx1MDAzY2plbmdlbGhAbWVkb3phcy5kZVxcdTAwM2VcXFwiKTtcXG4gMTA1OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwibmZfZHVwX2lwdjQ6IER1cGxpY2F0ZSBJUHY0IHBhY2tldFxcXCIpO1xcbiAxMDY6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzoxNC4yMDQ3OTE2NDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzU2NjEwNzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBJUHY2IER1cGxpY2F0ZSBQYWNrZXQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHBvdGVudGlhbCBpc3N1ZXMsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIEknbSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzIHJlbGF0ZWQgdG8gSVB2NiBwYWNrZXQgZHVwbGljYXRpb24gd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBNeSBpbml0aWFsIGludmVzdGlnYXRpb24gaGFzIGxlZCBtZSBkb3duIHRoaXMgcGF0aCwgc28gaXQncyBvbmx5IGxvZ2ljYWwgdG8gZXh0ZW5kIG15IGNoZWNrIHRvIHRoZSBgbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNgIGZpbGUgYXMgd2VsbC4gSXQncyBhbG1vc3QgZ3VhcmFudGVlZCB0aGVyZSBhcmUgY3JpdGljYWwgcGllY2VzIG9mIHRoZSBwdXp6bGUgd2FpdGluZyBmb3IgbXkgYW5hbHlzaXMgaGVyZS4gVGltZSB0byBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDEzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzoxNS45NjE0MDUyNDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHRcXHRza2JfZHN0X3NldChza2IsIGRzdCk7XFxuICA0MTpcXHRcXHRza2ItXFx1MDAzZWRldiAgICAgID0gZHN0X2Rldihkc3QpO1xcbiAgNDI6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDQ1OlxcdH1cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0dm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbiAgNDg6XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXFxuICA0OTpcXHR7XFxuICA1MDpcXHRcXHRpZiAobmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpXFxuICA1MTpcXHRcXHRcXHRyZXR1cm47XFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDU0OlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXFxuICA1NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDU2OlxcdFxcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xcbiAgNTc6XFx0XFx0aWYgKHNrYiA9PSBOVUxMKVxcbiAgNTg6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA1OTpcXHRcXG4gIDYwOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuICA2MTpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbiAgNjI6XFx0XFx0bmZfY3Rfc2V0KHNrYiwgTlVMTCwgSVBfQ1RfVU5UUkFDS0VEKTtcXG4gIDYzOlxcdCNlbmRpZlxcbiAgNjQ6XFx0XFx0aWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORyB8fFxcbiAgNjU6XFx0XFx0ICAgIGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9JTikge1xcbiAgNjY6XFx0XFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7XFxuICA2NzpcXHRcXHRcXHQtLWlwaC1cXHUwMDNlaG9wX2xpbWl0O1xcbiAgNjg6XFx0XFx0fVxcbiAgNjk6XFx0XFx0aWYgKG5mX2R1cF9pcHY2X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xcbiAgNzA6XFx0XFx0XFx0Y3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gdHJ1ZTtcXG4gIDcxOlxcdFxcdFxcdGlwNl9sb2NhbF9vdXQobmV0LCBza2ItXFx1MDAzZXNrLCBza2IpO1xcbiAgNzI6XFx0XFx0XFx0Y3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XFxuICA3MzpcXHRcXHR9IGVsc2Uge1xcbiAgNzQ6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA3NTpcXHRcXHR9XFxuICA3NjpcXHRvdXQ6XFxuICA3NzpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gIDc4OlxcdH1cXG4gIDc5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2R1cF9pcHY2KTtcXG4gIDgwOlxcdFxcbiAgODE6XFx0TU9EVUxFX0FVVEhPUihcXFwiU2ViYXN0aWFuIENsYcOfZW4gXFx1MDAzY3NlYmFzdGlhbi5jbGFzc2VuQGZyZWVuZXQuYWdcXHUwMDNlXFxcIik7XFxuICA4MjpcXHRNT0RVTEVfQVVUSE9SKFxcXCJKYW4gRW5nZWxoYXJkdCBcXHUwMDNjamVuZ2VsaEBtZWRvemFzLmRlXFx1MDAzZVxcXCIpO1xcbiAgODM6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJuZl9kdXBfaXB2NjogSVB2NiBwYWNrZXQgZHVwbGljYXRpb25cXFwiKTtcXG4gIDg0OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6MTUuOTYxNDgwMTk4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE4MzkzODIwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIFBhY2tldCBEdXBsaWNhdGlvbiBBY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBoZXJlLiBUaGV5J3JlIGludm9rZWQgYnkgYG5mdF9kdXBfaXB2NF9ldmFsYCBhbmQgYG5mdF9kdXBfaXB2Nl9ldmFsYCwgd2hpY2ggYXJlIHBhcnQgb2YgbmZ0YWJsZXMnIGBuZnRfZHVwYCBtZWNoYW5pc20uIEknbSBhbHNvIHNlZWluZyB0aGVtIGNvbm5lY3RlZCB0byBgdGVlX3RnNGAgYW5kIGB0ZWVfdGc2YCwgd2hpY2ggYXJlIHdpdGhpbiB0aGUgaXB0YWJsZXMvaXA2dGFibGVzIGB4dF9URUVgIG1vZHVsZS4gU28sIGVzc2VudGlhbGx5LCB3ZSdyZSB0YWxraW5nIGFib3V0IG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gYWN0aW9ucyDigJMgdGhpbmdzIGxpa2UgYG5mdCBkdXAgdG8gLi4uYCBvciB0aGUgY2xhc3NpYyBgaXB0YWJsZXMgLWogVEVFYCBzeW50YXguXG5cbk5vdywgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgbmVlZCBzb21lIGNvbnRleHQuIFRpbWUgdG8gaGl0IHRoZSBnaXQgY29tbWl0IGxvZ3MuIExldCdzIHNlZSBpZiB0aGUgY29tbWl0IG1lc3NhZ2VzIHNoZWQgYW55IGxpZ2h0IG9uIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZXNlIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4gSSdsbCBzdGFydCBieSBjaGVja2luZyBmb3IgYW55IGhlbHBmdWwgYmFja2dyb3VuZCBvciBleHBsYW5hdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBhIHNwZWNpZmljIGNvbW1pdCBsaWtlIGA0NDY2M2MzNDg4NTgxYmFlZDQ2MDM1MDcwMmZiMmE1YTE3MzVmODhmYCwgb3IgYW55IHByZXZpb3VzIGNvbW1pdHMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gTWlnaHQgYmUgYmV0dGVyIHRvIGNoZWNrIGdpdCBsb2cgZm9yIHRoZSBhY3R1YWwgc291cmNlIGZpbGVzLCBsaWtlIGBuZl9kdXBfaXB2NC5jYCBhbmQgYG5mX2R1cF9pcHY2LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgbW9yZSBmb2N1c2VkIHZpZXcgb2YgdGhlIGNoYW5nZXMgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyODYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzoyMC4xNDU0MjEyMjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDMyMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GX0RVUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTQ3PWNvbmZpZyBORlRfRFVQX0lQVjRcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQ5LVxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDpcXHRzZWxlY3QgTkZfRFVQX0lQVjRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy01MS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz03MD1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTcxLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjcyOmNvbmZpZyBORl9EVVBfSVBWNFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTczLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTUxPW9iai0kKENPTkZJR19JUF9ORl9BUlBGSUxURVIpICs9IGFycHRhYmxlX2ZpbHRlci5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTUyLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfRFVQX0lQVjQpICs9IG5mX2R1cF9pcHY0Lm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTQtXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgTkZUX0RVUF9JUFY2XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00NS1cXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6NDY6XFx0c2VsZWN0IE5GX0RVUF9JUFY2XFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNDctXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NTk9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02MC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo2MTpjb25maWcgTkZfRFVQX0lQVjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02Mi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfTkZfUkVKRUNUX0lQVjYpICs9IG5mX3JlamVjdF9pcHY2Lm9cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMjMtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORl9EVVBfSVBWNikgKz0gbmZfZHVwX2lwdjYub1xcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0yNS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NjA9aWYgTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY2Mjpjb25maWcgTkZfRFVQX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02Njg9Y29uZmlnIE5GVF9EVVBfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2OS1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgcGFja2V0IGR1cGxpY2F0aW9uIHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY3MDpcXHRzZWxlY3QgTkZfRFVQX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NzEtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY3ND1jb25maWcgTkZUX0ZXRF9ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc1LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiBwYWNrZXQgZm9yd2FyZGluZyBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NzY6XFx0c2VsZWN0IE5GX0RVUF9ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc3LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMDU3PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX1RFRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNjEtXFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgIUlQNl9ORl9JUFRBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYyOlxcdHNlbGVjdCBORl9EVVBfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYzOlxcdHNlbGVjdCBORl9EVVBfSVBWNiBpZiBJUDZfTkZfSVBUQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA2NC1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTgxPW9iai0kKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKSArPSBuZl9jb25uY291bnQub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04My0jIGdlbmVyaWMgcGFja2V0IGR1cGxpY2F0aW9uIGZyb20gbmV0ZGV2IGZhbWlseVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODQ6b2JqLSQoQ09ORklHX05GX0RVUF9ORVRERVYpXFx0Kz0gbmZfZHVwX25ldGRldi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6MjAuMjEwNDU3NjYyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MjM5NjE3NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEdXBsaWNhdGlvbiBpbiBOZXRmaWx0ZXIqKlxuXG5SaWdodCwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBuZXR3b3JrIGR1cGxpY2F0aW9uIGZ1bmN0aW9uYWxpdGllcyB3aXRoaW4gTmV0ZmlsdGVyLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBgTkZfRFVQX05FVERFVmAgb3B0aW9uLCBhbmQgdGhlbiBJJ2xsIGZvbGxvdyB0aGF0IHVwIGJ5IGxvb2tpbmcgYXQgaG93IGBORl9EVVBfSVBWNGAgYW5kIGBORl9EVVBfSVBWNmAgY29tZSBpbnRvIHBsYXkuIEknbSBwcmV0dHkgc3VyZSBJIHJlbWVtYmVyIHRob3NlLCBidXQgYSBxdWljayByZXZpZXcgbmV2ZXIgaHVydHMuIE15IGltbWVkaWF0ZSBmb2N1cywgdGhvdWdoLCBuZWVkcyB0byBiZSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhlIGZpcnN0IG9wdGlvbi4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBsb3dlci1sZXZlbCBhc3BlY3RzLCBJJ20gaGVhZGluZyBzdHJhaWdodCB0byB0aGUgc291cmNlIGNvZGUuIExldCdzIHN0YXJ0IHdpdGggYG5ldC9uZXRmaWx0ZXIvbmZfZHVwX25ldGRldi5jYCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBjb3JlIG1lY2hhbmlzbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzoyMi45MzQ0MjUxNDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDYzNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluaXRfdXNlcl9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz01MDQ2PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcF92c19jb250cm9sX25ldF9pbml0X3N5c2N0bChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy01MDUxLVxcdHNpemVfdCBjdGxfdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUodnNfdmFycyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjUwNTI6XFx0Ym9vbCB1bnByaXYgPSBuZXQtXFx1MDAzZXVzZXJfbnMgIT0gXFx1MDAyNmluaXRfdXNlcl9ucztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTA1My1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmM9NTQ5PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2xibGNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jLTU2NC1cXHRcXHQvKiBEb24ndCBleHBvcnQgc3lzY3RscyB0byB1bnByaXZpbGVnZWQgdXNlcnMgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jOjU2NTpcXHRcXHRpZiAobmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYy01NjYtXFx0XFx0XFx0dmFyc190YWJsZV9zaXplID0gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jPTczNT1zdGF0aWMgaW50IF9fbmV0X2luaXQgX19pcF92c19sYmxjcl9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jLTc1MC1cXHRcXHQvKiBEb24ndCBleHBvcnQgc3lzY3RscyB0byB1bnByaXZpbGVnZWQgdXNlcnMgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYzo3NTE6XFx0XFx0aWYgKG5ldC1cXHUwMDNldXNlcl9ucyAhPSBcXHUwMDI2aW5pdF91c2VyX25zKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jLTc1Mi1cXHRcXHRcXHR2YXJzX3RhYmxlX3NpemUgPSAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmM9MTY4PXN0YXRpYyB2b2lkIG5mX2xvZ19kdW1wX3NrX3VpZF9naWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfbG9nX2J1ZiAqbSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jLTE4Ny1cXHRcXHRuZl9sb2dfYnVmX2FkZChtLCBcXFwiVUlEPSV1IEdJRD0ldSBcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jOjE4ODpcXHRcXHRcXHQgICAgICAgZnJvbV9rdWlkX211bmdlZChcXHUwMDI2aW5pdF91c2VyX25zLCBjcmVkLVxcdTAwM2Vmc3VpZCksXFxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmM6MTg5OlxcdFxcdFxcdCAgICAgICBmcm9tX2tnaWRfbXVuZ2VkKFxcdTAwMjZpbml0X3VzZXJfbnMsIGNyZWQtXFx1MDAzZWZzZ2lkKSk7XFxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmMtMTkwLVxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NTY3PXN0YXRpYyBpbnQgbmZxbmxfcHV0X3NrX3VpZGdpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTU4Ni1cXHRcXHRpZiAobmxhX3B1dF9iZTMyKHNrYiwgTkZRQV9VSUQsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo1ODc6XFx0XFx0ICAgIGh0b25sKGZyb21fa3VpZF9tdW5nZWQoXFx1MDAyNmluaXRfdXNlcl9ucywgY3JlZC1cXHUwMDNlZnN1aWQpKSkpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy01ODgtXFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy01ODktXFx0XFx0aWYgKG5sYV9wdXRfYmUzMihza2IsIE5GUUFfR0lELFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NTkwOlxcdFxcdCAgICBodG9ubChmcm9tX2tnaWRfbXVuZ2VkKFxcdTAwMjZpbml0X3VzZXJfbnMsIGNyZWQtXFx1MDAzZWZzZ2lkKSkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNTkxLVxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNDI5PW5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpZmYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MzItXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNDMzOlxcdGlmIChlLVxcdTAwM2VzdGF0ZS5uZXQtXFx1MDAzZXVzZXJfbnMgIT0gXFx1MDAyNmluaXRfdXNlcl9ucylcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MzQtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTczPXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTgwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTgxOlxcdGlmIChjdHgtXFx1MDAzZW5ldC1cXHUwMDNldXNlcl9ucyAhPSBcXHUwMDI2aW5pdF91c2VyX25zKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTgyLVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jPTMzMj1zdGF0aWMgaW50IHJlY2VudF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMtNDA3LSNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbm5ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmM6NDA4OlxcdHVpZCA9IG1ha2Vfa3VpZChcXHUwMDI2aW5pdF91c2VyX25zLCBpcF9saXN0X3VpZCk7XFxubmV0L25ldGZpbHRlci94dF9yZWNlbnQuYzo0MDk6XFx0Z2lkID0gbWFrZV9rZ2lkKFxcdTAwMjZpbml0X3VzZXJfbnMsIGlwX2xpc3RfZ2lkKTtcXG5uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jLTQxMC1cXHRpZiAoIXVpZF92YWxpZCh1aWQpIHx8ICFnaWRfdmFsaWQoZ2lkKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzoyMi45ODI4OTQ3NDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY3Mzg2NTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IE5ldGZpbHRlciBQYWNrZXQgRHVwbGljYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWRkaW5nIGEgY3J1Y2lhbCBjaGVjazogYGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpIHJldHVybjtgIHRvIHRoZSBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgIGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGNvZGUgKmFjdHVhbGx5KiBiZSByZWFjaGVkLCB3aGljaCBpcyB0aGUga2V5IGRldGVybWluYW50IGhlcmU/XG5cbkdvb2QhIEkgc2VlIHRoYXQgdG9vbHMgbGlrZSBzeXprYWxsZXIsIHJ1bm5pbmcgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgY2FuIHRyaWdnZXIgdGhlIGV4ZWN1dGlvbiBwYXRocy4gVGhpcyBpcyBncmVhdCBuZXdzLiBUaGUgY29kZSBwYXRoICppcyogcmVhY2hhYmxlIOKAkyB3ZSBrbm93IG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gKGBuZnRfZHVwX2lwdjRgLCBgbmZ0X2R1cF9pcHY2YCwgYHh0X1RFRWApIGlzIGV4ZWN1dGVkIGluIGJvdGggdGhlIGluaXRpYWwgYW5kIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcywgd2hpY2ggbWVhbnMgdGhhdCBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgIGFyZSBpbmRlZWQgcGFydCBvZiB0aGUgY29yZSBuZXR3b3JraW5nL25ldGZpbHRlciBzdWJzeXN0ZW1zLlxuXG5TbywgdGhpcyBtb2RpZmljYXRpb24gKmFic29sdXRlbHkqIGNoYW5nZXMgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gYG5mX2R1cF9pcHY0KClgIGFuZCBgbmZfZHVwX2lwdjYoKWAhIEEgc2ltcGxlIGVhcmx5IHJldHVybiBpcyBhZGRlZCB0byBndWFyZCB0aGUgbG9naWMuXG5cbk5vdywgbGV0J3MgYXBwbHkgdGhlIGd1aWRlbGluZXM6IFRoaXMgaXMgYSBkaXJlY3QgbW9kaWZpY2F0aW9uIHRvIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIGluIGEgY29yZSBzdWJzeXN0ZW0uIFRoZSBndWlkZWxpbmVzIGFyZSBjcnlzdGFsIGNsZWFyOiBcIldvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuXCIgTW9yZW92ZXIsIHRoZSBndWlkZWxpbmVzIGhpZ2hsaWdodCB0aGF0IGV2ZW4gcmVmYWN0b3JpbmdzLCBjb2RlIGNsZWFudXBzLCBhbmQgZGVmZW5zaXZlIGNoZWNrcyBpbiByZWFjaGFibGUgY29kZSB3YXJyYW50IGZ1enppbmcsIGFuZCB0aGlzIGlzIGFsbCBvZiB0aGUgYWJvdmUuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbmRpdGlvbmFsIGNoZWNrIGluIGNyaXRpY2FsIG5ldHdvcmtpbmcgY29kZS5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggZGlyZWN0bHkgdG91Y2hlcyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSwgSSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGUgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGB0cnVlYC4gVGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24gYW5kIGZ1enppbmcuIE5vdywgbGV0J3MgaW52ZXN0aWdhdGUgdGhlIGtlcm5lbCBjb25maWdzIG5lZWRlZCB0byBjb21waWxlIGFuZCByZWFjaCB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTA5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjI3LjY1Njc2Mjg3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY3NTU4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZfRFVQX0lQVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTQ3PWNvbmZpZyBORlRfRFVQX0lQVjRcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQ5LVxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDpcXHRzZWxlY3QgTkZfRFVQX0lQVjRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy01MS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz03MD1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTcxLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjcyOmNvbmZpZyBORl9EVVBfSVBWNFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTczLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTUxPW9iai0kKENPTkZJR19JUF9ORl9BUlBGSUxURVIpICs9IGFycHRhYmxlX2ZpbHRlci5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTUyLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfRFVQX0lQVjQpICs9IG5mX2R1cF9pcHY0Lm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTQtXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgTkZUX0RVUF9JUFY2XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00NS1cXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6NDY6XFx0c2VsZWN0IE5GX0RVUF9JUFY2XFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNDctXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NTk9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02MC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo2MTpjb25maWcgTkZfRFVQX0lQVjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02Mi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfTkZfUkVKRUNUX0lQVjYpICs9IG5mX3JlamVjdF9pcHY2Lm9cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMjMtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORl9EVVBfSVBWNikgKz0gbmZfZHVwX2lwdjYub1xcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0yNS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMDU3PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX1RFRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNjEtXFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgIUlQNl9ORl9JUFRBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYyOlxcdHNlbGVjdCBORl9EVVBfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYzOlxcdHNlbGVjdCBORl9EVVBfSVBWNiBpZiBJUDZfTkZfSVBUQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA2NC1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjI3LjcyMzUyMjY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNjk0ODk0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBLZXJuZWwncyBGaXJld2FsbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZpcmV3YWxsIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIHN5c3RlbS4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZXMuIFRoZXNlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBwcm9jZXNzLCBhbmQgSSdtIGJldHRpbmcgdGhleSdsbCBjbGVhcmx5IHNob3cgbWUgdGhlIGVuY29tcGFzc2luZyBtZW51IHN0cnVjdHVyZSBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgbmV0ZmlsdGVyIG9wdGlvbnMgSSdtIGludGVyZXN0ZWQgaW4uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgb3ZlcmFsbCBvcmdhbml6YXRpb24gbGFpZCBvdXQgaGVyZSwgd2hpY2ggd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGZvdW5kYXRpb24gSSBuZWVkIHRvIHByb3Blcmx5IG5hdmlnYXRlIGFuZCB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBvcHRpb25zLiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHNvIHRvIHNwZWFrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIxNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjI5Ljk5MzAxNDE1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJUCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51IFxcXCJJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBORl9ERUZSQUdfSVBWNFxcbiAgMTA6XFx0XFx0dHJpc3RhdGVcXG4gIDExOlxcdFxcdGRlZmF1bHQgblxcbiAgMTI6XFx0XFxuICAxMzpcXHQjIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXFxuICAxNDpcXHRjb25maWcgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiTGVnYWN5IElQIHRhYmxlcyBzdXBwb3J0XFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcXG4gIDE4OlxcdFxcdGRlZmF1bHRcXHRtIGlmIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbiAgMTk6XFx0XFx0aGVscFxcbiAgMjA6XFx0XFx0ICBpcHRhYmxlcyBpcyBhIGxlZ2FjeSBwYWNrZXQgY2xhc3NpZmllci5cXG4gIDIxOlxcdFxcdCAgVGhpcyBpcyBub3QgbmVlZGVkIGlmIHlvdSBhcmUgdXNpbmcgaXB0YWJsZXMgb3ZlciBuZnRhYmxlc1xcbiAgMjI6XFx0XFx0ICAoaXB0YWJsZXMtbmZ0KS5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIE5GX1NPQ0tFVF9JUFY0XFxuICAyNTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVB2NCBzb2NrZXQgbG9va3VwIHN1cHBvcnRcXFwiXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIElQdjQgc29ja2V0IGxvb2t1cCBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpc1xcbiAgMjg6XFx0XFx0ICBpcyByZXF1aXJlZCBieSB0aGUge2lwLG5mfXRhYmxlcyBzb2NrZXQgbWF0Y2guXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBORl9UUFJPWFlfSVBWNFxcbiAgMzE6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjQgdHByb3h5IHN1cHBvcnRcXFwiXFxuICAzMjpcXHRcXG4gIDMzOlxcdGlmIE5GX1RBQkxFU1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgTkZfVEFCTEVTX0lQVjRcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIklQdjQgbmZfdGFibGVzIHN1cHBvcnRcXFwiXFxuICAzNzpcXHRcXHRoZWxwXFxuICAzODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIElQdjQgc3VwcG9ydCBmb3IgbmZfdGFibGVzLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRpZiBORl9UQUJMRVNfSVBWNFxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgTkZUX1JFSkVDVF9JUFY0XFxuICA0MzpcXHRcXHRzZWxlY3QgTkZfUkVKRUNUX0lQVjRcXG4gIDQ0OlxcdFxcdGRlZmF1bHQgTkZUX1JFSkVDVFxcbiAgNDU6XFx0XFx0dHJpc3RhdGVcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIE5GVF9EVVBfSVBWNFxcbiAgNDg6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjQgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS1xcbiAgNTA6XFx0XFx0c2VsZWN0IE5GX0RVUF9JUFY0XFxuICA1MTpcXHRcXHRoZWxwXFxuICA1MjpcXHRcXHQgIFRoaXMgbW9kdWxlIGVuYWJsZXMgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydCBmb3IgbmZfdGFibGVzLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRjb25maWcgTkZUX0ZJQl9JUFY0XFxuICA1NTpcXHRcXHRzZWxlY3QgTkZUX0ZJQlxcbiAgNTY6XFx0XFx0dHJpc3RhdGUgXFxcIm5mX3RhYmxlcyBmaWIgLyBpcCByb3V0ZSBsb29rdXAgc3VwcG9ydFxcXCJcXG4gIDU3OlxcdFxcdGhlbHBcXG4gIDU4OlxcdFxcdCAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY0IEZJQiBsb29rdXBzLCBlLmcuIGZvciByZXZlcnNlIHBhdGggZmlsdGVyaW5nLlxcbiAgNTk6XFx0XFx0ICBJdCBhbHNvIGFsbG93cyBxdWVyeSBvZiB0aGUgRklCIGZvciB0aGUgcm91dGUgdHlwZSwgZS5nLiBsb2NhbCwgdW5pY2FzdCxcXG4gIDYwOlxcdFxcdCAgbXVsdGljYXN0IG9yIGJsYWNraG9sZS5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0ZW5kaWYgIyBORl9UQUJMRVNfSVBWNFxcbiAgNjM6XFx0XFxuICA2NDpcXHRjb25maWcgTkZfVEFCTEVTX0FSUFxcbiAgNjU6XFx0XFx0Ym9vbCBcXFwiQVJQIG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbiAgNjY6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQVJQXFxuICA2NzpcXHRcXHRoZWxwXFxuICA2ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIEFSUCBzdXBwb3J0IGZvciBuZl90YWJsZXMuXFxuICA2OTpcXHRcXG4gIDcwOlxcdGVuZGlmICMgTkZfVEFCTEVTXFxuICA3MTpcXHRcXG4gIDcyOlxcdGNvbmZpZyBORl9EVVBfSVBWNFxcbiAgNzM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBJUHY0IHBhY2tldCBkdXBsaWNhdGlvbiB0byBhbHRlcm5hdGUgZGVzdGluYXRpb25cXFwiXFxuICA3NDpcXHRcXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXFxuICA3NTpcXHRcXHRoZWxwXFxuICA3NjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG5mX2R1cF9pcHY0IGNvcmUsIHdoaWNoIGR1cGxpY2F0ZXMgYW4gSVB2NFxcbiAgNzc6XFx0XFx0ICBwYWNrZXQgdG8gYmUgcmVyb3V0ZWQgdG8gYW5vdGhlciBkZXN0aW5hdGlvbi5cXG4gIDc4OlxcdFxcbiAgNzk6XFx0Y29uZmlnIE5GX0xPR19BUlBcXG4gIDgwOlxcdFxcdHRyaXN0YXRlIFxcXCJBUlAgcGFja2V0IGxvZ2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjI5Ljk5MzA4ODY2NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTMzNDc3MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIElQdjYgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBuZXR3b3JrIGZpbHRlcmluZywgYW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIElQdjYgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24uIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AgaXMgYSBrZXkgZmlsZS4gSXQncyB0aGUgY2VudHJhbCBwb2ludCB3aGVyZSB0aGUgSVB2NiBOZXRmaWx0ZXIgb3B0aW9ucyBhcmUgZGVmaW5lZCBhbmQgZXhwb3NlZCB0byB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzICpjb25maWd1cmFibGUqIGF0IGNvbXBpbGUgdGltZS4gVGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgdGhlIG1hY3JvcyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHdoaWNoIElQdjYgTmV0ZmlsdGVyIGZlYXR1cmVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgaW1hZ2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIG1vZHVsZXMsIHdob2xlIHN1YnN5c3RlbXMsIG9yIGp1c3QgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3M/IFRoZSBzcGVjaWZpY3Mgd2lsbCBkaWN0YXRlIGhvdyBOZXRmaWx0ZXIgaW50ZXJhY3RzIHdpdGggSVB2NiB0cmFmZmljLiBJIGtub3cgdGhpcyBmaWxlIGlzIGdvaW5nIHRvIGJlIG15IHN0YXJ0aW5nIHBvaW50IGluIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjMyLjUyNjU2ODI3MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJUCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51IFxcXCJJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblxcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJUFY2IFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbiAgIDg6XFx0XFxuICAgOTpcXHQjIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXFxuICAxMDpcXHRjb25maWcgSVA2X05GX0lQVEFCTEVTX0xFR0FDWVxcbiAgMTE6XFx0XFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBJUDYgdGFibGVzIHN1cHBvcnRcXFwiXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSVBWNiBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcXG4gIDE0OlxcdFxcdGRlZmF1bHRcXHRtIGlmIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBpcDZ0YWJsZXMgaXMgYSBsZWdhY3kgcGFja2V0IGNsYXNzaWZpZXIuXFxuICAxNzpcXHRcXHQgIFRoaXMgaXMgbm90IG5lZWRlZCBpZiB5b3UgYXJlIHVzaW5nIGlwdGFibGVzIG92ZXIgbmZ0YWJsZXNcXG4gIDE4OlxcdFxcdCAgKGlwdGFibGVzLW5mdCkuXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBORl9TT0NLRVRfSVBWNlxcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjYgc29ja2V0IGxvb2t1cCBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0aGVscFxcbiAgMjM6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBJUHY2IHNvY2tldCBsb29rdXAgaW5mcmFzdHJ1Y3R1cmUuIFRoaXNcXG4gIDI0OlxcdFxcdCAgaXMgdXNlZCBieSB0aGUge2lwNixuZn10YWJsZXMgc29ja2V0IG1hdGNoLlxcbiAgMjU6XFx0XFxuICAyNjpcXHRjb25maWcgTkZfVFBST1hZX0lQVjZcXG4gIDI3OlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY2IHRwcm94eSBzdXBwb3J0XFxcIlxcbiAgMjg6XFx0XFxuICAyOTpcXHRpZiBORl9UQUJMRVNcXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIE5GX1RBQkxFU19JUFY2XFxuICAzMjpcXHRcXHRib29sIFxcXCJJUHY2IG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbiAgMzM6XFx0XFx0aGVscFxcbiAgMzQ6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBJUHY2IHN1cHBvcnQgZm9yIG5mX3RhYmxlcy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0aWYgTkZfVEFCTEVTX0lQVjZcXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIE5GVF9SRUpFQ1RfSVBWNlxcbiAgMzk6XFx0XFx0c2VsZWN0IE5GX1JFSkVDVF9JUFY2XFxuICA0MDpcXHRcXHRkZWZhdWx0IE5GVF9SRUpFQ1RcXG4gIDQxOlxcdFxcdHRyaXN0YXRlXFxuICA0MjpcXHRcXG4gIDQzOlxcdGNvbmZpZyBORlRfRFVQX0lQVjZcXG4gIDQ0OlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY2IG5mX3RhYmxlcyBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydFxcXCJcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcXG4gIDQ2OlxcdFxcdHNlbGVjdCBORl9EVVBfSVBWNlxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBUaGlzIG1vZHVsZSBlbmFibGVzIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHN1cHBvcnQgZm9yIG5mX3RhYmxlcy5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0Y29uZmlnIE5GVF9GSUJfSVBWNlxcbiAgNTE6XFx0XFx0dHJpc3RhdGUgXFxcIm5mX3RhYmxlcyBmaWIgLyBpcHY2IHJvdXRlIGxvb2t1cCBzdXBwb3J0XFxcIlxcbiAgNTI6XFx0XFx0c2VsZWN0IE5GVF9GSUJcXG4gIDUzOlxcdFxcdGhlbHBcXG4gIDU0OlxcdFxcdCAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY2IEZJQiBsb29rdXBzLCBlLmcuIGZvciByZXZlcnNlIHBhdGggZmlsdGVyaW5nLlxcbiAgNTU6XFx0XFx0ICBJdCBhbHNvIGFsbG93cyBxdWVyeSBvZiB0aGUgRklCIGZvciB0aGUgcm91dGUgdHlwZSwgZS5nLiBsb2NhbCwgdW5pY2FzdCxcXG4gIDU2OlxcdFxcdCAgbXVsdGljYXN0IG9yIGJsYWNraG9sZS5cXG4gIDU3OlxcdFxcbiAgNTg6XFx0ZW5kaWYgIyBORl9UQUJMRVNfSVBWNlxcbiAgNTk6XFx0ZW5kaWYgIyBORl9UQUJMRVNcXG4gIDYwOlxcdFxcbiAgNjE6XFx0Y29uZmlnIE5GX0RVUF9JUFY2XFxuICA2MjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblxcXCJcXG4gIDYzOlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcXG4gIDY0OlxcdFxcdGhlbHBcXG4gIDY1OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbmZfZHVwX2lwdjYgY29yZSwgd2hpY2ggZHVwbGljYXRlcyBhbiBJUHY2XFxuICA2NjpcXHRcXHQgIHBhY2tldCB0byBiZSByZXJvdXRlZCB0byBhbm90aGVyIGRlc3RpbmF0aW9uLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgTkZfUkVKRUNUX0lQVjZcXG4gIDY5OlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY2IHBhY2tldCByZWplY3Rpb25cXFwiXFxuICA3MDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDcxOlxcdFxcbiAgNzI6XFx0Y29uZmlnIE5GX0xPR19JUFY2XFxuICA3MzpcXHRcXHR0cmlzdGF0ZSBcXFwiSVB2NiBwYWNrZXQgbG9nZ2luZ1xcXCJcXG4gIDc0OlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAgNzU6XFx0XFx0c2VsZWN0IE5GX0xPR19TWVNMT0dcXG4gIDc2OlxcdFxcdGhlbHBcXG4gIDc3OlxcdFxcdCAgVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlXFxuICA3ODpcXHRcXHQgIChlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzIENPTkZJR19ORl9MT0dfU1lTTE9HLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRjb25maWcgSVA2X05GX0lQVEFCTEVTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjMyLjUyNjY0Mzg2MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTEwMTU0NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIGZvciBOZXRmaWx0ZXIgUGFja2V0IER1cGxpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciB0aGUgZnV6emluZyBzZXR1cC4gV2UncmUgbG9va2luZyBhdCBlbmFibGluZyBwYWNrZXQgZHVwbGljYXRpb24gZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGtlcm5lbCdzIG5ldGZpbHRlciBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBmb3IgSVB2NCBhbmQgSVB2Ni5cblxuVGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlc2UgZmVhdHVyZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogYE5GX0RVUF9JUFY0YCByZWxpZXMgb24gYElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUmAgYW5kIGVpdGhlciBgIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tgLiAgU2ltaWxhcmx5LCBgTkZfRFVQX0lQVjZgIG5lZWRzIGBJTkVUIFx1MDAyNlx1MDAyNiBJUFY2IFx1MDAyNlx1MDAyNiBORVRGSUxURVJgIHdpdGggdGhlIHNhbWUgY29ubnRyYWNrIGRlcGVuZGVuY3kuIFRoaXMgY2hlY2tzIG91dDsgd2Ugd2FudCB0aGUgY29yZSBpbmZyYXN0cnVjdHVyZSBlbmFibGVkIGJlZm9yZSBidWlsZGluZyBvbiBpdC4gVG8gZXhwb3NlIHRoZSBmdW5jdGlvbmFsaXR5IHRocm91Z2ggbmZ0YWJsZXMgYW5kIGlwdGFibGVzLCB3ZSdsbCBuZWVkIHRvIGVuYWJsZSB0aGUgcmVsYXRlZCB0YXJnZXRzOiBgTkZUX0RVUF9JUFY0YCwgYE5GVF9EVVBfSVBWNmAsIGFuZCwgaW4gdGhlIGNhc2Ugb2YgaXB0YWJsZXMgd2l0aCBgVEVFYCwgYE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFYC5cblxuQmFzZWQgb24gdGhlIGNvZGUgZGlmZnMsIHRoZSBzcGVjaWZpYyBzeW1ib2xzIG1vZGlmaWVkIGFyZSBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgLCBsb2NhdGVkIGluIHRoZSBgbmV0L2lwdjQvbmV0ZmlsdGVyYCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlcmAgZGlyZWN0b3JpZXMgcmVzcGVjdGl2ZWx5LiAgVGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGFjdHVhbCBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMuIEltcG9ydGFudGx5LCBhIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIGJvdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgcGFja2V0IGR1cGxpY2F0aW9uIGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcywgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgYW5kIHZlcmlmeSBpZiB0aGUgZnV6emluZyB0YXJnZXQgY2FuIGJlIHNldCB1cCBpbiB0aGUgaW5pdGlhbCBuYW1lc3BhY2UuXG5cblRoZXNlIGZ1bmN0aW9ucyBhcmVuJ3QgdW5pdmVyc2FsbHkgY2FsbGVkOyB0aGV5J3JlIHNwZWNpZmljIG5ldGZpbHRlciBoZWxwZXJzIHRyaWdnZXJlZCB3aGVuIHJ1bGVzIHdpdGggYGR1cGAgKG5mdGFibGVzKSBvciBgVEVFYCAoeHRhYmxlcykgbWF0Y2ggYSBwYWNrZXQuIFNvLCB0aGV5J3JlIG5vdCBhIGNvcmUgcGFydCBvZiB0aGUgYmFzZSBuZXR3b3JrIHN0YWNrIGJ1dCByYXRoZXIgYW4gZXh0ZW5zaW9uIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMuXG5cblRoZSBjb25maWcgb3B0aW9ucyB0byBlbmFibGUgdGhpcyBhcmU6IGBORl9EVVBfSVBWNGAsIGBORl9EVVBfSVBWNmAsIGBORlRfRFVQX0lQVjRgLCBgTkZUX0RVUF9JUFY2YCwgYW5kIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAuICBXZSdsbCBlbmFibGUgYWxsIG9mIHRoZXNlLlxuXG5Db25zaWRlcmluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCB0aGUgZnV6emluZyB0YXJnZXQgYmVpbmcgYFdvcnRoRnV6emluZ2AsIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCBhbGwgbG9va3MgZ29vZC4gTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzcwLCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjM5LjAzNjgwMjA1MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NTg3NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9EVVBfSVBWNFwiLFxuICAgIFwiTkZfRFVQX0lQVjZcIixcbiAgICBcIk5GVF9EVVBfSVBWNFwiLFxuICAgIFwiTkZUX0RVUF9JUFY2XCIsXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX1RFRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2R1cF9pcHY0XCIsXG4gICAgXCJuZl9kdXBfaXB2NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMgaW4gbmZfZHVwX2lwdjQgYW5kIG5mX2R1cF9pcHY2IHRvIHJlc3RyaWN0IGV4ZWN1dGlvbiB0byB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAobmV0LVxcdTAwM2V1c2VyX25zID09IFxcdTAwMjZpbml0X3VzZXJfbnMpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBjb250cm9sIGZsb3cgZm9yIG5mdGFibGVzIChuZnRfZHVwKSBhbmQgeHRhYmxlcyAoeHRfVEVFKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gbmV0d29yayBuYW1lc3BhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0RVUF9JUFY0XCIsXG4gICAgXCJORl9EVVBfSVBWNlwiLFxuICAgIFwiTkZUX0RVUF9JUFY0XCIsXG4gICAgXCJORlRfRFVQX0lQVjZcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZHVwX2lwdjRcIixcbiAgICBcIm5mX2R1cF9pcHY2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0ZmlsdGVyIHBhY2tldCBkdXBsaWNhdGlvbiBsb2dpYyBpbiBuZl9kdXBfaXB2NCBhbmQgbmZfZHVwX2lwdjYgdG8gcmVzdHJpY3QgZXhlY3V0aW9uIHRvIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlIChuZXQtXFx1MDAzZXVzZXJfbnMgPT0gXFx1MDAyNmluaXRfdXNlcl9ucykuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGNvbnRyb2wgZmxvdyBmb3IgbmZ0YWJsZXMgKG5mdF9kdXApIGFuZCB4dGFibGVzICh4dF9URUUpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiBuZXR3b3JrIG5hbWVzcGFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjM5LjExMjM5NjY0OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NTYzMzczOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzozOS4xMTI4ODk4OTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNDc1NTgzOTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24vbmFtZXNwYWNlIGNoZWNrIChgbmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnNgKSB0byBgbmZfZHVwX2lwdjQoKWAgYW5kIGBuZl9kdXBfaXB2NigpYCB0byByZXR1cm4gZWFybHkgd2hlbiBjYWxsZWQgZnJvbSBhIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlLlxcblxcblRoaXMgY2hhbmdlOlxcbjEuIERvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IHN0YWNrL2hlYXAgYnVmZmVycyBvciBkYXRhIHN0cnVjdHVyZXMuXFxuMi4gRG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuXFxuMy4gRG9lcyBub3QgbW9kaWZ5IGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBjb250cm9sIGZsb3cgaW4gYW55IHdheSB0aGF0IHdvdWxkIHBlcm1pdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0NjYzYzM0ODg1ODFiYWVkNDYwMzUwNzAyZmIyYTVhMTczNWY4OGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDE3OjIzOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuaW5kZXggOWE3NzM1MDJmMTBhYy4uYzMzZGFlMjQ4YzQ3NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuQEAgLTUzLDYgKzUzLDkgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIHtcbiBcdHN0cnVjdCBpcGhkciAqaXBoO1xuIFxuK1x0aWYgKG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucylcbitcdFx0cmV0dXJuO1xuK1xuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlKVxuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXG5pbmRleCA2ZGEzMTAyYjdjMWIzLi5hNWY2ZjA3NGE3ZTkxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXG5AQCAtNDcsNiArNDcsOSBAQCBzdGF0aWMgYm9vbCBuZl9kdXBfaXB2Nl9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIFx0XHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZilcbiB7XG4rXHRpZiAobmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXG4gXHRcdGdvdG8gb3V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6MzkuMTEyODkwNzM3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwMjQ2MTI3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBgbmZfZHVwX2lwdjQuY2AgYW5kIGBuZl9kdXBfaXB2Ni5jYCBpbiB0aGUgbmV0ZmlsdGVyIGNvZGUuIEdvdCBpdC5cIiBUaGUgaW5kZXggY2hhbmdlcyBsb29rIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIHRoZSBkaWZmIGl0c2VsZiBpcyBtaW5pbWFsOiB3ZSdyZSBhZGRpbmcgYSBjaGVjayBmb3IgYG5ldC1cdTAwM2V1c2VyX25zYC5cblxuTXkgZXhwZXJ0IGludHVpdGlvbiBzdWdnZXN0cyB0aGlzIGlzIGxpa2VseSBhIHNlY3VyaXR5IGhhcmRlbmluZyBjaGFuZ2UuIFRoZSBhZGRlZCBjb25kaXRpb24gYGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpIHJldHVybjtgIGltbWVkaWF0ZWx5IGZsYWdzIHRvIG1lIHRoYXQgd2UgYXJlIHRhbGtpbmcgYWJvdXQgYSBuYW1lc3BhY2VkIG5ldHdvcmsgY29udGV4dC4gVGhpcyBpcyBsaWtlbHkgdG8gcHJldmVudCBjZXJ0YWluIG9wZXJhdGlvbnMgd2hlbiB0aGUgbmV0d29yayBuYW1lc3BhY2UgaXNuJ3QgdGhlIGluaXRpYWwgb25lLiBJIHdvdWxkIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNvbnRleHRzIGFuZCBwb3NzaWJsZSBleHBsb2l0cyBoZXJlLCBidXQsIGluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHNhbml0eSBjaGVjaywgZ3VhcmRpbmcgYWdhaW5zdCBwb3RlbnRpYWxseSB1bmludGVuZGVkIGJlaGF2aW9yIGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcy4gVGhlIGZ1bmN0aW9uIGFwcGVhcnMgdG8gZHVwbGljYXRlIHBhY2tldHMsIHNvIHBvdGVudGlhbGx5IHRoZXJlIGlzIGFuIGVzY2FwZSBvciBsZWFrYWdlIHNjZW5hcmlvIHRoYXQgdGhpcyBhZGRyZXNzZXMuXG5cblRvIGRldGVybWluZSBpZiBLTVNBTiBmdXp6aW5nIGlzICpuZWNlc3NhcnkqLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mICpza2lwcGluZyogdGhlIGR1cGxpY2F0aW9uLiBEb2VzIGl0IGludHJvZHVjZSBhIHVzZS1hZnRlci1mcmVlLCBhbiB1bmluaXRpYWxpemVkIHJlYWQsIG9yIG1heWJlIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIGVkZ2UgY2FzZXM/IEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBidXQgdGhlIHBhdGNoIGl0c2VsZiBzZWVtcyBsaWtlIGEgbWl0aWdhdGlvbiBmb3IgYSBrbm93biwgb3Igc3VzcGVjdGVkLCBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjQ1LjEzNzUwNjQ0OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIChDKSAyMDA3IGJ5IFNlYmFzdGlhbiBDbGHDn2VuIFxcdTAwM2NzZWJhc3RpYW4uY2xhc3NlbkBmcmVlbmV0LmFnXFx1MDAzZVxcbiAgIDQ6XFx0ICogKEMpIDIwMDctMjAxMCBieSBKYW4gRW5nZWxoYXJkdCBcXHUwMDNjamVuZ2VsaEBtZWRvemFzLmRlXFx1MDAzZVxcbiAgIDU6XFx0ICpcXG4gICA2OlxcdCAqIEV4dHJhY3RlZCBmcm9tIHh0X1RFRS5jXFxuICAgNzpcXHQgKi9cXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcC5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmNwdS5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JvdXRlLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2NoZWNrc3VtLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2Zsb3cuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvaWNtcC5oXFx1MDAzZVxcbiAgMTc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pcC5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9yb3V0ZS5oXFx1MDAzZVxcbiAgMTk6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oXFx1MDAzZVxcbiAgMjA6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcXG4gIDIxOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oXFx1MDAzZVxcbiAgMjI6XFx0I2VuZGlmXFxuICAyMzpcXHRcXG4gIDI0OlxcdHN0YXRpYyBib29sIG5mX2R1cF9pcHY0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gIDI1OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpndywgaW50IG9pZilcXG4gIDI2OlxcdHtcXG4gIDI3OlxcdFxcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7XFxuICAyODpcXHRcXHRzdHJ1Y3QgcnRhYmxlICpydDtcXG4gIDI5OlxcdFxcdHN0cnVjdCBmbG93aTQgZmw0O1xcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHRtZW1zZXQoXFx1MDAyNmZsNCwgMCwgc2l6ZW9mKGZsNCkpO1xcbiAgMzI6XFx0XFx0aWYgKG9pZiAhPSAtMSlcXG4gIDMzOlxcdFxcdFxcdGZsNC5mbG93aTRfb2lmID0gb2lmO1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRcXHRmbDQuZGFkZHIgPSBndy1cXHUwMDNlc19hZGRyO1xcbiAgMzY6XFx0XFx0Zmw0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwaCk7XFxuICAzNzpcXHRcXHRmbDQuZmxvd2k0X3Njb3BlID0gUlRfU0NPUEVfVU5JVkVSU0U7XFxuICAzODpcXHRcXHRmbDQuZmxvd2k0X2ZsYWdzID0gRkxPV0lfRkxBR19LTk9XTl9OSDtcXG4gIDM5OlxcdFxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFxcdTAwMjZmbDQpO1xcbiAgNDA6XFx0XFx0aWYgKElTX0VSUihydCkpXFxuICA0MTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdHNrYl9kc3RfZHJvcChza2IpO1xcbiAgNDQ6XFx0XFx0c2tiX2RzdF9zZXQoc2tiLCBcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxuICA0NTpcXHRcXHRza2ItXFx1MDAzZWRldiAgICAgID0gcnQtXFx1MDAzZWRzdC5kZXY7XFxuICA0NjpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDQ5OlxcdH1cXG4gIDUwOlxcdFxcbiAgNTE6XFx0dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbiAgNTI6XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpbl9hZGRyICpndywgaW50IG9pZilcXG4gIDUzOlxcdHtcXG4gIDU0OlxcdFxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiAgNTU6XFx0XFxuICA1NjpcXHRcXHRpZiAobmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpXFxuICA1NzpcXHRcXHRcXHRyZXR1cm47XFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDYwOlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXFxuICA2MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDYyOlxcdFxcdC8qXFxuICA2MzpcXHRcXHQgKiBDb3B5IHRoZSBza2IsIGFuZCByb3V0ZSB0aGUgY29weS4gV2lsbCBsYXRlciByZXR1cm4gJVhUX0NPTlRJTlVFIGZvclxcbiAgNjQ6XFx0XFx0ICogdGhlIG9yaWdpbmFsIHNrYiwgd2hpY2ggc2hvdWxkIGNvbnRpbnVlIG9uIGl0cyB3YXkgYXMgaWYgbm90aGluZyBoYXNcXG4gIDY1OlxcdFxcdCAqIGhhcHBlbmVkLiBUaGUgY29weSBzaG91bGQgYmUgaW5kZXBlbmRlbnRseSBkZWxpdmVyZWQgdG8gdGhlIGdhdGV3YXkuXFxuICA2NjpcXHRcXHQgKi9cXG4gIDY3OlxcdFxcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xcbiAgNjg6XFx0XFx0aWYgKHNrYiA9PSBOVUxMKVxcbiAgNjk6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA3MDpcXHRcXG4gIDcxOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuICA3MjpcXHRcXHQvKiBBdm9pZCBjb3VudGluZyBjbG9uZWQgcGFja2V0cyB0b3dhcmRzIHRoZSBvcmlnaW5hbCBjb25uZWN0aW9uLiAqL1xcbiAgNzM6XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gIDc0OlxcdFxcdG5mX2N0X3NldChza2IsIE5VTEwsIElQX0NUX1VOVFJBQ0tFRCk7XFxuICA3NTpcXHQjZW5kaWZcXG4gIDc2OlxcdFxcdC8qXFxuICA3NzpcXHRcXHQgKiBJZiB3ZSBhcmUgaW4gUFJFUk9VVElORy9JTlBVVCwgZGVjcmVhc2UgdGhlIFRUTCB0byBtaXRpZ2F0ZSBwb3RlbnRpYWxcXG4gIDc4OlxcdFxcdCAqIGxvb3BzIGJldHdlZW4gdHdvIGhvc3RzLlxcbiAgNzk6XFx0XFx0ICpcXG4gIDgwOlxcdFxcdCAqIFNldCAlSVBfREYgc28gdGhhdCB0aGUgb3JpZ2luYWwgc291cmNlIGlzIG5vdGlmaWVkIG9mIGEgcG90ZW50aWFsbHlcXG4gIDgxOlxcdFxcdCAqIGRlY3JlYXNlZCBNVFUgb24gdGhlIGNsb25lIHJvdXRlLiBJUHY2IGRvZXMgdGhpcyB0b28uXFxuICA4MjpcXHRcXHQgKlxcbiAgODM6XFx0XFx0ICogSVAgaGVhZGVyIGNoZWNrc3VtIHdpbGwgYmUgcmVjYWxjdWxhdGVkIGF0IGlwX2xvY2FsX291dC5cXG4gIDg0OlxcdFxcdCAqL1xcbiAgODU6XFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuICA4NjpcXHRcXHRpcGgtXFx1MDAzZWZyYWdfb2ZmIHw9IGh0b25zKElQX0RGKTtcXG4gIDg3OlxcdFxcdGlmIChob29rbnVtID09IE5GX0lORVRfUFJFX1JPVVRJTkcgfHxcXG4gIDg4OlxcdFxcdCAgICBob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pXFxuICA4OTpcXHRcXHRcXHQtLWlwaC1cXHUwMDNldHRsO1xcbiAgOTA6XFx0XFxuICA5MTpcXHRcXHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XFxuICA5MjpcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xcbiAgOTM6XFx0XFx0XFx0aXBfbG9jYWxfb3V0KG5ldCwgc2tiLVxcdTAwM2Vzaywgc2tiKTtcXG4gIDk0OlxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xcbiAgOTU6XFx0XFx0fSBlbHNlIHtcXG4gIDk2OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgOTc6XFx0XFx0fVxcbiAgOTg6XFx0b3V0OlxcbiAgOTk6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIDEwMDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjQ1LjEzNzU4OTkzOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzEzMjY5NjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDb25zaWRlcmluZyB0aGUgSVB2NiBEdXBsaWNhdGlvbiBDYXNlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIE15IHByaW1hcnkgZm9jdXMgaXMgbGlrZWx5IG9uIGBuZl9kdXAuY2AsIGJ1dCBsZXQncyBub3QgYmUgaGFzdHkuIFRvIGVuc3VyZSBJJ20gY292ZXJpbmcgYWxsIGJhc2VzIGluIHRoaXMgSVB2NiBzY2VuYXJpbywgSSBzaG91bGQgYWxzbyB0aG9yb3VnaGx5IGV4YW1pbmUgYG5mX2R1cF9pcHY2LmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZHVwbGljYXRpb24gcHJvY2VzcyBzcGVjaWZpY2FsbHkgaGFuZGxlcyBJUHY2IHBhY2tldHMuIEknbSB0aGlua2luZyB0aGlzIHdpbGwgaGVscCBhdm9pZCBhbnkgcG90ZW50aWFsIG92ZXJzaWdodHMgb3IgYXNzdW1wdGlvbnMgYmFzZWQgc29sZWx5IG9uIElQdjQgYmVoYXZpb3IuIEl0J3MgZ29vZCB0byBiZSB0aG9yb3VnaCBhbmQgY29uc2lkZXIgYWxsIHRoZSByZWxldmFudCBzb3VyY2UgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDczOSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6NDguNDUwODYyNDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiAoQykgMjAwNyBieSBTZWJhc3RpYW4gQ2xhw59lbiBcXHUwMDNjc2ViYXN0aWFuLmNsYXNzZW5AZnJlZW5ldC5hZ1xcdTAwM2VcXG4gICA0OlxcdCAqIChDKSAyMDA3LTIwMTAgYnkgSmFuIEVuZ2VsaGFyZHQgXFx1MDAzY2plbmdlbGhAbWVkb3phcy5kZVxcdTAwM2VcXG4gICA1OlxcdCAqXFxuICAgNjpcXHQgKiBFeHRyYWN0ZWQgZnJvbSB4dF9URUUuY1xcbiAgIDc6XFx0ICovXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGVyY3B1LmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9pcHY2L25mX2R1cF9pcHY2LmhcXHUwMDNlXFxuICAxNTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcXHUwMDNlXFxuICAxNzpcXHQjZW5kaWZcXG4gIDE4OlxcdFxcbiAgMTk6XFx0c3RhdGljIGJvb2wgbmZfZHVwX2lwdjZfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgMjA6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZilcXG4gIDIxOlxcdHtcXG4gIDIyOlxcdFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpO1xcbiAgMjM6XFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xcbiAgMjQ6XFx0XFx0c3RydWN0IGZsb3dpNiBmbDY7XFxuICAyNTpcXHRcXG4gIDI2OlxcdFxcdG1lbXNldChcXHUwMDI2Zmw2LCAwLCBzaXplb2YoZmw2KSk7XFxuICAyNzpcXHRcXHRpZiAob2lmICE9IC0xKVxcbiAgMjg6XFx0XFx0XFx0Zmw2LmZsb3dpNl9vaWYgPSBvaWY7XFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdGZsNi5kYWRkciA9ICpndztcXG4gIDMxOlxcdFxcdGZsNi5mbG93bGFiZWwgPSAoX19mb3JjZSBfX2JlMzIpKCgoaXBoLVxcdTAwM2VmbG93X2xibFswXSBcXHUwMDI2IDB4RikgXFx1MDAzY1xcdTAwM2MgMTYpIHxcXG4gIDMyOlxcdFxcdFxcdFxcdChpcGgtXFx1MDAzZWZsb3dfbGJsWzFdIFxcdTAwM2NcXHUwMDNjIDgpIHwgaXBoLVxcdTAwM2VmbG93X2xibFsyXSk7XFxuICAzMzpcXHRcXHRmbDYuZmxvd2k2X2ZsYWdzID0gRkxPV0lfRkxBR19LTk9XTl9OSDtcXG4gIDM0OlxcdFxcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCBcXHUwMDI2Zmw2KTtcXG4gIDM1OlxcdFxcdGlmIChkc3QtXFx1MDAzZWVycm9yKSB7XFxuICAzNjpcXHRcXHRcXHRkc3RfcmVsZWFzZShkc3QpO1xcbiAgMzc6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgMzg6XFx0XFx0fVxcbiAgMzk6XFx0XFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuICA0MDpcXHRcXHRza2JfZHN0X3NldChza2IsIGRzdCk7XFxuICA0MTpcXHRcXHRza2ItXFx1MDAzZWRldiAgICAgID0gZHN0X2Rldihkc3QpO1xcbiAgNDI6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDQ1OlxcdH1cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0dm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbiAgNDg6XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXFxuICA0OTpcXHR7XFxuICA1MDpcXHRcXHRpZiAobmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpXFxuICA1MTpcXHRcXHRcXHRyZXR1cm47XFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDU0OlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXFxuICA1NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDU2OlxcdFxcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xcbiAgNTc6XFx0XFx0aWYgKHNrYiA9PSBOVUxMKVxcbiAgNTg6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA1OTpcXHRcXG4gIDYwOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuICA2MTpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbiAgNjI6XFx0XFx0bmZfY3Rfc2V0KHNrYiwgTlVMTCwgSVBfQ1RfVU5UUkFDS0VEKTtcXG4gIDYzOlxcdCNlbmRpZlxcbiAgNjQ6XFx0XFx0aWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORyB8fFxcbiAgNjU6XFx0XFx0ICAgIGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9JTikge1xcbiAgNjY6XFx0XFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7XFxuICA2NzpcXHRcXHRcXHQtLWlwaC1cXHUwMDNlaG9wX2xpbWl0O1xcbiAgNjg6XFx0XFx0fVxcbiAgNjk6XFx0XFx0aWYgKG5mX2R1cF9pcHY2X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xcbiAgNzA6XFx0XFx0XFx0Y3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gdHJ1ZTtcXG4gIDcxOlxcdFxcdFxcdGlwNl9sb2NhbF9vdXQobmV0LCBza2ItXFx1MDAzZXNrLCBza2IpO1xcbiAgNzI6XFx0XFx0XFx0Y3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XFxuICA3MzpcXHRcXHR9IGVsc2Uge1xcbiAgNzQ6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA3NTpcXHRcXHR9XFxuICA3NjpcXHRvdXQ6XFxuICA3NzpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gIDc4OlxcdH1cXG4gIDc5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2R1cF9pcHY2KTtcXG4gIDgwOlxcdFxcbiAgODE6XFx0TU9EVUxFX0FVVEhPUihcXFwiU2ViYXN0aWFuIENsYcOfZW4gXFx1MDAzY3NlYmFzdGlhbi5jbGFzc2VuQGZyZWVuZXQuYWdcXHUwMDNlXFxcIik7XFxuICA4MjpcXHRNT0RVTEVfQVVUSE9SKFxcXCJKYW4gRW5nZWxoYXJkdCBcXHUwMDNjamVuZ2VsaEBtZWRvemFzLmRlXFx1MDAzZVxcXCIpO1xcbiAgODM6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJuZl9kdXBfaXB2NjogSVB2NiBwYWNrZXQgZHVwbGljYXRpb25cXFwiKTtcXG4gIDg0OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6NDguNDUwOTQxNThaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ5ODkzNzc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTZWN1cml0eSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhleSdyZSBhZGRpbmcgYSBjaGVjaywgYW4gYGlmYCBzdGF0ZW1lbnQsIGluIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAuIFRoZSBjb25kaXRpb24gaXMgYG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9uc2AuIFNvLCBiYXNpY2FsbHksIGlmIHdlJ3JlICpub3QqIGluIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlLCBpdCdzIGFuIGltbWVkaWF0ZSByZXR1cm4uIFRoZSByYXRpb25hbGUgaXMgY2xlYXJseSBzZWN1cml0eS1yZWxhdGVkOiBwYWNrZXQgZHVwbGljYXRpb24gaW4gYSBub24taW5pdCBuYW1lc3BhY2UsIHBvdGVudGlhbGx5IHRocm91Z2ggbmZ0YWJsZXMgYGR1cGAgb3IgeHRhYmxlcyBgVEVFYCwgY291bGQgbGVhZCB0byBhIHNlcmlvdXMgcHJvYmxlbS4gSXQgc291bmRzIGxpa2UgdGhlcmUncyBhIHJpc2sgb2YgYnJlYWtpbmcgbmV0bnMgaXNvbGF0aW9uLCBjcmVhdGluZyByb3V0aW5nIGxvb3BzLCBvciBsZWFraW5nIHBhY2tldHMgYmV0d2VlbiBuYW1lc3BhY2VzLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzY2FuIGZvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCBtZSBtYWtlIHN1cmU6IE5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwLCBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBhbmQgbm8gbmV3IHN0cnVjdCBmaWVsZHMuIFRoaXMgYWxsIGxvb2tzIGdvb2Q7IGl0J3MganVzdCBhbiBlYXJseSByZXR1cm4uXG5cbk5vdywgbGV0J3MgZGlnIGEgYml0IGRlZXBlci4gSXQncyBhIHNpbXBsZSBgaWZgIGFuZCByZXR1cm4sIGJ1dCBpcyB0aGVyZSBhbnl0aGluZyBzdWJ0bGUgSSdtIG1pc3Npbmc/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNhbGxlciBvZiBgbmZfZHVwX2lwdjRgL2BuZl9kdXBfaXB2NmAgc2VlaW5nIHRoaXM/IEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVyczogc3BlY2lmaWNhbGx5IGBuZnRfZHVwX2lwdjRfZXZhbGAgb3IgYHRlZV90ZzRgIC0gbGV0IG1lIGxvb2sgdGhlbSBvdmVyIGFuZCBzZWUgaG93IHRoZXkgYXJlIGFmZmVjdGVkLiBJdCBzaG91bGRuJ3QgYmUgbXVjaCwgYnV0IGl0IGFsd2F5cyBwYXlzIHRvIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjYzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6NTMuOTQ5ODgxODgyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgzNjc5OTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2R1cF9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmgtNy1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oOjg6dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmgtOS1cXHRcXHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKTtcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTcyPWNvbmZpZyBORl9EVVBfSVBWNFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNzUtXFx0aGVscFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjc2OlxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbmZfZHVwX2lwdjQgY29yZSwgd2hpY2ggZHVwbGljYXRlcyBhbiBJUHY0XFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNzctXFx0ICBwYWNrZXQgdG8gYmUgcmVyb3V0ZWQgdG8gYW5vdGhlciBkZXN0aW5hdGlvbi5cXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZT01MT1vYmotJChDT05GSUdfSVBfTkZfQVJQRklMVEVSKSArPSBhcnB0YWJsZV9maWx0ZXIub1xcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS01Mi1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTM6b2JqLSQoQ09ORklHX05GX0RVUF9JUFY0KSArPSBuZl9kdXBfaXB2NC5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTU0LVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMTgtI2luY2x1ZGUgXFx1MDAzY25ldC9yb3V0ZS5oXFx1MDAzZVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjE5OiNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfZHVwX2lwdjQuaFxcdTAwM2VcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0yMC0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMjMtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6MjQ6c3RhdGljIGJvb2wgbmZfZHVwX2lwdjRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTI1LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpndywgaW50IG9pZilcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTUwLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjUxOnZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy01Mi1cXHRcXHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtOTAtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6OTE6XFx0aWYgKG5mX2R1cF9pcHY0X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTkyLVxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0xMDAtfVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjEwMTpFWFBPUlRfU1lNQk9MX0dQTChuZl9kdXBfaXB2NCk7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMTAyLVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM9MTA0PU1PRFVMRV9BVVRIT1IoXFxcIkphbiBFbmdlbGhhcmR0IFxcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcXHUwMDNlXFxcIik7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6MTA1Ok1PRFVMRV9ERVNDUklQVElPTihcXFwibmZfZHVwX2lwdjQ6IER1cGxpY2F0ZSBJUHY0IHBhY2tldFxcXCIpO1xcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTEwNi1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMTItI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXHUwMDNlXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jOjEzOiNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfZHVwX2lwdjQuaFxcdTAwM2VcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMTQtXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmM9MjA9c3RhdGljIHZvaWQgbmZ0X2R1cF9pcHY0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jLTI5LVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYzozMDpcXHRuZl9kdXBfaXB2NChuZnRfbmV0KHBrdCksIHBrdC1cXHUwMDNlc2tiLCBuZnRfaG9vayhwa3QpLCBcXHUwMDI2Z3csIG9pZik7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jLTMxLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtMTYtI2luY2x1ZGUgXFx1MDAzY25ldC9yb3V0ZS5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmM6MTc6I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtMTgtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kdXBfaXB2Ni5oXFx1MDAzZVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9URUUuYz0zNz10ZWVfdGc0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNDEtXFxubmV0L25ldGZpbHRlci94dF9URUUuYzo0MjpcXHRuZl9kdXBfaXB2NCh4dF9uZXQocGFyKSwgc2tiLCB4dF9ob29rbnVtKHBhciksIFxcdTAwMjZpbmZvLVxcdTAwM2Vndy5pbiwgb2lmKTtcXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTQzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzo1Ni4wMzM1NjczNTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzgzNTEzMjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIGNsb3NlbHkgYXQgdGhlc2UgYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCBmdW5jdGlvbnMuIFRoZSBmYWN0IHRoYXQgdGhleSByZXR1cm4gYHZvaWRgIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUg4oCTIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MgY29uc2lkZXJhYmx5LiBCYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIGFueSBlYXJseSByZXR1cm5zIGZyb20gdGhlc2UgZnVuY3Rpb25zIGRvbid0IGxlYXZlIGFueXRoaW5nIGluIGEgbWVzc3kgc3RhdGUuIE5vIGRhdGEgaXMgYmVpbmcgcGFzc2VkIGFyb3VuZCBpbiBhbiB1bmluaXRpYWxpemVkIGNvbmRpdGlvbi4gVGhlcmUncyBubyB1bmV4cGVjdGVkIGFsbG9jYXRpb24gb3IgYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzLCBhdCBpdHMgY29yZSwgYSBzdHJhaWdodGZvcndhcmQgY2hlY2sgZm9yIHByaXZpbGVnZSBhbmQgbmFtZXNwYWNlIGlzb2xhdGlvbi5cblxuR2l2ZW4gdGhpcyB1bmRlcnN0YW5kaW5nLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHNhbml0aXplcnMgbGlrZSBLQVNBTiBhcmUgZW50aXJlbHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55dGhpbmcgdGhhdCAqbWlnaHQqIGJlIGNvbmNlcm5pbmcuIFdlIGNlcnRhaW5seSBkb24ndCBuZWVkIHRvIGludm9sdmUgS01TQU4gZm9yIHRoaXMuIEl0J3MgYSBjbGVhbiBjaGFuZ2UuXG5cbk5vdywgbGV0J3MgZ2V0IHRoYXQgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwgcHJlcHBlZC4gSSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB3aGF0IG5lZWRzIHRvIGJlIGNvbW11bmljYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzNywiT3V0cHV0VG9rZW5zIjoxNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjQ6MDMuODY4NzAyNjM5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgcGVybWlzc2lvbi9uYW1lc3BhY2UgY2hlY2sgKGBuZXQtXFx1MDAzZXVzZXJfbnMgIT0gXFx1MDAyNmluaXRfdXNlcl9uc2ApIHRvIGBuZl9kdXBfaXB2NCgpYCBhbmQgYG5mX2R1cF9pcHY2KClgIHRvIHJldHVybiBlYXJseSB3aGVuIGNhbGxlZCBmcm9tIGEgbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2UuXFxuXFxuVGhpcyBjaGFuZ2U6XFxuMS4gRG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBhbnkgc3RhY2svaGVhcCBidWZmZXJzIG9yIGRhdGEgc3RydWN0dXJlcy5cXG4yLiBEb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgdG8gdXNlciBzcGFjZS5cXG4zLiBEb2VzIG5vdCBtb2RpZnkgYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja3MsIG9yIGNvbnRyb2wgZmxvdyBpbiBhbnkgd2F5IHRoYXQgd291bGQgcGVybWl0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuXFxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24vbmFtZXNwYWNlIGNoZWNrIChgbmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnNgKSB0byBgbmZfZHVwX2lwdjQoKWAgYW5kIGBuZl9kdXBfaXB2NigpYCB0byByZXR1cm4gZWFybHkgd2hlbiBjYWxsZWQgZnJvbSBhIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlLlxcblxcblRoaXMgY2hhbmdlOlxcbjEuIERvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IHN0YWNrL2hlYXAgYnVmZmVycyBvciBkYXRhIHN0cnVjdHVyZXMuXFxuMi4gRG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuXFxuMy4gRG9lcyBub3QgbW9kaWZ5IGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBjb250cm9sIGZsb3cgaW4gYW55IHdheSB0aGF0IHdvdWxkIHBlcm1pdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xqmz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 16:12:24 +0000 UTC FinishedAt: 2026-09-04 17:24:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_DUP_IPV4", "NF_DUP_IPV6", "NFT_DUP_IPV4", "NFT_DUP_IPV6", "NETFILTER_XT_TARGET_TEE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_DUP_IPV4", "NF_DUP_IPV6", "NFT_DUP_IPV4", "NFT_DUP_IPV6", "NETFILTER_XT_TARGET_TEE" ], "series_id": "f7d3a499-8077-4f54-8d34-2256f1769892" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_dup_ipv4", "nf_dup_ipv6" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0RVUF9JUFY0JiMzNDssCiAgICAmIzM0O05GX0RVUF9JUFY2JiMzNDssCiAgICAmIzM0O05GVF9EVVBfSVBWNCYjMzQ7LAogICAgJiMzNDtORlRfRFVQX0lQVjYmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9URUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9kdXBfaXB2NCYjMzQ7LAogICAgJiMzNDtuZl9kdXBfaXB2NiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBwZXJtaXNzaW9uL25hbWVzcGFjZSBjaGVjayAoYG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9uc2ApIHRvIGBuZl9kdXBfaXB2NCgpYCBhbmQgYG5mX2R1cF9pcHY2KClgIHRvIHJldHVybiBlYXJseSB3aGVuIGNhbGxlZCBmcm9tIGEgbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2UuXG5cblRoaXMgY2hhbmdlOlxuMS4gRG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBhbnkgc3RhY2svaGVhcCBidWZmZXJzIG9yIGRhdGEgc3RydWN0dXJlcy5cbjIuIERvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3QgcGFkZGluZyB0byB1c2VyIHNwYWNlLlxuMy4gRG9lcyBub3QgbW9kaWZ5IGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBjb250cm9sIGZsb3cgaW4gYW55IHdheSB0aGF0IHdvdWxkIHBlcm1pdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0ZmlsdGVyIHBhY2tldCBkdXBsaWNhdGlvbiBsb2dpYyBpbiBuZl9kdXBfaXB2NCBhbmQgbmZfZHVwX2lwdjYgdG8gcmVzdHJpY3QgZXhlY3V0aW9uIHRvIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlIChuZXQtXHUwMDNldXNlcl9ucyA9PSBcdTAwMjZpbml0X3VzZXJfbnMpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBjb250cm9sIGZsb3cgZm9yIG5mdGFibGVzIChuZnRfZHVwKSBhbmQgeHRhYmxlcyAoeHRfVEVFKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gbmV0d29yayBuYW1lc3BhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDQ2NjNjMzQ4ODU4MWJhZWQ0NjAzNTA3MDJmYjJhNWExNzM1Zjg4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTc6MjM6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuaW5kZXggOWE3NzM1MDJmMTBhYy4uYzMzZGFlMjQ4YzQ3NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuQEAgLTUzLDYgJiM0Mzs1Myw5IEBAIHZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcbiYjNDM7XHRpZiAobmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiBcdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSlcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xuaW5kZXggNmRhMzEwMmI3YzFiMy4uYTVmNmYwNzRhN2U5MSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xuQEAgLTQ3LDYgJiM0Mzs0Nyw5IEBAIHN0YXRpYyBib29sIG5mX2R1cF9pcHY2X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gXHRcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxuIHtcbiYjNDM7XHRpZiAobmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiBcdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSlcbiBcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRFVQX0lQVjQmIzM0OywKICAgICYjMzQ7TkZfRFVQX0lQVjYmIzM0OywKICAgICYjMzQ7TkZUX0RVUF9JUFY0JiMzNDssCiAgICAmIzM0O05GVF9EVVBfSVBWNiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX1RFRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2R1cF9pcHY0JiMzNDssCiAgICAmIzM0O25mX2R1cF9pcHY2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMgaW4gbmZfZHVwX2lwdjQgYW5kIG5mX2R1cF9pcHY2IHRvIHJlc3RyaWN0IGV4ZWN1dGlvbiB0byB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAobmV0LVx1MDAzZXVzZXJfbnMgPT0gXHUwMDI2aW5pdF91c2VyX25zKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgY29udHJvbCBmbG93IGZvciBuZnRhYmxlcyAobmZ0X2R1cCkgYW5kIHh0YWJsZXMgKHh0X1RFRSkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIG5ldHdvcmsgbmFtZXNwYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ0NjYzYzM0ODg1ODFiYWVkNDYwMzUwNzAyZmIyYTVhMTczNWY4OGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDE3OjIzOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYwppbmRleCA5YTc3MzUwMmYxMGFjLi5jMzNkYWUyNDhjNDc3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYwpAQCAtNTMsNiAmIzQzOzUzLDkgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLAogewogCXN0cnVjdCBpcGhkciAqaXBoOwogCiYjNDM7CWlmIChuZXQtJmd0O3VzZXJfbnMgIT0gJmFtcDtpbml0X3VzZXJfbnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWlmIChjdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYwppbmRleCA2ZGEzMTAyYjdjMWIzLi5hNWY2ZjA3NGE3ZTkxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYwpAQCAtNDcsNiAmIzQzOzQ3LDkgQEAgc3RhdGljIGJvb2wgbmZfZHVwX2lwdjZfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLAogCQkgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZikKIHsKJiM0MzsJaWYgKG5ldC0mZ3Q7dXNlcl9ucyAhPSAmYW1wO2luaXRfdXNlcl9ucykKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJaWYgKGN1cnJlbnQtJmd0O2luX25mX2R1cGxpY2F0ZSkKIAkJZ290byBvdXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIEZpbHRlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IGltcHJlc3Npb24gaXMgYWx3YXlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGJlaW5nIHRvdWNoZWQuIFdlJiMzOTt2ZSBnb3QgbW9kaWZpY2F0aW9ucyBpbiBgbmZfZHVwX2lwdjQuY2AgYW5kIGBuZl9kdXBfaXB2Ni5jYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbmV0d29yayBmaWx0ZXJpbmcsIHNwZWNpZmljYWxseSBJUHY0IGFuZCBJUHY2IGR1cGxpY2F0aW9uLCBsaWtlbHkgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBUaGUgZmlsZSBuYW1lcyB0aGVtc2VsdmVzIGFyZSBmYWlybHkgZXhwbGljaXQuCgpOb3csIHRob3NlIGNvZGUgY2hhbmdlc+KApiB0aGV5JiMzOTtyZSBhZGRpbmcgYSBjaGVjazogYGlmIChuZXQtJmd0O3VzZXJfbnMgIT0gJmFtcDtpbml0X3VzZXJfbnMpIHJldHVybjtgIGluIGJvdGggZmlsZXMuIFRoaXMgbG9va3MgbGlrZSBhIG5hbWVzcGFjZSByZXN0cmljdGlvbi4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIGNvZGUgZnJvbSBydW5uaW5nIGlmIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBpc24mIzM5O3QgdGhlIGluaXRpYWwgb25lIChgaW5pdF91c2VyX25zYCkuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZSBkdXBsaWNhdGlvbiBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIHJlc3RyaWN0ZWQgdG8gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UuIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGV5JiMzOTt2ZSBkb25lIHRoaXMuIFdoYXQmIzM5O3MgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbj8gT3IgaXMgaXQgc2ltcGx5IGEgbWF0dGVyIG9mIHJlc291cmNlIGNvbnRyb2w/IFdoYXQmIzM5O3MgdGhlIGludGVuZGVkIHVzZSBjYXNlPwoKVG8gZ2V0IGEgYmV0dGVyIGdyaXAgb24gdGhpcywgSSBuZWVkIGNvbnRleHQuIExldCBtZSBmaXJlIHVwIGBncmVwcGVyYCAob3IsIGlmIGl0JiMzOTtzIG1vcmUgY29udmVuaWVudCwgYHJlYWQtZmlsZWApIGFuZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgbWlnaHQgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBmdW5jdGlvbmFsaXR5LCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi4gVGhlIGdvYWwgaXMgdG8gc2VlIHdoZXJlIHRoZXNlIGZpbGVzIGFyZSB1c2VkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGlmIHRoaXMgY2hhbmdlIGhhcyBhbnkgd2lkZXIgaW1wYWN0IG9uIE5ldGZpbHRlciBhcyBhIHdob2xlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgYmVmb3JlIEkgY2FuIHJlYWxseSBhc3Nlc3MgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHBhdGNoIGFuZCB3aGV0aGVyIGl0JiMzOTtzIGltcGxlbWVudGVkIGNvcnJlY3RseS4gVGhpcyBuYW1lc3BhY2UgY2hlY2sgaXMgc2ltcGxlIGVub3VnaCBvbiBpdHMgb3duLCBidXQgdGhlICp3aHkqIGlzIGFsd2F5cyBtb3JlIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9kdXBfaXB2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz03Mj1jb25maWcgTkZfRFVQX0lQVjRcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy03NS1cdGhlbHBcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjc2Olx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBuZl9kdXBfaXB2NCBjb3JlLCB3aGljaCBkdXBsaWNhdGVzIGFuIElQdjRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTc3LVx0ICBwYWNrZXQgdG8gYmUgcmVyb3V0ZWQgdG8gYW5vdGhlciBkZXN0aW5hdGlvbi5cbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU9NTE9b2JqLSQoQ09ORklHX0lQX05GX0FSUEZJTFRFUikgJiM0Mzs9IGFycHRhYmxlX2ZpbHRlci5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTItXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTM6b2JqLSQoQ09ORklHX05GX0RVUF9JUFY0KSAmIzQzOz0gbmZfZHVwX2lwdjQub1xubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTU0LVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTE4LSNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzoxOTojaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfZHVwX2lwdjQuaFx1MDAzZVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMjAtI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0yMy1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjI0OnN0YXRpYyBib29sIG5mX2R1cF9pcHY0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTI1LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpndywgaW50IG9pZilcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy01MC1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjUxOnZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTUyLVx0XHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTkwLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6OTE6XHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy05Mi1cdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTEwMC19XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzoxMDE6RVhQT1JUX1NZTUJPTF9HUEwobmZfZHVwX2lwdjQpO1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMTAyLVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jPTEwND1NT0RVTEVfQVVUSE9SKFwmIzM0O0phbiBFbmdlbGhhcmR0IFx1MDAzY2plbmdlbGhAbWVkb3phcy5kZVx1MDAzZVwmIzM0Oyk7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzoxMDU6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O25mX2R1cF9pcHY0OiBEdXBsaWNhdGUgSVB2NCBwYWNrZXRcJiMzNDspO1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMTA2LU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jLTEyLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcdTAwM2Vcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYzoxMzojaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfZHVwX2lwdjQuaFx1MDAzZVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jLTE0LVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYz0yMD1zdGF0aWMgdm9pZCBuZnRfZHVwX2lwdjRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jLTI5LVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jOjMwOlx0bmZfZHVwX2lwdjQobmZ0X25ldChwa3QpLCBwa3QtXHUwMDNlc2tiLCBuZnRfaG9vayhwa3QpLCBcdTAwMjZndywgb2lmKTtcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYy0zMS19XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NjE9Y29uZmlnIE5GX0RVUF9JUFY2XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNjQtXHRoZWxwXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo2NTpcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbmZfZHVwX2lwdjYgY29yZSwgd2hpY2ggZHVwbGljYXRlcyBhbiBJUHY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02Ni1cdCAgcGFja2V0IHRvIGJlIHJlcm91dGVkIHRvIGFub3RoZXIgZGVzdGluYXRpb24uXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19ORl9SRUpFQ1RfSVBWNikgJiM0Mzs9IG5mX3JlamVjdF9pcHY2Lm9cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0yMy1cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTkZfRFVQX0lQVjYpICYjNDM7PSBuZl9kdXBfaXB2Ni5vXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMjUtXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtMTMtI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXHUwMDNlXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYzoxNDojaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfZHVwX2lwdjYuaFx1MDAzZVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtMTUtI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy0xOC1cbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jOjE5OnN0YXRpYyBib29sIG5mX2R1cF9pcHY2X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jLTIwLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNDYtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYzo0Nzp2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy00OC1cdFx0IGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNjgtXHR9XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYzo2OTpcdGlmIChuZl9kdXBfaXB2Nl9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jLTcwLVx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNzgtfVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmM6Nzk6RVhQT1JUX1NZTUJPTF9HUEwobmZfZHVwX2lwdjYpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtODAtXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmM9ODI9TU9EVUxFX0FVVEhPUihcJiMzNDtKYW4gRW5nZWxoYXJkdCBcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcdTAwM2VcJiMzNDspO1xubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmM6ODM6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O25mX2R1cF9pcHY2OiBJUHY2IHBhY2tldCBkdXBsaWNhdGlvblwmIzM0Oyk7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy04NC1NT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZHVwX2lwdjYuYy0xMi0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXHUwMDNlXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmM6MTM6I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY2L25mX2R1cF9pcHY2LmhcdTAwM2Vcbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZHVwX2lwdjYuYy0xNC1cbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmM9MjA9c3RhdGljIHZvaWQgbmZ0X2R1cF9pcHY2X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZHVwX2lwdjYuYy0yNy1cbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZHVwX2lwdjYuYzoyODpcdG5mX2R1cF9pcHY2KG5mdF9uZXQocGt0KSwgcGt0LVx1MDAzZXNrYiwgbmZ0X2hvb2socGt0KSwgZ3csIG9pZik7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmMtMjktfVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtMTYtI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmM6MTc6I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmM6MTg6I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY2L25mX2R1cF9pcHY2LmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL3h0X1RFRS5oXHUwMDNlXG4tLVxubmV0L25ldGZpbHRlci94dF9URUUuYz0zNz10ZWVfdGc0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTQxLVxubmV0L25ldGZpbHRlci94dF9URUUuYzo0MjpcdG5mX2R1cF9pcHY0KHh0X25ldChwYXIpLCBza2IsIHh0X2hvb2tudW0ocGFyKSwgXHUwMDI2aW5mby1cdTAwM2Vndy5pbiwgb2lmKTtcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNDMtXG4tLVxubmV0L25ldGZpbHRlci94dF9URUUuYz00OT10ZWVfdGc2KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTUzLVxubmV0L25ldGZpbHRlci94dF9URUUuYzo1NDpcdG5mX2R1cF9pcHY2KHh0X25ldChwYXIpLCBza2IsIHh0X2hvb2tudW0ocGFyKSwgXHUwMDI2aW5mby1cdTAwM2Vndy5pbjYsIG9pZik7XG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNDAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgUGFja2V0IER1cGxpY2F0aW9uIGluIE5ldGZpbHRlcioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgTmV0ZmlsdGVyIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgSVB2NCBhbmQgSVB2NiBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHJlYWQtZmlsZWAgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBkdXBsaWNhdGlvbiBmdW5jdGlvbmFsaXR5LiBJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgYG5mX2R1cF9pcHY0LmNgIGluIGBuZXQvaXB2NC9uZXRmaWx0ZXIvYCBhbmQgdGhlbiBtb3ZlIG9uIHRvIHRoZSBgbmZfZHVwX2lwdjYuY2AgY291bnRlcnBhcnQgbG9jYXRlZCBpbiBgbmV0L2lwdjYvbmV0ZmlsdGVyL2AuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBhbGdvcml0aG1zIGVtcGxveWVkIGFuZCBhbnkgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgSVB2NCBhbmQgSVB2NiBoYW5kbGluZy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBvcmlnaW5hbCBwYWNrZXRzIGFyZSBkdXBsaWNhdGVkLCBob3cgdGhlIG5ldyBwYWNrZXRzIGFyZSBpbmplY3RlZCBpbnRvIHRoZSBuZXR3b3JrIHN0YWNrLCBhbmQgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBlZGdlIGNhc2VzLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgcGFja2V0IGR1cGxpY2F0aW9uIGlzIGltcGxlbWVudGVkIGF0IHRoZSBOZXRmaWx0ZXIgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcdGlmIChJU19FUlIocnQpKVxuICA0MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDQyOlx0XG4gIDQzOlx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbiAgNDQ6XHRcdHNrYl9kc3Rfc2V0KHNrYiwgXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiAgNDU6XHRcdHNrYi1cdTAwM2VkZXYgICAgICA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4gIDQ2Olx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4gIDQ3Olx0XG4gIDQ4Olx0XHRyZXR1cm4gdHJ1ZTtcbiAgNDk6XHR9XG4gIDUwOlx0XG4gIDUxOlx0dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuICA1MjpcdFx0XHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxuICA1MzpcdHtcbiAgNTQ6XHRcdHN0cnVjdCBpcGhkciAqaXBoO1xuICA1NTpcdFxuICA1NjpcdFx0aWYgKG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucylcbiAgNTc6XHRcdFx0cmV0dXJuO1xuICA1ODpcdFxuICA1OTpcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuICA2MDpcdFx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlKVxuICA2MTpcdFx0XHRnb3RvIG91dDtcbiAgNjI6XHRcdC8qXG4gIDYzOlx0XHQgKiBDb3B5IHRoZSBza2IsIGFuZCByb3V0ZSB0aGUgY29weS4gV2lsbCBsYXRlciByZXR1cm4gJVhUX0NPTlRJTlVFIGZvclxuICA2NDpcdFx0ICogdGhlIG9yaWdpbmFsIHNrYiwgd2hpY2ggc2hvdWxkIGNvbnRpbnVlIG9uIGl0cyB3YXkgYXMgaWYgbm90aGluZyBoYXNcbiAgNjU6XHRcdCAqIGhhcHBlbmVkLiBUaGUgY29weSBzaG91bGQgYmUgaW5kZXBlbmRlbnRseSBkZWxpdmVyZWQgdG8gdGhlIGdhdGV3YXkuXG4gIDY2Olx0XHQgKi9cbiAgNjc6XHRcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xuICA2ODpcdFx0aWYgKHNrYiA9PSBOVUxMKVxuICA2OTpcdFx0XHRnb3RvIG91dDtcbiAgNzA6XHRcbiAgNzE6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuICA3MjpcdFx0LyogQXZvaWQgY291bnRpbmcgY2xvbmVkIHBhY2tldHMgdG93YXJkcyB0aGUgb3JpZ2luYWwgY29ubmVjdGlvbi4gKi9cbiAgNzM6XHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4gIDc0Olx0XHRuZl9jdF9zZXQoc2tiLCBOVUxMLCBJUF9DVF9VTlRSQUNLRUQpO1xuICA3NTpcdCNlbmRpZlxuICA3NjpcdFx0LypcbiAgNzc6XHRcdCAqIElmIHdlIGFyZSBpbiBQUkVST1VUSU5HL0lOUFVULCBkZWNyZWFzZSB0aGUgVFRMIHRvIG1pdGlnYXRlIHBvdGVudGlhbFxuICA3ODpcdFx0ICogbG9vcHMgYmV0d2VlbiB0d28gaG9zdHMuXG4gIDc5Olx0XHQgKlxuICA4MDpcdFx0ICogU2V0ICVJUF9ERiBzbyB0aGF0IHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgbm90aWZpZWQgb2YgYSBwb3RlbnRpYWxseVxuICA4MTpcdFx0ICogZGVjcmVhc2VkIE1UVSBvbiB0aGUgY2xvbmUgcm91dGUuIElQdjYgZG9lcyB0aGlzIHRvby5cbiAgODI6XHRcdCAqXG4gIDgzOlx0XHQgKiBJUCBoZWFkZXIgY2hlY2tzdW0gd2lsbCBiZSByZWNhbGN1bGF0ZWQgYXQgaXBfbG9jYWxfb3V0LlxuICA4NDpcdFx0ICovXG4gIDg1Olx0XHRpcGggPSBpcF9oZHIoc2tiKTtcbiAgODY6XHRcdGlwaC1cdTAwM2VmcmFnX29mZiB8PSBodG9ucyhJUF9ERik7XG4gIDg3Olx0XHRpZiAoaG9va251bSA9PSBORl9JTkVUX1BSRV9ST1VUSU5HIHx8XG4gIDg4Olx0XHQgICAgaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX0lOKVxuICA4OTpcdFx0XHQtLWlwaC1cdTAwM2V0dGw7XG4gIDkwOlx0XG4gIDkxOlx0XHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG4gIDkyOlx0XHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gdHJ1ZTtcbiAgOTM6XHRcdFx0aXBfbG9jYWxfb3V0KG5ldCwgc2tiLVx1MDAzZXNrLCBza2IpO1xuICA5NDpcdFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xuICA5NTpcdFx0fSBlbHNlIHtcbiAgOTY6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDk3Olx0XHR9XG4gIDk4Olx0b3V0OlxuICA5OTpcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gMTAwOlx0fVxuIDEwMTpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2R1cF9pcHY0KTtcbiAxMDI6XHRcbiAxMDM6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O1NlYmFzdGlhbiBDbGHDn2VuIFx1MDAzY3NlYmFzdGlhbi5jbGFzc2VuQGZyZWVuZXQuYWdcdTAwM2VcJiMzNDspO1xuIDEwNDpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7SmFuIEVuZ2VsaGFyZHQgXHUwMDNjamVuZ2VsaEBtZWRvemFzLmRlXHUwMDNlXCYjMzQ7KTtcbiAxMDU6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7bmZfZHVwX2lwdjQ6IER1cGxpY2F0ZSBJUHY0IHBhY2tldFwmIzM0Oyk7XG4gMTA2Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDEzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgSVB2NiBEdXBsaWNhdGUgUGFja2V0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHBvdGVudGlhbCBpc3N1ZXMsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIEkmIzM5O20gY292ZXJpbmcgYWxsIHRoZSBiYXNlcyByZWxhdGVkIHRvIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gTXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIGhhcyBsZWQgbWUgZG93biB0aGlzIHBhdGgsIHNvIGl0JiMzOTtzIG9ubHkgbG9naWNhbCB0byBleHRlbmQgbXkgY2hlY2sgdG8gdGhlIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY2AgZmlsZSBhcyB3ZWxsLiBJdCYjMzk7cyBhbG1vc3QgZ3VhcmFudGVlZCB0aGVyZSBhcmUgY3JpdGljYWwgcGllY2VzIG9mIHRoZSBwdXp6bGUgd2FpdGluZyBmb3IgbXkgYW5hbHlzaXMgaGVyZS4gVGltZSB0byBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XHRza2JfZHN0X3NldChza2IsIGRzdCk7XG4gIDQxOlx0XHRza2ItXHUwMDNlZGV2ICAgICAgPSBkc3RfZGV2KGRzdCk7XG4gIDQyOlx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbiAgNDM6XHRcbiAgNDQ6XHRcdHJldHVybiB0cnVlO1xuICA0NTpcdH1cbiAgNDY6XHRcbiAgNDc6XHR2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gIDQ4Olx0XHRcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxuICA0OTpcdHtcbiAgNTA6XHRcdGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpXG4gIDUxOlx0XHRcdHJldHVybjtcbiAgNTI6XHRcbiAgNTM6XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiAgNTQ6XHRcdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSlcbiAgNTU6XHRcdFx0Z290byBvdXQ7XG4gIDU2Olx0XHRza2IgPSBwc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTtcbiAgNTc6XHRcdGlmIChza2IgPT0gTlVMTClcbiAgNTg6XHRcdFx0Z290byBvdXQ7XG4gIDU5Olx0XG4gIDYwOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcbiAgNjE6XHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4gIDYyOlx0XHRuZl9jdF9zZXQoc2tiLCBOVUxMLCBJUF9DVF9VTlRSQUNLRUQpO1xuICA2MzpcdCNlbmRpZlxuICA2NDpcdFx0aWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORyB8fFxuICA2NTpcdFx0ICAgIGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9JTikge1xuICA2NjpcdFx0XHRzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTtcbiAgNjc6XHRcdFx0LS1pcGgtXHUwMDNlaG9wX2xpbWl0O1xuICA2ODpcdFx0fVxuICA2OTpcdFx0aWYgKG5mX2R1cF9pcHY2X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xuICA3MDpcdFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XG4gIDcxOlx0XHRcdGlwNl9sb2NhbF9vdXQobmV0LCBza2ItXHUwMDNlc2ssIHNrYik7XG4gIDcyOlx0XHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XG4gIDczOlx0XHR9IGVsc2Uge1xuICA3NDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNzU6XHRcdH1cbiAgNzY6XHRvdXQ6XG4gIDc3Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiAgNzg6XHR9XG4gIDc5Olx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZHVwX2lwdjYpO1xuICA4MDpcdFxuICA4MTpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7U2ViYXN0aWFuIENsYcOfZW4gXHUwMDNjc2ViYXN0aWFuLmNsYXNzZW5AZnJlZW5ldC5hZ1x1MDAzZVwmIzM0Oyk7XG4gIDgyOlx0TU9EVUxFX0FVVEhPUihcJiMzNDtKYW4gRW5nZWxoYXJkdCBcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcdTAwM2VcJiMzNDspO1xuICA4MzpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtuZl9kdXBfaXB2NjogSVB2NiBwYWNrZXQgZHVwbGljYXRpb25cJiMzNDspO1xuICA4NDpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI4NgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZmlsdGVyIFBhY2tldCBEdXBsaWNhdGlvbiBBY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIGhlcmUuIFRoZXkmIzM5O3JlIGludm9rZWQgYnkgYG5mdF9kdXBfaXB2NF9ldmFsYCBhbmQgYG5mdF9kdXBfaXB2Nl9ldmFsYCwgd2hpY2ggYXJlIHBhcnQgb2YgbmZ0YWJsZXMmIzM5OyBgbmZ0X2R1cGAgbWVjaGFuaXNtLiBJJiMzOTttIGFsc28gc2VlaW5nIHRoZW0gY29ubmVjdGVkIHRvIGB0ZWVfdGc0YCBhbmQgYHRlZV90ZzZgLCB3aGljaCBhcmUgd2l0aGluIHRoZSBpcHRhYmxlcy9pcDZ0YWJsZXMgYHh0X1RFRWAgbW9kdWxlLiBTbywgZXNzZW50aWFsbHksIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gYWN0aW9ucyDigJMgdGhpbmdzIGxpa2UgYG5mdCBkdXAgdG8gLi4uYCBvciB0aGUgY2xhc3NpYyBgaXB0YWJsZXMgLWogVEVFYCBzeW50YXguCgpOb3csIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgc29tZSBjb250ZXh0LiBUaW1lIHRvIGhpdCB0aGUgZ2l0IGNvbW1pdCBsb2dzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb21taXQgbWVzc2FnZXMgc2hlZCBhbnkgbGlnaHQgb24gdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlc2Ugc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBmb3IgYW55IGhlbHBmdWwgYmFja2dyb3VuZCBvciBleHBsYW5hdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBhIHNwZWNpZmljIGNvbW1pdCBsaWtlIGA0NDY2M2MzNDg4NTgxYmFlZDQ2MDM1MDcwMmZiMmE1YTE3MzVmODhmYCwgb3IgYW55IHByZXZpb3VzIGNvbW1pdHMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gTWlnaHQgYmUgYmV0dGVyIHRvIGNoZWNrIGdpdCBsb2cgZm9yIHRoZSBhY3R1YWwgc291cmNlIGZpbGVzLCBsaWtlIGBuZl9kdXBfaXB2NC5jYCBhbmQgYG5mX2R1cF9pcHY2LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgbW9yZSBmb2N1c2VkIHZpZXcgb2YgdGhlIGNoYW5nZXMgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0RVUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9NDc9Y29uZmlnIE5GVF9EVVBfSVBWNFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQ5LVx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NTA6XHRzZWxlY3QgTkZfRFVQX0lQVjRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTUxLVx0aGVscFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTcwPWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy03MS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjcyOmNvbmZpZyBORl9EVVBfSVBWNFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNzMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTUxPW9iai0kKENPTkZJR19JUF9ORl9BUlBGSUxURVIpICYjNDM7PSBhcnB0YWJsZV9maWx0ZXIub1xubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTUyLVxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlOjUzOm9iai0kKENPTkZJR19ORl9EVVBfSVBWNCkgJiM0Mzs9IG5mX2R1cF9pcHY0Lm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS01NC1cbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgTkZUX0RVUF9JUFY2XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNDUtXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo0NjpcdHNlbGVjdCBORl9EVVBfSVBWNlxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNDctXHRoZWxwXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NTk9ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTYwLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6NjE6Y29uZmlnIE5GX0RVUF9JUFY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02Mi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBJUHY2IHBhY2tldCBkdXBsaWNhdGlvbiB0byBhbHRlcm5hdGUgZGVzdGluYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU9MjI9b2JqLSQoQ09ORklHX05GX1JFSkVDVF9JUFY2KSAmIzQzOz0gbmZfcmVqZWN0X2lwdjYub1xubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlLTIzLVxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORl9EVVBfSVBWNikgJiM0Mzs9IG5mX2R1cF9pcHY2Lm9cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0yNS1cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjYwPWlmIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjYyOmNvbmZpZyBORl9EVVBfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjYzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY2OD1jb25maWcgTkZUX0RVUF9ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjktXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9LY29uZmlnOjY3MDpcdHNlbGVjdCBORl9EVVBfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjcxLVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NzQ9Y29uZmlnIE5GVF9GV0RfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc1LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgcGFja2V0IGZvcndhcmRpbmcgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9LY29uZmlnOjY3NjpcdHNlbGVjdCBORl9EVVBfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc3LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMDU3PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX1RFRVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDYxLVx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgIUlQNl9ORl9JUFRBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjEwNjI6XHRzZWxlY3QgTkZfRFVQX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYzOlx0c2VsZWN0IE5GX0RVUF9JUFY2IGlmIElQNl9ORl9JUFRBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNjQtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT04MT1vYmotJChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkgJiM0Mzs9IG5mX2Nvbm5jb3VudC5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04My0jIGdlbmVyaWMgcGFja2V0IGR1cGxpY2F0aW9uIGZyb20gbmV0ZGV2IGZhbWlseVxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4NDpvYmotJChDT05GSUdfTkZfRFVQX05FVERFVilcdCYjNDM7PSBuZl9kdXBfbmV0ZGV2Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MDUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRHVwbGljYXRpb24gaW4gTmV0ZmlsdGVyKioKClJpZ2h0LCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG5ldHdvcmsgZHVwbGljYXRpb24gZnVuY3Rpb25hbGl0aWVzIHdpdGhpbiBOZXRmaWx0ZXIuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBgTkZfRFVQX05FVERFVmAgb3B0aW9uLCBhbmQgdGhlbiBJJiMzOTtsbCBmb2xsb3cgdGhhdCB1cCBieSBsb29raW5nIGF0IGhvdyBgTkZfRFVQX0lQVjRgIGFuZCBgTkZfRFVQX0lQVjZgIGNvbWUgaW50byBwbGF5LiBJJiMzOTttIHByZXR0eSBzdXJlIEkgcmVtZW1iZXIgdGhvc2UsIGJ1dCBhIHF1aWNrIHJldmlldyBuZXZlciBodXJ0cy4gTXkgaW1tZWRpYXRlIGZvY3VzLCB0aG91Z2gsIG5lZWRzIHRvIGJlIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGUgZmlyc3Qgb3B0aW9uLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGxvd2VyLWxldmVsIGFzcGVjdHMsIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCB0byB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBuZXQvbmV0ZmlsdGVyL25mX2R1cF9uZXRkZXYuY2AgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgY29yZSBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbml0X3VzZXJfbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz01MDQ2PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcF92c19jb250cm9sX25ldF9pbml0X3N5c2N0bChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTA1MS1cdHNpemVfdCBjdGxfdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUodnNfdmFycyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NTA1MjpcdGJvb2wgdW5wcml2ID0gbmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTUwNTMtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYz01NDk9c3RhdGljIGludCBfX25ldF9pbml0IF9faXBfdnNfbGJsY19pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jLTU2NC1cdFx0LyogRG9uJiMzOTt0IGV4cG9ydCBzeXNjdGxzIHRvIHVucHJpdmlsZWdlZCB1c2VycyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYzo1NjU6XHRcdGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jLTU2Ni1cdFx0XHR2YXJzX3RhYmxlX3NpemUgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jPTczNT1zdGF0aWMgaW50IF9fbmV0X2luaXQgX19pcF92c19sYmxjcl9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYy03NTAtXHRcdC8qIERvbiYjMzk7dCBleHBvcnQgc3lzY3RscyB0byB1bnByaXZpbGVnZWQgdXNlcnMgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jOjc1MTpcdFx0aWYgKG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jLTc1Mi1cdFx0XHR2YXJzX3RhYmxlX3NpemUgPSAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jPTE2OD1zdGF0aWMgdm9pZCBuZl9sb2dfZHVtcF9za191aWRfZ2lkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mX2xvZ19idWYgKm0sXG4tLVxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmMtMTg3LVx0XHRuZl9sb2dfYnVmX2FkZChtLCBcJiMzNDtVSUQ9JXUgR0lEPSV1IFwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jOjE4ODpcdFx0XHQgICAgICAgZnJvbV9rdWlkX211bmdlZChcdTAwMjZpbml0X3VzZXJfbnMsIGNyZWQtXHUwMDNlZnN1aWQpLFxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmM6MTg5Olx0XHRcdCAgICAgICBmcm9tX2tnaWRfbXVuZ2VkKFx1MDAyNmluaXRfdXNlcl9ucywgY3JlZC1cdTAwM2Vmc2dpZCkpO1xubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmMtMTkwLVx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NTY3PXN0YXRpYyBpbnQgbmZxbmxfcHV0X3NrX3VpZGdpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy01ODYtXHRcdGlmIChubGFfcHV0X2JlMzIoc2tiLCBORlFBX1VJRCxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NTg3Olx0XHQgICAgaHRvbmwoZnJvbV9rdWlkX211bmdlZChcdTAwMjZpbml0X3VzZXJfbnMsIGNyZWQtXHUwMDNlZnN1aWQpKSkpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTU4OC1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNTg5LVx0XHRpZiAobmxhX3B1dF9iZTMyKHNrYiwgTkZRQV9HSUQsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjU5MDpcdFx0ICAgIGh0b25sKGZyb21fa2dpZF9tdW5nZWQoXHUwMDI2aW5pdF91c2VyX25zLCBjcmVkLVx1MDAzZWZzZ2lkKSkpKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy01OTEtXHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNDI5PW5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpZmYpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNDMyLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNDMzOlx0aWYgKGUtXHUwMDNlc3RhdGUubmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNDM0LVx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTczPXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE4MC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTgxOlx0aWYgKGN0eC1cdTAwM2VuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE4Mi1cdFx0cmV0dXJuIC1FUEVSTTtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jPTMzMj1zdGF0aWMgaW50IHJlY2VudF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcixcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jLTQwNy0jaWZkZWYgQ09ORklHX1BST0NfRlNcbm5ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmM6NDA4Olx0dWlkID0gbWFrZV9rdWlkKFx1MDAyNmluaXRfdXNlcl9ucywgaXBfbGlzdF91aWQpO1xubmV0L25ldGZpbHRlci94dF9yZWNlbnQuYzo0MDk6XHRnaWQgPSBtYWtlX2tnaWQoXHUwMDI2aW5pdF91c2VyX25zLCBpcF9saXN0X2dpZCk7XG5uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jLTQxMC1cdGlmICghdWlkX3ZhbGlkKHVpZCkgfHwgIWdpZF92YWxpZChnaWQpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTA5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogTmV0ZmlsdGVyIFBhY2tldCBEdXBsaWNhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGFkZGluZyBhIGNydWNpYWwgY2hlY2s6IGBpZiAobmV0LSZndDt1c2VyX25zICE9ICZhbXA7aW5pdF91c2VyX25zKSByZXR1cm47YCB0byB0aGUgYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gdGhpcyBjb2RlICphY3R1YWxseSogYmUgcmVhY2hlZCwgd2hpY2ggaXMgdGhlIGtleSBkZXRlcm1pbmFudCBoZXJlPwoKR29vZCEgSSBzZWUgdGhhdCB0b29scyBsaWtlIHN5emthbGxlciwgcnVubmluZyBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBjYW4gdHJpZ2dlciB0aGUgZXhlY3V0aW9uIHBhdGhzLiBUaGlzIGlzIGdyZWF0IG5ld3MuIFRoZSBjb2RlIHBhdGggKmlzKiByZWFjaGFibGUg4oCTIHdlIGtub3cgbmV0ZmlsdGVyIHBhY2tldCBkdXBsaWNhdGlvbiAoYG5mdF9kdXBfaXB2NGAsIGBuZnRfZHVwX2lwdjZgLCBgeHRfVEVFYCkgaXMgZXhlY3V0ZWQgaW4gYm90aCB0aGUgaW5pdGlhbCBhbmQgbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzLCB3aGljaCBtZWFucyB0aGF0IGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAgYXJlIGluZGVlZCBwYXJ0IG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcvbmV0ZmlsdGVyIHN1YnN5c3RlbXMuCgpTbywgdGhpcyBtb2RpZmljYXRpb24gKmFic29sdXRlbHkqIGNoYW5nZXMgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gYG5mX2R1cF9pcHY0KClgIGFuZCBgbmZfZHVwX2lwdjYoKWAhIEEgc2ltcGxlIGVhcmx5IHJldHVybiBpcyBhZGRlZCB0byBndWFyZCB0aGUgbG9naWMuCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgZ3VpZGVsaW5lczogVGhpcyBpcyBhIGRpcmVjdCBtb2RpZmljYXRpb24gdG8gcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIHN1YnN5c3RlbS4gVGhlIGd1aWRlbGluZXMgYXJlIGNyeXN0YWwgY2xlYXI6ICYjMzQ7V29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4mIzM0OyBNb3Jlb3ZlciwgdGhlIGd1aWRlbGluZXMgaGlnaGxpZ2h0IHRoYXQgZXZlbiByZWZhY3RvcmluZ3MsIGNvZGUgY2xlYW51cHMsIGFuZCBkZWZlbnNpdmUgY2hlY2tzIGluIHJlYWNoYWJsZSBjb2RlIHdhcnJhbnQgZnV6emluZywgYW5kIHRoaXMgaXMgYWxsIG9mIHRoZSBhYm92ZS4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY29uZGl0aW9uYWwgY2hlY2sgaW4gY3JpdGljYWwgbmV0d29ya2luZyBjb2RlLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggZGlyZWN0bHkgdG91Y2hlcyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSwgSSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGUgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGB0cnVlYC4gVGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24gYW5kIGZ1enppbmcuIE5vdywgbGV0JiMzOTtzIGludmVzdGlnYXRlIHRoZSBrZXJuZWwgY29uZmlncyBuZWVkZWQgdG8gY29tcGlsZSBhbmQgcmVhY2ggdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORl9EVVBfSVBWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz00Nz1jb25maWcgTkZUX0RVUF9JUFY0XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNDktXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDpcdHNlbGVjdCBORl9EVVBfSVBWNFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNTEtXHRoZWxwXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9NzA9ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTcxLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NzI6Y29uZmlnIE5GX0RVUF9JUFY0XG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy03My1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBJUHY0IHBhY2tldCBkdXBsaWNhdGlvbiB0byBhbHRlcm5hdGUgZGVzdGluYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU9NTE9b2JqLSQoQ09ORklHX0lQX05GX0FSUEZJTFRFUikgJiM0Mzs9IGFycHRhYmxlX2ZpbHRlci5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTItXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTM6b2JqLSQoQ09ORklHX05GX0RVUF9JUFY0KSAmIzQzOz0gbmZfZHVwX2lwdjQub1xubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTU0LVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTQzPWNvbmZpZyBORlRfRFVQX0lQVjZcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00NS1cdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjQ2Olx0c2VsZWN0IE5GX0RVUF9JUFY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00Ny1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz01OT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNjAtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo2MTpjb25maWcgTkZfRFVQX0lQVjZcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTYyLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfTkZfUkVKRUNUX0lQVjYpICYjNDM7PSBuZl9yZWplY3RfaXB2Ni5vXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMjMtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX05GX0RVUF9JUFY2KSAmIzQzOz0gbmZfZHVwX2lwdjYub1xubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlLTI1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMDU3PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX1RFRVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDYxLVx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgIUlQNl9ORl9JUFRBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjEwNjI6XHRzZWxlY3QgTkZfRFVQX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYzOlx0c2VsZWN0IE5GX0RVUF9JUFY2IGlmIElQNl9ORl9JUFRBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNjQtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjE0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBLZXJuZWwmIzM5O3MgRmlyZXdhbGwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmlyZXdhbGwgb3B0aW9ucyBhcmUgc3RydWN0dXJlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHN5c3RlbS4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZXMuIFRoZXNlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gcHJvY2VzcywgYW5kIEkmIzM5O20gYmV0dGluZyB0aGV5JiMzOTtsbCBjbGVhcmx5IHNob3cgbWUgdGhlIGVuY29tcGFzc2luZyBtZW51IHN0cnVjdHVyZSBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgbmV0ZmlsdGVyIG9wdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBvdmVyYWxsIG9yZ2FuaXphdGlvbiBsYWlkIG91dCBoZXJlLCB3aGljaCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgZm91bmRhdGlvbiBJIG5lZWQgdG8gcHJvcGVybHkgbmF2aWdhdGUgYW5kIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IG9wdGlvbnMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHNvIHRvIHNwZWFrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSVAgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudSBcJiMzNDtJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIE5GX0RFRlJBR19JUFY0XG4gIDEwOlx0XHR0cmlzdGF0ZVxuICAxMTpcdFx0ZGVmYXVsdCBuXG4gIDEyOlx0XG4gIDEzOlx0IyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxuICAxNDpcdGNvbmZpZyBJUF9ORl9JUFRBQkxFU19MRUdBQ1lcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBJUCB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbiAgMTc6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcbiAgMTg6XHRcdGRlZmF1bHRcdG0gaWYgTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG4gIDE5Olx0XHRoZWxwXG4gIDIwOlx0XHQgIGlwdGFibGVzIGlzIGEgbGVnYWN5IHBhY2tldCBjbGFzc2lmaWVyLlxuICAyMTpcdFx0ICBUaGlzIGlzIG5vdCBuZWVkZWQgaWYgeW91IGFyZSB1c2luZyBpcHRhYmxlcyBvdmVyIG5mdGFibGVzXG4gIDIyOlx0XHQgIChpcHRhYmxlcy1uZnQpLlxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBORl9TT0NLRVRfSVBWNFxuICAyNTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVB2NCBzb2NrZXQgbG9va3VwIHN1cHBvcnRcJiMzNDtcbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgSVB2NCBzb2NrZXQgbG9va3VwIGluZnJhc3RydWN0dXJlLiBUaGlzIGlzXG4gIDI4Olx0XHQgIGlzIHJlcXVpcmVkIGJ5IHRoZSB7aXAsbmZ9dGFibGVzIHNvY2tldCBtYXRjaC5cbiAgMjk6XHRcbiAgMzA6XHRjb25maWcgTkZfVFBST1hZX0lQVjRcbiAgMzE6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjQgdHByb3h5IHN1cHBvcnRcJiMzNDtcbiAgMzI6XHRcbiAgMzM6XHRpZiBORl9UQUJMRVNcbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgTkZfVEFCTEVTX0lQVjRcbiAgMzY6XHRcdGJvb2wgXCYjMzQ7SVB2NCBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuICAzNzpcdFx0aGVscFxuICAzODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBJUHY0IHN1cHBvcnQgZm9yIG5mX3RhYmxlcy5cbiAgMzk6XHRcbiAgNDA6XHRpZiBORl9UQUJMRVNfSVBWNFxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBORlRfUkVKRUNUX0lQVjRcbiAgNDM6XHRcdHNlbGVjdCBORl9SRUpFQ1RfSVBWNFxuICA0NDpcdFx0ZGVmYXVsdCBORlRfUkVKRUNUXG4gIDQ1Olx0XHR0cmlzdGF0ZVxuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBORlRfRFVQX0lQVjRcbiAgNDg6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjQgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gIDQ5Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG4gIDUwOlx0XHRzZWxlY3QgTkZfRFVQX0lQVjRcbiAgNTE6XHRcdGhlbHBcbiAgNTI6XHRcdCAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY0IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0IGZvciBuZl90YWJsZXMuXG4gIDUzOlx0XG4gIDU0Olx0Y29uZmlnIE5GVF9GSUJfSVBWNFxuICA1NTpcdFx0c2VsZWN0IE5GVF9GSUJcbiAgNTY6XHRcdHRyaXN0YXRlIFwmIzM0O25mX3RhYmxlcyBmaWIgLyBpcCByb3V0ZSBsb29rdXAgc3VwcG9ydFwmIzM0O1xuICA1NzpcdFx0aGVscFxuICA1ODpcdFx0ICBUaGlzIG1vZHVsZSBlbmFibGVzIElQdjQgRklCIGxvb2t1cHMsIGUuZy4gZm9yIHJldmVyc2UgcGF0aCBmaWx0ZXJpbmcuXG4gIDU5Olx0XHQgIEl0IGFsc28gYWxsb3dzIHF1ZXJ5IG9mIHRoZSBGSUIgZm9yIHRoZSByb3V0ZSB0eXBlLCBlLmcuIGxvY2FsLCB1bmljYXN0LFxuICA2MDpcdFx0ICBtdWx0aWNhc3Qgb3IgYmxhY2tob2xlLlxuICA2MTpcdFxuICA2MjpcdGVuZGlmICMgTkZfVEFCTEVTX0lQVjRcbiAgNjM6XHRcbiAgNjQ6XHRjb25maWcgTkZfVEFCTEVTX0FSUFxuICA2NTpcdFx0Ym9vbCBcJiMzNDtBUlAgbmZfdGFibGVzIHN1cHBvcnRcJiMzNDtcbiAgNjY6XHRcdHNlbGVjdCBORVRGSUxURVJfRkFNSUxZX0FSUFxuICA2NzpcdFx0aGVscFxuICA2ODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBBUlAgc3VwcG9ydCBmb3IgbmZfdGFibGVzLlxuICA2OTpcdFxuICA3MDpcdGVuZGlmICMgTkZfVEFCTEVTXG4gIDcxOlx0XG4gIDcyOlx0Y29uZmlnIE5GX0RVUF9JUFY0XG4gIDczOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXCYjMzQ7XG4gIDc0Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG4gIDc1Olx0XHRoZWxwXG4gIDc2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG5mX2R1cF9pcHY0IGNvcmUsIHdoaWNoIGR1cGxpY2F0ZXMgYW4gSVB2NFxuICA3NzpcdFx0ICBwYWNrZXQgdG8gYmUgcmVyb3V0ZWQgdG8gYW5vdGhlciBkZXN0aW5hdGlvbi5cbiAgNzg6XHRcbiAgNzk6XHRjb25maWcgTkZfTE9HX0FSUFxuICA4MDpcdFx0dHJpc3RhdGUgXCYjMzQ7QVJQIHBhY2tldCBsb2dnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDU4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBJUHY2IE5ldGZpbHRlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBuZXR3b3JrIGZpbHRlcmluZywgYW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIElQdjYgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24uIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AgaXMgYSBrZXkgZmlsZS4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIElQdjYgTmV0ZmlsdGVyIG9wdGlvbnMgYXJlIGRlZmluZWQgYW5kIGV4cG9zZWQgdG8gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKmNvbmZpZ3VyYWJsZSogYXQgY29tcGlsZSB0aW1lLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIG1hY3JvcyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHdoaWNoIElQdjYgTmV0ZmlsdGVyIGZlYXR1cmVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgaW1hZ2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIG1vZHVsZXMsIHdob2xlIHN1YnN5c3RlbXMsIG9yIGp1c3QgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3M/IFRoZSBzcGVjaWZpY3Mgd2lsbCBkaWN0YXRlIGhvdyBOZXRmaWx0ZXIgaW50ZXJhY3RzIHdpdGggSVB2NiB0cmFmZmljLiBJIGtub3cgdGhpcyBmaWxlIGlzIGdvaW5nIHRvIGJlIG15IHN0YXJ0aW5nIHBvaW50IGluIHRoZSBjb2RlYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIElQIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnUgXCYjMzQ7SVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSVBWNiBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG4gICA4Olx0XG4gICA5Olx0IyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxuICAxMDpcdGNvbmZpZyBJUDZfTkZfSVBUQUJMRVNfTEVHQUNZXG4gIDExOlx0XHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgSVA2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4gIDEyOlx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElQVjYgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU1xuICAxNDpcdFx0ZGVmYXVsdFx0bSBpZiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbiAgMTU6XHRcdGhlbHBcbiAgMTY6XHRcdCAgaXA2dGFibGVzIGlzIGEgbGVnYWN5IHBhY2tldCBjbGFzc2lmaWVyLlxuICAxNzpcdFx0ICBUaGlzIGlzIG5vdCBuZWVkZWQgaWYgeW91IGFyZSB1c2luZyBpcHRhYmxlcyBvdmVyIG5mdGFibGVzXG4gIDE4Olx0XHQgIChpcHRhYmxlcy1uZnQpLlxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBORl9TT0NLRVRfSVBWNlxuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVB2NiBzb2NrZXQgbG9va3VwIHN1cHBvcnRcJiMzNDtcbiAgMjI6XHRcdGhlbHBcbiAgMjM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgSVB2NiBzb2NrZXQgbG9va3VwIGluZnJhc3RydWN0dXJlLiBUaGlzXG4gIDI0Olx0XHQgIGlzIHVzZWQgYnkgdGhlIHtpcDYsbmZ9dGFibGVzIHNvY2tldCBtYXRjaC5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgTkZfVFBST1hZX0lQVjZcbiAgMjc6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjYgdHByb3h5IHN1cHBvcnRcJiMzNDtcbiAgMjg6XHRcbiAgMjk6XHRpZiBORl9UQUJMRVNcbiAgMzA6XHRcbiAgMzE6XHRjb25maWcgTkZfVEFCTEVTX0lQVjZcbiAgMzI6XHRcdGJvb2wgXCYjMzQ7SVB2NiBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBJUHY2IHN1cHBvcnQgZm9yIG5mX3RhYmxlcy5cbiAgMzU6XHRcbiAgMzY6XHRpZiBORl9UQUJMRVNfSVBWNlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBORlRfUkVKRUNUX0lQVjZcbiAgMzk6XHRcdHNlbGVjdCBORl9SRUpFQ1RfSVBWNlxuICA0MDpcdFx0ZGVmYXVsdCBORlRfUkVKRUNUXG4gIDQxOlx0XHR0cmlzdGF0ZVxuICA0MjpcdFxuICA0MzpcdGNvbmZpZyBORlRfRFVQX0lQVjZcbiAgNDQ6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjYgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gIDQ1Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG4gIDQ2Olx0XHRzZWxlY3QgTkZfRFVQX0lQVjZcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY2IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0IGZvciBuZl90YWJsZXMuXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIE5GVF9GSUJfSVBWNlxuICA1MTpcdFx0dHJpc3RhdGUgXCYjMzQ7bmZfdGFibGVzIGZpYiAvIGlwdjYgcm91dGUgbG9va3VwIHN1cHBvcnRcJiMzNDtcbiAgNTI6XHRcdHNlbGVjdCBORlRfRklCXG4gIDUzOlx0XHRoZWxwXG4gIDU0Olx0XHQgIFRoaXMgbW9kdWxlIGVuYWJsZXMgSVB2NiBGSUIgbG9va3VwcywgZS5nLiBmb3IgcmV2ZXJzZSBwYXRoIGZpbHRlcmluZy5cbiAgNTU6XHRcdCAgSXQgYWxzbyBhbGxvd3MgcXVlcnkgb2YgdGhlIEZJQiBmb3IgdGhlIHJvdXRlIHR5cGUsIGUuZy4gbG9jYWwsIHVuaWNhc3QsXG4gIDU2Olx0XHQgIG11bHRpY2FzdCBvciBibGFja2hvbGUuXG4gIDU3Olx0XG4gIDU4Olx0ZW5kaWYgIyBORl9UQUJMRVNfSVBWNlxuICA1OTpcdGVuZGlmICMgTkZfVEFCTEVTXG4gIDYwOlx0XG4gIDYxOlx0Y29uZmlnIE5GX0RVUF9JUFY2XG4gIDYyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgSVB2NiBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXCYjMzQ7XG4gIDYzOlx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG4gIDY0Olx0XHRoZWxwXG4gIDY1Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG5mX2R1cF9pcHY2IGNvcmUsIHdoaWNoIGR1cGxpY2F0ZXMgYW4gSVB2NlxuICA2NjpcdFx0ICBwYWNrZXQgdG8gYmUgcmVyb3V0ZWQgdG8gYW5vdGhlciBkZXN0aW5hdGlvbi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgTkZfUkVKRUNUX0lQVjZcbiAgNjk6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjYgcGFja2V0IHJlamVjdGlvblwmIzM0O1xuICA3MDpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gIDcxOlx0XG4gIDcyOlx0Y29uZmlnIE5GX0xPR19JUFY2XG4gIDczOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUHY2IHBhY2tldCBsb2dnaW5nXCYjMzQ7XG4gIDc0Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAgNzU6XHRcdHNlbGVjdCBORl9MT0dfU1lTTE9HXG4gIDc2Olx0XHRoZWxwXG4gIDc3Olx0XHQgIFRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXImIzM5O3MgY29udmVuaWVuY2VcbiAgNzg6XHRcdCAgKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMgQ09ORklHX05GX0xPR19TWVNMT0cuXG4gIDc5Olx0XG4gIDgwOlx0Y29uZmlnIElQNl9ORl9JUFRBQkxFU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc3MAoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiA5ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE5ldGZpbHRlciBQYWNrZXQgRHVwbGljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgdGhlIGZ1enppbmcgc2V0dXAuIFdlJiMzOTtyZSBsb29raW5nIGF0IGVuYWJsaW5nIHBhY2tldCBkdXBsaWNhdGlvbiBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG5ldGZpbHRlciBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBmb3IgSVB2NCBhbmQgSVB2Ni4KClRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIGZlYXR1cmVzIGFyZSBzdHJhaWdodGZvcndhcmQ6IGBORl9EVVBfSVBWNGAgcmVsaWVzIG9uIGBJTkVUICZhbXA7JmFtcDsgTkVURklMVEVSYCBhbmQgZWl0aGVyIGAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS2AuICBTaW1pbGFybHksIGBORl9EVVBfSVBWNmAgbmVlZHMgYElORVQgJmFtcDsmYW1wOyBJUFY2ICZhbXA7JmFtcDsgTkVURklMVEVSYCB3aXRoIHRoZSBzYW1lIGNvbm50cmFjayBkZXBlbmRlbmN5LiBUaGlzIGNoZWNrcyBvdXQ7IHdlIHdhbnQgdGhlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgZW5hYmxlZCBiZWZvcmUgYnVpbGRpbmcgb24gaXQuIFRvIGV4cG9zZSB0aGUgZnVuY3Rpb25hbGl0eSB0aHJvdWdoIG5mdGFibGVzIGFuZCBpcHRhYmxlcywgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIHRoZSByZWxhdGVkIHRhcmdldHM6IGBORlRfRFVQX0lQVjRgLCBgTkZUX0RVUF9JUFY2YCwgYW5kLCBpbiB0aGUgY2FzZSBvZiBpcHRhYmxlcyB3aXRoIGBURUVgLCBgTkVURklMVEVSX1hUX1RBUkdFVF9URUVgLgoKQmFzZWQgb24gdGhlIGNvZGUgZGlmZnMsIHRoZSBzcGVjaWZpYyBzeW1ib2xzIG1vZGlmaWVkIGFyZSBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgLCBsb2NhdGVkIGluIHRoZSBgbmV0L2lwdjQvbmV0ZmlsdGVyYCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlcmAgZGlyZWN0b3JpZXMgcmVzcGVjdGl2ZWx5LiAgVGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGFjdHVhbCBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMuIEltcG9ydGFudGx5LCBhIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIGJvdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgcGFja2V0IGR1cGxpY2F0aW9uIGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcywgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgYW5kIHZlcmlmeSBpZiB0aGUgZnV6emluZyB0YXJnZXQgY2FuIGJlIHNldCB1cCBpbiB0aGUgaW5pdGlhbCBuYW1lc3BhY2UuCgpUaGVzZSBmdW5jdGlvbnMgYXJlbiYjMzk7dCB1bml2ZXJzYWxseSBjYWxsZWQ7IHRoZXkmIzM5O3JlIHNwZWNpZmljIG5ldGZpbHRlciBoZWxwZXJzIHRyaWdnZXJlZCB3aGVuIHJ1bGVzIHdpdGggYGR1cGAgKG5mdGFibGVzKSBvciBgVEVFYCAoeHRhYmxlcykgbWF0Y2ggYSBwYWNrZXQuIFNvLCB0aGV5JiMzOTtyZSBub3QgYSBjb3JlIHBhcnQgb2YgdGhlIGJhc2UgbmV0d29yayBzdGFjayBidXQgcmF0aGVyIGFuIGV4dGVuc2lvbiBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLgoKVGhlIGNvbmZpZyBvcHRpb25zIHRvIGVuYWJsZSB0aGlzIGFyZTogYE5GX0RVUF9JUFY0YCwgYE5GX0RVUF9JUFY2YCwgYE5GVF9EVVBfSVBWNGAsIGBORlRfRFVQX0lQVjZgLCBhbmQgYE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFYC4gIFdlJiMzOTtsbCBlbmFibGUgYWxsIG9mIHRoZXNlLgoKQ29uc2lkZXJpbmcgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwgdGhlIGZ1enppbmcgdGFyZ2V0IGJlaW5nIGBXb3J0aEZ1enppbmdgLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCwgYWxsIGxvb2tzIGdvb2QuIE5vdywgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0RVUF9JUFY0JiMzNDssCiAgICAmIzM0O05GX0RVUF9JUFY2JiMzNDssCiAgICAmIzM0O05GVF9EVVBfSVBWNCYjMzQ7LAogICAgJiMzNDtORlRfRFVQX0lQVjYmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9URUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9kdXBfaXB2NCYjMzQ7LAogICAgJiMzNDtuZl9kdXBfaXB2NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXRmaWx0ZXIgcGFja2V0IGR1cGxpY2F0aW9uIGxvZ2ljIGluIG5mX2R1cF9pcHY0IGFuZCBuZl9kdXBfaXB2NiB0byByZXN0cmljdCBleGVjdXRpb24gdG8gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgKG5ldC1cdTAwM2V1c2VyX25zID09IFx1MDAyNmluaXRfdXNlcl9ucykuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGNvbnRyb2wgZmxvdyBmb3IgbmZ0YWJsZXMgKG5mdF9kdXApIGFuZCB4dGFibGVzICh4dF9URUUpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiBuZXR3b3JrIG5hbWVzcGFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0RVUF9JUFY0JiMzNDssCiAgICAmIzM0O05GX0RVUF9JUFY2JiMzNDssCiAgICAmIzM0O05GVF9EVVBfSVBWNCYjMzQ7LAogICAgJiMzNDtORlRfRFVQX0lQVjYmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9URUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9kdXBfaXB2NCYjMzQ7LAogICAgJiMzNDtuZl9kdXBfaXB2NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXRmaWx0ZXIgcGFja2V0IGR1cGxpY2F0aW9uIGxvZ2ljIGluIG5mX2R1cF9pcHY0IGFuZCBuZl9kdXBfaXB2NiB0byByZXN0cmljdCBleGVjdXRpb24gdG8gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UgKG5ldC1cdTAwM2V1c2VyX25zID09IFx1MDAyNmluaXRfdXNlcl9ucykuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGNvbnRyb2wgZmxvdyBmb3IgbmZ0YWJsZXMgKG5mdF9kdXApIGFuZCB4dGFibGVzICh4dF9URUUpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiBuZXR3b3JrIG5hbWVzcGFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgcGVybWlzc2lvbi9uYW1lc3BhY2UgY2hlY2sgKGBuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnNgKSB0byBgbmZfZHVwX2lwdjQoKWAgYW5kIGBuZl9kdXBfaXB2NigpYCB0byByZXR1cm4gZWFybHkgd2hlbiBjYWxsZWQgZnJvbSBhIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlLlxuXG5UaGlzIGNoYW5nZTpcbjEuIERvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IHN0YWNrL2hlYXAgYnVmZmVycyBvciBkYXRhIHN0cnVjdHVyZXMuXG4yLiBEb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgdG8gdXNlciBzcGFjZS5cbjMuIERvZXMgbm90IG1vZGlmeSBidWZmZXIgbGVuZ3RocywgYm91bmRzIGNoZWNrcywgb3IgY29udHJvbCBmbG93IGluIGFueSB3YXkgdGhhdCB3b3VsZCBwZXJtaXQgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NDY2M2MzNDg4NTgxYmFlZDQ2MDM1MDcwMmZiMmE1YTE3MzVmODhmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxNzoyMzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMKaW5kZXggOWE3NzM1MDJmMTBhYy4uYzMzZGFlMjQ4YzQ3NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMKQEAgLTUzLDYgJiM0Mzs1Myw5IEBAIHZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSwKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAomIzQzOwlpZiAobmV0LSZndDt1c2VyX25zICE9ICZhbXA7aW5pdF91c2VyX25zKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlpZiAoY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMKaW5kZXggNmRhMzEwMmI3YzFiMy4uYTVmNmYwNzRhN2U5MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMKQEAgLTQ3LDYgJiM0Mzs0Nyw5IEBAIHN0YXRpYyBib29sIG5mX2R1cF9pcHY2X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIHZvaWQgbmZfZHVwX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSwKIAkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpCiB7CiYjNDM7CWlmIChuZXQtJmd0O3VzZXJfbnMgIT0gJmFtcDtpbml0X3VzZXJfbnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWlmIChjdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUpCiAJCWdvdG8gb3V0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgYG5mX2R1cF9pcHY0LmNgIGFuZCBgbmZfZHVwX2lwdjYuY2AgaW4gdGhlIG5ldGZpbHRlciBjb2RlLiBHb3QgaXQuJiMzNDsgVGhlIGluZGV4IGNoYW5nZXMgbG9vayBzdHJhaWdodGZvcndhcmQsIGFuZCB0aGUgZGlmZiBpdHNlbGYgaXMgbWluaW1hbDogd2UmIzM5O3JlIGFkZGluZyBhIGNoZWNrIGZvciBgbmV0LSZndDt1c2VyX25zYC4KCk15IGV4cGVydCBpbnR1aXRpb24gc3VnZ2VzdHMgdGhpcyBpcyBsaWtlbHkgYSBzZWN1cml0eSBoYXJkZW5pbmcgY2hhbmdlLiBUaGUgYWRkZWQgY29uZGl0aW9uIGBpZiAobmV0LSZndDt1c2VyX25zICE9ICZhbXA7aW5pdF91c2VyX25zKSByZXR1cm47YCBpbW1lZGlhdGVseSBmbGFncyB0byBtZSB0aGF0IHdlIGFyZSB0YWxraW5nIGFib3V0IGEgbmFtZXNwYWNlZCBuZXR3b3JrIGNvbnRleHQuIFRoaXMgaXMgbGlrZWx5IHRvIHByZXZlbnQgY2VydGFpbiBvcGVyYXRpb25zIHdoZW4gdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGlzbiYjMzk7dCB0aGUgaW5pdGlhbCBvbmUuIEkgd291bGQgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgY29udGV4dHMgYW5kIHBvc3NpYmxlIGV4cGxvaXRzIGhlcmUsIGJ1dCwgaW4gZXNzZW5jZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc2FuaXR5IGNoZWNrLCBndWFyZGluZyBhZ2FpbnN0IHBvdGVudGlhbGx5IHVuaW50ZW5kZWQgYmVoYXZpb3IgaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzLiBUaGUgZnVuY3Rpb24gYXBwZWFycyB0byBkdXBsaWNhdGUgcGFja2V0cywgc28gcG90ZW50aWFsbHkgdGhlcmUgaXMgYW4gZXNjYXBlIG9yIGxlYWthZ2Ugc2NlbmFyaW8gdGhhdCB0aGlzIGFkZHJlc3Nlcy4KClRvIGRldGVybWluZSBpZiBLTVNBTiBmdXp6aW5nIGlzICpuZWNlc3NhcnkqLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mICpza2lwcGluZyogdGhlIGR1cGxpY2F0aW9uLiBEb2VzIGl0IGludHJvZHVjZSBhIHVzZS1hZnRlci1mcmVlLCBhbiB1bmluaXRpYWxpemVkIHJlYWQsIG9yIG1heWJlIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIGVkZ2UgY2FzZXM/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgYnV0IHRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgbGlrZSBhIG1pdGlnYXRpb24gZm9yIGEga25vd24sIG9yIHN1c3BlY3RlZCwgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqIChDKSAyMDA3IGJ5IFNlYmFzdGlhbiBDbGHDn2VuIFx1MDAzY3NlYmFzdGlhbi5jbGFzc2VuQGZyZWVuZXQuYWdcdTAwM2VcbiAgIDQ6XHQgKiAoQykgMjAwNy0yMDEwIGJ5IEphbiBFbmdlbGhhcmR0IFx1MDAzY2plbmdlbGhAbWVkb3phcy5kZVx1MDAzZVxuICAgNTpcdCAqXG4gICA2Olx0ICogRXh0cmFjdGVkIGZyb20geHRfVEVFLmNcbiAgIDc6XHQgKi9cbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJjcHUuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JvdXRlLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2NoZWNrc3VtLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZmxvdy5oXHUwMDNlXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2ljbXAuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG4gIDE4Olx0I2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfZHVwX2lwdjQuaFx1MDAzZVxuICAyMDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuICAyMjpcdCNlbmRpZlxuICAyMzpcdFxuICAyNDpcdHN0YXRpYyBib29sIG5mX2R1cF9pcHY0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgMjU6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZ3csIGludCBvaWYpXG4gIDI2Olx0e1xuICAyNzpcdFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTtcbiAgMjg6XHRcdHN0cnVjdCBydGFibGUgKnJ0O1xuICAyOTpcdFx0c3RydWN0IGZsb3dpNCBmbDQ7XG4gIDMwOlx0XG4gIDMxOlx0XHRtZW1zZXQoXHUwMDI2Zmw0LCAwLCBzaXplb2YoZmw0KSk7XG4gIDMyOlx0XHRpZiAob2lmICE9IC0xKVxuICAzMzpcdFx0XHRmbDQuZmxvd2k0X29pZiA9IG9pZjtcbiAgMzQ6XHRcbiAgMzU6XHRcdGZsNC5kYWRkciA9IGd3LVx1MDAzZXNfYWRkcjtcbiAgMzY6XHRcdGZsNC5mbG93aTRfZHNjcCA9IGlwNGhfZHNjcChpcGgpO1xuICAzNzpcdFx0Zmw0LmZsb3dpNF9zY29wZSA9IFJUX1NDT1BFX1VOSVZFUlNFO1xuICAzODpcdFx0Zmw0LmZsb3dpNF9mbGFncyA9IEZMT1dJX0ZMQUdfS05PV05fTkg7XG4gIDM5Olx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcdTAwMjZmbDQpO1xuICA0MDpcdFx0aWYgKElTX0VSUihydCkpXG4gIDQxOlx0XHRcdHJldHVybiBmYWxzZTtcbiAgNDI6XHRcbiAgNDM6XHRcdHNrYl9kc3RfZHJvcChza2IpO1xuICA0NDpcdFx0c2tiX2RzdF9zZXQoc2tiLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuICA0NTpcdFx0c2tiLVx1MDAzZWRldiAgICAgID0gcnQtXHUwMDNlZHN0LmRldjtcbiAgNDY6XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcbiAgNDc6XHRcbiAgNDg6XHRcdHJldHVybiB0cnVlO1xuICA0OTpcdH1cbiAgNTA6XHRcbiAgNTE6XHR2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gIDUyOlx0XHRcdCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZ3csIGludCBvaWYpXG4gIDUzOlx0e1xuICA1NDpcdFx0c3RydWN0IGlwaGRyICppcGg7XG4gIDU1Olx0XG4gIDU2Olx0XHRpZiAobmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKVxuICA1NzpcdFx0XHRyZXR1cm47XG4gIDU4Olx0XG4gIDU5Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gIDYwOlx0XHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXG4gIDYxOlx0XHRcdGdvdG8gb3V0O1xuICA2MjpcdFx0LypcbiAgNjM6XHRcdCAqIENvcHkgdGhlIHNrYiwgYW5kIHJvdXRlIHRoZSBjb3B5LiBXaWxsIGxhdGVyIHJldHVybiAlWFRfQ09OVElOVUUgZm9yXG4gIDY0Olx0XHQgKiB0aGUgb3JpZ2luYWwgc2tiLCB3aGljaCBzaG91bGQgY29udGludWUgb24gaXRzIHdheSBhcyBpZiBub3RoaW5nIGhhc1xuICA2NTpcdFx0ICogaGFwcGVuZWQuIFRoZSBjb3B5IHNob3VsZCBiZSBpbmRlcGVuZGVudGx5IGRlbGl2ZXJlZCB0byB0aGUgZ2F0ZXdheS5cbiAgNjY6XHRcdCAqL1xuICA2NzpcdFx0c2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7XG4gIDY4Olx0XHRpZiAoc2tiID09IE5VTEwpXG4gIDY5Olx0XHRcdGdvdG8gb3V0O1xuICA3MDpcdFxuICA3MTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gIDcyOlx0XHQvKiBBdm9pZCBjb3VudGluZyBjbG9uZWQgcGFja2V0cyB0b3dhcmRzIHRoZSBvcmlnaW5hbCBjb25uZWN0aW9uLiAqL1xuICA3MzpcdFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiAgNzQ6XHRcdG5mX2N0X3NldChza2IsIE5VTEwsIElQX0NUX1VOVFJBQ0tFRCk7XG4gIDc1Olx0I2VuZGlmXG4gIDc2Olx0XHQvKlxuICA3NzpcdFx0ICogSWYgd2UgYXJlIGluIFBSRVJPVVRJTkcvSU5QVVQsIGRlY3JlYXNlIHRoZSBUVEwgdG8gbWl0aWdhdGUgcG90ZW50aWFsXG4gIDc4Olx0XHQgKiBsb29wcyBiZXR3ZWVuIHR3byBob3N0cy5cbiAgNzk6XHRcdCAqXG4gIDgwOlx0XHQgKiBTZXQgJUlQX0RGIHNvIHRoYXQgdGhlIG9yaWdpbmFsIHNvdXJjZSBpcyBub3RpZmllZCBvZiBhIHBvdGVudGlhbGx5XG4gIDgxOlx0XHQgKiBkZWNyZWFzZWQgTVRVIG9uIHRoZSBjbG9uZSByb3V0ZS4gSVB2NiBkb2VzIHRoaXMgdG9vLlxuICA4MjpcdFx0ICpcbiAgODM6XHRcdCAqIElQIGhlYWRlciBjaGVja3N1bSB3aWxsIGJlIHJlY2FsY3VsYXRlZCBhdCBpcF9sb2NhbF9vdXQuXG4gIDg0Olx0XHQgKi9cbiAgODU6XHRcdGlwaCA9IGlwX2hkcihza2IpO1xuICA4NjpcdFx0aXBoLVx1MDAzZWZyYWdfb2ZmIHw9IGh0b25zKElQX0RGKTtcbiAgODc6XHRcdGlmIChob29rbnVtID09IE5GX0lORVRfUFJFX1JPVVRJTkcgfHxcbiAgODg6XHRcdCAgICBob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pXG4gIDg5Olx0XHRcdC0taXBoLVx1MDAzZXR0bDtcbiAgOTA6XHRcbiAgOTE6XHRcdGlmIChuZl9kdXBfaXB2NF9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcbiAgOTI6XHRcdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xuICA5MzpcdFx0XHRpcF9sb2NhbF9vdXQobmV0LCBza2ItXHUwMDNlc2ssIHNrYik7XG4gIDk0Olx0XHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XG4gIDk1Olx0XHR9IGVsc2Uge1xuICA5NjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgOTc6XHRcdH1cbiAgOTg6XHRvdXQ6XG4gIDk5Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiAxMDA6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MzkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDb25zaWRlcmluZyB0aGUgSVB2NiBEdXBsaWNhdGlvbiBDYXNlKioKCkFscmlnaHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gTXkgcHJpbWFyeSBmb2N1cyBpcyBsaWtlbHkgb24gYG5mX2R1cC5jYCwgYnV0IGxldCYjMzk7cyBub3QgYmUgaGFzdHkuIFRvIGVuc3VyZSBJJiMzOTttIGNvdmVyaW5nIGFsbCBiYXNlcyBpbiB0aGlzIElQdjYgc2NlbmFyaW8sIEkgc2hvdWxkIGFsc28gdGhvcm91Z2hseSBleGFtaW5lIGBuZl9kdXBfaXB2Ni5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGR1cGxpY2F0aW9uIHByb2Nlc3Mgc3BlY2lmaWNhbGx5IGhhbmRsZXMgSVB2NiBwYWNrZXRzLiBJJiMzOTttIHRoaW5raW5nIHRoaXMgd2lsbCBoZWxwIGF2b2lkIGFueSBwb3RlbnRpYWwgb3ZlcnNpZ2h0cyBvciBhc3N1bXB0aW9ucyBiYXNlZCBzb2xlbHkgb24gSVB2NCBiZWhhdmlvci4gSXQmIzM5O3MgZ29vZCB0byBiZSB0aG9yb3VnaCBhbmQgY29uc2lkZXIgYWxsIHRoZSByZWxldmFudCBzb3VyY2UgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuICAgMjpcdC8qXG4gICAzOlx0ICogKEMpIDIwMDcgYnkgU2ViYXN0aWFuIENsYcOfZW4gXHUwMDNjc2ViYXN0aWFuLmNsYXNzZW5AZnJlZW5ldC5hZ1x1MDAzZVxuICAgNDpcdCAqIChDKSAyMDA3LTIwMTAgYnkgSmFuIEVuZ2VsaGFyZHQgXHUwMDNjamVuZ2VsaEBtZWRvemFzLmRlXHUwMDNlXG4gICA1Olx0ICpcbiAgIDY6XHQgKiBFeHRyYWN0ZWQgZnJvbSB4dF9URUUuY1xuICAgNzpcdCAqL1xuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kdXBfaXB2Ni5oXHUwMDNlXG4gIDE1Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oXHUwMDNlXG4gIDE3Olx0I2VuZGlmXG4gIDE4Olx0XG4gIDE5Olx0c3RhdGljIGJvb2wgbmZfZHVwX2lwdjZfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICAyMDpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXG4gIDIxOlx0e1xuICAyMjpcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7XG4gIDIzOlx0XHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XG4gIDI0Olx0XHRzdHJ1Y3QgZmxvd2k2IGZsNjtcbiAgMjU6XHRcbiAgMjY6XHRcdG1lbXNldChcdTAwMjZmbDYsIDAsIHNpemVvZihmbDYpKTtcbiAgMjc6XHRcdGlmIChvaWYgIT0gLTEpXG4gIDI4Olx0XHRcdGZsNi5mbG93aTZfb2lmID0gb2lmO1xuICAyOTpcdFxuICAzMDpcdFx0Zmw2LmRhZGRyID0gKmd3O1xuICAzMTpcdFx0Zmw2LmZsb3dsYWJlbCA9IChfX2ZvcmNlIF9fYmUzMikoKChpcGgtXHUwMDNlZmxvd19sYmxbMF0gXHUwMDI2IDB4RikgXHUwMDNjXHUwMDNjIDE2KSB8XG4gIDMyOlx0XHRcdFx0KGlwaC1cdTAwM2VmbG93X2xibFsxXSBcdTAwM2NcdTAwM2MgOCkgfCBpcGgtXHUwMDNlZmxvd19sYmxbMl0pO1xuICAzMzpcdFx0Zmw2LmZsb3dpNl9mbGFncyA9IEZMT1dJX0ZMQUdfS05PV05fTkg7XG4gIDM0Olx0XHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgTlVMTCwgXHUwMDI2Zmw2KTtcbiAgMzU6XHRcdGlmIChkc3QtXHUwMDNlZXJyb3IpIHtcbiAgMzY6XHRcdFx0ZHN0X3JlbGVhc2UoZHN0KTtcbiAgMzc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICAzODpcdFx0fVxuICAzOTpcdFx0c2tiX2RzdF9kcm9wKHNrYik7XG4gIDQwOlx0XHRza2JfZHN0X3NldChza2IsIGRzdCk7XG4gIDQxOlx0XHRza2ItXHUwMDNlZGV2ICAgICAgPSBkc3RfZGV2KGRzdCk7XG4gIDQyOlx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbiAgNDM6XHRcbiAgNDQ6XHRcdHJldHVybiB0cnVlO1xuICA0NTpcdH1cbiAgNDY6XHRcbiAgNDc6XHR2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gIDQ4Olx0XHRcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxuICA0OTpcdHtcbiAgNTA6XHRcdGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpXG4gIDUxOlx0XHRcdHJldHVybjtcbiAgNTI6XHRcbiAgNTM6XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiAgNTQ6XHRcdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSlcbiAgNTU6XHRcdFx0Z290byBvdXQ7XG4gIDU2Olx0XHRza2IgPSBwc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTtcbiAgNTc6XHRcdGlmIChza2IgPT0gTlVMTClcbiAgNTg6XHRcdFx0Z290byBvdXQ7XG4gIDU5Olx0XG4gIDYwOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcbiAgNjE6XHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4gIDYyOlx0XHRuZl9jdF9zZXQoc2tiLCBOVUxMLCBJUF9DVF9VTlRSQUNLRUQpO1xuICA2MzpcdCNlbmRpZlxuICA2NDpcdFx0aWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORyB8fFxuICA2NTpcdFx0ICAgIGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9JTikge1xuICA2NjpcdFx0XHRzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTtcbiAgNjc6XHRcdFx0LS1pcGgtXHUwMDNlaG9wX2xpbWl0O1xuICA2ODpcdFx0fVxuICA2OTpcdFx0aWYgKG5mX2R1cF9pcHY2X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xuICA3MDpcdFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XG4gIDcxOlx0XHRcdGlwNl9sb2NhbF9vdXQobmV0LCBza2ItXHUwMDNlc2ssIHNrYik7XG4gIDcyOlx0XHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XG4gIDczOlx0XHR9IGVsc2Uge1xuICA3NDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNzU6XHRcdH1cbiAgNzY6XHRvdXQ6XG4gIDc3Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiAgNzg6XHR9XG4gIDc5Olx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZHVwX2lwdjYpO1xuICA4MDpcdFxuICA4MTpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7U2ViYXN0aWFuIENsYcOfZW4gXHUwMDNjc2ViYXN0aWFuLmNsYXNzZW5AZnJlZW5ldC5hZ1x1MDAzZVwmIzM0Oyk7XG4gIDgyOlx0TU9EVUxFX0FVVEhPUihcJiMzNDtKYW4gRW5nZWxoYXJkdCBcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcdTAwM2VcJiMzNDspO1xuICA4MzpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtuZl9kdXBfaXB2NjogSVB2NiBwYWNrZXQgZHVwbGljYXRpb25cJiMzNDspO1xuICA4NDpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU2VjdXJpdHkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhleSYjMzk7cmUgYWRkaW5nIGEgY2hlY2ssIGFuIGBpZmAgc3RhdGVtZW50LCBpbiBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgLiBUaGUgY29uZGl0aW9uIGlzIGBuZXQtJmd0O3VzZXJfbnMgIT0gJmFtcDtpbml0X3VzZXJfbnNgLiBTbywgYmFzaWNhbGx5LCBpZiB3ZSYjMzk7cmUgKm5vdCogaW4gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UsIGl0JiMzOTtzIGFuIGltbWVkaWF0ZSByZXR1cm4uIFRoZSByYXRpb25hbGUgaXMgY2xlYXJseSBzZWN1cml0eS1yZWxhdGVkOiBwYWNrZXQgZHVwbGljYXRpb24gaW4gYSBub24taW5pdCBuYW1lc3BhY2UsIHBvdGVudGlhbGx5IHRocm91Z2ggbmZ0YWJsZXMgYGR1cGAgb3IgeHRhYmxlcyBgVEVFYCwgY291bGQgbGVhZCB0byBhIHNlcmlvdXMgcHJvYmxlbS4gSXQgc291bmRzIGxpa2UgdGhlcmUmIzM5O3MgYSByaXNrIG9mIGJyZWFraW5nIG5ldG5zIGlzb2xhdGlvbiwgY3JlYXRpbmcgcm91dGluZyBsb29wcywgb3IgbGVha2luZyBwYWNrZXRzIGJldHdlZW4gbmFtZXNwYWNlcy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHNjYW4gZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0IG1lIG1ha2Ugc3VyZTogTm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAsIG5vIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMsIGFuZCBubyBuZXcgc3RydWN0IGZpZWxkcy4gVGhpcyBhbGwgbG9va3MgZ29vZDsgaXQmIzM5O3MganVzdCBhbiBlYXJseSByZXR1cm4uCgpOb3csIGxldCYjMzk7cyBkaWcgYSBiaXQgZGVlcGVyLiBJdCYjMzk7cyBhIHNpbXBsZSBgaWZgIGFuZCByZXR1cm4sIGJ1dCBpcyB0aGVyZSBhbnl0aGluZyBzdWJ0bGUgSSYjMzk7bSBtaXNzaW5nPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjYWxsZXIgb2YgYG5mX2R1cF9pcHY0YC9gbmZfZHVwX2lwdjZgIHNlZWluZyB0aGlzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnM6IHNwZWNpZmljYWxseSBgbmZ0X2R1cF9pcHY0X2V2YWxgIG9yIGB0ZWVfdGc0YCAtIGxldCBtZSBsb29rIHRoZW0gb3ZlciBhbmQgc2VlIGhvdyB0aGV5IGFyZSBhZmZlY3RlZC4gSXQgc2hvdWxkbiYjMzk7dCBiZSBtdWNoLCBidXQgaXQgYWx3YXlzIHBheXMgdG8gY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2R1cF9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmgtNy1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0Lmg6ODp2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oLTktXHRcdCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZ3csIGludCBvaWYpO1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTcyPWNvbmZpZyBORl9EVVBfSVBWNFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTc1LVx0aGVscFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NzY6XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG5mX2R1cF9pcHY0IGNvcmUsIHdoaWNoIGR1cGxpY2F0ZXMgYW4gSVB2NFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNzctXHQgIHBhY2tldCB0byBiZSByZXJvdXRlZCB0byBhbm90aGVyIGRlc3RpbmF0aW9uLlxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZT01MT1vYmotJChDT05GSUdfSVBfTkZfQVJQRklMVEVSKSAmIzQzOz0gYXJwdGFibGVfZmlsdGVyLm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS01Mi1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfRFVQX0lQVjQpICYjNDM7PSBuZl9kdXBfaXB2NC5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTQtXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMTgtI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2Vcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjE5OiNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oXHUwMDNlXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0yMC0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTIzLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6MjQ6c3RhdGljIGJvb2wgbmZfZHVwX2lwdjRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMjUtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTUwLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6NTE6dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtNTItXHRcdCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZ3csIGludCBvaWYpXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtOTAtXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzo5MTpcdGlmIChuZl9kdXBfaXB2NF9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTkyLVx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMTAwLX1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjEwMTpFWFBPUlRfU1lNQk9MX0dQTChuZl9kdXBfaXB2NCk7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0xMDItXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM9MTA0PU1PRFVMRV9BVVRIT1IoXCYjMzQ7SmFuIEVuZ2VsaGFyZHQgXHUwMDNjamVuZ2VsaEBtZWRvemFzLmRlXHUwMDNlXCYjMzQ7KTtcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjEwNTpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7bmZfZHVwX2lwdjQ6IER1cGxpY2F0ZSBJUHY0IHBhY2tldFwmIzM0Oyk7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0xMDYtTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMTItI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jOjEzOiNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oXHUwMDNlXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMTQtXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jPTIwPXN0YXRpYyB2b2lkIG5mdF9kdXBfaXB2NF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMjktXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmM6MzA6XHRuZl9kdXBfaXB2NChuZnRfbmV0KHBrdCksIHBrdC1cdTAwM2Vza2IsIG5mdF9ob29rKHBrdCksIFx1MDAyNmd3LCBvaWYpO1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jLTMxLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTE2LSNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jOjE3OiNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTE4LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kdXBfaXB2Ni5oXHUwMDNlXG4tLVxubmV0L25ldGZpbHRlci94dF9URUUuYz0zNz10ZWVfdGc0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTQxLVxubmV0L25ldGZpbHRlci94dF9URUUuYzo0MjpcdG5mX2R1cF9pcHY0KHh0X25ldChwYXIpLCBza2IsIHh0X2hvb2tudW0ocGFyKSwgXHUwMDI2aW5mby1cdTAwM2Vndy5pbiwgb2lmKTtcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzcKCQkJCQkJCW91dHB1dDogMTc3CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBjbG9zZWx5IGF0IHRoZXNlIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAgZnVuY3Rpb25zLiBUaGUgZmFjdCB0aGF0IHRoZXkgcmV0dXJuIGB2b2lkYCBpbW1lZGlhdGVseSBjYXVnaHQgbXkgZXllIOKAkyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gQmFzZWQgb24gd2hhdCBJJiMzOTttIHNlZWluZywgYW55IGVhcmx5IHJldHVybnMgZnJvbSB0aGVzZSBmdW5jdGlvbnMgZG9uJiMzOTt0IGxlYXZlIGFueXRoaW5nIGluIGEgbWVzc3kgc3RhdGUuIE5vIGRhdGEgaXMgYmVpbmcgcGFzc2VkIGFyb3VuZCBpbiBhbiB1bmluaXRpYWxpemVkIGNvbmRpdGlvbi4gVGhlcmUmIzM5O3Mgbm8gdW5leHBlY3RlZCBhbGxvY2F0aW9uIG9yIGFjY2VzcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcywgYXQgaXRzIGNvcmUsIGEgc3RyYWlnaHRmb3J3YXJkIGNoZWNrIGZvciBwcml2aWxlZ2UgYW5kIG5hbWVzcGFjZSBpc29sYXRpb24uCgpHaXZlbiB0aGlzIHVuZGVyc3RhbmRpbmcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4gYXJlIGVudGlyZWx5IGFkZXF1YXRlIHRvIGNhdGNoIGFueXRoaW5nIHRoYXQgKm1pZ2h0KiBiZSBjb25jZXJuaW5nLiBXZSBjZXJ0YWlubHkgZG9uJiMzOTt0IG5lZWQgdG8gaW52b2x2ZSBLTVNBTiBmb3IgdGhpcy4gSXQmIzM5O3MgYSBjbGVhbiBjaGFuZ2UuCgpOb3csIGxldCYjMzk7cyBnZXQgdGhhdCBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbCBwcmVwcGVkLiBJJiMzOTt2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB3aGF0IG5lZWRzIHRvIGJlIGNvbW11bmljYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24vbmFtZXNwYWNlIGNoZWNrIChgbmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zYCkgdG8gYG5mX2R1cF9pcHY0KClgIGFuZCBgbmZfZHVwX2lwdjYoKWAgdG8gcmV0dXJuIGVhcmx5IHdoZW4gY2FsbGVkIGZyb20gYSBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZS5cblxuVGhpcyBjaGFuZ2U6XG4xLiBEb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBzdGFjay9oZWFwIGJ1ZmZlcnMgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuMi4gRG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuXG4zLiBEb2VzIG5vdCBtb2RpZnkgYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja3MsIG9yIGNvbnRyb2wgZmxvdyBpbiBhbnkgd2F5IHRoYXQgd291bGQgcGVybWl0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24vbmFtZXNwYWNlIGNoZWNrIChgbmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zYCkgdG8gYG5mX2R1cF9pcHY0KClgIGFuZCBgbmZfZHVwX2lwdjYoKWAgdG8gcmV0dXJuIGVhcmx5IHdoZW4gY2FsbGVkIGZyb20gYSBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZS5cblxuVGhpcyBjaGFuZ2U6XG4xLiBEb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBzdGFjay9oZWFwIGJ1ZmZlcnMgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuMi4gRG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuXG4zLiBEb2VzIG5vdCBtb2RpZnkgYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja3MsIG9yIGNvbnRyb2wgZmxvdyBpbiBhbnkgd2F5IHRoYXQgd291bGQgcGVybWl0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzowMi4zNTcwNjEyMTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUxMTY5NDAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9EVVBfSVBWNFwiLFxuICAgIFwiTkZfRFVQX0lQVjZcIixcbiAgICBcIk5GVF9EVVBfSVBWNFwiLFxuICAgIFwiTkZUX0RVUF9JUFY2XCIsXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX1RFRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2R1cF9pcHY0XCIsXG4gICAgXCJuZl9kdXBfaXB2NlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24vbmFtZXNwYWNlIGNoZWNrIChgbmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnNgKSB0byBgbmZfZHVwX2lwdjQoKWAgYW5kIGBuZl9kdXBfaXB2NigpYCB0byByZXR1cm4gZWFybHkgd2hlbiBjYWxsZWQgZnJvbSBhIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlLlxcblxcblRoaXMgY2hhbmdlOlxcbjEuIERvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IHN0YWNrL2hlYXAgYnVmZmVycyBvciBkYXRhIHN0cnVjdHVyZXMuXFxuMi4gRG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuXFxuMy4gRG9lcyBub3QgbW9kaWZ5IGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBjb250cm9sIGZsb3cgaW4gYW55IHdheSB0aGF0IHdvdWxkIHBlcm1pdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMgaW4gbmZfZHVwX2lwdjQgYW5kIG5mX2R1cF9pcHY2IHRvIHJlc3RyaWN0IGV4ZWN1dGlvbiB0byB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAobmV0LVxcdTAwM2V1c2VyX25zID09IFxcdTAwMjZpbml0X3VzZXJfbnMpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBjb250cm9sIGZsb3cgZm9yIG5mdGFibGVzIChuZnRfZHVwKSBhbmQgeHRhYmxlcyAoeHRfVEVFKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gbmV0d29yayBuYW1lc3BhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzowMi4zNTcwNjQ5OTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTkyODAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ0NjYzYzM0ODg1ODFiYWVkNDYwMzUwNzAyZmIyYTVhMTczNWY4OGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAxNzoyMzowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXFxuaW5kZXggOWE3NzM1MDJmMTBhYy4uYzMzZGFlMjQ4YzQ3NyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xcbisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXFxuQEAgLTUzLDYgKzUzLDkgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbiB7XFxuIFxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiBcXG4rXFx0aWYgKG5ldC1cXHUwMDNldXNlcl9ucyAhPSBcXHUwMDI2aW5pdF91c2VyX25zKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuIFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXFxuaW5kZXggNmRhMzEwMmI3YzFiMy4uYTVmNmYwNzRhN2U5MSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXFxuQEAgLTQ3LDYgKzQ3LDkgQEAgc3RhdGljIGJvb2wgbmZfZHVwX2lwdjZfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiB2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuIFxcdFxcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxcbiB7XFxuK1xcdGlmIChuZXQtXFx1MDAzZXVzZXJfbnMgIT0gXFx1MDAyNmluaXRfdXNlcl9ucylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbiBcXHRpZiAoY3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6MDIuODY5NjIyMjIyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNjI0Mjc3MDQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9EVVBfSVBWNFwiLFxuICAgIFwiTkZfRFVQX0lQVjZcIixcbiAgICBcIk5GVF9EVVBfSVBWNFwiLFxuICAgIFwiTkZUX0RVUF9JUFY2XCIsXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX1RFRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2R1cF9pcHY0XCIsXG4gICAgXCJuZl9kdXBfaXB2NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMgaW4gbmZfZHVwX2lwdjQgYW5kIG5mX2R1cF9pcHY2IHRvIHJlc3RyaWN0IGV4ZWN1dGlvbiB0byB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAobmV0LVxcdTAwM2V1c2VyX25zID09IFxcdTAwMjZpbml0X3VzZXJfbnMpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBjb250cm9sIGZsb3cgZm9yIG5mdGFibGVzIChuZnRfZHVwKSBhbmQgeHRhYmxlcyAoeHRfVEVFKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gbmV0d29yayBuYW1lc3BhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0NjYzYzM0ODg1ODFiYWVkNDYwMzUwNzAyZmIyYTVhMTczNWY4OGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDE3OjIzOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuaW5kZXggOWE3NzM1MDJmMTBhYy4uYzMzZGFlMjQ4YzQ3NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuQEAgLTUzLDYgKzUzLDkgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIHtcbiBcdHN0cnVjdCBpcGhkciAqaXBoO1xuIFxuK1x0aWYgKG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucylcbitcdFx0cmV0dXJuO1xuK1xuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlKVxuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXG5pbmRleCA2ZGEzMTAyYjdjMWIzLi5hNWY2ZjA3NGE3ZTkxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXG5AQCAtNDcsNiArNDcsOSBAQCBzdGF0aWMgYm9vbCBuZl9kdXBfaXB2Nl9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIFx0XHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZilcbiB7XG4rXHRpZiAobmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXG4gXHRcdGdvdG8gb3V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6MDIuODY5NjIzNzIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg1MjkwNTE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgRmlsdGVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IGltcHJlc3Npb24gaXMgYWx3YXlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYmVpbmcgdG91Y2hlZC4gV2UndmUgZ290IG1vZGlmaWNhdGlvbnMgaW4gYG5mX2R1cF9pcHY0LmNgIGFuZCBgbmZfZHVwX2lwdjYuY2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyByZWxhdGVkIHRvIG5ldHdvcmsgZmlsdGVyaW5nLCBzcGVjaWZpY2FsbHkgSVB2NCBhbmQgSVB2NiBkdXBsaWNhdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gVGhlIGZpbGUgbmFtZXMgdGhlbXNlbHZlcyBhcmUgZmFpcmx5IGV4cGxpY2l0LlxuXG5Ob3csIHRob3NlIGNvZGUgY2hhbmdlc+KApiB0aGV5J3JlIGFkZGluZyBhIGNoZWNrOiBgaWYgKG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucykgcmV0dXJuO2AgaW4gYm90aCBmaWxlcy4gVGhpcyBsb29rcyBsaWtlIGEgbmFtZXNwYWNlIHJlc3RyaWN0aW9uLiBFc3NlbnRpYWxseSwgaXQncyBwcmV2ZW50aW5nIHRoZSBjb2RlIGZyb20gcnVubmluZyBpZiB0aGUgbmV0d29yayBuYW1lc3BhY2UgaXNuJ3QgdGhlIGluaXRpYWwgb25lIChgaW5pdF91c2VyX25zYCkuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZSBkdXBsaWNhdGlvbiBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIHJlc3RyaWN0ZWQgdG8gdGhlIGluaXRpYWwgdXNlciBuYW1lc3BhY2UuIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGV5J3ZlIGRvbmUgdGhpcy4gV2hhdCdzIHRoZSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb24/IE9yIGlzIGl0IHNpbXBseSBhIG1hdHRlciBvZiByZXNvdXJjZSBjb250cm9sPyBXaGF0J3MgdGhlIGludGVuZGVkIHVzZSBjYXNlP1xuXG5UbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiB0aGlzLCBJIG5lZWQgY29udGV4dC4gTGV0IG1lIGZpcmUgdXAgYGdyZXBwZXJgIChvciwgaWYgaXQncyBtb3JlIGNvbnZlbmllbnQsIGByZWFkLWZpbGVgKSBhbmQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IG1pZ2h0IGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uIFRoZSBnb2FsIGlzIHRvIHNlZSB3aGVyZSB0aGVzZSBmaWxlcyBhcmUgdXNlZCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBpZiB0aGlzIGNoYW5nZSBoYXMgYW55IHdpZGVyIGltcGFjdCBvbiBOZXRmaWx0ZXIgYXMgYSB3aG9sZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIGJlZm9yZSBJIGNhbiByZWFsbHkgYXNzZXNzIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBwYXRjaCBhbmQgd2hldGhlciBpdCdzIGltcGxlbWVudGVkIGNvcnJlY3RseS4gVGhpcyBuYW1lc3BhY2UgY2hlY2sgaXMgc2ltcGxlIGVub3VnaCBvbiBpdHMgb3duLCBidXQgdGhlICp3aHkqIGlzIGFsd2F5cyBtb3JlIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzMiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjA4LjcyMjUzMTAzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTg3Mzk5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9kdXBfaXB2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9NzI9Y29uZmlnIE5GX0RVUF9JUFY0XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy03NS1cXHRoZWxwXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NzY6XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBuZl9kdXBfaXB2NCBjb3JlLCB3aGljaCBkdXBsaWNhdGVzIGFuIElQdjRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy03Ny1cXHQgIHBhY2tldCB0byBiZSByZXJvdXRlZCB0byBhbm90aGVyIGRlc3RpbmF0aW9uLlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTUxPW9iai0kKENPTkZJR19JUF9ORl9BUlBGSUxURVIpICs9IGFycHRhYmxlX2ZpbHRlci5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTUyLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfRFVQX0lQVjQpICs9IG5mX2R1cF9pcHY0Lm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTQtXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6MTk6I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oXFx1MDAzZVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTIwLSNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0yMy1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzoyNDpzdGF0aWMgYm9vbCBuZl9kdXBfaXB2NF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMjUtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtNTAtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6NTE6dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTUyLVxcdFxcdCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZ3csIGludCBvaWYpXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy05MC1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzo5MTpcXHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtOTItXFx0XFx0Y3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gdHJ1ZTtcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTEwMC19XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6MTAxOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2R1cF9pcHY0KTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0xMDItXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYz0xMDQ9TU9EVUxFX0FVVEhPUihcXFwiSmFuIEVuZ2VsaGFyZHQgXFx1MDAzY2plbmdlbGhAbWVkb3phcy5kZVxcdTAwM2VcXFwiKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzoxMDU6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJuZl9kdXBfaXB2NDogRHVwbGljYXRlIElQdjQgcGFja2V0XFxcIik7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMTA2LU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxcdTAwM2VcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmM6MTM6I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oXFx1MDAzZVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYy0xNC1cXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYz0yMD1zdGF0aWMgdm9pZCBuZnRfZHVwX2lwdjRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMjktXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jOjMwOlxcdG5mX2R1cF9pcHY0KG5mdF9uZXQocGt0KSwgcGt0LVxcdTAwM2Vza2IsIG5mdF9ob29rKHBrdCksIFxcdTAwMjZndywgb2lmKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMzEtfVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NjE9Y29uZmlnIE5GX0RVUF9JUFY2XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02NC1cXHRoZWxwXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6NjU6XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBuZl9kdXBfaXB2NiBjb3JlLCB3aGljaCBkdXBsaWNhdGVzIGFuIElQdjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02Ni1cXHQgIHBhY2tldCB0byBiZSByZXJvdXRlZCB0byBhbm90aGVyIGRlc3RpbmF0aW9uLlxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19ORl9SRUpFQ1RfSVBWNikgKz0gbmZfcmVqZWN0X2lwdjYub1xcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0yMy1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX05GX0RVUF9JUFY2KSArPSBuZl9kdXBfaXB2Ni5vXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlLTI1LVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtMTMtI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYzoxNDojaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9pcHY2L25mX2R1cF9pcHY2LmhcXHUwMDNlXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtMTUtI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jLTE4LVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jOjE5OnN0YXRpYyBib29sIG5mX2R1cF9pcHY2X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy0yMC1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNDYtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmM6NDc6dm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jLTQ4LVxcdFxcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNjgtXFx0fVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jOjY5OlxcdGlmIChuZl9kdXBfaXB2Nl9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy03MC1cXHRcXHRjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNzgtfVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jOjc5OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2R1cF9pcHY2KTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy04MC1cXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jPTgyPU1PRFVMRV9BVVRIT1IoXFxcIkphbiBFbmdlbGhhcmR0IFxcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcXHUwMDNlXFxcIik7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmM6ODM6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJuZl9kdXBfaXB2NjogSVB2NiBwYWNrZXQgZHVwbGljYXRpb25cXFwiKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy04NC1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmMtMTItI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXHUwMDNlXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9kdXBfaXB2Ni5jOjEzOiNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfZHVwX2lwdjYuaFxcdTAwM2VcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmMtMTQtXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmM9MjA9c3RhdGljIHZvaWQgbmZ0X2R1cF9pcHY2X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9kdXBfaXB2Ni5jLTI3LVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZHVwX2lwdjYuYzoyODpcXHRuZl9kdXBfaXB2NihuZnRfbmV0KHBrdCksIHBrdC1cXHUwMDNlc2tiLCBuZnRfaG9vayhwa3QpLCBndywgb2lmKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmMtMjktfVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9URUUuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci94dF9URUUuYzoxNzojaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci94dF9URUUuYzoxODojaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9pcHY2L25mX2R1cF9pcHY2LmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci94dF9URUUuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL3h0X1RFRS5oXFx1MDAzZVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9URUUuYz0zNz10ZWVfdGc0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNDEtXFxubmV0L25ldGZpbHRlci94dF9URUUuYzo0MjpcXHRuZl9kdXBfaXB2NCh4dF9uZXQocGFyKSwgc2tiLCB4dF9ob29rbnVtKHBhciksIFxcdTAwMjZpbmZvLVxcdTAwM2Vndy5pbiwgb2lmKTtcXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTQzLVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9URUUuYz00OT10ZWVfdGc2KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNTMtXFxubmV0L25ldGZpbHRlci94dF9URUUuYzo1NDpcXHRuZl9kdXBfaXB2Nih4dF9uZXQocGFyKSwgc2tiLCB4dF9ob29rbnVtKHBhciksIFxcdTAwMjZpbmZvLVxcdTAwM2Vndy5pbjYsIG9pZik7XFxubmV0L25ldGZpbHRlci94dF9URUUuYy01NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6MDguNzkyNDEyMTg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQxMjMwNDgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFBhY2tldCBEdXBsaWNhdGlvbiBpbiBOZXRmaWx0ZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgTmV0ZmlsdGVyIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgSVB2NCBhbmQgSVB2NiBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgcmVhZC1maWxlYCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGR1cGxpY2F0aW9uIGZ1bmN0aW9uYWxpdHkuIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyBgbmZfZHVwX2lwdjQuY2AgaW4gYG5ldC9pcHY0L25ldGZpbHRlci9gIGFuZCB0aGVuIG1vdmUgb24gdG8gdGhlIGBuZl9kdXBfaXB2Ni5jYCBjb3VudGVycGFydCBsb2NhdGVkIGluIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvYC4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjb3JlIGFsZ29yaXRobXMgZW1wbG95ZWQgYW5kIGFueSBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBJUHY0IGFuZCBJUHY2IGhhbmRsaW5nLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgb3JpZ2luYWwgcGFja2V0cyBhcmUgZHVwbGljYXRlZCwgaG93IHRoZSBuZXcgcGFja2V0cyBhcmUgaW5qZWN0ZWQgaW50byB0aGUgbmV0d29yayBzdGFjaywgYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgZWRnZSBjYXNlcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHBhY2tldCBkdXBsaWNhdGlvbiBpcyBpbXBsZW1lbnRlZCBhdCB0aGUgTmV0ZmlsdGVyIGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTQwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6MTQuMjA0NzE5NDcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0aWYgKElTX0VSUihydCkpXFxuICA0MTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdHNrYl9kc3RfZHJvcChza2IpO1xcbiAgNDQ6XFx0XFx0c2tiX2RzdF9zZXQoc2tiLCBcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxuICA0NTpcXHRcXHRza2ItXFx1MDAzZWRldiAgICAgID0gcnQtXFx1MDAzZWRzdC5kZXY7XFxuICA0NjpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDQ5OlxcdH1cXG4gIDUwOlxcdFxcbiAgNTE6XFx0dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbiAgNTI6XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpbl9hZGRyICpndywgaW50IG9pZilcXG4gIDUzOlxcdHtcXG4gIDU0OlxcdFxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiAgNTU6XFx0XFxuICA1NjpcXHRcXHRpZiAobmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpXFxuICA1NzpcXHRcXHRcXHRyZXR1cm47XFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDYwOlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXFxuICA2MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDYyOlxcdFxcdC8qXFxuICA2MzpcXHRcXHQgKiBDb3B5IHRoZSBza2IsIGFuZCByb3V0ZSB0aGUgY29weS4gV2lsbCBsYXRlciByZXR1cm4gJVhUX0NPTlRJTlVFIGZvclxcbiAgNjQ6XFx0XFx0ICogdGhlIG9yaWdpbmFsIHNrYiwgd2hpY2ggc2hvdWxkIGNvbnRpbnVlIG9uIGl0cyB3YXkgYXMgaWYgbm90aGluZyBoYXNcXG4gIDY1OlxcdFxcdCAqIGhhcHBlbmVkLiBUaGUgY29weSBzaG91bGQgYmUgaW5kZXBlbmRlbnRseSBkZWxpdmVyZWQgdG8gdGhlIGdhdGV3YXkuXFxuICA2NjpcXHRcXHQgKi9cXG4gIDY3OlxcdFxcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xcbiAgNjg6XFx0XFx0aWYgKHNrYiA9PSBOVUxMKVxcbiAgNjk6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA3MDpcXHRcXG4gIDcxOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuICA3MjpcXHRcXHQvKiBBdm9pZCBjb3VudGluZyBjbG9uZWQgcGFja2V0cyB0b3dhcmRzIHRoZSBvcmlnaW5hbCBjb25uZWN0aW9uLiAqL1xcbiAgNzM6XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gIDc0OlxcdFxcdG5mX2N0X3NldChza2IsIE5VTEwsIElQX0NUX1VOVFJBQ0tFRCk7XFxuICA3NTpcXHQjZW5kaWZcXG4gIDc2OlxcdFxcdC8qXFxuICA3NzpcXHRcXHQgKiBJZiB3ZSBhcmUgaW4gUFJFUk9VVElORy9JTlBVVCwgZGVjcmVhc2UgdGhlIFRUTCB0byBtaXRpZ2F0ZSBwb3RlbnRpYWxcXG4gIDc4OlxcdFxcdCAqIGxvb3BzIGJldHdlZW4gdHdvIGhvc3RzLlxcbiAgNzk6XFx0XFx0ICpcXG4gIDgwOlxcdFxcdCAqIFNldCAlSVBfREYgc28gdGhhdCB0aGUgb3JpZ2luYWwgc291cmNlIGlzIG5vdGlmaWVkIG9mIGEgcG90ZW50aWFsbHlcXG4gIDgxOlxcdFxcdCAqIGRlY3JlYXNlZCBNVFUgb24gdGhlIGNsb25lIHJvdXRlLiBJUHY2IGRvZXMgdGhpcyB0b28uXFxuICA4MjpcXHRcXHQgKlxcbiAgODM6XFx0XFx0ICogSVAgaGVhZGVyIGNoZWNrc3VtIHdpbGwgYmUgcmVjYWxjdWxhdGVkIGF0IGlwX2xvY2FsX291dC5cXG4gIDg0OlxcdFxcdCAqL1xcbiAgODU6XFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuICA4NjpcXHRcXHRpcGgtXFx1MDAzZWZyYWdfb2ZmIHw9IGh0b25zKElQX0RGKTtcXG4gIDg3OlxcdFxcdGlmIChob29rbnVtID09IE5GX0lORVRfUFJFX1JPVVRJTkcgfHxcXG4gIDg4OlxcdFxcdCAgICBob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pXFxuICA4OTpcXHRcXHRcXHQtLWlwaC1cXHUwMDNldHRsO1xcbiAgOTA6XFx0XFxuICA5MTpcXHRcXHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XFxuICA5MjpcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xcbiAgOTM6XFx0XFx0XFx0aXBfbG9jYWxfb3V0KG5ldCwgc2tiLVxcdTAwM2Vzaywgc2tiKTtcXG4gIDk0OlxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xcbiAgOTU6XFx0XFx0fSBlbHNlIHtcXG4gIDk2OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgOTc6XFx0XFx0fVxcbiAgOTg6XFx0b3V0OlxcbiAgOTk6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIDEwMDpcXHR9XFxuIDEwMTpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9kdXBfaXB2NCk7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdE1PRFVMRV9BVVRIT1IoXFxcIlNlYmFzdGlhbiBDbGHDn2VuIFxcdTAwM2NzZWJhc3RpYW4uY2xhc3NlbkBmcmVlbmV0LmFnXFx1MDAzZVxcXCIpO1xcbiAxMDQ6XFx0TU9EVUxFX0FVVEhPUihcXFwiSmFuIEVuZ2VsaGFyZHQgXFx1MDAzY2plbmdlbGhAbWVkb3phcy5kZVxcdTAwM2VcXFwiKTtcXG4gMTA1OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwibmZfZHVwX2lwdjQ6IER1cGxpY2F0ZSBJUHY0IHBhY2tldFxcXCIpO1xcbiAxMDY6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzoxNC4yMDQ3OTE2NDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzU2NjEwNzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBJUHY2IER1cGxpY2F0ZSBQYWNrZXQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHBvdGVudGlhbCBpc3N1ZXMsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIEknbSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzIHJlbGF0ZWQgdG8gSVB2NiBwYWNrZXQgZHVwbGljYXRpb24gd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBNeSBpbml0aWFsIGludmVzdGlnYXRpb24gaGFzIGxlZCBtZSBkb3duIHRoaXMgcGF0aCwgc28gaXQncyBvbmx5IGxvZ2ljYWwgdG8gZXh0ZW5kIG15IGNoZWNrIHRvIHRoZSBgbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNgIGZpbGUgYXMgd2VsbC4gSXQncyBhbG1vc3QgZ3VhcmFudGVlZCB0aGVyZSBhcmUgY3JpdGljYWwgcGllY2VzIG9mIHRoZSBwdXp6bGUgd2FpdGluZyBmb3IgbXkgYW5hbHlzaXMgaGVyZS4gVGltZSB0byBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDEzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzoxNS45NjE0MDUyNDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHRcXHRza2JfZHN0X3NldChza2IsIGRzdCk7XFxuICA0MTpcXHRcXHRza2ItXFx1MDAzZWRldiAgICAgID0gZHN0X2Rldihkc3QpO1xcbiAgNDI6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDQ1OlxcdH1cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0dm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbiAgNDg6XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXFxuICA0OTpcXHR7XFxuICA1MDpcXHRcXHRpZiAobmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpXFxuICA1MTpcXHRcXHRcXHRyZXR1cm47XFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDU0OlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXFxuICA1NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDU2OlxcdFxcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xcbiAgNTc6XFx0XFx0aWYgKHNrYiA9PSBOVUxMKVxcbiAgNTg6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA1OTpcXHRcXG4gIDYwOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuICA2MTpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbiAgNjI6XFx0XFx0bmZfY3Rfc2V0KHNrYiwgTlVMTCwgSVBfQ1RfVU5UUkFDS0VEKTtcXG4gIDYzOlxcdCNlbmRpZlxcbiAgNjQ6XFx0XFx0aWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORyB8fFxcbiAgNjU6XFx0XFx0ICAgIGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9JTikge1xcbiAgNjY6XFx0XFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7XFxuICA2NzpcXHRcXHRcXHQtLWlwaC1cXHUwMDNlaG9wX2xpbWl0O1xcbiAgNjg6XFx0XFx0fVxcbiAgNjk6XFx0XFx0aWYgKG5mX2R1cF9pcHY2X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xcbiAgNzA6XFx0XFx0XFx0Y3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gdHJ1ZTtcXG4gIDcxOlxcdFxcdFxcdGlwNl9sb2NhbF9vdXQobmV0LCBza2ItXFx1MDAzZXNrLCBza2IpO1xcbiAgNzI6XFx0XFx0XFx0Y3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XFxuICA3MzpcXHRcXHR9IGVsc2Uge1xcbiAgNzQ6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA3NTpcXHRcXHR9XFxuICA3NjpcXHRvdXQ6XFxuICA3NzpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gIDc4OlxcdH1cXG4gIDc5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2R1cF9pcHY2KTtcXG4gIDgwOlxcdFxcbiAgODE6XFx0TU9EVUxFX0FVVEhPUihcXFwiU2ViYXN0aWFuIENsYcOfZW4gXFx1MDAzY3NlYmFzdGlhbi5jbGFzc2VuQGZyZWVuZXQuYWdcXHUwMDNlXFxcIik7XFxuICA4MjpcXHRNT0RVTEVfQVVUSE9SKFxcXCJKYW4gRW5nZWxoYXJkdCBcXHUwMDNjamVuZ2VsaEBtZWRvemFzLmRlXFx1MDAzZVxcXCIpO1xcbiAgODM6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJuZl9kdXBfaXB2NjogSVB2NiBwYWNrZXQgZHVwbGljYXRpb25cXFwiKTtcXG4gIDg0OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6MTUuOTYxNDgwMTk4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE4MzkzODIwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIFBhY2tldCBEdXBsaWNhdGlvbiBBY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBoZXJlLiBUaGV5J3JlIGludm9rZWQgYnkgYG5mdF9kdXBfaXB2NF9ldmFsYCBhbmQgYG5mdF9kdXBfaXB2Nl9ldmFsYCwgd2hpY2ggYXJlIHBhcnQgb2YgbmZ0YWJsZXMnIGBuZnRfZHVwYCBtZWNoYW5pc20uIEknbSBhbHNvIHNlZWluZyB0aGVtIGNvbm5lY3RlZCB0byBgdGVlX3RnNGAgYW5kIGB0ZWVfdGc2YCwgd2hpY2ggYXJlIHdpdGhpbiB0aGUgaXB0YWJsZXMvaXA2dGFibGVzIGB4dF9URUVgIG1vZHVsZS4gU28sIGVzc2VudGlhbGx5LCB3ZSdyZSB0YWxraW5nIGFib3V0IG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gYWN0aW9ucyDigJMgdGhpbmdzIGxpa2UgYG5mdCBkdXAgdG8gLi4uYCBvciB0aGUgY2xhc3NpYyBgaXB0YWJsZXMgLWogVEVFYCBzeW50YXguXG5cbk5vdywgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgbmVlZCBzb21lIGNvbnRleHQuIFRpbWUgdG8gaGl0IHRoZSBnaXQgY29tbWl0IGxvZ3MuIExldCdzIHNlZSBpZiB0aGUgY29tbWl0IG1lc3NhZ2VzIHNoZWQgYW55IGxpZ2h0IG9uIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZXNlIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4gSSdsbCBzdGFydCBieSBjaGVja2luZyBmb3IgYW55IGhlbHBmdWwgYmFja2dyb3VuZCBvciBleHBsYW5hdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBhIHNwZWNpZmljIGNvbW1pdCBsaWtlIGA0NDY2M2MzNDg4NTgxYmFlZDQ2MDM1MDcwMmZiMmE1YTE3MzVmODhmYCwgb3IgYW55IHByZXZpb3VzIGNvbW1pdHMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gTWlnaHQgYmUgYmV0dGVyIHRvIGNoZWNrIGdpdCBsb2cgZm9yIHRoZSBhY3R1YWwgc291cmNlIGZpbGVzLCBsaWtlIGBuZl9kdXBfaXB2NC5jYCBhbmQgYG5mX2R1cF9pcHY2LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgbW9yZSBmb2N1c2VkIHZpZXcgb2YgdGhlIGNoYW5nZXMgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyODYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzoyMC4xNDU0MjEyMjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDMyMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GX0RVUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTQ3PWNvbmZpZyBORlRfRFVQX0lQVjRcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQ5LVxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDpcXHRzZWxlY3QgTkZfRFVQX0lQVjRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy01MS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz03MD1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTcxLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjcyOmNvbmZpZyBORl9EVVBfSVBWNFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTczLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTUxPW9iai0kKENPTkZJR19JUF9ORl9BUlBGSUxURVIpICs9IGFycHRhYmxlX2ZpbHRlci5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTUyLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfRFVQX0lQVjQpICs9IG5mX2R1cF9pcHY0Lm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTQtXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgTkZUX0RVUF9JUFY2XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00NS1cXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6NDY6XFx0c2VsZWN0IE5GX0RVUF9JUFY2XFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNDctXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NTk9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02MC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo2MTpjb25maWcgTkZfRFVQX0lQVjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02Mi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfTkZfUkVKRUNUX0lQVjYpICs9IG5mX3JlamVjdF9pcHY2Lm9cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMjMtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORl9EVVBfSVBWNikgKz0gbmZfZHVwX2lwdjYub1xcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0yNS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NjA9aWYgTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY2Mjpjb25maWcgTkZfRFVQX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02Njg9Y29uZmlnIE5GVF9EVVBfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2OS1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgcGFja2V0IGR1cGxpY2F0aW9uIHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY3MDpcXHRzZWxlY3QgTkZfRFVQX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NzEtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY3ND1jb25maWcgTkZUX0ZXRF9ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc1LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiBwYWNrZXQgZm9yd2FyZGluZyBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NzY6XFx0c2VsZWN0IE5GX0RVUF9ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc3LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMDU3PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX1RFRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNjEtXFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgIUlQNl9ORl9JUFRBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYyOlxcdHNlbGVjdCBORl9EVVBfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYzOlxcdHNlbGVjdCBORl9EVVBfSVBWNiBpZiBJUDZfTkZfSVBUQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA2NC1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTgxPW9iai0kKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKSArPSBuZl9jb25uY291bnQub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04My0jIGdlbmVyaWMgcGFja2V0IGR1cGxpY2F0aW9uIGZyb20gbmV0ZGV2IGZhbWlseVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODQ6b2JqLSQoQ09ORklHX05GX0RVUF9ORVRERVYpXFx0Kz0gbmZfZHVwX25ldGRldi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6MjAuMjEwNDU3NjYyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MjM5NjE3NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEdXBsaWNhdGlvbiBpbiBOZXRmaWx0ZXIqKlxuXG5SaWdodCwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBuZXR3b3JrIGR1cGxpY2F0aW9uIGZ1bmN0aW9uYWxpdGllcyB3aXRoaW4gTmV0ZmlsdGVyLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBgTkZfRFVQX05FVERFVmAgb3B0aW9uLCBhbmQgdGhlbiBJJ2xsIGZvbGxvdyB0aGF0IHVwIGJ5IGxvb2tpbmcgYXQgaG93IGBORl9EVVBfSVBWNGAgYW5kIGBORl9EVVBfSVBWNmAgY29tZSBpbnRvIHBsYXkuIEknbSBwcmV0dHkgc3VyZSBJIHJlbWVtYmVyIHRob3NlLCBidXQgYSBxdWljayByZXZpZXcgbmV2ZXIgaHVydHMuIE15IGltbWVkaWF0ZSBmb2N1cywgdGhvdWdoLCBuZWVkcyB0byBiZSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhlIGZpcnN0IG9wdGlvbi4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBsb3dlci1sZXZlbCBhc3BlY3RzLCBJJ20gaGVhZGluZyBzdHJhaWdodCB0byB0aGUgc291cmNlIGNvZGUuIExldCdzIHN0YXJ0IHdpdGggYG5ldC9uZXRmaWx0ZXIvbmZfZHVwX25ldGRldi5jYCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBjb3JlIG1lY2hhbmlzbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzoyMi45MzQ0MjUxNDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDYzNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluaXRfdXNlcl9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz01MDQ2PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcF92c19jb250cm9sX25ldF9pbml0X3N5c2N0bChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy01MDUxLVxcdHNpemVfdCBjdGxfdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUodnNfdmFycyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjUwNTI6XFx0Ym9vbCB1bnByaXYgPSBuZXQtXFx1MDAzZXVzZXJfbnMgIT0gXFx1MDAyNmluaXRfdXNlcl9ucztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNTA1My1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmM9NTQ5PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2xibGNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jLTU2NC1cXHRcXHQvKiBEb24ndCBleHBvcnQgc3lzY3RscyB0byB1bnByaXZpbGVnZWQgdXNlcnMgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jOjU2NTpcXHRcXHRpZiAobmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYy01NjYtXFx0XFx0XFx0dmFyc190YWJsZV9zaXplID0gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jPTczNT1zdGF0aWMgaW50IF9fbmV0X2luaXQgX19pcF92c19sYmxjcl9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jLTc1MC1cXHRcXHQvKiBEb24ndCBleHBvcnQgc3lzY3RscyB0byB1bnByaXZpbGVnZWQgdXNlcnMgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYzo3NTE6XFx0XFx0aWYgKG5ldC1cXHUwMDNldXNlcl9ucyAhPSBcXHUwMDI2aW5pdF91c2VyX25zKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jLTc1Mi1cXHRcXHRcXHR2YXJzX3RhYmxlX3NpemUgPSAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmM9MTY4PXN0YXRpYyB2b2lkIG5mX2xvZ19kdW1wX3NrX3VpZF9naWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfbG9nX2J1ZiAqbSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jLTE4Ny1cXHRcXHRuZl9sb2dfYnVmX2FkZChtLCBcXFwiVUlEPSV1IEdJRD0ldSBcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jOjE4ODpcXHRcXHRcXHQgICAgICAgZnJvbV9rdWlkX211bmdlZChcXHUwMDI2aW5pdF91c2VyX25zLCBjcmVkLVxcdTAwM2Vmc3VpZCksXFxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmM6MTg5OlxcdFxcdFxcdCAgICAgICBmcm9tX2tnaWRfbXVuZ2VkKFxcdTAwMjZpbml0X3VzZXJfbnMsIGNyZWQtXFx1MDAzZWZzZ2lkKSk7XFxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmMtMTkwLVxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NTY3PXN0YXRpYyBpbnQgbmZxbmxfcHV0X3NrX3VpZGdpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTU4Ni1cXHRcXHRpZiAobmxhX3B1dF9iZTMyKHNrYiwgTkZRQV9VSUQsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo1ODc6XFx0XFx0ICAgIGh0b25sKGZyb21fa3VpZF9tdW5nZWQoXFx1MDAyNmluaXRfdXNlcl9ucywgY3JlZC1cXHUwMDNlZnN1aWQpKSkpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy01ODgtXFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy01ODktXFx0XFx0aWYgKG5sYV9wdXRfYmUzMihza2IsIE5GUUFfR0lELFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NTkwOlxcdFxcdCAgICBodG9ubChmcm9tX2tnaWRfbXVuZ2VkKFxcdTAwMjZpbml0X3VzZXJfbnMsIGNyZWQtXFx1MDAzZWZzZ2lkKSkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNTkxLVxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNDI5PW5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpZmYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MzItXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNDMzOlxcdGlmIChlLVxcdTAwM2VzdGF0ZS5uZXQtXFx1MDAzZXVzZXJfbnMgIT0gXFx1MDAyNmluaXRfdXNlcl9ucylcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MzQtXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTczPXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTgwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTgxOlxcdGlmIChjdHgtXFx1MDAzZW5ldC1cXHUwMDNldXNlcl9ucyAhPSBcXHUwMDI2aW5pdF91c2VyX25zKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTgyLVxcdFxcdHJldHVybiAtRVBFUk07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jPTMzMj1zdGF0aWMgaW50IHJlY2VudF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMtNDA3LSNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbm5ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmM6NDA4OlxcdHVpZCA9IG1ha2Vfa3VpZChcXHUwMDI2aW5pdF91c2VyX25zLCBpcF9saXN0X3VpZCk7XFxubmV0L25ldGZpbHRlci94dF9yZWNlbnQuYzo0MDk6XFx0Z2lkID0gbWFrZV9rZ2lkKFxcdTAwMjZpbml0X3VzZXJfbnMsIGlwX2xpc3RfZ2lkKTtcXG5uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jLTQxMC1cXHRpZiAoIXVpZF92YWxpZCh1aWQpIHx8ICFnaWRfdmFsaWQoZ2lkKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzoyMi45ODI4OTQ3NDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY3Mzg2NTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IE5ldGZpbHRlciBQYWNrZXQgRHVwbGljYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWRkaW5nIGEgY3J1Y2lhbCBjaGVjazogYGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpIHJldHVybjtgIHRvIHRoZSBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgIGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGNvZGUgKmFjdHVhbGx5KiBiZSByZWFjaGVkLCB3aGljaCBpcyB0aGUga2V5IGRldGVybWluYW50IGhlcmU/XG5cbkdvb2QhIEkgc2VlIHRoYXQgdG9vbHMgbGlrZSBzeXprYWxsZXIsIHJ1bm5pbmcgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgY2FuIHRyaWdnZXIgdGhlIGV4ZWN1dGlvbiBwYXRocy4gVGhpcyBpcyBncmVhdCBuZXdzLiBUaGUgY29kZSBwYXRoICppcyogcmVhY2hhYmxlIOKAkyB3ZSBrbm93IG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gKGBuZnRfZHVwX2lwdjRgLCBgbmZ0X2R1cF9pcHY2YCwgYHh0X1RFRWApIGlzIGV4ZWN1dGVkIGluIGJvdGggdGhlIGluaXRpYWwgYW5kIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcywgd2hpY2ggbWVhbnMgdGhhdCBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgIGFyZSBpbmRlZWQgcGFydCBvZiB0aGUgY29yZSBuZXR3b3JraW5nL25ldGZpbHRlciBzdWJzeXN0ZW1zLlxuXG5TbywgdGhpcyBtb2RpZmljYXRpb24gKmFic29sdXRlbHkqIGNoYW5nZXMgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gYG5mX2R1cF9pcHY0KClgIGFuZCBgbmZfZHVwX2lwdjYoKWAhIEEgc2ltcGxlIGVhcmx5IHJldHVybiBpcyBhZGRlZCB0byBndWFyZCB0aGUgbG9naWMuXG5cbk5vdywgbGV0J3MgYXBwbHkgdGhlIGd1aWRlbGluZXM6IFRoaXMgaXMgYSBkaXJlY3QgbW9kaWZpY2F0aW9uIHRvIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIGluIGEgY29yZSBzdWJzeXN0ZW0uIFRoZSBndWlkZWxpbmVzIGFyZSBjcnlzdGFsIGNsZWFyOiBcIldvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuXCIgTW9yZW92ZXIsIHRoZSBndWlkZWxpbmVzIGhpZ2hsaWdodCB0aGF0IGV2ZW4gcmVmYWN0b3JpbmdzLCBjb2RlIGNsZWFudXBzLCBhbmQgZGVmZW5zaXZlIGNoZWNrcyBpbiByZWFjaGFibGUgY29kZSB3YXJyYW50IGZ1enppbmcsIGFuZCB0aGlzIGlzIGFsbCBvZiB0aGUgYWJvdmUuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbmRpdGlvbmFsIGNoZWNrIGluIGNyaXRpY2FsIG5ldHdvcmtpbmcgY29kZS5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggZGlyZWN0bHkgdG91Y2hlcyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSwgSSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGUgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGB0cnVlYC4gVGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24gYW5kIGZ1enppbmcuIE5vdywgbGV0J3MgaW52ZXN0aWdhdGUgdGhlIGtlcm5lbCBjb25maWdzIG5lZWRlZCB0byBjb21waWxlIGFuZCByZWFjaCB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTA5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjI3LjY1Njc2Mjg3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY3NTU4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZfRFVQX0lQVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTQ3PWNvbmZpZyBORlRfRFVQX0lQVjRcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQ5LVxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDpcXHRzZWxlY3QgTkZfRFVQX0lQVjRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy01MS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz03MD1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTcxLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjcyOmNvbmZpZyBORl9EVVBfSVBWNFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTczLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTUxPW9iai0kKENPTkZJR19JUF9ORl9BUlBGSUxURVIpICs9IGFycHRhYmxlX2ZpbHRlci5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTUyLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfRFVQX0lQVjQpICs9IG5mX2R1cF9pcHY0Lm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTQtXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgTkZUX0RVUF9JUFY2XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00NS1cXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6NDY6XFx0c2VsZWN0IE5GX0RVUF9JUFY2XFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNDctXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NTk9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02MC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo2MTpjb25maWcgTkZfRFVQX0lQVjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02Mi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfTkZfUkVKRUNUX0lQVjYpICs9IG5mX3JlamVjdF9pcHY2Lm9cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMjMtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORl9EVVBfSVBWNikgKz0gbmZfZHVwX2lwdjYub1xcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0yNS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMDU3PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX1RFRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNjEtXFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgIUlQNl9ORl9JUFRBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYyOlxcdHNlbGVjdCBORl9EVVBfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYzOlxcdHNlbGVjdCBORl9EVVBfSVBWNiBpZiBJUDZfTkZfSVBUQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA2NC1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjI3LjcyMzUyMjY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNjk0ODk0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBLZXJuZWwncyBGaXJld2FsbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZpcmV3YWxsIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIHN5c3RlbS4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBkaXZlIGRpcmVjdGx5IGludG8gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZXMuIFRoZXNlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBwcm9jZXNzLCBhbmQgSSdtIGJldHRpbmcgdGhleSdsbCBjbGVhcmx5IHNob3cgbWUgdGhlIGVuY29tcGFzc2luZyBtZW51IHN0cnVjdHVyZSBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgbmV0ZmlsdGVyIG9wdGlvbnMgSSdtIGludGVyZXN0ZWQgaW4uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgb3ZlcmFsbCBvcmdhbml6YXRpb24gbGFpZCBvdXQgaGVyZSwgd2hpY2ggd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGZvdW5kYXRpb24gSSBuZWVkIHRvIHByb3Blcmx5IG5hdmlnYXRlIGFuZCB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBvcHRpb25zLiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHNvIHRvIHNwZWFrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIxNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjI5Ljk5MzAxNDE1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJUCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51IFxcXCJJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBORl9ERUZSQUdfSVBWNFxcbiAgMTA6XFx0XFx0dHJpc3RhdGVcXG4gIDExOlxcdFxcdGRlZmF1bHQgblxcbiAgMTI6XFx0XFxuICAxMzpcXHQjIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXFxuICAxNDpcXHRjb25maWcgSVBfTkZfSVBUQUJMRVNfTEVHQUNZXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiTGVnYWN5IElQIHRhYmxlcyBzdXBwb3J0XFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcXG4gIDE4OlxcdFxcdGRlZmF1bHRcXHRtIGlmIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbiAgMTk6XFx0XFx0aGVscFxcbiAgMjA6XFx0XFx0ICBpcHRhYmxlcyBpcyBhIGxlZ2FjeSBwYWNrZXQgY2xhc3NpZmllci5cXG4gIDIxOlxcdFxcdCAgVGhpcyBpcyBub3QgbmVlZGVkIGlmIHlvdSBhcmUgdXNpbmcgaXB0YWJsZXMgb3ZlciBuZnRhYmxlc1xcbiAgMjI6XFx0XFx0ICAoaXB0YWJsZXMtbmZ0KS5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIE5GX1NPQ0tFVF9JUFY0XFxuICAyNTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVB2NCBzb2NrZXQgbG9va3VwIHN1cHBvcnRcXFwiXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIElQdjQgc29ja2V0IGxvb2t1cCBpbmZyYXN0cnVjdHVyZS4gVGhpcyBpc1xcbiAgMjg6XFx0XFx0ICBpcyByZXF1aXJlZCBieSB0aGUge2lwLG5mfXRhYmxlcyBzb2NrZXQgbWF0Y2guXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBORl9UUFJPWFlfSVBWNFxcbiAgMzE6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjQgdHByb3h5IHN1cHBvcnRcXFwiXFxuICAzMjpcXHRcXG4gIDMzOlxcdGlmIE5GX1RBQkxFU1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgTkZfVEFCTEVTX0lQVjRcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIklQdjQgbmZfdGFibGVzIHN1cHBvcnRcXFwiXFxuICAzNzpcXHRcXHRoZWxwXFxuICAzODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIElQdjQgc3VwcG9ydCBmb3IgbmZfdGFibGVzLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRpZiBORl9UQUJMRVNfSVBWNFxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgTkZUX1JFSkVDVF9JUFY0XFxuICA0MzpcXHRcXHRzZWxlY3QgTkZfUkVKRUNUX0lQVjRcXG4gIDQ0OlxcdFxcdGRlZmF1bHQgTkZUX1JFSkVDVFxcbiAgNDU6XFx0XFx0dHJpc3RhdGVcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIE5GVF9EVVBfSVBWNFxcbiAgNDg6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjQgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS1xcbiAgNTA6XFx0XFx0c2VsZWN0IE5GX0RVUF9JUFY0XFxuICA1MTpcXHRcXHRoZWxwXFxuICA1MjpcXHRcXHQgIFRoaXMgbW9kdWxlIGVuYWJsZXMgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydCBmb3IgbmZfdGFibGVzLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRjb25maWcgTkZUX0ZJQl9JUFY0XFxuICA1NTpcXHRcXHRzZWxlY3QgTkZUX0ZJQlxcbiAgNTY6XFx0XFx0dHJpc3RhdGUgXFxcIm5mX3RhYmxlcyBmaWIgLyBpcCByb3V0ZSBsb29rdXAgc3VwcG9ydFxcXCJcXG4gIDU3OlxcdFxcdGhlbHBcXG4gIDU4OlxcdFxcdCAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY0IEZJQiBsb29rdXBzLCBlLmcuIGZvciByZXZlcnNlIHBhdGggZmlsdGVyaW5nLlxcbiAgNTk6XFx0XFx0ICBJdCBhbHNvIGFsbG93cyBxdWVyeSBvZiB0aGUgRklCIGZvciB0aGUgcm91dGUgdHlwZSwgZS5nLiBsb2NhbCwgdW5pY2FzdCxcXG4gIDYwOlxcdFxcdCAgbXVsdGljYXN0IG9yIGJsYWNraG9sZS5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0ZW5kaWYgIyBORl9UQUJMRVNfSVBWNFxcbiAgNjM6XFx0XFxuICA2NDpcXHRjb25maWcgTkZfVEFCTEVTX0FSUFxcbiAgNjU6XFx0XFx0Ym9vbCBcXFwiQVJQIG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbiAgNjY6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQVJQXFxuICA2NzpcXHRcXHRoZWxwXFxuICA2ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIEFSUCBzdXBwb3J0IGZvciBuZl90YWJsZXMuXFxuICA2OTpcXHRcXG4gIDcwOlxcdGVuZGlmICMgTkZfVEFCTEVTXFxuICA3MTpcXHRcXG4gIDcyOlxcdGNvbmZpZyBORl9EVVBfSVBWNFxcbiAgNzM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBJUHY0IHBhY2tldCBkdXBsaWNhdGlvbiB0byBhbHRlcm5hdGUgZGVzdGluYXRpb25cXFwiXFxuICA3NDpcXHRcXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXFxuICA3NTpcXHRcXHRoZWxwXFxuICA3NjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG5mX2R1cF9pcHY0IGNvcmUsIHdoaWNoIGR1cGxpY2F0ZXMgYW4gSVB2NFxcbiAgNzc6XFx0XFx0ICBwYWNrZXQgdG8gYmUgcmVyb3V0ZWQgdG8gYW5vdGhlciBkZXN0aW5hdGlvbi5cXG4gIDc4OlxcdFxcbiAgNzk6XFx0Y29uZmlnIE5GX0xPR19BUlBcXG4gIDgwOlxcdFxcdHRyaXN0YXRlIFxcXCJBUlAgcGFja2V0IGxvZ2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjI5Ljk5MzA4ODY2NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTMzNDc3MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIElQdjYgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBuZXR3b3JrIGZpbHRlcmluZywgYW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIElQdjYgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24uIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AgaXMgYSBrZXkgZmlsZS4gSXQncyB0aGUgY2VudHJhbCBwb2ludCB3aGVyZSB0aGUgSVB2NiBOZXRmaWx0ZXIgb3B0aW9ucyBhcmUgZGVmaW5lZCBhbmQgZXhwb3NlZCB0byB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzICpjb25maWd1cmFibGUqIGF0IGNvbXBpbGUgdGltZS4gVGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgdGhlIG1hY3JvcyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZ292ZXJuIHdoaWNoIElQdjYgTmV0ZmlsdGVyIGZlYXR1cmVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgaW1hZ2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIG1vZHVsZXMsIHdob2xlIHN1YnN5c3RlbXMsIG9yIGp1c3QgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3M/IFRoZSBzcGVjaWZpY3Mgd2lsbCBkaWN0YXRlIGhvdyBOZXRmaWx0ZXIgaW50ZXJhY3RzIHdpdGggSVB2NiB0cmFmZmljLiBJIGtub3cgdGhpcyBmaWxlIGlzIGdvaW5nIHRvIGJlIG15IHN0YXJ0aW5nIHBvaW50IGluIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjMyLjUyNjU2ODI3MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJUCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51IFxcXCJJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblxcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJUFY2IFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbiAgIDg6XFx0XFxuICAgOTpcXHQjIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXFxuICAxMDpcXHRjb25maWcgSVA2X05GX0lQVEFCTEVTX0xFR0FDWVxcbiAgMTE6XFx0XFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBJUDYgdGFibGVzIHN1cHBvcnRcXFwiXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSVBWNiBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcXG4gIDE0OlxcdFxcdGRlZmF1bHRcXHRtIGlmIE5FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBpcDZ0YWJsZXMgaXMgYSBsZWdhY3kgcGFja2V0IGNsYXNzaWZpZXIuXFxuICAxNzpcXHRcXHQgIFRoaXMgaXMgbm90IG5lZWRlZCBpZiB5b3UgYXJlIHVzaW5nIGlwdGFibGVzIG92ZXIgbmZ0YWJsZXNcXG4gIDE4OlxcdFxcdCAgKGlwdGFibGVzLW5mdCkuXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBORl9TT0NLRVRfSVBWNlxcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjYgc29ja2V0IGxvb2t1cCBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0aGVscFxcbiAgMjM6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBJUHY2IHNvY2tldCBsb29rdXAgaW5mcmFzdHJ1Y3R1cmUuIFRoaXNcXG4gIDI0OlxcdFxcdCAgaXMgdXNlZCBieSB0aGUge2lwNixuZn10YWJsZXMgc29ja2V0IG1hdGNoLlxcbiAgMjU6XFx0XFxuICAyNjpcXHRjb25maWcgTkZfVFBST1hZX0lQVjZcXG4gIDI3OlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY2IHRwcm94eSBzdXBwb3J0XFxcIlxcbiAgMjg6XFx0XFxuICAyOTpcXHRpZiBORl9UQUJMRVNcXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIE5GX1RBQkxFU19JUFY2XFxuICAzMjpcXHRcXHRib29sIFxcXCJJUHY2IG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbiAgMzM6XFx0XFx0aGVscFxcbiAgMzQ6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBJUHY2IHN1cHBvcnQgZm9yIG5mX3RhYmxlcy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0aWYgTkZfVEFCTEVTX0lQVjZcXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIE5GVF9SRUpFQ1RfSVBWNlxcbiAgMzk6XFx0XFx0c2VsZWN0IE5GX1JFSkVDVF9JUFY2XFxuICA0MDpcXHRcXHRkZWZhdWx0IE5GVF9SRUpFQ1RcXG4gIDQxOlxcdFxcdHRyaXN0YXRlXFxuICA0MjpcXHRcXG4gIDQzOlxcdGNvbmZpZyBORlRfRFVQX0lQVjZcXG4gIDQ0OlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY2IG5mX3RhYmxlcyBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydFxcXCJcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcXG4gIDQ2OlxcdFxcdHNlbGVjdCBORl9EVVBfSVBWNlxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBUaGlzIG1vZHVsZSBlbmFibGVzIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHN1cHBvcnQgZm9yIG5mX3RhYmxlcy5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0Y29uZmlnIE5GVF9GSUJfSVBWNlxcbiAgNTE6XFx0XFx0dHJpc3RhdGUgXFxcIm5mX3RhYmxlcyBmaWIgLyBpcHY2IHJvdXRlIGxvb2t1cCBzdXBwb3J0XFxcIlxcbiAgNTI6XFx0XFx0c2VsZWN0IE5GVF9GSUJcXG4gIDUzOlxcdFxcdGhlbHBcXG4gIDU0OlxcdFxcdCAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY2IEZJQiBsb29rdXBzLCBlLmcuIGZvciByZXZlcnNlIHBhdGggZmlsdGVyaW5nLlxcbiAgNTU6XFx0XFx0ICBJdCBhbHNvIGFsbG93cyBxdWVyeSBvZiB0aGUgRklCIGZvciB0aGUgcm91dGUgdHlwZSwgZS5nLiBsb2NhbCwgdW5pY2FzdCxcXG4gIDU2OlxcdFxcdCAgbXVsdGljYXN0IG9yIGJsYWNraG9sZS5cXG4gIDU3OlxcdFxcbiAgNTg6XFx0ZW5kaWYgIyBORl9UQUJMRVNfSVBWNlxcbiAgNTk6XFx0ZW5kaWYgIyBORl9UQUJMRVNcXG4gIDYwOlxcdFxcbiAgNjE6XFx0Y29uZmlnIE5GX0RVUF9JUFY2XFxuICA2MjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblxcXCJcXG4gIDYzOlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcXG4gIDY0OlxcdFxcdGhlbHBcXG4gIDY1OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbmZfZHVwX2lwdjYgY29yZSwgd2hpY2ggZHVwbGljYXRlcyBhbiBJUHY2XFxuICA2NjpcXHRcXHQgIHBhY2tldCB0byBiZSByZXJvdXRlZCB0byBhbm90aGVyIGRlc3RpbmF0aW9uLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgTkZfUkVKRUNUX0lQVjZcXG4gIDY5OlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY2IHBhY2tldCByZWplY3Rpb25cXFwiXFxuICA3MDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDcxOlxcdFxcbiAgNzI6XFx0Y29uZmlnIE5GX0xPR19JUFY2XFxuICA3MzpcXHRcXHR0cmlzdGF0ZSBcXFwiSVB2NiBwYWNrZXQgbG9nZ2luZ1xcXCJcXG4gIDc0OlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAgNzU6XFx0XFx0c2VsZWN0IE5GX0xPR19TWVNMT0dcXG4gIDc2OlxcdFxcdGhlbHBcXG4gIDc3OlxcdFxcdCAgVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlXFxuICA3ODpcXHRcXHQgIChlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzIENPTkZJR19ORl9MT0dfU1lTTE9HLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRjb25maWcgSVA2X05GX0lQVEFCTEVTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjMyLjUyNjY0Mzg2MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTEwMTU0NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIGZvciBOZXRmaWx0ZXIgUGFja2V0IER1cGxpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciB0aGUgZnV6emluZyBzZXR1cC4gV2UncmUgbG9va2luZyBhdCBlbmFibGluZyBwYWNrZXQgZHVwbGljYXRpb24gZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGtlcm5lbCdzIG5ldGZpbHRlciBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBmb3IgSVB2NCBhbmQgSVB2Ni5cblxuVGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlc2UgZmVhdHVyZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogYE5GX0RVUF9JUFY0YCByZWxpZXMgb24gYElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUmAgYW5kIGVpdGhlciBgIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tgLiAgU2ltaWxhcmx5LCBgTkZfRFVQX0lQVjZgIG5lZWRzIGBJTkVUIFx1MDAyNlx1MDAyNiBJUFY2IFx1MDAyNlx1MDAyNiBORVRGSUxURVJgIHdpdGggdGhlIHNhbWUgY29ubnRyYWNrIGRlcGVuZGVuY3kuIFRoaXMgY2hlY2tzIG91dDsgd2Ugd2FudCB0aGUgY29yZSBpbmZyYXN0cnVjdHVyZSBlbmFibGVkIGJlZm9yZSBidWlsZGluZyBvbiBpdC4gVG8gZXhwb3NlIHRoZSBmdW5jdGlvbmFsaXR5IHRocm91Z2ggbmZ0YWJsZXMgYW5kIGlwdGFibGVzLCB3ZSdsbCBuZWVkIHRvIGVuYWJsZSB0aGUgcmVsYXRlZCB0YXJnZXRzOiBgTkZUX0RVUF9JUFY0YCwgYE5GVF9EVVBfSVBWNmAsIGFuZCwgaW4gdGhlIGNhc2Ugb2YgaXB0YWJsZXMgd2l0aCBgVEVFYCwgYE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFYC5cblxuQmFzZWQgb24gdGhlIGNvZGUgZGlmZnMsIHRoZSBzcGVjaWZpYyBzeW1ib2xzIG1vZGlmaWVkIGFyZSBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgLCBsb2NhdGVkIGluIHRoZSBgbmV0L2lwdjQvbmV0ZmlsdGVyYCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlcmAgZGlyZWN0b3JpZXMgcmVzcGVjdGl2ZWx5LiAgVGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGFjdHVhbCBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMuIEltcG9ydGFudGx5LCBhIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIGJvdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgcGFja2V0IGR1cGxpY2F0aW9uIGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcywgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgYW5kIHZlcmlmeSBpZiB0aGUgZnV6emluZyB0YXJnZXQgY2FuIGJlIHNldCB1cCBpbiB0aGUgaW5pdGlhbCBuYW1lc3BhY2UuXG5cblRoZXNlIGZ1bmN0aW9ucyBhcmVuJ3QgdW5pdmVyc2FsbHkgY2FsbGVkOyB0aGV5J3JlIHNwZWNpZmljIG5ldGZpbHRlciBoZWxwZXJzIHRyaWdnZXJlZCB3aGVuIHJ1bGVzIHdpdGggYGR1cGAgKG5mdGFibGVzKSBvciBgVEVFYCAoeHRhYmxlcykgbWF0Y2ggYSBwYWNrZXQuIFNvLCB0aGV5J3JlIG5vdCBhIGNvcmUgcGFydCBvZiB0aGUgYmFzZSBuZXR3b3JrIHN0YWNrIGJ1dCByYXRoZXIgYW4gZXh0ZW5zaW9uIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMuXG5cblRoZSBjb25maWcgb3B0aW9ucyB0byBlbmFibGUgdGhpcyBhcmU6IGBORl9EVVBfSVBWNGAsIGBORl9EVVBfSVBWNmAsIGBORlRfRFVQX0lQVjRgLCBgTkZUX0RVUF9JUFY2YCwgYW5kIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAuICBXZSdsbCBlbmFibGUgYWxsIG9mIHRoZXNlLlxuXG5Db25zaWRlcmluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCB0aGUgZnV6emluZyB0YXJnZXQgYmVpbmcgYFdvcnRoRnV6emluZ2AsIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCBhbGwgbG9va3MgZ29vZC4gTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzcwLCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjM5LjAzNjgwMjA1MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NTg3NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9EVVBfSVBWNFwiLFxuICAgIFwiTkZfRFVQX0lQVjZcIixcbiAgICBcIk5GVF9EVVBfSVBWNFwiLFxuICAgIFwiTkZUX0RVUF9JUFY2XCIsXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX1RFRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2R1cF9pcHY0XCIsXG4gICAgXCJuZl9kdXBfaXB2NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24gbG9naWMgaW4gbmZfZHVwX2lwdjQgYW5kIG5mX2R1cF9pcHY2IHRvIHJlc3RyaWN0IGV4ZWN1dGlvbiB0byB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAobmV0LVxcdTAwM2V1c2VyX25zID09IFxcdTAwMjZpbml0X3VzZXJfbnMpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBjb250cm9sIGZsb3cgZm9yIG5mdGFibGVzIChuZnRfZHVwKSBhbmQgeHRhYmxlcyAoeHRfVEVFKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gbmV0d29yayBuYW1lc3BhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0RVUF9JUFY0XCIsXG4gICAgXCJORl9EVVBfSVBWNlwiLFxuICAgIFwiTkZUX0RVUF9JUFY0XCIsXG4gICAgXCJORlRfRFVQX0lQVjZcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZHVwX2lwdjRcIixcbiAgICBcIm5mX2R1cF9pcHY2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0ZmlsdGVyIHBhY2tldCBkdXBsaWNhdGlvbiBsb2dpYyBpbiBuZl9kdXBfaXB2NCBhbmQgbmZfZHVwX2lwdjYgdG8gcmVzdHJpY3QgZXhlY3V0aW9uIHRvIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlIChuZXQtXFx1MDAzZXVzZXJfbnMgPT0gXFx1MDAyNmluaXRfdXNlcl9ucykuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGNvbnRyb2wgZmxvdyBmb3IgbmZ0YWJsZXMgKG5mdF9kdXApIGFuZCB4dGFibGVzICh4dF9URUUpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiBuZXR3b3JrIG5hbWVzcGFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjM5LjExMjM5NjY0OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NTYzMzczOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzozOS4xMTI4ODk4OTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNDc1NTgzOTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24vbmFtZXNwYWNlIGNoZWNrIChgbmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnNgKSB0byBgbmZfZHVwX2lwdjQoKWAgYW5kIGBuZl9kdXBfaXB2NigpYCB0byByZXR1cm4gZWFybHkgd2hlbiBjYWxsZWQgZnJvbSBhIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlLlxcblxcblRoaXMgY2hhbmdlOlxcbjEuIERvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IHN0YWNrL2hlYXAgYnVmZmVycyBvciBkYXRhIHN0cnVjdHVyZXMuXFxuMi4gRG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuXFxuMy4gRG9lcyBub3QgbW9kaWZ5IGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBjb250cm9sIGZsb3cgaW4gYW55IHdheSB0aGF0IHdvdWxkIHBlcm1pdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0NjYzYzM0ODg1ODFiYWVkNDYwMzUwNzAyZmIyYTVhMTczNWY4OGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDE3OjIzOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuaW5kZXggOWE3NzM1MDJmMTBhYy4uYzMzZGFlMjQ4YzQ3NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuQEAgLTUzLDYgKzUzLDkgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIHtcbiBcdHN0cnVjdCBpcGhkciAqaXBoO1xuIFxuK1x0aWYgKG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucylcbitcdFx0cmV0dXJuO1xuK1xuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlKVxuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXG5pbmRleCA2ZGEzMTAyYjdjMWIzLi5hNWY2ZjA3NGE3ZTkxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXG5AQCAtNDcsNiArNDcsOSBAQCBzdGF0aWMgYm9vbCBuZl9kdXBfaXB2Nl9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIFx0XHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZilcbiB7XG4rXHRpZiAobmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXG4gXHRcdGdvdG8gb3V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6MzkuMTEyODkwNzM3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwMjQ2MTI3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBgbmZfZHVwX2lwdjQuY2AgYW5kIGBuZl9kdXBfaXB2Ni5jYCBpbiB0aGUgbmV0ZmlsdGVyIGNvZGUuIEdvdCBpdC5cIiBUaGUgaW5kZXggY2hhbmdlcyBsb29rIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIHRoZSBkaWZmIGl0c2VsZiBpcyBtaW5pbWFsOiB3ZSdyZSBhZGRpbmcgYSBjaGVjayBmb3IgYG5ldC1cdTAwM2V1c2VyX25zYC5cblxuTXkgZXhwZXJ0IGludHVpdGlvbiBzdWdnZXN0cyB0aGlzIGlzIGxpa2VseSBhIHNlY3VyaXR5IGhhcmRlbmluZyBjaGFuZ2UuIFRoZSBhZGRlZCBjb25kaXRpb24gYGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpIHJldHVybjtgIGltbWVkaWF0ZWx5IGZsYWdzIHRvIG1lIHRoYXQgd2UgYXJlIHRhbGtpbmcgYWJvdXQgYSBuYW1lc3BhY2VkIG5ldHdvcmsgY29udGV4dC4gVGhpcyBpcyBsaWtlbHkgdG8gcHJldmVudCBjZXJ0YWluIG9wZXJhdGlvbnMgd2hlbiB0aGUgbmV0d29yayBuYW1lc3BhY2UgaXNuJ3QgdGhlIGluaXRpYWwgb25lLiBJIHdvdWxkIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNvbnRleHRzIGFuZCBwb3NzaWJsZSBleHBsb2l0cyBoZXJlLCBidXQsIGluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHNhbml0eSBjaGVjaywgZ3VhcmRpbmcgYWdhaW5zdCBwb3RlbnRpYWxseSB1bmludGVuZGVkIGJlaGF2aW9yIGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcy4gVGhlIGZ1bmN0aW9uIGFwcGVhcnMgdG8gZHVwbGljYXRlIHBhY2tldHMsIHNvIHBvdGVudGlhbGx5IHRoZXJlIGlzIGFuIGVzY2FwZSBvciBsZWFrYWdlIHNjZW5hcmlvIHRoYXQgdGhpcyBhZGRyZXNzZXMuXG5cblRvIGRldGVybWluZSBpZiBLTVNBTiBmdXp6aW5nIGlzICpuZWNlc3NhcnkqLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mICpza2lwcGluZyogdGhlIGR1cGxpY2F0aW9uLiBEb2VzIGl0IGludHJvZHVjZSBhIHVzZS1hZnRlci1mcmVlLCBhbiB1bmluaXRpYWxpemVkIHJlYWQsIG9yIG1heWJlIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIGVkZ2UgY2FzZXM/IEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBidXQgdGhlIHBhdGNoIGl0c2VsZiBzZWVtcyBsaWtlIGEgbWl0aWdhdGlvbiBmb3IgYSBrbm93biwgb3Igc3VzcGVjdGVkLCBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjQ1LjEzNzUwNjQ0OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIChDKSAyMDA3IGJ5IFNlYmFzdGlhbiBDbGHDn2VuIFxcdTAwM2NzZWJhc3RpYW4uY2xhc3NlbkBmcmVlbmV0LmFnXFx1MDAzZVxcbiAgIDQ6XFx0ICogKEMpIDIwMDctMjAxMCBieSBKYW4gRW5nZWxoYXJkdCBcXHUwMDNjamVuZ2VsaEBtZWRvemFzLmRlXFx1MDAzZVxcbiAgIDU6XFx0ICpcXG4gICA2OlxcdCAqIEV4dHJhY3RlZCBmcm9tIHh0X1RFRS5jXFxuICAgNzpcXHQgKi9cXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcC5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmNwdS5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JvdXRlLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2NoZWNrc3VtLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2Zsb3cuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvaWNtcC5oXFx1MDAzZVxcbiAgMTc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pcC5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9yb3V0ZS5oXFx1MDAzZVxcbiAgMTk6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oXFx1MDAzZVxcbiAgMjA6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcXG4gIDIxOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oXFx1MDAzZVxcbiAgMjI6XFx0I2VuZGlmXFxuICAyMzpcXHRcXG4gIDI0OlxcdHN0YXRpYyBib29sIG5mX2R1cF9pcHY0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gIDI1OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpndywgaW50IG9pZilcXG4gIDI2OlxcdHtcXG4gIDI3OlxcdFxcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7XFxuICAyODpcXHRcXHRzdHJ1Y3QgcnRhYmxlICpydDtcXG4gIDI5OlxcdFxcdHN0cnVjdCBmbG93aTQgZmw0O1xcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHRtZW1zZXQoXFx1MDAyNmZsNCwgMCwgc2l6ZW9mKGZsNCkpO1xcbiAgMzI6XFx0XFx0aWYgKG9pZiAhPSAtMSlcXG4gIDMzOlxcdFxcdFxcdGZsNC5mbG93aTRfb2lmID0gb2lmO1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRcXHRmbDQuZGFkZHIgPSBndy1cXHUwMDNlc19hZGRyO1xcbiAgMzY6XFx0XFx0Zmw0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwaCk7XFxuICAzNzpcXHRcXHRmbDQuZmxvd2k0X3Njb3BlID0gUlRfU0NPUEVfVU5JVkVSU0U7XFxuICAzODpcXHRcXHRmbDQuZmxvd2k0X2ZsYWdzID0gRkxPV0lfRkxBR19LTk9XTl9OSDtcXG4gIDM5OlxcdFxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFxcdTAwMjZmbDQpO1xcbiAgNDA6XFx0XFx0aWYgKElTX0VSUihydCkpXFxuICA0MTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdHNrYl9kc3RfZHJvcChza2IpO1xcbiAgNDQ6XFx0XFx0c2tiX2RzdF9zZXQoc2tiLCBcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxuICA0NTpcXHRcXHRza2ItXFx1MDAzZWRldiAgICAgID0gcnQtXFx1MDAzZWRzdC5kZXY7XFxuICA0NjpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDQ5OlxcdH1cXG4gIDUwOlxcdFxcbiAgNTE6XFx0dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbiAgNTI6XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpbl9hZGRyICpndywgaW50IG9pZilcXG4gIDUzOlxcdHtcXG4gIDU0OlxcdFxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiAgNTU6XFx0XFxuICA1NjpcXHRcXHRpZiAobmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpXFxuICA1NzpcXHRcXHRcXHRyZXR1cm47XFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDYwOlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXFxuICA2MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDYyOlxcdFxcdC8qXFxuICA2MzpcXHRcXHQgKiBDb3B5IHRoZSBza2IsIGFuZCByb3V0ZSB0aGUgY29weS4gV2lsbCBsYXRlciByZXR1cm4gJVhUX0NPTlRJTlVFIGZvclxcbiAgNjQ6XFx0XFx0ICogdGhlIG9yaWdpbmFsIHNrYiwgd2hpY2ggc2hvdWxkIGNvbnRpbnVlIG9uIGl0cyB3YXkgYXMgaWYgbm90aGluZyBoYXNcXG4gIDY1OlxcdFxcdCAqIGhhcHBlbmVkLiBUaGUgY29weSBzaG91bGQgYmUgaW5kZXBlbmRlbnRseSBkZWxpdmVyZWQgdG8gdGhlIGdhdGV3YXkuXFxuICA2NjpcXHRcXHQgKi9cXG4gIDY3OlxcdFxcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xcbiAgNjg6XFx0XFx0aWYgKHNrYiA9PSBOVUxMKVxcbiAgNjk6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA3MDpcXHRcXG4gIDcxOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuICA3MjpcXHRcXHQvKiBBdm9pZCBjb3VudGluZyBjbG9uZWQgcGFja2V0cyB0b3dhcmRzIHRoZSBvcmlnaW5hbCBjb25uZWN0aW9uLiAqL1xcbiAgNzM6XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gIDc0OlxcdFxcdG5mX2N0X3NldChza2IsIE5VTEwsIElQX0NUX1VOVFJBQ0tFRCk7XFxuICA3NTpcXHQjZW5kaWZcXG4gIDc2OlxcdFxcdC8qXFxuICA3NzpcXHRcXHQgKiBJZiB3ZSBhcmUgaW4gUFJFUk9VVElORy9JTlBVVCwgZGVjcmVhc2UgdGhlIFRUTCB0byBtaXRpZ2F0ZSBwb3RlbnRpYWxcXG4gIDc4OlxcdFxcdCAqIGxvb3BzIGJldHdlZW4gdHdvIGhvc3RzLlxcbiAgNzk6XFx0XFx0ICpcXG4gIDgwOlxcdFxcdCAqIFNldCAlSVBfREYgc28gdGhhdCB0aGUgb3JpZ2luYWwgc291cmNlIGlzIG5vdGlmaWVkIG9mIGEgcG90ZW50aWFsbHlcXG4gIDgxOlxcdFxcdCAqIGRlY3JlYXNlZCBNVFUgb24gdGhlIGNsb25lIHJvdXRlLiBJUHY2IGRvZXMgdGhpcyB0b28uXFxuICA4MjpcXHRcXHQgKlxcbiAgODM6XFx0XFx0ICogSVAgaGVhZGVyIGNoZWNrc3VtIHdpbGwgYmUgcmVjYWxjdWxhdGVkIGF0IGlwX2xvY2FsX291dC5cXG4gIDg0OlxcdFxcdCAqL1xcbiAgODU6XFx0XFx0aXBoID0gaXBfaGRyKHNrYik7XFxuICA4NjpcXHRcXHRpcGgtXFx1MDAzZWZyYWdfb2ZmIHw9IGh0b25zKElQX0RGKTtcXG4gIDg3OlxcdFxcdGlmIChob29rbnVtID09IE5GX0lORVRfUFJFX1JPVVRJTkcgfHxcXG4gIDg4OlxcdFxcdCAgICBob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pXFxuICA4OTpcXHRcXHRcXHQtLWlwaC1cXHUwMDNldHRsO1xcbiAgOTA6XFx0XFxuICA5MTpcXHRcXHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XFxuICA5MjpcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xcbiAgOTM6XFx0XFx0XFx0aXBfbG9jYWxfb3V0KG5ldCwgc2tiLVxcdTAwM2Vzaywgc2tiKTtcXG4gIDk0OlxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xcbiAgOTU6XFx0XFx0fSBlbHNlIHtcXG4gIDk2OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgOTc6XFx0XFx0fVxcbiAgOTg6XFx0b3V0OlxcbiAgOTk6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIDEwMDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE3OjIzOjQ1LjEzNzU4OTkzOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzEzMjY5NjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDb25zaWRlcmluZyB0aGUgSVB2NiBEdXBsaWNhdGlvbiBDYXNlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIE15IHByaW1hcnkgZm9jdXMgaXMgbGlrZWx5IG9uIGBuZl9kdXAuY2AsIGJ1dCBsZXQncyBub3QgYmUgaGFzdHkuIFRvIGVuc3VyZSBJJ20gY292ZXJpbmcgYWxsIGJhc2VzIGluIHRoaXMgSVB2NiBzY2VuYXJpbywgSSBzaG91bGQgYWxzbyB0aG9yb3VnaGx5IGV4YW1pbmUgYG5mX2R1cF9pcHY2LmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZHVwbGljYXRpb24gcHJvY2VzcyBzcGVjaWZpY2FsbHkgaGFuZGxlcyBJUHY2IHBhY2tldHMuIEknbSB0aGlua2luZyB0aGlzIHdpbGwgaGVscCBhdm9pZCBhbnkgcG90ZW50aWFsIG92ZXJzaWdodHMgb3IgYXNzdW1wdGlvbnMgYmFzZWQgc29sZWx5IG9uIElQdjQgYmVoYXZpb3IuIEl0J3MgZ29vZCB0byBiZSB0aG9yb3VnaCBhbmQgY29uc2lkZXIgYWxsIHRoZSByZWxldmFudCBzb3VyY2UgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDczOSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6NDguNDUwODYyNDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiAoQykgMjAwNyBieSBTZWJhc3RpYW4gQ2xhw59lbiBcXHUwMDNjc2ViYXN0aWFuLmNsYXNzZW5AZnJlZW5ldC5hZ1xcdTAwM2VcXG4gICA0OlxcdCAqIChDKSAyMDA3LTIwMTAgYnkgSmFuIEVuZ2VsaGFyZHQgXFx1MDAzY2plbmdlbGhAbWVkb3phcy5kZVxcdTAwM2VcXG4gICA1OlxcdCAqXFxuICAgNjpcXHQgKiBFeHRyYWN0ZWQgZnJvbSB4dF9URUUuY1xcbiAgIDc6XFx0ICovXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGVyY3B1LmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9pcHY2L25mX2R1cF9pcHY2LmhcXHUwMDNlXFxuICAxNTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcXHUwMDNlXFxuICAxNzpcXHQjZW5kaWZcXG4gIDE4OlxcdFxcbiAgMTk6XFx0c3RhdGljIGJvb2wgbmZfZHVwX2lwdjZfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgMjA6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZilcXG4gIDIxOlxcdHtcXG4gIDIyOlxcdFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpO1xcbiAgMjM6XFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xcbiAgMjQ6XFx0XFx0c3RydWN0IGZsb3dpNiBmbDY7XFxuICAyNTpcXHRcXG4gIDI2OlxcdFxcdG1lbXNldChcXHUwMDI2Zmw2LCAwLCBzaXplb2YoZmw2KSk7XFxuICAyNzpcXHRcXHRpZiAob2lmICE9IC0xKVxcbiAgMjg6XFx0XFx0XFx0Zmw2LmZsb3dpNl9vaWYgPSBvaWY7XFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdGZsNi5kYWRkciA9ICpndztcXG4gIDMxOlxcdFxcdGZsNi5mbG93bGFiZWwgPSAoX19mb3JjZSBfX2JlMzIpKCgoaXBoLVxcdTAwM2VmbG93X2xibFswXSBcXHUwMDI2IDB4RikgXFx1MDAzY1xcdTAwM2MgMTYpIHxcXG4gIDMyOlxcdFxcdFxcdFxcdChpcGgtXFx1MDAzZWZsb3dfbGJsWzFdIFxcdTAwM2NcXHUwMDNjIDgpIHwgaXBoLVxcdTAwM2VmbG93X2xibFsyXSk7XFxuICAzMzpcXHRcXHRmbDYuZmxvd2k2X2ZsYWdzID0gRkxPV0lfRkxBR19LTk9XTl9OSDtcXG4gIDM0OlxcdFxcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCBcXHUwMDI2Zmw2KTtcXG4gIDM1OlxcdFxcdGlmIChkc3QtXFx1MDAzZWVycm9yKSB7XFxuICAzNjpcXHRcXHRcXHRkc3RfcmVsZWFzZShkc3QpO1xcbiAgMzc6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgMzg6XFx0XFx0fVxcbiAgMzk6XFx0XFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuICA0MDpcXHRcXHRza2JfZHN0X3NldChza2IsIGRzdCk7XFxuICA0MTpcXHRcXHRza2ItXFx1MDAzZWRldiAgICAgID0gZHN0X2Rldihkc3QpO1xcbiAgNDI6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDQ1OlxcdH1cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0dm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbiAgNDg6XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXFxuICA0OTpcXHR7XFxuICA1MDpcXHRcXHRpZiAobmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpXFxuICA1MTpcXHRcXHRcXHRyZXR1cm47XFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDU0OlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXFxuICA1NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDU2OlxcdFxcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xcbiAgNTc6XFx0XFx0aWYgKHNrYiA9PSBOVUxMKVxcbiAgNTg6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA1OTpcXHRcXG4gIDYwOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuICA2MTpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbiAgNjI6XFx0XFx0bmZfY3Rfc2V0KHNrYiwgTlVMTCwgSVBfQ1RfVU5UUkFDS0VEKTtcXG4gIDYzOlxcdCNlbmRpZlxcbiAgNjQ6XFx0XFx0aWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORyB8fFxcbiAgNjU6XFx0XFx0ICAgIGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9JTikge1xcbiAgNjY6XFx0XFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7XFxuICA2NzpcXHRcXHRcXHQtLWlwaC1cXHUwMDNlaG9wX2xpbWl0O1xcbiAgNjg6XFx0XFx0fVxcbiAgNjk6XFx0XFx0aWYgKG5mX2R1cF9pcHY2X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xcbiAgNzA6XFx0XFx0XFx0Y3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gdHJ1ZTtcXG4gIDcxOlxcdFxcdFxcdGlwNl9sb2NhbF9vdXQobmV0LCBza2ItXFx1MDAzZXNrLCBza2IpO1xcbiAgNzI6XFx0XFx0XFx0Y3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XFxuICA3MzpcXHRcXHR9IGVsc2Uge1xcbiAgNzQ6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA3NTpcXHRcXHR9XFxuICA3NjpcXHRvdXQ6XFxuICA3NzpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gIDc4OlxcdH1cXG4gIDc5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2R1cF9pcHY2KTtcXG4gIDgwOlxcdFxcbiAgODE6XFx0TU9EVUxFX0FVVEhPUihcXFwiU2ViYXN0aWFuIENsYcOfZW4gXFx1MDAzY3NlYmFzdGlhbi5jbGFzc2VuQGZyZWVuZXQuYWdcXHUwMDNlXFxcIik7XFxuICA4MjpcXHRNT0RVTEVfQVVUSE9SKFxcXCJKYW4gRW5nZWxoYXJkdCBcXHUwMDNjamVuZ2VsaEBtZWRvemFzLmRlXFx1MDAzZVxcXCIpO1xcbiAgODM6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJuZl9kdXBfaXB2NjogSVB2NiBwYWNrZXQgZHVwbGljYXRpb25cXFwiKTtcXG4gIDg0OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6NDguNDUwOTQxNThaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ5ODkzNzc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTZWN1cml0eSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhleSdyZSBhZGRpbmcgYSBjaGVjaywgYW4gYGlmYCBzdGF0ZW1lbnQsIGluIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAuIFRoZSBjb25kaXRpb24gaXMgYG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9uc2AuIFNvLCBiYXNpY2FsbHksIGlmIHdlJ3JlICpub3QqIGluIHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlLCBpdCdzIGFuIGltbWVkaWF0ZSByZXR1cm4uIFRoZSByYXRpb25hbGUgaXMgY2xlYXJseSBzZWN1cml0eS1yZWxhdGVkOiBwYWNrZXQgZHVwbGljYXRpb24gaW4gYSBub24taW5pdCBuYW1lc3BhY2UsIHBvdGVudGlhbGx5IHRocm91Z2ggbmZ0YWJsZXMgYGR1cGAgb3IgeHRhYmxlcyBgVEVFYCwgY291bGQgbGVhZCB0byBhIHNlcmlvdXMgcHJvYmxlbS4gSXQgc291bmRzIGxpa2UgdGhlcmUncyBhIHJpc2sgb2YgYnJlYWtpbmcgbmV0bnMgaXNvbGF0aW9uLCBjcmVhdGluZyByb3V0aW5nIGxvb3BzLCBvciBsZWFraW5nIHBhY2tldHMgYmV0d2VlbiBuYW1lc3BhY2VzLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzY2FuIGZvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCBtZSBtYWtlIHN1cmU6IE5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwLCBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBhbmQgbm8gbmV3IHN0cnVjdCBmaWVsZHMuIFRoaXMgYWxsIGxvb2tzIGdvb2Q7IGl0J3MganVzdCBhbiBlYXJseSByZXR1cm4uXG5cbk5vdywgbGV0J3MgZGlnIGEgYml0IGRlZXBlci4gSXQncyBhIHNpbXBsZSBgaWZgIGFuZCByZXR1cm4sIGJ1dCBpcyB0aGVyZSBhbnl0aGluZyBzdWJ0bGUgSSdtIG1pc3Npbmc/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNhbGxlciBvZiBgbmZfZHVwX2lwdjRgL2BuZl9kdXBfaXB2NmAgc2VlaW5nIHRoaXM/IEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVyczogc3BlY2lmaWNhbGx5IGBuZnRfZHVwX2lwdjRfZXZhbGAgb3IgYHRlZV90ZzRgIC0gbGV0IG1lIGxvb2sgdGhlbSBvdmVyIGFuZCBzZWUgaG93IHRoZXkgYXJlIGFmZmVjdGVkLiBJdCBzaG91bGRuJ3QgYmUgbXVjaCwgYnV0IGl0IGFsd2F5cyBwYXlzIHRvIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjYzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjM6NTMuOTQ5ODgxODgyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgzNjc5OTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2R1cF9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmgtNy1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oOjg6dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmgtOS1cXHRcXHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKTtcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTcyPWNvbmZpZyBORl9EVVBfSVBWNFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNzUtXFx0aGVscFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjc2OlxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbmZfZHVwX2lwdjQgY29yZSwgd2hpY2ggZHVwbGljYXRlcyBhbiBJUHY0XFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNzctXFx0ICBwYWNrZXQgdG8gYmUgcmVyb3V0ZWQgdG8gYW5vdGhlciBkZXN0aW5hdGlvbi5cXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZT01MT1vYmotJChDT05GSUdfSVBfTkZfQVJQRklMVEVSKSArPSBhcnB0YWJsZV9maWx0ZXIub1xcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS01Mi1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTM6b2JqLSQoQ09ORklHX05GX0RVUF9JUFY0KSArPSBuZl9kdXBfaXB2NC5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTU0LVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMTgtI2luY2x1ZGUgXFx1MDAzY25ldC9yb3V0ZS5oXFx1MDAzZVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjE5OiNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfZHVwX2lwdjQuaFxcdTAwM2VcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0yMC0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMjMtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6MjQ6c3RhdGljIGJvb2wgbmZfZHVwX2lwdjRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTI1LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpndywgaW50IG9pZilcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTUwLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjUxOnZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy01Mi1cXHRcXHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtOTAtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6OTE6XFx0aWYgKG5mX2R1cF9pcHY0X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTkyLVxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy0xMDAtfVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jOjEwMTpFWFBPUlRfU1lNQk9MX0dQTChuZl9kdXBfaXB2NCk7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMTAyLVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM9MTA0PU1PRFVMRV9BVVRIT1IoXFxcIkphbiBFbmdlbGhhcmR0IFxcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcXHUwMDNlXFxcIik7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6MTA1Ok1PRFVMRV9ERVNDUklQVElPTihcXFwibmZfZHVwX2lwdjQ6IER1cGxpY2F0ZSBJUHY0IHBhY2tldFxcXCIpO1xcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTEwNi1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMTItI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXHUwMDNlXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jOjEzOiNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfZHVwX2lwdjQuaFxcdTAwM2VcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMTQtXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmM9MjA9c3RhdGljIHZvaWQgbmZ0X2R1cF9pcHY0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jLTI5LVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYzozMDpcXHRuZl9kdXBfaXB2NChuZnRfbmV0KHBrdCksIHBrdC1cXHUwMDNlc2tiLCBuZnRfaG9vayhwa3QpLCBcXHUwMDI2Z3csIG9pZik7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jLTMxLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtMTYtI2luY2x1ZGUgXFx1MDAzY25ldC9yb3V0ZS5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmM6MTc6I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtMTgtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kdXBfaXB2Ni5oXFx1MDAzZVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9URUUuYz0zNz10ZWVfdGc0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNDEtXFxubmV0L25ldGZpbHRlci94dF9URUUuYzo0MjpcXHRuZl9kdXBfaXB2NCh4dF9uZXQocGFyKSwgc2tiLCB4dF9ob29rbnVtKHBhciksIFxcdTAwMjZpbmZvLVxcdTAwM2Vndy5pbiwgb2lmKTtcXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTQzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNzoyMzo1Ni4wMzM1NjczNTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzgzNTEzMjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIGNsb3NlbHkgYXQgdGhlc2UgYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCBmdW5jdGlvbnMuIFRoZSBmYWN0IHRoYXQgdGhleSByZXR1cm4gYHZvaWRgIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUg4oCTIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MgY29uc2lkZXJhYmx5LiBCYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIGFueSBlYXJseSByZXR1cm5zIGZyb20gdGhlc2UgZnVuY3Rpb25zIGRvbid0IGxlYXZlIGFueXRoaW5nIGluIGEgbWVzc3kgc3RhdGUuIE5vIGRhdGEgaXMgYmVpbmcgcGFzc2VkIGFyb3VuZCBpbiBhbiB1bmluaXRpYWxpemVkIGNvbmRpdGlvbi4gVGhlcmUncyBubyB1bmV4cGVjdGVkIGFsbG9jYXRpb24gb3IgYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzLCBhdCBpdHMgY29yZSwgYSBzdHJhaWdodGZvcndhcmQgY2hlY2sgZm9yIHByaXZpbGVnZSBhbmQgbmFtZXNwYWNlIGlzb2xhdGlvbi5cblxuR2l2ZW4gdGhpcyB1bmRlcnN0YW5kaW5nLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHNhbml0aXplcnMgbGlrZSBLQVNBTiBhcmUgZW50aXJlbHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55dGhpbmcgdGhhdCAqbWlnaHQqIGJlIGNvbmNlcm5pbmcuIFdlIGNlcnRhaW5seSBkb24ndCBuZWVkIHRvIGludm9sdmUgS01TQU4gZm9yIHRoaXMuIEl0J3MgYSBjbGVhbiBjaGFuZ2UuXG5cbk5vdywgbGV0J3MgZ2V0IHRoYXQgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwgcHJlcHBlZC4gSSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB3aGF0IG5lZWRzIHRvIGJlIGNvbW11bmljYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzNywiT3V0cHV0VG9rZW5zIjoxNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTc6MjQ6MDMuODY4NzAyNjM5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgcGVybWlzc2lvbi9uYW1lc3BhY2UgY2hlY2sgKGBuZXQtXFx1MDAzZXVzZXJfbnMgIT0gXFx1MDAyNmluaXRfdXNlcl9uc2ApIHRvIGBuZl9kdXBfaXB2NCgpYCBhbmQgYG5mX2R1cF9pcHY2KClgIHRvIHJldHVybiBlYXJseSB3aGVuIGNhbGxlZCBmcm9tIGEgbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2UuXFxuXFxuVGhpcyBjaGFuZ2U6XFxuMS4gRG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBhbnkgc3RhY2svaGVhcCBidWZmZXJzIG9yIGRhdGEgc3RydWN0dXJlcy5cXG4yLiBEb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgdG8gdXNlciBzcGFjZS5cXG4zLiBEb2VzIG5vdCBtb2RpZnkgYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja3MsIG9yIGNvbnRyb2wgZmxvdyBpbiBhbnkgd2F5IHRoYXQgd291bGQgcGVybWl0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuXFxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHBlcm1pc3Npb24vbmFtZXNwYWNlIGNoZWNrIChgbmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnNgKSB0byBgbmZfZHVwX2lwdjQoKWAgYW5kIGBuZl9kdXBfaXB2NigpYCB0byByZXR1cm4gZWFybHkgd2hlbiBjYWxsZWQgZnJvbSBhIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlLlxcblxcblRoaXMgY2hhbmdlOlxcbjEuIERvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IHN0YWNrL2hlYXAgYnVmZmVycyBvciBkYXRhIHN0cnVjdHVyZXMuXFxuMi4gRG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuXFxuMy4gRG9lcyBub3QgbW9kaWZ5IGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBjb250cm9sIGZsb3cgaW4gYW55IHdheSB0aGF0IHdvdWxkIHBlcm1pdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xqmz[1] Phase: Succeeded StartedAt: 2026-09-04 17:24:16 +0000 UTC FinishedAt: 2026-09-04 17:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 17:24:16 +0000 UTC FinishedAt: 2026-09-04 17:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2] Phase: Succeeded StartedAt: 2026-09-04 17:24:16 +0000 UTC FinishedAt: 2026-09-04 19:03:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 17:24:16 +0000 UTC FinishedAt: 2026-09-04 19:03:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 17:24:16 +0000 UTC FinishedAt: 2026-09-04 17:24:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 17:24:16 +0000 UTC FinishedAt: 2026-09-04 17:24:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflow7xqmz/series-workflow7xqmz-convert-artifact-1358804702/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 17:24:26 +0000 UTC FinishedAt: 2026-09-04 17:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 17:24:26 +0000 UTC FinishedAt: 2026-09-04 17:40:36 +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:*2e6d92ea-55d0-45ed-9e69-db71ccac3bc8,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-workflow7xqmz/series-workflow7xqmz-convert-artifact-1358804702/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": "073ae4fb-2f8e-41cb-ab20-a147716270db", "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-workflow7xqmz/series-workflow7xqmz-build-action-645519300/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 17:24:26 +0000 UTC FinishedAt: 2026-09-04 17:40:26 +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:*2e6d92ea-55d0-45ed-9e69-db71ccac3bc8,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-workflow7xqmz/series-workflow7xqmz-convert-artifact-1358804702/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": "073ae4fb-2f8e-41cb-ab20-a147716270db", "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-workflow7xqmz/series-workflow7xqmz-build-action-645519300/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 17:40:36 +0000 UTC FinishedAt: 2026-09-04 17:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 17:40:36 +0000 UTC FinishedAt: 2026-09-04 17:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 17:40:36 +0000 UTC FinishedAt: 2026-09-04 17:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 17:40:36 +0000 UTC FinishedAt: 2026-09-04 17:40:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflow7xqmz/series-workflow7xqmz-convert-artifact-1747917969/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 17:40:46 +0000 UTC FinishedAt: 2026-09-04 17:42:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 17:40:46 +0000 UTC FinishedAt: 2026-09-04 17:42:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*073ae4fb-2f8e-41cb-ab20-a147716270db,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-workflow7xqmz/series-workflow7xqmz-build-action-645519300/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-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 17:42:59 +0000 UTC FinishedAt: 2026-09-04 17:42:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 17:42:59 +0000 UTC FinishedAt: 2026-09-04 17:42:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 17:42:59 +0000 UTC FinishedAt: 2026-09-04 18:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 17:42:59 +0000 UTC FinishedAt: 2026-09-04 18:00:26 +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:*2e6d92ea-55d0-45ed-9e69-db71ccac3bc8,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-workflow7xqmz/series-workflow7xqmz-convert-artifact-1747917969/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": "de597d9b-7eaa-455a-95b6-74198518e9ef", "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-workflow7xqmz/series-workflow7xqmz-build-action-507907165/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 17:42:59 +0000 UTC FinishedAt: 2026-09-04 18:00:16 +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:*2e6d92ea-55d0-45ed-9e69-db71ccac3bc8,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-workflow7xqmz/series-workflow7xqmz-convert-artifact-1747917969/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": "de597d9b-7eaa-455a-95b6-74198518e9ef", "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-workflow7xqmz/series-workflow7xqmz-build-action-507907165/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 18:00:26 +0000 UTC FinishedAt: 2026-09-04 18:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 18:00:26 +0000 UTC FinishedAt: 2026-09-04 18:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 18:00:26 +0000 UTC FinishedAt: 2026-09-04 18:02:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 18:00:26 +0000 UTC FinishedAt: 2026-09-04 18:02:16 +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:*de597d9b-7eaa-455a-95b6-74198518e9ef,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-workflow7xqmz/series-workflow7xqmz-build-action-507907165/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-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 18:02:17 +0000 UTC FinishedAt: 2026-09-04 19:03:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 18:02:17 +0000 UTC FinishedAt: 2026-09-04 19:03:15 +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":["nf_dup_ipv4","nf_dup_ipv6"],"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:*073ae4fb-2f8e-41cb-ab20-a147716270db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*de597d9b-7eaa-455a-95b6-74198518e9ef,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-workflow7xqmz/series-workflow7xqmz-build-action-645519300/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-workflow7xqmz/series-workflow7xqmz-build-action-507907165/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 18:02:17 +0000 UTC FinishedAt: 2026-09-04 18:02:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 18:02:17 +0000 UTC FinishedAt: 2026-09-04 18:02:22 +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":["nf_dup_ipv4","nf_dup_ipv6"],"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-workflow7xqmz/series-workflow7xqmz-convert-artifact-3942177222/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 18:02:17 +0000 UTC FinishedAt: 2026-09-04 18:02:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 18:02:17 +0000 UTC FinishedAt: 2026-09-04 18:02:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 18:02:18 +0000 UTC FinishedAt: 2026-09-04 18:02:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 18:02:28 +0000 UTC FinishedAt: 2026-09-04 19:03:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xqmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"f7d3a499-8077-4f54-8d34-2256f1769892","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 18:02:28 +0000 UTC FinishedAt: 2026-09-04 19:03:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*073ae4fb-2f8e-41cb-ab20-a147716270db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*de597d9b-7eaa-455a-95b6-74198518e9ef,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-workflow7xqmz/series-workflow7xqmz-build-action-645519300/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-workflow7xqmz/series-workflow7xqmz-build-action-507907165/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-workflow7xqmz/series-workflow7xqmz-convert-artifact-3942177222/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,}