Name: series-workflow9xzfh Phase: Succeeded StartedAt: 2026-09-09 16:35:18 +0000 UTC FinishedAt: 2026-09-09 21:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[0] Phase: Succeeded StartedAt: 2026-09-09 16:35:18 +0000 UTC FinishedAt: 2026-09-09 17:15:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 16:35:18 +0000 UTC FinishedAt: 2026-09-09 17:15:28 +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": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CT_NETLINK", "IPV6", "NETFILTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CT_NETLINK", "IPV6", "NETFILTER" ], "series_id": "4be89dfc-418a-4933-be0b-6c766dc67885" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ctnetlink_filter_match_tuple", "ctnetlink_filter_match", "ctnetlink_dump_table", "ctnetlink_flush_conntrack", "ctnetlink_get_conntrack" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZSYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19kdW1wX3RhYmxlJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19mbHVzaF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgYnVnIGluIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKClgIHdoZXJlIGAhaXB2Nl9hZGRyX2NtcCgpYCAod2hpY2ggcmV0dXJucyAwIG9uIG1hdGNoKSB3YXMgaW5jb3JyZWN0bHkgdXNlZCBpbnN0ZWFkIG9mIGAhaXB2Nl9hZGRyX2VxdWFsKClgICh3aGljaCByZXR1cm5zIHRydWUgb24gbWF0Y2gpLCBjYXVzaW5nIElQdjYgYWRkcmVzcyBmaWx0ZXJpbmcgZHVyaW5nIGNvbm50cmFjayBuZXRsaW5rIGR1bXBpbmcgdG8gcmVqZWN0IG1hdGNoZXMgYW5kIGFjY2VwdCBtaXNtYXRjaGVzLiBcblxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgb25seSBhIGJvb2xlYW4gZXF1YWxpdHkgY2hlY2sgYmV0d2VlbiBleGlzdGluZywgZnVsbHkgaW5pdGlhbGl6ZWQgSVB2NiBhZGRyZXNzZXMgaW4gY29ubnRyYWNrIHR1cGxlcyAodGhlIGZpbHRlciBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigpYCBhbmQgdGhlIGNvbm50cmFjayB0dXBsZSBpcyBwb3B1bGF0ZWQgdXBvbiBjb25uZWN0aW9uIHRyYWNraW5nKS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcHlpbmcgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGFmZmVjdGVkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYm9vbGVhbiBpbnZlcnRlZCBsb2dpYyBidWcgaW4gY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZSgpIHdoZW4gbWF0Y2hpbmcgSVB2NiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBieSByZXBsYWNpbmcgIWlwdjZfYWRkcl9jbXAoKSB3aXRoICFpcHY2X2FkZHJfZXF1YWwoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBzdWJzeXN0ZW0sIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmMxMjYwNGY2NTBjOTc3M2E0NjllMjFlMjllZDRhNjRmNzQ3NzM2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTc6MTQ6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5pbmRleCA1NzlhZGEwNjNiMWJiLi5lZjQ4MzY5OTY1OWJmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbkBAIC0xMDk4LDEzICYjNDM7MTA5OCwxMyBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLFxuIFx0XHRicmVhaztcbiBcdGNhc2UgTkZQUk9UT19JUFY2OlxuIFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWlwdjZfYWRkcl9jbXAoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pbjYsXG4tXHRcdFx0XHQgICBcdTAwMjZjdF90dXBsZS1cdTAwM2VzcmMudTMuaW42KSlcbiYjNDM7XHRcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNmZpbHRlcl90dXBsZS1cdTAwM2VzcmMudTMuaW42LFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2Y3RfdHVwbGUtXHUwMDNlc3JjLnUzLmluNikpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfRFNUKSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhaXB2Nl9hZGRyX2NtcChcdTAwMjZmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUzLmluNixcbi1cdFx0XHRcdCAgIFx1MDAyNmN0X3R1cGxlLVx1MDAzZWRzdC51My5pbjYpKVxuJiM0MztcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pbjYsXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZjdF90dXBsZS1cdTAwM2Vkc3QudTMuaW42KSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0YnJlYWs7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19maWx0ZXJfbWF0Y2gmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFjayYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZ2V0X2Nvbm50cmFjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJvb2xlYW4gaW52ZXJ0ZWQgbG9naWMgYnVnIGluIGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKSB3aGVuIG1hdGNoaW5nIElQdjYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYnkgcmVwbGFjaW5nICFpcHY2X2FkZHJfY21wKCkgd2l0aCAhaXB2Nl9hZGRyX2VxdWFsKCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgbG9naWMgaW4gdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgc3Vic3lzdGVtLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZjMTI2MDRmNjUwYzk3NzNhNDY5ZTIxZTI5ZWQ0YTY0Zjc0NzczNmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE3OjE0OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDU3OWFkYTA2M2IxYmIuLmVmNDgzNjk5NjU5YmYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTEwOTgsMTMgJiM0MzsxMDk4LDEzIEBAIHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpmaWx0ZXJfdHVwbGUsCiAJCWJyZWFrOwogCWNhc2UgTkZQUk9UT19JUFY2OgogCQlpZiAoKGZsYWdzICZhbXA7IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfU1JDKSkgJmFtcDsmYW1wOwotCQkgICAgIWlwdjZfYWRkcl9jbXAoJmFtcDtmaWx0ZXJfdHVwbGUtJmd0O3NyYy51My5pbjYsCi0JCQkJICAgJmFtcDtjdF90dXBsZS0mZ3Q7c3JjLnUzLmluNikpCiYjNDM7CQkgICAgIWlwdjZfYWRkcl9lcXVhbCgmYW1wO2ZpbHRlcl90dXBsZS0mZ3Q7c3JjLnUzLmluNiwKJiM0MzsJCQkJICAgICAmYW1wO2N0X3R1cGxlLSZndDtzcmMudTMuaW42KSkKIAkJCXJldHVybiAwOwogCiAJCWlmICgoZmxhZ3MgJmFtcDsgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSAmYW1wOyZhbXA7Ci0JCSAgICAhaXB2Nl9hZGRyX2NtcCgmYW1wO2ZpbHRlcl90dXBsZS0mZ3Q7ZHN0LnUzLmluNiwKLQkJCQkgICAmYW1wO2N0X3R1cGxlLSZndDtkc3QudTMuaW42KSkKJiM0MzsJCSAgICAhaXB2Nl9hZGRyX2VxdWFsKCZhbXA7ZmlsdGVyX3R1cGxlLSZndDtkc3QudTMuaW42LAomIzQzOwkJCQkgICAgICZhbXA7Y3RfdHVwbGUtJmd0O2RzdC51My5pbjYpKQogCQkJcmV0dXJuIDA7CiAJCWJyZWFrOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQ1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25udHJhY2sgTmV0bGluayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgIGFyb3VuZCB0aGUgbGluZSBudW1iZXJzIHNwZWNpZmllZCBpbiB0aGUgZGlmZi4gSSBzaG91bGQgcHJvYmFibHkgZmlyZSB1cCBhIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBzZXNzaW9uIHRvIGdldCB0aGUgZnVsbCBjb250ZXh0IGFyb3VuZCBsaW5lIDEwOTguIEJhc2VkIG9uIHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBjaGFuZ2luZyBzb21ldGhpbmcgcmVsYXRlZCB0byBJUHY2IGFkZHJlc3MgY29tcGFyaXNvbiB3aXRoaW4gdGhlIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBjb2RlIGlzIHVzaW5nIGBpcHY2X2FkZHJfY21wYCBhbmQgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRob3NlIGNvbXBhcmlzb25zIHRvIGBpcHY2X2FkZHJfZXF1YWxgLiBUaGlzIHN1Z2dlc3RzIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQsIGNoYW5nZSBpbiBob3cgd2UgZGV0ZXJtaW5lIGlmIHR3byBJUHY2IGFkZHJlc3NlcyBtYXRjaCB3aGVuIGZpbHRlcmluZyBjb25udHJhY2sgZW50cmllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgc2VtYW50aWMgZGlmZmVyZW5jZSBpcyBhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2Ygc3dhcHBpbmcgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvbnRleHQuIFRoZSBjb250ZXh0IGlzIGBORlBST1RPX0lQVjZgIHNvIHRoaXMgaXMgYWxsIGFib3V0IElQdjYuIExldCYjMzk7cyBzZWUgaWYgdGhlIGNvbW1pdCBtZXNzYWdlIHByb3ZpZGVzIG1vcmUgY29udGV4dCB0byB3aGF0IHRoZSBhdXRob3Igd2FzIGFpbWluZyB0byBkbyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgwOlx0XHRpZiAoZmlsdGVyKVxuMTA4MTpcdFx0XHRjYi1cdTAwM2VhbnN3ZXJfZmxhZ3MgPSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuMTA4MjpcdFx0cmV0dXJuIDA7XG4xMDgzOlx0fVxuMTA4NDpcdFxuMTA4NTpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpmaWx0ZXJfdHVwbGUsXG4xMDg2Olx0XHRcdFx0XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmN0X3R1cGxlLFxuMTA4NzpcdFx0XHRcdFx0XHR1X2ludDMyX3QgZmxhZ3MsIGludCBmYW1pbHkpXG4xMDg4Olx0e1xuMTA4OTpcdFx0c3dpdGNoIChmYW1pbHkpIHtcbjEwOTA6XHRcdGNhc2UgTkZQUk9UT19JUFY0OlxuMTA5MTpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFx1MDAyNlx1MDAyNlxuMTA5MjpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pcCAhPSBjdF90dXBsZS1cdTAwM2VzcmMudTMuaXApXG4xMDkzOlx0XHRcdFx0cmV0dXJuICAwO1xuMTA5NDpcdFxuMTA5NTpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX0RTVCkpIFx1MDAyNlx1MDAyNlxuMTA5NjpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pcCAhPSBjdF90dXBsZS1cdTAwM2Vkc3QudTMuaXApXG4xMDk3Olx0XHRcdFx0cmV0dXJuICAwO1xuMTA5ODpcdFx0XHRicmVhaztcbjEwOTk6XHRcdGNhc2UgTkZQUk9UT19JUFY2OlxuMTEwMDpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFx1MDAyNlx1MDAyNlxuMTEwMTpcdFx0XHQgICAgIWlwdjZfYWRkcl9lcXVhbChcdTAwMjZmaWx0ZXJfdHVwbGUtXHUwMDNlc3JjLnUzLmluNixcbjExMDI6XHRcdFx0XHRcdCAgICAgXHUwMDI2Y3RfdHVwbGUtXHUwMDNlc3JjLnUzLmluNikpXG4xMTAzOlx0XHRcdFx0cmV0dXJuIDA7XG4xMTA0Olx0XG4xMTA1Olx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfRFNUKSkgXHUwMDI2XHUwMDI2XG4xMTA2Olx0XHRcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNmZpbHRlcl90dXBsZS1cdTAwM2Vkc3QudTMuaW42LFxuMTEwNzpcdFx0XHRcdFx0ICAgICBcdTAwMjZjdF90dXBsZS1cdTAwM2Vkc3QudTMuaW42KSlcbjExMDg6XHRcdFx0XHRyZXR1cm4gMDtcbjExMDk6XHRcdFx0YnJlYWs7XG4xMTEwOlx0XHR9XG4xMTExOlx0XG4xMTEyOlx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX05VTSkpIFx1MDAyNlx1MDAyNlxuMTExMzpcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2Vkc3QucHJvdG9udW0gIT0gY3RfdHVwbGUtXHUwMDNlZHN0LnByb3RvbnVtKVxuMTExNDpcdFx0XHRyZXR1cm4gMDtcbjExMTU6XHRcbjExMTY6XHRcdHN3aXRjaCAoY3RfdHVwbGUtXHUwMDNlZHN0LnByb3RvbnVtKSB7XG4xMTE3Olx0XHRjYXNlIElQUFJPVE9fVENQOlxuMTExODpcdFx0Y2FzZSBJUFBST1RPX1VEUDpcbjExMTk6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19TUkNfUE9SVCkpIFx1MDAyNlx1MDAyNlxuMTEyMDpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51LnRjcC5wb3J0ICE9IGN0X3R1cGxlLVx1MDAzZXNyYy51LnRjcC5wb3J0KVxuMTEyMTpcdFx0XHRcdHJldHVybiAwO1xuMTEyMjpcdFxuMTEyMzpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0RTVF9QT1JUKSkgXHUwMDI2XHUwMDI2XG4xMTI0Olx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUudGNwLnBvcnQgIT0gY3RfdHVwbGUtXHUwMDNlZHN0LnUudGNwLnBvcnQpXG4xMTI1Olx0XHRcdFx0cmV0dXJuIDA7XG4xMTI2Olx0XHRcdGJyZWFrO1xuMTEyNzpcdFx0Y2FzZSBJUFBST1RPX0lDTVA6XG4xMTI4Olx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUF9UWVBFKSkgXHUwMDI2XHUwMDI2XG4xMTI5Olx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUuaWNtcC50eXBlICE9IGN0X3R1cGxlLVx1MDAzZWRzdC51LmljbXAudHlwZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njc3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIENyaXRpY2FsIExvZ2ljIEVycm9yIGFuZCBBc3Nlc3NpbmcgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBmb2N1c2VzIG9uIHRoZSBgaXB2Nl9hZGRyX2NtcGAgYW5kIGBpcHY2X2FkZHJfZXF1YWxgIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZWlyIHJldHVybiB2YWx1ZXMuIEl0IHNlZW1zIHRoZXJlIHdhcyBhIGNsYXNzaWMgbG9naWMgZXJyb3I6IGBpcHY2X2FkZHJfY21wYCByZXR1cm5pbmcgMCBmb3IgZXF1YWxpdHksIHdoaWNoIHdoZW4gbmVnYXRlZCAoYCFpcHY2X2FkZHJfY21wYCkgY2F1c2VkIGEgcmV0dXJuIG9mIDAgKG5vIG1hdGNoKSAqd2hlbiB0aGUgYWRkcmVzc2VzIHdlcmUgYWN0dWFsbHkgRVFVQUwqLiBUaGF0JiMzOTtzIGEgdGV4dGJvb2sgaW52ZXJzaW9uIHRoYXQgd291bGQgZGVmaW5pdGVseSBsZWFkIHRvIGluY29ycmVjdCBmaWx0ZXJpbmcgaW4gbXkgbmV0bGluayBjb2RlLCBwYXJ0aWN1bGFybHkgd2hlcmUgSSYjMzk7bSBoYW5kbGluZyBJUHY2IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIGluIGBjdG5ldGxpbmtgLiBUaGUgZml4LCB0aGFua2Z1bGx5LCBhcHBlYXJzIHRvIHVzZSBgaXB2Nl9hZGRyX2VxdWFsYCwgd2hpY2ggcmV0dXJucyB0aGUgbW9yZSBpbnR1aXRpdmUgdHJ1ZS9mYWxzZSBmb3IgZXF1YWxpdHksIHNvIGBpZiAoIWlwdjZfYWRkcl9lcXVhbCguLi4pKWAgbm93IGNvcnJlY3RseSByZXR1cm5zIDAgKG5vIG1hdGNoKSB3aGVuIHRoZSBhZGRyZXNzZXMgYXJlICpub3QqIGVxdWFsLiBUaGlzIHNob3VsZCBmaXggdGhlIGludmVydGVkIG1hdGNoIGlzc3VlcyBJIHdhcyBzZWVpbmcuCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgZnV6emluZyB0aGlzLiBUaGUgY3J1Y2lhbCBhc3BlY3QgaXMgKnJlYWNoYWJpbGl0eSogYW5kICpmdXp6YWJpbGl0eSouIEZyb20gYSByZWFjaGFiaWxpdHkgcGVyc3BlY3RpdmUsIGBuZXRsaW5rIGN0bmV0bGlua2AgaXMgdHJpdmlhbGx5IGFjY2Vzc2libGUuIEl04oCZcyBhIG5ldGxpbmsgc29ja2V0LCB3aGljaCBtZWFucyBpdCYjMzk7cyBhdmFpbGFibGUgZnJvbSBhIG5vbi1wcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlLCBvciBhcyByb290LCB0aHJvdWdoIGBBRl9ORVRMSU5LYCBhbmQgYE5FVExJTktfTkVURklMVEVSYCBzb2NrZXRzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydC4KClJlZ2FyZGluZyBmdXp6YWJpbGl0eSwgdGhpcyBsb29rcyBwcm9taXNpbmcuIFRoZSBjb2RlIGRpcmVjdGx5IG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY2AsIHdoaWNoIGlzIGF0IHRoZSBjb3JlIG9mIG5ldGZpbHRlciwgYSBjcml0aWNhbCBwYXJ0IG9mIG5ldHdvcmtpbmcuIFNvLCB0aGUgbGlrZWxpaG9vZCBvZiBmaW5kaW5nIHZ1bG5lcmFiaWxpdGllcyBoZXJlIGlzIGhpZ2guIGBXb3J0aEZ1enppbmcgPSB0cnVlLmAKCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBjb25maXJtIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpcyBjb2RlIHRvIGJlIGNvbXBpbGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX25ldGxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM0PW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0spICYjNDM7PSBuZl9jb25udHJhY2sub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LKSAmIzQzOz0gbmZfY29ubnRyYWNrX25ldGxpbmsub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19USU1FT1VUKSAmIzQzOz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM4NzE9c3RhdGljIGludCBfX2luaXQgY3RuZXRsaW5rX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzg5NC0jaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1Rcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozODk1Olx0Lyogc2V0dXAgaW50ZXJhY3Rpb24gYmV0d2VlbiBuZl9xdWV1ZSBhbmQgbmZfY29ubnRyYWNrX25ldGxpbmsuICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzg5Ni1cdFJDVV9JTklUX1BPSU5URVIobmZubF9jdF9ob29rLCBcdTAwMjZjdG5ldGxpbmtfZ2x1ZV9ob29rKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oLTgtXG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oOjk6LyogbmZfY29ubnRyYWNrX25ldGxpbmsuYzogYXBwbGllZCBvbiB0dXBsZSBmaWx0ZXJzICovXG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oLTEwLSNkZWZpbmUgQ1RBX0ZJTFRFUl9GX0NUQV9JUF9TUkNcdFx0XHQoMSBcdTAwM2NcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkNoZWNraW5nIGBDT05GSUdfTkZfQ1RfTkVUTElOS2AgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG5ldGxpbmsgc3VwcG9ydCBmb3IgY29ubmVjdGlvbiB0cmFja2luZy4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGRpcmVjdGx5IGZvciB0aGUgYENPTkZJR19ORl9DVF9ORVRMSU5LYCBvcHRpb24uIEtub3dpbmcgdGhpcyBpcyBhIGNvcmUgb3B0aW9uLCBJJiMzOTtsbCB0aGVuIHJldmlldyBpdCYjMzk7cyBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCYjMzk7cyBlbmFibGVkIGFuZCBob3cgaXQgcmVsYXRlcyB0byBvdGhlciBuZXRmaWx0ZXIgZmVhdHVyZXMuIFRoaXMgd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIGl0cyBmdW5jdGlvbiBhbmQgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGlnaGxpZ2h0IGFueSBvdGhlciBhcmVhcyB0aGF0IHJlcXVpcmUgY29uc2lkZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ1RfTkVUTElOS1xcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNTU9Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNjY6Y29uZmlnIE5GX0NUX05FVExJTktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjctXHR0cmlzdGF0ZSAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzNjYuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc3RydWN0dXJlZC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBkZXRhaWxzIG9uIGEgc3BlY2lmaWMgb3B0aW9uIG9yIGEgcmVsYXRlZCBncm91cCBvZiBvcHRpb25zLCBhbmQgdGhpcyBmaWxlIGlzIHdoZXJlIHRoYXQga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRlZmluZWQgdGhlcmUgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBOZXRmaWx0ZXIuIEkgaG9wZSB0aGUgZm9ybWF0dGluZyBpcyBjbGVhciwgYW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGVhc2lseSB1bmRlcnN0b29kLCBhcyBLY29uZmlnIGZpbGVzIGNhbiBzb21ldGltZXMgYmUgYSBiaXQgZGVuc2UuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjA6XHRcdCAgb24gaG93IHJlc3RyaWN0aXZlIHlvdXIgcnVsZXNldCBpcy5cbiAzNjE6XHRcdCAgSWYgeW91IGFyZSB1c2luZyBhIHRmdHAgY2xpZW50IGJlaGluZCAtaiBTTkFUIG9yIC1qIE1BU1FVRVJBRElOR1xuIDM2MjpcdFx0ICB5b3Ugd2lsbCBuZWVkIHRoaXMuXG4gMzYzOlx0XG4gMzY0Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDM2NTpcdFxuIDM2NjpcdGNvbmZpZyBORl9DVF9ORVRMSU5LXG4gMzY3Olx0XHR0cmlzdGF0ZSAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UmIzM5O1xuIDM2ODpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gMzY5Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAzNzA6XHRcdGhlbHBcbiAzNzE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG5ldGxpbmstYmFzZWQgdXNlcnNwYWNlIGludGVyZmFjZVxuIDM3MjpcdFxuIDM3MzpcdGNvbmZpZyBORl9DVF9ORVRMSU5LX1RJTUVPVVRcbiAzNzQ6XHRcdHRyaXN0YXRlICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCB0dW5pbmcgdmlhIE5ldGxpbmsmIzM5O1xuIDM3NTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gMzc2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDM3NzpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfVElNRU9VVFxuIDM3ODpcdFx0aGVscFxuIDM3OTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dFxuIDM4MDpcdFx0ICBmaW5lLWdyYWluIHR1bmluZy4gVGhpcyBhbGxvd3MgeW91IHRvIGF0dGFjaCBzcGVjaWZpYyB0aW1lb3V0XG4gMzgxOlx0XHQgIHBvbGljaWVzIHRvIGZsb3dzLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBnbG9iYWwgdGltZW91dCBwb2xpY3kuXG4gMzgyOlx0XG4gMzgzOlx0XHQgIElmIHVuc3VyZSwgc2F5IGBOJiMzOTsuXG4gMzg0Olx0XG4gMzg1Olx0Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXG4gMzg2Olx0XHR0cmlzdGF0ZSAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBpbiB1c2VyLXNwYWNlIHZpYSBOZXRsaW5rJiMzOTtcbiAzODc6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuIDM4ODpcdFx0ZGVwZW5kcyBvbiBORl9DVF9ORVRMSU5LXG4gMzg5Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgTkZfQ1RfTkVUTElOSyBEZXBlbmRlbmN5KioKClJpZ2h0LCBsZXQgbWUgZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhcmVudCBjb25maWd1cmF0aW9uIG9yIGRlcGVuZGVuY2llcyBmb3IgYE5GX0NUX05FVExJTktgLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBmaWxlIGluIGBuZXQvbmV0ZmlsdGVyL2AuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgc3Vycm91bmRpbmcgbGluZXMsIHNwZWNpZmljYWxseSwgdG8gc2VlIGhvdyBgTkZfQ1RfTkVUTElOS2AgaXMgaG9va2VkIGluIGFuZCB3aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIGl0cyBidWlsZCBzdGF0dXMuIExpa2VseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gbG9vayBmb3IgYW4gZWFybGllciBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGVuYWJsZXMgaXQgb3IgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlICYjMzk7d2h5JiMzOTsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnUgXCYjMzQ7Q29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgTkVURklMVEVSX0lOR1JFU1NcbiAgIDY6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIGluZ3Jlc3Mgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVmYXVsdCB5XG4gICA4Olx0XHRzZWxlY3QgTkVUX0lOR1JFU1NcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgZnJvbSBpbmdyZXNzIHVzaW5nIHRoZSBOZXRmaWx0ZXJcbiAgMTE6XHRcdCAgaW5mcmFzdHJ1Y3R1cmUuXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIE5FVEZJTFRFUl9FR1JFU1NcbiAgMTQ6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIGVncmVzcyBzdXBwb3J0XCYjMzQ7XG4gIDE1Olx0XHRkZWZhdWx0IHlcbiAgMTY6XHRcdHNlbGVjdCBORVRfRUdSRVNTXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGJlZm9yZSB0cmFuc21pc3Npb24gdXNpbmcgdGhlXG4gIDE5Olx0XHQgIE5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZS5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgTkVURklMVEVSX1NLSVBfRUdSRVNTXG4gIDIyOlx0XHRkZWZfYm9vbCBORVRGSUxURVJfRUdSRVNTIFx1MDAyNlx1MDAyNiAoTkVUX0NMU19BQ1QgfHwgSUZCKVxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS1xuICAyNTpcdFx0Ym9vbFxuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxuICAyODpcdFx0Ym9vbFxuICAyOTpcdFxuICAzMDpcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0FSUFxuICAzMTpcdFx0Ym9vbFxuICAzMjpcdFxuICAzMzpcdGNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcbiAgMzQ6XHRcdGRlZl9ib29sIEJQRl9TWVNDQUxMXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcbiAgMzc6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuICAzOTpcdFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcbiAgNDA6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDQzOlx0XHQgIHRvIGxpc3QgdGhlIGJhc2UgbmV0ZmlsdGVyIGhvb2tzIHZpYSBORk5FVExJTksuXG4gIDQ0Olx0XHQgIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVidWdnaW5nLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19BQ0NUXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZBQ0NUIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgNDk6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA1MDpcdFx0aGVscFxuICA1MTpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDUyOlx0XHQgIGZvciBleHRlbmRlZCBhY2NvdW50aW5nIHZpYSBORk5FVExJTksuXG4gIDUzOlx0XG4gIDU0Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG4gIDU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiAgNTY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gIDU3Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgNTg6XHRcdGhlbHBcbiAgNTk6XHRcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxuICA2MDpcdFx0ICBmb3IgcXVldWVpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxuICA2MTpcdFxuICA2MjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19MT0dcbiAgNjM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4gIDY0Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAgNjU6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA2NjpcdFx0aGVscFxuICA2NzpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDY4Olx0XHQgIGZvciBsb2dnaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cbiAgNjk6XHRcbiAgNzA6XHRcdCAgVGhpcyBvYnNvbGV0ZXMgdGhlIGV4aXN0aW5nIGlwdF9VTE9HIGFuZCBlYmdfdWxvZyBtZWNoYW5pc21zLFxuICA3MTpcdFx0ICBhbmQgaXMgYWxzbyBzY2hlZHVsZWQgdG8gcmVwbGFjZSB0aGUgb2xkIHN5c2xvZy1iYXNlZCBpcHRfTE9HXG4gIDcyOlx0XHQgIGFuZCBpcDZ0X0xPRyBtb2R1bGVzLlxuICA3MzpcdFxuICA3NDpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcbiAgNzU6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBPU0Ygb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4gIDc2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuICA3NzpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gIDc4Olx0XHRoZWxwXG4gIDc5Olx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcbiAgODA6XHRcdCAgZm9yIHBhc3NpdmUgT1MgZmluZ2VycHJpbnQgdmlhIE5GTkVUTElOSy5cbiAgODE6XHRcbiAgODI6XHRjb25maWcgTkZfQ09OTlRSQUNLXG4gIDgzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4gIDg0Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAgODU6XHRcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxuICA4NjpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQVjYgIT0gblxuICA4NzpcdFx0aGVscFxuICA4ODpcdFx0ICBDb25uZWN0aW9uIHRyYWNraW5nIGtlZXBzIGEgcmVjb3JkIG9mIHdoYXQgcGFja2V0cyBoYXZlIHBhc3NlZFxuICA4OTpcdFx0ICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZFxuICA5MDpcdFx0ICBpbnRvIGNvbm5lY3Rpb25zLlxuICA5MTpcdFxuICA5MjpcdFx0ICBUaGlzIGlzIHJlcXVpcmVkIHRvIGRvIE1hc3F1ZXJhZGluZyBvciBvdGhlciBraW5kcyBvZiBOZXR3b3JrXG4gIDkzOlx0XHQgIEFkZHJlc3MgVHJhbnNsYXRpb24uICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGVuaGFuY2UgcGFja2V0XG4gIDk0Olx0XHQgIGZpbHRlcmluZyAoc2VlIGBDb25uZWN0aW9uIHN0YXRlIG1hdGNoIHN1cHBvcnQmIzM5OyBiZWxvdykuXG4gIDk1Olx0XG4gIDk2Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuICA5NzpcdFxuICA5ODpcdGNvbmZpZyBORl9MT0dfU1lTTE9HXG4gIDk5Olx0XHR0cmlzdGF0ZSBcJiMzNDtTeXNsb2cgcGFja2V0IGxvZ2dpbmdcJiMzNDtcbiAxMDA6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzEyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBgTkZfQ1RfTkVUTElOS2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBORl9DVF9ORVRMSU5LYCBoZXJlLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IGl0IGRlcGVuZHMgb24gYElORVQgJmFtcDsmYW1wOyBORVRGSUxURVJgIOKAkyBwcmV0dHkgc3RhbmRhcmQgc3R1ZmYgZm9yIGFueSBuZXR3b3JrIGZpbHRlcmluZyBmZWF0dXJlLiBBbmQgb2YgY291cnNlLCBpdCYjMzk7cyBhbHNvIHRpZWQgdG8gYE5GX0NPTk5UUkFDS2AuIE1ha2VzIHNlbnNlOyBgY3RuZXRsaW5rYCBoYXMgdG8gd29yayB3aXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBjb25uZWN0aW9uIHRyYWNraW5nIG11c3QgYmUgZW5hYmxlZCwgb3IgYXQgbGVhc3QgYmUgYXZhaWxhYmxlIGluIHRoZSBzYW1lIG1lbnUsIGZvciB0aGlzIHRvIHdvcmsuIEl0IGFsc28gcmVxdWlyZXMgYElQVjZgIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSVB2NiBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBmaWx0ZXJpbmcsIHdoaWNoIGlzIGV4cGVjdGVkLgoKTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gZmlndXJlIG91dCB3aGF0IHVzZXMgdGhpcyB0aGluZywgc28gbGV0JiMzOTtzIGNoZWNrIGNhbGxlcnMgb2YgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoaXMgbW9kdWxlIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQgYW5kIGluIHdoYXQgY29udGV4dHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZsb3csIHNvIGtub3dpbmcgdGhlIGNhbGxlcnMgb2YgdGhpcyBrZXkgZnVuY3Rpb24gaXMgZXNzZW50aWFsIHRvIGdyYXNwaW5nIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMDY2PXN0YXRpYyBpbnQgY3RuZXRsaW5rX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA4NC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMDg1OnN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpmaWx0ZXJfdHVwbGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA4Ni1cdFx0XHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqY3RfdHVwbGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTExNTQ9c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoKHN0cnVjdCBuZl9jb25uICpjdCwgdm9pZCAqZGF0YSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3NS1cdFx0dHVwbGUgPSBuZl9jdF90dXBsZShjdCwgSVBfQ1RfRElSX09SSUdJTkFMKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMTc2Olx0XHRpZiAoIWN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoXHUwMDI2ZmlsdGVyLVx1MDAzZW9yaWcsIHR1cGxlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTExNzctXHRcdFx0XHRcdFx0ICBmaWx0ZXItXHUwMDNlb3JpZ19mbGFncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE4My1cdFx0dHVwbGUgPSBuZl9jdF90dXBsZShjdCwgSVBfQ1RfRElSX1JFUExZKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMTg0Olx0XHRpZiAoIWN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoXHUwMDI2ZmlsdGVyLVx1MDAzZXJlcGx5LCB0dXBsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTg1LVx0XHRcdFx0XHRcdCAgZmlsdGVyLVx1MDAzZXJlcGx5X2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBtYXRjaGluZyBjb25uZWN0aW9uIHRyYWNraW5nIChjb25udHJhY2spIGVudHJpZXMgd2l0aGluIHRoZSBOZXRsaW5rIGZyYW1ld29yay4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaG8mIzM5O3MgdXNpbmcgdGhpcz8mIzM0OyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSB2YWx1YWJsZSBpbnNpZ2h0IGludG8gd2hlcmUgdGhpcyBtYXRjaGluZyBsb2dpYyBpcyBiZWluZyBhcHBsaWVkIGFuZCwgcG90ZW50aWFsbHksIHRoZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGl0LgoKSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAgaXMgaW52b2tlZC4gSSBjYW4mIzM5O3QganVzdCBibGluZGx5IHRyYWNlIHRoZSBleGVjdXRpb24uIEkgbmVlZCB0byB0aGluayBhYm91dCB0aGUgdmFyaW91cyBOZXRsaW5rIG1lc3NhZ2UgdHlwZXMgYW5kIGZpbHRlcnMgdGhhdCBjb3VsZCB0cmlnZ2VyIHRoaXMgbWF0Y2hpbmcuIEZvciBleGFtcGxlLCBhcmUgd2UgZGVhbGluZyB3aXRoIHJlYWRzL3F1ZXJpZXMgb2YgY29ubnRyYWNrIGVudHJpZXMgKGxpa2UgZnJvbSBgbmZjdGAgdXNlcnNwYWNlIHRvb2xzKSwgbW9kaWZpY2F0aW9ucyAoZS5nLiwgcG9saWN5IHVwZGF0ZXMpLCBvciBwZXJoYXBzIGV2ZW4gY29ubmVjdGlvbiBub3RpZmljYXRpb25zPwoKSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBkaWZmZXJlbnQgTmV0bGluayBmYW1pbGllcyBhbmQgdGhlaXIgbWVzc2FnZSB0eXBlcy4gVGhpcyBjb3VsZCBiZSBpbiB0aGUgY29udGV4dCBvZiBuZm5ldGxpbmtfY3RoZWxwZXIgb3IgbmZuZXRsaW5rX2Nvbm50cmFjayBpdHNlbGYuIEkgYWxzbyBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBkaWZmZXJlbnQgcG90ZW50aWFsIGZpbHRlcmluZyBjcml0ZXJpYSB0aGF0IGNvdWxkIGJlIHVzZWQuIFdlIGtub3cgdGhhdCBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAgaXMgaW52b2x2ZWQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBmaWx0ZXIgc3RydWN0dXJlIGxvb2tzIGxpa2UgYW5kIHdoaWNoIE5ldGxpbmsgYXR0cmlidXRlcyBhcmUgYmVpbmcgZXZhbHVhdGVkLiBJIGhhdmUgdG8gbG9vayBpbnRvIHRoZSBmaWx0ZXJpbmcgbG9naWMsIHVuZGVyc3RhbmQgaG93IHNwZWNpZmljIGF0dHJpYnV0ZXMgb2YgYSBjb25udHJhY2sgZW50cnkgKGxpa2Ugc291cmNlL2Rlc3RpbmF0aW9uIElQL3BvcnQsIHByb3RvY29sLCBzdGF0ZSwgZXRjLikgYXJlIGNvbXBhcmVkIGFnYWluc3QgdGhlIHByb3ZpZGVkIGZpbHRlciBjcml0ZXJpYS4KCkkgYWxzbyBoYXZlIHRvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBjb25udHJhY2sgdGFibGUgZHVyaW5nIHRoZXNlIG1hdGNoaW5nIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBlc3BlY2lhbGx5IHdpdGggbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudHMgYW5kIGhvdyB0aGV5IGFmZmVjdCB0aGUgbmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2sgdXNhZ2Ugd2l0aGluIHRoZSBjYWxsIHBhdGggb2YgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2V0IGludG8gdGhlIGNhbGxlcnMgdG8gc2VlIGlmIHRoZXkgYXJlIGRvaW5nIGFueXRoaW5nIGluIHRoZSB3cm9uZyBvcmRlciBvciB3aXRob3V0IHRoZSBwcm9wZXIgcHJvdGVjdGlvbi4KClVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgY29ubnRyYWNrIGFuZCBuZXRmaWx0ZXIgcHJvY2Vzc2luZy4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBrZXkgdG8gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3RuZXRsaW5rX2ZpbHRlcl9tYXRjaFxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMDg1PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpmaWx0ZXJfdHVwbGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTExNTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTE1NDpzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2goc3RydWN0IG5mX2Nvbm4gKmN0LCB2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTExNTUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMjEzPWN0bmV0bGlua19kdW1wX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTI2NC1cdFx0XHR9XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTI2NTpcdFx0XHRpZiAoIWN0bmV0bGlua19maWx0ZXJfbWF0Y2goY3QsIGNiLVx1MDAzZWRhdGEpKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEyNjYtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTU4NT1zdGF0aWMgaW50IGN0bmV0bGlua19mbHVzaF9pdGVyYXRlKHN0cnVjdCBuZl9jb25uICpjdCwgdm9pZCAqZGF0YSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNTg2LXtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNTg3Olx0cmV0dXJuIGN0bmV0bGlua19maWx0ZXJfbWF0Y2goY3QsIGRhdGEpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE1ODgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAxNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIE5ldGxpbmsgSW50ZXJhY3Rpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGFibGUgaXMgYWNjZXNzZWQgYW5kIG1hbmFnZWQgdmlhIG5ldGxpbmsuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aHMgb2YgZnVuY3Rpb25zIGxpa2UgYGN0bmV0bGlua19kdW1wX3RhYmxlYCBhbmQgYGN0bmV0bGlua19mbHVzaF9pdGVyYXRlYC4gVGhlc2UgYXJlIGtleSBlbnRyeSBwb2ludHMsIHNvIHRoZXkmIzM5O3JlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBmaWd1cmluZyBvdXQgaG93IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUgY29ubnRyYWNrIGRhdGEgc3RydWN0dXJlcy4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGhhdmUgdG8gZm9sbG93IHRoZSBjYWxscyBmcm9tIHRob3NlIGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHBpY3R1cmUgb2YgaG93IGNvbm5lY3Rpb24gdHJhY2tpbmcgZGF0YSBpcyBkdW1wZWQgdG8gdXNlciBzcGFjZSwgYW5kIGhvdyBmbHVzaGluZyBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgb3ZlciBuZXRsaW5rLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGV8Y3RuZXRsaW5rX2ZsdXNoX2l0ZXJhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTIxMj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTIxMzpjdG5ldGxpbmtfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTIxNC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE1NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGN0X25sYV9wb2xpY3lbQ1RBX01BWCYjNDM7MV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE1ODQtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTU4NTpzdGF0aWMgaW50IGN0bmV0bGlua19mbHVzaF9pdGVyYXRlKHN0cnVjdCBuZl9jb25uICpjdCwgdm9pZCAqZGF0YSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNTg2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTU5MD1zdGF0aWMgaW50IGN0bmV0bGlua19mbHVzaF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjA4LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjE2MDk6XHRuZl9jdF9pdGVyYXRlX2NsZWFudXBfbmV0KGN0bmV0bGlua19mbHVzaF9pdGVyYXRlLCBcdTAwMjZpdGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjEwLVx0a2ZyZWUoZmlsdGVyKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTY2OD1zdGF0aWMgaW50IGN0bmV0bGlua19nZXRfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2ODItXHRcdFx0LnN0YXJ0ID0gY3RuZXRsaW5rX3N0YXJ0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjE2ODM6XHRcdFx0LmR1bXAgPSBjdG5ldGxpbmtfZHVtcF90YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjg0LVx0XHRcdC5kb25lID0gY3RuZXRsaW5rX2RvbmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzk4CgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDMyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb25udHJhY2sgTmV0bGluayBNb2R1bGUgZm9yIEZ1enppbmcqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIGNvbm50cmFjaywgYW5kIG15IHByaW1hcnkgdGFyZ2V0cyBhcmUgdGhlc2UgZnVuY3Rpb25zOiBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAsIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoYCwgYGN0bmV0bGlua19kdW1wX3RhYmxlYCwgYGN0bmV0bGlua19mbHVzaF9jb25udHJhY2tgLCBhbmQgYGN0bmV0bGlua19nZXRfY29ubnRyYWNrYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGN0bmV0bGlua19mbHVzaF9jb25udHJhY2tgIGlzIGFjdHVhbGx5IGp1c3QgYSB3cmFwcGVyIGZvciBkZWxldGlvbiwgb3IgcGVyaGFwcyBgY3RuZXRsaW5rX2RlbF9jb25udHJhY2tgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0LCBidXQgdGhlIGltcG9ydGFudCB0aGluZyBpcyB0aG9zZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgSSB3YW50IHRvIHN0cmVzcy4KCkkmIzM5O3ZlIGFsc28gdmVyaWZpZWQgdGhhdCBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAgaXMgaW5kZWVkIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cgZm9yIHRoZSBmdXp6aW5nIHNldHVwLiBJIGNhbiBwcm9jZWVkIGtub3dpbmcgdGhlIHNjb3BlLgoKTXkgYmFzZSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCByZXF1aXJlIGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS2AsIGBJUFY2YCwgYW5kIGBORVRGSUxURVJgIHRvIGJlIGVuYWJsZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGFsbCBwcmVzZW50IGluIHRoZSBlbnZpcm9ubWVudCBJJiMzOTttIGZ1enppbmcuCgpNeSBhbmFseXNpcyBoYXMgbGVkIG1lIHRvIGJlbGlldmUgdGhhdCB0aGlzIG1vZHVsZSBpcyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgcG90ZW50aWFsIGV4cG9zdXJlIHN1cmZhY2UuIFNvLCBJIGFtIG1hcmtpbmcgdGhpcyBmdXp6IHRhcmdldCBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgYW5kIEkgYW0gc2V0dGluZyB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhY2NvcmRpbmdseS4gSSBjYW4mIzM5O3QgYmUgbW9yZSBjb25jaXNlIHRoYW4gdGhhdCwgc28gSSB3aWxsIG5vdyBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZSYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19kdW1wX3RhYmxlJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19mbHVzaF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBib29sZWFuIGludmVydGVkIGxvZ2ljIGJ1ZyBpbiBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKCkgd2hlbiBtYXRjaGluZyBJUHY2IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIGJ5IHJlcGxhY2luZyAhaXB2Nl9hZGRyX2NtcCgpIHdpdGggIWlwdjZfYWRkcl9lcXVhbCgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGxvZ2ljIGluIHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIHN1YnN5c3RlbSwgd2hpY2ggaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZSYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19kdW1wX3RhYmxlJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19mbHVzaF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBib29sZWFuIGludmVydGVkIGxvZ2ljIGJ1ZyBpbiBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKCkgd2hlbiBtYXRjaGluZyBJUHY2IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIGJ5IHJlcGxhY2luZyAhaXB2Nl9hZGRyX2NtcCgpIHdpdGggIWlwdjZfYWRkcl9lcXVhbCgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGxvZ2ljIGluIHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIHN1YnN5c3RlbSwgd2hpY2ggaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgYnVnIGluIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKClgIHdoZXJlIGAhaXB2Nl9hZGRyX2NtcCgpYCAod2hpY2ggcmV0dXJucyAwIG9uIG1hdGNoKSB3YXMgaW5jb3JyZWN0bHkgdXNlZCBpbnN0ZWFkIG9mIGAhaXB2Nl9hZGRyX2VxdWFsKClgICh3aGljaCByZXR1cm5zIHRydWUgb24gbWF0Y2gpLCBjYXVzaW5nIElQdjYgYWRkcmVzcyBmaWx0ZXJpbmcgZHVyaW5nIGNvbm50cmFjayBuZXRsaW5rIGR1bXBpbmcgdG8gcmVqZWN0IG1hdGNoZXMgYW5kIGFjY2VwdCBtaXNtYXRjaGVzLiBcblxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgb25seSBhIGJvb2xlYW4gZXF1YWxpdHkgY2hlY2sgYmV0d2VlbiBleGlzdGluZywgZnVsbHkgaW5pdGlhbGl6ZWQgSVB2NiBhZGRyZXNzZXMgaW4gY29ubnRyYWNrIHR1cGxlcyAodGhlIGZpbHRlciBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigpYCBhbmQgdGhlIGNvbm50cmFjayB0dXBsZSBpcyBwb3B1bGF0ZWQgdXBvbiBjb25uZWN0aW9uIHRyYWNraW5nKS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcHlpbmcgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGFmZmVjdGVkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYzEyNjA0ZjY1MGM5NzczYTQ2OWUyMWUyOWVkNGE2NGY3NDc3MzZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNzoxNDowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA1NzlhZGEwNjNiMWJiLi5lZjQ4MzY5OTY1OWJmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC0xMDk4LDEzICYjNDM7MTA5OCwxMyBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLAogCQlicmVhazsKIAljYXNlIE5GUFJPVE9fSVBWNjoKIAkJaWYgKChmbGFncyAmYW1wOyBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpICZhbXA7JmFtcDsKLQkJICAgICFpcHY2X2FkZHJfY21wKCZhbXA7ZmlsdGVyX3R1cGxlLSZndDtzcmMudTMuaW42LAotCQkJCSAgICZhbXA7Y3RfdHVwbGUtJmd0O3NyYy51My5pbjYpKQomIzQzOwkJICAgICFpcHY2X2FkZHJfZXF1YWwoJmFtcDtmaWx0ZXJfdHVwbGUtJmd0O3NyYy51My5pbjYsCiYjNDM7CQkJCSAgICAgJmFtcDtjdF90dXBsZS0mZ3Q7c3JjLnUzLmluNikpCiAJCQlyZXR1cm4gMDsKIAogCQlpZiAoKGZsYWdzICZhbXA7IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfRFNUKSkgJmFtcDsmYW1wOwotCQkgICAgIWlwdjZfYWRkcl9jbXAoJmFtcDtmaWx0ZXJfdHVwbGUtJmd0O2RzdC51My5pbjYsCi0JCQkJICAgJmFtcDtjdF90dXBsZS0mZ3Q7ZHN0LnUzLmluNikpCiYjNDM7CQkgICAgIWlwdjZfYWRkcl9lcXVhbCgmYW1wO2ZpbHRlcl90dXBsZS0mZ3Q7ZHN0LnUzLmluNiwKJiM0MzsJCQkJICAgICAmYW1wO2N0X3R1cGxlLSZndDtkc3QudTMuaW42KSkKIAkJCXJldHVybiAwOwogCQlicmVhazsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvbm50cmFjayBOZXRsaW5rIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHJlbGF0ZWQgdG8gSVB2NiBhZGRyZXNzIGNvbXBhcmlzb24gd2l0aGluIHRoZSBuZXRmaWx0ZXIgY29ubnRyYWNrIG5ldGxpbmsgbW9kdWxlLiBUaGUgZGlmZiBzaG93cyBjaGFuZ2VzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGUgc3dpdGNoIGZyb20gYGlwdjZfYWRkcl9jbXBgIHRvIGBpcHY2X2FkZHJfZXF1YWxgLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGJ1ZyBmaXggb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gaG93IElQdjYgYWRkcmVzc2VzIGFyZSBjb21wYXJlZCBkdXJpbmcgZmlsdGVyaW5nLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGludGVudCBoZXJlOyBteSBleHBlcnRpc2Ugc3VnZ2VzdHMgdGhhdCB0aGlzIGlzIG1vcmUgdGhhbiBqdXN0IGEgdHJpdmlhbCBjaGFuZ2UuIFRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbm50cmFjayB0YWJsZSBsb29rdXBzIGFuZCBmaWx0ZXJpbmcgcnVsZXMgYXJlIHNpZ25pZmljYW50LiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhlIG9sZGVyIGZ1bmN0aW9uIGNhbGwgd2FzIGluY29ycmVjdCwgYW5kIGhvdyB0aGUgbmV3IGZ1bmN0aW9uIGNhbGwgYWZmZWN0cyBvdGhlciBjb21wYXJpc29ucy4gSSBzdXNwZWN0IHRoZXJlIG1heSBoYXZlIGJlZW4gYW4gdW5pbnRlbmRlZCBiZWhhdmlvciBjaGFuZ2Ugd2l0aCBhIHN1YnRsZSBkaWZmZXJlbmNlIGluIHRoZSBwcmV2aW91cyBhbmQgbmV3IGZ1bmN0aW9uIGNhbGxzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBhcm91bmQgbGluZSAxMDk4LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgbG9naWMgYW5kIHVuZGVyc3RhbmQgd2h5IHRoaXMgc3BlY2lmaWMgY2hhbmdlIHdhcyBtYWRlIHVzaW5nIGByZWFkLWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0aWYgKGZpbHRlcilcbjEwODE6XHRcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcbjEwODI6XHRcdHJldHVybiAwO1xuMTA4MzpcdH1cbjEwODQ6XHRcbjEwODU6XHRzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLFxuMTA4NjpcdFx0XHRcdFx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpjdF90dXBsZSxcbjEwODc6XHRcdFx0XHRcdFx0dV9pbnQzMl90IGZsYWdzLCBpbnQgZmFtaWx5KVxuMTA4ODpcdHtcbjEwODk6XHRcdHN3aXRjaCAoZmFtaWx5KSB7XG4xMDkwOlx0XHRjYXNlIE5GUFJPVE9fSVBWNDpcbjEwOTE6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9TUkMpKSBcdTAwMjZcdTAwMjZcbjEwOTI6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2VzcmMudTMuaXAgIT0gY3RfdHVwbGUtXHUwMDNlc3JjLnUzLmlwKVxuMTA5MzpcdFx0XHRcdHJldHVybiAgMDtcbjEwOTQ6XHRcbjEwOTU6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcdTAwMjZcdTAwMjZcbjEwOTY6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2Vkc3QudTMuaXAgIT0gY3RfdHVwbGUtXHUwMDNlZHN0LnUzLmlwKVxuMTA5NzpcdFx0XHRcdHJldHVybiAgMDtcbjEwOTg6XHRcdFx0YnJlYWs7XG4xMDk5Olx0XHRjYXNlIE5GUFJPVE9fSVBWNjpcbjExMDA6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9TUkMpKSBcdTAwMjZcdTAwMjZcbjExMDE6XHRcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pbjYsXG4xMTAyOlx0XHRcdFx0XHQgICAgIFx1MDAyNmN0X3R1cGxlLVx1MDAzZXNyYy51My5pbjYpKVxuMTEwMzpcdFx0XHRcdHJldHVybiAwO1xuMTEwNDpcdFxuMTEwNTpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX0RTVCkpIFx1MDAyNlx1MDAyNlxuMTEwNjpcdFx0XHQgICAgIWlwdjZfYWRkcl9lcXVhbChcdTAwMjZmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUzLmluNixcbjExMDc6XHRcdFx0XHRcdCAgICAgXHUwMDI2Y3RfdHVwbGUtXHUwMDNlZHN0LnUzLmluNikpXG4xMTA4Olx0XHRcdFx0cmV0dXJuIDA7XG4xMTA5Olx0XHRcdGJyZWFrO1xuMTExMDpcdFx0fVxuMTExMTpcdFxuMTExMjpcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19OVU0pKSBcdTAwMjZcdTAwMjZcbjExMTM6XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnByb3RvbnVtICE9IGN0X3R1cGxlLVx1MDAzZWRzdC5wcm90b251bSlcbjExMTQ6XHRcdFx0cmV0dXJuIDA7XG4xMTE1Olx0XG4xMTE2Olx0XHRzd2l0Y2ggKGN0X3R1cGxlLVx1MDAzZWRzdC5wcm90b251bSkge1xuMTExNzpcdFx0Y2FzZSBJUFBST1RPX1RDUDpcbjExMTg6XHRcdGNhc2UgSVBQUk9UT19VRFA6XG4xMTE5Olx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fU1JDX1BPUlQpKSBcdTAwMjZcdTAwMjZcbjExMjA6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2VzcmMudS50Y3AucG9ydCAhPSBjdF90dXBsZS1cdTAwM2VzcmMudS50Y3AucG9ydClcbjExMjE6XHRcdFx0XHRyZXR1cm4gMDtcbjExMjI6XHRcbjExMjM6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19EU1RfUE9SVCkpIFx1MDAyNlx1MDAyNlxuMTEyNDpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51LnRjcC5wb3J0ICE9IGN0X3R1cGxlLVx1MDAzZWRzdC51LnRjcC5wb3J0KVxuMTEyNTpcdFx0XHRcdHJldHVybiAwO1xuMTEyNjpcdFx0XHRicmVhaztcbjExMjc6XHRcdGNhc2UgSVBQUk9UT19JQ01QOlxuMTEyODpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBfVFlQRSkpIFx1MDAyNlx1MDAyNlxuMTEyOTpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51LmljbXAudHlwZSAhPSBjdF90dXBsZS1cdTAwM2Vkc3QudS5pY21wLnR5cGUpXG4xMTMwOlx0XHRcdFx0cmV0dXJuIDA7XG4xMTMxOlx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUF9DT0RFKSkgXHUwMDI2XHUwMDI2XG4xMTMyOlx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUuaWNtcC5jb2RlICE9IGN0X3R1cGxlLVx1MDAzZWRzdC51LmljbXAuY29kZSlcbjExMzM6XHRcdFx0XHRyZXR1cm4gMDtcbjExMzQ6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QX0lEKSkgXHUwMDI2XHUwMDI2XG4xMTM1Olx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlc3JjLnUuaWNtcC5pZCAhPSBjdF90dXBsZS1cdTAwM2VzcmMudS5pY21wLmlkKVxuMTEzNjpcdFx0XHRcdHJldHVybiAwO1xuMTEzNzpcdFx0XHRicmVhaztcbjExMzg6XHRcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4xMTM5Olx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUFY2X1RZUEUpKSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBMb2dpYyBGbGF3IGluIElQdjYgQWRkcmVzcyBDb21wYXJpc29ucyoqCgpPa2F5LCBsZXQmIzM5O3MgdHJhY2UgdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGlwdjZfYWRkcl9jbXBgIGFuZCBgaXB2Nl9hZGRyX2VxdWFsYC4gUmlnaHQsIGBpcHY2X2FkZHJfY21wYCBpcyBhIGJpdCBsaWtlIGBtZW1jbXBgOyBpdCByZXR1cm5zIDAgaWYgdGhlIGFkZHJlc3NlcyBhcmUgaWRlbnRpY2FsLiBCdXQgaG9sZCBvbi4uLiBpZiBgaXB2Nl9hZGRyX2NtcChhMSwgYTIpYCByZXR1cm5lZCAwIG9uIGVxdWFsaXR5LCB0aGVuIGAhaXB2Nl9hZGRyX2NtcGAgd291bGQgZXZhbHVhdGUgdG8gdHJ1ZSAqd2hlbiB0aGUgYWRkcmVzc2VzIHdlcmUgZXF1YWwqISBJIHNlZSB0aGUgcHJvYmxlbS4gQmVmb3JlLCB3aGVuIHRoZSBhZGRyZXNzZXMgbWF0Y2hlZCAobWVhbmluZyBgaXB2Nl9hZGRyX2NtcGAgd2FzIDApLCBgIWlwdjZfYWRkcl9jbXBgIHdhcyAxLCBzbyB0aGUgZnVuY3Rpb24gd291bGQgcmV0dXJuIDAsIGVmZmVjdGl2ZWx5IHJlamVjdGluZyB0aGUgbWF0Y2ghCgpOb3csIGBpcHY2X2FkZHJfZXF1YWwoYTEsIGEyKWAgYmVoYXZlcyBtb3JlIGludHVpdGl2ZWx5LCByZXR1cm5pbmcgdHJ1ZSAobm9uLXplcm8pIG9uIGVxdWFsaXR5IGFuZCBmYWxzZSAoemVybykgb3RoZXJ3aXNlLiBUaGlzIG1lYW5zIGAhaXB2Nl9hZGRyX2VxdWFsYCByZXR1cm5zIHRydWUgaWYgYWRkcmVzc2VzIGFyZSBOT1QgZXF1YWwsIHdoaWNoIGlzIGFsc28gYSByZWplY3Rpb24uCgpTbywgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIHRoZSB1c2Ugb2YgYCFpcHY2X2FkZHJfY21wYCB3YXMgYSBjbGFzc2ljIGludmVydGVkIGxvZ2ljIGJ1ZyB3aXRoaW4gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGlwdjZfYWRkcl9jbXBgIGFnYWluLCBqdXN0IHRvIGJlIHN1cmUuIEkmIzM5O2xsIGZpbmQgaXQgaW4gYGluY2x1ZGUvbmV0L2lwdjYuaGAgb3Igc29tZXdoZXJlIHNpbWlsYXIgdG8gY29uZmlybSB0aGlzIGlzIHJlYWxseSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9hZGRyX2NtcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYz00NTY9c3RhdGljIGludCBjb21wYXJlX25ldGRldl9hbmRfaXAoaW50IGlmaW5kZXhfYSwgc3RydWN0IHNvY2thZGRyICpzYSxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy00NzgtXHQgICAgX19idWlsdGluX29iamVjdF9zaXplKHNhLCAwKSBcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM6NDc5Olx0XHRyZXR1cm4gaXB2Nl9hZGRyX2NtcChcdTAwMjYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYSktXHUwMDNlc2luNl9hZGRyLFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMtNDgwLVx0XHRcdFx0ICAgICBcdTAwMjYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYiktXHUwMDNlc2luNl9hZGRyKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYz0xMzY1PXN0YXRpYyBpbnQgY21hX2FkZHJfY21wKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc3JjLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdClcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy0xMzc4LVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM6MTM3OTpcdFx0aWYgKGlwdjZfYWRkcl9jbXAoXHUwMDI2c3JjX2FkZHI2LVx1MDAzZXNpbjZfYWRkcixcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTEzODAtXHRcdFx0XHRcdCAgXHUwMDI2ZHN0X2FkZHI2LVx1MDAzZXNpbjZfYWRkcikpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ycGMuYz04NTc9c3RydWN0IGZibmljX2lwX2FkZHIgKl9fZmJuaWNfaXA2X3N5bmMoc3RydWN0IGZibmljX2RldiAqZmJkLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcnBjLmMtOTE0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ycGMuYzo5MTU6XHRcdGlmIChpcHY2X2FkZHJfY21wKFx1MDAyNmlwX2FkZHItXHUwMDNldmFsdWUsIGFkZHIpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ycGMuYy05MTYtXHRcdFx0Y29udGludWU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuYz0xOTg2PWl3bF9tbGRfc2VuZF9wcm90b19vZmZsb2FkKHN0cnVjdCBpd2xfbWxkICptbGQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuYy0yMDM4LVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuX25zYyBcdTAwMjZcdTAwMjYgaiBcdTAwM2MgYzsgaiYjNDM7JiM0MzspXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kMy5jOjIwMzk6XHRcdFx0aWYgKGlwdjZfYWRkcl9jbXAoXHUwMDI2bnNjW2pdLmRlc3RfaXB2Nl9hZGRyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuYy0yMDQwLVx0XHRcdFx0XHQgIFx1MDAyNnNvbGljaXRlZF9hZGRyKSA9PSAwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29mZmxvYWRpbmcuYz0yOT1pbnQgaXdsX212bV9zZW5kX3Byb3RvX29mZmxvYWQoc3RydWN0IGl3bF9tdm0gKm12bSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9vZmZsb2FkaW5nLmMtMTAzLVx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGM7IGomIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vb2ZmbG9hZGluZy5jOjEwNDpcdFx0XHRcdGlmIChpcHY2X2FkZHJfY21wKFx1MDAyNm5zY1tqXS5kZXN0X2lwdjZfYWRkcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29mZmxvYWRpbmcuYy0xMDUtXHRcdFx0XHRcdFx0ICBcdTAwMjZzb2xpY2l0ZWRfYWRkcikgPT0gMClcbi0tXG5pbmNsdWRlL25ldC9pcHY2Lmg9NTAwPXN0YXRpYyBpbmxpbmUgX191MzIgaXB2Nl9pZmFjZV9zY29wZV9pZChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGludCBpZmFjZSlcbi0tXG5pbmNsdWRlL25ldC9pcHY2LmgtNTA0LVxuaW5jbHVkZS9uZXQvaXB2Ni5oOjUwNTpzdGF0aWMgaW5saW5lIGludCBpcHY2X2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTEsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTIpXG5pbmNsdWRlL25ldC9pcHY2LmgtNTA2LXtcbi0tXG5uZXQvYmx1ZXRvb3RoLzZsb3dwYW4uYz0xNDA9c3RhdGljIGlubGluZSBzdHJ1Y3QgbG93cGFuX3BlZXIgKnBlZXJfbG9va3VwX2RzdChzdHJ1Y3QgbG93cGFuX2J0bGVfZGV2ICpkZXYsXG4tLVxubmV0L2JsdWV0b290aC82bG93cGFuLmMtMTgxLVxubmV0L2JsdWV0b290aC82bG93cGFuLmM6MTgyOlx0XHRpZiAoIWlwdjZfYWRkcl9jbXAoXHUwMDI2cGVlci1cdTAwM2VwZWVyX2FkZHIsIG5leHRob3ApKSB7XG5uZXQvYmx1ZXRvb3RoLzZsb3dwYW4uYy0xODMtXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz00MTU9dm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00NDgtXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjQ0OTpcdGlmICghaXB2Nl9hZGRyX2NtcChzYWRkciwgZGFkZHIpKSB7XG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ1MC1cdFx0LyogcHJldmVudCBmbG9vZGluZyB0byBuZWlnaCBzdXBwcmVzcyBwb3J0cyAqL1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTM0Mz1icl9tdWx0aWNhc3RfZmluZF9ncm91cF9zcmMoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcsIHN0cnVjdCBicl9pcCAqaXApXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMzU1LVx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShlbnQsIFx1MDAyNnBnLVx1MDAzZXNyY19saXN0LCBub2RlKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxMzU2Olx0XHRcdGlmICghaXB2Nl9hZGRyX2NtcChcdTAwMjZlbnQtXHUwMDNlYWRkci5zcmMuaXA2LCBcdTAwMjZpcC1cdTAwM2VzcmMuaXA2KSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTM1Ny1cdFx0XHRcdHJldHVybiBlbnQ7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zMTc5PXN0YXRpYyBib29sIGJyX211bHRpY2FzdF9zZWxlY3RfcXVlcmllcihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzIwMC1cdFx0b3RoZXJfdGltZXIgPSBcdTAwMjZicm1jdHgtXHUwMDNlaXA2X290aGVyX3F1ZXJ5LnRpbWVyO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozMjAxOlx0XHRpZiAoaXB2Nl9hZGRyX2NtcChcdTAwMjZzYWRkci1cdTAwM2VzcmMuaXA2LCBcdTAwMjZxdWVyaWVyLVx1MDAzZWFkZHIuc3JjLmlwNikgXHUwMDNjPSAwKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMjAyLVx0XHRcdGdvdG8gdXBkYXRlO1xuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yNzM9c3RhdGljIGlubGluZSBpbnQgbmhfY29tcChzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgZmliX2luZm8gKm9maSlcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMzAzLVx0XHRpZiAobmgtXHUwMDNlZmliX25oX2d3X2ZhbWlseSA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzozMDQ6XHRcdCAgICBpcHY2X2FkZHJfY21wKFx1MDAyNm5oLVx1MDAzZWZpYl9uaF9ndzYsIFx1MDAyNm9uaC1cdTAwM2VmaWJfbmhfZ3c2KSlcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0zMDUtXHRcdFx0cmV0dXJuIC0xO1xuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz03NDI9c3RhdGljIGludCBmaWJfZ2V0X25ocyhzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgcnRuZXh0aG9wICpydG5oLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy04MzMtXHRcdCAgICAoY2ZnLVx1MDAzZWZjX2d3X2ZhbWlseSA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo4MzQ6XHRcdCAgICAgaXB2Nl9hZGRyX2NtcChcdTAwMjZuaC1cdTAwM2VmaWJfbmhfZ3c2LCBcdTAwMjZjZmctXHUwMDNlZmNfZ3c2KSkpIHtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy04MzUtXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz05Mjg9aW50IGZpYl9uaF9tYXRjaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIHN0cnVjdCBmaWJfaW5mbyAqZmksXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTk3NC1cdFx0aWYgKGNmZy1cdTAwM2VmY19nd19mYW1pbHkgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6OTc1Olx0XHQgICAgaXB2Nl9hZGRyX2NtcChcdTAwMjZjZmctXHUwMDNlZmNfZ3c2LCBcdTAwMjZuaC1cdTAwM2VmaWJfbmhfZ3c2KSlcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05NzYtXHRcdFx0cmV0dXJuIDE7XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEwMzQtXHRcdFx0XHRcdGlmIChjZmcyLmZjX2d3X2ZhbWlseSAhPSBBRl9JTkVUNiB8fFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEwMzU6XHRcdFx0XHRcdCAgICBpcHY2X2FkZHJfY21wKFx1MDAyNmNmZzIuZmNfZ3c2LFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEwMzYtXHRcdFx0XHRcdFx0XHQgIFx1MDAyNm5oLVx1MDAzZWZpYl9uaF9ndzYpKVxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9NTA5PXN0YXRpYyBib29sIGZvdV9jZmdfY21wKHN0cnVjdCBmb3UgKmZvdSwgc3RydWN0IGZvdV9jZmcgKmNmZylcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTUyNy1cdH0gZWxzZSB7XG5uZXQvaXB2NC9mb3VfY29yZS5jOjUyODpcdFx0aWYgKGlwdjZfYWRkcl9jbXAoXHUwMDI2c2stXHUwMDNlc2tfdjZfcmN2X3NhZGRyLCBcdTAwMjZ1ZHBfY2ZnLVx1MDAzZWxvY2FsX2lwNikgfHxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6NTI5Olx0XHQgICAgaXB2Nl9hZGRyX2NtcChcdTAwMjZzay1cdTAwM2Vza192Nl9kYWRkciwgXHUwMDI2dWRwX2NmZy1cdTAwM2VwZWVyX2lwNikpXG5uZXQvaXB2NC9mb3VfY29yZS5jLTUzMC1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTQ0Nz1zdGF0aWMgaW50IHRjcF9hb192ZXJpZnlfaXB2NihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfYW9fYWRkICpjbWQsXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMTQ5My1cdFx0aXB2Nl9hZGRyX3ByZWZpeChcdTAwMjZwZngsIGFkZHIsIHByZWZpeCk7XG5uZXQvaXB2NC90Y3BfYW8uYzoxNDk0Olx0XHRpZiAoaXB2Nl9hZGRyX2NtcChcdTAwMjZwZngsIGFkZHIpKVxubmV0L2lwdjQvdGNwX2FvLmMtMTQ5NS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDkyPXN0YXRpYyBpbnQgdGNwX2FvX2NvcHlfbWt0c190b191c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0yMTkxLVx0XHRcdFx0aXB2Nl9hZGRyX3ByZWZpeChcdTAwMjZwZngsIGFkZHI2LCBvcHRfaW4ucHJlZml4KTtcbm5ldC9pcHY0L3RjcF9hby5jOjIxOTI6XHRcdFx0XHRpZiAoaXB2Nl9hZGRyX2NtcChcdTAwMjZwZngsIGFkZHI2KSlcbm5ldC9pcHY0L3RjcF9hby5jLTIxOTMtXHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jPTk2PWlwNnRfc25wdF90ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTlBULmMtMTEyLVx0XHRpcHY2X2FkZHJfcHJlZml4KFx1MDAyNmJvdW5jZWRfcGZ4LCBcdTAwMjZib3VuY2VkX2hkci1cdTAwM2VkYWRkciwgbnB0LVx1MDAzZXNyY19wZnhfbGVuKTtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jOjExMzpcdFx0aWYgKGlwdjZfYWRkcl9jbXAoXHUwMDI2Ym91bmNlZF9wZngsIFx1MDAyNm5wdC1cdTAwM2VzcmNfcGZ4LmluNikgPT0gMClcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jLTExNC1cdFx0XHRpcDZ0X25wdF9tYXBfcGZ4KG5wdCwgXHUwMDI2Ym91bmNlZF9oZHItXHUwMDNlZGFkZHIpO1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jPTEyMT1pcDZ0X2RucHRfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jLTEzNy1cdFx0aXB2Nl9hZGRyX3ByZWZpeChcdTAwMjZib3VuY2VkX3BmeCwgXHUwMDI2Ym91bmNlZF9oZHItXHUwMDNlc2FkZHIsIG5wdC1cdTAwM2VzcmNfcGZ4X2xlbik7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYzoxMzg6XHRcdGlmIChpcHY2X2FkZHJfY21wKFx1MDAyNmJvdW5jZWRfcGZ4LCBcdTAwMjZucHQtXHUwMDNlc3JjX3BmeC5pbjYpID09IDApXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYy0xMzktXHRcdFx0aXA2dF9ucHRfbWFwX3BmeChucHQsIFx1MDAyNmJvdW5jZWRfaGRyLVx1MDAzZXNhZGRyKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM9MzgxPXN0YXRpYyBib29sIG5mX25hdF9pbmV0X2luX3JhbmdlKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTM4Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYzozODg6XHRyZXR1cm4gaXB2Nl9hZGRyX2NtcChcdTAwMjZ0LVx1MDAzZXNyYy51My5pbjYsIFx1MDAyNnJhbmdlLVx1MDAzZW1pbl9hZGRyLmluNikgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjM4OTpcdCAgICAgICBpcHY2X2FkZHJfY21wKFx1MDAyNnQtXHUwMDNlc3JjLnUzLmluNiwgXHUwMDI2cmFuZ2UtXHUwMDNlbWF4X2FkZHIuaW42KSBcdTAwM2M9IDA7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMzkwLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jPTkyMD1uZl9uYXRfaXB2Nl9sb2NhbF9pbih2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtOTMyLVx0Lyogc2VlIG5mX25hdF9pcHY0X2xvY2FsX2luICovXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjkzMzpcdGlmIChpcHY2X2FkZHJfY21wKFx1MDAyNnNhZGRyLCBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyKSB8fFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy05MzQtXHQgICAgbmZfbmF0X2luZXRfcG9ydF93YXNfbWFuZ2xlZChza2IsIHNrLVx1MDAzZXNrX2Rwb3J0KSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jPTk0MT1uZl9uYXRfaXB2Nl9pbih2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtOTQ5LVx0aWYgKHZlcmRpY3QgIT0gTkZfRFJPUCBcdTAwMjZcdTAwMjYgdmVyZGljdCAhPSBORl9TVE9MRU4gXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjk1MDpcdCAgICBpcHY2X2FkZHJfY21wKFx1MDAyNmRhZGRyLCBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyKSlcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtOTUxLVx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbi0tXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuYz0xODU9aW50IG5ldGxibF9hZjZsaXN0X2FkZChzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKmVudHJ5LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuLS1cbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5jLTIwMC1cdFx0aWYgKGl0ZXItXHUwMDNldmFsaWQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuYzoyMDE6XHRcdCAgICBpcHY2X2FkZHJfY21wKFx1MDAyNmVudHJ5LVx1MDAzZW1hc2ssIFx1MDAyNml0ZXItXHUwMDNlbWFzaykgXHUwMDNlIDApIHtcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5jLTIwMi1cdFx0XHRfX2xpc3RfYWRkX3JjdShcdTAwMjZlbnRyeS1cdTAwM2VsaXN0LFxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jPTEyMTc9c3RhdGljIHN0cnVjdCBza19idWZmICpjYWtlX2Fja19maWx0ZXIoc3RydWN0IGNha2Vfc2NoZWRfZGF0YSAqcSxcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjgzLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTI4NDpcdFx0XHRpZiAoaXB2Nl9hZGRyX2NtcChcdTAwMjZpcHY2aF9jaGVjay1cdTAwM2VzYWRkciwgXHUwMDI2aXB2NmgtXHUwMDNlc2FkZHIpIHx8XG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxMjg1Olx0XHRcdCAgICBpcHY2X2FkZHJfY21wKFx1MDAyNmlwdjZoX2NoZWNrLVx1MDAzZWRhZGRyLCBcdTAwMjZpcHY2aC1cdTAwM2VkYWRkcikpXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjg2LVx0XHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MjQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQdjYgQWRkcmVzcyBDb21wYXJpc29uIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBJUHY2IGFkZHJlc3MgY29tcGFyaXNvbiBpc3N1ZS4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbiBgaW5jbHVkZS9uZXQvaXB2Ni5oYC4gIEkgc2VlIGBpcHY2X2FkZHJfY21wYCwgd2hpY2ggdXNlcyBhIGBtZW1jbXBgIGZvciBhIGJ5dGUtYnktYnl0ZSBjb21wYXJpc29uLCBhbmQgYGlwdjZfYWRkcl9lcXVhbGAsIHdoaWNoIHJlbGllcyBvbiBYT1Igb3BlcmF0aW9ucyBvbiAzMi1iaXQgc2VnbWVudHMuICBUaGUgdXNlIG9mIGBpcHY2X2FkZHJfZXF1YWxgIGlzIHByb2JhYmx5IHRvIG9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgYWRkcmVzc2VzIGFyZSBlcXVhbCwgYnV0IEkgbmVlZCB0byBjb25zaWRlciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGNvZGUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBwcm9ibGVtIGluIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlYC4gIEluaXRpYWxseSwgaXQgd2FzIHVzaW5nIGAhaXB2Nl9hZGRyX2NtcGAgb24gYGZpbHRlcl90dXBsZS0mZ3Q7c3JjLnUzLmluNmAgYW5kIGBjdF90dXBsZS0mZ3Q7c3JjLnUzLmluNmAuIFRoYXQmIzM5O3MgZXF1aXZhbGVudCB0byBgbWVtY21wKC4uLikgPT0gMGAuIFNvLCBpZiB0aGUgYWRkcmVzc2VzICp3ZXJlKiBlcXVhbCwgdGhlIGBpZmAgY29uZGl0aW9uIHdhcyB0cnVlLCBsZWFkaW5nIHRvIGEgZnVuY3Rpb24gcmV0dXJuIG9mIGAwYCB3aGljaCwgaW4gdGhpcyBjb250ZXh0LCB0cmFuc2xhdGVzIHRvIE5PIE1BVENIIOKAkyBtZWFuaW5nIHRoZSBtYXRjaGluZyBlbnRyeSB3YXMgd3JvbmdseSBiZWluZyByZWplY3RlZCwgYW5kICpub24qLW1hdGNoaW5nIGVudHJpZXMgd2VyZSBiZWluZyBhbGxvd2VkLiBBIHByZXR0eSBjcml0aWNhbCBidWchCgpUaGUgZml4LCBhcyBJIHNlZSBpdCwgc3dpdGNoZXMgdG8gYCFpcHY2X2FkZHJfZXF1YWwoLi4uKWAuIE5vdywgaWYgdGhlIGFkZHJlc3NlcyBhcmUgKm5vdCogZXF1YWwsIGl0IHJldHVybnMgMCAocmVqZWN0IGVudHJ5KS4gVGhpcyBtYWtlcyBhIGxvdCBtb3JlIHNlbnNlLCBhbmQgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggZm9yIGZpbHRlcmluZyBiYXNlZCBvbiBub24tZXF1YWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBsb2dpYyB3aXRoaW4gdGhlIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlYCBmdW5jdGlvbiB0byBjb25maXJtIGl0LCBidXQgdGhpcyBjaGFuZ2Ugc2VlbXMgcmlnaHQuCgpOZXh0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB3aGVyZSBgZmlsdGVyX3R1cGxlYCBhbmQgYGN0X3R1cGxlYCBhcmUgY29taW5nIGZyb20gYW5kIGhvdyBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAgaXMgYWN0dWFsbHkgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgY29udGV4dCB0byBmdWxseSBhcHByZWNpYXRlIHRoZSBwb3RlbnRpYWwgY29uc2VxdWVuY2VzIG9mIHRoaXMgYnVnLiBUaGlzIGhlbHBzIHByb3ZpZGUgY29udGV4dCBmb3IgdGhlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEwNjY9c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDg0LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwODU6c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmZpbHRlcl90dXBsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDg2LVx0XHRcdFx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpjdF90dXBsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTE1ND1zdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2goc3RydWN0IG5mX2Nvbm4gKmN0LCB2b2lkICpkYXRhKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTc1LVx0XHR0dXBsZSA9IG5mX2N0X3R1cGxlKGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjExNzY6XHRcdGlmICghY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShcdTAwMjZmaWx0ZXItXHUwMDNlb3JpZywgdHVwbGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3Ny1cdFx0XHRcdFx0XHQgIGZpbHRlci1cdTAwM2VvcmlnX2ZsYWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTgzLVx0XHR0dXBsZSA9IG5mX2N0X3R1cGxlKGN0LCBJUF9DVF9ESVJfUkVQTFkpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjExODQ6XHRcdGlmICghY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShcdTAwMjZmaWx0ZXItXHUwMDNlcmVwbHksIHR1cGxlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTExODUtXHRcdFx0XHRcdFx0ICBmaWx0ZXItXHUwMDNlcmVwbHlfZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NzEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIHRoaW5raW5nOgoKKipFeGFtaW5pbmcgQ29ubnRyYWNrIE5ldGxpbmsgRnVuY3Rpb25zKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gc29tZSBjb25udHJhY2sgbmV0bGluayBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAgYW5kIGBjdG5ldGxpbmtfZHVtcF90YWJsZWAsIG9yIHJhdGhlciwgYW55IGZ1bmN0aW9uIGNhbGxzIHRvIHRob3NlIHR3by4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHdheSB0byBnZXQgYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGEgcGFydGljdWxhciBmdW5jdGlvbiBpcyB1c2VkIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgc29tZXRoaW5nIGludGVyZXN0aW5nIG1pZ2h0IGJlIGdvaW5nIG9uIGFyb3VuZCB0aG9zZSByb3V0aW5lcy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGV4cGxvcmF0aW9uIG9uIGxpbmVzIDEwNTAgdGhyb3VnaCAxMjAwIG9mIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgc2VjdGlvbiB3aWxsIGhvbGQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBmaWx0ZXJpbmcgYW5kIGR1bXBpbmcgY29ubnRyYWNrIGluZm9ybWF0aW9uIHZpYSBuZXRsaW5rLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNTA6XHRcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDUxOlx0XHR9XG4xMDUyOlx0XG4xMDUzOlx0XHRyZXR1cm4gZmlsdGVyO1xuMTA1NDpcdFxuMTA1NTpcdGVycl9maWx0ZXI6XG4xMDU2Olx0XHRrZnJlZShmaWx0ZXIpO1xuMTA1NzpcdFxuMTA1ODpcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjEwNTk6XHR9XG4xMDYwOlx0XG4xMDYxOlx0c3RhdGljIGJvb2wgY3RuZXRsaW5rX25lZWRzX2ZpbHRlcih1OCBmYW1pbHksIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhKVxuMTA2MjpcdHtcbjEwNjM6XHRcdHJldHVybiBmYW1pbHkgfHwgY2RhW0NUQV9NQVJLXSB8fCBjZGFbQ1RBX0ZJTFRFUl0gfHwgY2RhW0NUQV9TVEFUVVNdIHx8IGNkYVtDVEFfWk9ORV07XG4xMDY0Olx0fVxuMTA2NTpcdFxuMTA2NjpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbjEwNjc6XHR7XG4xMDY4Olx0XHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgKmNkYSA9IGNiLVx1MDAzZWRhdGE7XG4xMDY5Olx0XHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqZmlsdGVyID0gTlVMTDtcbjEwNzA6XHRcdHN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBubG1zZ19kYXRhKGNiLVx1MDAzZW5saCk7XG4xMDcxOlx0XHR1OCBmYW1pbHkgPSBuZm1zZy1cdTAwM2VuZmdlbl9mYW1pbHk7XG4xMDcyOlx0XG4xMDczOlx0XHRpZiAoY3RuZXRsaW5rX25lZWRzX2ZpbHRlcihmYW1pbHksIGNkYSkpIHtcbjEwNzQ6XHRcdFx0ZmlsdGVyID0gY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjZGEsIGZhbWlseSk7XG4xMDc1Olx0XHRcdGlmIChJU19FUlIoZmlsdGVyKSlcbjEwNzY6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihmaWx0ZXIpO1xuMTA3NzpcdFx0fVxuMTA3ODpcdFxuMTA3OTpcdFx0Y2ItXHUwMDNlZGF0YSA9IGZpbHRlcjtcbjEwODA6XHRcdGlmIChmaWx0ZXIpXG4xMDgxOlx0XHRcdGNiLVx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4xMDgyOlx0XHRyZXR1cm4gMDtcbjEwODM6XHR9XG4xMDg0Olx0XG4xMDg1Olx0c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmZpbHRlcl90dXBsZSxcbjEwODY6XHRcdFx0XHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqY3RfdHVwbGUsXG4xMDg3Olx0XHRcdFx0XHRcdHVfaW50MzJfdCBmbGFncywgaW50IGZhbWlseSlcbjEwODg6XHR7XG4xMDg5Olx0XHRzd2l0Y2ggKGZhbWlseSkge1xuMTA5MDpcdFx0Y2FzZSBORlBST1RPX0lQVjQ6XG4xMDkxOlx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfU1JDKSkgXHUwMDI2XHUwMDI2XG4xMDkyOlx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlc3JjLnUzLmlwICE9IGN0X3R1cGxlLVx1MDAzZXNyYy51My5pcClcbjEwOTM6XHRcdFx0XHRyZXR1cm4gIDA7XG4xMDk0Olx0XG4xMDk1Olx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfRFNUKSkgXHUwMDI2XHUwMDI2XG4xMDk2Olx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUzLmlwICE9IGN0X3R1cGxlLVx1MDAzZWRzdC51My5pcClcbjEwOTc6XHRcdFx0XHRyZXR1cm4gIDA7XG4xMDk4Olx0XHRcdGJyZWFrO1xuMTA5OTpcdFx0Y2FzZSBORlBST1RPX0lQVjY6XG4xMTAwOlx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfU1JDKSkgXHUwMDI2XHUwMDI2XG4xMTAxOlx0XHRcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNmZpbHRlcl90dXBsZS1cdTAwM2VzcmMudTMuaW42LFxuMTEwMjpcdFx0XHRcdFx0ICAgICBcdTAwMjZjdF90dXBsZS1cdTAwM2VzcmMudTMuaW42KSlcbjExMDM6XHRcdFx0XHRyZXR1cm4gMDtcbjExMDQ6XHRcbjExMDU6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcdTAwMjZcdTAwMjZcbjExMDY6XHRcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pbjYsXG4xMTA3Olx0XHRcdFx0XHQgICAgIFx1MDAyNmN0X3R1cGxlLVx1MDAzZWRzdC51My5pbjYpKVxuMTEwODpcdFx0XHRcdHJldHVybiAwO1xuMTEwOTpcdFx0XHRicmVhaztcbjExMTA6XHRcdH1cbjExMTE6XHRcbjExMTI6XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fTlVNKSkgXHUwMDI2XHUwMDI2XG4xMTEzOlx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC5wcm90b251bSAhPSBjdF90dXBsZS1cdTAwM2Vkc3QucHJvdG9udW0pXG4xMTE0Olx0XHRcdHJldHVybiAwO1xuMTExNTpcdFxuMTExNjpcdFx0c3dpdGNoIChjdF90dXBsZS1cdTAwM2Vkc3QucHJvdG9udW0pIHtcbjExMTc6XHRcdGNhc2UgSVBQUk9UT19UQ1A6XG4xMTE4Olx0XHRjYXNlIElQUFJPVE9fVURQOlxuMTExOTpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX1NSQ19QT1JUKSkgXHUwMDI2XHUwMDI2XG4xMTIwOlx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlc3JjLnUudGNwLnBvcnQgIT0gY3RfdHVwbGUtXHUwMDNlc3JjLnUudGNwLnBvcnQpXG4xMTIxOlx0XHRcdFx0cmV0dXJuIDA7XG4xMTIyOlx0XG4xMTIzOlx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fRFNUX1BPUlQpKSBcdTAwMjZcdTAwMjZcbjExMjQ6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2Vkc3QudS50Y3AucG9ydCAhPSBjdF90dXBsZS1cdTAwM2Vkc3QudS50Y3AucG9ydClcbjExMjU6XHRcdFx0XHRyZXR1cm4gMDtcbjExMjY6XHRcdFx0YnJlYWs7XG4xMTI3Olx0XHRjYXNlIElQUFJPVE9fSUNNUDpcbjExMjg6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QX1RZUEUpKSBcdTAwMjZcdTAwMjZcbjExMjk6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2Vkc3QudS5pY21wLnR5cGUgIT0gY3RfdHVwbGUtXHUwMDNlZHN0LnUuaWNtcC50eXBlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM2NAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBDb25udHJhY2sgTmV0bGluayBGaWx0ZXJpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHdlJiMzOTtyZSBoYW5kbGluZyBjb25udHJhY2sgZmlsdGVyaW5nIG92ZXIgTmV0bGluay4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgZmxvdywgcGFydGljdWxhcmx5IGhvdyBmaWx0ZXJzIGFyZSBjb25zdHJ1Y3RlZCBhbmQgYXBwbGllZC4gSSBzZWUgdGhhdCBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAgaXMgdGhlIHdvcmtob3JzZSBoZXJlOyBpdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyB1bHRpbWF0ZWx5IGRvaW5nIHRoZSBjb21wYXJpc29uIHdoZW4gZmlsdGVyaW5nIGR1bXAgZW50cmllcy4gTm93LCB3aGVyZSBkb2VzIHRoaXMgYGZpbHRlcmAgc3RydWN0IGNvbWUgZnJvbT8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgaG93IGl0JiMzOTtzIGluaXRpYWxpemVkLiBMb29rcyBsaWtlIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYCBpcyB0aGUgbGlrZWx5IGNhbmRpZGF0ZSwgYmVjYXVzZSBpdCBoYW5kbGVzIHRoZSBhdHRyaWJ1dGUgcGFyc2luZyBmcm9tIHVzZXJzcGFjZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgIGluaXRpYWxpemVzIHRoZSBmaWx0ZXI7IHRoaXMgc2VlbXMgdG8gYmUgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAwOlx0XG4xMDAxOlx0XHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX21hcmsoXHUwMDI2ZmlsdGVyLVx1MDAzZW1hcmssIGNkYSk7XG4xMDAyOlx0XHRpZiAoZXJyKVxuMTAwMzpcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDA0Olx0XG4xMDA1Olx0XHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX3N0YXR1cyhcdTAwMjZmaWx0ZXItXHUwMDNlc3RhdHVzLCBjZGEpO1xuMTAwNjpcdFx0aWYgKGVycilcbjEwMDc6XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTAwODpcdFxuMTAwOTpcdFx0aWYgKGNkYVtDVEFfWk9ORV0pIHtcbjEwMTA6XHRcdFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9aT05FXSwgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUpO1xuMTAxMTpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTAxMjpcdFx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwMTM6XHRcdFx0ZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcbjEwMTQ6XHRcdH1cbjEwMTU6XHRcbjEwMTY6XHRcdGlmICghY2RhW0NUQV9GSUxURVJdKVxuMTAxNzpcdFx0XHRyZXR1cm4gZmlsdGVyO1xuMTAxODpcdFxuMTAxOTpcdFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjZGFbQ1RBX0ZJTFRFUl0sIGZpbHRlcik7XG4xMDIwOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTAyMTpcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDIyOlx0XG4xMDIzOlx0XHRpZiAoZmlsdGVyLVx1MDAzZW9yaWdfZmxhZ3MpIHtcbjEwMjQ6XHRcdFx0aWYgKCFjZGFbQ1RBX1RVUExFX09SSUddKSB7XG4xMDI1Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjEwMjY6XHRcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDI3Olx0XHRcdH1cbjEwMjg6XHRcbjEwMjk6XHRcdFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjZGEsIFx1MDAyNmZpbHRlci1cdTAwM2VvcmlnLFxuMTAzMDpcdFx0XHRcdFx0XHRcdCAgIENUQV9UVVBMRV9PUklHLFxuMTAzMTpcdFx0XHRcdFx0XHRcdCAgIGZpbHRlci1cdTAwM2VmYW1pbHksXG4xMDMyOlx0XHRcdFx0XHRcdFx0ICAgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUsXG4xMDMzOlx0XHRcdFx0XHRcdFx0ICAgZmlsdGVyLVx1MDAzZW9yaWdfZmxhZ3MpO1xuMTAzNDpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTAzNTpcdFx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwMzY6XHRcdH1cbjEwMzc6XHRcbjEwMzg6XHRcdGlmIChmaWx0ZXItXHUwMDNlcmVwbHlfZmxhZ3MpIHtcbjEwMzk6XHRcdFx0aWYgKCFjZGFbQ1RBX1RVUExFX1JFUExZXSkge1xuMTA0MDpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4xMDQxOlx0XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTA0MjpcdFx0XHR9XG4xMDQzOlx0XG4xMDQ0Olx0XHRcdGVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZV9maWx0ZXIoY2RhLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmVwbHksXG4xMDQ1Olx0XHRcdFx0XHRcdFx0ICAgQ1RBX1RVUExFX1JFUExZLFxuMTA0NjpcdFx0XHRcdFx0XHRcdCAgIGZpbHRlci1cdTAwM2VmYW1pbHksXG4xMDQ3Olx0XHRcdFx0XHRcdFx0ICAgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUsXG4xMDQ4Olx0XHRcdFx0XHRcdFx0ICAgZmlsdGVyLVx1MDAzZXJlcGx5X2ZsYWdzKTtcbjEwNDk6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjEwNTA6XHRcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDUxOlx0XHR9XG4xMDUyOlx0XG4xMDUzOlx0XHRyZXR1cm4gZmlsdGVyO1xuMTA1NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM5NwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQWxsb2NhdGlvbiBvZiBgZmlsdGVyYCBpbiBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBgZmlsdGVyYCBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAgZnVuY3Rpb24uIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgdG8gZW5zdXJlIHByb3BlciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcHJldmVudCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIG1lbW9yeSBpcyBhY3F1aXJlZCwgd2hldGhlciBpdCYjMzk7cyBzdGF0aWNhbGx5LCBkeW5hbWljYWxseSB3aXRoIGBrbWFsbG9jYCwgb3IgdGhyb3VnaCBzb21lIG90aGVyIGFsbG9jYXRvci4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgaWYgdGhlcmUmIzM5O3MgYW55IGFzc29jaWF0ZWQgZXJyb3IgaGFuZGxpbmcgaWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIGFuZCB3aGF0IG1lY2hhbmlzbSBpcyBlbXBsb3llZCB0byByZWxlYXNlIHRoZSBtZW1vcnkgd2hlbiB0aGUgZmlsdGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuIElzIHRoZXJlIGEgY29ycmVzcG9uZGluZyBkZWFsbG9jYXRpb24gZnVuY3Rpb24sIGFuZCBpcyBpdCBjYWxsZWQgaW4gYWxsIHRoZSBuZWNlc3Nhcnkgc2NlbmFyaW9zLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGluZ3MgZ28gd3Jvbmc/IEZ1cnRoZXJtb3JlLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IGNvbnNpZGVyYXRpb25zIHJlbGF0ZWQgdG8gYWxpZ25tZW50IGFuZCBwb3RlbnRpYWwgcGFkZGluZz8gSSBuZWVkIHRvIHJldmlldyBob3cgdGhpcyBhbGxvY2F0aW9uIGltcGFjdHMgdGhlIG92ZXJhbGwgbGlmZWN5Y2xlIG9mIHRoZSBgZmlsdGVyYCBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBmcmFtZXdvcmsuIFRoaXMgaXMgZ29pbmcgdG8gcmVxdWlyZSBhIGNhcmVmdWwgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgYGZpbHRlcmAgaXMgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk4MDpcdFx0QlVJTERfQlVHX09OKF9fSVBTX01BWF9CSVQgXHUwMDNlPSAzMik7XG4gOTgxOlx0XHRyZXR1cm4gMDtcbiA5ODI6XHR9XG4gOTgzOlx0XG4gOTg0Olx0c3RhdGljIHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpcbiA5ODU6XHRjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxuIDk4NjpcdHtcbiA5ODc6XHRcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXI7XG4gOTg4Olx0XHRpbnQgZXJyO1xuIDk4OTpcdFxuIDk5MDpcdCNpZm5kZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLXG4gOTkxOlx0XHRpZiAoY2RhW0NUQV9NQVJLXSB8fCBjZGFbQ1RBX01BUktfTUFTS10pXG4gOTkyOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcbiA5OTM6XHQjZW5kaWZcbiA5OTQ6XHRcbiA5OTU6XHRcdGZpbHRlciA9IGt6YWxsb2Nfb2JqKCpmaWx0ZXIpO1xuIDk5NjpcdFx0aWYgKGZpbHRlciA9PSBOVUxMKVxuIDk5NzpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiA5OTg6XHRcbiA5OTk6XHRcdGZpbHRlci1cdTAwM2VmYW1pbHkgPSBmYW1pbHk7XG4xMDAwOlx0XG4xMDAxOlx0XHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX21hcmsoXHUwMDI2ZmlsdGVyLVx1MDAzZW1hcmssIGNkYSk7XG4xMDAyOlx0XHRpZiAoZXJyKVxuMTAwMzpcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDQ2CgkJCQkJCQlvdXRwdXQ6IDE5OAoJCQkJCQkJdGhvdWdodHM6IDUwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIENvbm50cmFjayBOZXRsaW5rIEZpbHRlcmluZyBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBib2lscyBkb3duIHRvIGEgY2xhc3NpYyBsb2dpY2FsIGVycm9yOiB0aGUgYXV0aG9yIHdhcyB1c2luZyBgIWlwdjZfYWRkcl9jbXAoKWAgd2hlbiB0aGV5ICp0aG91Z2h0KiB0aGV5IHdlcmUgY2hlY2tpbmcgZm9yIGluZXF1YWxpdHksIGJ1dCBgaXB2Nl9hZGRyX2NtcGAgYWN0dWFsbHkgcmV0dXJucyAwIHdoZW4gdGhlIGFkZHJlc3NlcyBtYXRjaC4gRWZmZWN0aXZlbHksIHRoZXkgaW52ZXJ0ZWQgdGhlIElQdjYgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZmlsdGVyIGNvbmRpdGlvbiBpbiB0aGUgY29ubnRyYWNrIG5ldGxpbmsgZHVtcGluZyBwcm9jZXNzLiBBIHNpbXBsZSBvdmVyc2lnaHQsIGJ1dCBpdCBoYXMgdG8gYmUgZml4ZWQuIFRoZSBmaXggaXMgYSBzdHJhaWdodCBzd2FwLCB1c2luZyBgIWlwdjZfYWRkcl9lcXVhbCgpYCB3aGljaCBjb3JyZWN0bHkgc2lnbmFscyBlcXVhbGl0eSB3aXRoIGEgbm9uLXplcm8gdmFsdWUuCgpNeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGZpeCBpbnRyb2R1Y2VzIGFueSBuZXcgbWVtb3J5IGlzc3Vlcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcHJvYmxlbXMgd2l0aCBLTVNBTi4KCkZpcnN0LCBJIG5lZWQgdG8gY2hlY2s6CiogICBEaWQgdGhpcyBpbnZvbHZlIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY3JlYXRlIGFueSBuZXcgbWVtb3J5IGJ1ZmZlcnM/IE5vLiBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAgdXNlcyBga3phbGxvY19vYmooKmZpbHRlcilgLCBzbyB0aGF0JiMzOTtzIGFsbCBoYW5kbGVkLgoqICAgQXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGJlaW5nIHJlYWQgb3IgY29waWVkPyBOb3QgaW4gdGhpcyBjYXNlLiBUaGUgY29ubnRyYWNrIHR1cGxlIChgY3RfdHVwbGVgKSBpcyBjb21pbmcgZnJvbSBhbiBlc3RhYmxpc2hlZCBgc3RydWN0IG5mX2Nvbm5gLCB3aGljaCBzaG91bGQgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCiogICBDb3VsZCB0aGlzIGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgbGVhayB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlPyBBYnNvbHV0ZWx5IG5vdC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBmaXguCgpTbywgaXQmIzM5O3MgYSB2ZXJ5IHRhcmdldGVkIGNoYW5nZS4gTm8gbmV3IG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIGp1c3QgYSBjb3JyZWN0aW9uIG9mIGEgY29tcGFyaXNvbiBvcGVyYXRvci4gSXQmIzM5O3MgYSBjbGVhbiBmaXggd2l0aCBubyBleHBvc2VkIG1lbW9yeSByaXNrcy4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWxsIHRob3NlIGNyaXRlcmlhIHRvIGJlIGNlcnRhaW46CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG9zc2libHkgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGRhdGE/IE5vLCBub3RoaW5nIG5ldyBpcyBiZWluZyBzZW50LgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLCB0aGUgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24gYXJlIGluaXRpYWxpemVkLiBgZmlsdGVyX3R1cGxlYCBpcyB0aGUgYGt6YWxsb2NgJiMzOTtkIGZpbHRlciBhbmQgYGN0X3R1cGxlYCBpcyBpbml0aWFsaXplZC4KMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCB3aXRoIHRoZSByaXNrIG9mIGxhdGVyIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOby4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgbWlnaHQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBkZWZpbml0ZWx5IGJlIGBmYWxzZWAuCgoqKktNU0FOIFJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGludmVydGVkIGxvZ2ljYWwgY2hlY2sgaW4gSVB2NiBjb25udHJhY2sgbmV0bGluayBmaWx0ZXJpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIGluY29ycmVjdGx5IHVzZWQgYCFpcHY2X2FkZHJfY21wKClgIHdoZW4gYCFpcHY2X2FkZHJfZXF1YWwoKWAgc2hvdWxkIGhhdmUgYmVlbiB1c2VkLiBUaGlzIHBhdGNoIGZpeGVzIGl0LiBLTVNBTiBpcyAqbm90KiBuZWVkZWQgYmVjYXVzZSB0aGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuIFRoZXJlJiMzOTtzIG5vIG5ldyBhbGxvY2F0aW9uIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYGN0X3R1cGxlYCBhbmQgdGhlIGBmaWx0ZXJfdHVwbGVgIGFyZSBpbml0aWFsaXplZCBhbmQgdGhlcmVmb3JlIGFsbCB0aGUgcmVsZXZhbnQgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZC4KCk9rYXksIGxldCYjMzk7cyBjYWxsIHRoaXMgYHNldC1yZXN1bHRzYC4gSSYjMzk7bSBjb25maWRlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBidWcgaW4gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKWAgd2hlcmUgYCFpcHY2X2FkZHJfY21wKClgICh3aGljaCByZXR1cm5zIDAgb24gbWF0Y2gpIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgYCFpcHY2X2FkZHJfZXF1YWwoKWAgKHdoaWNoIHJldHVybnMgdHJ1ZSBvbiBtYXRjaCksIGNhdXNpbmcgSVB2NiBhZGRyZXNzIGZpbHRlcmluZyBkdXJpbmcgY29ubnRyYWNrIG5ldGxpbmsgZHVtcGluZyB0byByZWplY3QgbWF0Y2hlcyBhbmQgYWNjZXB0IG1pc21hdGNoZXMuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBvbmx5IGEgYm9vbGVhbiBlcXVhbGl0eSBjaGVjayBiZXR3ZWVuIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBJUHY2IGFkZHJlc3NlcyBpbiBjb25udHJhY2sgdHVwbGVzICh0aGUgZmlsdGVyIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgIGFuZCB0aGUgY29ubnRyYWNrIHR1cGxlIGlzIHBvcHVsYXRlZCB1cG9uIGNvbm5lY3Rpb24gdHJhY2tpbmcpLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWZmZWN0ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBidWcgaW4gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKWAgd2hlcmUgYCFpcHY2X2FkZHJfY21wKClgICh3aGljaCByZXR1cm5zIDAgb24gbWF0Y2gpIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgYCFpcHY2X2FkZHJfZXF1YWwoKWAgKHdoaWNoIHJldHVybnMgdHJ1ZSBvbiBtYXRjaCksIGNhdXNpbmcgSVB2NiBhZGRyZXNzIGZpbHRlcmluZyBkdXJpbmcgY29ubnRyYWNrIG5ldGxpbmsgZHVtcGluZyB0byByZWplY3QgbWF0Y2hlcyBhbmQgYWNjZXB0IG1pc21hdGNoZXMuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBvbmx5IGEgYm9vbGVhbiBlcXVhbGl0eSBjaGVjayBiZXR3ZWVuIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBJUHY2IGFkZHJlc3NlcyBpbiBjb25udHJhY2sgdHVwbGVzICh0aGUgZmlsdGVyIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgIGFuZCB0aGUgY29ubnRyYWNrIHR1cGxlIGlzIHBvcHVsYXRlZCB1cG9uIGNvbm5lY3Rpb24gdHJhY2tpbmcpLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWZmZWN0ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6MDkuNDc0NDAxODg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczMzIwNzMxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlXCIsXG4gICAgXCJjdG5ldGxpbmtfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJjdG5ldGxpbmtfZHVtcF90YWJsZVwiLFxuICAgIFwiY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFja1wiLFxuICAgIFwiY3RuZXRsaW5rX2dldF9jb25udHJhY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBidWcgaW4gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKWAgd2hlcmUgYCFpcHY2X2FkZHJfY21wKClgICh3aGljaCByZXR1cm5zIDAgb24gbWF0Y2gpIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgYCFpcHY2X2FkZHJfZXF1YWwoKWAgKHdoaWNoIHJldHVybnMgdHJ1ZSBvbiBtYXRjaCksIGNhdXNpbmcgSVB2NiBhZGRyZXNzIGZpbHRlcmluZyBkdXJpbmcgY29ubnRyYWNrIG5ldGxpbmsgZHVtcGluZyB0byByZWplY3QgbWF0Y2hlcyBhbmQgYWNjZXB0IG1pc21hdGNoZXMuIFxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIG9ubHkgYSBib29sZWFuIGVxdWFsaXR5IGNoZWNrIGJldHdlZW4gZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIElQdjYgYWRkcmVzc2VzIGluIGNvbm50cmFjayB0dXBsZXMgKHRoZSBmaWx0ZXIgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAgYW5kIHRoZSBjb25udHJhY2sgdHVwbGUgaXMgcG9wdWxhdGVkIHVwb24gY29ubmVjdGlvbiB0cmFja2luZykuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhZmZlY3RlZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYm9vbGVhbiBpbnZlcnRlZCBsb2dpYyBidWcgaW4gY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZSgpIHdoZW4gbWF0Y2hpbmcgSVB2NiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBieSByZXBsYWNpbmcgIWlwdjZfYWRkcl9jbXAoKSB3aXRoICFpcHY2X2FkZHJfZXF1YWwoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBzdWJzeXN0ZW0sIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNDowOS40NzQ0MTM0NjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDI1OTU5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYzEyNjA0ZjY1MGM5NzczYTQ2OWUyMWUyOWVkNGE2NGY3NDc3MzZkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTc6MTQ6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuaW5kZXggNTc5YWRhMDYzYjFiYi4uZWY0ODM2OTk2NTliZiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcXG5AQCAtMTA5OCwxMyArMTA5OCwxMyBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLFxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuIFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhaXB2Nl9hZGRyX2NtcChcXHUwMDI2ZmlsdGVyX3R1cGxlLVxcdTAwM2VzcmMudTMuaW42LFxcbi1cXHRcXHRcXHRcXHQgICBcXHUwMDI2Y3RfdHVwbGUtXFx1MDAzZXNyYy51My5pbjYpKVxcbitcXHRcXHQgICAgIWlwdjZfYWRkcl9lcXVhbChcXHUwMDI2ZmlsdGVyX3R1cGxlLVxcdTAwM2VzcmMudTMuaW42LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjdF90dXBsZS1cXHUwMDNlc3JjLnUzLmluNikpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfRFNUKSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICFpcHY2X2FkZHJfY21wKFxcdTAwMjZmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51My5pbjYsXFxuLVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZjdF90dXBsZS1cXHUwMDNlZHN0LnUzLmluNikpXFxuK1xcdFxcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51My5pbjYsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN0X3R1cGxlLVxcdTAwM2Vkc3QudTMuaW42KSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjEwLjgxNzY0MDA1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzI5MzkyODMzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlXCIsXG4gICAgXCJjdG5ldGxpbmtfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJjdG5ldGxpbmtfZHVtcF90YWJsZVwiLFxuICAgIFwiY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFja1wiLFxuICAgIFwiY3RuZXRsaW5rX2dldF9jb25udHJhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJvb2xlYW4gaW52ZXJ0ZWQgbG9naWMgYnVnIGluIGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKSB3aGVuIG1hdGNoaW5nIElQdjYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYnkgcmVwbGFjaW5nICFpcHY2X2FkZHJfY21wKCkgd2l0aCAhaXB2Nl9hZGRyX2VxdWFsKCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgbG9naWMgaW4gdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgc3Vic3lzdGVtLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYzEyNjA0ZjY1MGM5NzczYTQ2OWUyMWUyOWVkNGE2NGY3NDc3MzZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNzoxNDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuaW5kZXggNTc5YWRhMDYzYjFiYi4uZWY0ODM2OTk2NTliZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5AQCAtMTA5OCwxMyArMTA5OCwxMyBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLFxuIFx0XHRicmVhaztcbiBcdGNhc2UgTkZQUk9UT19JUFY2OlxuIFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWlwdjZfYWRkcl9jbXAoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pbjYsXG4tXHRcdFx0XHQgICBcdTAwMjZjdF90dXBsZS1cdTAwM2VzcmMudTMuaW42KSlcbitcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pbjYsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmN0X3R1cGxlLVx1MDAzZXNyYy51My5pbjYpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX0RTVCkpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWlwdjZfYWRkcl9jbXAoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pbjYsXG4tXHRcdFx0XHQgICBcdTAwMjZjdF90dXBsZS1cdTAwM2Vkc3QudTMuaW42KSlcbitcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pbjYsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmN0X3R1cGxlLVx1MDAzZWRzdC51My5pbjYpKVxuIFx0XHRcdHJldHVybiAwO1xuIFx0XHRicmVhaztcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjEwLjgxNzY0MTQwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwNTUxMzg1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29ubnRyYWNrIE5ldGxpbmsgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY2AgYXJvdW5kIHRoZSBsaW5lIG51bWJlcnMgc3BlY2lmaWVkIGluIHRoZSBkaWZmLiBJIHNob3VsZCBwcm9iYWJseSBmaXJlIHVwIGEgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHNlc3Npb24gdG8gZ2V0IHRoZSBmdWxsIGNvbnRleHQgYXJvdW5kIGxpbmUgMTA5OC4gQmFzZWQgb24gdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2Ugd2UncmUgY2hhbmdpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSVB2NiBhZGRyZXNzIGNvbXBhcmlzb24gd2l0aGluIHRoZSBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgY29kZSBpcyB1c2luZyBgaXB2Nl9hZGRyX2NtcGAgYW5kIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aG9zZSBjb21wYXJpc29ucyB0byBgaXB2Nl9hZGRyX2VxdWFsYC4gVGhpcyBzdWdnZXN0cyBhIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBjaGFuZ2UgaW4gaG93IHdlIGRldGVybWluZSBpZiB0d28gSVB2NiBhZGRyZXNzZXMgbWF0Y2ggd2hlbiBmaWx0ZXJpbmcgY29ubnRyYWNrIGVudHJpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIHNlbWFudGljIGRpZmZlcmVuY2UgaXMgYW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHN3YXBwaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBjb250ZXh0LiBUaGUgY29udGV4dCBpcyBgTkZQUk9UT19JUFY2YCBzbyB0aGlzIGlzIGFsbCBhYm91dCBJUHY2LiBMZXQncyBzZWUgaWYgdGhlIGNvbW1pdCBtZXNzYWdlIHByb3ZpZGVzIG1vcmUgY29udGV4dCB0byB3aGF0IHRoZSBhdXRob3Igd2FzIGFpbWluZyB0byBkbyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU4LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6MTcuODcyNzgyNTYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdFxcdGlmIChmaWx0ZXIpXFxuMTA4MTpcXHRcXHRcXHRjYi1cXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcXG4xMDgyOlxcdFxcdHJldHVybiAwO1xcbjEwODM6XFx0fVxcbjEwODQ6XFx0XFxuMTA4NTpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLFxcbjEwODY6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqY3RfdHVwbGUsXFxuMTA4NzpcXHRcXHRcXHRcXHRcXHRcXHR1X2ludDMyX3QgZmxhZ3MsIGludCBmYW1pbHkpXFxuMTA4ODpcXHR7XFxuMTA4OTpcXHRcXHRzd2l0Y2ggKGZhbWlseSkge1xcbjEwOTA6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuMTA5MTpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9TUkMpKSBcXHUwMDI2XFx1MDAyNlxcbjEwOTI6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUzLmlwICE9IGN0X3R1cGxlLVxcdTAwM2VzcmMudTMuaXApXFxuMTA5MzpcXHRcXHRcXHRcXHRyZXR1cm4gIDA7XFxuMTA5NDpcXHRcXG4xMDk1OlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX0RTVCkpIFxcdTAwMjZcXHUwMDI2XFxuMTA5NjpcXHRcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2Vkc3QudTMuaXAgIT0gY3RfdHVwbGUtXFx1MDAzZWRzdC51My5pcClcXG4xMDk3OlxcdFxcdFxcdFxcdHJldHVybiAgMDtcXG4xMDk4OlxcdFxcdFxcdGJyZWFrO1xcbjEwOTk6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuMTEwMDpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9TUkMpKSBcXHUwMDI2XFx1MDAyNlxcbjExMDE6XFx0XFx0XFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUzLmluNixcXG4xMTAyOlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN0X3R1cGxlLVxcdTAwM2VzcmMudTMuaW42KSlcXG4xMTAzOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMDQ6XFx0XFxuMTEwNTpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcXHUwMDI2XFx1MDAyNlxcbjExMDY6XFx0XFx0XFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUzLmluNixcXG4xMTA3OlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN0X3R1cGxlLVxcdTAwM2Vkc3QudTMuaW42KSlcXG4xMTA4OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMDk6XFx0XFx0XFx0YnJlYWs7XFxuMTExMDpcXHRcXHR9XFxuMTExMTpcXHRcXG4xMTEyOlxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX05VTSkpIFxcdTAwMjZcXHUwMDI2XFxuMTExMzpcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2Vkc3QucHJvdG9udW0gIT0gY3RfdHVwbGUtXFx1MDAzZWRzdC5wcm90b251bSlcXG4xMTE0OlxcdFxcdFxcdHJldHVybiAwO1xcbjExMTU6XFx0XFxuMTExNjpcXHRcXHRzd2l0Y2ggKGN0X3R1cGxlLVxcdTAwM2Vkc3QucHJvdG9udW0pIHtcXG4xMTE3OlxcdFxcdGNhc2UgSVBQUk9UT19UQ1A6XFxuMTExODpcXHRcXHRjYXNlIElQUFJPVE9fVURQOlxcbjExMTk6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fU1JDX1BPUlQpKSBcXHUwMDI2XFx1MDAyNlxcbjExMjA6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUudGNwLnBvcnQgIT0gY3RfdHVwbGUtXFx1MDAzZXNyYy51LnRjcC5wb3J0KVxcbjExMjE6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0RTVF9QT1JUKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTI0OlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51LnRjcC5wb3J0ICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QudS50Y3AucG9ydClcXG4xMTI1OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMjY6XFx0XFx0XFx0YnJlYWs7XFxuMTEyNzpcXHRcXHRjYXNlIElQUFJPVE9fSUNNUDpcXG4xMTI4OlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBfVFlQRSkpIFxcdTAwMjZcXHUwMDI2XFxuMTEyOTpcXHRcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2Vkc3QudS5pY21wLnR5cGUgIT0gY3RfdHVwbGUtXFx1MDAzZWRzdC51LmljbXAudHlwZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6MTcuODcyOTMyOTAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg4NjU4NjQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBDcml0aWNhbCBMb2dpYyBFcnJvciBhbmQgQXNzZXNzaW5nIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGZvY3VzZXMgb24gdGhlIGBpcHY2X2FkZHJfY21wYCBhbmQgYGlwdjZfYWRkcl9lcXVhbGAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlaXIgcmV0dXJuIHZhbHVlcy4gSXQgc2VlbXMgdGhlcmUgd2FzIGEgY2xhc3NpYyBsb2dpYyBlcnJvcjogYGlwdjZfYWRkcl9jbXBgIHJldHVybmluZyAwIGZvciBlcXVhbGl0eSwgd2hpY2ggd2hlbiBuZWdhdGVkIChgIWlwdjZfYWRkcl9jbXBgKSBjYXVzZWQgYSByZXR1cm4gb2YgMCAobm8gbWF0Y2gpICp3aGVuIHRoZSBhZGRyZXNzZXMgd2VyZSBhY3R1YWxseSBFUVVBTCouIFRoYXQncyBhIHRleHRib29rIGludmVyc2lvbiB0aGF0IHdvdWxkIGRlZmluaXRlbHkgbGVhZCB0byBpbmNvcnJlY3QgZmlsdGVyaW5nIGluIG15IG5ldGxpbmsgY29kZSwgcGFydGljdWxhcmx5IHdoZXJlIEknbSBoYW5kbGluZyBJUHY2IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIGluIGBjdG5ldGxpbmtgLiBUaGUgZml4LCB0aGFua2Z1bGx5LCBhcHBlYXJzIHRvIHVzZSBgaXB2Nl9hZGRyX2VxdWFsYCwgd2hpY2ggcmV0dXJucyB0aGUgbW9yZSBpbnR1aXRpdmUgdHJ1ZS9mYWxzZSBmb3IgZXF1YWxpdHksIHNvIGBpZiAoIWlwdjZfYWRkcl9lcXVhbCguLi4pKWAgbm93IGNvcnJlY3RseSByZXR1cm5zIDAgKG5vIG1hdGNoKSB3aGVuIHRoZSBhZGRyZXNzZXMgYXJlICpub3QqIGVxdWFsLiBUaGlzIHNob3VsZCBmaXggdGhlIGludmVydGVkIG1hdGNoIGlzc3VlcyBJIHdhcyBzZWVpbmcuXG5cbk5vdywgbGV0J3MgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIGZ1enppbmcgdGhpcy4gVGhlIGNydWNpYWwgYXNwZWN0IGlzICpyZWFjaGFiaWxpdHkqIGFuZCAqZnV6emFiaWxpdHkqLiBGcm9tIGEgcmVhY2hhYmlsaXR5IHBlcnNwZWN0aXZlLCBgbmV0bGluayBjdG5ldGxpbmtgIGlzIHRyaXZpYWxseSBhY2Nlc3NpYmxlLiBJdOKAmXMgYSBuZXRsaW5rIHNvY2tldCwgd2hpY2ggbWVhbnMgaXQncyBhdmFpbGFibGUgZnJvbSBhIG5vbi1wcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlLCBvciBhcyByb290LCB0aHJvdWdoIGBBRl9ORVRMSU5LYCBhbmQgYE5FVExJTktfTkVURklMVEVSYCBzb2NrZXRzLiBUaGF0J3MgYSBnb29kIHN0YXJ0LlxuXG5SZWdhcmRpbmcgZnV6emFiaWxpdHksIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBUaGUgY29kZSBkaXJlY3RseSBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCB3aGljaCBpcyBhdCB0aGUgY29yZSBvZiBuZXRmaWx0ZXIsIGEgY3JpdGljYWwgcGFydCBvZiBuZXR3b3JraW5nLiBTbywgdGhlIGxpa2VsaWhvb2Qgb2YgZmluZGluZyB2dWxuZXJhYmlsaXRpZXMgaGVyZSBpcyBoaWdoLiBgV29ydGhGdXp6aW5nID0gdHJ1ZS5gXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBjb25maXJtIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpcyBjb2RlIHRvIGJlIGNvbXBpbGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY3NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjIyLjc1OTUyMTQ3NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg4NDkyODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19uZXRsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSykgKz0gbmZfY29ubnRyYWNrLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfTkZfQ1RfTkVUTElOSykgKz0gbmZfY29ubnRyYWNrX25ldGxpbmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfVElNRU9VVCkgKz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9Mzg3MT1zdGF0aWMgaW50IF9faW5pdCBjdG5ldGxpbmtfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM4OTQtI2lmZGVmIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM4OTU6XFx0Lyogc2V0dXAgaW50ZXJhY3Rpb24gYmV0d2VlbiBuZl9xdWV1ZSBhbmQgbmZfY29ubnRyYWNrX25ldGxpbmsuICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM4OTYtXFx0UkNVX0lOSVRfUE9JTlRFUihuZm5sX2N0X2hvb2ssIFxcdTAwMjZjdG5ldGxpbmtfZ2x1ZV9ob29rKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfaW50ZXJuYWxzLmgtOC1cXG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oOjk6LyogbmZfY29ubnRyYWNrX25ldGxpbmsuYzogYXBwbGllZCBvbiB0dXBsZSBmaWx0ZXJzICovXFxubmV0L25ldGZpbHRlci9uZl9pbnRlcm5hbHMuaC0xMC0jZGVmaW5lIENUQV9GSUxURVJfRl9DVEFfSVBfU1JDXFx0XFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6MjQuMDQ4MDIwMjY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4OTEyNDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkNoZWNraW5nIGBDT05GSUdfTkZfQ1RfTkVUTElOS2AgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbmV0bGluayBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIEknbGwgbmVlZCB0byBjaGVjayBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBkaXJlY3RseSBmb3IgdGhlIGBDT05GSUdfTkZfQ1RfTkVUTElOS2Agb3B0aW9uLiBLbm93aW5nIHRoaXMgaXMgYSBjb3JlIG9wdGlvbiwgSSdsbCB0aGVuIHJldmlldyBpdCdzIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgZW5hYmxlZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gb3RoZXIgbmV0ZmlsdGVyIGZlYXR1cmVzLiBUaGlzIHdpbGwgcHJvdmlkZSBjb250ZXh0IGZvciBpdHMgZnVuY3Rpb24gYW5kIGNvbmZpZ3VyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhpZ2hsaWdodCBhbnkgb3RoZXIgYXJlYXMgdGhhdCByZXF1aXJlIGNvbnNpZGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNDoyNi4zMzcxNDcyMjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNzA0MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NUX05FVExJTktcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzU1PWNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY2OmNvbmZpZyBORl9DVF9ORVRMSU5LXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2Ny1cXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6MjYuMzg4NDIxOTg5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5NTEwMzU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM2Ni4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgc2VjdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgZGV0YWlscyBvbiBhIHNwZWNpZmljIG9wdGlvbiBvciBhIHJlbGF0ZWQgZ3JvdXAgb2Ygb3B0aW9ucywgYW5kIHRoaXMgZmlsZSBpcyB3aGVyZSB0aGF0IGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uIGlzIGhhbmRsZWQuIExldCdzIHNlZSB3aGF0J3MgYmVpbmcgZGVmaW5lZCB0aGVyZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIE5ldGZpbHRlci4gSSBob3BlIHRoZSBmb3JtYXR0aW5nIGlzIGNsZWFyLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgZWFzaWx5IHVuZGVyc3Rvb2QsIGFzIEtjb25maWcgZmlsZXMgY2FuIHNvbWV0aW1lcyBiZSBhIGJpdCBkZW5zZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6MjguNDgzNTI4MzA5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzYwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzYwOlxcdFxcdCAgb24gaG93IHJlc3RyaWN0aXZlIHlvdXIgcnVsZXNldCBpcy5cXG4gMzYxOlxcdFxcdCAgSWYgeW91IGFyZSB1c2luZyBhIHRmdHAgY2xpZW50IGJlaGluZCAtaiBTTkFUIG9yIC1qIE1BU1FVRVJBRElOR1xcbiAzNjI6XFx0XFx0ICB5b3Ugd2lsbCBuZWVkIHRoaXMuXFxuIDM2MzpcXHRcXG4gMzY0OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDM2NTpcXHRcXG4gMzY2OlxcdGNvbmZpZyBORl9DVF9ORVRMSU5LXFxuIDM2NzpcXHRcXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSdcXG4gMzY4OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAzNjk6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuIDM3MDpcXHRcXHRoZWxwXFxuIDM3MTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgYSBuZXRsaW5rLWJhc2VkIHVzZXJzcGFjZSBpbnRlcmZhY2VcXG4gMzcyOlxcdFxcbiAzNzM6XFx0Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxcbiAzNzQ6XFx0XFx0dHJpc3RhdGUgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgdHVuaW5nIHZpYSBOZXRsaW5rJ1xcbiAzNzU6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuIDM3NjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAzNzc6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfVElNRU9VVFxcbiAzNzg6XFx0XFx0aGVscFxcbiAzNzk6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dFxcbiAzODA6XFx0XFx0ICBmaW5lLWdyYWluIHR1bmluZy4gVGhpcyBhbGxvd3MgeW91IHRvIGF0dGFjaCBzcGVjaWZpYyB0aW1lb3V0XFxuIDM4MTpcXHRcXHQgIHBvbGljaWVzIHRvIGZsb3dzLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBnbG9iYWwgdGltZW91dCBwb2xpY3kuXFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgYE4nLlxcbiAzODQ6XFx0XFxuIDM4NTpcXHRjb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcXG4gMzg2OlxcdFxcdHRyaXN0YXRlICdDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluaydcXG4gMzg3OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAzODg6XFx0XFx0ZGVwZW5kcyBvbiBORl9DVF9ORVRMSU5LXFxuIDM4OTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjI4LjQ4MzYzMzAzOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODU4NTc2MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgTkZfQ1RfTkVUTElOSyBEZXBlbmRlbmN5KipcblxuUmlnaHQsIGxldCBtZSBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24gb3IgZGVwZW5kZW5jaWVzIGZvciBgTkZfQ1RfTkVUTElOS2AuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIEtjb25maWcgZmlsZSBpbiBgbmV0L25ldGZpbHRlci9gLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgc3Vycm91bmRpbmcgbGluZXMsIHNwZWNpZmljYWxseSwgdG8gc2VlIGhvdyBgTkZfQ1RfTkVUTElOS2AgaXMgaG9va2VkIGluIGFuZCB3aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIGl0cyBidWlsZCBzdGF0dXMuIExpa2VseSwgSSdtIGV4cGVjdGluZyB0byBsb29rIGZvciBhbiBlYXJsaWVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZW5hYmxlcyBpdCBvciBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gSSdtIGxvb2tpbmcgZm9yIHRoZSAnd2h5Jy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgxOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6MzAuMzQyMjEyODY5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51IFxcXCJDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgTkVURklMVEVSX0lOR1JFU1NcXG4gICA2OlxcdFxcdGJvb2wgXFxcIk5ldGZpbHRlciBpbmdyZXNzIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZWZhdWx0IHlcXG4gICA4OlxcdFxcdHNlbGVjdCBORVRfSU5HUkVTU1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBmcm9tIGluZ3Jlc3MgdXNpbmcgdGhlIE5ldGZpbHRlclxcbiAgMTE6XFx0XFx0ICBpbmZyYXN0cnVjdHVyZS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0Y29uZmlnIE5FVEZJTFRFUl9FR1JFU1NcXG4gIDE0OlxcdFxcdGJvb2wgXFxcIk5ldGZpbHRlciBlZ3Jlc3Mgc3VwcG9ydFxcXCJcXG4gIDE1OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9FR1JFU1NcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgYmVmb3JlIHRyYW5zbWlzc2lvbiB1c2luZyB0aGVcXG4gIDE5OlxcdFxcdCAgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgTkVURklMVEVSX1NLSVBfRUdSRVNTXFxuICAyMjpcXHRcXHRkZWZfYm9vbCBORVRGSUxURVJfRUdSRVNTIFxcdTAwMjZcXHUwMDI2IChORVRfQ0xTX0FDVCB8fCBJRkIpXFxuICAyMzpcXHRcXG4gIDI0OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS1xcbiAgMjU6XFx0XFx0Ym9vbFxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG4gIDI4OlxcdFxcdGJvb2xcXG4gIDI5OlxcdFxcbiAgMzA6XFx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQVJQXFxuICAzMTpcXHRcXHRib29sXFxuICAzMjpcXHRcXG4gIDMzOlxcdGNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcXG4gIDM0OlxcdFxcdGRlZl9ib29sIEJQRl9TWVNDQUxMXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXFxuICAzNzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGJhc2UgaG9vayBkdW1wIHN1cHBvcnRcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAgMzk6XFx0XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG4gIDQwOlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA0MzpcXHRcXHQgIHRvIGxpc3QgdGhlIGJhc2UgbmV0ZmlsdGVyIGhvb2tzIHZpYSBORk5FVExJTksuXFxuICA0NDpcXHRcXHQgIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVidWdnaW5nLlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORkFDQ1Qgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gIDQ5OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNTA6XFx0XFx0aGVscFxcbiAgNTE6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA1MjpcXHRcXHQgIGZvciBleHRlbmRlZCBhY2NvdW50aW5nIHZpYSBORk5FVExJTksuXFxuICA1MzpcXHRcXG4gIDU0OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbiAgNTU6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4gIDU2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICA1NzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDU4OlxcdFxcdGhlbHBcXG4gIDU5OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNjA6XFx0XFx0ICBmb3IgcXVldWVpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXFxuICA2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuICA2NDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDY1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNjY6XFx0XFx0aGVscFxcbiAgNjc6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA2ODpcXHRcXHQgIGZvciBsb2dnaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cXG4gIDY5OlxcdFxcbiAgNzA6XFx0XFx0ICBUaGlzIG9ic29sZXRlcyB0aGUgZXhpc3RpbmcgaXB0X1VMT0cgYW5kIGViZ191bG9nIG1lY2hhbmlzbXMsXFxuICA3MTpcXHRcXHQgIGFuZCBpcyBhbHNvIHNjaGVkdWxlZCB0byByZXBsYWNlIHRoZSBvbGQgc3lzbG9nLWJhc2VkIGlwdF9MT0dcXG4gIDcyOlxcdFxcdCAgYW5kIGlwNnRfTE9HIG1vZHVsZXMuXFxuICA3MzpcXHRcXG4gIDc0OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcXG4gIDc1OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgT1NGIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4gIDc2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICA3NzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDc4OlxcdFxcdGhlbHBcXG4gIDc5OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgODA6XFx0XFx0ICBmb3IgcGFzc2l2ZSBPUyBmaW5nZXJwcmludCB2aWEgTkZORVRMSU5LLlxcbiAgODE6XFx0XFxuICA4MjpcXHRjb25maWcgTkZfQ09OTlRSQUNLXFxuICA4MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4gIDg0OlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAgODU6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XFxuICA4NjpcXHRcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgSVBWNiAhPSBuXFxuICA4NzpcXHRcXHRoZWxwXFxuICA4ODpcXHRcXHQgIENvbm5lY3Rpb24gdHJhY2tpbmcga2VlcHMgYSByZWNvcmQgb2Ygd2hhdCBwYWNrZXRzIGhhdmUgcGFzc2VkXFxuICA4OTpcXHRcXHQgIHRocm91Z2ggeW91ciBtYWNoaW5lLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSByZWxhdGVkXFxuICA5MDpcXHRcXHQgIGludG8gY29ubmVjdGlvbnMuXFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdCAgVGhpcyBpcyByZXF1aXJlZCB0byBkbyBNYXNxdWVyYWRpbmcgb3Igb3RoZXIga2luZHMgb2YgTmV0d29ya1xcbiAgOTM6XFx0XFx0ICBBZGRyZXNzIFRyYW5zbGF0aW9uLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBlbmhhbmNlIHBhY2tldFxcbiAgOTQ6XFx0XFx0ICBmaWx0ZXJpbmcgKHNlZSBgQ29ubmVjdGlvbiBzdGF0ZSBtYXRjaCBzdXBwb3J0JyBiZWxvdykuXFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICA5NzpcXHRcXG4gIDk4OlxcdGNvbmZpZyBORl9MT0dfU1lTTE9HXFxuICA5OTpcXHRcXHR0cmlzdGF0ZSBcXFwiU3lzbG9nIHBhY2tldCBsb2dnaW5nXFxcIlxcbiAxMDA6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjMwLjM0MjMzMjk0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjMzNDM0OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gYE5GX0NUX05FVExJTktgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5GX0NUX05FVExJTktgIGhlcmUuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgaXQgZGVwZW5kcyBvbiBgSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSYCDigJMgcHJldHR5IHN0YW5kYXJkIHN0dWZmIGZvciBhbnkgbmV0d29yayBmaWx0ZXJpbmcgZmVhdHVyZS4gQW5kIG9mIGNvdXJzZSwgaXQncyBhbHNvIHRpZWQgdG8gYE5GX0NPTk5UUkFDS2AuIE1ha2VzIHNlbnNlOyBgY3RuZXRsaW5rYCBoYXMgdG8gd29yayB3aXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcuIEknbSBhc3N1bWluZyB0aGF0IGNvbm5lY3Rpb24gdHJhY2tpbmcgbXVzdCBiZSBlbmFibGVkLCBvciBhdCBsZWFzdCBiZSBhdmFpbGFibGUgaW4gdGhlIHNhbWUgbWVudSwgZm9yIHRoaXMgdG8gd29yay4gSXQgYWxzbyByZXF1aXJlcyBgSVBWNmAgaWYgd2UncmUgZGVhbGluZyB3aXRoIElQdjYgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmlsdGVyaW5nLCB3aGljaCBpcyBleHBlY3RlZC5cblxuTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gZmlndXJlIG91dCB3aGF0IHVzZXMgdGhpcyB0aGluZywgc28gbGV0J3MgY2hlY2sgY2FsbGVycyBvZiBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhpcyBtb2R1bGUgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZCBhbmQgaW4gd2hhdCBjb250ZXh0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZmxvdywgc28ga25vd2luZyB0aGUgY2FsbGVycyBvZiB0aGlzIGtleSBmdW5jdGlvbiBpcyBlc3NlbnRpYWwgdG8gZ3Jhc3BpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzEyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNDozMi41NzU3NzA5NjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjYzMTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEwNjY9c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwODQtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwODU6c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmZpbHRlcl90dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA4Ni1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpjdF90dXBsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMTU0PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgbmZfY29ubiAqY3QsIHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3NS1cXHRcXHR0dXBsZSA9IG5mX2N0X3R1cGxlKGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMTc2OlxcdFxcdGlmICghY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShcXHUwMDI2ZmlsdGVyLVxcdTAwM2VvcmlnLCB0dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGZpbHRlci1cXHUwMDNlb3JpZ19mbGFncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTgzLVxcdFxcdHR1cGxlID0gbmZfY3RfdHVwbGUoY3QsIElQX0NUX0RJUl9SRVBMWSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjExODQ6XFx0XFx0aWYgKCFjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKFxcdTAwMjZmaWx0ZXItXFx1MDAzZXJlcGx5LCB0dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE4NS1cXHRcXHRcXHRcXHRcXHRcXHQgIGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjMyLjYyODQzOTY1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzkyOTUxNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBtYXRjaGluZyBjb25uZWN0aW9uIHRyYWNraW5nIChjb25udHJhY2spIGVudHJpZXMgd2l0aGluIHRoZSBOZXRsaW5rIGZyYW1ld29yay4gSSdtIHRoaW5raW5nLCBcIldobydzIHVzaW5nIHRoaXM/XCIgVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyB3aWxsIGdpdmUgbWUgdmFsdWFibGUgaW5zaWdodCBpbnRvIHdoZXJlIHRoaXMgbWF0Y2hpbmcgbG9naWMgaXMgYmVpbmcgYXBwbGllZCBhbmQsIHBvdGVudGlhbGx5LCB0aGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgaW1wbGljYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAgaXMgaW52b2tlZC4gSSBjYW4ndCBqdXN0IGJsaW5kbHkgdHJhY2UgdGhlIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSB2YXJpb3VzIE5ldGxpbmsgbWVzc2FnZSB0eXBlcyBhbmQgZmlsdGVycyB0aGF0IGNvdWxkIHRyaWdnZXIgdGhpcyBtYXRjaGluZy4gRm9yIGV4YW1wbGUsIGFyZSB3ZSBkZWFsaW5nIHdpdGggcmVhZHMvcXVlcmllcyBvZiBjb25udHJhY2sgZW50cmllcyAobGlrZSBmcm9tIGBuZmN0YCB1c2Vyc3BhY2UgdG9vbHMpLCBtb2RpZmljYXRpb25zIChlLmcuLCBwb2xpY3kgdXBkYXRlcyksIG9yIHBlcmhhcHMgZXZlbiBjb25uZWN0aW9uIG5vdGlmaWNhdGlvbnM/XG5cbkkgbmVlZCB0byBjb25zaWRlciB0aGUgZGlmZmVyZW50IE5ldGxpbmsgZmFtaWxpZXMgYW5kIHRoZWlyIG1lc3NhZ2UgdHlwZXMuIFRoaXMgY291bGQgYmUgaW4gdGhlIGNvbnRleHQgb2YgbmZuZXRsaW5rX2N0aGVscGVyIG9yIG5mbmV0bGlua19jb25udHJhY2sgaXRzZWxmLiBJIGFsc28gbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgZGlmZmVyZW50IHBvdGVudGlhbCBmaWx0ZXJpbmcgY3JpdGVyaWEgdGhhdCBjb3VsZCBiZSB1c2VkLiBXZSBrbm93IHRoYXQgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgIGlzIGludm9sdmVkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgZmlsdGVyIHN0cnVjdHVyZSBsb29rcyBsaWtlIGFuZCB3aGljaCBOZXRsaW5rIGF0dHJpYnV0ZXMgYXJlIGJlaW5nIGV2YWx1YXRlZC4gSSBoYXZlIHRvIGxvb2sgaW50byB0aGUgZmlsdGVyaW5nIGxvZ2ljLCB1bmRlcnN0YW5kIGhvdyBzcGVjaWZpYyBhdHRyaWJ1dGVzIG9mIGEgY29ubnRyYWNrIGVudHJ5IChsaWtlIHNvdXJjZS9kZXN0aW5hdGlvbiBJUC9wb3J0LCBwcm90b2NvbCwgc3RhdGUsIGV0Yy4pIGFyZSBjb21wYXJlZCBhZ2FpbnN0IHRoZSBwcm92aWRlZCBmaWx0ZXIgY3JpdGVyaWEuXG5cbkkgYWxzbyBoYXZlIHRvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBjb25udHJhY2sgdGFibGUgZHVyaW5nIHRoZXNlIG1hdGNoaW5nIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBlc3BlY2lhbGx5IHdpdGggbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudHMgYW5kIGhvdyB0aGV5IGFmZmVjdCB0aGUgbmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayB1c2FnZSB3aXRoaW4gdGhlIGNhbGwgcGF0aCBvZiBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAuIEknbSBnb2luZyB0byBxdWlja2x5IGdldCBpbnRvIHRoZSBjYWxsZXJzIHRvIHNlZSBpZiB0aGV5IGFyZSBkb2luZyBhbnl0aGluZyBpbiB0aGUgd3Jvbmcgb3JkZXIgb3Igd2l0aG91dCB0aGUgcHJvcGVyIHByb3RlY3Rpb24uXG5cblVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgY29ubnRyYWNrIGFuZCBuZXRmaWx0ZXIgcHJvY2Vzc2luZy4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBrZXkgdG8gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjM3LjAyMTM5Mzg4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExMTk1NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaFxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMDg1PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpmaWx0ZXJfdHVwbGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE1My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTE1NDpzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2goc3RydWN0IG5mX2Nvbm4gKmN0LCB2b2lkICpkYXRhKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTU1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMjEzPWN0bmV0bGlua19kdW1wX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMjY0LVxcdFxcdFxcdH1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTI2NTpcXHRcXHRcXHRpZiAoIWN0bmV0bGlua19maWx0ZXJfbWF0Y2goY3QsIGNiLVxcdTAwM2VkYXRhKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTI2Ni1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNTg1PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZsdXNoX2l0ZXJhdGUoc3RydWN0IG5mX2Nvbm4gKmN0LCB2b2lkICpkYXRhKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNTg2LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTU4NzpcXHRyZXR1cm4gY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaChjdCwgZGF0YSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE1ODgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNDozNy4wNzI1MTgyMDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwNTk1NTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBOZXRmaWx0ZXIgQ29ubmVjdGlvbiBUcmFja2luZyBOZXRsaW5rIEludGVyYWN0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGFibGUgaXMgYWNjZXNzZWQgYW5kIG1hbmFnZWQgdmlhIG5ldGxpbmsuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aHMgb2YgZnVuY3Rpb25zIGxpa2UgYGN0bmV0bGlua19kdW1wX3RhYmxlYCBhbmQgYGN0bmV0bGlua19mbHVzaF9pdGVyYXRlYC4gVGhlc2UgYXJlIGtleSBlbnRyeSBwb2ludHMsIHNvIHRoZXkncmUgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZm9yIGZpZ3VyaW5nIG91dCBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIHRoZSBjb25udHJhY2sgZGF0YSBzdHJ1Y3R1cmVzLiBJJ20gYWxzbyBnb2luZyB0byBoYXZlIHRvIGZvbGxvdyB0aGUgY2FsbHMgZnJvbSB0aG9zZSBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGRhdGEgaXMgZHVtcGVkIHRvIHVzZXIgc3BhY2UsIGFuZCBob3cgZmx1c2hpbmcgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIG92ZXIgbmV0bGluay4gTGV0J3Mgc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNDozOS4wNzg0NzU5OTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzY2ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0bmV0bGlua19kdW1wX3RhYmxlfGN0bmV0bGlua19mbHVzaF9pdGVyYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMjEyPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTIxMzpjdG5ldGxpbmtfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEyMTQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE1NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGN0X25sYV9wb2xpY3lbQ1RBX01BWCsxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNTg0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNTg1OnN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZsdXNoX2l0ZXJhdGUoc3RydWN0IG5mX2Nvbm4gKmN0LCB2b2lkICpkYXRhKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNTg2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNTkwPXN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTYwOC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTYwOTpcXHRuZl9jdF9pdGVyYXRlX2NsZWFudXBfbmV0KGN0bmV0bGlua19mbHVzaF9pdGVyYXRlLCBcXHUwMDI2aXRlcik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2MTAtXFx0a2ZyZWUoZmlsdGVyKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjY4PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjgyLVxcdFxcdFxcdC5zdGFydCA9IGN0bmV0bGlua19zdGFydCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTY4MzpcXHRcXHRcXHQuZHVtcCA9IGN0bmV0bGlua19kdW1wX3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjg0LVxcdFxcdFxcdC5kb25lID0gY3RuZXRsaW5rX2RvbmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjM5LjEyOTI0ODM5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTQ3OTQxOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbm50cmFjayBOZXRsaW5rIE1vZHVsZSBmb3IgRnV6emluZyoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEkndmUgZ290LiBJJ20gZm9jdXNpbmcgb24gdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBjb25udHJhY2ssIGFuZCBteSBwcmltYXJ5IHRhcmdldHMgYXJlIHRoZXNlIGZ1bmN0aW9uczogYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVgLCBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAsIGBjdG5ldGxpbmtfZHVtcF90YWJsZWAsIGBjdG5ldGxpbmtfZmx1c2hfY29ubnRyYWNrYCwgYW5kIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBjdG5ldGxpbmtfZmx1c2hfY29ubnRyYWNrYCBpcyBhY3R1YWxseSBqdXN0IGEgd3JhcHBlciBmb3IgZGVsZXRpb24sIG9yIHBlcmhhcHMgYGN0bmV0bGlua19kZWxfY29ubnRyYWNrYC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0LCBidXQgdGhlIGltcG9ydGFudCB0aGluZyBpcyB0aG9zZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgSSB3YW50IHRvIHN0cmVzcy5cblxuSSd2ZSBhbHNvIHZlcmlmaWVkIHRoYXQgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVgIGlzIGluZGVlZCBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uIFRoYXQncyBnb29kIHRvIGtub3cgZm9yIHRoZSBmdXp6aW5nIHNldHVwLiBJIGNhbiBwcm9jZWVkIGtub3dpbmcgdGhlIHNjb3BlLlxuXG5NeSBiYXNlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIGZ1enppbmcgZWZmb3J0IHJlcXVpcmUgYE5GX0NPTk5UUkFDS2AsIGBORl9DVF9ORVRMSU5LYCwgYElQVjZgLCBhbmQgYE5FVEZJTFRFUmAgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgYWxsIHByZXNlbnQgaW4gdGhlIGVudmlyb25tZW50IEknbSBmdXp6aW5nLlxuXG5NeSBhbmFseXNpcyBoYXMgbGVkIG1lIHRvIGJlbGlldmUgdGhhdCB0aGlzIG1vZHVsZSBpcyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgcG90ZW50aWFsIGV4cG9zdXJlIHN1cmZhY2UuIFNvLCBJIGFtIG1hcmtpbmcgdGhpcyBmdXp6IHRhcmdldCBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgYW5kIEkgYW0gc2V0dGluZyB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhY2NvcmRpbmdseS4gSSBjYW4ndCBiZSBtb3JlIGNvbmNpc2UgdGhhbiB0aGF0LCBzbyBJIHdpbGwgbm93IGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc5OCwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6NDMuNjc3MTkyNzI0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk3MjY5OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiTkVURklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZVwiLFxuICAgIFwiY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiY3RuZXRsaW5rX2R1bXBfdGFibGVcIixcbiAgICBcImN0bmV0bGlua19mbHVzaF9jb25udHJhY2tcIixcbiAgICBcImN0bmV0bGlua19nZXRfY29ubnRyYWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBib29sZWFuIGludmVydGVkIGxvZ2ljIGJ1ZyBpbiBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKCkgd2hlbiBtYXRjaGluZyBJUHY2IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIGJ5IHJlcGxhY2luZyAhaXB2Nl9hZGRyX2NtcCgpIHdpdGggIWlwdjZfYWRkcl9lcXVhbCgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGxvZ2ljIGluIHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIHN1YnN5c3RlbSwgd2hpY2ggaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlXCIsXG4gICAgXCJjdG5ldGxpbmtfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJjdG5ldGxpbmtfZHVtcF90YWJsZVwiLFxuICAgIFwiY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFja1wiLFxuICAgIFwiY3RuZXRsaW5rX2dldF9jb25udHJhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJvb2xlYW4gaW52ZXJ0ZWQgbG9naWMgYnVnIGluIGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKSB3aGVuIG1hdGNoaW5nIElQdjYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYnkgcmVwbGFjaW5nICFpcHY2X2FkZHJfY21wKCkgd2l0aCAhaXB2Nl9hZGRyX2VxdWFsKCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgbG9naWMgaW4gdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgc3Vic3lzdGVtLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6NDMuNzU2OTI3NDYyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzA0OTUzODIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjQzLjc1NzM3MDY4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMzMDQ5MDkwNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgYnVnIGluIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKClgIHdoZXJlIGAhaXB2Nl9hZGRyX2NtcCgpYCAod2hpY2ggcmV0dXJucyAwIG9uIG1hdGNoKSB3YXMgaW5jb3JyZWN0bHkgdXNlZCBpbnN0ZWFkIG9mIGAhaXB2Nl9hZGRyX2VxdWFsKClgICh3aGljaCByZXR1cm5zIHRydWUgb24gbWF0Y2gpLCBjYXVzaW5nIElQdjYgYWRkcmVzcyBmaWx0ZXJpbmcgZHVyaW5nIGNvbm50cmFjayBuZXRsaW5rIGR1bXBpbmcgdG8gcmVqZWN0IG1hdGNoZXMgYW5kIGFjY2VwdCBtaXNtYXRjaGVzLiBcXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBvbmx5IGEgYm9vbGVhbiBlcXVhbGl0eSBjaGVjayBiZXR3ZWVuIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBJUHY2IGFkZHJlc3NlcyBpbiBjb25udHJhY2sgdHVwbGVzICh0aGUgZmlsdGVyIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgIGFuZCB0aGUgY29ubnRyYWNrIHR1cGxlIGlzIHBvcHVsYXRlZCB1cG9uIGNvbm5lY3Rpb24gdHJhY2tpbmcpLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWZmZWN0ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYzEyNjA0ZjY1MGM5NzczYTQ2OWUyMWUyOWVkNGE2NGY3NDc3MzZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNzoxNDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuaW5kZXggNTc5YWRhMDYzYjFiYi4uZWY0ODM2OTk2NTliZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5AQCAtMTA5OCwxMyArMTA5OCwxMyBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLFxuIFx0XHRicmVhaztcbiBcdGNhc2UgTkZQUk9UT19JUFY2OlxuIFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWlwdjZfYWRkcl9jbXAoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pbjYsXG4tXHRcdFx0XHQgICBcdTAwMjZjdF90dXBsZS1cdTAwM2VzcmMudTMuaW42KSlcbitcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pbjYsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmN0X3R1cGxlLVx1MDAzZXNyYy51My5pbjYpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX0RTVCkpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWlwdjZfYWRkcl9jbXAoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pbjYsXG4tXHRcdFx0XHQgICBcdTAwMjZjdF90dXBsZS1cdTAwM2Vkc3QudTMuaW42KSlcbitcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pbjYsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmN0X3R1cGxlLVx1MDAzZWRzdC51My5pbjYpKVxuIFx0XHRcdHJldHVybiAwO1xuIFx0XHRicmVhaztcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjQzLjc1NzM3MTY4MloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTkxOTkwNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvbm50cmFjayBOZXRsaW5rIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHJlbGF0ZWQgdG8gSVB2NiBhZGRyZXNzIGNvbXBhcmlzb24gd2l0aGluIHRoZSBuZXRmaWx0ZXIgY29ubnRyYWNrIG5ldGxpbmsgbW9kdWxlLiBUaGUgZGlmZiBzaG93cyBjaGFuZ2VzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGUgc3dpdGNoIGZyb20gYGlwdjZfYWRkcl9jbXBgIHRvIGBpcHY2X2FkZHJfZXF1YWxgLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGJ1ZyBmaXggb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gaG93IElQdjYgYWRkcmVzc2VzIGFyZSBjb21wYXJlZCBkdXJpbmcgZmlsdGVyaW5nLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgaW50ZW50IGhlcmU7IG15IGV4cGVydGlzZSBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSB0cml2aWFsIGNoYW5nZS4gVGhlIGltcGxpY2F0aW9ucyBmb3IgY29ubnRyYWNrIHRhYmxlIGxvb2t1cHMgYW5kIGZpbHRlcmluZyBydWxlcyBhcmUgc2lnbmlmaWNhbnQuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBvbGRlciBmdW5jdGlvbiBjYWxsIHdhcyBpbmNvcnJlY3QsIGFuZCBob3cgdGhlIG5ldyBmdW5jdGlvbiBjYWxsIGFmZmVjdHMgb3RoZXIgY29tcGFyaXNvbnMuIEkgc3VzcGVjdCB0aGVyZSBtYXkgaGF2ZSBiZWVuIGFuIHVuaW50ZW5kZWQgYmVoYXZpb3IgY2hhbmdlIHdpdGggYSBzdWJ0bGUgZGlmZmVyZW5jZSBpbiB0aGUgcHJldmlvdXMgYW5kIG5ldyBmdW5jdGlvbiBjYWxscy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBhcm91bmQgbGluZSAxMDk4LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgbG9naWMgYW5kIHVuZGVyc3RhbmQgd2h5IHRoaXMgc3BlY2lmaWMgY2hhbmdlIHdhcyBtYWRlIHVzaW5nIGByZWFkLWZpbGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6NDguMzQ5MzY0OTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdFxcdGlmIChmaWx0ZXIpXFxuMTA4MTpcXHRcXHRcXHRjYi1cXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcXG4xMDgyOlxcdFxcdHJldHVybiAwO1xcbjEwODM6XFx0fVxcbjEwODQ6XFx0XFxuMTA4NTpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLFxcbjEwODY6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqY3RfdHVwbGUsXFxuMTA4NzpcXHRcXHRcXHRcXHRcXHRcXHR1X2ludDMyX3QgZmxhZ3MsIGludCBmYW1pbHkpXFxuMTA4ODpcXHR7XFxuMTA4OTpcXHRcXHRzd2l0Y2ggKGZhbWlseSkge1xcbjEwOTA6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuMTA5MTpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9TUkMpKSBcXHUwMDI2XFx1MDAyNlxcbjEwOTI6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUzLmlwICE9IGN0X3R1cGxlLVxcdTAwM2VzcmMudTMuaXApXFxuMTA5MzpcXHRcXHRcXHRcXHRyZXR1cm4gIDA7XFxuMTA5NDpcXHRcXG4xMDk1OlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX0RTVCkpIFxcdTAwMjZcXHUwMDI2XFxuMTA5NjpcXHRcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2Vkc3QudTMuaXAgIT0gY3RfdHVwbGUtXFx1MDAzZWRzdC51My5pcClcXG4xMDk3OlxcdFxcdFxcdFxcdHJldHVybiAgMDtcXG4xMDk4OlxcdFxcdFxcdGJyZWFrO1xcbjEwOTk6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuMTEwMDpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9TUkMpKSBcXHUwMDI2XFx1MDAyNlxcbjExMDE6XFx0XFx0XFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUzLmluNixcXG4xMTAyOlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN0X3R1cGxlLVxcdTAwM2VzcmMudTMuaW42KSlcXG4xMTAzOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMDQ6XFx0XFxuMTEwNTpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcXHUwMDI2XFx1MDAyNlxcbjExMDY6XFx0XFx0XFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUzLmluNixcXG4xMTA3OlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN0X3R1cGxlLVxcdTAwM2Vkc3QudTMuaW42KSlcXG4xMTA4OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMDk6XFx0XFx0XFx0YnJlYWs7XFxuMTExMDpcXHRcXHR9XFxuMTExMTpcXHRcXG4xMTEyOlxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX05VTSkpIFxcdTAwMjZcXHUwMDI2XFxuMTExMzpcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2Vkc3QucHJvdG9udW0gIT0gY3RfdHVwbGUtXFx1MDAzZWRzdC5wcm90b251bSlcXG4xMTE0OlxcdFxcdFxcdHJldHVybiAwO1xcbjExMTU6XFx0XFxuMTExNjpcXHRcXHRzd2l0Y2ggKGN0X3R1cGxlLVxcdTAwM2Vkc3QucHJvdG9udW0pIHtcXG4xMTE3OlxcdFxcdGNhc2UgSVBQUk9UT19UQ1A6XFxuMTExODpcXHRcXHRjYXNlIElQUFJPVE9fVURQOlxcbjExMTk6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fU1JDX1BPUlQpKSBcXHUwMDI2XFx1MDAyNlxcbjExMjA6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUudGNwLnBvcnQgIT0gY3RfdHVwbGUtXFx1MDAzZXNyYy51LnRjcC5wb3J0KVxcbjExMjE6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0RTVF9QT1JUKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTI0OlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51LnRjcC5wb3J0ICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QudS50Y3AucG9ydClcXG4xMTI1OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMjY6XFx0XFx0XFx0YnJlYWs7XFxuMTEyNzpcXHRcXHRjYXNlIElQUFJPVE9fSUNNUDpcXG4xMTI4OlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBfVFlQRSkpIFxcdTAwMjZcXHUwMDI2XFxuMTEyOTpcXHRcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2Vkc3QudS5pY21wLnR5cGUgIT0gY3RfdHVwbGUtXFx1MDAzZWRzdC51LmljbXAudHlwZSlcXG4xMTMwOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMzE6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUF9DT0RFKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTMyOlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51LmljbXAuY29kZSAhPSBjdF90dXBsZS1cXHUwMDNlZHN0LnUuaWNtcC5jb2RlKVxcbjExMzM6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTEzNDpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QX0lEKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTM1OlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZXNyYy51LmljbXAuaWQgIT0gY3RfdHVwbGUtXFx1MDAzZXNyYy51LmljbXAuaWQpXFxuMTEzNjpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTM3OlxcdFxcdFxcdGJyZWFrO1xcbjExMzg6XFx0XFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcXG4xMTM5OlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBWNl9UWVBFKSkgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6NDguMzQ5NjYzNzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU3MDk1NDU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBMb2dpYyBGbGF3IGluIElQdjYgQWRkcmVzcyBDb21wYXJpc29ucyoqXG5cbk9rYXksIGxldCdzIHRyYWNlIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBpcHY2X2FkZHJfY21wYCBhbmQgYGlwdjZfYWRkcl9lcXVhbGAuIFJpZ2h0LCBgaXB2Nl9hZGRyX2NtcGAgaXMgYSBiaXQgbGlrZSBgbWVtY21wYDsgaXQgcmV0dXJucyAwIGlmIHRoZSBhZGRyZXNzZXMgYXJlIGlkZW50aWNhbC4gQnV0IGhvbGQgb24uLi4gaWYgYGlwdjZfYWRkcl9jbXAoYTEsIGEyKWAgcmV0dXJuZWQgMCBvbiBlcXVhbGl0eSwgdGhlbiBgIWlwdjZfYWRkcl9jbXBgIHdvdWxkIGV2YWx1YXRlIHRvIHRydWUgKndoZW4gdGhlIGFkZHJlc3NlcyB3ZXJlIGVxdWFsKiEgSSBzZWUgdGhlIHByb2JsZW0uIEJlZm9yZSwgd2hlbiB0aGUgYWRkcmVzc2VzIG1hdGNoZWQgKG1lYW5pbmcgYGlwdjZfYWRkcl9jbXBgIHdhcyAwKSwgYCFpcHY2X2FkZHJfY21wYCB3YXMgMSwgc28gdGhlIGZ1bmN0aW9uIHdvdWxkIHJldHVybiAwLCBlZmZlY3RpdmVseSByZWplY3RpbmcgdGhlIG1hdGNoIVxuXG5Ob3csIGBpcHY2X2FkZHJfZXF1YWwoYTEsIGEyKWAgYmVoYXZlcyBtb3JlIGludHVpdGl2ZWx5LCByZXR1cm5pbmcgdHJ1ZSAobm9uLXplcm8pIG9uIGVxdWFsaXR5IGFuZCBmYWxzZSAoemVybykgb3RoZXJ3aXNlLiBUaGlzIG1lYW5zIGAhaXB2Nl9hZGRyX2VxdWFsYCByZXR1cm5zIHRydWUgaWYgYWRkcmVzc2VzIGFyZSBOT1QgZXF1YWwsIHdoaWNoIGlzIGFsc28gYSByZWplY3Rpb24uXG5cblNvLCBpbiB0aGUgb3JpZ2luYWwgY29kZSwgdGhlIHVzZSBvZiBgIWlwdjZfYWRkcl9jbXBgIHdhcyBhIGNsYXNzaWMgaW52ZXJ0ZWQgbG9naWMgYnVnIHdpdGhpbiBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBpcHY2X2FkZHJfY21wYCBhZ2FpbiwganVzdCB0byBiZSBzdXJlLiBJJ2xsIGZpbmQgaXQgaW4gYGluY2x1ZGUvbmV0L2lwdjYuaGAgb3Igc29tZXdoZXJlIHNpbWlsYXIgdG8gY29uZmlybSB0aGlzIGlzIHJlYWxseSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTM1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6NTIuOTIwNjIxNjMzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc2NzM5ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfYWRkcl9jbXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM9NDU2PXN0YXRpYyBpbnQgY29tcGFyZV9uZXRkZXZfYW5kX2lwKGludCBpZmluZGV4X2EsIHN0cnVjdCBzb2NrYWRkciAqc2EsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy00NzgtXFx0ICAgIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZShzYSwgMCkgXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM6NDc5OlxcdFxcdHJldHVybiBpcHY2X2FkZHJfY21wKFxcdTAwMjYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYSktXFx1MDAzZXNpbjZfYWRkcixcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy00ODAtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2KChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2IpLVxcdTAwM2VzaW42X2FkZHIpO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM9MTM2NT1zdGF0aWMgaW50IGNtYV9hZGRyX2NtcChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgY29uc3Qgc3RydWN0IHNvY2thZGRyICpkc3QpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy0xMzc4LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jOjEzNzk6XFx0XFx0aWYgKGlwdjZfYWRkcl9jbXAoXFx1MDAyNnNyY19hZGRyNi1cXHUwMDNlc2luNl9hZGRyLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTEzODAtXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2ZHN0X2FkZHI2LVxcdTAwM2VzaW42X2FkZHIpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ycGMuYz04NTc9c3RydWN0IGZibmljX2lwX2FkZHIgKl9fZmJuaWNfaXA2X3N5bmMoc3RydWN0IGZibmljX2RldiAqZmJkLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ycGMuYy05MTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ycGMuYzo5MTU6XFx0XFx0aWYgKGlwdjZfYWRkcl9jbXAoXFx1MDAyNmlwX2FkZHItXFx1MDAzZXZhbHVlLCBhZGRyKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3JwYy5jLTkxNi1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2QzLmM9MTk4Nj1pd2xfbWxkX3NlbmRfcHJvdG9fb2ZmbG9hZChzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuYy0yMDM4LVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBuX25zYyBcXHUwMDI2XFx1MDAyNiBqIFxcdTAwM2MgYzsgaisrKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2QzLmM6MjAzOTpcXHRcXHRcXHRpZiAoaXB2Nl9hZGRyX2NtcChcXHUwMDI2bnNjW2pdLmRlc3RfaXB2Nl9hZGRyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2QzLmMtMjA0MC1cXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZzb2xpY2l0ZWRfYWRkcikgPT0gMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29mZmxvYWRpbmcuYz0yOT1pbnQgaXdsX212bV9zZW5kX3Byb3RvX29mZmxvYWQoc3RydWN0IGl3bF9tdm0gKm12bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29mZmxvYWRpbmcuYy0xMDMtXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGM7IGorKylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9vZmZsb2FkaW5nLmM6MTA0OlxcdFxcdFxcdFxcdGlmIChpcHY2X2FkZHJfY21wKFxcdTAwMjZuc2Nbal0uZGVzdF9pcHY2X2FkZHIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vb2ZmbG9hZGluZy5jLTEwNS1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZzb2xpY2l0ZWRfYWRkcikgPT0gMClcXG4tLVxcbmluY2x1ZGUvbmV0L2lwdjYuaD01MDA9c3RhdGljIGlubGluZSBfX3UzMiBpcHY2X2lmYWNlX3Njb3BlX2lkKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgaW50IGlmYWNlKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTUwNC1cXG5pbmNsdWRlL25ldC9pcHY2Lmg6NTA1OnN0YXRpYyBpbmxpbmUgaW50IGlwdjZfYWRkcl9jbXAoY29uc3Qgc3RydWN0IGluNl9hZGRyICphMSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphMilcXG5pbmNsdWRlL25ldC9pcHY2LmgtNTA2LXtcXG4tLVxcbm5ldC9ibHVldG9vdGgvNmxvd3Bhbi5jPTE0MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBsb3dwYW5fcGVlciAqcGVlcl9sb29rdXBfZHN0KHN0cnVjdCBsb3dwYW5fYnRsZV9kZXYgKmRldixcXG4tLVxcbm5ldC9ibHVldG9vdGgvNmxvd3Bhbi5jLTE4MS1cXG5uZXQvYmx1ZXRvb3RoLzZsb3dwYW4uYzoxODI6XFx0XFx0aWYgKCFpcHY2X2FkZHJfY21wKFxcdTAwMjZwZWVyLVxcdTAwM2VwZWVyX2FkZHIsIG5leHRob3ApKSB7XFxubmV0L2JsdWV0b290aC82bG93cGFuLmMtMTgzLVxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz00MTU9dm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ0OC1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjQ0OTpcXHRpZiAoIWlwdjZfYWRkcl9jbXAoc2FkZHIsIGRhZGRyKSkge1xcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNDUwLVxcdFxcdC8qIHByZXZlbnQgZmxvb2RpbmcgdG8gbmVpZ2ggc3VwcHJlc3MgcG9ydHMgKi9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTM0Mz1icl9tdWx0aWNhc3RfZmluZF9ncm91cF9zcmMoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcsIHN0cnVjdCBicl9pcCAqaXApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTEzNTUtXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoZW50LCBcXHUwMDI2cGctXFx1MDAzZXNyY19saXN0LCBub2RlKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTM1NjpcXHRcXHRcXHRpZiAoIWlwdjZfYWRkcl9jbXAoXFx1MDAyNmVudC1cXHUwMDNlYWRkci5zcmMuaXA2LCBcXHUwMDI2aXAtXFx1MDAzZXNyYy5pcDYpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTM1Ny1cXHRcXHRcXHRcXHRyZXR1cm4gZW50O1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zMTc5PXN0YXRpYyBib29sIGJyX211bHRpY2FzdF9zZWxlY3RfcXVlcmllcihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMjAwLVxcdFxcdG90aGVyX3RpbWVyID0gXFx1MDAyNmJybWN0eC1cXHUwMDNlaXA2X290aGVyX3F1ZXJ5LnRpbWVyO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzIwMTpcXHRcXHRpZiAoaXB2Nl9hZGRyX2NtcChcXHUwMDI2c2FkZHItXFx1MDAzZXNyYy5pcDYsIFxcdTAwMjZxdWVyaWVyLVxcdTAwM2VhZGRyLnNyYy5pcDYpIFxcdTAwM2M9IDApXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMjAyLVxcdFxcdFxcdGdvdG8gdXBkYXRlO1xcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTI3Mz1zdGF0aWMgaW5saW5lIGludCBuaF9jb21wKHN0cnVjdCBmaWJfaW5mbyAqZmksIHN0cnVjdCBmaWJfaW5mbyAqb2ZpKVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTMwMy1cXHRcXHRpZiAobmgtXFx1MDAzZWZpYl9uaF9nd19mYW1pbHkgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MzA0OlxcdFxcdCAgICBpcHY2X2FkZHJfY21wKFxcdTAwMjZuaC1cXHUwMDNlZmliX25oX2d3NiwgXFx1MDAyNm9uaC1cXHUwMDNlZmliX25oX2d3NikpXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTMwNS1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9NzQyPXN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy04MzMtXFx0XFx0ICAgIChjZmctXFx1MDAzZWZjX2d3X2ZhbWlseSA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo4MzQ6XFx0XFx0ICAgICBpcHY2X2FkZHJfY21wKFxcdTAwMjZuaC1cXHUwMDNlZmliX25oX2d3NiwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfZ3c2KSkpIHtcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtODM1LVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz05Mjg9aW50IGZpYl9uaF9tYXRjaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIHN0cnVjdCBmaWJfaW5mbyAqZmksXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtOTc0LVxcdFxcdGlmIChjZmctXFx1MDAzZWZjX2d3X2ZhbWlseSA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo5NzU6XFx0XFx0ICAgIGlwdjZfYWRkcl9jbXAoXFx1MDAyNmNmZy1cXHUwMDNlZmNfZ3c2LCBcXHUwMDI2bmgtXFx1MDAzZWZpYl9uaF9ndzYpKVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05NzYtXFx0XFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTAzNC1cXHRcXHRcXHRcXHRcXHRpZiAoY2ZnMi5mY19nd19mYW1pbHkgIT0gQUZfSU5FVDYgfHxcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MTAzNTpcXHRcXHRcXHRcXHRcXHQgICAgaXB2Nl9hZGRyX2NtcChcXHUwMDI2Y2ZnMi5mY19ndzYsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEwMzYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmgtXFx1MDAzZWZpYl9uaF9ndzYpKVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz01MDk9c3RhdGljIGJvb2wgZm91X2NmZ19jbXAoc3RydWN0IGZvdSAqZm91LCBzdHJ1Y3QgZm91X2NmZyAqY2ZnKVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy01MjctXFx0fSBlbHNlIHtcXG5uZXQvaXB2NC9mb3VfY29yZS5jOjUyODpcXHRcXHRpZiAoaXB2Nl9hZGRyX2NtcChcXHUwMDI2c2stXFx1MDAzZXNrX3Y2X3Jjdl9zYWRkciwgXFx1MDAyNnVkcF9jZmctXFx1MDAzZWxvY2FsX2lwNikgfHxcXG5uZXQvaXB2NC9mb3VfY29yZS5jOjUyOTpcXHRcXHQgICAgaXB2Nl9hZGRyX2NtcChcXHUwMDI2c2stXFx1MDAzZXNrX3Y2X2RhZGRyLCBcXHUwMDI2dWRwX2NmZy1cXHUwMDNlcGVlcl9pcDYpKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtNTMwLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTE0NDc9c3RhdGljIGludCB0Y3BfYW9fdmVyaWZ5X2lwdjYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX2FvX2FkZCAqY21kLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTQ5My1cXHRcXHRpcHY2X2FkZHJfcHJlZml4KFxcdTAwMjZwZngsIGFkZHIsIHByZWZpeCk7XFxubmV0L2lwdjQvdGNwX2FvLmM6MTQ5NDpcXHRcXHRpZiAoaXB2Nl9hZGRyX2NtcChcXHUwMDI2cGZ4LCBhZGRyKSlcXG5uZXQvaXB2NC90Y3BfYW8uYy0xNDk1LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MjA5Mj1zdGF0aWMgaW50IHRjcF9hb19jb3B5X21rdHNfdG9fdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0yMTkxLVxcdFxcdFxcdFxcdGlwdjZfYWRkcl9wcmVmaXgoXFx1MDAyNnBmeCwgYWRkcjYsIG9wdF9pbi5wcmVmaXgpO1xcbm5ldC9pcHY0L3RjcF9hby5jOjIxOTI6XFx0XFx0XFx0XFx0aWYgKGlwdjZfYWRkcl9jbXAoXFx1MDAyNnBmeCwgYWRkcjYpKVxcbm5ldC9pcHY0L3RjcF9hby5jLTIxOTMtXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYz05Nj1pcDZ0X3NucHRfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTlBULmMtMTEyLVxcdFxcdGlwdjZfYWRkcl9wcmVmaXgoXFx1MDAyNmJvdW5jZWRfcGZ4LCBcXHUwMDI2Ym91bmNlZF9oZHItXFx1MDAzZWRhZGRyLCBucHQtXFx1MDAzZXNyY19wZnhfbGVuKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYzoxMTM6XFx0XFx0aWYgKGlwdjZfYWRkcl9jbXAoXFx1MDAyNmJvdW5jZWRfcGZ4LCBcXHUwMDI2bnB0LVxcdTAwM2VzcmNfcGZ4LmluNikgPT0gMClcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYy0xMTQtXFx0XFx0XFx0aXA2dF9ucHRfbWFwX3BmeChucHQsIFxcdTAwMjZib3VuY2VkX2hkci1cXHUwMDNlZGFkZHIpO1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTlBULmM9MTIxPWlwNnRfZG5wdF90ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYy0xMzctXFx0XFx0aXB2Nl9hZGRyX3ByZWZpeChcXHUwMDI2Ym91bmNlZF9wZngsIFxcdTAwMjZib3VuY2VkX2hkci1cXHUwMDNlc2FkZHIsIG5wdC1cXHUwMDNlc3JjX3BmeF9sZW4pO1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jOjEzODpcXHRcXHRpZiAoaXB2Nl9hZGRyX2NtcChcXHUwMDI2Ym91bmNlZF9wZngsIFxcdTAwMjZucHQtXFx1MDAzZXNyY19wZnguaW42KSA9PSAwKVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jLTEzOS1cXHRcXHRcXHRpcDZ0X25wdF9tYXBfcGZ4KG5wdCwgXFx1MDAyNmJvdW5jZWRfaGRyLVxcdTAwM2VzYWRkcik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM9MzgxPXN0YXRpYyBib29sIG5mX25hdF9pbmV0X2luX3JhbmdlKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMzg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYzozODg6XFx0cmV0dXJuIGlwdjZfYWRkcl9jbXAoXFx1MDAyNnQtXFx1MDAzZXNyYy51My5pbjYsIFxcdTAwMjZyYW5nZS1cXHUwMDNlbWluX2FkZHIuaW42KSBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjM4OTpcXHQgICAgICAgaXB2Nl9hZGRyX2NtcChcXHUwMDI2dC1cXHUwMDNlc3JjLnUzLmluNiwgXFx1MDAyNnJhbmdlLVxcdTAwM2VtYXhfYWRkci5pbjYpIFxcdTAwM2M9IDA7XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTM5MC19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jPTkyMD1uZl9uYXRfaXB2Nl9sb2NhbF9pbih2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy05MzItXFx0Lyogc2VlIG5mX25hdF9pcHY0X2xvY2FsX2luICovXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYzo5MzM6XFx0aWYgKGlwdjZfYWRkcl9jbXAoXFx1MDAyNnNhZGRyLCBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlc2FkZHIpIHx8XFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy05MzQtXFx0ICAgIG5mX25hdF9pbmV0X3BvcnRfd2FzX21hbmdsZWQoc2tiLCBzay1cXHUwMDNlc2tfZHBvcnQpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYz05NDE9bmZfbmF0X2lwdjZfaW4odm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtOTQ5LVxcdGlmICh2ZXJkaWN0ICE9IE5GX0RST1AgXFx1MDAyNlxcdTAwMjYgdmVyZGljdCAhPSBORl9TVE9MRU4gXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjk1MDpcXHQgICAgaXB2Nl9hZGRyX2NtcChcXHUwMDI2ZGFkZHIsIFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkcikpXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy05NTEtXFx0XFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuLS1cXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuYz0xODU9aW50IG5ldGxibF9hZjZsaXN0X2FkZChzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKmVudHJ5LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX2FkZHJsaXN0LmMtMjAwLVxcdFxcdGlmIChpdGVyLVxcdTAwM2V2YWxpZCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5jOjIwMTpcXHRcXHQgICAgaXB2Nl9hZGRyX2NtcChcXHUwMDI2ZW50cnktXFx1MDAzZW1hc2ssIFxcdTAwMjZpdGVyLVxcdTAwM2VtYXNrKSBcXHUwMDNlIDApIHtcXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuYy0yMDItXFx0XFx0XFx0X19saXN0X2FkZF9yY3UoXFx1MDAyNmVudHJ5LVxcdTAwM2VsaXN0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MTIxNz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNha2VfYWNrX2ZpbHRlcihzdHJ1Y3QgY2FrZV9zY2hlZF9kYXRhICpxLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTI4My1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxMjg0OlxcdFxcdFxcdGlmIChpcHY2X2FkZHJfY21wKFxcdTAwMjZpcHY2aF9jaGVjay1cXHUwMDNlc2FkZHIsIFxcdTAwMjZpcHY2aC1cXHUwMDNlc2FkZHIpIHx8XFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTI4NTpcXHRcXHRcXHQgICAgaXB2Nl9hZGRyX2NtcChcXHUwMDI2aXB2NmhfY2hlY2stXFx1MDAzZWRhZGRyLCBcXHUwMDI2aXB2NmgtXFx1MDAzZWRhZGRyKSlcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjg2LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNDo1NC41OTczNjY0ODFaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE3OTYzNjUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBBZGRyZXNzIENvbXBhcmlzb24gTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBJUHY2IGFkZHJlc3MgY29tcGFyaXNvbiBpc3N1ZS4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbiBgaW5jbHVkZS9uZXQvaXB2Ni5oYC4gIEkgc2VlIGBpcHY2X2FkZHJfY21wYCwgd2hpY2ggdXNlcyBhIGBtZW1jbXBgIGZvciBhIGJ5dGUtYnktYnl0ZSBjb21wYXJpc29uLCBhbmQgYGlwdjZfYWRkcl9lcXVhbGAsIHdoaWNoIHJlbGllcyBvbiBYT1Igb3BlcmF0aW9ucyBvbiAzMi1iaXQgc2VnbWVudHMuICBUaGUgdXNlIG9mIGBpcHY2X2FkZHJfZXF1YWxgIGlzIHByb2JhYmx5IHRvIG9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgYWRkcmVzc2VzIGFyZSBlcXVhbCwgYnV0IEkgbmVlZCB0byBjb25zaWRlciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGNvZGUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgcHJvYmxlbSBpbiBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAuICBJbml0aWFsbHksIGl0IHdhcyB1c2luZyBgIWlwdjZfYWRkcl9jbXBgIG9uIGBmaWx0ZXJfdHVwbGUtXHUwMDNlc3JjLnUzLmluNmAgYW5kIGBjdF90dXBsZS1cdTAwM2VzcmMudTMuaW42YC4gVGhhdCdzIGVxdWl2YWxlbnQgdG8gYG1lbWNtcCguLi4pID09IDBgLiBTbywgaWYgdGhlIGFkZHJlc3NlcyAqd2VyZSogZXF1YWwsIHRoZSBgaWZgIGNvbmRpdGlvbiB3YXMgdHJ1ZSwgbGVhZGluZyB0byBhIGZ1bmN0aW9uIHJldHVybiBvZiBgMGAgd2hpY2gsIGluIHRoaXMgY29udGV4dCwgdHJhbnNsYXRlcyB0byBOTyBNQVRDSCDigJMgbWVhbmluZyB0aGUgbWF0Y2hpbmcgZW50cnkgd2FzIHdyb25nbHkgYmVpbmcgcmVqZWN0ZWQsIGFuZCAqbm9uKi1tYXRjaGluZyBlbnRyaWVzIHdlcmUgYmVpbmcgYWxsb3dlZC4gQSBwcmV0dHkgY3JpdGljYWwgYnVnIVxuXG5UaGUgZml4LCBhcyBJIHNlZSBpdCwgc3dpdGNoZXMgdG8gYCFpcHY2X2FkZHJfZXF1YWwoLi4uKWAuIE5vdywgaWYgdGhlIGFkZHJlc3NlcyBhcmUgKm5vdCogZXF1YWwsIGl0IHJldHVybnMgMCAocmVqZWN0IGVudHJ5KS4gVGhpcyBtYWtlcyBhIGxvdCBtb3JlIHNlbnNlLCBhbmQgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggZm9yIGZpbHRlcmluZyBiYXNlZCBvbiBub24tZXF1YWxpdHkuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVgIGZ1bmN0aW9uIHRvIGNvbmZpcm0gaXQsIGJ1dCB0aGlzIGNoYW5nZSBzZWVtcyByaWdodC5cblxuTmV4dCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hlcmUgYGZpbHRlcl90dXBsZWAgYW5kIGBjdF90dXBsZWAgYXJlIGNvbWluZyBmcm9tIGFuZCBob3cgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVgIGlzIGFjdHVhbGx5IGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYW5kIGNvbnRleHQgdG8gZnVsbHkgYXBwcmVjaWF0ZSB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGJ1Zy4gVGhpcyBoZWxwcyBwcm92aWRlIGNvbnRleHQgZm9yIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDI0LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjU4Ljc3NzAwNjI1N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4ODMwNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEwNjY9c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwODQtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwODU6c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmZpbHRlcl90dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA4Ni1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpjdF90dXBsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMTU0PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgbmZfY29ubiAqY3QsIHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3NS1cXHRcXHR0dXBsZSA9IG5mX2N0X3R1cGxlKGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMTc2OlxcdFxcdGlmICghY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShcXHUwMDI2ZmlsdGVyLVxcdTAwM2VvcmlnLCB0dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGZpbHRlci1cXHUwMDNlb3JpZ19mbGFncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTgzLVxcdFxcdHR1cGxlID0gbmZfY3RfdHVwbGUoY3QsIElQX0NUX0RJUl9SRVBMWSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjExODQ6XFx0XFx0aWYgKCFjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKFxcdTAwMjZmaWx0ZXItXFx1MDAzZXJlcGx5LCB0dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE4NS1cXHRcXHRcXHRcXHRcXHRcXHQgIGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjU4LjgyNzg5NDM3OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjUxMzExNzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgQ29ubnRyYWNrIE5ldGxpbmsgRnVuY3Rpb25zKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBzb21lIGNvbm50cmFjayBuZXRsaW5rIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoYCBhbmQgYGN0bmV0bGlua19kdW1wX3RhYmxlYCwgb3IgcmF0aGVyLCBhbnkgZnVuY3Rpb24gY2FsbHMgdG8gdGhvc2UgdHdvLiBUaGF0J3MgdXN1YWxseSB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgcXVpY2sgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgdXNlZCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBJIGhhdmUgYSBodW5jaCB0aGF0IHNvbWV0aGluZyBpbnRlcmVzdGluZyBtaWdodCBiZSBnb2luZyBvbiBhcm91bmQgdGhvc2Ugcm91dGluZXMuIEknbSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGV4cGxvcmF0aW9uIG9uIGxpbmVzIDEwNTAgdGhyb3VnaCAxMjAwIG9mIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgc2VjdGlvbiB3aWxsIGhvbGQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBmaWx0ZXJpbmcgYW5kIGR1bXBpbmcgY29ubnRyYWNrIGluZm9ybWF0aW9uIHZpYSBuZXRsaW5rLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc3MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE1OjAyLjA3OTIwODU3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzIzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNTA6XFx0XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwNTE6XFx0XFx0fVxcbjEwNTI6XFx0XFxuMTA1MzpcXHRcXHRyZXR1cm4gZmlsdGVyO1xcbjEwNTQ6XFx0XFxuMTA1NTpcXHRlcnJfZmlsdGVyOlxcbjEwNTY6XFx0XFx0a2ZyZWUoZmlsdGVyKTtcXG4xMDU3OlxcdFxcbjEwNTg6XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4xMDU5OlxcdH1cXG4xMDYwOlxcdFxcbjEwNjE6XFx0c3RhdGljIGJvb2wgY3RuZXRsaW5rX25lZWRzX2ZpbHRlcih1OCBmYW1pbHksIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhKVxcbjEwNjI6XFx0e1xcbjEwNjM6XFx0XFx0cmV0dXJuIGZhbWlseSB8fCBjZGFbQ1RBX01BUktdIHx8IGNkYVtDVEFfRklMVEVSXSB8fCBjZGFbQ1RBX1NUQVRVU10gfHwgY2RhW0NUQV9aT05FXTtcXG4xMDY0OlxcdH1cXG4xMDY1OlxcdFxcbjEwNjY6XFx0c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbjEwNjc6XFx0e1xcbjEwNjg6XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICpjZGEgPSBjYi1cXHUwMDNlZGF0YTtcXG4xMDY5OlxcdFxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXIgPSBOVUxMO1xcbjEwNzA6XFx0XFx0c3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCk7XFxuMTA3MTpcXHRcXHR1OCBmYW1pbHkgPSBuZm1zZy1cXHUwMDNlbmZnZW5fZmFtaWx5O1xcbjEwNzI6XFx0XFxuMTA3MzpcXHRcXHRpZiAoY3RuZXRsaW5rX25lZWRzX2ZpbHRlcihmYW1pbHksIGNkYSkpIHtcXG4xMDc0OlxcdFxcdFxcdGZpbHRlciA9IGN0bmV0bGlua19hbGxvY19maWx0ZXIoY2RhLCBmYW1pbHkpO1xcbjEwNzU6XFx0XFx0XFx0aWYgKElTX0VSUihmaWx0ZXIpKVxcbjEwNzY6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZmlsdGVyKTtcXG4xMDc3OlxcdFxcdH1cXG4xMDc4OlxcdFxcbjEwNzk6XFx0XFx0Y2ItXFx1MDAzZWRhdGEgPSBmaWx0ZXI7XFxuMTA4MDpcXHRcXHRpZiAoZmlsdGVyKVxcbjEwODE6XFx0XFx0XFx0Y2ItXFx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XFxuMTA4MjpcXHRcXHRyZXR1cm4gMDtcXG4xMDgzOlxcdH1cXG4xMDg0OlxcdFxcbjEwODU6XFx0c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmZpbHRlcl90dXBsZSxcXG4xMDg2OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmN0X3R1cGxlLFxcbjEwODc6XFx0XFx0XFx0XFx0XFx0XFx0dV9pbnQzMl90IGZsYWdzLCBpbnQgZmFtaWx5KVxcbjEwODg6XFx0e1xcbjEwODk6XFx0XFx0c3dpdGNoIChmYW1pbHkpIHtcXG4xMDkwOlxcdFxcdGNhc2UgTkZQUk9UT19JUFY0OlxcbjEwOTE6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfU1JDKSkgXFx1MDAyNlxcdTAwMjZcXG4xMDkyOlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZXNyYy51My5pcCAhPSBjdF90dXBsZS1cXHUwMDNlc3JjLnUzLmlwKVxcbjEwOTM6XFx0XFx0XFx0XFx0cmV0dXJuICAwO1xcbjEwOTQ6XFx0XFxuMTA5NTpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcXHUwMDI2XFx1MDAyNlxcbjEwOTY6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUzLmlwICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QudTMuaXApXFxuMTA5NzpcXHRcXHRcXHRcXHRyZXR1cm4gIDA7XFxuMTA5ODpcXHRcXHRcXHRicmVhaztcXG4xMDk5OlxcdFxcdGNhc2UgTkZQUk9UT19JUFY2OlxcbjExMDA6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfU1JDKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTAxOlxcdFxcdFxcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZmaWx0ZXJfdHVwbGUtXFx1MDAzZXNyYy51My5pbjYsXFxuMTEwMjpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjdF90dXBsZS1cXHUwMDNlc3JjLnUzLmluNikpXFxuMTEwMzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTA0OlxcdFxcbjExMDU6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfRFNUKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTA2OlxcdFxcdFxcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51My5pbjYsXFxuMTEwNzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjdF90dXBsZS1cXHUwMDNlZHN0LnUzLmluNikpXFxuMTEwODpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTA5OlxcdFxcdFxcdGJyZWFrO1xcbjExMTA6XFx0XFx0fVxcbjExMTE6XFx0XFxuMTExMjpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19OVU0pKSBcXHUwMDI2XFx1MDAyNlxcbjExMTM6XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnByb3RvbnVtICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QucHJvdG9udW0pXFxuMTExNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTE1OlxcdFxcbjExMTY6XFx0XFx0c3dpdGNoIChjdF90dXBsZS1cXHUwMDNlZHN0LnByb3RvbnVtKSB7XFxuMTExNzpcXHRcXHRjYXNlIElQUFJPVE9fVENQOlxcbjExMTg6XFx0XFx0Y2FzZSBJUFBST1RPX1VEUDpcXG4xMTE5OlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX1NSQ19QT1JUKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTIwOlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZXNyYy51LnRjcC5wb3J0ICE9IGN0X3R1cGxlLVxcdTAwM2VzcmMudS50Y3AucG9ydClcXG4xMTIxOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19EU1RfUE9SVCkpIFxcdTAwMjZcXHUwMDI2XFxuMTEyNDpcXHRcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2Vkc3QudS50Y3AucG9ydCAhPSBjdF90dXBsZS1cXHUwMDNlZHN0LnUudGNwLnBvcnQpXFxuMTEyNTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTI2OlxcdFxcdFxcdGJyZWFrO1xcbjExMjc6XFx0XFx0Y2FzZSBJUFBST1RPX0lDTVA6XFxuMTEyODpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QX1RZUEUpKSBcXHUwMDI2XFx1MDAyNlxcbjExMjk6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUuaWNtcC50eXBlICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QudS5pY21wLnR5cGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE1OjAyLjA3OTQ0Mjk1NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjE1OTAwMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgQ29ubnRyYWNrIE5ldGxpbmsgRmlsdGVyaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgd2UncmUgaGFuZGxpbmcgY29ubnRyYWNrIGZpbHRlcmluZyBvdmVyIE5ldGxpbmsuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3csIHBhcnRpY3VsYXJseSBob3cgZmlsdGVycyBhcmUgY29uc3RydWN0ZWQgYW5kIGFwcGxpZWQuIEkgc2VlIHRoYXQgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVgIGlzIHRoZSB3b3JraG9yc2UgaGVyZTsgaXQncyB0aGUgZnVuY3Rpb24gdGhhdCdzIHVsdGltYXRlbHkgZG9pbmcgdGhlIGNvbXBhcmlzb24gd2hlbiBmaWx0ZXJpbmcgZHVtcCBlbnRyaWVzLiBOb3csIHdoZXJlIGRvZXMgdGhpcyBgZmlsdGVyYCBzdHJ1Y3QgY29tZSBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBob3cgaXQncyBpbml0aWFsaXplZC4gTG9va3MgbGlrZSBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUsIGJlY2F1c2UgaXQgaGFuZGxlcyB0aGUgYXR0cmlidXRlIHBhcnNpbmcgZnJvbSB1c2Vyc3BhY2UuIEknbGwgbmVlZCB0byBjaGVjayBob3cgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgIGluaXRpYWxpemVzIHRoZSBmaWx0ZXI7IHRoaXMgc2VlbXMgdG8gYmUgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzY0LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNTowOC42OTUzNDYxNjdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDAwOlxcdFxcbjEwMDE6XFx0XFx0ZXJyID0gY3RuZXRsaW5rX2ZpbHRlcl9wYXJzZV9tYXJrKFxcdTAwMjZmaWx0ZXItXFx1MDAzZW1hcmssIGNkYSk7XFxuMTAwMjpcXHRcXHRpZiAoZXJyKVxcbjEwMDM6XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX3N0YXR1cyhcXHUwMDI2ZmlsdGVyLVxcdTAwM2VzdGF0dXMsIGNkYSk7XFxuMTAwNjpcXHRcXHRpZiAoZXJyKVxcbjEwMDc6XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwMDg6XFx0XFxuMTAwOTpcXHRcXHRpZiAoY2RhW0NUQV9aT05FXSkge1xcbjEwMTA6XFx0XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9aT05FXSwgXFx1MDAyNmZpbHRlci1cXHUwMDNlem9uZSk7XFxuMTAxMTpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDEyOlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDEzOlxcdFxcdFxcdGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO1xcbjEwMTQ6XFx0XFx0fVxcbjEwMTU6XFx0XFxuMTAxNjpcXHRcXHRpZiAoIWNkYVtDVEFfRklMVEVSXSlcXG4xMDE3OlxcdFxcdFxcdHJldHVybiBmaWx0ZXI7XFxuMTAxODpcXHRcXG4xMDE5OlxcdFxcdGVyciA9IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY2RhW0NUQV9GSUxURVJdLCBmaWx0ZXIpO1xcbjEwMjA6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTAyMTpcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTAyMjpcXHRcXG4xMDIzOlxcdFxcdGlmIChmaWx0ZXItXFx1MDAzZW9yaWdfZmxhZ3MpIHtcXG4xMDI0OlxcdFxcdFxcdGlmICghY2RhW0NUQV9UVVBMRV9PUklHXSkge1xcbjEwMjU6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xMDI2OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDI3OlxcdFxcdFxcdH1cXG4xMDI4OlxcdFxcbjEwMjk6XFx0XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjZGEsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZW9yaWcsXFxuMTAzMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBDVEFfVFVQTEVfT1JJRyxcXG4xMDMxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlZmFtaWx5LFxcbjEwMzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmZpbHRlci1cXHUwMDNlem9uZSxcXG4xMDMzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlb3JpZ19mbGFncyk7XFxuMTAzNDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDM1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDM2OlxcdFxcdH1cXG4xMDM3OlxcdFxcbjEwMzg6XFx0XFx0aWYgKGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MpIHtcXG4xMDM5OlxcdFxcdFxcdGlmICghY2RhW0NUQV9UVVBMRV9SRVBMWV0pIHtcXG4xMDQwOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTA0MTpcXHRcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTA0MjpcXHRcXHRcXHR9XFxuMTA0MzpcXHRcXG4xMDQ0OlxcdFxcdFxcdGVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZV9maWx0ZXIoY2RhLCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2VyZXBseSxcXG4xMDQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIENUQV9UVVBMRV9SRVBMWSxcXG4xMDQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlZmFtaWx5LFxcbjEwNDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmZpbHRlci1cXHUwMDNlem9uZSxcXG4xMDQ4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MpO1xcbjEwNDk6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTA1MDpcXHRcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTA1MTpcXHRcXHR9XFxuMTA1MjpcXHRcXG4xMDUzOlxcdFxcdHJldHVybiBmaWx0ZXI7XFxuMTA1NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTU6MDguNjk1NTc4MTA3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDczMTgxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBBbGxvY2F0aW9uIG9mIGBmaWx0ZXJgIGluIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgYGZpbHRlcmAgc3RydWN0dXJlIHdpdGhpbiB0aGUgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgIGZ1bmN0aW9uLiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIHRvIGVuc3VyZSBwcm9wZXIgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByZXZlbnQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBtZW1vcnkgaXMgYWNxdWlyZWQsIHdoZXRoZXIgaXQncyBzdGF0aWNhbGx5LCBkeW5hbWljYWxseSB3aXRoIGBrbWFsbG9jYCwgb3IgdGhyb3VnaCBzb21lIG90aGVyIGFsbG9jYXRvci4gSSdsbCBuZWVkIHRvIHZlcmlmeSBpZiB0aGVyZSdzIGFueSBhc3NvY2lhdGVkIGVycm9yIGhhbmRsaW5nIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCBhbmQgd2hhdCBtZWNoYW5pc20gaXMgZW1wbG95ZWQgdG8gcmVsZWFzZSB0aGUgbWVtb3J5IHdoZW4gdGhlIGZpbHRlciBpcyBubyBsb25nZXIgbmVlZGVkLiBJcyB0aGVyZSBhIGNvcnJlc3BvbmRpbmcgZGVhbGxvY2F0aW9uIGZ1bmN0aW9uLCBhbmQgaXMgaXQgY2FsbGVkIGluIGFsbCB0aGUgbmVjZXNzYXJ5IHNjZW5hcmlvcywgc3BlY2lmaWNhbGx5IHdoZW4gdGhpbmdzIGdvIHdyb25nPyBGdXJ0aGVybW9yZSwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBjb25zaWRlcmF0aW9ucyByZWxhdGVkIHRvIGFsaWdubWVudCBhbmQgcG90ZW50aWFsIHBhZGRpbmc/IEkgbmVlZCB0byByZXZpZXcgaG93IHRoaXMgYWxsb2NhdGlvbiBpbXBhY3RzIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBvZiB0aGUgYGZpbHRlcmAgZGF0YSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgZnJhbWV3b3JrLiBUaGlzIGlzIGdvaW5nIHRvIHJlcXVpcmUgYSBjYXJlZnVsIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IGBmaWx0ZXJgIGlzIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzk3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNToxMC44MDI5MDY1NThaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODA6XFx0XFx0QlVJTERfQlVHX09OKF9fSVBTX01BWF9CSVQgXFx1MDAzZT0gMzIpO1xcbiA5ODE6XFx0XFx0cmV0dXJuIDA7XFxuIDk4MjpcXHR9XFxuIDk4MzpcXHRcXG4gOTg0OlxcdHN0YXRpYyBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqXFxuIDk4NTpcXHRjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxcbiA5ODY6XFx0e1xcbiA5ODc6XFx0XFx0c3RydWN0IGN0bmV0bGlua19maWx0ZXIgKmZpbHRlcjtcXG4gOTg4OlxcdFxcdGludCBlcnI7XFxuIDk4OTpcXHRcXG4gOTkwOlxcdCNpZm5kZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLXFxuIDk5MTpcXHRcXHRpZiAoY2RhW0NUQV9NQVJLXSB8fCBjZGFbQ1RBX01BUktfTUFTS10pXFxuIDk5MjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XFxuIDk5MzpcXHQjZW5kaWZcXG4gOTk0OlxcdFxcbiA5OTU6XFx0XFx0ZmlsdGVyID0ga3phbGxvY19vYmooKmZpbHRlcik7XFxuIDk5NjpcXHRcXHRpZiAoZmlsdGVyID09IE5VTEwpXFxuIDk5NzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gOTk4OlxcdFxcbiA5OTk6XFx0XFx0ZmlsdGVyLVxcdTAwM2VmYW1pbHkgPSBmYW1pbHk7XFxuMTAwMDpcXHRcXG4xMDAxOlxcdFxcdGVyciA9IGN0bmV0bGlua19maWx0ZXJfcGFyc2VfbWFyayhcXHUwMDI2ZmlsdGVyLVxcdTAwM2VtYXJrLCBjZGEpO1xcbjEwMDI6XFx0XFx0aWYgKGVycilcXG4xMDAzOlxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNToxMC44MDMxNDYzMzhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAwMzI5NzE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIENvbm50cmFjayBOZXRsaW5rIEZpbHRlcmluZyBCdWcgRml4KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgYm9pbHMgZG93biB0byBhIGNsYXNzaWMgbG9naWNhbCBlcnJvcjogdGhlIGF1dGhvciB3YXMgdXNpbmcgYCFpcHY2X2FkZHJfY21wKClgIHdoZW4gdGhleSAqdGhvdWdodCogdGhleSB3ZXJlIGNoZWNraW5nIGZvciBpbmVxdWFsaXR5LCBidXQgYGlwdjZfYWRkcl9jbXBgIGFjdHVhbGx5IHJldHVybnMgMCB3aGVuIHRoZSBhZGRyZXNzZXMgbWF0Y2guIEVmZmVjdGl2ZWx5LCB0aGV5IGludmVydGVkIHRoZSBJUHY2IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZpbHRlciBjb25kaXRpb24gaW4gdGhlIGNvbm50cmFjayBuZXRsaW5rIGR1bXBpbmcgcHJvY2Vzcy4gQSBzaW1wbGUgb3ZlcnNpZ2h0LCBidXQgaXQgaGFzIHRvIGJlIGZpeGVkLiBUaGUgZml4IGlzIGEgc3RyYWlnaHQgc3dhcCwgdXNpbmcgYCFpcHY2X2FkZHJfZXF1YWwoKWAgd2hpY2ggY29ycmVjdGx5IHNpZ25hbHMgZXF1YWxpdHkgd2l0aCBhIG5vbi16ZXJvIHZhbHVlLlxuXG5NeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGZpeCBpbnRyb2R1Y2VzIGFueSBuZXcgbWVtb3J5IGlzc3Vlcy4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwcm9ibGVtcyB3aXRoIEtNU0FOLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNoZWNrOlxuKiAgIERpZCB0aGlzIGludm9sdmUgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjcmVhdGUgYW55IG5ldyBtZW1vcnkgYnVmZmVycz8gTm8uIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYCB1c2VzIGBremFsbG9jX29iaigqZmlsdGVyKWAsIHNvIHRoYXQncyBhbGwgaGFuZGxlZC5cbiogICBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYmVpbmcgcmVhZCBvciBjb3BpZWQ/IE5vdCBpbiB0aGlzIGNhc2UuIFRoZSBjb25udHJhY2sgdHVwbGUgKGBjdF90dXBsZWApIGlzIGNvbWluZyBmcm9tIGFuIGVzdGFibGlzaGVkIGBzdHJ1Y3QgbmZfY29ubmAsIHdoaWNoIHNob3VsZCBiZSBmdWxseSBpbml0aWFsaXplZC5cbiogICBDb3VsZCB0aGlzIGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgbGVhayB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlPyBBYnNvbHV0ZWx5IG5vdC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBmaXguXG5cblNvLCBpdCdzIGEgdmVyeSB0YXJnZXRlZCBjaGFuZ2UuIE5vIG5ldyBtZW1vcnkgaXMgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkLiBJdCdzIGp1c3QgYSBjb3JyZWN0aW9uIG9mIGEgY29tcGFyaXNvbiBvcGVyYXRvci4gSXQncyBhIGNsZWFuIGZpeCB3aXRoIG5vIGV4cG9zZWQgbWVtb3J5IHJpc2tzLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgYWxsIHRob3NlIGNyaXRlcmlhIHRvIGJlIGNlcnRhaW46XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2l0aCBwb3NzaWJseSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZGF0YT8gTm8sIG5vdGhpbmcgbmV3IGlzIGJlaW5nIHNlbnQuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLCB0aGUgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24gYXJlIGluaXRpYWxpemVkLiBgZmlsdGVyX3R1cGxlYCBpcyB0aGUgYGt6YWxsb2NgJ2QgZmlsdGVyIGFuZCBgY3RfdHVwbGVgIGlzIGluaXRpYWxpemVkLlxuMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCB3aXRoIHRoZSByaXNrIG9mIGxhdGVyIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOby5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IG1pZ2h0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBkZWZpbml0ZWx5IGJlIGBmYWxzZWAuXG5cbioqS01TQU4gUmVhc29uaW5nOioqIFRoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaW52ZXJ0ZWQgbG9naWNhbCBjaGVjayBpbiBJUHY2IGNvbm50cmFjayBuZXRsaW5rIGZpbHRlcmluZy4gVGhlIG9yaWdpbmFsIGNvZGUgaW5jb3JyZWN0bHkgdXNlZCBgIWlwdjZfYWRkcl9jbXAoKWAgd2hlbiBgIWlwdjZfYWRkcl9lcXVhbCgpYCBzaG91bGQgaGF2ZSBiZWVuIHVzZWQuIFRoaXMgcGF0Y2ggZml4ZXMgaXQuIEtNU0FOIGlzICpub3QqIG5lZWRlZCBiZWNhdXNlIHRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4gVGhlcmUncyBubyBuZXcgYWxsb2NhdGlvbiBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGBjdF90dXBsZWAgYW5kIHRoZSBgZmlsdGVyX3R1cGxlYCBhcmUgaW5pdGlhbGl6ZWQgYW5kIHRoZXJlZm9yZSBhbGwgdGhlIHJlbGV2YW50IHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuXG5cbk9rYXksIGxldCdzIGNhbGwgdGhpcyBgc2V0LXJlc3VsdHNgLiBJJ20gY29uZmlkZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA0NiwiT3V0cHV0VG9rZW5zIjoxOTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNToxNi44MDY0NDU3MjlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBidWcgaW4gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKWAgd2hlcmUgYCFpcHY2X2FkZHJfY21wKClgICh3aGljaCByZXR1cm5zIDAgb24gbWF0Y2gpIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgYCFpcHY2X2FkZHJfZXF1YWwoKWAgKHdoaWNoIHJldHVybnMgdHJ1ZSBvbiBtYXRjaCksIGNhdXNpbmcgSVB2NiBhZGRyZXNzIGZpbHRlcmluZyBkdXJpbmcgY29ubnRyYWNrIG5ldGxpbmsgZHVtcGluZyB0byByZWplY3QgbWF0Y2hlcyBhbmQgYWNjZXB0IG1pc21hdGNoZXMuIFxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIG9ubHkgYSBib29sZWFuIGVxdWFsaXR5IGNoZWNrIGJldHdlZW4gZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIElQdjYgYWRkcmVzc2VzIGluIGNvbm50cmFjayB0dXBsZXMgKHRoZSBmaWx0ZXIgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAgYW5kIHRoZSBjb25udHJhY2sgdHVwbGUgaXMgcG9wdWxhdGVkIHVwb24gY29ubmVjdGlvbiB0cmFja2luZykuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhZmZlY3RlZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBidWcgaW4gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKWAgd2hlcmUgYCFpcHY2X2FkZHJfY21wKClgICh3aGljaCByZXR1cm5zIDAgb24gbWF0Y2gpIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgYCFpcHY2X2FkZHJfZXF1YWwoKWAgKHdoaWNoIHJldHVybnMgdHJ1ZSBvbiBtYXRjaCksIGNhdXNpbmcgSVB2NiBhZGRyZXNzIGZpbHRlcmluZyBkdXJpbmcgY29ubnRyYWNrIG5ldGxpbmsgZHVtcGluZyB0byByZWplY3QgbWF0Y2hlcyBhbmQgYWNjZXB0IG1pc21hdGNoZXMuIFxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIG9ubHkgYSBib29sZWFuIGVxdWFsaXR5IGNoZWNrIGJldHdlZW4gZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIElQdjYgYWRkcmVzc2VzIGluIGNvbm50cmFjayB0dXBsZXMgKHRoZSBmaWx0ZXIgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAgYW5kIHRoZSBjb25udHJhY2sgdHVwbGUgaXMgcG9wdWxhdGVkIHVwb24gY29ubmVjdGlvbiB0cmFja2luZykuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhZmZlY3RlZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow9xzfh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 16:35:18 +0000 UTC FinishedAt: 2026-09-09 17:15:18 +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": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CT_NETLINK", "IPV6", "NETFILTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CT_NETLINK", "IPV6", "NETFILTER" ], "series_id": "4be89dfc-418a-4933-be0b-6c766dc67885" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ctnetlink_filter_match_tuple", "ctnetlink_filter_match", "ctnetlink_dump_table", "ctnetlink_flush_conntrack", "ctnetlink_get_conntrack" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZSYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19kdW1wX3RhYmxlJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19mbHVzaF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgYnVnIGluIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKClgIHdoZXJlIGAhaXB2Nl9hZGRyX2NtcCgpYCAod2hpY2ggcmV0dXJucyAwIG9uIG1hdGNoKSB3YXMgaW5jb3JyZWN0bHkgdXNlZCBpbnN0ZWFkIG9mIGAhaXB2Nl9hZGRyX2VxdWFsKClgICh3aGljaCByZXR1cm5zIHRydWUgb24gbWF0Y2gpLCBjYXVzaW5nIElQdjYgYWRkcmVzcyBmaWx0ZXJpbmcgZHVyaW5nIGNvbm50cmFjayBuZXRsaW5rIGR1bXBpbmcgdG8gcmVqZWN0IG1hdGNoZXMgYW5kIGFjY2VwdCBtaXNtYXRjaGVzLiBcblxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgb25seSBhIGJvb2xlYW4gZXF1YWxpdHkgY2hlY2sgYmV0d2VlbiBleGlzdGluZywgZnVsbHkgaW5pdGlhbGl6ZWQgSVB2NiBhZGRyZXNzZXMgaW4gY29ubnRyYWNrIHR1cGxlcyAodGhlIGZpbHRlciBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigpYCBhbmQgdGhlIGNvbm50cmFjayB0dXBsZSBpcyBwb3B1bGF0ZWQgdXBvbiBjb25uZWN0aW9uIHRyYWNraW5nKS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcHlpbmcgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGFmZmVjdGVkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYm9vbGVhbiBpbnZlcnRlZCBsb2dpYyBidWcgaW4gY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZSgpIHdoZW4gbWF0Y2hpbmcgSVB2NiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBieSByZXBsYWNpbmcgIWlwdjZfYWRkcl9jbXAoKSB3aXRoICFpcHY2X2FkZHJfZXF1YWwoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBzdWJzeXN0ZW0sIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmMxMjYwNGY2NTBjOTc3M2E0NjllMjFlMjllZDRhNjRmNzQ3NzM2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTc6MTQ6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5pbmRleCA1NzlhZGEwNjNiMWJiLi5lZjQ4MzY5OTY1OWJmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbkBAIC0xMDk4LDEzICYjNDM7MTA5OCwxMyBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLFxuIFx0XHRicmVhaztcbiBcdGNhc2UgTkZQUk9UT19JUFY2OlxuIFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWlwdjZfYWRkcl9jbXAoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pbjYsXG4tXHRcdFx0XHQgICBcdTAwMjZjdF90dXBsZS1cdTAwM2VzcmMudTMuaW42KSlcbiYjNDM7XHRcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNmZpbHRlcl90dXBsZS1cdTAwM2VzcmMudTMuaW42LFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2Y3RfdHVwbGUtXHUwMDNlc3JjLnUzLmluNikpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfRFNUKSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhaXB2Nl9hZGRyX2NtcChcdTAwMjZmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUzLmluNixcbi1cdFx0XHRcdCAgIFx1MDAyNmN0X3R1cGxlLVx1MDAzZWRzdC51My5pbjYpKVxuJiM0MztcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pbjYsXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZjdF90dXBsZS1cdTAwM2Vkc3QudTMuaW42KSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0YnJlYWs7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19maWx0ZXJfbWF0Y2gmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGUmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFjayYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZ2V0X2Nvbm50cmFjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJvb2xlYW4gaW52ZXJ0ZWQgbG9naWMgYnVnIGluIGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKSB3aGVuIG1hdGNoaW5nIElQdjYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYnkgcmVwbGFjaW5nICFpcHY2X2FkZHJfY21wKCkgd2l0aCAhaXB2Nl9hZGRyX2VxdWFsKCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgbG9naWMgaW4gdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgc3Vic3lzdGVtLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZjMTI2MDRmNjUwYzk3NzNhNDY5ZTIxZTI5ZWQ0YTY0Zjc0NzczNmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE3OjE0OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDU3OWFkYTA2M2IxYmIuLmVmNDgzNjk5NjU5YmYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTEwOTgsMTMgJiM0MzsxMDk4LDEzIEBAIHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpmaWx0ZXJfdHVwbGUsCiAJCWJyZWFrOwogCWNhc2UgTkZQUk9UT19JUFY2OgogCQlpZiAoKGZsYWdzICZhbXA7IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfU1JDKSkgJmFtcDsmYW1wOwotCQkgICAgIWlwdjZfYWRkcl9jbXAoJmFtcDtmaWx0ZXJfdHVwbGUtJmd0O3NyYy51My5pbjYsCi0JCQkJICAgJmFtcDtjdF90dXBsZS0mZ3Q7c3JjLnUzLmluNikpCiYjNDM7CQkgICAgIWlwdjZfYWRkcl9lcXVhbCgmYW1wO2ZpbHRlcl90dXBsZS0mZ3Q7c3JjLnUzLmluNiwKJiM0MzsJCQkJICAgICAmYW1wO2N0X3R1cGxlLSZndDtzcmMudTMuaW42KSkKIAkJCXJldHVybiAwOwogCiAJCWlmICgoZmxhZ3MgJmFtcDsgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSAmYW1wOyZhbXA7Ci0JCSAgICAhaXB2Nl9hZGRyX2NtcCgmYW1wO2ZpbHRlcl90dXBsZS0mZ3Q7ZHN0LnUzLmluNiwKLQkJCQkgICAmYW1wO2N0X3R1cGxlLSZndDtkc3QudTMuaW42KSkKJiM0MzsJCSAgICAhaXB2Nl9hZGRyX2VxdWFsKCZhbXA7ZmlsdGVyX3R1cGxlLSZndDtkc3QudTMuaW42LAomIzQzOwkJCQkgICAgICZhbXA7Y3RfdHVwbGUtJmd0O2RzdC51My5pbjYpKQogCQkJcmV0dXJuIDA7CiAJCWJyZWFrOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQ1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25udHJhY2sgTmV0bGluayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgIGFyb3VuZCB0aGUgbGluZSBudW1iZXJzIHNwZWNpZmllZCBpbiB0aGUgZGlmZi4gSSBzaG91bGQgcHJvYmFibHkgZmlyZSB1cCBhIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBzZXNzaW9uIHRvIGdldCB0aGUgZnVsbCBjb250ZXh0IGFyb3VuZCBsaW5lIDEwOTguIEJhc2VkIG9uIHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBjaGFuZ2luZyBzb21ldGhpbmcgcmVsYXRlZCB0byBJUHY2IGFkZHJlc3MgY29tcGFyaXNvbiB3aXRoaW4gdGhlIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBjb2RlIGlzIHVzaW5nIGBpcHY2X2FkZHJfY21wYCBhbmQgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRob3NlIGNvbXBhcmlzb25zIHRvIGBpcHY2X2FkZHJfZXF1YWxgLiBUaGlzIHN1Z2dlc3RzIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQsIGNoYW5nZSBpbiBob3cgd2UgZGV0ZXJtaW5lIGlmIHR3byBJUHY2IGFkZHJlc3NlcyBtYXRjaCB3aGVuIGZpbHRlcmluZyBjb25udHJhY2sgZW50cmllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgc2VtYW50aWMgZGlmZmVyZW5jZSBpcyBhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2Ygc3dhcHBpbmcgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvbnRleHQuIFRoZSBjb250ZXh0IGlzIGBORlBST1RPX0lQVjZgIHNvIHRoaXMgaXMgYWxsIGFib3V0IElQdjYuIExldCYjMzk7cyBzZWUgaWYgdGhlIGNvbW1pdCBtZXNzYWdlIHByb3ZpZGVzIG1vcmUgY29udGV4dCB0byB3aGF0IHRoZSBhdXRob3Igd2FzIGFpbWluZyB0byBkbyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgwOlx0XHRpZiAoZmlsdGVyKVxuMTA4MTpcdFx0XHRjYi1cdTAwM2VhbnN3ZXJfZmxhZ3MgPSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuMTA4MjpcdFx0cmV0dXJuIDA7XG4xMDgzOlx0fVxuMTA4NDpcdFxuMTA4NTpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpmaWx0ZXJfdHVwbGUsXG4xMDg2Olx0XHRcdFx0XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmN0X3R1cGxlLFxuMTA4NzpcdFx0XHRcdFx0XHR1X2ludDMyX3QgZmxhZ3MsIGludCBmYW1pbHkpXG4xMDg4Olx0e1xuMTA4OTpcdFx0c3dpdGNoIChmYW1pbHkpIHtcbjEwOTA6XHRcdGNhc2UgTkZQUk9UT19JUFY0OlxuMTA5MTpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFx1MDAyNlx1MDAyNlxuMTA5MjpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pcCAhPSBjdF90dXBsZS1cdTAwM2VzcmMudTMuaXApXG4xMDkzOlx0XHRcdFx0cmV0dXJuICAwO1xuMTA5NDpcdFxuMTA5NTpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX0RTVCkpIFx1MDAyNlx1MDAyNlxuMTA5NjpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pcCAhPSBjdF90dXBsZS1cdTAwM2Vkc3QudTMuaXApXG4xMDk3Olx0XHRcdFx0cmV0dXJuICAwO1xuMTA5ODpcdFx0XHRicmVhaztcbjEwOTk6XHRcdGNhc2UgTkZQUk9UT19JUFY2OlxuMTEwMDpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFx1MDAyNlx1MDAyNlxuMTEwMTpcdFx0XHQgICAgIWlwdjZfYWRkcl9lcXVhbChcdTAwMjZmaWx0ZXJfdHVwbGUtXHUwMDNlc3JjLnUzLmluNixcbjExMDI6XHRcdFx0XHRcdCAgICAgXHUwMDI2Y3RfdHVwbGUtXHUwMDNlc3JjLnUzLmluNikpXG4xMTAzOlx0XHRcdFx0cmV0dXJuIDA7XG4xMTA0Olx0XG4xMTA1Olx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfRFNUKSkgXHUwMDI2XHUwMDI2XG4xMTA2Olx0XHRcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNmZpbHRlcl90dXBsZS1cdTAwM2Vkc3QudTMuaW42LFxuMTEwNzpcdFx0XHRcdFx0ICAgICBcdTAwMjZjdF90dXBsZS1cdTAwM2Vkc3QudTMuaW42KSlcbjExMDg6XHRcdFx0XHRyZXR1cm4gMDtcbjExMDk6XHRcdFx0YnJlYWs7XG4xMTEwOlx0XHR9XG4xMTExOlx0XG4xMTEyOlx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX05VTSkpIFx1MDAyNlx1MDAyNlxuMTExMzpcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2Vkc3QucHJvdG9udW0gIT0gY3RfdHVwbGUtXHUwMDNlZHN0LnByb3RvbnVtKVxuMTExNDpcdFx0XHRyZXR1cm4gMDtcbjExMTU6XHRcbjExMTY6XHRcdHN3aXRjaCAoY3RfdHVwbGUtXHUwMDNlZHN0LnByb3RvbnVtKSB7XG4xMTE3Olx0XHRjYXNlIElQUFJPVE9fVENQOlxuMTExODpcdFx0Y2FzZSBJUFBST1RPX1VEUDpcbjExMTk6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19TUkNfUE9SVCkpIFx1MDAyNlx1MDAyNlxuMTEyMDpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51LnRjcC5wb3J0ICE9IGN0X3R1cGxlLVx1MDAzZXNyYy51LnRjcC5wb3J0KVxuMTEyMTpcdFx0XHRcdHJldHVybiAwO1xuMTEyMjpcdFxuMTEyMzpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0RTVF9QT1JUKSkgXHUwMDI2XHUwMDI2XG4xMTI0Olx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUudGNwLnBvcnQgIT0gY3RfdHVwbGUtXHUwMDNlZHN0LnUudGNwLnBvcnQpXG4xMTI1Olx0XHRcdFx0cmV0dXJuIDA7XG4xMTI2Olx0XHRcdGJyZWFrO1xuMTEyNzpcdFx0Y2FzZSBJUFBST1RPX0lDTVA6XG4xMTI4Olx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUF9UWVBFKSkgXHUwMDI2XHUwMDI2XG4xMTI5Olx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUuaWNtcC50eXBlICE9IGN0X3R1cGxlLVx1MDAzZWRzdC51LmljbXAudHlwZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njc3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIENyaXRpY2FsIExvZ2ljIEVycm9yIGFuZCBBc3Nlc3NpbmcgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBmb2N1c2VzIG9uIHRoZSBgaXB2Nl9hZGRyX2NtcGAgYW5kIGBpcHY2X2FkZHJfZXF1YWxgIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZWlyIHJldHVybiB2YWx1ZXMuIEl0IHNlZW1zIHRoZXJlIHdhcyBhIGNsYXNzaWMgbG9naWMgZXJyb3I6IGBpcHY2X2FkZHJfY21wYCByZXR1cm5pbmcgMCBmb3IgZXF1YWxpdHksIHdoaWNoIHdoZW4gbmVnYXRlZCAoYCFpcHY2X2FkZHJfY21wYCkgY2F1c2VkIGEgcmV0dXJuIG9mIDAgKG5vIG1hdGNoKSAqd2hlbiB0aGUgYWRkcmVzc2VzIHdlcmUgYWN0dWFsbHkgRVFVQUwqLiBUaGF0JiMzOTtzIGEgdGV4dGJvb2sgaW52ZXJzaW9uIHRoYXQgd291bGQgZGVmaW5pdGVseSBsZWFkIHRvIGluY29ycmVjdCBmaWx0ZXJpbmcgaW4gbXkgbmV0bGluayBjb2RlLCBwYXJ0aWN1bGFybHkgd2hlcmUgSSYjMzk7bSBoYW5kbGluZyBJUHY2IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIGluIGBjdG5ldGxpbmtgLiBUaGUgZml4LCB0aGFua2Z1bGx5LCBhcHBlYXJzIHRvIHVzZSBgaXB2Nl9hZGRyX2VxdWFsYCwgd2hpY2ggcmV0dXJucyB0aGUgbW9yZSBpbnR1aXRpdmUgdHJ1ZS9mYWxzZSBmb3IgZXF1YWxpdHksIHNvIGBpZiAoIWlwdjZfYWRkcl9lcXVhbCguLi4pKWAgbm93IGNvcnJlY3RseSByZXR1cm5zIDAgKG5vIG1hdGNoKSB3aGVuIHRoZSBhZGRyZXNzZXMgYXJlICpub3QqIGVxdWFsLiBUaGlzIHNob3VsZCBmaXggdGhlIGludmVydGVkIG1hdGNoIGlzc3VlcyBJIHdhcyBzZWVpbmcuCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgZnV6emluZyB0aGlzLiBUaGUgY3J1Y2lhbCBhc3BlY3QgaXMgKnJlYWNoYWJpbGl0eSogYW5kICpmdXp6YWJpbGl0eSouIEZyb20gYSByZWFjaGFiaWxpdHkgcGVyc3BlY3RpdmUsIGBuZXRsaW5rIGN0bmV0bGlua2AgaXMgdHJpdmlhbGx5IGFjY2Vzc2libGUuIEl04oCZcyBhIG5ldGxpbmsgc29ja2V0LCB3aGljaCBtZWFucyBpdCYjMzk7cyBhdmFpbGFibGUgZnJvbSBhIG5vbi1wcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlLCBvciBhcyByb290LCB0aHJvdWdoIGBBRl9ORVRMSU5LYCBhbmQgYE5FVExJTktfTkVURklMVEVSYCBzb2NrZXRzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydC4KClJlZ2FyZGluZyBmdXp6YWJpbGl0eSwgdGhpcyBsb29rcyBwcm9taXNpbmcuIFRoZSBjb2RlIGRpcmVjdGx5IG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY2AsIHdoaWNoIGlzIGF0IHRoZSBjb3JlIG9mIG5ldGZpbHRlciwgYSBjcml0aWNhbCBwYXJ0IG9mIG5ldHdvcmtpbmcuIFNvLCB0aGUgbGlrZWxpaG9vZCBvZiBmaW5kaW5nIHZ1bG5lcmFiaWxpdGllcyBoZXJlIGlzIGhpZ2guIGBXb3J0aEZ1enppbmcgPSB0cnVlLmAKCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBjb25maXJtIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpcyBjb2RlIHRvIGJlIGNvbXBpbGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX25ldGxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM0PW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0spICYjNDM7PSBuZl9jb25udHJhY2sub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LKSAmIzQzOz0gbmZfY29ubnRyYWNrX25ldGxpbmsub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19USU1FT1VUKSAmIzQzOz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM4NzE9c3RhdGljIGludCBfX2luaXQgY3RuZXRsaW5rX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzg5NC0jaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1Rcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozODk1Olx0Lyogc2V0dXAgaW50ZXJhY3Rpb24gYmV0d2VlbiBuZl9xdWV1ZSBhbmQgbmZfY29ubnRyYWNrX25ldGxpbmsuICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzg5Ni1cdFJDVV9JTklUX1BPSU5URVIobmZubF9jdF9ob29rLCBcdTAwMjZjdG5ldGxpbmtfZ2x1ZV9ob29rKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oLTgtXG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oOjk6LyogbmZfY29ubnRyYWNrX25ldGxpbmsuYzogYXBwbGllZCBvbiB0dXBsZSBmaWx0ZXJzICovXG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oLTEwLSNkZWZpbmUgQ1RBX0ZJTFRFUl9GX0NUQV9JUF9TUkNcdFx0XHQoMSBcdTAwM2NcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkNoZWNraW5nIGBDT05GSUdfTkZfQ1RfTkVUTElOS2AgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG5ldGxpbmsgc3VwcG9ydCBmb3IgY29ubmVjdGlvbiB0cmFja2luZy4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGRpcmVjdGx5IGZvciB0aGUgYENPTkZJR19ORl9DVF9ORVRMSU5LYCBvcHRpb24uIEtub3dpbmcgdGhpcyBpcyBhIGNvcmUgb3B0aW9uLCBJJiMzOTtsbCB0aGVuIHJldmlldyBpdCYjMzk7cyBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCYjMzk7cyBlbmFibGVkIGFuZCBob3cgaXQgcmVsYXRlcyB0byBvdGhlciBuZXRmaWx0ZXIgZmVhdHVyZXMuIFRoaXMgd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIGl0cyBmdW5jdGlvbiBhbmQgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGlnaGxpZ2h0IGFueSBvdGhlciBhcmVhcyB0aGF0IHJlcXVpcmUgY29uc2lkZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ1RfTkVUTElOS1xcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNTU9Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNjY6Y29uZmlnIE5GX0NUX05FVExJTktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjctXHR0cmlzdGF0ZSAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzNjYuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc3RydWN0dXJlZC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBkZXRhaWxzIG9uIGEgc3BlY2lmaWMgb3B0aW9uIG9yIGEgcmVsYXRlZCBncm91cCBvZiBvcHRpb25zLCBhbmQgdGhpcyBmaWxlIGlzIHdoZXJlIHRoYXQga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRlZmluZWQgdGhlcmUgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBOZXRmaWx0ZXIuIEkgaG9wZSB0aGUgZm9ybWF0dGluZyBpcyBjbGVhciwgYW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGVhc2lseSB1bmRlcnN0b29kLCBhcyBLY29uZmlnIGZpbGVzIGNhbiBzb21ldGltZXMgYmUgYSBiaXQgZGVuc2UuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjA6XHRcdCAgb24gaG93IHJlc3RyaWN0aXZlIHlvdXIgcnVsZXNldCBpcy5cbiAzNjE6XHRcdCAgSWYgeW91IGFyZSB1c2luZyBhIHRmdHAgY2xpZW50IGJlaGluZCAtaiBTTkFUIG9yIC1qIE1BU1FVRVJBRElOR1xuIDM2MjpcdFx0ICB5b3Ugd2lsbCBuZWVkIHRoaXMuXG4gMzYzOlx0XG4gMzY0Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIDM2NTpcdFxuIDM2NjpcdGNvbmZpZyBORl9DVF9ORVRMSU5LXG4gMzY3Olx0XHR0cmlzdGF0ZSAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UmIzM5O1xuIDM2ODpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gMzY5Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAzNzA6XHRcdGhlbHBcbiAzNzE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG5ldGxpbmstYmFzZWQgdXNlcnNwYWNlIGludGVyZmFjZVxuIDM3MjpcdFxuIDM3MzpcdGNvbmZpZyBORl9DVF9ORVRMSU5LX1RJTUVPVVRcbiAzNzQ6XHRcdHRyaXN0YXRlICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCB0dW5pbmcgdmlhIE5ldGxpbmsmIzM5O1xuIDM3NTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gMzc2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDM3NzpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfVElNRU9VVFxuIDM3ODpcdFx0aGVscFxuIDM3OTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dFxuIDM4MDpcdFx0ICBmaW5lLWdyYWluIHR1bmluZy4gVGhpcyBhbGxvd3MgeW91IHRvIGF0dGFjaCBzcGVjaWZpYyB0aW1lb3V0XG4gMzgxOlx0XHQgIHBvbGljaWVzIHRvIGZsb3dzLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBnbG9iYWwgdGltZW91dCBwb2xpY3kuXG4gMzgyOlx0XG4gMzgzOlx0XHQgIElmIHVuc3VyZSwgc2F5IGBOJiMzOTsuXG4gMzg0Olx0XG4gMzg1Olx0Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXG4gMzg2Olx0XHR0cmlzdGF0ZSAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBpbiB1c2VyLXNwYWNlIHZpYSBOZXRsaW5rJiMzOTtcbiAzODc6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuIDM4ODpcdFx0ZGVwZW5kcyBvbiBORl9DVF9ORVRMSU5LXG4gMzg5Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgTkZfQ1RfTkVUTElOSyBEZXBlbmRlbmN5KioKClJpZ2h0LCBsZXQgbWUgZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhcmVudCBjb25maWd1cmF0aW9uIG9yIGRlcGVuZGVuY2llcyBmb3IgYE5GX0NUX05FVExJTktgLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBmaWxlIGluIGBuZXQvbmV0ZmlsdGVyL2AuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgc3Vycm91bmRpbmcgbGluZXMsIHNwZWNpZmljYWxseSwgdG8gc2VlIGhvdyBgTkZfQ1RfTkVUTElOS2AgaXMgaG9va2VkIGluIGFuZCB3aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIGl0cyBidWlsZCBzdGF0dXMuIExpa2VseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gbG9vayBmb3IgYW4gZWFybGllciBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGVuYWJsZXMgaXQgb3IgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlICYjMzk7d2h5JiMzOTsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnUgXCYjMzQ7Q29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgTkVURklMVEVSX0lOR1JFU1NcbiAgIDY6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIGluZ3Jlc3Mgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVmYXVsdCB5XG4gICA4Olx0XHRzZWxlY3QgTkVUX0lOR1JFU1NcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgZnJvbSBpbmdyZXNzIHVzaW5nIHRoZSBOZXRmaWx0ZXJcbiAgMTE6XHRcdCAgaW5mcmFzdHJ1Y3R1cmUuXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIE5FVEZJTFRFUl9FR1JFU1NcbiAgMTQ6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIGVncmVzcyBzdXBwb3J0XCYjMzQ7XG4gIDE1Olx0XHRkZWZhdWx0IHlcbiAgMTY6XHRcdHNlbGVjdCBORVRfRUdSRVNTXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGJlZm9yZSB0cmFuc21pc3Npb24gdXNpbmcgdGhlXG4gIDE5Olx0XHQgIE5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZS5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgTkVURklMVEVSX1NLSVBfRUdSRVNTXG4gIDIyOlx0XHRkZWZfYm9vbCBORVRGSUxURVJfRUdSRVNTIFx1MDAyNlx1MDAyNiAoTkVUX0NMU19BQ1QgfHwgSUZCKVxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS1xuICAyNTpcdFx0Ym9vbFxuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxuICAyODpcdFx0Ym9vbFxuICAyOTpcdFxuICAzMDpcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0FSUFxuICAzMTpcdFx0Ym9vbFxuICAzMjpcdFxuICAzMzpcdGNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcbiAgMzQ6XHRcdGRlZl9ib29sIEJQRl9TWVNDQUxMXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcbiAgMzc6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuICAzOTpcdFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcbiAgNDA6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDQzOlx0XHQgIHRvIGxpc3QgdGhlIGJhc2UgbmV0ZmlsdGVyIGhvb2tzIHZpYSBORk5FVExJTksuXG4gIDQ0Olx0XHQgIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVidWdnaW5nLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19BQ0NUXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZBQ0NUIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgNDk6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA1MDpcdFx0aGVscFxuICA1MTpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDUyOlx0XHQgIGZvciBleHRlbmRlZCBhY2NvdW50aW5nIHZpYSBORk5FVExJTksuXG4gIDUzOlx0XG4gIDU0Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG4gIDU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiAgNTY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gIDU3Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgNTg6XHRcdGhlbHBcbiAgNTk6XHRcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxuICA2MDpcdFx0ICBmb3IgcXVldWVpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxuICA2MTpcdFxuICA2MjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19MT0dcbiAgNjM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4gIDY0Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAgNjU6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA2NjpcdFx0aGVscFxuICA2NzpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDY4Olx0XHQgIGZvciBsb2dnaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cbiAgNjk6XHRcbiAgNzA6XHRcdCAgVGhpcyBvYnNvbGV0ZXMgdGhlIGV4aXN0aW5nIGlwdF9VTE9HIGFuZCBlYmdfdWxvZyBtZWNoYW5pc21zLFxuICA3MTpcdFx0ICBhbmQgaXMgYWxzbyBzY2hlZHVsZWQgdG8gcmVwbGFjZSB0aGUgb2xkIHN5c2xvZy1iYXNlZCBpcHRfTE9HXG4gIDcyOlx0XHQgIGFuZCBpcDZ0X0xPRyBtb2R1bGVzLlxuICA3MzpcdFxuICA3NDpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcbiAgNzU6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBPU0Ygb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4gIDc2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuICA3NzpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gIDc4Olx0XHRoZWxwXG4gIDc5Olx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcbiAgODA6XHRcdCAgZm9yIHBhc3NpdmUgT1MgZmluZ2VycHJpbnQgdmlhIE5GTkVUTElOSy5cbiAgODE6XHRcbiAgODI6XHRjb25maWcgTkZfQ09OTlRSQUNLXG4gIDgzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4gIDg0Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAgODU6XHRcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxuICA4NjpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQVjYgIT0gblxuICA4NzpcdFx0aGVscFxuICA4ODpcdFx0ICBDb25uZWN0aW9uIHRyYWNraW5nIGtlZXBzIGEgcmVjb3JkIG9mIHdoYXQgcGFja2V0cyBoYXZlIHBhc3NlZFxuICA4OTpcdFx0ICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZFxuICA5MDpcdFx0ICBpbnRvIGNvbm5lY3Rpb25zLlxuICA5MTpcdFxuICA5MjpcdFx0ICBUaGlzIGlzIHJlcXVpcmVkIHRvIGRvIE1hc3F1ZXJhZGluZyBvciBvdGhlciBraW5kcyBvZiBOZXR3b3JrXG4gIDkzOlx0XHQgIEFkZHJlc3MgVHJhbnNsYXRpb24uICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGVuaGFuY2UgcGFja2V0XG4gIDk0Olx0XHQgIGZpbHRlcmluZyAoc2VlIGBDb25uZWN0aW9uIHN0YXRlIG1hdGNoIHN1cHBvcnQmIzM5OyBiZWxvdykuXG4gIDk1Olx0XG4gIDk2Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuICA5NzpcdFxuICA5ODpcdGNvbmZpZyBORl9MT0dfU1lTTE9HXG4gIDk5Olx0XHR0cmlzdGF0ZSBcJiMzNDtTeXNsb2cgcGFja2V0IGxvZ2dpbmdcJiMzNDtcbiAxMDA6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzEyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBgTkZfQ1RfTkVUTElOS2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBORl9DVF9ORVRMSU5LYCBoZXJlLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IGl0IGRlcGVuZHMgb24gYElORVQgJmFtcDsmYW1wOyBORVRGSUxURVJgIOKAkyBwcmV0dHkgc3RhbmRhcmQgc3R1ZmYgZm9yIGFueSBuZXR3b3JrIGZpbHRlcmluZyBmZWF0dXJlLiBBbmQgb2YgY291cnNlLCBpdCYjMzk7cyBhbHNvIHRpZWQgdG8gYE5GX0NPTk5UUkFDS2AuIE1ha2VzIHNlbnNlOyBgY3RuZXRsaW5rYCBoYXMgdG8gd29yayB3aXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBjb25uZWN0aW9uIHRyYWNraW5nIG11c3QgYmUgZW5hYmxlZCwgb3IgYXQgbGVhc3QgYmUgYXZhaWxhYmxlIGluIHRoZSBzYW1lIG1lbnUsIGZvciB0aGlzIHRvIHdvcmsuIEl0IGFsc28gcmVxdWlyZXMgYElQVjZgIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSVB2NiBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBmaWx0ZXJpbmcsIHdoaWNoIGlzIGV4cGVjdGVkLgoKTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gZmlndXJlIG91dCB3aGF0IHVzZXMgdGhpcyB0aGluZywgc28gbGV0JiMzOTtzIGNoZWNrIGNhbGxlcnMgb2YgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoaXMgbW9kdWxlIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQgYW5kIGluIHdoYXQgY29udGV4dHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZsb3csIHNvIGtub3dpbmcgdGhlIGNhbGxlcnMgb2YgdGhpcyBrZXkgZnVuY3Rpb24gaXMgZXNzZW50aWFsIHRvIGdyYXNwaW5nIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMDY2PXN0YXRpYyBpbnQgY3RuZXRsaW5rX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA4NC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMDg1OnN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpmaWx0ZXJfdHVwbGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA4Ni1cdFx0XHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqY3RfdHVwbGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTExNTQ9c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoKHN0cnVjdCBuZl9jb25uICpjdCwgdm9pZCAqZGF0YSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3NS1cdFx0dHVwbGUgPSBuZl9jdF90dXBsZShjdCwgSVBfQ1RfRElSX09SSUdJTkFMKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMTc2Olx0XHRpZiAoIWN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoXHUwMDI2ZmlsdGVyLVx1MDAzZW9yaWcsIHR1cGxlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTExNzctXHRcdFx0XHRcdFx0ICBmaWx0ZXItXHUwMDNlb3JpZ19mbGFncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE4My1cdFx0dHVwbGUgPSBuZl9jdF90dXBsZShjdCwgSVBfQ1RfRElSX1JFUExZKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMTg0Olx0XHRpZiAoIWN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoXHUwMDI2ZmlsdGVyLVx1MDAzZXJlcGx5LCB0dXBsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTg1LVx0XHRcdFx0XHRcdCAgZmlsdGVyLVx1MDAzZXJlcGx5X2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBtYXRjaGluZyBjb25uZWN0aW9uIHRyYWNraW5nIChjb25udHJhY2spIGVudHJpZXMgd2l0aGluIHRoZSBOZXRsaW5rIGZyYW1ld29yay4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaG8mIzM5O3MgdXNpbmcgdGhpcz8mIzM0OyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSB2YWx1YWJsZSBpbnNpZ2h0IGludG8gd2hlcmUgdGhpcyBtYXRjaGluZyBsb2dpYyBpcyBiZWluZyBhcHBsaWVkIGFuZCwgcG90ZW50aWFsbHksIHRoZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGl0LgoKSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAgaXMgaW52b2tlZC4gSSBjYW4mIzM5O3QganVzdCBibGluZGx5IHRyYWNlIHRoZSBleGVjdXRpb24uIEkgbmVlZCB0byB0aGluayBhYm91dCB0aGUgdmFyaW91cyBOZXRsaW5rIG1lc3NhZ2UgdHlwZXMgYW5kIGZpbHRlcnMgdGhhdCBjb3VsZCB0cmlnZ2VyIHRoaXMgbWF0Y2hpbmcuIEZvciBleGFtcGxlLCBhcmUgd2UgZGVhbGluZyB3aXRoIHJlYWRzL3F1ZXJpZXMgb2YgY29ubnRyYWNrIGVudHJpZXMgKGxpa2UgZnJvbSBgbmZjdGAgdXNlcnNwYWNlIHRvb2xzKSwgbW9kaWZpY2F0aW9ucyAoZS5nLiwgcG9saWN5IHVwZGF0ZXMpLCBvciBwZXJoYXBzIGV2ZW4gY29ubmVjdGlvbiBub3RpZmljYXRpb25zPwoKSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBkaWZmZXJlbnQgTmV0bGluayBmYW1pbGllcyBhbmQgdGhlaXIgbWVzc2FnZSB0eXBlcy4gVGhpcyBjb3VsZCBiZSBpbiB0aGUgY29udGV4dCBvZiBuZm5ldGxpbmtfY3RoZWxwZXIgb3IgbmZuZXRsaW5rX2Nvbm50cmFjayBpdHNlbGYuIEkgYWxzbyBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBkaWZmZXJlbnQgcG90ZW50aWFsIGZpbHRlcmluZyBjcml0ZXJpYSB0aGF0IGNvdWxkIGJlIHVzZWQuIFdlIGtub3cgdGhhdCBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAgaXMgaW52b2x2ZWQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBmaWx0ZXIgc3RydWN0dXJlIGxvb2tzIGxpa2UgYW5kIHdoaWNoIE5ldGxpbmsgYXR0cmlidXRlcyBhcmUgYmVpbmcgZXZhbHVhdGVkLiBJIGhhdmUgdG8gbG9vayBpbnRvIHRoZSBmaWx0ZXJpbmcgbG9naWMsIHVuZGVyc3RhbmQgaG93IHNwZWNpZmljIGF0dHJpYnV0ZXMgb2YgYSBjb25udHJhY2sgZW50cnkgKGxpa2Ugc291cmNlL2Rlc3RpbmF0aW9uIElQL3BvcnQsIHByb3RvY29sLCBzdGF0ZSwgZXRjLikgYXJlIGNvbXBhcmVkIGFnYWluc3QgdGhlIHByb3ZpZGVkIGZpbHRlciBjcml0ZXJpYS4KCkkgYWxzbyBoYXZlIHRvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBjb25udHJhY2sgdGFibGUgZHVyaW5nIHRoZXNlIG1hdGNoaW5nIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBlc3BlY2lhbGx5IHdpdGggbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudHMgYW5kIGhvdyB0aGV5IGFmZmVjdCB0aGUgbmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2sgdXNhZ2Ugd2l0aGluIHRoZSBjYWxsIHBhdGggb2YgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2V0IGludG8gdGhlIGNhbGxlcnMgdG8gc2VlIGlmIHRoZXkgYXJlIGRvaW5nIGFueXRoaW5nIGluIHRoZSB3cm9uZyBvcmRlciBvciB3aXRob3V0IHRoZSBwcm9wZXIgcHJvdGVjdGlvbi4KClVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgY29ubnRyYWNrIGFuZCBuZXRmaWx0ZXIgcHJvY2Vzc2luZy4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBrZXkgdG8gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3RuZXRsaW5rX2ZpbHRlcl9tYXRjaFxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMDg1PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpmaWx0ZXJfdHVwbGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTExNTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTE1NDpzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2goc3RydWN0IG5mX2Nvbm4gKmN0LCB2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTExNTUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMjEzPWN0bmV0bGlua19kdW1wX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTI2NC1cdFx0XHR9XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTI2NTpcdFx0XHRpZiAoIWN0bmV0bGlua19maWx0ZXJfbWF0Y2goY3QsIGNiLVx1MDAzZWRhdGEpKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEyNjYtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTU4NT1zdGF0aWMgaW50IGN0bmV0bGlua19mbHVzaF9pdGVyYXRlKHN0cnVjdCBuZl9jb25uICpjdCwgdm9pZCAqZGF0YSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNTg2LXtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNTg3Olx0cmV0dXJuIGN0bmV0bGlua19maWx0ZXJfbWF0Y2goY3QsIGRhdGEpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE1ODgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAxNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIE5ldGxpbmsgSW50ZXJhY3Rpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGFibGUgaXMgYWNjZXNzZWQgYW5kIG1hbmFnZWQgdmlhIG5ldGxpbmsuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aHMgb2YgZnVuY3Rpb25zIGxpa2UgYGN0bmV0bGlua19kdW1wX3RhYmxlYCBhbmQgYGN0bmV0bGlua19mbHVzaF9pdGVyYXRlYC4gVGhlc2UgYXJlIGtleSBlbnRyeSBwb2ludHMsIHNvIHRoZXkmIzM5O3JlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBmaWd1cmluZyBvdXQgaG93IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUgY29ubnRyYWNrIGRhdGEgc3RydWN0dXJlcy4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGhhdmUgdG8gZm9sbG93IHRoZSBjYWxscyBmcm9tIHRob3NlIGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHBpY3R1cmUgb2YgaG93IGNvbm5lY3Rpb24gdHJhY2tpbmcgZGF0YSBpcyBkdW1wZWQgdG8gdXNlciBzcGFjZSwgYW5kIGhvdyBmbHVzaGluZyBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgb3ZlciBuZXRsaW5rLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3RuZXRsaW5rX2R1bXBfdGFibGV8Y3RuZXRsaW5rX2ZsdXNoX2l0ZXJhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTIxMj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTIxMzpjdG5ldGxpbmtfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTIxNC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE1NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGN0X25sYV9wb2xpY3lbQ1RBX01BWCYjNDM7MV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE1ODQtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTU4NTpzdGF0aWMgaW50IGN0bmV0bGlua19mbHVzaF9pdGVyYXRlKHN0cnVjdCBuZl9jb25uICpjdCwgdm9pZCAqZGF0YSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNTg2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTU5MD1zdGF0aWMgaW50IGN0bmV0bGlua19mbHVzaF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjA4LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjE2MDk6XHRuZl9jdF9pdGVyYXRlX2NsZWFudXBfbmV0KGN0bmV0bGlua19mbHVzaF9pdGVyYXRlLCBcdTAwMjZpdGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjEwLVx0a2ZyZWUoZmlsdGVyKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTY2OD1zdGF0aWMgaW50IGN0bmV0bGlua19nZXRfY29ubnRyYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2ODItXHRcdFx0LnN0YXJ0ID0gY3RuZXRsaW5rX3N0YXJ0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjE2ODM6XHRcdFx0LmR1bXAgPSBjdG5ldGxpbmtfZHVtcF90YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjg0LVx0XHRcdC5kb25lID0gY3RuZXRsaW5rX2RvbmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzk4CgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDMyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb25udHJhY2sgTmV0bGluayBNb2R1bGUgZm9yIEZ1enppbmcqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIGNvbm50cmFjaywgYW5kIG15IHByaW1hcnkgdGFyZ2V0cyBhcmUgdGhlc2UgZnVuY3Rpb25zOiBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAsIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoYCwgYGN0bmV0bGlua19kdW1wX3RhYmxlYCwgYGN0bmV0bGlua19mbHVzaF9jb25udHJhY2tgLCBhbmQgYGN0bmV0bGlua19nZXRfY29ubnRyYWNrYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGN0bmV0bGlua19mbHVzaF9jb25udHJhY2tgIGlzIGFjdHVhbGx5IGp1c3QgYSB3cmFwcGVyIGZvciBkZWxldGlvbiwgb3IgcGVyaGFwcyBgY3RuZXRsaW5rX2RlbF9jb25udHJhY2tgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0LCBidXQgdGhlIGltcG9ydGFudCB0aGluZyBpcyB0aG9zZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgSSB3YW50IHRvIHN0cmVzcy4KCkkmIzM5O3ZlIGFsc28gdmVyaWZpZWQgdGhhdCBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAgaXMgaW5kZWVkIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cgZm9yIHRoZSBmdXp6aW5nIHNldHVwLiBJIGNhbiBwcm9jZWVkIGtub3dpbmcgdGhlIHNjb3BlLgoKTXkgYmFzZSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCByZXF1aXJlIGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS2AsIGBJUFY2YCwgYW5kIGBORVRGSUxURVJgIHRvIGJlIGVuYWJsZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGFsbCBwcmVzZW50IGluIHRoZSBlbnZpcm9ubWVudCBJJiMzOTttIGZ1enppbmcuCgpNeSBhbmFseXNpcyBoYXMgbGVkIG1lIHRvIGJlbGlldmUgdGhhdCB0aGlzIG1vZHVsZSBpcyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgcG90ZW50aWFsIGV4cG9zdXJlIHN1cmZhY2UuIFNvLCBJIGFtIG1hcmtpbmcgdGhpcyBmdXp6IHRhcmdldCBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgYW5kIEkgYW0gc2V0dGluZyB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhY2NvcmRpbmdseS4gSSBjYW4mIzM5O3QgYmUgbW9yZSBjb25jaXNlIHRoYW4gdGhhdCwgc28gSSB3aWxsIG5vdyBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZSYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19kdW1wX3RhYmxlJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19mbHVzaF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBib29sZWFuIGludmVydGVkIGxvZ2ljIGJ1ZyBpbiBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKCkgd2hlbiBtYXRjaGluZyBJUHY2IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIGJ5IHJlcGxhY2luZyAhaXB2Nl9hZGRyX2NtcCgpIHdpdGggIWlwdjZfYWRkcl9lcXVhbCgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGxvZ2ljIGluIHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIHN1YnN5c3RlbSwgd2hpY2ggaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZSYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19kdW1wX3RhYmxlJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19mbHVzaF9jb25udHJhY2smIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2dldF9jb25udHJhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBib29sZWFuIGludmVydGVkIGxvZ2ljIGJ1ZyBpbiBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKCkgd2hlbiBtYXRjaGluZyBJUHY2IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIGJ5IHJlcGxhY2luZyAhaXB2Nl9hZGRyX2NtcCgpIHdpdGggIWlwdjZfYWRkcl9lcXVhbCgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGxvZ2ljIGluIHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIHN1YnN5c3RlbSwgd2hpY2ggaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgYnVnIGluIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKClgIHdoZXJlIGAhaXB2Nl9hZGRyX2NtcCgpYCAod2hpY2ggcmV0dXJucyAwIG9uIG1hdGNoKSB3YXMgaW5jb3JyZWN0bHkgdXNlZCBpbnN0ZWFkIG9mIGAhaXB2Nl9hZGRyX2VxdWFsKClgICh3aGljaCByZXR1cm5zIHRydWUgb24gbWF0Y2gpLCBjYXVzaW5nIElQdjYgYWRkcmVzcyBmaWx0ZXJpbmcgZHVyaW5nIGNvbm50cmFjayBuZXRsaW5rIGR1bXBpbmcgdG8gcmVqZWN0IG1hdGNoZXMgYW5kIGFjY2VwdCBtaXNtYXRjaGVzLiBcblxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgb25seSBhIGJvb2xlYW4gZXF1YWxpdHkgY2hlY2sgYmV0d2VlbiBleGlzdGluZywgZnVsbHkgaW5pdGlhbGl6ZWQgSVB2NiBhZGRyZXNzZXMgaW4gY29ubnRyYWNrIHR1cGxlcyAodGhlIGZpbHRlciBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iaigpYCBhbmQgdGhlIGNvbm50cmFjayB0dXBsZSBpcyBwb3B1bGF0ZWQgdXBvbiBjb25uZWN0aW9uIHRyYWNraW5nKS4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcHlpbmcgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGFmZmVjdGVkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYzEyNjA0ZjY1MGM5NzczYTQ2OWUyMWUyOWVkNGE2NGY3NDc3MzZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNzoxNDowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA1NzlhZGEwNjNiMWJiLi5lZjQ4MzY5OTY1OWJmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC0xMDk4LDEzICYjNDM7MTA5OCwxMyBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLAogCQlicmVhazsKIAljYXNlIE5GUFJPVE9fSVBWNjoKIAkJaWYgKChmbGFncyAmYW1wOyBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpICZhbXA7JmFtcDsKLQkJICAgICFpcHY2X2FkZHJfY21wKCZhbXA7ZmlsdGVyX3R1cGxlLSZndDtzcmMudTMuaW42LAotCQkJCSAgICZhbXA7Y3RfdHVwbGUtJmd0O3NyYy51My5pbjYpKQomIzQzOwkJICAgICFpcHY2X2FkZHJfZXF1YWwoJmFtcDtmaWx0ZXJfdHVwbGUtJmd0O3NyYy51My5pbjYsCiYjNDM7CQkJCSAgICAgJmFtcDtjdF90dXBsZS0mZ3Q7c3JjLnUzLmluNikpCiAJCQlyZXR1cm4gMDsKIAogCQlpZiAoKGZsYWdzICZhbXA7IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfRFNUKSkgJmFtcDsmYW1wOwotCQkgICAgIWlwdjZfYWRkcl9jbXAoJmFtcDtmaWx0ZXJfdHVwbGUtJmd0O2RzdC51My5pbjYsCi0JCQkJICAgJmFtcDtjdF90dXBsZS0mZ3Q7ZHN0LnUzLmluNikpCiYjNDM7CQkgICAgIWlwdjZfYWRkcl9lcXVhbCgmYW1wO2ZpbHRlcl90dXBsZS0mZ3Q7ZHN0LnUzLmluNiwKJiM0MzsJCQkJICAgICAmYW1wO2N0X3R1cGxlLSZndDtkc3QudTMuaW42KSkKIAkJCXJldHVybiAwOwogCQlicmVhazsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvbm50cmFjayBOZXRsaW5rIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHJlbGF0ZWQgdG8gSVB2NiBhZGRyZXNzIGNvbXBhcmlzb24gd2l0aGluIHRoZSBuZXRmaWx0ZXIgY29ubnRyYWNrIG5ldGxpbmsgbW9kdWxlLiBUaGUgZGlmZiBzaG93cyBjaGFuZ2VzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGUgc3dpdGNoIGZyb20gYGlwdjZfYWRkcl9jbXBgIHRvIGBpcHY2X2FkZHJfZXF1YWxgLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGJ1ZyBmaXggb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gaG93IElQdjYgYWRkcmVzc2VzIGFyZSBjb21wYXJlZCBkdXJpbmcgZmlsdGVyaW5nLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGludGVudCBoZXJlOyBteSBleHBlcnRpc2Ugc3VnZ2VzdHMgdGhhdCB0aGlzIGlzIG1vcmUgdGhhbiBqdXN0IGEgdHJpdmlhbCBjaGFuZ2UuIFRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbm50cmFjayB0YWJsZSBsb29rdXBzIGFuZCBmaWx0ZXJpbmcgcnVsZXMgYXJlIHNpZ25pZmljYW50LiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhlIG9sZGVyIGZ1bmN0aW9uIGNhbGwgd2FzIGluY29ycmVjdCwgYW5kIGhvdyB0aGUgbmV3IGZ1bmN0aW9uIGNhbGwgYWZmZWN0cyBvdGhlciBjb21wYXJpc29ucy4gSSBzdXNwZWN0IHRoZXJlIG1heSBoYXZlIGJlZW4gYW4gdW5pbnRlbmRlZCBiZWhhdmlvciBjaGFuZ2Ugd2l0aCBhIHN1YnRsZSBkaWZmZXJlbmNlIGluIHRoZSBwcmV2aW91cyBhbmQgbmV3IGZ1bmN0aW9uIGNhbGxzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBhcm91bmQgbGluZSAxMDk4LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgbG9naWMgYW5kIHVuZGVyc3RhbmQgd2h5IHRoaXMgc3BlY2lmaWMgY2hhbmdlIHdhcyBtYWRlIHVzaW5nIGByZWFkLWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0aWYgKGZpbHRlcilcbjEwODE6XHRcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcbjEwODI6XHRcdHJldHVybiAwO1xuMTA4MzpcdH1cbjEwODQ6XHRcbjEwODU6XHRzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLFxuMTA4NjpcdFx0XHRcdFx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpjdF90dXBsZSxcbjEwODc6XHRcdFx0XHRcdFx0dV9pbnQzMl90IGZsYWdzLCBpbnQgZmFtaWx5KVxuMTA4ODpcdHtcbjEwODk6XHRcdHN3aXRjaCAoZmFtaWx5KSB7XG4xMDkwOlx0XHRjYXNlIE5GUFJPVE9fSVBWNDpcbjEwOTE6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9TUkMpKSBcdTAwMjZcdTAwMjZcbjEwOTI6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2VzcmMudTMuaXAgIT0gY3RfdHVwbGUtXHUwMDNlc3JjLnUzLmlwKVxuMTA5MzpcdFx0XHRcdHJldHVybiAgMDtcbjEwOTQ6XHRcbjEwOTU6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcdTAwMjZcdTAwMjZcbjEwOTY6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2Vkc3QudTMuaXAgIT0gY3RfdHVwbGUtXHUwMDNlZHN0LnUzLmlwKVxuMTA5NzpcdFx0XHRcdHJldHVybiAgMDtcbjEwOTg6XHRcdFx0YnJlYWs7XG4xMDk5Olx0XHRjYXNlIE5GUFJPVE9fSVBWNjpcbjExMDA6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9TUkMpKSBcdTAwMjZcdTAwMjZcbjExMDE6XHRcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pbjYsXG4xMTAyOlx0XHRcdFx0XHQgICAgIFx1MDAyNmN0X3R1cGxlLVx1MDAzZXNyYy51My5pbjYpKVxuMTEwMzpcdFx0XHRcdHJldHVybiAwO1xuMTEwNDpcdFxuMTEwNTpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX0RTVCkpIFx1MDAyNlx1MDAyNlxuMTEwNjpcdFx0XHQgICAgIWlwdjZfYWRkcl9lcXVhbChcdTAwMjZmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUzLmluNixcbjExMDc6XHRcdFx0XHRcdCAgICAgXHUwMDI2Y3RfdHVwbGUtXHUwMDNlZHN0LnUzLmluNikpXG4xMTA4Olx0XHRcdFx0cmV0dXJuIDA7XG4xMTA5Olx0XHRcdGJyZWFrO1xuMTExMDpcdFx0fVxuMTExMTpcdFxuMTExMjpcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19OVU0pKSBcdTAwMjZcdTAwMjZcbjExMTM6XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnByb3RvbnVtICE9IGN0X3R1cGxlLVx1MDAzZWRzdC5wcm90b251bSlcbjExMTQ6XHRcdFx0cmV0dXJuIDA7XG4xMTE1Olx0XG4xMTE2Olx0XHRzd2l0Y2ggKGN0X3R1cGxlLVx1MDAzZWRzdC5wcm90b251bSkge1xuMTExNzpcdFx0Y2FzZSBJUFBST1RPX1RDUDpcbjExMTg6XHRcdGNhc2UgSVBQUk9UT19VRFA6XG4xMTE5Olx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fU1JDX1BPUlQpKSBcdTAwMjZcdTAwMjZcbjExMjA6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2VzcmMudS50Y3AucG9ydCAhPSBjdF90dXBsZS1cdTAwM2VzcmMudS50Y3AucG9ydClcbjExMjE6XHRcdFx0XHRyZXR1cm4gMDtcbjExMjI6XHRcbjExMjM6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19EU1RfUE9SVCkpIFx1MDAyNlx1MDAyNlxuMTEyNDpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51LnRjcC5wb3J0ICE9IGN0X3R1cGxlLVx1MDAzZWRzdC51LnRjcC5wb3J0KVxuMTEyNTpcdFx0XHRcdHJldHVybiAwO1xuMTEyNjpcdFx0XHRicmVhaztcbjExMjc6XHRcdGNhc2UgSVBQUk9UT19JQ01QOlxuMTEyODpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBfVFlQRSkpIFx1MDAyNlx1MDAyNlxuMTEyOTpcdFx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51LmljbXAudHlwZSAhPSBjdF90dXBsZS1cdTAwM2Vkc3QudS5pY21wLnR5cGUpXG4xMTMwOlx0XHRcdFx0cmV0dXJuIDA7XG4xMTMxOlx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUF9DT0RFKSkgXHUwMDI2XHUwMDI2XG4xMTMyOlx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUuaWNtcC5jb2RlICE9IGN0X3R1cGxlLVx1MDAzZWRzdC51LmljbXAuY29kZSlcbjExMzM6XHRcdFx0XHRyZXR1cm4gMDtcbjExMzQ6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QX0lEKSkgXHUwMDI2XHUwMDI2XG4xMTM1Olx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlc3JjLnUuaWNtcC5pZCAhPSBjdF90dXBsZS1cdTAwM2VzcmMudS5pY21wLmlkKVxuMTEzNjpcdFx0XHRcdHJldHVybiAwO1xuMTEzNzpcdFx0XHRicmVhaztcbjExMzg6XHRcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4xMTM5Olx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUFY2X1RZUEUpKSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBMb2dpYyBGbGF3IGluIElQdjYgQWRkcmVzcyBDb21wYXJpc29ucyoqCgpPa2F5LCBsZXQmIzM5O3MgdHJhY2UgdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGlwdjZfYWRkcl9jbXBgIGFuZCBgaXB2Nl9hZGRyX2VxdWFsYC4gUmlnaHQsIGBpcHY2X2FkZHJfY21wYCBpcyBhIGJpdCBsaWtlIGBtZW1jbXBgOyBpdCByZXR1cm5zIDAgaWYgdGhlIGFkZHJlc3NlcyBhcmUgaWRlbnRpY2FsLiBCdXQgaG9sZCBvbi4uLiBpZiBgaXB2Nl9hZGRyX2NtcChhMSwgYTIpYCByZXR1cm5lZCAwIG9uIGVxdWFsaXR5LCB0aGVuIGAhaXB2Nl9hZGRyX2NtcGAgd291bGQgZXZhbHVhdGUgdG8gdHJ1ZSAqd2hlbiB0aGUgYWRkcmVzc2VzIHdlcmUgZXF1YWwqISBJIHNlZSB0aGUgcHJvYmxlbS4gQmVmb3JlLCB3aGVuIHRoZSBhZGRyZXNzZXMgbWF0Y2hlZCAobWVhbmluZyBgaXB2Nl9hZGRyX2NtcGAgd2FzIDApLCBgIWlwdjZfYWRkcl9jbXBgIHdhcyAxLCBzbyB0aGUgZnVuY3Rpb24gd291bGQgcmV0dXJuIDAsIGVmZmVjdGl2ZWx5IHJlamVjdGluZyB0aGUgbWF0Y2ghCgpOb3csIGBpcHY2X2FkZHJfZXF1YWwoYTEsIGEyKWAgYmVoYXZlcyBtb3JlIGludHVpdGl2ZWx5LCByZXR1cm5pbmcgdHJ1ZSAobm9uLXplcm8pIG9uIGVxdWFsaXR5IGFuZCBmYWxzZSAoemVybykgb3RoZXJ3aXNlLiBUaGlzIG1lYW5zIGAhaXB2Nl9hZGRyX2VxdWFsYCByZXR1cm5zIHRydWUgaWYgYWRkcmVzc2VzIGFyZSBOT1QgZXF1YWwsIHdoaWNoIGlzIGFsc28gYSByZWplY3Rpb24uCgpTbywgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIHRoZSB1c2Ugb2YgYCFpcHY2X2FkZHJfY21wYCB3YXMgYSBjbGFzc2ljIGludmVydGVkIGxvZ2ljIGJ1ZyB3aXRoaW4gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGlwdjZfYWRkcl9jbXBgIGFnYWluLCBqdXN0IHRvIGJlIHN1cmUuIEkmIzM5O2xsIGZpbmQgaXQgaW4gYGluY2x1ZGUvbmV0L2lwdjYuaGAgb3Igc29tZXdoZXJlIHNpbWlsYXIgdG8gY29uZmlybSB0aGlzIGlzIHJlYWxseSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9hZGRyX2NtcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYz00NTY9c3RhdGljIGludCBjb21wYXJlX25ldGRldl9hbmRfaXAoaW50IGlmaW5kZXhfYSwgc3RydWN0IHNvY2thZGRyICpzYSxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy00NzgtXHQgICAgX19idWlsdGluX29iamVjdF9zaXplKHNhLCAwKSBcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM6NDc5Olx0XHRyZXR1cm4gaXB2Nl9hZGRyX2NtcChcdTAwMjYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYSktXHUwMDNlc2luNl9hZGRyLFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMtNDgwLVx0XHRcdFx0ICAgICBcdTAwMjYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYiktXHUwMDNlc2luNl9hZGRyKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYz0xMzY1PXN0YXRpYyBpbnQgY21hX2FkZHJfY21wKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc3JjLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdClcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy0xMzc4LVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM6MTM3OTpcdFx0aWYgKGlwdjZfYWRkcl9jbXAoXHUwMDI2c3JjX2FkZHI2LVx1MDAzZXNpbjZfYWRkcixcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTEzODAtXHRcdFx0XHRcdCAgXHUwMDI2ZHN0X2FkZHI2LVx1MDAzZXNpbjZfYWRkcikpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ycGMuYz04NTc9c3RydWN0IGZibmljX2lwX2FkZHIgKl9fZmJuaWNfaXA2X3N5bmMoc3RydWN0IGZibmljX2RldiAqZmJkLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcnBjLmMtOTE0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ycGMuYzo5MTU6XHRcdGlmIChpcHY2X2FkZHJfY21wKFx1MDAyNmlwX2FkZHItXHUwMDNldmFsdWUsIGFkZHIpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ycGMuYy05MTYtXHRcdFx0Y29udGludWU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuYz0xOTg2PWl3bF9tbGRfc2VuZF9wcm90b19vZmZsb2FkKHN0cnVjdCBpd2xfbWxkICptbGQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuYy0yMDM4LVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuX25zYyBcdTAwMjZcdTAwMjYgaiBcdTAwM2MgYzsgaiYjNDM7JiM0MzspXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9kMy5jOjIwMzk6XHRcdFx0aWYgKGlwdjZfYWRkcl9jbXAoXHUwMDI2bnNjW2pdLmRlc3RfaXB2Nl9hZGRyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuYy0yMDQwLVx0XHRcdFx0XHQgIFx1MDAyNnNvbGljaXRlZF9hZGRyKSA9PSAwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29mZmxvYWRpbmcuYz0yOT1pbnQgaXdsX212bV9zZW5kX3Byb3RvX29mZmxvYWQoc3RydWN0IGl3bF9tdm0gKm12bSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9vZmZsb2FkaW5nLmMtMTAzLVx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGM7IGomIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vb2ZmbG9hZGluZy5jOjEwNDpcdFx0XHRcdGlmIChpcHY2X2FkZHJfY21wKFx1MDAyNm5zY1tqXS5kZXN0X2lwdjZfYWRkcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29mZmxvYWRpbmcuYy0xMDUtXHRcdFx0XHRcdFx0ICBcdTAwMjZzb2xpY2l0ZWRfYWRkcikgPT0gMClcbi0tXG5pbmNsdWRlL25ldC9pcHY2Lmg9NTAwPXN0YXRpYyBpbmxpbmUgX191MzIgaXB2Nl9pZmFjZV9zY29wZV9pZChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGludCBpZmFjZSlcbi0tXG5pbmNsdWRlL25ldC9pcHY2LmgtNTA0LVxuaW5jbHVkZS9uZXQvaXB2Ni5oOjUwNTpzdGF0aWMgaW5saW5lIGludCBpcHY2X2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTEsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTIpXG5pbmNsdWRlL25ldC9pcHY2LmgtNTA2LXtcbi0tXG5uZXQvYmx1ZXRvb3RoLzZsb3dwYW4uYz0xNDA9c3RhdGljIGlubGluZSBzdHJ1Y3QgbG93cGFuX3BlZXIgKnBlZXJfbG9va3VwX2RzdChzdHJ1Y3QgbG93cGFuX2J0bGVfZGV2ICpkZXYsXG4tLVxubmV0L2JsdWV0b290aC82bG93cGFuLmMtMTgxLVxubmV0L2JsdWV0b290aC82bG93cGFuLmM6MTgyOlx0XHRpZiAoIWlwdjZfYWRkcl9jbXAoXHUwMDI2cGVlci1cdTAwM2VwZWVyX2FkZHIsIG5leHRob3ApKSB7XG5uZXQvYmx1ZXRvb3RoLzZsb3dwYW4uYy0xODMtXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz00MTU9dm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00NDgtXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjQ0OTpcdGlmICghaXB2Nl9hZGRyX2NtcChzYWRkciwgZGFkZHIpKSB7XG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ1MC1cdFx0LyogcHJldmVudCBmbG9vZGluZyB0byBuZWlnaCBzdXBwcmVzcyBwb3J0cyAqL1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTM0Mz1icl9tdWx0aWNhc3RfZmluZF9ncm91cF9zcmMoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcsIHN0cnVjdCBicl9pcCAqaXApXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMzU1LVx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShlbnQsIFx1MDAyNnBnLVx1MDAzZXNyY19saXN0LCBub2RlKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxMzU2Olx0XHRcdGlmICghaXB2Nl9hZGRyX2NtcChcdTAwMjZlbnQtXHUwMDNlYWRkci5zcmMuaXA2LCBcdTAwMjZpcC1cdTAwM2VzcmMuaXA2KSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTM1Ny1cdFx0XHRcdHJldHVybiBlbnQ7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zMTc5PXN0YXRpYyBib29sIGJyX211bHRpY2FzdF9zZWxlY3RfcXVlcmllcihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzIwMC1cdFx0b3RoZXJfdGltZXIgPSBcdTAwMjZicm1jdHgtXHUwMDNlaXA2X290aGVyX3F1ZXJ5LnRpbWVyO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozMjAxOlx0XHRpZiAoaXB2Nl9hZGRyX2NtcChcdTAwMjZzYWRkci1cdTAwM2VzcmMuaXA2LCBcdTAwMjZxdWVyaWVyLVx1MDAzZWFkZHIuc3JjLmlwNikgXHUwMDNjPSAwKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMjAyLVx0XHRcdGdvdG8gdXBkYXRlO1xuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yNzM9c3RhdGljIGlubGluZSBpbnQgbmhfY29tcChzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgZmliX2luZm8gKm9maSlcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMzAzLVx0XHRpZiAobmgtXHUwMDNlZmliX25oX2d3X2ZhbWlseSA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzozMDQ6XHRcdCAgICBpcHY2X2FkZHJfY21wKFx1MDAyNm5oLVx1MDAzZWZpYl9uaF9ndzYsIFx1MDAyNm9uaC1cdTAwM2VmaWJfbmhfZ3c2KSlcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0zMDUtXHRcdFx0cmV0dXJuIC0xO1xuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz03NDI9c3RhdGljIGludCBmaWJfZ2V0X25ocyhzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgcnRuZXh0aG9wICpydG5oLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy04MzMtXHRcdCAgICAoY2ZnLVx1MDAzZWZjX2d3X2ZhbWlseSA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo4MzQ6XHRcdCAgICAgaXB2Nl9hZGRyX2NtcChcdTAwMjZuaC1cdTAwM2VmaWJfbmhfZ3c2LCBcdTAwMjZjZmctXHUwMDNlZmNfZ3c2KSkpIHtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy04MzUtXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz05Mjg9aW50IGZpYl9uaF9tYXRjaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIHN0cnVjdCBmaWJfaW5mbyAqZmksXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTk3NC1cdFx0aWYgKGNmZy1cdTAwM2VmY19nd19mYW1pbHkgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6OTc1Olx0XHQgICAgaXB2Nl9hZGRyX2NtcChcdTAwMjZjZmctXHUwMDNlZmNfZ3c2LCBcdTAwMjZuaC1cdTAwM2VmaWJfbmhfZ3c2KSlcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05NzYtXHRcdFx0cmV0dXJuIDE7XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEwMzQtXHRcdFx0XHRcdGlmIChjZmcyLmZjX2d3X2ZhbWlseSAhPSBBRl9JTkVUNiB8fFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEwMzU6XHRcdFx0XHRcdCAgICBpcHY2X2FkZHJfY21wKFx1MDAyNmNmZzIuZmNfZ3c2LFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEwMzYtXHRcdFx0XHRcdFx0XHQgIFx1MDAyNm5oLVx1MDAzZWZpYl9uaF9ndzYpKVxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9NTA5PXN0YXRpYyBib29sIGZvdV9jZmdfY21wKHN0cnVjdCBmb3UgKmZvdSwgc3RydWN0IGZvdV9jZmcgKmNmZylcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTUyNy1cdH0gZWxzZSB7XG5uZXQvaXB2NC9mb3VfY29yZS5jOjUyODpcdFx0aWYgKGlwdjZfYWRkcl9jbXAoXHUwMDI2c2stXHUwMDNlc2tfdjZfcmN2X3NhZGRyLCBcdTAwMjZ1ZHBfY2ZnLVx1MDAzZWxvY2FsX2lwNikgfHxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6NTI5Olx0XHQgICAgaXB2Nl9hZGRyX2NtcChcdTAwMjZzay1cdTAwM2Vza192Nl9kYWRkciwgXHUwMDI2dWRwX2NmZy1cdTAwM2VwZWVyX2lwNikpXG5uZXQvaXB2NC9mb3VfY29yZS5jLTUzMC1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTQ0Nz1zdGF0aWMgaW50IHRjcF9hb192ZXJpZnlfaXB2NihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfYW9fYWRkICpjbWQsXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMTQ5My1cdFx0aXB2Nl9hZGRyX3ByZWZpeChcdTAwMjZwZngsIGFkZHIsIHByZWZpeCk7XG5uZXQvaXB2NC90Y3BfYW8uYzoxNDk0Olx0XHRpZiAoaXB2Nl9hZGRyX2NtcChcdTAwMjZwZngsIGFkZHIpKVxubmV0L2lwdjQvdGNwX2FvLmMtMTQ5NS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDkyPXN0YXRpYyBpbnQgdGNwX2FvX2NvcHlfbWt0c190b191c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0yMTkxLVx0XHRcdFx0aXB2Nl9hZGRyX3ByZWZpeChcdTAwMjZwZngsIGFkZHI2LCBvcHRfaW4ucHJlZml4KTtcbm5ldC9pcHY0L3RjcF9hby5jOjIxOTI6XHRcdFx0XHRpZiAoaXB2Nl9hZGRyX2NtcChcdTAwMjZwZngsIGFkZHI2KSlcbm5ldC9pcHY0L3RjcF9hby5jLTIxOTMtXHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jPTk2PWlwNnRfc25wdF90ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTlBULmMtMTEyLVx0XHRpcHY2X2FkZHJfcHJlZml4KFx1MDAyNmJvdW5jZWRfcGZ4LCBcdTAwMjZib3VuY2VkX2hkci1cdTAwM2VkYWRkciwgbnB0LVx1MDAzZXNyY19wZnhfbGVuKTtcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jOjExMzpcdFx0aWYgKGlwdjZfYWRkcl9jbXAoXHUwMDI2Ym91bmNlZF9wZngsIFx1MDAyNm5wdC1cdTAwM2VzcmNfcGZ4LmluNikgPT0gMClcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jLTExNC1cdFx0XHRpcDZ0X25wdF9tYXBfcGZ4KG5wdCwgXHUwMDI2Ym91bmNlZF9oZHItXHUwMDNlZGFkZHIpO1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jPTEyMT1pcDZ0X2RucHRfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jLTEzNy1cdFx0aXB2Nl9hZGRyX3ByZWZpeChcdTAwMjZib3VuY2VkX3BmeCwgXHUwMDI2Ym91bmNlZF9oZHItXHUwMDNlc2FkZHIsIG5wdC1cdTAwM2VzcmNfcGZ4X2xlbik7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYzoxMzg6XHRcdGlmIChpcHY2X2FkZHJfY21wKFx1MDAyNmJvdW5jZWRfcGZ4LCBcdTAwMjZucHQtXHUwMDNlc3JjX3BmeC5pbjYpID09IDApXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYy0xMzktXHRcdFx0aXA2dF9ucHRfbWFwX3BmeChucHQsIFx1MDAyNmJvdW5jZWRfaGRyLVx1MDAzZXNhZGRyKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM9MzgxPXN0YXRpYyBib29sIG5mX25hdF9pbmV0X2luX3JhbmdlKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTM4Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYzozODg6XHRyZXR1cm4gaXB2Nl9hZGRyX2NtcChcdTAwMjZ0LVx1MDAzZXNyYy51My5pbjYsIFx1MDAyNnJhbmdlLVx1MDAzZW1pbl9hZGRyLmluNikgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjM4OTpcdCAgICAgICBpcHY2X2FkZHJfY21wKFx1MDAyNnQtXHUwMDNlc3JjLnUzLmluNiwgXHUwMDI2cmFuZ2UtXHUwMDNlbWF4X2FkZHIuaW42KSBcdTAwM2M9IDA7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMzkwLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jPTkyMD1uZl9uYXRfaXB2Nl9sb2NhbF9pbih2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtOTMyLVx0Lyogc2VlIG5mX25hdF9pcHY0X2xvY2FsX2luICovXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjkzMzpcdGlmIChpcHY2X2FkZHJfY21wKFx1MDAyNnNhZGRyLCBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyKSB8fFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy05MzQtXHQgICAgbmZfbmF0X2luZXRfcG9ydF93YXNfbWFuZ2xlZChza2IsIHNrLVx1MDAzZXNrX2Rwb3J0KSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jPTk0MT1uZl9uYXRfaXB2Nl9pbih2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtOTQ5LVx0aWYgKHZlcmRpY3QgIT0gTkZfRFJPUCBcdTAwMjZcdTAwMjYgdmVyZGljdCAhPSBORl9TVE9MRU4gXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjk1MDpcdCAgICBpcHY2X2FkZHJfY21wKFx1MDAyNmRhZGRyLCBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyKSlcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtOTUxLVx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbi0tXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuYz0xODU9aW50IG5ldGxibF9hZjZsaXN0X2FkZChzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKmVudHJ5LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuLS1cbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5jLTIwMC1cdFx0aWYgKGl0ZXItXHUwMDNldmFsaWQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuYzoyMDE6XHRcdCAgICBpcHY2X2FkZHJfY21wKFx1MDAyNmVudHJ5LVx1MDAzZW1hc2ssIFx1MDAyNml0ZXItXHUwMDNlbWFzaykgXHUwMDNlIDApIHtcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5jLTIwMi1cdFx0XHRfX2xpc3RfYWRkX3JjdShcdTAwMjZlbnRyeS1cdTAwM2VsaXN0LFxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jPTEyMTc9c3RhdGljIHN0cnVjdCBza19idWZmICpjYWtlX2Fja19maWx0ZXIoc3RydWN0IGNha2Vfc2NoZWRfZGF0YSAqcSxcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjgzLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTI4NDpcdFx0XHRpZiAoaXB2Nl9hZGRyX2NtcChcdTAwMjZpcHY2aF9jaGVjay1cdTAwM2VzYWRkciwgXHUwMDI2aXB2NmgtXHUwMDNlc2FkZHIpIHx8XG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxMjg1Olx0XHRcdCAgICBpcHY2X2FkZHJfY21wKFx1MDAyNmlwdjZoX2NoZWNrLVx1MDAzZWRhZGRyLCBcdTAwMjZpcHY2aC1cdTAwM2VkYWRkcikpXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjg2LVx0XHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MjQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQdjYgQWRkcmVzcyBDb21wYXJpc29uIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBJUHY2IGFkZHJlc3MgY29tcGFyaXNvbiBpc3N1ZS4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbiBgaW5jbHVkZS9uZXQvaXB2Ni5oYC4gIEkgc2VlIGBpcHY2X2FkZHJfY21wYCwgd2hpY2ggdXNlcyBhIGBtZW1jbXBgIGZvciBhIGJ5dGUtYnktYnl0ZSBjb21wYXJpc29uLCBhbmQgYGlwdjZfYWRkcl9lcXVhbGAsIHdoaWNoIHJlbGllcyBvbiBYT1Igb3BlcmF0aW9ucyBvbiAzMi1iaXQgc2VnbWVudHMuICBUaGUgdXNlIG9mIGBpcHY2X2FkZHJfZXF1YWxgIGlzIHByb2JhYmx5IHRvIG9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgYWRkcmVzc2VzIGFyZSBlcXVhbCwgYnV0IEkgbmVlZCB0byBjb25zaWRlciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGNvZGUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBwcm9ibGVtIGluIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlYC4gIEluaXRpYWxseSwgaXQgd2FzIHVzaW5nIGAhaXB2Nl9hZGRyX2NtcGAgb24gYGZpbHRlcl90dXBsZS0mZ3Q7c3JjLnUzLmluNmAgYW5kIGBjdF90dXBsZS0mZ3Q7c3JjLnUzLmluNmAuIFRoYXQmIzM5O3MgZXF1aXZhbGVudCB0byBgbWVtY21wKC4uLikgPT0gMGAuIFNvLCBpZiB0aGUgYWRkcmVzc2VzICp3ZXJlKiBlcXVhbCwgdGhlIGBpZmAgY29uZGl0aW9uIHdhcyB0cnVlLCBsZWFkaW5nIHRvIGEgZnVuY3Rpb24gcmV0dXJuIG9mIGAwYCB3aGljaCwgaW4gdGhpcyBjb250ZXh0LCB0cmFuc2xhdGVzIHRvIE5PIE1BVENIIOKAkyBtZWFuaW5nIHRoZSBtYXRjaGluZyBlbnRyeSB3YXMgd3JvbmdseSBiZWluZyByZWplY3RlZCwgYW5kICpub24qLW1hdGNoaW5nIGVudHJpZXMgd2VyZSBiZWluZyBhbGxvd2VkLiBBIHByZXR0eSBjcml0aWNhbCBidWchCgpUaGUgZml4LCBhcyBJIHNlZSBpdCwgc3dpdGNoZXMgdG8gYCFpcHY2X2FkZHJfZXF1YWwoLi4uKWAuIE5vdywgaWYgdGhlIGFkZHJlc3NlcyBhcmUgKm5vdCogZXF1YWwsIGl0IHJldHVybnMgMCAocmVqZWN0IGVudHJ5KS4gVGhpcyBtYWtlcyBhIGxvdCBtb3JlIHNlbnNlLCBhbmQgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggZm9yIGZpbHRlcmluZyBiYXNlZCBvbiBub24tZXF1YWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBsb2dpYyB3aXRoaW4gdGhlIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlYCBmdW5jdGlvbiB0byBjb25maXJtIGl0LCBidXQgdGhpcyBjaGFuZ2Ugc2VlbXMgcmlnaHQuCgpOZXh0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB3aGVyZSBgZmlsdGVyX3R1cGxlYCBhbmQgYGN0X3R1cGxlYCBhcmUgY29taW5nIGZyb20gYW5kIGhvdyBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAgaXMgYWN0dWFsbHkgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgY29udGV4dCB0byBmdWxseSBhcHByZWNpYXRlIHRoZSBwb3RlbnRpYWwgY29uc2VxdWVuY2VzIG9mIHRoaXMgYnVnLiBUaGlzIGhlbHBzIHByb3ZpZGUgY29udGV4dCBmb3IgdGhlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEwNjY9c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDg0LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwODU6c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmZpbHRlcl90dXBsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMDg2LVx0XHRcdFx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpjdF90dXBsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTE1ND1zdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2goc3RydWN0IG5mX2Nvbm4gKmN0LCB2b2lkICpkYXRhKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTc1LVx0XHR0dXBsZSA9IG5mX2N0X3R1cGxlKGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjExNzY6XHRcdGlmICghY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShcdTAwMjZmaWx0ZXItXHUwMDNlb3JpZywgdHVwbGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3Ny1cdFx0XHRcdFx0XHQgIGZpbHRlci1cdTAwM2VvcmlnX2ZsYWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTgzLVx0XHR0dXBsZSA9IG5mX2N0X3R1cGxlKGN0LCBJUF9DVF9ESVJfUkVQTFkpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjExODQ6XHRcdGlmICghY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShcdTAwMjZmaWx0ZXItXHUwMDNlcmVwbHksIHR1cGxlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTExODUtXHRcdFx0XHRcdFx0ICBmaWx0ZXItXHUwMDNlcmVwbHlfZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NzEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIHRoaW5raW5nOgoKKipFeGFtaW5pbmcgQ29ubnRyYWNrIE5ldGxpbmsgRnVuY3Rpb25zKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gc29tZSBjb25udHJhY2sgbmV0bGluayBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAgYW5kIGBjdG5ldGxpbmtfZHVtcF90YWJsZWAsIG9yIHJhdGhlciwgYW55IGZ1bmN0aW9uIGNhbGxzIHRvIHRob3NlIHR3by4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHdheSB0byBnZXQgYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGEgcGFydGljdWxhciBmdW5jdGlvbiBpcyB1c2VkIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgc29tZXRoaW5nIGludGVyZXN0aW5nIG1pZ2h0IGJlIGdvaW5nIG9uIGFyb3VuZCB0aG9zZSByb3V0aW5lcy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGV4cGxvcmF0aW9uIG9uIGxpbmVzIDEwNTAgdGhyb3VnaCAxMjAwIG9mIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgc2VjdGlvbiB3aWxsIGhvbGQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBmaWx0ZXJpbmcgYW5kIGR1bXBpbmcgY29ubnRyYWNrIGluZm9ybWF0aW9uIHZpYSBuZXRsaW5rLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNTA6XHRcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDUxOlx0XHR9XG4xMDUyOlx0XG4xMDUzOlx0XHRyZXR1cm4gZmlsdGVyO1xuMTA1NDpcdFxuMTA1NTpcdGVycl9maWx0ZXI6XG4xMDU2Olx0XHRrZnJlZShmaWx0ZXIpO1xuMTA1NzpcdFxuMTA1ODpcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjEwNTk6XHR9XG4xMDYwOlx0XG4xMDYxOlx0c3RhdGljIGJvb2wgY3RuZXRsaW5rX25lZWRzX2ZpbHRlcih1OCBmYW1pbHksIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhKVxuMTA2MjpcdHtcbjEwNjM6XHRcdHJldHVybiBmYW1pbHkgfHwgY2RhW0NUQV9NQVJLXSB8fCBjZGFbQ1RBX0ZJTFRFUl0gfHwgY2RhW0NUQV9TVEFUVVNdIHx8IGNkYVtDVEFfWk9ORV07XG4xMDY0Olx0fVxuMTA2NTpcdFxuMTA2NjpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbjEwNjc6XHR7XG4xMDY4Olx0XHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgKmNkYSA9IGNiLVx1MDAzZWRhdGE7XG4xMDY5Olx0XHRzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqZmlsdGVyID0gTlVMTDtcbjEwNzA6XHRcdHN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBubG1zZ19kYXRhKGNiLVx1MDAzZW5saCk7XG4xMDcxOlx0XHR1OCBmYW1pbHkgPSBuZm1zZy1cdTAwM2VuZmdlbl9mYW1pbHk7XG4xMDcyOlx0XG4xMDczOlx0XHRpZiAoY3RuZXRsaW5rX25lZWRzX2ZpbHRlcihmYW1pbHksIGNkYSkpIHtcbjEwNzQ6XHRcdFx0ZmlsdGVyID0gY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjZGEsIGZhbWlseSk7XG4xMDc1Olx0XHRcdGlmIChJU19FUlIoZmlsdGVyKSlcbjEwNzY6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihmaWx0ZXIpO1xuMTA3NzpcdFx0fVxuMTA3ODpcdFxuMTA3OTpcdFx0Y2ItXHUwMDNlZGF0YSA9IGZpbHRlcjtcbjEwODA6XHRcdGlmIChmaWx0ZXIpXG4xMDgxOlx0XHRcdGNiLVx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4xMDgyOlx0XHRyZXR1cm4gMDtcbjEwODM6XHR9XG4xMDg0Olx0XG4xMDg1Olx0c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmZpbHRlcl90dXBsZSxcbjEwODY6XHRcdFx0XHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqY3RfdHVwbGUsXG4xMDg3Olx0XHRcdFx0XHRcdHVfaW50MzJfdCBmbGFncywgaW50IGZhbWlseSlcbjEwODg6XHR7XG4xMDg5Olx0XHRzd2l0Y2ggKGZhbWlseSkge1xuMTA5MDpcdFx0Y2FzZSBORlBST1RPX0lQVjQ6XG4xMDkxOlx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfU1JDKSkgXHUwMDI2XHUwMDI2XG4xMDkyOlx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlc3JjLnUzLmlwICE9IGN0X3R1cGxlLVx1MDAzZXNyYy51My5pcClcbjEwOTM6XHRcdFx0XHRyZXR1cm4gIDA7XG4xMDk0Olx0XG4xMDk1Olx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfRFNUKSkgXHUwMDI2XHUwMDI2XG4xMDk2Olx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlZHN0LnUzLmlwICE9IGN0X3R1cGxlLVx1MDAzZWRzdC51My5pcClcbjEwOTc6XHRcdFx0XHRyZXR1cm4gIDA7XG4xMDk4Olx0XHRcdGJyZWFrO1xuMTA5OTpcdFx0Y2FzZSBORlBST1RPX0lQVjY6XG4xMTAwOlx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfU1JDKSkgXHUwMDI2XHUwMDI2XG4xMTAxOlx0XHRcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNmZpbHRlcl90dXBsZS1cdTAwM2VzcmMudTMuaW42LFxuMTEwMjpcdFx0XHRcdFx0ICAgICBcdTAwMjZjdF90dXBsZS1cdTAwM2VzcmMudTMuaW42KSlcbjExMDM6XHRcdFx0XHRyZXR1cm4gMDtcbjExMDQ6XHRcbjExMDU6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcdTAwMjZcdTAwMjZcbjExMDY6XHRcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pbjYsXG4xMTA3Olx0XHRcdFx0XHQgICAgIFx1MDAyNmN0X3R1cGxlLVx1MDAzZWRzdC51My5pbjYpKVxuMTEwODpcdFx0XHRcdHJldHVybiAwO1xuMTEwOTpcdFx0XHRicmVhaztcbjExMTA6XHRcdH1cbjExMTE6XHRcbjExMTI6XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fTlVNKSkgXHUwMDI2XHUwMDI2XG4xMTEzOlx0XHQgICAgZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC5wcm90b251bSAhPSBjdF90dXBsZS1cdTAwM2Vkc3QucHJvdG9udW0pXG4xMTE0Olx0XHRcdHJldHVybiAwO1xuMTExNTpcdFxuMTExNjpcdFx0c3dpdGNoIChjdF90dXBsZS1cdTAwM2Vkc3QucHJvdG9udW0pIHtcbjExMTc6XHRcdGNhc2UgSVBQUk9UT19UQ1A6XG4xMTE4Olx0XHRjYXNlIElQUFJPVE9fVURQOlxuMTExOTpcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX1NSQ19QT1JUKSkgXHUwMDI2XHUwMDI2XG4xMTIwOlx0XHRcdCAgICBmaWx0ZXJfdHVwbGUtXHUwMDNlc3JjLnUudGNwLnBvcnQgIT0gY3RfdHVwbGUtXHUwMDNlc3JjLnUudGNwLnBvcnQpXG4xMTIxOlx0XHRcdFx0cmV0dXJuIDA7XG4xMTIyOlx0XG4xMTIzOlx0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fRFNUX1BPUlQpKSBcdTAwMjZcdTAwMjZcbjExMjQ6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2Vkc3QudS50Y3AucG9ydCAhPSBjdF90dXBsZS1cdTAwM2Vkc3QudS50Y3AucG9ydClcbjExMjU6XHRcdFx0XHRyZXR1cm4gMDtcbjExMjY6XHRcdFx0YnJlYWs7XG4xMTI3Olx0XHRjYXNlIElQUFJPVE9fSUNNUDpcbjExMjg6XHRcdFx0aWYgKChmbGFncyBcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QX1RZUEUpKSBcdTAwMjZcdTAwMjZcbjExMjk6XHRcdFx0ICAgIGZpbHRlcl90dXBsZS1cdTAwM2Vkc3QudS5pY21wLnR5cGUgIT0gY3RfdHVwbGUtXHUwMDNlZHN0LnUuaWNtcC50eXBlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM2NAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBDb25udHJhY2sgTmV0bGluayBGaWx0ZXJpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHdlJiMzOTtyZSBoYW5kbGluZyBjb25udHJhY2sgZmlsdGVyaW5nIG92ZXIgTmV0bGluay4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgZmxvdywgcGFydGljdWxhcmx5IGhvdyBmaWx0ZXJzIGFyZSBjb25zdHJ1Y3RlZCBhbmQgYXBwbGllZC4gSSBzZWUgdGhhdCBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAgaXMgdGhlIHdvcmtob3JzZSBoZXJlOyBpdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyB1bHRpbWF0ZWx5IGRvaW5nIHRoZSBjb21wYXJpc29uIHdoZW4gZmlsdGVyaW5nIGR1bXAgZW50cmllcy4gTm93LCB3aGVyZSBkb2VzIHRoaXMgYGZpbHRlcmAgc3RydWN0IGNvbWUgZnJvbT8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgaG93IGl0JiMzOTtzIGluaXRpYWxpemVkLiBMb29rcyBsaWtlIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYCBpcyB0aGUgbGlrZWx5IGNhbmRpZGF0ZSwgYmVjYXVzZSBpdCBoYW5kbGVzIHRoZSBhdHRyaWJ1dGUgcGFyc2luZyBmcm9tIHVzZXJzcGFjZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgIGluaXRpYWxpemVzIHRoZSBmaWx0ZXI7IHRoaXMgc2VlbXMgdG8gYmUgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAwOlx0XG4xMDAxOlx0XHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX21hcmsoXHUwMDI2ZmlsdGVyLVx1MDAzZW1hcmssIGNkYSk7XG4xMDAyOlx0XHRpZiAoZXJyKVxuMTAwMzpcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDA0Olx0XG4xMDA1Olx0XHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX3N0YXR1cyhcdTAwMjZmaWx0ZXItXHUwMDNlc3RhdHVzLCBjZGEpO1xuMTAwNjpcdFx0aWYgKGVycilcbjEwMDc6XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTAwODpcdFxuMTAwOTpcdFx0aWYgKGNkYVtDVEFfWk9ORV0pIHtcbjEwMTA6XHRcdFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9aT05FXSwgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUpO1xuMTAxMTpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTAxMjpcdFx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwMTM6XHRcdFx0ZmlsdGVyLVx1MDAzZXpvbmVfZmlsdGVyID0gdHJ1ZTtcbjEwMTQ6XHRcdH1cbjEwMTU6XHRcbjEwMTY6XHRcdGlmICghY2RhW0NUQV9GSUxURVJdKVxuMTAxNzpcdFx0XHRyZXR1cm4gZmlsdGVyO1xuMTAxODpcdFxuMTAxOTpcdFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX2ZpbHRlcihjZGFbQ1RBX0ZJTFRFUl0sIGZpbHRlcik7XG4xMDIwOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTAyMTpcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDIyOlx0XG4xMDIzOlx0XHRpZiAoZmlsdGVyLVx1MDAzZW9yaWdfZmxhZ3MpIHtcbjEwMjQ6XHRcdFx0aWYgKCFjZGFbQ1RBX1RVUExFX09SSUddKSB7XG4xMDI1Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjEwMjY6XHRcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDI3Olx0XHRcdH1cbjEwMjg6XHRcbjEwMjk6XHRcdFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjZGEsIFx1MDAyNmZpbHRlci1cdTAwM2VvcmlnLFxuMTAzMDpcdFx0XHRcdFx0XHRcdCAgIENUQV9UVVBMRV9PUklHLFxuMTAzMTpcdFx0XHRcdFx0XHRcdCAgIGZpbHRlci1cdTAwM2VmYW1pbHksXG4xMDMyOlx0XHRcdFx0XHRcdFx0ICAgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUsXG4xMDMzOlx0XHRcdFx0XHRcdFx0ICAgZmlsdGVyLVx1MDAzZW9yaWdfZmxhZ3MpO1xuMTAzNDpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTAzNTpcdFx0XHRcdGdvdG8gZXJyX2ZpbHRlcjtcbjEwMzY6XHRcdH1cbjEwMzc6XHRcbjEwMzg6XHRcdGlmIChmaWx0ZXItXHUwMDNlcmVwbHlfZmxhZ3MpIHtcbjEwMzk6XHRcdFx0aWYgKCFjZGFbQ1RBX1RVUExFX1JFUExZXSkge1xuMTA0MDpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4xMDQxOlx0XHRcdFx0Z290byBlcnJfZmlsdGVyO1xuMTA0MjpcdFx0XHR9XG4xMDQzOlx0XG4xMDQ0Olx0XHRcdGVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZV9maWx0ZXIoY2RhLCBcdTAwMjZmaWx0ZXItXHUwMDNlcmVwbHksXG4xMDQ1Olx0XHRcdFx0XHRcdFx0ICAgQ1RBX1RVUExFX1JFUExZLFxuMTA0NjpcdFx0XHRcdFx0XHRcdCAgIGZpbHRlci1cdTAwM2VmYW1pbHksXG4xMDQ3Olx0XHRcdFx0XHRcdFx0ICAgXHUwMDI2ZmlsdGVyLVx1MDAzZXpvbmUsXG4xMDQ4Olx0XHRcdFx0XHRcdFx0ICAgZmlsdGVyLVx1MDAzZXJlcGx5X2ZsYWdzKTtcbjEwNDk6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjEwNTA6XHRcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDUxOlx0XHR9XG4xMDUyOlx0XG4xMDUzOlx0XHRyZXR1cm4gZmlsdGVyO1xuMTA1NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM5NwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQWxsb2NhdGlvbiBvZiBgZmlsdGVyYCBpbiBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBgZmlsdGVyYCBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAgZnVuY3Rpb24uIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgdG8gZW5zdXJlIHByb3BlciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcHJldmVudCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIG1lbW9yeSBpcyBhY3F1aXJlZCwgd2hldGhlciBpdCYjMzk7cyBzdGF0aWNhbGx5LCBkeW5hbWljYWxseSB3aXRoIGBrbWFsbG9jYCwgb3IgdGhyb3VnaCBzb21lIG90aGVyIGFsbG9jYXRvci4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgaWYgdGhlcmUmIzM5O3MgYW55IGFzc29jaWF0ZWQgZXJyb3IgaGFuZGxpbmcgaWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIGFuZCB3aGF0IG1lY2hhbmlzbSBpcyBlbXBsb3llZCB0byByZWxlYXNlIHRoZSBtZW1vcnkgd2hlbiB0aGUgZmlsdGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuIElzIHRoZXJlIGEgY29ycmVzcG9uZGluZyBkZWFsbG9jYXRpb24gZnVuY3Rpb24sIGFuZCBpcyBpdCBjYWxsZWQgaW4gYWxsIHRoZSBuZWNlc3Nhcnkgc2NlbmFyaW9zLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGluZ3MgZ28gd3Jvbmc/IEZ1cnRoZXJtb3JlLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IGNvbnNpZGVyYXRpb25zIHJlbGF0ZWQgdG8gYWxpZ25tZW50IGFuZCBwb3RlbnRpYWwgcGFkZGluZz8gSSBuZWVkIHRvIHJldmlldyBob3cgdGhpcyBhbGxvY2F0aW9uIGltcGFjdHMgdGhlIG92ZXJhbGwgbGlmZWN5Y2xlIG9mIHRoZSBgZmlsdGVyYCBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBmcmFtZXdvcmsuIFRoaXMgaXMgZ29pbmcgdG8gcmVxdWlyZSBhIGNhcmVmdWwgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgYGZpbHRlcmAgaXMgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk4MDpcdFx0QlVJTERfQlVHX09OKF9fSVBTX01BWF9CSVQgXHUwMDNlPSAzMik7XG4gOTgxOlx0XHRyZXR1cm4gMDtcbiA5ODI6XHR9XG4gOTgzOlx0XG4gOTg0Olx0c3RhdGljIHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpcbiA5ODU6XHRjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxuIDk4NjpcdHtcbiA5ODc6XHRcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXI7XG4gOTg4Olx0XHRpbnQgZXJyO1xuIDk4OTpcdFxuIDk5MDpcdCNpZm5kZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLXG4gOTkxOlx0XHRpZiAoY2RhW0NUQV9NQVJLXSB8fCBjZGFbQ1RBX01BUktfTUFTS10pXG4gOTkyOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcbiA5OTM6XHQjZW5kaWZcbiA5OTQ6XHRcbiA5OTU6XHRcdGZpbHRlciA9IGt6YWxsb2Nfb2JqKCpmaWx0ZXIpO1xuIDk5NjpcdFx0aWYgKGZpbHRlciA9PSBOVUxMKVxuIDk5NzpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiA5OTg6XHRcbiA5OTk6XHRcdGZpbHRlci1cdTAwM2VmYW1pbHkgPSBmYW1pbHk7XG4xMDAwOlx0XG4xMDAxOlx0XHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX21hcmsoXHUwMDI2ZmlsdGVyLVx1MDAzZW1hcmssIGNkYSk7XG4xMDAyOlx0XHRpZiAoZXJyKVxuMTAwMzpcdFx0XHRnb3RvIGVycl9maWx0ZXI7XG4xMDA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDQ2CgkJCQkJCQlvdXRwdXQ6IDE5OAoJCQkJCQkJdGhvdWdodHM6IDUwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIENvbm50cmFjayBOZXRsaW5rIEZpbHRlcmluZyBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBib2lscyBkb3duIHRvIGEgY2xhc3NpYyBsb2dpY2FsIGVycm9yOiB0aGUgYXV0aG9yIHdhcyB1c2luZyBgIWlwdjZfYWRkcl9jbXAoKWAgd2hlbiB0aGV5ICp0aG91Z2h0KiB0aGV5IHdlcmUgY2hlY2tpbmcgZm9yIGluZXF1YWxpdHksIGJ1dCBgaXB2Nl9hZGRyX2NtcGAgYWN0dWFsbHkgcmV0dXJucyAwIHdoZW4gdGhlIGFkZHJlc3NlcyBtYXRjaC4gRWZmZWN0aXZlbHksIHRoZXkgaW52ZXJ0ZWQgdGhlIElQdjYgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZmlsdGVyIGNvbmRpdGlvbiBpbiB0aGUgY29ubnRyYWNrIG5ldGxpbmsgZHVtcGluZyBwcm9jZXNzLiBBIHNpbXBsZSBvdmVyc2lnaHQsIGJ1dCBpdCBoYXMgdG8gYmUgZml4ZWQuIFRoZSBmaXggaXMgYSBzdHJhaWdodCBzd2FwLCB1c2luZyBgIWlwdjZfYWRkcl9lcXVhbCgpYCB3aGljaCBjb3JyZWN0bHkgc2lnbmFscyBlcXVhbGl0eSB3aXRoIGEgbm9uLXplcm8gdmFsdWUuCgpNeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGZpeCBpbnRyb2R1Y2VzIGFueSBuZXcgbWVtb3J5IGlzc3Vlcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcHJvYmxlbXMgd2l0aCBLTVNBTi4KCkZpcnN0LCBJIG5lZWQgdG8gY2hlY2s6CiogICBEaWQgdGhpcyBpbnZvbHZlIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY3JlYXRlIGFueSBuZXcgbWVtb3J5IGJ1ZmZlcnM/IE5vLiBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAgdXNlcyBga3phbGxvY19vYmooKmZpbHRlcilgLCBzbyB0aGF0JiMzOTtzIGFsbCBoYW5kbGVkLgoqICAgQXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGJlaW5nIHJlYWQgb3IgY29waWVkPyBOb3QgaW4gdGhpcyBjYXNlLiBUaGUgY29ubnRyYWNrIHR1cGxlIChgY3RfdHVwbGVgKSBpcyBjb21pbmcgZnJvbSBhbiBlc3RhYmxpc2hlZCBgc3RydWN0IG5mX2Nvbm5gLCB3aGljaCBzaG91bGQgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCiogICBDb3VsZCB0aGlzIGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgbGVhayB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlPyBBYnNvbHV0ZWx5IG5vdC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBmaXguCgpTbywgaXQmIzM5O3MgYSB2ZXJ5IHRhcmdldGVkIGNoYW5nZS4gTm8gbmV3IG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIGp1c3QgYSBjb3JyZWN0aW9uIG9mIGEgY29tcGFyaXNvbiBvcGVyYXRvci4gSXQmIzM5O3MgYSBjbGVhbiBmaXggd2l0aCBubyBleHBvc2VkIG1lbW9yeSByaXNrcy4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWxsIHRob3NlIGNyaXRlcmlhIHRvIGJlIGNlcnRhaW46CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG9zc2libHkgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGRhdGE/IE5vLCBub3RoaW5nIG5ldyBpcyBiZWluZyBzZW50LgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLCB0aGUgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24gYXJlIGluaXRpYWxpemVkLiBgZmlsdGVyX3R1cGxlYCBpcyB0aGUgYGt6YWxsb2NgJiMzOTtkIGZpbHRlciBhbmQgYGN0X3R1cGxlYCBpcyBpbml0aWFsaXplZC4KMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCB3aXRoIHRoZSByaXNrIG9mIGxhdGVyIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOby4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgbWlnaHQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBkZWZpbml0ZWx5IGJlIGBmYWxzZWAuCgoqKktNU0FOIFJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGludmVydGVkIGxvZ2ljYWwgY2hlY2sgaW4gSVB2NiBjb25udHJhY2sgbmV0bGluayBmaWx0ZXJpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIGluY29ycmVjdGx5IHVzZWQgYCFpcHY2X2FkZHJfY21wKClgIHdoZW4gYCFpcHY2X2FkZHJfZXF1YWwoKWAgc2hvdWxkIGhhdmUgYmVlbiB1c2VkLiBUaGlzIHBhdGNoIGZpeGVzIGl0LiBLTVNBTiBpcyAqbm90KiBuZWVkZWQgYmVjYXVzZSB0aGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuIFRoZXJlJiMzOTtzIG5vIG5ldyBhbGxvY2F0aW9uIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYGN0X3R1cGxlYCBhbmQgdGhlIGBmaWx0ZXJfdHVwbGVgIGFyZSBpbml0aWFsaXplZCBhbmQgdGhlcmVmb3JlIGFsbCB0aGUgcmVsZXZhbnQgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZC4KCk9rYXksIGxldCYjMzk7cyBjYWxsIHRoaXMgYHNldC1yZXN1bHRzYC4gSSYjMzk7bSBjb25maWRlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBidWcgaW4gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKWAgd2hlcmUgYCFpcHY2X2FkZHJfY21wKClgICh3aGljaCByZXR1cm5zIDAgb24gbWF0Y2gpIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgYCFpcHY2X2FkZHJfZXF1YWwoKWAgKHdoaWNoIHJldHVybnMgdHJ1ZSBvbiBtYXRjaCksIGNhdXNpbmcgSVB2NiBhZGRyZXNzIGZpbHRlcmluZyBkdXJpbmcgY29ubnRyYWNrIG5ldGxpbmsgZHVtcGluZyB0byByZWplY3QgbWF0Y2hlcyBhbmQgYWNjZXB0IG1pc21hdGNoZXMuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBvbmx5IGEgYm9vbGVhbiBlcXVhbGl0eSBjaGVjayBiZXR3ZWVuIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBJUHY2IGFkZHJlc3NlcyBpbiBjb25udHJhY2sgdHVwbGVzICh0aGUgZmlsdGVyIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgIGFuZCB0aGUgY29ubnRyYWNrIHR1cGxlIGlzIHBvcHVsYXRlZCB1cG9uIGNvbm5lY3Rpb24gdHJhY2tpbmcpLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWZmZWN0ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBidWcgaW4gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKWAgd2hlcmUgYCFpcHY2X2FkZHJfY21wKClgICh3aGljaCByZXR1cm5zIDAgb24gbWF0Y2gpIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgYCFpcHY2X2FkZHJfZXF1YWwoKWAgKHdoaWNoIHJldHVybnMgdHJ1ZSBvbiBtYXRjaCksIGNhdXNpbmcgSVB2NiBhZGRyZXNzIGZpbHRlcmluZyBkdXJpbmcgY29ubnRyYWNrIG5ldGxpbmsgZHVtcGluZyB0byByZWplY3QgbWF0Y2hlcyBhbmQgYWNjZXB0IG1pc21hdGNoZXMuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBvbmx5IGEgYm9vbGVhbiBlcXVhbGl0eSBjaGVjayBiZXR3ZWVuIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBJUHY2IGFkZHJlc3NlcyBpbiBjb25udHJhY2sgdHVwbGVzICh0aGUgZmlsdGVyIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgIGFuZCB0aGUgY29ubnRyYWNrIHR1cGxlIGlzIHBvcHVsYXRlZCB1cG9uIGNvbm5lY3Rpb24gdHJhY2tpbmcpLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWZmZWN0ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6MDkuNDc0NDAxODg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczMzIwNzMxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlXCIsXG4gICAgXCJjdG5ldGxpbmtfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJjdG5ldGxpbmtfZHVtcF90YWJsZVwiLFxuICAgIFwiY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFja1wiLFxuICAgIFwiY3RuZXRsaW5rX2dldF9jb25udHJhY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBidWcgaW4gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKWAgd2hlcmUgYCFpcHY2X2FkZHJfY21wKClgICh3aGljaCByZXR1cm5zIDAgb24gbWF0Y2gpIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgYCFpcHY2X2FkZHJfZXF1YWwoKWAgKHdoaWNoIHJldHVybnMgdHJ1ZSBvbiBtYXRjaCksIGNhdXNpbmcgSVB2NiBhZGRyZXNzIGZpbHRlcmluZyBkdXJpbmcgY29ubnRyYWNrIG5ldGxpbmsgZHVtcGluZyB0byByZWplY3QgbWF0Y2hlcyBhbmQgYWNjZXB0IG1pc21hdGNoZXMuIFxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIG9ubHkgYSBib29sZWFuIGVxdWFsaXR5IGNoZWNrIGJldHdlZW4gZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIElQdjYgYWRkcmVzc2VzIGluIGNvbm50cmFjayB0dXBsZXMgKHRoZSBmaWx0ZXIgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAgYW5kIHRoZSBjb25udHJhY2sgdHVwbGUgaXMgcG9wdWxhdGVkIHVwb24gY29ubmVjdGlvbiB0cmFja2luZykuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhZmZlY3RlZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYm9vbGVhbiBpbnZlcnRlZCBsb2dpYyBidWcgaW4gY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZSgpIHdoZW4gbWF0Y2hpbmcgSVB2NiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBieSByZXBsYWNpbmcgIWlwdjZfYWRkcl9jbXAoKSB3aXRoICFpcHY2X2FkZHJfZXF1YWwoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBsb2dpYyBpbiB0aGUgTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBzdWJzeXN0ZW0sIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNDowOS40NzQ0MTM0NjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDI1OTU5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYzEyNjA0ZjY1MGM5NzczYTQ2OWUyMWUyOWVkNGE2NGY3NDc3MzZkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTc6MTQ6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuaW5kZXggNTc5YWRhMDYzYjFiYi4uZWY0ODM2OTk2NTliZiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcXG5AQCAtMTA5OCwxMyArMTA5OCwxMyBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLFxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuIFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhaXB2Nl9hZGRyX2NtcChcXHUwMDI2ZmlsdGVyX3R1cGxlLVxcdTAwM2VzcmMudTMuaW42LFxcbi1cXHRcXHRcXHRcXHQgICBcXHUwMDI2Y3RfdHVwbGUtXFx1MDAzZXNyYy51My5pbjYpKVxcbitcXHRcXHQgICAgIWlwdjZfYWRkcl9lcXVhbChcXHUwMDI2ZmlsdGVyX3R1cGxlLVxcdTAwM2VzcmMudTMuaW42LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjdF90dXBsZS1cXHUwMDNlc3JjLnUzLmluNikpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfRFNUKSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICFpcHY2X2FkZHJfY21wKFxcdTAwMjZmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51My5pbjYsXFxuLVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZjdF90dXBsZS1cXHUwMDNlZHN0LnUzLmluNikpXFxuK1xcdFxcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51My5pbjYsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN0X3R1cGxlLVxcdTAwM2Vkc3QudTMuaW42KSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjEwLjgxNzY0MDA1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzI5MzkyODMzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlXCIsXG4gICAgXCJjdG5ldGxpbmtfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJjdG5ldGxpbmtfZHVtcF90YWJsZVwiLFxuICAgIFwiY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFja1wiLFxuICAgIFwiY3RuZXRsaW5rX2dldF9jb25udHJhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJvb2xlYW4gaW52ZXJ0ZWQgbG9naWMgYnVnIGluIGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKSB3aGVuIG1hdGNoaW5nIElQdjYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYnkgcmVwbGFjaW5nICFpcHY2X2FkZHJfY21wKCkgd2l0aCAhaXB2Nl9hZGRyX2VxdWFsKCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgbG9naWMgaW4gdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgc3Vic3lzdGVtLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYzEyNjA0ZjY1MGM5NzczYTQ2OWUyMWUyOWVkNGE2NGY3NDc3MzZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNzoxNDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuaW5kZXggNTc5YWRhMDYzYjFiYi4uZWY0ODM2OTk2NTliZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5AQCAtMTA5OCwxMyArMTA5OCwxMyBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLFxuIFx0XHRicmVhaztcbiBcdGNhc2UgTkZQUk9UT19JUFY2OlxuIFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWlwdjZfYWRkcl9jbXAoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pbjYsXG4tXHRcdFx0XHQgICBcdTAwMjZjdF90dXBsZS1cdTAwM2VzcmMudTMuaW42KSlcbitcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pbjYsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmN0X3R1cGxlLVx1MDAzZXNyYy51My5pbjYpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX0RTVCkpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWlwdjZfYWRkcl9jbXAoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pbjYsXG4tXHRcdFx0XHQgICBcdTAwMjZjdF90dXBsZS1cdTAwM2Vkc3QudTMuaW42KSlcbitcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pbjYsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmN0X3R1cGxlLVx1MDAzZWRzdC51My5pbjYpKVxuIFx0XHRcdHJldHVybiAwO1xuIFx0XHRicmVhaztcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjEwLjgxNzY0MTQwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwNTUxMzg1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29ubnRyYWNrIE5ldGxpbmsgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY2AgYXJvdW5kIHRoZSBsaW5lIG51bWJlcnMgc3BlY2lmaWVkIGluIHRoZSBkaWZmLiBJIHNob3VsZCBwcm9iYWJseSBmaXJlIHVwIGEgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHNlc3Npb24gdG8gZ2V0IHRoZSBmdWxsIGNvbnRleHQgYXJvdW5kIGxpbmUgMTA5OC4gQmFzZWQgb24gdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2Ugd2UncmUgY2hhbmdpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSVB2NiBhZGRyZXNzIGNvbXBhcmlzb24gd2l0aGluIHRoZSBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgY29kZSBpcyB1c2luZyBgaXB2Nl9hZGRyX2NtcGAgYW5kIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aG9zZSBjb21wYXJpc29ucyB0byBgaXB2Nl9hZGRyX2VxdWFsYC4gVGhpcyBzdWdnZXN0cyBhIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBjaGFuZ2UgaW4gaG93IHdlIGRldGVybWluZSBpZiB0d28gSVB2NiBhZGRyZXNzZXMgbWF0Y2ggd2hlbiBmaWx0ZXJpbmcgY29ubnRyYWNrIGVudHJpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIHNlbWFudGljIGRpZmZlcmVuY2UgaXMgYW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHN3YXBwaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBjb250ZXh0LiBUaGUgY29udGV4dCBpcyBgTkZQUk9UT19JUFY2YCBzbyB0aGlzIGlzIGFsbCBhYm91dCBJUHY2LiBMZXQncyBzZWUgaWYgdGhlIGNvbW1pdCBtZXNzYWdlIHByb3ZpZGVzIG1vcmUgY29udGV4dCB0byB3aGF0IHRoZSBhdXRob3Igd2FzIGFpbWluZyB0byBkbyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU4LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6MTcuODcyNzgyNTYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdFxcdGlmIChmaWx0ZXIpXFxuMTA4MTpcXHRcXHRcXHRjYi1cXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcXG4xMDgyOlxcdFxcdHJldHVybiAwO1xcbjEwODM6XFx0fVxcbjEwODQ6XFx0XFxuMTA4NTpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLFxcbjEwODY6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqY3RfdHVwbGUsXFxuMTA4NzpcXHRcXHRcXHRcXHRcXHRcXHR1X2ludDMyX3QgZmxhZ3MsIGludCBmYW1pbHkpXFxuMTA4ODpcXHR7XFxuMTA4OTpcXHRcXHRzd2l0Y2ggKGZhbWlseSkge1xcbjEwOTA6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuMTA5MTpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9TUkMpKSBcXHUwMDI2XFx1MDAyNlxcbjEwOTI6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUzLmlwICE9IGN0X3R1cGxlLVxcdTAwM2VzcmMudTMuaXApXFxuMTA5MzpcXHRcXHRcXHRcXHRyZXR1cm4gIDA7XFxuMTA5NDpcXHRcXG4xMDk1OlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX0RTVCkpIFxcdTAwMjZcXHUwMDI2XFxuMTA5NjpcXHRcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2Vkc3QudTMuaXAgIT0gY3RfdHVwbGUtXFx1MDAzZWRzdC51My5pcClcXG4xMDk3OlxcdFxcdFxcdFxcdHJldHVybiAgMDtcXG4xMDk4OlxcdFxcdFxcdGJyZWFrO1xcbjEwOTk6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuMTEwMDpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9TUkMpKSBcXHUwMDI2XFx1MDAyNlxcbjExMDE6XFx0XFx0XFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUzLmluNixcXG4xMTAyOlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN0X3R1cGxlLVxcdTAwM2VzcmMudTMuaW42KSlcXG4xMTAzOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMDQ6XFx0XFxuMTEwNTpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcXHUwMDI2XFx1MDAyNlxcbjExMDY6XFx0XFx0XFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUzLmluNixcXG4xMTA3OlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN0X3R1cGxlLVxcdTAwM2Vkc3QudTMuaW42KSlcXG4xMTA4OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMDk6XFx0XFx0XFx0YnJlYWs7XFxuMTExMDpcXHRcXHR9XFxuMTExMTpcXHRcXG4xMTEyOlxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX05VTSkpIFxcdTAwMjZcXHUwMDI2XFxuMTExMzpcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2Vkc3QucHJvdG9udW0gIT0gY3RfdHVwbGUtXFx1MDAzZWRzdC5wcm90b251bSlcXG4xMTE0OlxcdFxcdFxcdHJldHVybiAwO1xcbjExMTU6XFx0XFxuMTExNjpcXHRcXHRzd2l0Y2ggKGN0X3R1cGxlLVxcdTAwM2Vkc3QucHJvdG9udW0pIHtcXG4xMTE3OlxcdFxcdGNhc2UgSVBQUk9UT19UQ1A6XFxuMTExODpcXHRcXHRjYXNlIElQUFJPVE9fVURQOlxcbjExMTk6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fU1JDX1BPUlQpKSBcXHUwMDI2XFx1MDAyNlxcbjExMjA6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUudGNwLnBvcnQgIT0gY3RfdHVwbGUtXFx1MDAzZXNyYy51LnRjcC5wb3J0KVxcbjExMjE6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0RTVF9QT1JUKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTI0OlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51LnRjcC5wb3J0ICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QudS50Y3AucG9ydClcXG4xMTI1OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMjY6XFx0XFx0XFx0YnJlYWs7XFxuMTEyNzpcXHRcXHRjYXNlIElQUFJPVE9fSUNNUDpcXG4xMTI4OlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBfVFlQRSkpIFxcdTAwMjZcXHUwMDI2XFxuMTEyOTpcXHRcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2Vkc3QudS5pY21wLnR5cGUgIT0gY3RfdHVwbGUtXFx1MDAzZWRzdC51LmljbXAudHlwZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6MTcuODcyOTMyOTAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg4NjU4NjQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBDcml0aWNhbCBMb2dpYyBFcnJvciBhbmQgQXNzZXNzaW5nIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGZvY3VzZXMgb24gdGhlIGBpcHY2X2FkZHJfY21wYCBhbmQgYGlwdjZfYWRkcl9lcXVhbGAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlaXIgcmV0dXJuIHZhbHVlcy4gSXQgc2VlbXMgdGhlcmUgd2FzIGEgY2xhc3NpYyBsb2dpYyBlcnJvcjogYGlwdjZfYWRkcl9jbXBgIHJldHVybmluZyAwIGZvciBlcXVhbGl0eSwgd2hpY2ggd2hlbiBuZWdhdGVkIChgIWlwdjZfYWRkcl9jbXBgKSBjYXVzZWQgYSByZXR1cm4gb2YgMCAobm8gbWF0Y2gpICp3aGVuIHRoZSBhZGRyZXNzZXMgd2VyZSBhY3R1YWxseSBFUVVBTCouIFRoYXQncyBhIHRleHRib29rIGludmVyc2lvbiB0aGF0IHdvdWxkIGRlZmluaXRlbHkgbGVhZCB0byBpbmNvcnJlY3QgZmlsdGVyaW5nIGluIG15IG5ldGxpbmsgY29kZSwgcGFydGljdWxhcmx5IHdoZXJlIEknbSBoYW5kbGluZyBJUHY2IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIGluIGBjdG5ldGxpbmtgLiBUaGUgZml4LCB0aGFua2Z1bGx5LCBhcHBlYXJzIHRvIHVzZSBgaXB2Nl9hZGRyX2VxdWFsYCwgd2hpY2ggcmV0dXJucyB0aGUgbW9yZSBpbnR1aXRpdmUgdHJ1ZS9mYWxzZSBmb3IgZXF1YWxpdHksIHNvIGBpZiAoIWlwdjZfYWRkcl9lcXVhbCguLi4pKWAgbm93IGNvcnJlY3RseSByZXR1cm5zIDAgKG5vIG1hdGNoKSB3aGVuIHRoZSBhZGRyZXNzZXMgYXJlICpub3QqIGVxdWFsLiBUaGlzIHNob3VsZCBmaXggdGhlIGludmVydGVkIG1hdGNoIGlzc3VlcyBJIHdhcyBzZWVpbmcuXG5cbk5vdywgbGV0J3MgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIGZ1enppbmcgdGhpcy4gVGhlIGNydWNpYWwgYXNwZWN0IGlzICpyZWFjaGFiaWxpdHkqIGFuZCAqZnV6emFiaWxpdHkqLiBGcm9tIGEgcmVhY2hhYmlsaXR5IHBlcnNwZWN0aXZlLCBgbmV0bGluayBjdG5ldGxpbmtgIGlzIHRyaXZpYWxseSBhY2Nlc3NpYmxlLiBJdOKAmXMgYSBuZXRsaW5rIHNvY2tldCwgd2hpY2ggbWVhbnMgaXQncyBhdmFpbGFibGUgZnJvbSBhIG5vbi1wcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlLCBvciBhcyByb290LCB0aHJvdWdoIGBBRl9ORVRMSU5LYCBhbmQgYE5FVExJTktfTkVURklMVEVSYCBzb2NrZXRzLiBUaGF0J3MgYSBnb29kIHN0YXJ0LlxuXG5SZWdhcmRpbmcgZnV6emFiaWxpdHksIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBUaGUgY29kZSBkaXJlY3RseSBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCB3aGljaCBpcyBhdCB0aGUgY29yZSBvZiBuZXRmaWx0ZXIsIGEgY3JpdGljYWwgcGFydCBvZiBuZXR3b3JraW5nLiBTbywgdGhlIGxpa2VsaWhvb2Qgb2YgZmluZGluZyB2dWxuZXJhYmlsaXRpZXMgaGVyZSBpcyBoaWdoLiBgV29ydGhGdXp6aW5nID0gdHJ1ZS5gXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBjb25maXJtIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpcyBjb2RlIHRvIGJlIGNvbXBpbGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY3NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjIyLjc1OTUyMTQ3NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg4NDkyODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19uZXRsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSykgKz0gbmZfY29ubnRyYWNrLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfTkZfQ1RfTkVUTElOSykgKz0gbmZfY29ubnRyYWNrX25ldGxpbmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfVElNRU9VVCkgKz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9Mzg3MT1zdGF0aWMgaW50IF9faW5pdCBjdG5ldGxpbmtfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM4OTQtI2lmZGVmIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM4OTU6XFx0Lyogc2V0dXAgaW50ZXJhY3Rpb24gYmV0d2VlbiBuZl9xdWV1ZSBhbmQgbmZfY29ubnRyYWNrX25ldGxpbmsuICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM4OTYtXFx0UkNVX0lOSVRfUE9JTlRFUihuZm5sX2N0X2hvb2ssIFxcdTAwMjZjdG5ldGxpbmtfZ2x1ZV9ob29rKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfaW50ZXJuYWxzLmgtOC1cXG5uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oOjk6LyogbmZfY29ubnRyYWNrX25ldGxpbmsuYzogYXBwbGllZCBvbiB0dXBsZSBmaWx0ZXJzICovXFxubmV0L25ldGZpbHRlci9uZl9pbnRlcm5hbHMuaC0xMC0jZGVmaW5lIENUQV9GSUxURVJfRl9DVEFfSVBfU1JDXFx0XFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6MjQuMDQ4MDIwMjY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4OTEyNDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkNoZWNraW5nIGBDT05GSUdfTkZfQ1RfTkVUTElOS2AgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbmV0bGluayBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIEknbGwgbmVlZCB0byBjaGVjayBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBkaXJlY3RseSBmb3IgdGhlIGBDT05GSUdfTkZfQ1RfTkVUTElOS2Agb3B0aW9uLiBLbm93aW5nIHRoaXMgaXMgYSBjb3JlIG9wdGlvbiwgSSdsbCB0aGVuIHJldmlldyBpdCdzIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgZW5hYmxlZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gb3RoZXIgbmV0ZmlsdGVyIGZlYXR1cmVzLiBUaGlzIHdpbGwgcHJvdmlkZSBjb250ZXh0IGZvciBpdHMgZnVuY3Rpb24gYW5kIGNvbmZpZ3VyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhpZ2hsaWdodCBhbnkgb3RoZXIgYXJlYXMgdGhhdCByZXF1aXJlIGNvbnNpZGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNDoyNi4zMzcxNDcyMjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNzA0MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NUX05FVExJTktcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzU1PWNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY2OmNvbmZpZyBORl9DVF9ORVRMSU5LXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM2Ny1cXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6MjYuMzg4NDIxOTg5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5NTEwMzU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM2Ni4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgc2VjdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgZGV0YWlscyBvbiBhIHNwZWNpZmljIG9wdGlvbiBvciBhIHJlbGF0ZWQgZ3JvdXAgb2Ygb3B0aW9ucywgYW5kIHRoaXMgZmlsZSBpcyB3aGVyZSB0aGF0IGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uIGlzIGhhbmRsZWQuIExldCdzIHNlZSB3aGF0J3MgYmVpbmcgZGVmaW5lZCB0aGVyZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIE5ldGZpbHRlci4gSSBob3BlIHRoZSBmb3JtYXR0aW5nIGlzIGNsZWFyLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgZWFzaWx5IHVuZGVyc3Rvb2QsIGFzIEtjb25maWcgZmlsZXMgY2FuIHNvbWV0aW1lcyBiZSBhIGJpdCBkZW5zZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6MjguNDgzNTI4MzA5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzYwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzYwOlxcdFxcdCAgb24gaG93IHJlc3RyaWN0aXZlIHlvdXIgcnVsZXNldCBpcy5cXG4gMzYxOlxcdFxcdCAgSWYgeW91IGFyZSB1c2luZyBhIHRmdHAgY2xpZW50IGJlaGluZCAtaiBTTkFUIG9yIC1qIE1BU1FVRVJBRElOR1xcbiAzNjI6XFx0XFx0ICB5b3Ugd2lsbCBuZWVkIHRoaXMuXFxuIDM2MzpcXHRcXG4gMzY0OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDM2NTpcXHRcXG4gMzY2OlxcdGNvbmZpZyBORl9DVF9ORVRMSU5LXFxuIDM2NzpcXHRcXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSdcXG4gMzY4OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAzNjk6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuIDM3MDpcXHRcXHRoZWxwXFxuIDM3MTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgYSBuZXRsaW5rLWJhc2VkIHVzZXJzcGFjZSBpbnRlcmZhY2VcXG4gMzcyOlxcdFxcbiAzNzM6XFx0Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxcbiAzNzQ6XFx0XFx0dHJpc3RhdGUgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgdHVuaW5nIHZpYSBOZXRsaW5rJ1xcbiAzNzU6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuIDM3NjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAzNzc6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfVElNRU9VVFxcbiAzNzg6XFx0XFx0aGVscFxcbiAzNzk6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dFxcbiAzODA6XFx0XFx0ICBmaW5lLWdyYWluIHR1bmluZy4gVGhpcyBhbGxvd3MgeW91IHRvIGF0dGFjaCBzcGVjaWZpYyB0aW1lb3V0XFxuIDM4MTpcXHRcXHQgIHBvbGljaWVzIHRvIGZsb3dzLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBnbG9iYWwgdGltZW91dCBwb2xpY3kuXFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgYE4nLlxcbiAzODQ6XFx0XFxuIDM4NTpcXHRjb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcXG4gMzg2OlxcdFxcdHRyaXN0YXRlICdDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluaydcXG4gMzg3OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAzODg6XFx0XFx0ZGVwZW5kcyBvbiBORl9DVF9ORVRMSU5LXFxuIDM4OTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjI4LjQ4MzYzMzAzOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODU4NTc2MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgTkZfQ1RfTkVUTElOSyBEZXBlbmRlbmN5KipcblxuUmlnaHQsIGxldCBtZSBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24gb3IgZGVwZW5kZW5jaWVzIGZvciBgTkZfQ1RfTkVUTElOS2AuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIEtjb25maWcgZmlsZSBpbiBgbmV0L25ldGZpbHRlci9gLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgc3Vycm91bmRpbmcgbGluZXMsIHNwZWNpZmljYWxseSwgdG8gc2VlIGhvdyBgTkZfQ1RfTkVUTElOS2AgaXMgaG9va2VkIGluIGFuZCB3aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIGl0cyBidWlsZCBzdGF0dXMuIExpa2VseSwgSSdtIGV4cGVjdGluZyB0byBsb29rIGZvciBhbiBlYXJsaWVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZW5hYmxlcyBpdCBvciBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gSSdtIGxvb2tpbmcgZm9yIHRoZSAnd2h5Jy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgxOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6MzAuMzQyMjEyODY5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51IFxcXCJDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgTkVURklMVEVSX0lOR1JFU1NcXG4gICA2OlxcdFxcdGJvb2wgXFxcIk5ldGZpbHRlciBpbmdyZXNzIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZWZhdWx0IHlcXG4gICA4OlxcdFxcdHNlbGVjdCBORVRfSU5HUkVTU1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBmcm9tIGluZ3Jlc3MgdXNpbmcgdGhlIE5ldGZpbHRlclxcbiAgMTE6XFx0XFx0ICBpbmZyYXN0cnVjdHVyZS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0Y29uZmlnIE5FVEZJTFRFUl9FR1JFU1NcXG4gIDE0OlxcdFxcdGJvb2wgXFxcIk5ldGZpbHRlciBlZ3Jlc3Mgc3VwcG9ydFxcXCJcXG4gIDE1OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9FR1JFU1NcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgYmVmb3JlIHRyYW5zbWlzc2lvbiB1c2luZyB0aGVcXG4gIDE5OlxcdFxcdCAgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgTkVURklMVEVSX1NLSVBfRUdSRVNTXFxuICAyMjpcXHRcXHRkZWZfYm9vbCBORVRGSUxURVJfRUdSRVNTIFxcdTAwMjZcXHUwMDI2IChORVRfQ0xTX0FDVCB8fCBJRkIpXFxuICAyMzpcXHRcXG4gIDI0OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS1xcbiAgMjU6XFx0XFx0Ym9vbFxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG4gIDI4OlxcdFxcdGJvb2xcXG4gIDI5OlxcdFxcbiAgMzA6XFx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQVJQXFxuICAzMTpcXHRcXHRib29sXFxuICAzMjpcXHRcXG4gIDMzOlxcdGNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcXG4gIDM0OlxcdFxcdGRlZl9ib29sIEJQRl9TWVNDQUxMXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXFxuICAzNzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGJhc2UgaG9vayBkdW1wIHN1cHBvcnRcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAgMzk6XFx0XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG4gIDQwOlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA0MzpcXHRcXHQgIHRvIGxpc3QgdGhlIGJhc2UgbmV0ZmlsdGVyIGhvb2tzIHZpYSBORk5FVExJTksuXFxuICA0NDpcXHRcXHQgIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVidWdnaW5nLlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORkFDQ1Qgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gIDQ5OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNTA6XFx0XFx0aGVscFxcbiAgNTE6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA1MjpcXHRcXHQgIGZvciBleHRlbmRlZCBhY2NvdW50aW5nIHZpYSBORk5FVExJTksuXFxuICA1MzpcXHRcXG4gIDU0OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbiAgNTU6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4gIDU2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICA1NzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDU4OlxcdFxcdGhlbHBcXG4gIDU5OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNjA6XFx0XFx0ICBmb3IgcXVldWVpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXFxuICA2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuICA2NDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDY1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNjY6XFx0XFx0aGVscFxcbiAgNjc6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA2ODpcXHRcXHQgIGZvciBsb2dnaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cXG4gIDY5OlxcdFxcbiAgNzA6XFx0XFx0ICBUaGlzIG9ic29sZXRlcyB0aGUgZXhpc3RpbmcgaXB0X1VMT0cgYW5kIGViZ191bG9nIG1lY2hhbmlzbXMsXFxuICA3MTpcXHRcXHQgIGFuZCBpcyBhbHNvIHNjaGVkdWxlZCB0byByZXBsYWNlIHRoZSBvbGQgc3lzbG9nLWJhc2VkIGlwdF9MT0dcXG4gIDcyOlxcdFxcdCAgYW5kIGlwNnRfTE9HIG1vZHVsZXMuXFxuICA3MzpcXHRcXG4gIDc0OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcXG4gIDc1OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgT1NGIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4gIDc2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICA3NzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDc4OlxcdFxcdGhlbHBcXG4gIDc5OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgODA6XFx0XFx0ICBmb3IgcGFzc2l2ZSBPUyBmaW5nZXJwcmludCB2aWEgTkZORVRMSU5LLlxcbiAgODE6XFx0XFxuICA4MjpcXHRjb25maWcgTkZfQ09OTlRSQUNLXFxuICA4MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4gIDg0OlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAgODU6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XFxuICA4NjpcXHRcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgSVBWNiAhPSBuXFxuICA4NzpcXHRcXHRoZWxwXFxuICA4ODpcXHRcXHQgIENvbm5lY3Rpb24gdHJhY2tpbmcga2VlcHMgYSByZWNvcmQgb2Ygd2hhdCBwYWNrZXRzIGhhdmUgcGFzc2VkXFxuICA4OTpcXHRcXHQgIHRocm91Z2ggeW91ciBtYWNoaW5lLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSByZWxhdGVkXFxuICA5MDpcXHRcXHQgIGludG8gY29ubmVjdGlvbnMuXFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdCAgVGhpcyBpcyByZXF1aXJlZCB0byBkbyBNYXNxdWVyYWRpbmcgb3Igb3RoZXIga2luZHMgb2YgTmV0d29ya1xcbiAgOTM6XFx0XFx0ICBBZGRyZXNzIFRyYW5zbGF0aW9uLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBlbmhhbmNlIHBhY2tldFxcbiAgOTQ6XFx0XFx0ICBmaWx0ZXJpbmcgKHNlZSBgQ29ubmVjdGlvbiBzdGF0ZSBtYXRjaCBzdXBwb3J0JyBiZWxvdykuXFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICA5NzpcXHRcXG4gIDk4OlxcdGNvbmZpZyBORl9MT0dfU1lTTE9HXFxuICA5OTpcXHRcXHR0cmlzdGF0ZSBcXFwiU3lzbG9nIHBhY2tldCBsb2dnaW5nXFxcIlxcbiAxMDA6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjMwLjM0MjMzMjk0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjMzNDM0OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gYE5GX0NUX05FVExJTktgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5GX0NUX05FVExJTktgIGhlcmUuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgaXQgZGVwZW5kcyBvbiBgSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSYCDigJMgcHJldHR5IHN0YW5kYXJkIHN0dWZmIGZvciBhbnkgbmV0d29yayBmaWx0ZXJpbmcgZmVhdHVyZS4gQW5kIG9mIGNvdXJzZSwgaXQncyBhbHNvIHRpZWQgdG8gYE5GX0NPTk5UUkFDS2AuIE1ha2VzIHNlbnNlOyBgY3RuZXRsaW5rYCBoYXMgdG8gd29yayB3aXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcuIEknbSBhc3N1bWluZyB0aGF0IGNvbm5lY3Rpb24gdHJhY2tpbmcgbXVzdCBiZSBlbmFibGVkLCBvciBhdCBsZWFzdCBiZSBhdmFpbGFibGUgaW4gdGhlIHNhbWUgbWVudSwgZm9yIHRoaXMgdG8gd29yay4gSXQgYWxzbyByZXF1aXJlcyBgSVBWNmAgaWYgd2UncmUgZGVhbGluZyB3aXRoIElQdjYgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmlsdGVyaW5nLCB3aGljaCBpcyBleHBlY3RlZC5cblxuTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gZmlndXJlIG91dCB3aGF0IHVzZXMgdGhpcyB0aGluZywgc28gbGV0J3MgY2hlY2sgY2FsbGVycyBvZiBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhpcyBtb2R1bGUgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZCBhbmQgaW4gd2hhdCBjb250ZXh0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZmxvdywgc28ga25vd2luZyB0aGUgY2FsbGVycyBvZiB0aGlzIGtleSBmdW5jdGlvbiBpcyBlc3NlbnRpYWwgdG8gZ3Jhc3BpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzEyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNDozMi41NzU3NzA5NjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjYzMTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEwNjY9c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwODQtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwODU6c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmZpbHRlcl90dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA4Ni1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpjdF90dXBsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMTU0PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgbmZfY29ubiAqY3QsIHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3NS1cXHRcXHR0dXBsZSA9IG5mX2N0X3R1cGxlKGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMTc2OlxcdFxcdGlmICghY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShcXHUwMDI2ZmlsdGVyLVxcdTAwM2VvcmlnLCB0dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGZpbHRlci1cXHUwMDNlb3JpZ19mbGFncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTgzLVxcdFxcdHR1cGxlID0gbmZfY3RfdHVwbGUoY3QsIElQX0NUX0RJUl9SRVBMWSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjExODQ6XFx0XFx0aWYgKCFjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKFxcdTAwMjZmaWx0ZXItXFx1MDAzZXJlcGx5LCB0dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE4NS1cXHRcXHRcXHRcXHRcXHRcXHQgIGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjMyLjYyODQzOTY1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzkyOTUxNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBtYXRjaGluZyBjb25uZWN0aW9uIHRyYWNraW5nIChjb25udHJhY2spIGVudHJpZXMgd2l0aGluIHRoZSBOZXRsaW5rIGZyYW1ld29yay4gSSdtIHRoaW5raW5nLCBcIldobydzIHVzaW5nIHRoaXM/XCIgVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyB3aWxsIGdpdmUgbWUgdmFsdWFibGUgaW5zaWdodCBpbnRvIHdoZXJlIHRoaXMgbWF0Y2hpbmcgbG9naWMgaXMgYmVpbmcgYXBwbGllZCBhbmQsIHBvdGVudGlhbGx5LCB0aGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgaW1wbGljYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAgaXMgaW52b2tlZC4gSSBjYW4ndCBqdXN0IGJsaW5kbHkgdHJhY2UgdGhlIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSB2YXJpb3VzIE5ldGxpbmsgbWVzc2FnZSB0eXBlcyBhbmQgZmlsdGVycyB0aGF0IGNvdWxkIHRyaWdnZXIgdGhpcyBtYXRjaGluZy4gRm9yIGV4YW1wbGUsIGFyZSB3ZSBkZWFsaW5nIHdpdGggcmVhZHMvcXVlcmllcyBvZiBjb25udHJhY2sgZW50cmllcyAobGlrZSBmcm9tIGBuZmN0YCB1c2Vyc3BhY2UgdG9vbHMpLCBtb2RpZmljYXRpb25zIChlLmcuLCBwb2xpY3kgdXBkYXRlcyksIG9yIHBlcmhhcHMgZXZlbiBjb25uZWN0aW9uIG5vdGlmaWNhdGlvbnM/XG5cbkkgbmVlZCB0byBjb25zaWRlciB0aGUgZGlmZmVyZW50IE5ldGxpbmsgZmFtaWxpZXMgYW5kIHRoZWlyIG1lc3NhZ2UgdHlwZXMuIFRoaXMgY291bGQgYmUgaW4gdGhlIGNvbnRleHQgb2YgbmZuZXRsaW5rX2N0aGVscGVyIG9yIG5mbmV0bGlua19jb25udHJhY2sgaXRzZWxmLiBJIGFsc28gbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgZGlmZmVyZW50IHBvdGVudGlhbCBmaWx0ZXJpbmcgY3JpdGVyaWEgdGhhdCBjb3VsZCBiZSB1c2VkLiBXZSBrbm93IHRoYXQgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hgIGlzIGludm9sdmVkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgZmlsdGVyIHN0cnVjdHVyZSBsb29rcyBsaWtlIGFuZCB3aGljaCBOZXRsaW5rIGF0dHJpYnV0ZXMgYXJlIGJlaW5nIGV2YWx1YXRlZC4gSSBoYXZlIHRvIGxvb2sgaW50byB0aGUgZmlsdGVyaW5nIGxvZ2ljLCB1bmRlcnN0YW5kIGhvdyBzcGVjaWZpYyBhdHRyaWJ1dGVzIG9mIGEgY29ubnRyYWNrIGVudHJ5IChsaWtlIHNvdXJjZS9kZXN0aW5hdGlvbiBJUC9wb3J0LCBwcm90b2NvbCwgc3RhdGUsIGV0Yy4pIGFyZSBjb21wYXJlZCBhZ2FpbnN0IHRoZSBwcm92aWRlZCBmaWx0ZXIgY3JpdGVyaWEuXG5cbkkgYWxzbyBoYXZlIHRvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBjb25udHJhY2sgdGFibGUgZHVyaW5nIHRoZXNlIG1hdGNoaW5nIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBlc3BlY2lhbGx5IHdpdGggbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudHMgYW5kIGhvdyB0aGV5IGFmZmVjdCB0aGUgbmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayB1c2FnZSB3aXRoaW4gdGhlIGNhbGwgcGF0aCBvZiBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAuIEknbSBnb2luZyB0byBxdWlja2x5IGdldCBpbnRvIHRoZSBjYWxsZXJzIHRvIHNlZSBpZiB0aGV5IGFyZSBkb2luZyBhbnl0aGluZyBpbiB0aGUgd3Jvbmcgb3JkZXIgb3Igd2l0aG91dCB0aGUgcHJvcGVyIHByb3RlY3Rpb24uXG5cblVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgY29ubnRyYWNrIGFuZCBuZXRmaWx0ZXIgcHJvY2Vzc2luZy4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBrZXkgdG8gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjM3LjAyMTM5Mzg4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExMTk1NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaFxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMDg1PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpmaWx0ZXJfdHVwbGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE1My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTE1NDpzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2goc3RydWN0IG5mX2Nvbm4gKmN0LCB2b2lkICpkYXRhKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTU1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMjEzPWN0bmV0bGlua19kdW1wX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMjY0LVxcdFxcdFxcdH1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTI2NTpcXHRcXHRcXHRpZiAoIWN0bmV0bGlua19maWx0ZXJfbWF0Y2goY3QsIGNiLVxcdTAwM2VkYXRhKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTI2Ni1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNTg1PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZsdXNoX2l0ZXJhdGUoc3RydWN0IG5mX2Nvbm4gKmN0LCB2b2lkICpkYXRhKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNTg2LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTU4NzpcXHRyZXR1cm4gY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaChjdCwgZGF0YSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE1ODgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNDozNy4wNzI1MTgyMDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwNTk1NTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBOZXRmaWx0ZXIgQ29ubmVjdGlvbiBUcmFja2luZyBOZXRsaW5rIEludGVyYWN0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGFibGUgaXMgYWNjZXNzZWQgYW5kIG1hbmFnZWQgdmlhIG5ldGxpbmsuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aHMgb2YgZnVuY3Rpb25zIGxpa2UgYGN0bmV0bGlua19kdW1wX3RhYmxlYCBhbmQgYGN0bmV0bGlua19mbHVzaF9pdGVyYXRlYC4gVGhlc2UgYXJlIGtleSBlbnRyeSBwb2ludHMsIHNvIHRoZXkncmUgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZm9yIGZpZ3VyaW5nIG91dCBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIHRoZSBjb25udHJhY2sgZGF0YSBzdHJ1Y3R1cmVzLiBJJ20gYWxzbyBnb2luZyB0byBoYXZlIHRvIGZvbGxvdyB0aGUgY2FsbHMgZnJvbSB0aG9zZSBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGRhdGEgaXMgZHVtcGVkIHRvIHVzZXIgc3BhY2UsIGFuZCBob3cgZmx1c2hpbmcgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIG92ZXIgbmV0bGluay4gTGV0J3Mgc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNDozOS4wNzg0NzU5OTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzY2ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0bmV0bGlua19kdW1wX3RhYmxlfGN0bmV0bGlua19mbHVzaF9pdGVyYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMjEyPXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTIxMzpjdG5ldGxpbmtfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEyMTQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE1NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGN0X25sYV9wb2xpY3lbQ1RBX01BWCsxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNTg0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxNTg1OnN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZsdXNoX2l0ZXJhdGUoc3RydWN0IG5mX2Nvbm4gKmN0LCB2b2lkICpkYXRhKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNTg2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNTkwPXN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTYwOC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTYwOTpcXHRuZl9jdF9pdGVyYXRlX2NsZWFudXBfbmV0KGN0bmV0bGlua19mbHVzaF9pdGVyYXRlLCBcXHUwMDI2aXRlcik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE2MTAtXFx0a2ZyZWUoZmlsdGVyKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xNjY4PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2dldF9jb25udHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjgyLVxcdFxcdFxcdC5zdGFydCA9IGN0bmV0bGlua19zdGFydCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MTY4MzpcXHRcXHRcXHQuZHVtcCA9IGN0bmV0bGlua19kdW1wX3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xNjg0LVxcdFxcdFxcdC5kb25lID0gY3RuZXRsaW5rX2RvbmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjM5LjEyOTI0ODM5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTQ3OTQxOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbm50cmFjayBOZXRsaW5rIE1vZHVsZSBmb3IgRnV6emluZyoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEkndmUgZ290LiBJJ20gZm9jdXNpbmcgb24gdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBjb25udHJhY2ssIGFuZCBteSBwcmltYXJ5IHRhcmdldHMgYXJlIHRoZXNlIGZ1bmN0aW9uczogYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVgLCBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaGAsIGBjdG5ldGxpbmtfZHVtcF90YWJsZWAsIGBjdG5ldGxpbmtfZmx1c2hfY29ubnRyYWNrYCwgYW5kIGBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFja2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBjdG5ldGxpbmtfZmx1c2hfY29ubnRyYWNrYCBpcyBhY3R1YWxseSBqdXN0IGEgd3JhcHBlciBmb3IgZGVsZXRpb24sIG9yIHBlcmhhcHMgYGN0bmV0bGlua19kZWxfY29ubnRyYWNrYC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0LCBidXQgdGhlIGltcG9ydGFudCB0aGluZyBpcyB0aG9zZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgSSB3YW50IHRvIHN0cmVzcy5cblxuSSd2ZSBhbHNvIHZlcmlmaWVkIHRoYXQgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVgIGlzIGluZGVlZCBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24uIFRoYXQncyBnb29kIHRvIGtub3cgZm9yIHRoZSBmdXp6aW5nIHNldHVwLiBJIGNhbiBwcm9jZWVkIGtub3dpbmcgdGhlIHNjb3BlLlxuXG5NeSBiYXNlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIGZ1enppbmcgZWZmb3J0IHJlcXVpcmUgYE5GX0NPTk5UUkFDS2AsIGBORl9DVF9ORVRMSU5LYCwgYElQVjZgLCBhbmQgYE5FVEZJTFRFUmAgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgYWxsIHByZXNlbnQgaW4gdGhlIGVudmlyb25tZW50IEknbSBmdXp6aW5nLlxuXG5NeSBhbmFseXNpcyBoYXMgbGVkIG1lIHRvIGJlbGlldmUgdGhhdCB0aGlzIG1vZHVsZSBpcyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgcG90ZW50aWFsIGV4cG9zdXJlIHN1cmZhY2UuIFNvLCBJIGFtIG1hcmtpbmcgdGhpcyBmdXp6IHRhcmdldCBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgYW5kIEkgYW0gc2V0dGluZyB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhY2NvcmRpbmdseS4gSSBjYW4ndCBiZSBtb3JlIGNvbmNpc2UgdGhhbiB0aGF0LCBzbyBJIHdpbGwgbm93IGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc5OCwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6NDMuNjc3MTkyNzI0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk3MjY5OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiTkVURklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZVwiLFxuICAgIFwiY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiY3RuZXRsaW5rX2R1bXBfdGFibGVcIixcbiAgICBcImN0bmV0bGlua19mbHVzaF9jb25udHJhY2tcIixcbiAgICBcImN0bmV0bGlua19nZXRfY29ubnRyYWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBib29sZWFuIGludmVydGVkIGxvZ2ljIGJ1ZyBpbiBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKCkgd2hlbiBtYXRjaGluZyBJUHY2IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIGJ5IHJlcGxhY2luZyAhaXB2Nl9hZGRyX2NtcCgpIHdpdGggIWlwdjZfYWRkcl9lcXVhbCgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGxvZ2ljIGluIHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIHN1YnN5c3RlbSwgd2hpY2ggaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlXCIsXG4gICAgXCJjdG5ldGxpbmtfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJjdG5ldGxpbmtfZHVtcF90YWJsZVwiLFxuICAgIFwiY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFja1wiLFxuICAgIFwiY3RuZXRsaW5rX2dldF9jb25udHJhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJvb2xlYW4gaW52ZXJ0ZWQgbG9naWMgYnVnIGluIGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKSB3aGVuIG1hdGNoaW5nIElQdjYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYnkgcmVwbGFjaW5nICFpcHY2X2FkZHJfY21wKCkgd2l0aCAhaXB2Nl9hZGRyX2VxdWFsKCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgbG9naWMgaW4gdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgc3Vic3lzdGVtLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6NDMuNzU2OTI3NDYyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzA0OTUzODIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjQzLjc1NzM3MDY4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMzMDQ5MDkwNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgYnVnIGluIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKClgIHdoZXJlIGAhaXB2Nl9hZGRyX2NtcCgpYCAod2hpY2ggcmV0dXJucyAwIG9uIG1hdGNoKSB3YXMgaW5jb3JyZWN0bHkgdXNlZCBpbnN0ZWFkIG9mIGAhaXB2Nl9hZGRyX2VxdWFsKClgICh3aGljaCByZXR1cm5zIHRydWUgb24gbWF0Y2gpLCBjYXVzaW5nIElQdjYgYWRkcmVzcyBmaWx0ZXJpbmcgZHVyaW5nIGNvbm50cmFjayBuZXRsaW5rIGR1bXBpbmcgdG8gcmVqZWN0IG1hdGNoZXMgYW5kIGFjY2VwdCBtaXNtYXRjaGVzLiBcXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBvbmx5IGEgYm9vbGVhbiBlcXVhbGl0eSBjaGVjayBiZXR3ZWVuIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBJUHY2IGFkZHJlc3NlcyBpbiBjb25udHJhY2sgdHVwbGVzICh0aGUgZmlsdGVyIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqKClgIGFuZCB0aGUgY29ubnRyYWNrIHR1cGxlIGlzIHBvcHVsYXRlZCB1cG9uIGNvbm5lY3Rpb24gdHJhY2tpbmcpLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWZmZWN0ZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYzEyNjA0ZjY1MGM5NzczYTQ2OWUyMWUyOWVkNGE2NGY3NDc3MzZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNzoxNDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuaW5kZXggNTc5YWRhMDYzYjFiYi4uZWY0ODM2OTk2NTliZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5AQCAtMTA5OCwxMyArMTA5OCwxMyBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLFxuIFx0XHRicmVhaztcbiBcdGNhc2UgTkZQUk9UT19JUFY2OlxuIFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX1NSQykpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWlwdjZfYWRkcl9jbXAoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pbjYsXG4tXHRcdFx0XHQgICBcdTAwMjZjdF90dXBsZS1cdTAwM2VzcmMudTMuaW42KSlcbitcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZXNyYy51My5pbjYsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmN0X3R1cGxlLVx1MDAzZXNyYy51My5pbjYpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX0RTVCkpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWlwdjZfYWRkcl9jbXAoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pbjYsXG4tXHRcdFx0XHQgICBcdTAwMjZjdF90dXBsZS1cdTAwM2Vkc3QudTMuaW42KSlcbitcdFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2ZmlsdGVyX3R1cGxlLVx1MDAzZWRzdC51My5pbjYsXG4rXHRcdFx0XHQgICAgIFx1MDAyNmN0X3R1cGxlLVx1MDAzZWRzdC51My5pbjYpKVxuIFx0XHRcdHJldHVybiAwO1xuIFx0XHRicmVhaztcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjQzLjc1NzM3MTY4MloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTkxOTkwNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvbm50cmFjayBOZXRsaW5rIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHJlbGF0ZWQgdG8gSVB2NiBhZGRyZXNzIGNvbXBhcmlzb24gd2l0aGluIHRoZSBuZXRmaWx0ZXIgY29ubnRyYWNrIG5ldGxpbmsgbW9kdWxlLiBUaGUgZGlmZiBzaG93cyBjaGFuZ2VzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGUgc3dpdGNoIGZyb20gYGlwdjZfYWRkcl9jbXBgIHRvIGBpcHY2X2FkZHJfZXF1YWxgLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGJ1ZyBmaXggb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gaG93IElQdjYgYWRkcmVzc2VzIGFyZSBjb21wYXJlZCBkdXJpbmcgZmlsdGVyaW5nLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgaW50ZW50IGhlcmU7IG15IGV4cGVydGlzZSBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSB0cml2aWFsIGNoYW5nZS4gVGhlIGltcGxpY2F0aW9ucyBmb3IgY29ubnRyYWNrIHRhYmxlIGxvb2t1cHMgYW5kIGZpbHRlcmluZyBydWxlcyBhcmUgc2lnbmlmaWNhbnQuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBvbGRlciBmdW5jdGlvbiBjYWxsIHdhcyBpbmNvcnJlY3QsIGFuZCBob3cgdGhlIG5ldyBmdW5jdGlvbiBjYWxsIGFmZmVjdHMgb3RoZXIgY29tcGFyaXNvbnMuIEkgc3VzcGVjdCB0aGVyZSBtYXkgaGF2ZSBiZWVuIGFuIHVuaW50ZW5kZWQgYmVoYXZpb3IgY2hhbmdlIHdpdGggYSBzdWJ0bGUgZGlmZmVyZW5jZSBpbiB0aGUgcHJldmlvdXMgYW5kIG5ldyBmdW5jdGlvbiBjYWxscy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBhcm91bmQgbGluZSAxMDk4LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgbG9naWMgYW5kIHVuZGVyc3RhbmQgd2h5IHRoaXMgc3BlY2lmaWMgY2hhbmdlIHdhcyBtYWRlIHVzaW5nIGByZWFkLWZpbGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6NDguMzQ5MzY0OTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdFxcdGlmIChmaWx0ZXIpXFxuMTA4MTpcXHRcXHRcXHRjYi1cXHUwMDNlYW5zd2VyX2ZsYWdzID0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcXG4xMDgyOlxcdFxcdHJldHVybiAwO1xcbjEwODM6XFx0fVxcbjEwODQ6XFx0XFxuMTA4NTpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqZmlsdGVyX3R1cGxlLFxcbjEwODY6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqY3RfdHVwbGUsXFxuMTA4NzpcXHRcXHRcXHRcXHRcXHRcXHR1X2ludDMyX3QgZmxhZ3MsIGludCBmYW1pbHkpXFxuMTA4ODpcXHR7XFxuMTA4OTpcXHRcXHRzd2l0Y2ggKGZhbWlseSkge1xcbjEwOTA6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuMTA5MTpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9TUkMpKSBcXHUwMDI2XFx1MDAyNlxcbjEwOTI6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUzLmlwICE9IGN0X3R1cGxlLVxcdTAwM2VzcmMudTMuaXApXFxuMTA5MzpcXHRcXHRcXHRcXHRyZXR1cm4gIDA7XFxuMTA5NDpcXHRcXG4xMDk1OlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX0lQX0RTVCkpIFxcdTAwMjZcXHUwMDI2XFxuMTA5NjpcXHRcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2Vkc3QudTMuaXAgIT0gY3RfdHVwbGUtXFx1MDAzZWRzdC51My5pcClcXG4xMDk3OlxcdFxcdFxcdFxcdHJldHVybiAgMDtcXG4xMDk4OlxcdFxcdFxcdGJyZWFrO1xcbjEwOTk6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuMTEwMDpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9TUkMpKSBcXHUwMDI2XFx1MDAyNlxcbjExMDE6XFx0XFx0XFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUzLmluNixcXG4xMTAyOlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN0X3R1cGxlLVxcdTAwM2VzcmMudTMuaW42KSlcXG4xMTAzOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMDQ6XFx0XFxuMTEwNTpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcXHUwMDI2XFx1MDAyNlxcbjExMDY6XFx0XFx0XFx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUzLmluNixcXG4xMTA3OlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmN0X3R1cGxlLVxcdTAwM2Vkc3QudTMuaW42KSlcXG4xMTA4OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMDk6XFx0XFx0XFx0YnJlYWs7XFxuMTExMDpcXHRcXHR9XFxuMTExMTpcXHRcXG4xMTEyOlxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX05VTSkpIFxcdTAwMjZcXHUwMDI2XFxuMTExMzpcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2Vkc3QucHJvdG9udW0gIT0gY3RfdHVwbGUtXFx1MDAzZWRzdC5wcm90b251bSlcXG4xMTE0OlxcdFxcdFxcdHJldHVybiAwO1xcbjExMTU6XFx0XFxuMTExNjpcXHRcXHRzd2l0Y2ggKGN0X3R1cGxlLVxcdTAwM2Vkc3QucHJvdG9udW0pIHtcXG4xMTE3OlxcdFxcdGNhc2UgSVBQUk9UT19UQ1A6XFxuMTExODpcXHRcXHRjYXNlIElQUFJPVE9fVURQOlxcbjExMTk6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fU1JDX1BPUlQpKSBcXHUwMDI2XFx1MDAyNlxcbjExMjA6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlc3JjLnUudGNwLnBvcnQgIT0gY3RfdHVwbGUtXFx1MDAzZXNyYy51LnRjcC5wb3J0KVxcbjExMjE6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0RTVF9QT1JUKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTI0OlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51LnRjcC5wb3J0ICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QudS50Y3AucG9ydClcXG4xMTI1OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMjY6XFx0XFx0XFx0YnJlYWs7XFxuMTEyNzpcXHRcXHRjYXNlIElQUFJPVE9fSUNNUDpcXG4xMTI4OlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBfVFlQRSkpIFxcdTAwMjZcXHUwMDI2XFxuMTEyOTpcXHRcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2Vkc3QudS5pY21wLnR5cGUgIT0gY3RfdHVwbGUtXFx1MDAzZWRzdC51LmljbXAudHlwZSlcXG4xMTMwOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMzE6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfUFJPVE9fSUNNUF9DT0RFKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTMyOlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51LmljbXAuY29kZSAhPSBjdF90dXBsZS1cXHUwMDNlZHN0LnUuaWNtcC5jb2RlKVxcbjExMzM6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTEzNDpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QX0lEKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTM1OlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZXNyYy51LmljbXAuaWQgIT0gY3RfdHVwbGUtXFx1MDAzZXNyYy51LmljbXAuaWQpXFxuMTEzNjpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTM3OlxcdFxcdFxcdGJyZWFrO1xcbjExMzg6XFx0XFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcXG4xMTM5OlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX0lDTVBWNl9UWVBFKSkgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6NDguMzQ5NjYzNzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU3MDk1NDU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBMb2dpYyBGbGF3IGluIElQdjYgQWRkcmVzcyBDb21wYXJpc29ucyoqXG5cbk9rYXksIGxldCdzIHRyYWNlIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBpcHY2X2FkZHJfY21wYCBhbmQgYGlwdjZfYWRkcl9lcXVhbGAuIFJpZ2h0LCBgaXB2Nl9hZGRyX2NtcGAgaXMgYSBiaXQgbGlrZSBgbWVtY21wYDsgaXQgcmV0dXJucyAwIGlmIHRoZSBhZGRyZXNzZXMgYXJlIGlkZW50aWNhbC4gQnV0IGhvbGQgb24uLi4gaWYgYGlwdjZfYWRkcl9jbXAoYTEsIGEyKWAgcmV0dXJuZWQgMCBvbiBlcXVhbGl0eSwgdGhlbiBgIWlwdjZfYWRkcl9jbXBgIHdvdWxkIGV2YWx1YXRlIHRvIHRydWUgKndoZW4gdGhlIGFkZHJlc3NlcyB3ZXJlIGVxdWFsKiEgSSBzZWUgdGhlIHByb2JsZW0uIEJlZm9yZSwgd2hlbiB0aGUgYWRkcmVzc2VzIG1hdGNoZWQgKG1lYW5pbmcgYGlwdjZfYWRkcl9jbXBgIHdhcyAwKSwgYCFpcHY2X2FkZHJfY21wYCB3YXMgMSwgc28gdGhlIGZ1bmN0aW9uIHdvdWxkIHJldHVybiAwLCBlZmZlY3RpdmVseSByZWplY3RpbmcgdGhlIG1hdGNoIVxuXG5Ob3csIGBpcHY2X2FkZHJfZXF1YWwoYTEsIGEyKWAgYmVoYXZlcyBtb3JlIGludHVpdGl2ZWx5LCByZXR1cm5pbmcgdHJ1ZSAobm9uLXplcm8pIG9uIGVxdWFsaXR5IGFuZCBmYWxzZSAoemVybykgb3RoZXJ3aXNlLiBUaGlzIG1lYW5zIGAhaXB2Nl9hZGRyX2VxdWFsYCByZXR1cm5zIHRydWUgaWYgYWRkcmVzc2VzIGFyZSBOT1QgZXF1YWwsIHdoaWNoIGlzIGFsc28gYSByZWplY3Rpb24uXG5cblNvLCBpbiB0aGUgb3JpZ2luYWwgY29kZSwgdGhlIHVzZSBvZiBgIWlwdjZfYWRkcl9jbXBgIHdhcyBhIGNsYXNzaWMgaW52ZXJ0ZWQgbG9naWMgYnVnIHdpdGhpbiBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBpcHY2X2FkZHJfY21wYCBhZ2FpbiwganVzdCB0byBiZSBzdXJlLiBJJ2xsIGZpbmQgaXQgaW4gYGluY2x1ZGUvbmV0L2lwdjYuaGAgb3Igc29tZXdoZXJlIHNpbWlsYXIgdG8gY29uZmlybSB0aGlzIGlzIHJlYWxseSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTM1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTQ6NTIuOTIwNjIxNjMzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc2NzM5ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfYWRkcl9jbXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM9NDU2PXN0YXRpYyBpbnQgY29tcGFyZV9uZXRkZXZfYW5kX2lwKGludCBpZmluZGV4X2EsIHN0cnVjdCBzb2NrYWRkciAqc2EsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy00NzgtXFx0ICAgIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZShzYSwgMCkgXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM6NDc5OlxcdFxcdHJldHVybiBpcHY2X2FkZHJfY21wKFxcdTAwMjYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYSktXFx1MDAzZXNpbjZfYWRkcixcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy00ODAtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2KChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2IpLVxcdTAwM2VzaW42X2FkZHIpO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM9MTM2NT1zdGF0aWMgaW50IGNtYV9hZGRyX2NtcChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgY29uc3Qgc3RydWN0IHNvY2thZGRyICpkc3QpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy0xMzc4LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jOjEzNzk6XFx0XFx0aWYgKGlwdjZfYWRkcl9jbXAoXFx1MDAyNnNyY19hZGRyNi1cXHUwMDNlc2luNl9hZGRyLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTEzODAtXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2ZHN0X2FkZHI2LVxcdTAwM2VzaW42X2FkZHIpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ycGMuYz04NTc9c3RydWN0IGZibmljX2lwX2FkZHIgKl9fZmJuaWNfaXA2X3N5bmMoc3RydWN0IGZibmljX2RldiAqZmJkLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ycGMuYy05MTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ycGMuYzo5MTU6XFx0XFx0aWYgKGlwdjZfYWRkcl9jbXAoXFx1MDAyNmlwX2FkZHItXFx1MDAzZXZhbHVlLCBhZGRyKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3JwYy5jLTkxNi1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2QzLmM9MTk4Nj1pd2xfbWxkX3NlbmRfcHJvdG9fb2ZmbG9hZChzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZDMuYy0yMDM4LVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBuX25zYyBcXHUwMDI2XFx1MDAyNiBqIFxcdTAwM2MgYzsgaisrKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2QzLmM6MjAzOTpcXHRcXHRcXHRpZiAoaXB2Nl9hZGRyX2NtcChcXHUwMDI2bnNjW2pdLmRlc3RfaXB2Nl9hZGRyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2QzLmMtMjA0MC1cXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZzb2xpY2l0ZWRfYWRkcikgPT0gMClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29mZmxvYWRpbmcuYz0yOT1pbnQgaXdsX212bV9zZW5kX3Byb3RvX29mZmxvYWQoc3RydWN0IGl3bF9tdm0gKm12bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29mZmxvYWRpbmcuYy0xMDMtXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGM7IGorKylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9vZmZsb2FkaW5nLmM6MTA0OlxcdFxcdFxcdFxcdGlmIChpcHY2X2FkZHJfY21wKFxcdTAwMjZuc2Nbal0uZGVzdF9pcHY2X2FkZHIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vb2ZmbG9hZGluZy5jLTEwNS1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZzb2xpY2l0ZWRfYWRkcikgPT0gMClcXG4tLVxcbmluY2x1ZGUvbmV0L2lwdjYuaD01MDA9c3RhdGljIGlubGluZSBfX3UzMiBpcHY2X2lmYWNlX3Njb3BlX2lkKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgaW50IGlmYWNlKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTUwNC1cXG5pbmNsdWRlL25ldC9pcHY2Lmg6NTA1OnN0YXRpYyBpbmxpbmUgaW50IGlwdjZfYWRkcl9jbXAoY29uc3Qgc3RydWN0IGluNl9hZGRyICphMSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphMilcXG5pbmNsdWRlL25ldC9pcHY2LmgtNTA2LXtcXG4tLVxcbm5ldC9ibHVldG9vdGgvNmxvd3Bhbi5jPTE0MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBsb3dwYW5fcGVlciAqcGVlcl9sb29rdXBfZHN0KHN0cnVjdCBsb3dwYW5fYnRsZV9kZXYgKmRldixcXG4tLVxcbm5ldC9ibHVldG9vdGgvNmxvd3Bhbi5jLTE4MS1cXG5uZXQvYmx1ZXRvb3RoLzZsb3dwYW4uYzoxODI6XFx0XFx0aWYgKCFpcHY2X2FkZHJfY21wKFxcdTAwMjZwZWVyLVxcdTAwM2VwZWVyX2FkZHIsIG5leHRob3ApKSB7XFxubmV0L2JsdWV0b290aC82bG93cGFuLmMtMTgzLVxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz00MTU9dm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ0OC1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjQ0OTpcXHRpZiAoIWlwdjZfYWRkcl9jbXAoc2FkZHIsIGRhZGRyKSkge1xcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNDUwLVxcdFxcdC8qIHByZXZlbnQgZmxvb2RpbmcgdG8gbmVpZ2ggc3VwcHJlc3MgcG9ydHMgKi9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTM0Mz1icl9tdWx0aWNhc3RfZmluZF9ncm91cF9zcmMoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcsIHN0cnVjdCBicl9pcCAqaXApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTEzNTUtXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoZW50LCBcXHUwMDI2cGctXFx1MDAzZXNyY19saXN0LCBub2RlKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTM1NjpcXHRcXHRcXHRpZiAoIWlwdjZfYWRkcl9jbXAoXFx1MDAyNmVudC1cXHUwMDNlYWRkci5zcmMuaXA2LCBcXHUwMDI2aXAtXFx1MDAzZXNyYy5pcDYpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTM1Ny1cXHRcXHRcXHRcXHRyZXR1cm4gZW50O1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zMTc5PXN0YXRpYyBib29sIGJyX211bHRpY2FzdF9zZWxlY3RfcXVlcmllcihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMjAwLVxcdFxcdG90aGVyX3RpbWVyID0gXFx1MDAyNmJybWN0eC1cXHUwMDNlaXA2X290aGVyX3F1ZXJ5LnRpbWVyO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzIwMTpcXHRcXHRpZiAoaXB2Nl9hZGRyX2NtcChcXHUwMDI2c2FkZHItXFx1MDAzZXNyYy5pcDYsIFxcdTAwMjZxdWVyaWVyLVxcdTAwM2VhZGRyLnNyYy5pcDYpIFxcdTAwM2M9IDApXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMjAyLVxcdFxcdFxcdGdvdG8gdXBkYXRlO1xcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTI3Mz1zdGF0aWMgaW5saW5lIGludCBuaF9jb21wKHN0cnVjdCBmaWJfaW5mbyAqZmksIHN0cnVjdCBmaWJfaW5mbyAqb2ZpKVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTMwMy1cXHRcXHRpZiAobmgtXFx1MDAzZWZpYl9uaF9nd19mYW1pbHkgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MzA0OlxcdFxcdCAgICBpcHY2X2FkZHJfY21wKFxcdTAwMjZuaC1cXHUwMDNlZmliX25oX2d3NiwgXFx1MDAyNm9uaC1cXHUwMDNlZmliX25oX2d3NikpXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTMwNS1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9NzQyPXN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy04MzMtXFx0XFx0ICAgIChjZmctXFx1MDAzZWZjX2d3X2ZhbWlseSA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo4MzQ6XFx0XFx0ICAgICBpcHY2X2FkZHJfY21wKFxcdTAwMjZuaC1cXHUwMDNlZmliX25oX2d3NiwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfZ3c2KSkpIHtcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtODM1LVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz05Mjg9aW50IGZpYl9uaF9tYXRjaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIHN0cnVjdCBmaWJfaW5mbyAqZmksXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtOTc0LVxcdFxcdGlmIChjZmctXFx1MDAzZWZjX2d3X2ZhbWlseSA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo5NzU6XFx0XFx0ICAgIGlwdjZfYWRkcl9jbXAoXFx1MDAyNmNmZy1cXHUwMDNlZmNfZ3c2LCBcXHUwMDI2bmgtXFx1MDAzZWZpYl9uaF9ndzYpKVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05NzYtXFx0XFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTAzNC1cXHRcXHRcXHRcXHRcXHRpZiAoY2ZnMi5mY19nd19mYW1pbHkgIT0gQUZfSU5FVDYgfHxcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MTAzNTpcXHRcXHRcXHRcXHRcXHQgICAgaXB2Nl9hZGRyX2NtcChcXHUwMDI2Y2ZnMi5mY19ndzYsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEwMzYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmgtXFx1MDAzZWZpYl9uaF9ndzYpKVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz01MDk9c3RhdGljIGJvb2wgZm91X2NmZ19jbXAoc3RydWN0IGZvdSAqZm91LCBzdHJ1Y3QgZm91X2NmZyAqY2ZnKVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy01MjctXFx0fSBlbHNlIHtcXG5uZXQvaXB2NC9mb3VfY29yZS5jOjUyODpcXHRcXHRpZiAoaXB2Nl9hZGRyX2NtcChcXHUwMDI2c2stXFx1MDAzZXNrX3Y2X3Jjdl9zYWRkciwgXFx1MDAyNnVkcF9jZmctXFx1MDAzZWxvY2FsX2lwNikgfHxcXG5uZXQvaXB2NC9mb3VfY29yZS5jOjUyOTpcXHRcXHQgICAgaXB2Nl9hZGRyX2NtcChcXHUwMDI2c2stXFx1MDAzZXNrX3Y2X2RhZGRyLCBcXHUwMDI2dWRwX2NmZy1cXHUwMDNlcGVlcl9pcDYpKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtNTMwLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTE0NDc9c3RhdGljIGludCB0Y3BfYW9fdmVyaWZ5X2lwdjYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX2FvX2FkZCAqY21kLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTQ5My1cXHRcXHRpcHY2X2FkZHJfcHJlZml4KFxcdTAwMjZwZngsIGFkZHIsIHByZWZpeCk7XFxubmV0L2lwdjQvdGNwX2FvLmM6MTQ5NDpcXHRcXHRpZiAoaXB2Nl9hZGRyX2NtcChcXHUwMDI2cGZ4LCBhZGRyKSlcXG5uZXQvaXB2NC90Y3BfYW8uYy0xNDk1LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MjA5Mj1zdGF0aWMgaW50IHRjcF9hb19jb3B5X21rdHNfdG9fdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0yMTkxLVxcdFxcdFxcdFxcdGlwdjZfYWRkcl9wcmVmaXgoXFx1MDAyNnBmeCwgYWRkcjYsIG9wdF9pbi5wcmVmaXgpO1xcbm5ldC9pcHY0L3RjcF9hby5jOjIxOTI6XFx0XFx0XFx0XFx0aWYgKGlwdjZfYWRkcl9jbXAoXFx1MDAyNnBmeCwgYWRkcjYpKVxcbm5ldC9pcHY0L3RjcF9hby5jLTIxOTMtXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYz05Nj1pcDZ0X3NucHRfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTlBULmMtMTEyLVxcdFxcdGlwdjZfYWRkcl9wcmVmaXgoXFx1MDAyNmJvdW5jZWRfcGZ4LCBcXHUwMDI2Ym91bmNlZF9oZHItXFx1MDAzZWRhZGRyLCBucHQtXFx1MDAzZXNyY19wZnhfbGVuKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYzoxMTM6XFx0XFx0aWYgKGlwdjZfYWRkcl9jbXAoXFx1MDAyNmJvdW5jZWRfcGZ4LCBcXHUwMDI2bnB0LVxcdTAwM2VzcmNfcGZ4LmluNikgPT0gMClcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYy0xMTQtXFx0XFx0XFx0aXA2dF9ucHRfbWFwX3BmeChucHQsIFxcdTAwMjZib3VuY2VkX2hkci1cXHUwMDNlZGFkZHIpO1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTlBULmM9MTIxPWlwNnRfZG5wdF90ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9OUFQuYy0xMzctXFx0XFx0aXB2Nl9hZGRyX3ByZWZpeChcXHUwMDI2Ym91bmNlZF9wZngsIFxcdTAwMjZib3VuY2VkX2hkci1cXHUwMDNlc2FkZHIsIG5wdC1cXHUwMDNlc3JjX3BmeF9sZW4pO1xcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jOjEzODpcXHRcXHRpZiAoaXB2Nl9hZGRyX2NtcChcXHUwMDI2Ym91bmNlZF9wZngsIFxcdTAwMjZucHQtXFx1MDAzZXNyY19wZnguaW42KSA9PSAwKVxcbm5ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jLTEzOS1cXHRcXHRcXHRpcDZ0X25wdF9tYXBfcGZ4KG5wdCwgXFx1MDAyNmJvdW5jZWRfaGRyLVxcdTAwM2VzYWRkcik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM9MzgxPXN0YXRpYyBib29sIG5mX25hdF9pbmV0X2luX3JhbmdlKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMzg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYzozODg6XFx0cmV0dXJuIGlwdjZfYWRkcl9jbXAoXFx1MDAyNnQtXFx1MDAzZXNyYy51My5pbjYsIFxcdTAwMjZyYW5nZS1cXHUwMDNlbWluX2FkZHIuaW42KSBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjM4OTpcXHQgICAgICAgaXB2Nl9hZGRyX2NtcChcXHUwMDI2dC1cXHUwMDNlc3JjLnUzLmluNiwgXFx1MDAyNnJhbmdlLVxcdTAwM2VtYXhfYWRkci5pbjYpIFxcdTAwM2M9IDA7XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTM5MC19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jPTkyMD1uZl9uYXRfaXB2Nl9sb2NhbF9pbih2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy05MzItXFx0Lyogc2VlIG5mX25hdF9pcHY0X2xvY2FsX2luICovXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYzo5MzM6XFx0aWYgKGlwdjZfYWRkcl9jbXAoXFx1MDAyNnNhZGRyLCBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlc2FkZHIpIHx8XFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy05MzQtXFx0ICAgIG5mX25hdF9pbmV0X3BvcnRfd2FzX21hbmdsZWQoc2tiLCBzay1cXHUwMDNlc2tfZHBvcnQpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYz05NDE9bmZfbmF0X2lwdjZfaW4odm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtOTQ5LVxcdGlmICh2ZXJkaWN0ICE9IE5GX0RST1AgXFx1MDAyNlxcdTAwMjYgdmVyZGljdCAhPSBORl9TVE9MRU4gXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjk1MDpcXHQgICAgaXB2Nl9hZGRyX2NtcChcXHUwMDI2ZGFkZHIsIFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkcikpXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy05NTEtXFx0XFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuLS1cXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuYz0xODU9aW50IG5ldGxibF9hZjZsaXN0X2FkZChzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKmVudHJ5LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxubmV0L25ldGxhYmVsL25ldGxhYmVsX2FkZHJsaXN0LmMtMjAwLVxcdFxcdGlmIChpdGVyLVxcdTAwM2V2YWxpZCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5jOjIwMTpcXHRcXHQgICAgaXB2Nl9hZGRyX2NtcChcXHUwMDI2ZW50cnktXFx1MDAzZW1hc2ssIFxcdTAwMjZpdGVyLVxcdTAwM2VtYXNrKSBcXHUwMDNlIDApIHtcXG5uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuYy0yMDItXFx0XFx0XFx0X19saXN0X2FkZF9yY3UoXFx1MDAyNmVudHJ5LVxcdTAwM2VsaXN0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MTIxNz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNha2VfYWNrX2ZpbHRlcihzdHJ1Y3QgY2FrZV9zY2hlZF9kYXRhICpxLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTI4My1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxMjg0OlxcdFxcdFxcdGlmIChpcHY2X2FkZHJfY21wKFxcdTAwMjZpcHY2aF9jaGVjay1cXHUwMDNlc2FkZHIsIFxcdTAwMjZpcHY2aC1cXHUwMDNlc2FkZHIpIHx8XFxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTI4NTpcXHRcXHRcXHQgICAgaXB2Nl9hZGRyX2NtcChcXHUwMDI2aXB2NmhfY2hlY2stXFx1MDAzZWRhZGRyLCBcXHUwMDI2aXB2NmgtXFx1MDAzZWRhZGRyKSlcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xMjg2LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNDo1NC41OTczNjY0ODFaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE3OTYzNjUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBBZGRyZXNzIENvbXBhcmlzb24gTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBJUHY2IGFkZHJlc3MgY29tcGFyaXNvbiBpc3N1ZS4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbiBgaW5jbHVkZS9uZXQvaXB2Ni5oYC4gIEkgc2VlIGBpcHY2X2FkZHJfY21wYCwgd2hpY2ggdXNlcyBhIGBtZW1jbXBgIGZvciBhIGJ5dGUtYnktYnl0ZSBjb21wYXJpc29uLCBhbmQgYGlwdjZfYWRkcl9lcXVhbGAsIHdoaWNoIHJlbGllcyBvbiBYT1Igb3BlcmF0aW9ucyBvbiAzMi1iaXQgc2VnbWVudHMuICBUaGUgdXNlIG9mIGBpcHY2X2FkZHJfZXF1YWxgIGlzIHByb2JhYmx5IHRvIG9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgYWRkcmVzc2VzIGFyZSBlcXVhbCwgYnV0IEkgbmVlZCB0byBjb25zaWRlciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGNvZGUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgcHJvYmxlbSBpbiBgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZWAuICBJbml0aWFsbHksIGl0IHdhcyB1c2luZyBgIWlwdjZfYWRkcl9jbXBgIG9uIGBmaWx0ZXJfdHVwbGUtXHUwMDNlc3JjLnUzLmluNmAgYW5kIGBjdF90dXBsZS1cdTAwM2VzcmMudTMuaW42YC4gVGhhdCdzIGVxdWl2YWxlbnQgdG8gYG1lbWNtcCguLi4pID09IDBgLiBTbywgaWYgdGhlIGFkZHJlc3NlcyAqd2VyZSogZXF1YWwsIHRoZSBgaWZgIGNvbmRpdGlvbiB3YXMgdHJ1ZSwgbGVhZGluZyB0byBhIGZ1bmN0aW9uIHJldHVybiBvZiBgMGAgd2hpY2gsIGluIHRoaXMgY29udGV4dCwgdHJhbnNsYXRlcyB0byBOTyBNQVRDSCDigJMgbWVhbmluZyB0aGUgbWF0Y2hpbmcgZW50cnkgd2FzIHdyb25nbHkgYmVpbmcgcmVqZWN0ZWQsIGFuZCAqbm9uKi1tYXRjaGluZyBlbnRyaWVzIHdlcmUgYmVpbmcgYWxsb3dlZC4gQSBwcmV0dHkgY3JpdGljYWwgYnVnIVxuXG5UaGUgZml4LCBhcyBJIHNlZSBpdCwgc3dpdGNoZXMgdG8gYCFpcHY2X2FkZHJfZXF1YWwoLi4uKWAuIE5vdywgaWYgdGhlIGFkZHJlc3NlcyBhcmUgKm5vdCogZXF1YWwsIGl0IHJldHVybnMgMCAocmVqZWN0IGVudHJ5KS4gVGhpcyBtYWtlcyBhIGxvdCBtb3JlIHNlbnNlLCBhbmQgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggZm9yIGZpbHRlcmluZyBiYXNlZCBvbiBub24tZXF1YWxpdHkuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVgIGZ1bmN0aW9uIHRvIGNvbmZpcm0gaXQsIGJ1dCB0aGlzIGNoYW5nZSBzZWVtcyByaWdodC5cblxuTmV4dCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hlcmUgYGZpbHRlcl90dXBsZWAgYW5kIGBjdF90dXBsZWAgYXJlIGNvbWluZyBmcm9tIGFuZCBob3cgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVgIGlzIGFjdHVhbGx5IGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYW5kIGNvbnRleHQgdG8gZnVsbHkgYXBwcmVjaWF0ZSB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGJ1Zy4gVGhpcyBoZWxwcyBwcm92aWRlIGNvbnRleHQgZm9yIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDI0LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjU4Ljc3NzAwNjI1N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4ODMwNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTEwNjY9c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTEwODQtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjEwODU6c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmZpbHRlcl90dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTA4Ni1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpjdF90dXBsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0xMTU0PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgbmZfY29ubiAqY3QsIHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3NS1cXHRcXHR0dXBsZSA9IG5mX2N0X3R1cGxlKGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxMTc2OlxcdFxcdGlmICghY3RuZXRsaW5rX2ZpbHRlcl9tYXRjaF90dXBsZShcXHUwMDI2ZmlsdGVyLVxcdTAwM2VvcmlnLCB0dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE3Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGZpbHRlci1cXHUwMDNlb3JpZ19mbGFncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0xMTgzLVxcdFxcdHR1cGxlID0gbmZfY3RfdHVwbGUoY3QsIElQX0NUX0RJUl9SRVBMWSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjExODQ6XFx0XFx0aWYgKCFjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKFxcdTAwMjZmaWx0ZXItXFx1MDAzZXJlcGx5LCB0dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTE4NS1cXHRcXHRcXHRcXHRcXHRcXHQgIGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE0OjU4LjgyNzg5NDM3OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjUxMzExNzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgQ29ubnRyYWNrIE5ldGxpbmsgRnVuY3Rpb25zKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBzb21lIGNvbm50cmFjayBuZXRsaW5rIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBjdG5ldGxpbmtfZmlsdGVyX21hdGNoYCBhbmQgYGN0bmV0bGlua19kdW1wX3RhYmxlYCwgb3IgcmF0aGVyLCBhbnkgZnVuY3Rpb24gY2FsbHMgdG8gdGhvc2UgdHdvLiBUaGF0J3MgdXN1YWxseSB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgcXVpY2sgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgdXNlZCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBJIGhhdmUgYSBodW5jaCB0aGF0IHNvbWV0aGluZyBpbnRlcmVzdGluZyBtaWdodCBiZSBnb2luZyBvbiBhcm91bmQgdGhvc2Ugcm91dGluZXMuIEknbSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGV4cGxvcmF0aW9uIG9uIGxpbmVzIDEwNTAgdGhyb3VnaCAxMjAwIG9mIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgc2VjdGlvbiB3aWxsIGhvbGQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBmaWx0ZXJpbmcgYW5kIGR1bXBpbmcgY29ubnRyYWNrIGluZm9ybWF0aW9uIHZpYSBuZXRsaW5rLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc3MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE1OjAyLjA3OTIwODU3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzIzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNTA6XFx0XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwNTE6XFx0XFx0fVxcbjEwNTI6XFx0XFxuMTA1MzpcXHRcXHRyZXR1cm4gZmlsdGVyO1xcbjEwNTQ6XFx0XFxuMTA1NTpcXHRlcnJfZmlsdGVyOlxcbjEwNTY6XFx0XFx0a2ZyZWUoZmlsdGVyKTtcXG4xMDU3OlxcdFxcbjEwNTg6XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4xMDU5OlxcdH1cXG4xMDYwOlxcdFxcbjEwNjE6XFx0c3RhdGljIGJvb2wgY3RuZXRsaW5rX25lZWRzX2ZpbHRlcih1OCBmYW1pbHksIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqY2RhKVxcbjEwNjI6XFx0e1xcbjEwNjM6XFx0XFx0cmV0dXJuIGZhbWlseSB8fCBjZGFbQ1RBX01BUktdIHx8IGNkYVtDVEFfRklMVEVSXSB8fCBjZGFbQ1RBX1NUQVRVU10gfHwgY2RhW0NUQV9aT05FXTtcXG4xMDY0OlxcdH1cXG4xMDY1OlxcdFxcbjEwNjY6XFx0c3RhdGljIGludCBjdG5ldGxpbmtfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbjEwNjc6XFx0e1xcbjEwNjg6XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICpjZGEgPSBjYi1cXHUwMDNlZGF0YTtcXG4xMDY5OlxcdFxcdHN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXIgPSBOVUxMO1xcbjEwNzA6XFx0XFx0c3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCk7XFxuMTA3MTpcXHRcXHR1OCBmYW1pbHkgPSBuZm1zZy1cXHUwMDNlbmZnZW5fZmFtaWx5O1xcbjEwNzI6XFx0XFxuMTA3MzpcXHRcXHRpZiAoY3RuZXRsaW5rX25lZWRzX2ZpbHRlcihmYW1pbHksIGNkYSkpIHtcXG4xMDc0OlxcdFxcdFxcdGZpbHRlciA9IGN0bmV0bGlua19hbGxvY19maWx0ZXIoY2RhLCBmYW1pbHkpO1xcbjEwNzU6XFx0XFx0XFx0aWYgKElTX0VSUihmaWx0ZXIpKVxcbjEwNzY6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZmlsdGVyKTtcXG4xMDc3OlxcdFxcdH1cXG4xMDc4OlxcdFxcbjEwNzk6XFx0XFx0Y2ItXFx1MDAzZWRhdGEgPSBmaWx0ZXI7XFxuMTA4MDpcXHRcXHRpZiAoZmlsdGVyKVxcbjEwODE6XFx0XFx0XFx0Y2ItXFx1MDAzZWFuc3dlcl9mbGFncyA9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XFxuMTA4MjpcXHRcXHRyZXR1cm4gMDtcXG4xMDgzOlxcdH1cXG4xMDg0OlxcdFxcbjEwODU6XFx0c3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmZpbHRlcl90dXBsZSxcXG4xMDg2OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmN0X3R1cGxlLFxcbjEwODc6XFx0XFx0XFx0XFx0XFx0XFx0dV9pbnQzMl90IGZsYWdzLCBpbnQgZmFtaWx5KVxcbjEwODg6XFx0e1xcbjEwODk6XFx0XFx0c3dpdGNoIChmYW1pbHkpIHtcXG4xMDkwOlxcdFxcdGNhc2UgTkZQUk9UT19JUFY0OlxcbjEwOTE6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfU1JDKSkgXFx1MDAyNlxcdTAwMjZcXG4xMDkyOlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZXNyYy51My5pcCAhPSBjdF90dXBsZS1cXHUwMDNlc3JjLnUzLmlwKVxcbjEwOTM6XFx0XFx0XFx0XFx0cmV0dXJuICAwO1xcbjEwOTQ6XFx0XFxuMTA5NTpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9JUF9EU1QpKSBcXHUwMDI2XFx1MDAyNlxcbjEwOTY6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUzLmlwICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QudTMuaXApXFxuMTA5NzpcXHRcXHRcXHRcXHRyZXR1cm4gIDA7XFxuMTA5ODpcXHRcXHRcXHRicmVhaztcXG4xMDk5OlxcdFxcdGNhc2UgTkZQUk9UT19JUFY2OlxcbjExMDA6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfU1JDKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTAxOlxcdFxcdFxcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZmaWx0ZXJfdHVwbGUtXFx1MDAzZXNyYy51My5pbjYsXFxuMTEwMjpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjdF90dXBsZS1cXHUwMDNlc3JjLnUzLmluNikpXFxuMTEwMzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTA0OlxcdFxcbjExMDU6XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IENUQV9GSUxURVJfRkxBRyhDVEFfSVBfRFNUKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTA2OlxcdFxcdFxcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZmaWx0ZXJfdHVwbGUtXFx1MDAzZWRzdC51My5pbjYsXFxuMTEwNzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZjdF90dXBsZS1cXHUwMDNlZHN0LnUzLmluNikpXFxuMTEwODpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTA5OlxcdFxcdFxcdGJyZWFrO1xcbjExMTA6XFx0XFx0fVxcbjExMTE6XFx0XFxuMTExMjpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19OVU0pKSBcXHUwMDI2XFx1MDAyNlxcbjExMTM6XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnByb3RvbnVtICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QucHJvdG9udW0pXFxuMTExNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTE1OlxcdFxcbjExMTY6XFx0XFx0c3dpdGNoIChjdF90dXBsZS1cXHUwMDNlZHN0LnByb3RvbnVtKSB7XFxuMTExNzpcXHRcXHRjYXNlIElQUFJPVE9fVENQOlxcbjExMTg6XFx0XFx0Y2FzZSBJUFBST1RPX1VEUDpcXG4xMTE5OlxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDVEFfRklMVEVSX0ZMQUcoQ1RBX1BST1RPX1NSQ19QT1JUKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTIwOlxcdFxcdFxcdCAgICBmaWx0ZXJfdHVwbGUtXFx1MDAzZXNyYy51LnRjcC5wb3J0ICE9IGN0X3R1cGxlLVxcdTAwM2VzcmMudS50Y3AucG9ydClcXG4xMTIxOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19EU1RfUE9SVCkpIFxcdTAwMjZcXHUwMDI2XFxuMTEyNDpcXHRcXHRcXHQgICAgZmlsdGVyX3R1cGxlLVxcdTAwM2Vkc3QudS50Y3AucG9ydCAhPSBjdF90dXBsZS1cXHUwMDNlZHN0LnUudGNwLnBvcnQpXFxuMTEyNTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTI2OlxcdFxcdFxcdGJyZWFrO1xcbjExMjc6XFx0XFx0Y2FzZSBJUFBST1RPX0lDTVA6XFxuMTEyODpcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ1RBX0ZJTFRFUl9GTEFHKENUQV9QUk9UT19JQ01QX1RZUEUpKSBcXHUwMDI2XFx1MDAyNlxcbjExMjk6XFx0XFx0XFx0ICAgIGZpbHRlcl90dXBsZS1cXHUwMDNlZHN0LnUuaWNtcC50eXBlICE9IGN0X3R1cGxlLVxcdTAwM2Vkc3QudS5pY21wLnR5cGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjE1OjAyLjA3OTQ0Mjk1NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjE1OTAwMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgQ29ubnRyYWNrIE5ldGxpbmsgRmlsdGVyaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgd2UncmUgaGFuZGxpbmcgY29ubnRyYWNrIGZpbHRlcmluZyBvdmVyIE5ldGxpbmsuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3csIHBhcnRpY3VsYXJseSBob3cgZmlsdGVycyBhcmUgY29uc3RydWN0ZWQgYW5kIGFwcGxpZWQuIEkgc2VlIHRoYXQgYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGVgIGlzIHRoZSB3b3JraG9yc2UgaGVyZTsgaXQncyB0aGUgZnVuY3Rpb24gdGhhdCdzIHVsdGltYXRlbHkgZG9pbmcgdGhlIGNvbXBhcmlzb24gd2hlbiBmaWx0ZXJpbmcgZHVtcCBlbnRyaWVzLiBOb3csIHdoZXJlIGRvZXMgdGhpcyBgZmlsdGVyYCBzdHJ1Y3QgY29tZSBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBob3cgaXQncyBpbml0aWFsaXplZC4gTG9va3MgbGlrZSBgY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcmAgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUsIGJlY2F1c2UgaXQgaGFuZGxlcyB0aGUgYXR0cmlidXRlIHBhcnNpbmcgZnJvbSB1c2Vyc3BhY2UuIEknbGwgbmVlZCB0byBjaGVjayBob3cgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgIGluaXRpYWxpemVzIHRoZSBmaWx0ZXI7IHRoaXMgc2VlbXMgdG8gYmUgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzY0LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNTowOC42OTUzNDYxNjdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDAwOlxcdFxcbjEwMDE6XFx0XFx0ZXJyID0gY3RuZXRsaW5rX2ZpbHRlcl9wYXJzZV9tYXJrKFxcdTAwMjZmaWx0ZXItXFx1MDAzZW1hcmssIGNkYSk7XFxuMTAwMjpcXHRcXHRpZiAoZXJyKVxcbjEwMDM6XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHRlcnIgPSBjdG5ldGxpbmtfZmlsdGVyX3BhcnNlX3N0YXR1cyhcXHUwMDI2ZmlsdGVyLVxcdTAwM2VzdGF0dXMsIGNkYSk7XFxuMTAwNjpcXHRcXHRpZiAoZXJyKVxcbjEwMDc6XFx0XFx0XFx0Z290byBlcnJfZmlsdGVyO1xcbjEwMDg6XFx0XFxuMTAwOTpcXHRcXHRpZiAoY2RhW0NUQV9aT05FXSkge1xcbjEwMTA6XFx0XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9aT05FXSwgXFx1MDAyNmZpbHRlci1cXHUwMDNlem9uZSk7XFxuMTAxMTpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDEyOlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDEzOlxcdFxcdFxcdGZpbHRlci1cXHUwMDNlem9uZV9maWx0ZXIgPSB0cnVlO1xcbjEwMTQ6XFx0XFx0fVxcbjEwMTU6XFx0XFxuMTAxNjpcXHRcXHRpZiAoIWNkYVtDVEFfRklMVEVSXSlcXG4xMDE3OlxcdFxcdFxcdHJldHVybiBmaWx0ZXI7XFxuMTAxODpcXHRcXG4xMDE5OlxcdFxcdGVyciA9IGN0bmV0bGlua19wYXJzZV9maWx0ZXIoY2RhW0NUQV9GSUxURVJdLCBmaWx0ZXIpO1xcbjEwMjA6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTAyMTpcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTAyMjpcXHRcXG4xMDIzOlxcdFxcdGlmIChmaWx0ZXItXFx1MDAzZW9yaWdfZmxhZ3MpIHtcXG4xMDI0OlxcdFxcdFxcdGlmICghY2RhW0NUQV9UVVBMRV9PUklHXSkge1xcbjEwMjU6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xMDI2OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDI3OlxcdFxcdFxcdH1cXG4xMDI4OlxcdFxcbjEwMjk6XFx0XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlX2ZpbHRlcihjZGEsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZW9yaWcsXFxuMTAzMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBDVEFfVFVQTEVfT1JJRyxcXG4xMDMxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlZmFtaWx5LFxcbjEwMzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmZpbHRlci1cXHUwMDNlem9uZSxcXG4xMDMzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlb3JpZ19mbGFncyk7XFxuMTAzNDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDM1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDM2OlxcdFxcdH1cXG4xMDM3OlxcdFxcbjEwMzg6XFx0XFx0aWYgKGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MpIHtcXG4xMDM5OlxcdFxcdFxcdGlmICghY2RhW0NUQV9UVVBMRV9SRVBMWV0pIHtcXG4xMDQwOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTA0MTpcXHRcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTA0MjpcXHRcXHRcXHR9XFxuMTA0MzpcXHRcXG4xMDQ0OlxcdFxcdFxcdGVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZV9maWx0ZXIoY2RhLCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2VyZXBseSxcXG4xMDQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIENUQV9UVVBMRV9SRVBMWSxcXG4xMDQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlZmFtaWx5LFxcbjEwNDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmZpbHRlci1cXHUwMDNlem9uZSxcXG4xMDQ4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGZpbHRlci1cXHUwMDNlcmVwbHlfZmxhZ3MpO1xcbjEwNDk6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTA1MDpcXHRcXHRcXHRcXHRnb3RvIGVycl9maWx0ZXI7XFxuMTA1MTpcXHRcXHR9XFxuMTA1MjpcXHRcXG4xMDUzOlxcdFxcdHJldHVybiBmaWx0ZXI7XFxuMTA1NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MTU6MDguNjk1NTc4MTA3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDczMTgxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBBbGxvY2F0aW9uIG9mIGBmaWx0ZXJgIGluIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgYGZpbHRlcmAgc3RydWN0dXJlIHdpdGhpbiB0aGUgYGN0bmV0bGlua19hbGxvY19maWx0ZXJgIGZ1bmN0aW9uLiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIHRvIGVuc3VyZSBwcm9wZXIgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByZXZlbnQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBtZW1vcnkgaXMgYWNxdWlyZWQsIHdoZXRoZXIgaXQncyBzdGF0aWNhbGx5LCBkeW5hbWljYWxseSB3aXRoIGBrbWFsbG9jYCwgb3IgdGhyb3VnaCBzb21lIG90aGVyIGFsbG9jYXRvci4gSSdsbCBuZWVkIHRvIHZlcmlmeSBpZiB0aGVyZSdzIGFueSBhc3NvY2lhdGVkIGVycm9yIGhhbmRsaW5nIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCBhbmQgd2hhdCBtZWNoYW5pc20gaXMgZW1wbG95ZWQgdG8gcmVsZWFzZSB0aGUgbWVtb3J5IHdoZW4gdGhlIGZpbHRlciBpcyBubyBsb25nZXIgbmVlZGVkLiBJcyB0aGVyZSBhIGNvcnJlc3BvbmRpbmcgZGVhbGxvY2F0aW9uIGZ1bmN0aW9uLCBhbmQgaXMgaXQgY2FsbGVkIGluIGFsbCB0aGUgbmVjZXNzYXJ5IHNjZW5hcmlvcywgc3BlY2lmaWNhbGx5IHdoZW4gdGhpbmdzIGdvIHdyb25nPyBGdXJ0aGVybW9yZSwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBjb25zaWRlcmF0aW9ucyByZWxhdGVkIHRvIGFsaWdubWVudCBhbmQgcG90ZW50aWFsIHBhZGRpbmc/IEkgbmVlZCB0byByZXZpZXcgaG93IHRoaXMgYWxsb2NhdGlvbiBpbXBhY3RzIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBvZiB0aGUgYGZpbHRlcmAgZGF0YSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgZnJhbWV3b3JrLiBUaGlzIGlzIGdvaW5nIHRvIHJlcXVpcmUgYSBjYXJlZnVsIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IGBmaWx0ZXJgIGlzIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzk3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNToxMC44MDI5MDY1NThaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODA6XFx0XFx0QlVJTERfQlVHX09OKF9fSVBTX01BWF9CSVQgXFx1MDAzZT0gMzIpO1xcbiA5ODE6XFx0XFx0cmV0dXJuIDA7XFxuIDk4MjpcXHR9XFxuIDk4MzpcXHRcXG4gOTg0OlxcdHN0YXRpYyBzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqXFxuIDk4NTpcXHRjdG5ldGxpbmtfYWxsb2NfZmlsdGVyKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdTggZmFtaWx5KVxcbiA5ODY6XFx0e1xcbiA5ODc6XFx0XFx0c3RydWN0IGN0bmV0bGlua19maWx0ZXIgKmZpbHRlcjtcXG4gOTg4OlxcdFxcdGludCBlcnI7XFxuIDk4OTpcXHRcXG4gOTkwOlxcdCNpZm5kZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLXFxuIDk5MTpcXHRcXHRpZiAoY2RhW0NUQV9NQVJLXSB8fCBjZGFbQ1RBX01BUktfTUFTS10pXFxuIDk5MjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XFxuIDk5MzpcXHQjZW5kaWZcXG4gOTk0OlxcdFxcbiA5OTU6XFx0XFx0ZmlsdGVyID0ga3phbGxvY19vYmooKmZpbHRlcik7XFxuIDk5NjpcXHRcXHRpZiAoZmlsdGVyID09IE5VTEwpXFxuIDk5NzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gOTk4OlxcdFxcbiA5OTk6XFx0XFx0ZmlsdGVyLVxcdTAwM2VmYW1pbHkgPSBmYW1pbHk7XFxuMTAwMDpcXHRcXG4xMDAxOlxcdFxcdGVyciA9IGN0bmV0bGlua19maWx0ZXJfcGFyc2VfbWFyayhcXHUwMDI2ZmlsdGVyLVxcdTAwM2VtYXJrLCBjZGEpO1xcbjEwMDI6XFx0XFx0aWYgKGVycilcXG4xMDAzOlxcdFxcdFxcdGdvdG8gZXJyX2ZpbHRlcjtcXG4xMDA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNToxMC44MDMxNDYzMzhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAwMzI5NzE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIENvbm50cmFjayBOZXRsaW5rIEZpbHRlcmluZyBCdWcgRml4KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgYm9pbHMgZG93biB0byBhIGNsYXNzaWMgbG9naWNhbCBlcnJvcjogdGhlIGF1dGhvciB3YXMgdXNpbmcgYCFpcHY2X2FkZHJfY21wKClgIHdoZW4gdGhleSAqdGhvdWdodCogdGhleSB3ZXJlIGNoZWNraW5nIGZvciBpbmVxdWFsaXR5LCBidXQgYGlwdjZfYWRkcl9jbXBgIGFjdHVhbGx5IHJldHVybnMgMCB3aGVuIHRoZSBhZGRyZXNzZXMgbWF0Y2guIEVmZmVjdGl2ZWx5LCB0aGV5IGludmVydGVkIHRoZSBJUHY2IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZpbHRlciBjb25kaXRpb24gaW4gdGhlIGNvbm50cmFjayBuZXRsaW5rIGR1bXBpbmcgcHJvY2Vzcy4gQSBzaW1wbGUgb3ZlcnNpZ2h0LCBidXQgaXQgaGFzIHRvIGJlIGZpeGVkLiBUaGUgZml4IGlzIGEgc3RyYWlnaHQgc3dhcCwgdXNpbmcgYCFpcHY2X2FkZHJfZXF1YWwoKWAgd2hpY2ggY29ycmVjdGx5IHNpZ25hbHMgZXF1YWxpdHkgd2l0aCBhIG5vbi16ZXJvIHZhbHVlLlxuXG5NeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGZpeCBpbnRyb2R1Y2VzIGFueSBuZXcgbWVtb3J5IGlzc3Vlcy4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwcm9ibGVtcyB3aXRoIEtNU0FOLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNoZWNrOlxuKiAgIERpZCB0aGlzIGludm9sdmUgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjcmVhdGUgYW55IG5ldyBtZW1vcnkgYnVmZmVycz8gTm8uIGBjdG5ldGxpbmtfYWxsb2NfZmlsdGVyYCB1c2VzIGBremFsbG9jX29iaigqZmlsdGVyKWAsIHNvIHRoYXQncyBhbGwgaGFuZGxlZC5cbiogICBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYmVpbmcgcmVhZCBvciBjb3BpZWQ/IE5vdCBpbiB0aGlzIGNhc2UuIFRoZSBjb25udHJhY2sgdHVwbGUgKGBjdF90dXBsZWApIGlzIGNvbWluZyBmcm9tIGFuIGVzdGFibGlzaGVkIGBzdHJ1Y3QgbmZfY29ubmAsIHdoaWNoIHNob3VsZCBiZSBmdWxseSBpbml0aWFsaXplZC5cbiogICBDb3VsZCB0aGlzIGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgbGVhayB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlPyBBYnNvbHV0ZWx5IG5vdC4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBmaXguXG5cblNvLCBpdCdzIGEgdmVyeSB0YXJnZXRlZCBjaGFuZ2UuIE5vIG5ldyBtZW1vcnkgaXMgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkLiBJdCdzIGp1c3QgYSBjb3JyZWN0aW9uIG9mIGEgY29tcGFyaXNvbiBvcGVyYXRvci4gSXQncyBhIGNsZWFuIGZpeCB3aXRoIG5vIGV4cG9zZWQgbWVtb3J5IHJpc2tzLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgYWxsIHRob3NlIGNyaXRlcmlhIHRvIGJlIGNlcnRhaW46XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2l0aCBwb3NzaWJseSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZGF0YT8gTm8sIG5vdGhpbmcgbmV3IGlzIGJlaW5nIHNlbnQuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLCB0aGUgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24gYXJlIGluaXRpYWxpemVkLiBgZmlsdGVyX3R1cGxlYCBpcyB0aGUgYGt6YWxsb2NgJ2QgZmlsdGVyIGFuZCBgY3RfdHVwbGVgIGlzIGluaXRpYWxpemVkLlxuMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCB3aXRoIHRoZSByaXNrIG9mIGxhdGVyIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOby5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IG1pZ2h0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBkZWZpbml0ZWx5IGJlIGBmYWxzZWAuXG5cbioqS01TQU4gUmVhc29uaW5nOioqIFRoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaW52ZXJ0ZWQgbG9naWNhbCBjaGVjayBpbiBJUHY2IGNvbm50cmFjayBuZXRsaW5rIGZpbHRlcmluZy4gVGhlIG9yaWdpbmFsIGNvZGUgaW5jb3JyZWN0bHkgdXNlZCBgIWlwdjZfYWRkcl9jbXAoKWAgd2hlbiBgIWlwdjZfYWRkcl9lcXVhbCgpYCBzaG91bGQgaGF2ZSBiZWVuIHVzZWQuIFRoaXMgcGF0Y2ggZml4ZXMgaXQuIEtNU0FOIGlzICpub3QqIG5lZWRlZCBiZWNhdXNlIHRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4gVGhlcmUncyBubyBuZXcgYWxsb2NhdGlvbiBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGBjdF90dXBsZWAgYW5kIHRoZSBgZmlsdGVyX3R1cGxlYCBhcmUgaW5pdGlhbGl6ZWQgYW5kIHRoZXJlZm9yZSBhbGwgdGhlIHJlbGV2YW50IHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuXG5cbk9rYXksIGxldCdzIGNhbGwgdGhpcyBgc2V0LXJlc3VsdHNgLiBJJ20gY29uZmlkZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA0NiwiT3V0cHV0VG9rZW5zIjoxOTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoxNToxNi44MDY0NDU3MjlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBidWcgaW4gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKWAgd2hlcmUgYCFpcHY2X2FkZHJfY21wKClgICh3aGljaCByZXR1cm5zIDAgb24gbWF0Y2gpIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgYCFpcHY2X2FkZHJfZXF1YWwoKWAgKHdoaWNoIHJldHVybnMgdHJ1ZSBvbiBtYXRjaCksIGNhdXNpbmcgSVB2NiBhZGRyZXNzIGZpbHRlcmluZyBkdXJpbmcgY29ubnRyYWNrIG5ldGxpbmsgZHVtcGluZyB0byByZWplY3QgbWF0Y2hlcyBhbmQgYWNjZXB0IG1pc21hdGNoZXMuIFxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIG9ubHkgYSBib29sZWFuIGVxdWFsaXR5IGNoZWNrIGJldHdlZW4gZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIElQdjYgYWRkcmVzc2VzIGluIGNvbm50cmFjayB0dXBsZXMgKHRoZSBmaWx0ZXIgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAgYW5kIHRoZSBjb25udHJhY2sgdHVwbGUgaXMgcG9wdWxhdGVkIHVwb24gY29ubmVjdGlvbiB0cmFja2luZykuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhZmZlY3RlZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBidWcgaW4gYGN0bmV0bGlua19maWx0ZXJfbWF0Y2hfdHVwbGUoKWAgd2hlcmUgYCFpcHY2X2FkZHJfY21wKClgICh3aGljaCByZXR1cm5zIDAgb24gbWF0Y2gpIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgYCFpcHY2X2FkZHJfZXF1YWwoKWAgKHdoaWNoIHJldHVybnMgdHJ1ZSBvbiBtYXRjaCksIGNhdXNpbmcgSVB2NiBhZGRyZXNzIGZpbHRlcmluZyBkdXJpbmcgY29ubnRyYWNrIG5ldGxpbmsgZHVtcGluZyB0byByZWplY3QgbWF0Y2hlcyBhbmQgYWNjZXB0IG1pc21hdGNoZXMuIFxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIG9ubHkgYSBib29sZWFuIGVxdWFsaXR5IGNoZWNrIGJldHdlZW4gZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIElQdjYgYWRkcmVzc2VzIGluIGNvbm50cmFjayB0dXBsZXMgKHRoZSBmaWx0ZXIgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmooKWAgYW5kIHRoZSBjb25udHJhY2sgdHVwbGUgaXMgcG9wdWxhdGVkIHVwb24gY29ubmVjdGlvbiB0cmFja2luZykuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhZmZlY3RlZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow9xzfh[1] Phase: Succeeded StartedAt: 2026-09-09 17:15:28 +0000 UTC FinishedAt: 2026-09-09 17:15:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 17:15:28 +0000 UTC FinishedAt: 2026-09-09 17:15:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2] Phase: Succeeded StartedAt: 2026-09-09 17:15:28 +0000 UTC FinishedAt: 2026-09-09 21:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:15:28 +0000 UTC FinishedAt: 2026-09-09 21:01:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:15:28 +0000 UTC FinishedAt: 2026-09-09 17:15:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:15:28 +0000 UTC FinishedAt: 2026-09-09 17:15:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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-workflow9xzfh/series-workflow9xzfh-convert-artifact-4224966681/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:15:38 +0000 UTC FinishedAt: 2026-09-09 17:35:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:15:38 +0000 UTC FinishedAt: 2026-09-09 17:35:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a9cb2b23-50bb-4079-bd52-5c9da0deca56,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-workflow9xzfh/series-workflow9xzfh-convert-artifact-4224966681/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": "a38f5c42-7ee7-425a-a8ee-4df69ede8b98", "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-workflow9xzfh/series-workflow9xzfh-build-action-4107076535/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:15:38 +0000 UTC FinishedAt: 2026-09-09 17:35:39 +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:*a9cb2b23-50bb-4079-bd52-5c9da0deca56,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-workflow9xzfh/series-workflow9xzfh-convert-artifact-4224966681/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": "a38f5c42-7ee7-425a-a8ee-4df69ede8b98", "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-workflow9xzfh/series-workflow9xzfh-build-action-4107076535/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:35:49 +0000 UTC FinishedAt: 2026-09-09 17:35:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:35:49 +0000 UTC FinishedAt: 2026-09-09 17:35:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:35:49 +0000 UTC FinishedAt: 2026-09-09 17:35:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:35:49 +0000 UTC FinishedAt: 2026-09-09 17:35:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-workflow9xzfh/series-workflow9xzfh-convert-artifact-2222757356/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:35:59 +0000 UTC FinishedAt: 2026-09-09 17:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:35:59 +0000 UTC FinishedAt: 2026-09-09 17:37:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a38f5c42-7ee7-425a-a8ee-4df69ede8b98,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-workflow9xzfh/series-workflow9xzfh-build-action-4107076535/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-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:37:52 +0000 UTC FinishedAt: 2026-09-09 17:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:37:52 +0000 UTC FinishedAt: 2026-09-09 17:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:37:52 +0000 UTC FinishedAt: 2026-09-09 17:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:37:52 +0000 UTC FinishedAt: 2026-09-09 17:56:15 +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:*a9cb2b23-50bb-4079-bd52-5c9da0deca56,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-workflow9xzfh/series-workflow9xzfh-convert-artifact-2222757356/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": "0df4d4a3-2301-4870-9bbf-21a2d42ba99f", "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-workflow9xzfh/series-workflow9xzfh-build-action-2466475144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:37:52 +0000 UTC FinishedAt: 2026-09-09 17:56:05 +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:*a9cb2b23-50bb-4079-bd52-5c9da0deca56,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-workflow9xzfh/series-workflow9xzfh-convert-artifact-2222757356/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": "0df4d4a3-2301-4870-9bbf-21a2d42ba99f", "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-workflow9xzfh/series-workflow9xzfh-build-action-2466475144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:56:15 +0000 UTC FinishedAt: 2026-09-09 17:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:56:15 +0000 UTC FinishedAt: 2026-09-09 17:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:56:15 +0000 UTC FinishedAt: 2026-09-09 17:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:56:15 +0000 UTC FinishedAt: 2026-09-09 17:57:57 +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:*0df4d4a3-2301-4870-9bbf-21a2d42ba99f,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-workflow9xzfh/series-workflow9xzfh-build-action-2466475144/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-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:58:07 +0000 UTC FinishedAt: 2026-09-09 21:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:58:07 +0000 UTC FinishedAt: 2026-09-09 21:01:22 +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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"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:*a38f5c42-7ee7-425a-a8ee-4df69ede8b98,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0df4d4a3-2301-4870-9bbf-21a2d42ba99f,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-workflow9xzfh/series-workflow9xzfh-build-action-4107076535/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-workflow9xzfh/series-workflow9xzfh-build-action-2466475144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:58:07 +0000 UTC FinishedAt: 2026-09-09 17:58:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:58:07 +0000 UTC FinishedAt: 2026-09-09 17:58:14 +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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"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-workflow9xzfh/series-workflow9xzfh-convert-artifact-7389141/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:58:07 +0000 UTC FinishedAt: 2026-09-09 17:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:58:07 +0000 UTC FinishedAt: 2026-09-09 17:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:58:07 +0000 UTC FinishedAt: 2026-09-09 17:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:58:17 +0000 UTC FinishedAt: 2026-09-09 21:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xzfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"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":["ctnetlink_filter_match_tuple","ctnetlink_filter_match","ctnetlink_dump_table","ctnetlink_flush_conntrack","ctnetlink_get_conntrack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CT_NETLINK","IPV6","NETFILTER"],"series_id":"4be89dfc-418a-4933-be0b-6c766dc67885","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-09 17:58:17 +0000 UTC FinishedAt: 2026-09-09 21:01:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a38f5c42-7ee7-425a-a8ee-4df69ede8b98,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0df4d4a3-2301-4870-9bbf-21a2d42ba99f,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-workflow9xzfh/series-workflow9xzfh-build-action-4107076535/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-workflow9xzfh/series-workflow9xzfh-build-action-2466475144/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-workflow9xzfh/series-workflow9xzfh-convert-artifact-7389141/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,}