Name: series-workflow6x9wx Phase: Succeeded StartedAt: 2026-06-27 00:09:47 +0000 UTC FinishedAt: 2026-06-27 04:11:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[0] Phase: Succeeded StartedAt: 2026-06-27 00:09:47 +0000 UTC FinishedAt: 2026-06-27 00:20:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[0].run-triage Phase: Succeeded StartedAt: 2026-06-27 00:09:47 +0000 UTC FinishedAt: 2026-06-27 00:20:37 +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": "fe9f4ee6c61a1410afd73bf011de5ae618004796", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CT_NETLINK_HELPER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "fe9f4ee6c61a1410afd73bf011de5ae618004796", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CT_NETLINK_HELPER" ], "series_id": "636d481a-db05-4649-a58d-023f412402aa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfnl_cthelper_expect_policy", "nfnl_cthelper_parse_expect_policy", "nfnl_cthelper_new" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5JiMzNDssCiAgICAmIzM0O25mbmxfY3RoZWxwZXJfcGFyc2VfZXhwZWN0X3BvbGljeSYjMzQ7LAogICAgJiMzNDtuZm5sX2N0aGVscGVyX25ldyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBvZiBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgc3BlY2lmaWNhbGx5IGZpeGluZyBhIGNhc2Ugd2hlcmUgbWF4X2V4cGVjdGVkIGlzIDAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXRmaWx0ZXIgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MjhkNzFlZjg1NTgxNzk2OTc0ZTg0ODY0ZjgxNzU1OGE3MWI0ZjIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDA6MTg6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbmluZGV4IGYxNDYwYjY4M2Q3YWY3Li4yY2JjY2E5MTEwZGJmNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbkBAIC0xNjMsNiAmIzQzOzE2Myw4IEBAIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cGVjdF9wb2xpY3ksXG4gXHRcdCAgICB0YltORkNUSF9QT0xJQ1lfTkFNRV0sIE5GX0NUX0hFTFBFUl9OQU1FX0xFTik7XG4gXHRleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZCA9XG4gXHRcdG50b2hsKG5sYV9nZXRfYmUzMih0YltORkNUSF9QT0xJQ1lfRVhQRUNUX01BWF0pKTtcbiYjNDM7XHRpZiAoIWV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkKVxuJiM0MztcdFx0ZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgPSBORl9DVF9FWFBFQ1RfTUFYX0NOVDtcbiBcdGlmIChleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZCBcdTAwM2UgTkZfQ1RfRVhQRUNUX01BWF9DTlQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5JiMzNDssCiAgICAmIzM0O25mbmxfY3RoZWxwZXJfcGFyc2VfZXhwZWN0X3BvbGljeSYjMzQ7LAogICAgJiMzNDtuZm5sX2N0aGVscGVyX25ldyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBvZiBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgc3BlY2lmaWNhbGx5IGZpeGluZyBhIGNhc2Ugd2hlcmUgbWF4X2V4cGVjdGVkIGlzIDAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXRmaWx0ZXIgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYyOGQ3MWVmODU1ODE3OTY5NzRlODQ4NjRmODE3NTU4YTcxYjRmMjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1biAyNyAwMDoxODowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jCmluZGV4IGYxNDYwYjY4M2Q3YWY3Li4yY2JjY2E5MTEwZGJmNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jCkBAIC0xNjMsNiAmIzQzOzE2Myw4IEBAIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cGVjdF9wb2xpY3ksCiAJCSAgICB0YltORkNUSF9QT0xJQ1lfTkFNRV0sIE5GX0NUX0hFTFBFUl9OQU1FX0xFTik7CiAJZXhwZWN0X3BvbGljeS0mZ3Q7bWF4X2V4cGVjdGVkID0KIAkJbnRvaGwobmxhX2dldF9iZTMyKHRiW05GQ1RIX1BPTElDWV9FWFBFQ1RfTUFYXSkpOwomIzQzOwlpZiAoIWV4cGVjdF9wb2xpY3ktJmd0O21heF9leHBlY3RlZCkKJiM0MzsJCWV4cGVjdF9wb2xpY3ktJmd0O21heF9leHBlY3RlZCA9IE5GX0NUX0VYUEVDVF9NQVhfQ05UOwogCWlmIChleHBlY3RfcG9saWN5LSZndDttYXhfZXhwZWN0ZWQgJmd0OyBORl9DVF9FWFBFQ1RfTUFYX0NOVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5OQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5mbmV0bGlua19jdGhlbHBlci5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBjaGFuZ2VzIHRvIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIGNvZGUgc25pcHBldCBzaG93cyB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIGBleHBlY3RfcG9saWN5LSZndDttYXhfZXhwZWN0ZWRgIGFmdGVyIHJldHJpZXZpbmcgaXQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGUgYE5GQ1RIX1BPTElDWV9FWFBFQ1RfTUFYYC4KCkJhc2ljYWxseSwgdGhleSYjMzk7dmUgYWRkZWQgYSBjb25kaXRpb25hbCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYE5GQ1RIX1BPTElDWV9FWFBFQ1RfTUFYYCBpcyB6ZXJvLiBJZiBpdCYjMzk7cyB6ZXJvLCB0aGUgY29kZSBub3cgZGVmYXVsdHMgYGV4cGVjdF9wb2xpY3ktJmd0O21heF9leHBlY3RlZGAgdG8gYE5GX0NUX0VYUEVDVF9NQVhfQ05UYC4gQWZ0ZXIgdGhhdCwgdGhleSBoYXZlIHRoZSBvcmlnaW5hbCBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSB2YWx1ZSBpcyBub3QgZ3JlYXRlciB0aGFuIGBORl9DVF9FWFBFQ1RfTUFYX0NOVGAsIHJldHVybmluZyBhbiBlcnJvciBpZiBpdCBpcy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgZ29vZCBzYWZldHkgbWVhc3VyZS4gUHJldmlvdXNseSwgYSB6ZXJvIHZhbHVlIGZvciBgbWF4X2V4cGVjdGVkYCBtaWdodCBoYXZlIGNhdXNlZCBpc3N1ZXMsIG1heWJlIGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBvciBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2UsIGVzcGVjaWFsbHkgaWYgdGhlIGNvZGUgd2FzbiYjMzk7dCBoYW5kbGluZyB0aGUgemVybyBjYXNlIHByb3Blcmx5LiBEZWZhdWx0aW5nIHRvIGBORl9DVF9FWFBFQ1RfTUFYX0NOVGAgZ2l2ZXMgaXQgYSByZWFzb25hYmxlLCBzYWZlIG1heGltdW0uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgaWYgSSBjYW4gZmluZCB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBwYXRjaCwgYnV0IG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIGxpa2UgYSBkZWNlbnQgYWRkaXRpb24gZm9yIHJvYnVzdG5lc3MuIEl0JiMzOTtzIGEgZmFpcmx5IHN0YW5kYXJkIGFwcHJvYWNoIHRvIGhhbmRsaW5nIHBvdGVudGlhbGx5IG1pc3Npbmcgb3IgaW52YWxpZCBpbnB1dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MTQ1PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTQ2Om5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cGVjdF9wb2xpY3ksXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE0Ny1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTE3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTc4Om5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXRbTkZDVEhfUE9MSUNZX1NFVF9NQVgmIzQzOzFdID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xNzktXHRbTkZDVEhfUE9MSUNZX1NFVF9OVU1dID0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUyksXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xODM9bmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xOTAtXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9TRVRfTUFYLCBhdHRyLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoxOTE6XHRcdFx0XHRcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldCxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTkyLVx0XHRcdFx0XHQgIE5VTEwpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjA4LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyMDk6XHRcdHJldCA9IG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeShcdTAwMjZoZWxwZXItXHUwMDNlZXhwZWN0X3BvbGljeVtpXSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjEwLVx0XHRcdFx0XHRcdCAgdGJbTkZDVEhfUE9MSUNZX1NFVCYjNDM7aV0pO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzY4PXN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zNzUtXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9TRVRfTUFYLCBhdHRyLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozNzY6XHRcdFx0XHRcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldCxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzc3LVx0XHRcdFx0XHQgIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgQ29ubmVjdGlvbiBUcmFja2luZyBIZWxwZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAuIEkgcmVjb2duaXplIHRoYXQgZnVuY3Rpb247IGl0JiMzOTtzIGEga2V5IHBhcnQgb2YgaG93IHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgc3lzdGVtIGhhbmRsZXMgZXhwZWN0ZWQgY29ubmVjdGlvbnMsIHJpZ2h0PyBJdCYjMzk7cyBjYWxsZWQgYnkgYG5mbmxfY3RoZWxwZXJfcGFyc2VfZXhwZWN0X3BvbGljeWAgYW5kLCBJICp0aGluayosIGFsc28gYnkgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeWAg4oCTIGJ1dCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBsYXN0IHBhcnQuIEJlc3QgdG8gYmUgc3VyZS4gVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgc2hvdWxkIHByb2JhYmx5IGdvIGJhY2sgYW5kIGxvb2sgYXQgdGhlIGNvbnRyb2wgZmxvdyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIHRvIHNlZSBleGFjdGx5IGhvdyBhbmQgd2hlbiB0aGlzIHBvbGljeSBnZXRzIG1vZGlmaWVkLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGEgTmV0ZmlsdGVyIG1vZHVsZSwgdGhlIGZpcnN0IHN0ZXAgaXMgdG8gZGlnIGludG8gYG5mbmV0bGlua19jdGhlbHBlci5jYCBhbmQgZmlndXJlIG91dCB3aGF0IGl0IGRvZXMgaW4gcmVsYXRpb24gdG8gdGhlIEtjb25maWcgZmlsZS4gSSYjMzk7bGwgY2hlY2sgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB0aGF0IHBlcnRhaW4gdG8gdGhpcyBzcGVjaWZpYyBhcmVhIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFBlcmhhcHMgYSBzcGVjaWZpYyBmZWF0dXJlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgY29uZmlndXJhdGlvbiB0aGF0IGlzIHJlbGV2YW50IHRvIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgd2hpY2ggZmVhdHVyZXMgYXJlIHN1cHBvcnRlZC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYWxsb3cgbWUgdG8gYW5hbHl6ZSB0aGUgcGF0Y2ggbW9yZSBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZm5ldGxpbmtfY3RoZWxwZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0zOD1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19USU1FT1VUKSAmIzQzOz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM5Om9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUikgJiM0Mzs9IG5mbmV0bGlua19jdGhlbHBlci5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgQ29ubmVjdGlvbiBUcmFja2luZyBOZXRsaW5rIEhlbHBlcioqCgpBbHJpZ2h0LCBJJiMzOTttIHN0YXJpbmcgYXQgdGhpcyBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIGNvbmZpZyBvcHRpb24uIEl0JiMzOTtzIG9idmlvdXNseSBzaWduaWZpY2FudCwgZGVhbGluZyB3aXRoIE5ldGZpbHRlciBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggTmV0bGluayBmb3IgY29ubmVjdGlvbiB0cmFja2luZy4gVGhlIG9idmlvdXMgbmV4dCBzdGVwIGZvciBtZSwgZ2l2ZW4gbXkgZXhwZXJ0aXNlLCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayBmb3IgYW55ICpvdGhlciogZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE5GX0NUX05FVExJTktfSEVMUEVSYC4gSSYjMzk7bSB0aGlua2luZywgJiMzNDt3aGF0IG90aGVyIGZlYXR1cmVzIG9yIG1vZHVsZXMgcmVseSBvbiAqdGhpcyogc3BlY2lmaWMgZnVuY3Rpb25hbGl0eT8mIzM0OyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgZGVwZW5kZW5jeSB0cmVlLCBiZWNhdXNlIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycmVsYXRpb25zaGlwcyBpcyBrZXkuIElmIEkgZG9uJiMzOTt0IGtub3cgdGhlIGNvbXBsZXRlIHNldCBvZiBkZXBlbmRlbmNpZXMgSSBjb3VsZCBjYXVzZSBwcm9ibGVtcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZmlndXJpbmcgb3V0IGlmIHRoZSBpbXBsaWNhdGlvbnMgb2Ygc2V0dGluZyB0aGlzIGFyZSBzdHJhaWdodGZvcndhcmQgb3IgaWYgSSBuZWVkIHRvIGFkZHJlc3MgYSB3aG9sZSBjYXNjYWRlIG9mIHJlbGF0ZWQgY29uZmlncy4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgY2hhbmdlIHRoZSB2YWx1ZSBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNzM9Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg1OmNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4Ni1cdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MzEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCBwcm9tcHQ6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUgb2YgTkZfQ1RfTkVUTElOS19IRUxQRVIqKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBzdW1tYXJpemUgYSB0aG91Z2h0IHByb2Nlc3MgZm9jdXNlZCBvbiBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlICpkZXBlbmRlbmNpZXMqIG9mIHRoaXMgc3BlY2lmaWMgY29tcG9uZW50LiBJIGtub3cgaXQmIzM5O3MgYSBrZXJuZWwgbW9kdWxlLCBsaWtlbHkgcmVsYXRlZCB0byBuZXRmaWx0ZXIgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGFuZCB0aGF0ICYjMzQ7TkVUTElOSyYjMzQ7IHN1Z2dlc3RzIGNvbW11bmljYXRpb24gd2l0aCB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgbXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXNzZWN0IHdoYXQgb3RoZXIga2VybmVsIG1vZHVsZXMgb3IgZnVuY3Rpb25zIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAgcmVsaWVzIHVwb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHdoaWNoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrIG1pZ2h0IGJlIGludGVncmF0ZWQsIGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyLXNwYWNlIHRvb2xzIGFuZCBpbnRlcmZhY2VzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IHRoaXMgaGVscGVyICpwcm92aWRlcyogYW5kIGZyb20gd2hpY2ggcGFydHMgb2YgdGhlIGtlcm5lbCBpdCYjMzk7cyB1c2VkLiBUaGlzIGRlcGVuZGVuY3kgYW5hbHlzaXMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGNoYW5nZXMgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bGwgYmUgdGhpbmtpbmcgaW4gdGVybXMgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYW5kIHBvdGVudGlhbCBidWlsZCBvcmRlciBjb25jZXJucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4NTpcdGNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxuIDM4NjpcdFx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluayYjMzk7XG4gMzg3Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAzODg6XHRcdGRlcGVuZHMgb24gTkZfQ1RfTkVUTElOS1xuIDM4OTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxuIDM5MDpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG4gMzkxOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDM5MjpcdFx0aGVscFxuIDM5MzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSB1c2VyLXNwYWNlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyc1xuIDM5NDpcdFx0ICBpbmZyYXN0cnVjdHVyZS5cbiAzOTU6XHRcbiAzOTY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgYE4mIzM5Oy5cbiAzOTc6XHRcbiAzOTg6XHRjb25maWcgTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxuIDM5OTpcdFx0Ym9vbCBcJiMzNDtORlFVRVVFIGFuZCBORkxPRyBpbnRlZ3JhdGlvbiB3aXRoIENvbm5lY3Rpb24gVHJhY2tpbmdcJiMzNDtcbiA0MDA6XHRcdGRlZmF1bHQgblxuIDQwMTpcdFx0ZGVwZW5kcyBvbiAoTkVURklMVEVSX05FVExJTktfUVVFVUUgfHwgTkVURklMVEVSX05FVExJTktfTE9HKSBcdTAwMjZcdTAwMjYgTkZfQ1RfTkVUTElOS1xuIDQwMjpcdFx0aGVscFxuIDQwMzpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBORlFVRVVFIGFuZCBORkxPRyBjYW4gaW5jbHVkZVxuIDQwNDpcdFx0ICBDb25uZWN0aW9uIFRyYWNraW5nIGluZm9ybWF0aW9uIHRvZ2V0aGVyIHdpdGggdGhlIHBhY2tldCBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTM4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgQ29ubmVjdGlvbiBUcmFja2luZyBIZWxwZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhbiBpc3N1ZSB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBOZXRsaW5rIGludGVyZmFjZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBjb3JlIGZvY3VzIGlzIGFyb3VuZCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCB3aGljaCBpcyB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nIGF0IHRoZSByb290IG9mIHRoaXMuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgTmV0bGluayBtZXNzYWdlcy4gSXQgYWxzbyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYG5mbmxfY3RoZWxwZXJfbmV3YCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgYmVpbmcgaW5pdGlhbGl6ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGNvcnJlY3RzIGEgc2NlbmFyaW8gd2hlcmUgYG1heF9leHBlY3RlZGAgaXMgbWlzdGFrZW5seSBzZXQgdG8gemVyby4gVGhlIHBhdGNoIHdpbGwgc2V0IGl0IHRvIGBORl9DVF9FWFBFQ1RfTUFYX0NOVGAgaW4gdGhpcyBzcGVjaWZpYyBzY2VuYXJpbywgd2hpY2ggbGlrZWx5IHByZXZlbnRzIGEgcG90ZW50aWFsIGlzc3VlIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2l0aCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIuCgpJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIGBuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3lgIGFuZCBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5YCBmb3IgY29tcGxldGVuZXNzIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSB3b3JrZmxvdy4gQnV0IGZyb20gYSBjdXJzb3J5IGdsYW5jZSwgdGhlIGZpeCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGFuIGVkZ2UgY2FzZSBoYW5kbGluZyBhbmQgYSBmdW5jdGlvbmFsIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzkyPW5mbmxfY3RoZWxwZXJfdXBkYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDI2LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0Mjc6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MjgtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTc0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZubF9jdGhlbHBlcl9jYltORk5MX01TR19DVEhFTFBFUl9NQVhdID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NTAtXHRbTkZOTF9NU0dfQ1RIRUxQRVJfTkVXXVx0PSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc1MTpcdFx0LmNhbGxcdFx0PSBuZm5sX2N0aGVscGVyX25ldyxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzUyLVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfTVVURVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyODMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCYjMzk7cyBwcmV2ZW50aW5nIGBtYXhfZXhwZWN0ZWRgIGZyb20gYmVpbmcgc2V0IHRvIHplcm8uIEkgY2FuIGltbWVkaWF0ZWx5IHNlZSB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0JiMzOTtzIGxpa2VseSBiZWluZyBkb25lIHRvIGF2b2lkIGEgcG90ZW50aWFsIGJ1ZyBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLgoKTG9va2luZyBhdCB0aGUgY29uZmlncywgaXQgbG9va3MgbGlrZSB0aGlzIGlzIHJlbGF0ZWQgdG8gYE5GX0NUX05FVExJTktfSEVMUEVSYC4gTGV0IG1lIHNlZS4uLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIGEgZmV3IGtleSBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UgZnVsbHk6IGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLCBgbmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5YCwgYG5mbmxfY3RoZWxwZXJfbmV3YCwgYW5kIGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lgLiBUaGVzZSBhcmUgYWxsIHZlcnkgcmVsZXZhbnQgdG8gdGhlIGV4cGVjdGF0aW9uIGFuZCBwb2xpY3kgaGFuZGxpbmcgd2l0aGluIHRoaXMgTmV0bGluayBoZWxwZXIuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeWAgZXZlbiAqZXhpc3RzKi4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGl0cyBwcmVzZW5jZSBpbiB0aGUgY29kZWJhc2UgdG8gbWFrZSBzdXJlIHRoZSBwYXRjaCBpcyB0YXJnZXRpbmcgYSB2YWxpZCBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzdHJvbmcgaW5kaWNhdGlvbiBvZiB0aGUgcGF0Y2gmIzM5O3Mgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0yOTY9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyOTc6bmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZShjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKnBvbGljeSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjk4LVx0XHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpuZXdfcG9saWN5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzI3LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozMjg6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTMyOS1cdFx0XHRcdFx0ICAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM0OC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MzQ5Olx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lKFx1MDAyNmhlbHBlci1cdTAwM2VleHBlY3RfcG9saWN5W2ldLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zNTAtXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2bmV3X3BvbGljeVtpXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MzY4OnN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM2OS1cdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzg3LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozODg6XHRyZXR1cm4gbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X2FsbCh0YiwgaGVscGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzg5LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTM5Mj1uZm5sX2N0aGVscGVyX3VwZGF0ZShjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQwNC1cdGlmICh0YltORkNUSF9QT0xJQ1ldKSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjQwNTpcdFx0cmV0ID0gbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KGhlbHBlciwgdGJbTkZDVEhfUE9MSUNZXSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQwNi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI5MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBuZm5sX2N0aGVscGVyYCBQb2xpY3kgVXBkYXRlIEZsb3cqKgoKT2theSwgc28gSSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhhdCBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5YCAqZG9lcyogZXhpc3QsIHdoaWNoIGlzIGdvb2QuIE5vdywgSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBob3cgYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAgaXMgaGFuZGxlZCDigJMgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQsIGFmdGVyIGFsbC4gUmlnaHQsIGBuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3lgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0IGRpcmVjdGx5LCB0aGF0IG11Y2ggSSByZW1lbWJlci4gVGhlIGluaXRpYWwgdGhvdWdodCB3YXMgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeWAgKml0c2VsZiogZGlkbiYjMzk7dCBjYWxsIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgIGRpcmVjdGx5LCBidXQgaXQgbG9va3MgbGlrZSBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X2FsbGAgbWlnaHQuIEl0IGNhbGxzIGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lYCwgYW5kIEkgZG9uJiMzOTt0IHRoaW5rIHRoYXQgY2FsbHMgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLiBIb3dldmVyLCB3YWl0IGEgbWludXRlLi4uIGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lgIGNhbGxzIGBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWRgLCBhbmQgdGhlbiBjYWxscyBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X2FsbGAuLi4gYW5kIHRoYXQmIzM5O3MgdGhlIG9uZSBJIG5lZWQgdG8gZm9jdXMgb24uIFNvLCBpcyB0aGF0IHdoZXJlIHRoZSBjb25uZWN0aW9uIGxpZXM/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X2FsbGAgaXMgdGhlIHBhdGggdG8gYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAuIExvb2tzIGxpa2UgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9hbGxgIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI1Olx0XHRyZXR1cm4gMDtcbiAzMjY6XHR9XG4gMzI3Olx0XG4gMzI4Olx0c3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHN0cnVjdCBubGF0dHIgKnRiW10sXG4gMzI5Olx0XHRcdFx0XHRcdCAgIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIpXG4gMzMwOlx0e1xuIDMzMTpcdFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpuZXdfcG9saWN5O1xuIDMzMjpcdFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpwb2xpY3k7XG4gMzMzOlx0XHRpbnQgaSwgcmV0ID0gMDtcbiAzMzQ6XHRcbiAzMzU6XHRcdG5ld19wb2xpY3kgPSBrbWFsbG9jX29ianMoKm5ld19wb2xpY3ksIGhlbHBlci1cdTAwM2VleHBlY3RfY2xhc3NfbWF4ICYjNDM7IDEpO1xuIDMzNjpcdFx0aWYgKCFuZXdfcG9saWN5KVxuIDMzNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzMzg6XHRcbiAzMzk6XHRcdC8qIENoZWNrIGZpcnN0IHRoYXQgYWxsIHBvbGljeSBhdHRyaWJ1dGVzIGFyZSB3ZWxsLWZvcm1lZCwgc28gd2UgZG9uJiMzOTt0XG4gMzQwOlx0XHQgKiBsZWF2ZSB0aGluZ3MgaW4gaW5jb25zaXN0ZW50IHN0YXRlIG9uIGVycm9ycy5cbiAzNDE6XHRcdCAqL1xuIDM0MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaGVscGVyLVx1MDAzZWV4cGVjdF9jbGFzc19tYXggJiM0MzsgMTsgaSYjNDM7JiM0MzspIHtcbiAzNDM6XHRcbiAzNDQ6XHRcdFx0aWYgKCF0YltORkNUSF9QT0xJQ1lfU0VUICYjNDM7IGldKSB7XG4gMzQ1Olx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiAzNDY6XHRcdFx0XHRnb3RvIGVycjtcbiAzNDc6XHRcdFx0fVxuIDM0ODpcdFxuIDM0OTpcdFx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lKFx1MDAyNmhlbHBlci1cdTAwM2VleHBlY3RfcG9saWN5W2ldLFxuIDM1MDpcdFx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNm5ld19wb2xpY3lbaV0sXG4gMzUxOlx0XHRcdFx0XHRcdFx0ICAgICAgdGJbTkZDVEhfUE9MSUNZX1NFVCAmIzQzOyBpXSk7XG4gMzUyOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMzUzOlx0XHRcdFx0Z290byBlcnI7XG4gMzU0Olx0XHR9XG4gMzU1Olx0XHQvKiBOb3cgd2UgY2FuIHNhZmVseSB1cGRhdGUgdGhlbS4gKi9cbiAzNTY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhlbHBlci1cdTAwM2VleHBlY3RfY2xhc3NfbWF4ICYjNDM7IDE7IGkmIzQzOyYjNDM7KSB7XG4gMzU3Olx0XHRcdHBvbGljeSA9IChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKilcbiAzNTg6XHRcdFx0XHRcdFx1MDAyNmhlbHBlci1cdTAwM2VleHBlY3RfcG9saWN5W2ldO1xuIDM1OTpcdFx0XHRwb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkID0gbmV3X3BvbGljeVtpXS5tYXhfZXhwZWN0ZWQ7XG4gMzYwOlx0XHRcdHBvbGljeS1cdTAwM2V0aW1lb3V0XHQ9IG5ld19wb2xpY3lbaV0udGltZW91dDtcbiAzNjE6XHRcdH1cbiAzNjI6XHRcbiAzNjM6XHRlcnI6XG4gMzY0Olx0XHRrZnJlZShuZXdfcG9saWN5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ3NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvbm5lY3Rpb24gVHJhY2tpbmcgSGVscGVyIFBvbGljeSBVcGRhdGUqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZWAgKmNhbGxzKiBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YD8gVGhhdCBzZWVtcyBhIGxpdHRsZSB1bnVzdWFsLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHJlbGF0aW9uc2hpcCBiZXR0ZXIuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGNhbGwgc3RhY2suIExldCYjMzk7cyBkaWcgaW50byBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZWAgaXRzZWxmIHRvIHNlZSBleGFjdGx5IGhvdyBhbmQgd2h5IHRoaXMgY2FsbCB0byBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCBpcyBoYXBwZW5pbmcuIFVuZGVyc3RhbmRpbmcgdGhpcyBpbnRlcmFjdGlvbiBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIHBvbGljeSB1cGRhdGUgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTA6XHRcdGtmcmVlKGhlbHBlcik7XG4gMjkxOlx0ZXJyX2N0aDpcbiAyOTI6XHRcdGtmcmVlKG5mY3RoKTtcbiAyOTM6XHRcdHJldHVybiByZXQ7XG4gMjk0Olx0fVxuIDI5NTpcdFxuIDI5NjpcdHN0YXRpYyBpbnRcbiAyOTc6XHRuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqcG9saWN5LFxuIDI5ODpcdFx0XHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpuZXdfcG9saWN5LFxuIDI5OTpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcbiAzMDA6XHR7XG4gMzAxOlx0XHRzdHJ1Y3QgbmxhdHRyICp0YltORkNUSF9QT0xJQ1lfTUFYICYjNDM7IDFdO1xuIDMwMjpcdFx0aW50IGVycjtcbiAzMDM6XHRcbiAzMDQ6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTkZDVEhfUE9MSUNZX01BWCwgYXR0cixcbiAzMDU6XHRcdFx0XHRcdFx0ICBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2wsIE5VTEwpO1xuIDMwNjpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiAzMDc6XHRcdFx0cmV0dXJuIGVycjtcbiAzMDg6XHRcbiAzMDk6XHRcdGlmICghdGJbTkZDVEhfUE9MSUNZX05BTUVdIHx8XG4gMzEwOlx0XHQgICAgIXRiW05GQ1RIX1BPTElDWV9FWFBFQ1RfTUFYXSB8fFxuIDMxMTpcdFx0ICAgICF0YltORkNUSF9QT0xJQ1lfRVhQRUNUX1RJTUVPVVRdKVxuIDMxMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzMTM6XHRcbiAzMTQ6XHRcdGlmIChubGFfc3RyY21wKHRiW05GQ1RIX1BPTElDWV9OQU1FXSwgcG9saWN5LVx1MDAzZW5hbWUpKVxuIDMxNTpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDMxNjpcdFxuIDMxNzpcdFx0bmV3X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgPVxuIDMxODpcdFx0XHRudG9obChubGFfZ2V0X2JlMzIodGJbTkZDVEhfUE9MSUNZX0VYUEVDVF9NQVhdKSk7XG4gMzE5Olx0XHRpZiAobmV3X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgXHUwMDNlIE5GX0NUX0VYUEVDVF9NQVhfQ05UKVxuIDMyMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzMjE6XHRcbiAzMjI6XHRcdG5ld19wb2xpY3ktXHUwMDNldGltZW91dCA9XG4gMzIzOlx0XHRcdG50b2hsKG5sYV9nZXRfYmUzMih0YltORkNUSF9QT0xJQ1lfRVhQRUNUX1RJTUVPVVRdKSk7XG4gMzI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNjQKCQkJCQkJCW91dHB1dDogMTE4CgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBPdmVyc2lnaHQqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIHJ1bm5pbmcgdGhyb3VnaCBteSBtaW5kLiBJIGluaXRpYWxseSBzYXcgYSBidWcsIGFuZCBteSBmaXJzdCB0aG91Z2h0IHdhcywgJiMzNDtXYWl0LCBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZWAgaGFzIHRoZSBzYW1lIGJ1ZyEmIzM0OyBJIGp1bXBlZCB0aGUgZ3VuIGEgbGl0dGxlLCB0aG91Z2guIFRoZSBwYXRjaCBvbmx5IHRvdWNoZWQgYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAsIHNvIGxldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGF0IGNvZGUgYWdhaW4gdG8gbWFrZSBzdXJlIEkmIzM5O20gc2VlaW5nIGl0IHJpZ2h0OgoKYGBgYwoJZXhwZWN0X3BvbGljeS0mZ3Q7bWF4X2V4cGVjdGVkID0KCQludG9obChubGFfZ2V0X2JlMzIodGJbTkZDVEhfUE9MSUNZX0VYUEVDVF9NQVhdKSk7CiYjNDM7CWlmICghZXhwZWN0X3BvbGljeS0mZ3Q7bWF4X2V4cGVjdGVkKQomIzQzOwkJZXhwZWN0X3BvbGljeS0mZ3Q7bWF4X2V4cGVjdGVkID0gTkZfQ1RfRVhQRUNUX01BWF9DTlQ7CiAJaWYgKGV4cGVjdF9wb2xpY3ktJmd0O21heF9leHBlY3RlZCAmZ3Q7IE5GX0NUX0VYUEVDVF9NQVhfQ05UKQogCQlyZXR1cm4gLUVJTlZBTDsKYGBgCgpSaWdodCwgaXQgbG9va3MgZ29vZC4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgYG1heF9leHBlY3RlZGAgbWlnaHQgYmUgemVybywgd2hpY2ggaXMgbGlrZWx5IHRoZSByb290IG9mIHRoZSBidWcgSSB3YXMgdGhpbmtpbmcgb2YuCgpJIHdhcyBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZiwgYW5kIHdhcyBjb25jZXJuZWQgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9vbmVgIHdhcyBtaXNzZWQsIGJ1dCBpdCB3YXMgbm90LiBJJiMzOTt2ZSByZWNoZWNrZWQgdGhlIHBhdGNoIGFuZCBpdCBvbmx5IG1vZGlmaWVzIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLiBTbyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gdGhlc2UgdHdvLCBhbmQgZW5zdXJlIHRoaXMgZml4IG1ha2VzIGl0IGludG8gYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9vbmVgLgoKQXQgdGhpcyBwb2ludCwgSSYjMzk7bSBjb25maWRlbnQgdGhlIHBhdGNoIGl0c2VsZiBpcyBmdW5jdGlvbmFsLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gY2xlYXIgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCwgYG5mbmxfY3RoZWxwZXJfcGFyc2VfZXhwZWN0X3BvbGljeWAsIGFuZCBgbmZubF9jdGhlbHBlcl9uZXdgLgoKTm93LCByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb25zLiBXZSYjMzk7cmUgd29ya2luZyB3aXRoIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgY29uZmlnLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBBaCwgeWVzLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIGRlcGVuZHMgb24gYE5GX0NUX05FVExJTktgLCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLCBgTkVURklMVEVSX05FVExJTktfR0xVRV9DVGAsIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYnV0IGp1c3Qgc3BlY2lmeWluZyBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB0aGUgY29udGV4dC4KCldpdGggdGhhdCwgSSYjMzk7bSByZWFkeSB0byBtYXJrIHRoaXMgYXMgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DVF9ORVRMSU5LX0hFTFBFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeSYjMzQ7LAogICAgJiMzNDtuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3kmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgbmV0bGluayBhdHRyaWJ1dGVzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIHNwZWNpZmljYWxseSBmaXhpbmcgYSBjYXNlIHdoZXJlIG1heF9leHBlY3RlZCBpcyAwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DVF9ORVRMSU5LX0hFTFBFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeSYjMzQ7LAogICAgJiMzNDtuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3kmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgbmV0bGluayBhdHRyaWJ1dGVzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIHNwZWNpZmljYWxseSBmaXhpbmcgYSBjYXNlIHdoZXJlIG1heF9leHBlY3RlZCBpcyAwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTg6MDQuNTUzOTk0NjQ0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMDY3NTQxMTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NUX05FVExJTktfSEVMUEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3lcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfbmV3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgbmV0bGluayBhdHRyaWJ1dGVzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIHNwZWNpZmljYWxseSBmaXhpbmcgYSBjYXNlIHdoZXJlIG1heF9leHBlY3RlZCBpcyAwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoxODowNC41NTM5OTk0MzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjEyODc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYyOGQ3MWVmODU1ODE3OTY5NzRlODQ4NjRmODE3NTU4YTcxYjRmMjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDA6MTg6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcXG5pbmRleCBmMTQ2MGI2ODNkN2FmNy4uMmNiY2NhOTExMGRiZjUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcXG5AQCAtMTYzLDYgKzE2Myw4IEBAIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cGVjdF9wb2xpY3ksXFxuIFxcdFxcdCAgICB0YltORkNUSF9QT0xJQ1lfTkFNRV0sIE5GX0NUX0hFTFBFUl9OQU1FX0xFTik7XFxuIFxcdGV4cGVjdF9wb2xpY3ktXFx1MDAzZW1heF9leHBlY3RlZCA9XFxuIFxcdFxcdG50b2hsKG5sYV9nZXRfYmUzMih0YltORkNUSF9QT0xJQ1lfRVhQRUNUX01BWF0pKTtcXG4rXFx0aWYgKCFleHBlY3RfcG9saWN5LVxcdTAwM2VtYXhfZXhwZWN0ZWQpXFxuK1xcdFxcdGV4cGVjdF9wb2xpY3ktXFx1MDAzZW1heF9leHBlY3RlZCA9IE5GX0NUX0VYUEVDVF9NQVhfQ05UO1xcbiBcXHRpZiAoZXhwZWN0X3BvbGljeS1cXHUwMDNlbWF4X2V4cGVjdGVkIFxcdTAwM2UgTkZfQ1RfRVhQRUNUX01BWF9DTlQpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTg6MDUuMDkwNzE0NDU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDE1MzA4MTEwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ1RfTkVUTElOS19IRUxQRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfcGFyc2VfZXhwZWN0X3BvbGljeVwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9uZXdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBvZiBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgc3BlY2lmaWNhbGx5IGZpeGluZyBhIGNhc2Ugd2hlcmUgbWF4X2V4cGVjdGVkIGlzIDAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXRmaWx0ZXIgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjI4ZDcxZWY4NTU4MTc5Njk3NGU4NDg2NGY4MTc1NThhNzFiNGYyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVuIDI3IDAwOjE4OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbmluZGV4IGYxNDYwYjY4M2Q3YWY3Li4yY2JjY2E5MTEwZGJmNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbkBAIC0xNjMsNiArMTYzLDggQEAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwZWN0X3BvbGljeSxcbiBcdFx0ICAgIHRiW05GQ1RIX1BPTElDWV9OQU1FXSwgTkZfQ1RfSEVMUEVSX05BTUVfTEVOKTtcbiBcdGV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkID1cbiBcdFx0bnRvaGwobmxhX2dldF9iZTMyKHRiW05GQ1RIX1BPTElDWV9FWFBFQ1RfTUFYXSkpO1xuK1x0aWYgKCFleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZClcbitcdFx0ZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgPSBORl9DVF9FWFBFQ1RfTUFYX0NOVDtcbiBcdGlmIChleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZCBcdTAwM2UgTkZfQ1RfRVhQRUNUX01BWF9DTlQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTg6MDUuMDkwNzE1ODg1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMjE4MTc3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBuZXRmaWx0ZXIgQ29ubmVjdGlvbiBUcmFja2luZyBIZWxwZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmZuZXRsaW5rX2N0aGVscGVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgdG8gYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIFRoZSBjb2RlIHNuaXBwZXQgc2hvd3MgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWRgIGFmdGVyIHJldHJpZXZpbmcgaXQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGUgYE5GQ1RIX1BPTElDWV9FWFBFQ1RfTUFYYC5cblxuQmFzaWNhbGx5LCB0aGV5J3ZlIGFkZGVkIGEgY29uZGl0aW9uYWwgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGBORkNUSF9QT0xJQ1lfRVhQRUNUX01BWGAgaXMgemVyby4gSWYgaXQncyB6ZXJvLCB0aGUgY29kZSBub3cgZGVmYXVsdHMgYGV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkYCB0byBgTkZfQ1RfRVhQRUNUX01BWF9DTlRgLiBBZnRlciB0aGF0LCB0aGV5IGhhdmUgdGhlIG9yaWdpbmFsIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHZhbHVlIGlzIG5vdCBncmVhdGVyIHRoYW4gYE5GX0NUX0VYUEVDVF9NQVhfQ05UYCwgcmV0dXJuaW5nIGFuIGVycm9yIGlmIGl0IGlzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIGdvb2Qgc2FmZXR5IG1lYXN1cmUuIFByZXZpb3VzbHksIGEgemVybyB2YWx1ZSBmb3IgYG1heF9leHBlY3RlZGAgbWlnaHQgaGF2ZSBjYXVzZWQgaXNzdWVzLCBtYXliZSBsZWFkaW5nIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlLCBlc3BlY2lhbGx5IGlmIHRoZSBjb2RlIHdhc24ndCBoYW5kbGluZyB0aGUgemVybyBjYXNlIHByb3Blcmx5LiBEZWZhdWx0aW5nIHRvIGBORl9DVF9FWFBFQ1RfTUFYX0NOVGAgZ2l2ZXMgaXQgYSByZWFzb25hYmxlLCBzYWZlIG1heGltdW0uIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHNlZSBpZiBJIGNhbiBmaW5kIHRoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGlzIHBhdGNoLCBidXQgb24gdGhlIHN1cmZhY2UsIHRoaXMgbG9va3MgbGlrZSBhIGRlY2VudCBhZGRpdGlvbiBmb3Igcm9idXN0bmVzcy4gSXQncyBhIGZhaXJseSBzdGFuZGFyZCBhcHByb2FjaCB0byBoYW5kbGluZyBwb3RlbnRpYWxseSBtaXNzaW5nIG9yIGludmFsaWQgaW5wdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoxODoxNS4xMTI1MzU3NTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5OTcxMDg3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTE0NT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoxNDY6bmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwZWN0X3BvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE0Ny1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MTc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTc4Om5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXRbTkZDVEhfUE9MSUNZX1NFVF9NQVgrMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xNzktXFx0W05GQ1RIX1BPTElDWV9TRVRfTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xODM9bmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE5MC1cXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9TRVRfTUFYLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTkxOlxcdFxcdFxcdFxcdFxcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE5Mi1cXHRcXHRcXHRcXHRcXHQgIE5VTEwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yMDgtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyMDk6XFx0XFx0cmV0ID0gbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5KFxcdTAwMjZoZWxwZXItXFx1MDAzZWV4cGVjdF9wb2xpY3lbaV0sXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yMTAtXFx0XFx0XFx0XFx0XFx0XFx0ICB0YltORkNUSF9QT0xJQ1lfU0VUK2ldKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzY4PXN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3NS1cXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9TRVRfTUFYLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mzc2OlxcdFxcdFxcdFxcdFxcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3Ny1cXHRcXHRcXHRcXHRcXHQgIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoxODoxNi40MTIyNTQzOTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjYyNjIyNjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkFuYWx5emluZyBhIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLiBJIHJlY29nbml6ZSB0aGF0IGZ1bmN0aW9uOyBpdCdzIGEga2V5IHBhcnQgb2YgaG93IHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgc3lzdGVtIGhhbmRsZXMgZXhwZWN0ZWQgY29ubmVjdGlvbnMsIHJpZ2h0PyBJdCdzIGNhbGxlZCBieSBgbmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5YCBhbmQsIEkgKnRoaW5rKiwgYWxzbyBieSBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5YCDigJMgYnV0IEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGxhc3QgcGFydC4gQmVzdCB0byBiZSBzdXJlLiBUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgY29udHJvbCBmbG93IGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgdG8gc2VlIGV4YWN0bHkgaG93IGFuZCB3aGVuIHRoaXMgcG9saWN5IGdldHMgbW9kaWZpZWQuXG5cbkdpdmVuIHRoYXQgdGhpcyBpcyBhIE5ldGZpbHRlciBtb2R1bGUsIHRoZSBmaXJzdCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBuZm5ldGxpbmtfY3RoZWxwZXIuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCBpdCBkb2VzIGluIHJlbGF0aW9uIHRvIHRoZSBLY29uZmlnIGZpbGUuIEknbGwgY2hlY2sgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB0aGF0IHBlcnRhaW4gdG8gdGhpcyBzcGVjaWZpYyBhcmVhIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFBlcmhhcHMgYSBzcGVjaWZpYyBmZWF0dXJlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgY29uZmlndXJhdGlvbiB0aGF0IGlzIHJlbGV2YW50IHRvIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgd2hpY2ggZmVhdHVyZXMgYXJlIHN1cHBvcnRlZC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYWxsb3cgbWUgdG8gYW5hbHl6ZSB0aGUgcGF0Y2ggbW9yZSBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAwOjE4OjIxLjA3NDg3OTMyMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjIyMjUzMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZuZXRsaW5rX2N0aGVscGVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM4PW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX1RJTUVPVVQpICs9IG5mbmV0bGlua19jdHRpbWVvdXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSKSArPSBuZm5ldGxpbmtfY3RoZWxwZXIub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAwOjE4OjIxLjQzNzEwOTY3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MDk0MDAzNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIE5ldGxpbmsgSGVscGVyKipcblxuQWxyaWdodCwgSSdtIHN0YXJpbmcgYXQgdGhpcyBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIGNvbmZpZyBvcHRpb24uIEl0J3Mgb2J2aW91c2x5IHNpZ25pZmljYW50LCBkZWFsaW5nIHdpdGggTmV0ZmlsdGVyIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBOZXRsaW5rIGZvciBjb25uZWN0aW9uIHRyYWNraW5nLiBUaGUgb2J2aW91cyBuZXh0IHN0ZXAgZm9yIG1lLCBnaXZlbiBteSBleHBlcnRpc2UsIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIGZvciBhbnkgKm90aGVyKiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLiBJJ20gdGhpbmtpbmcsIFwid2hhdCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIHJlbHkgb24gKnRoaXMqIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHk/XCIgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGRlcGVuZGVuY3kgdHJlZSwgYmVjYXVzZSB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcnJlbGF0aW9uc2hpcHMgaXMga2V5LiBJZiBJIGRvbid0IGtub3cgdGhlIGNvbXBsZXRlIHNldCBvZiBkZXBlbmRlbmNpZXMgSSBjb3VsZCBjYXVzZSBwcm9ibGVtcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBmaWd1cmluZyBvdXQgaWYgdGhlIGltcGxpY2F0aW9ucyBvZiBzZXR0aW5nIHRoaXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBvciBpZiBJIG5lZWQgdG8gYWRkcmVzcyBhIHdob2xlIGNhc2NhZGUgb2YgcmVsYXRlZCBjb25maWdzLiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBjaGFuZ2UgdGhlIHZhbHVlIGhlcmUuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTg6MzUuNTMxMTIxODQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NDE4MzczNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNzM9Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg1OmNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODYtXFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBpbiB1c2VyLXNwYWNlIHZpYSBOZXRsaW5rJ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoxODozNS44OTUzMDk5MjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY2Mjg2NDI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHByb21wdDpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlIG9mIE5GX0NUX05FVExJTktfSEVMUEVSKipcblxuT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBzdW1tYXJpemUgYSB0aG91Z2h0IHByb2Nlc3MgZm9jdXNlZCBvbiBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlICpkZXBlbmRlbmNpZXMqIG9mIHRoaXMgc3BlY2lmaWMgY29tcG9uZW50LiBJIGtub3cgaXQncyBhIGtlcm5lbCBtb2R1bGUsIGxpa2VseSByZWxhdGVkIHRvIG5ldGZpbHRlciBhbmQgY29ubmVjdGlvbiB0cmFja2luZywgYW5kIHRoYXQgXCJORVRMSU5LXCIgc3VnZ2VzdHMgY29tbXVuaWNhdGlvbiB3aXRoIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpc3NlY3Qgd2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBmdW5jdGlvbnMgYE5GX0NUX05FVExJTktfSEVMUEVSYCByZWxpZXMgdXBvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCB3aGljaCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yayBtaWdodCBiZSBpbnRlZ3JhdGVkLCBhbnkgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgcG9zc2libGUgaW50ZXJhY3Rpb25zIHdpdGggdXNlci1zcGFjZSB0b29scyBhbmQgaW50ZXJmYWNlcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IHRoaXMgaGVscGVyICpwcm92aWRlcyogYW5kIGZyb20gd2hpY2ggcGFydHMgb2YgdGhlIGtlcm5lbCBpdCdzIHVzZWQuIFRoaXMgZGVwZW5kZW5jeSBhbmFseXNpcyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJJ2xsIGJlIHRoaW5raW5nIGluIHRlcm1zIG9mIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGFuZCBwb3RlbnRpYWwgYnVpbGQgb3JkZXIgY29uY2VybnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoxOToxOS41NTgxNzY1NTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4NTpcXHRjb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcXG4gMzg2OlxcdFxcdHRyaXN0YXRlICdDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluaydcXG4gMzg3OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAzODg6XFx0XFx0ZGVwZW5kcyBvbiBORl9DVF9ORVRMSU5LXFxuIDM4OTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXFxuIDM5MDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcXG4gMzkxOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDM5MjpcXHRcXHRoZWxwXFxuIDM5MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHVzZXItc3BhY2UgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzXFxuIDM5NDpcXHRcXHQgIGluZnJhc3RydWN0dXJlLlxcbiAzOTU6XFx0XFxuIDM5NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IGBOJy5cXG4gMzk3OlxcdFxcbiAzOTg6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcXG4gMzk5OlxcdFxcdGJvb2wgXFxcIk5GUVVFVUUgYW5kIE5GTE9HIGludGVncmF0aW9uIHdpdGggQ29ubmVjdGlvbiBUcmFja2luZ1xcXCJcXG4gNDAwOlxcdFxcdGRlZmF1bHQgblxcbiA0MDE6XFx0XFx0ZGVwZW5kcyBvbiAoTkVURklMVEVSX05FVExJTktfUVVFVUUgfHwgTkVURklMVEVSX05FVExJTktfTE9HKSBcXHUwMDI2XFx1MDAyNiBORl9DVF9ORVRMSU5LXFxuIDQwMjpcXHRcXHRoZWxwXFxuIDQwMzpcXHRcXHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIE5GUVVFVUUgYW5kIE5GTE9HIGNhbiBpbmNsdWRlXFxuIDQwNDpcXHRcXHQgIENvbm5lY3Rpb24gVHJhY2tpbmcgaW5mb3JtYXRpb24gdG9nZXRoZXIgd2l0aCB0aGUgcGFja2V0IGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAwOjE5OjE5LjU1ODI3ODAwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzg3NDcyNDE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIENvbm5lY3Rpb24gVHJhY2tpbmcgSGVscGVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYW4gaXNzdWUgd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgTmV0bGluayBpbnRlcmZhY2UuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGUgY29yZSBmb2N1cyBpcyBhcm91bmQgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgd2hpY2ggaXMgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBhdCB0aGUgcm9vdCBvZiB0aGlzLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgTmV0bGluayBtZXNzYWdlcy4gSXQgYWxzbyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCBgbmZubF9jdGhlbHBlcl9uZXdgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyBiZWluZyBpbml0aWFsaXplZC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggY29ycmVjdHMgYSBzY2VuYXJpbyB3aGVyZSBgbWF4X2V4cGVjdGVkYCBpcyBtaXN0YWtlbmx5IHNldCB0byB6ZXJvLiBUaGUgcGF0Y2ggd2lsbCBzZXQgaXQgdG8gYE5GX0NUX0VYUEVDVF9NQVhfQ05UYCBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLCB3aGljaCBsaWtlbHkgcHJldmVudHMgYSBwb3RlbnRpYWwgaXNzdWUgb3IgdW5leHBlY3RlZCBiZWhhdmlvciB3aXRoIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlci5cblxuSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayBgbmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5YCBhbmQgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeWAgZm9yIGNvbXBsZXRlbmVzcyB0byB1bmRlcnN0YW5kIHRoZSBlbnRpcmUgd29ya2Zsb3cuIEJ1dCBmcm9tIGEgY3Vyc29yeSBnbGFuY2UsIHRoZSBmaXggc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBhbiBlZGdlIGNhc2UgaGFuZGxpbmcgYW5kIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MzgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoxOTozMy40MzMwMDQ2NjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2ODg0MzYyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZm5sX2N0aGVscGVyX25ld1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzkyPW5mbmxfY3RoZWxwZXJfdXBkYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MjYtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0Mjc6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDI4LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTc0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZubF9jdGhlbHBlcl9jYltORk5MX01TR19DVEhFTFBFUl9NQVhdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzUwLVxcdFtORk5MX01TR19DVEhFTFBFUl9ORVddXFx0PSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NTE6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mbmxfY3RoZWxwZXJfbmV3LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzUyLVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX01VVEVYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoxOTozMy44MDE4NTI3OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDAzMTU5MjQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb25maWd1cmF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQncyBwcmV2ZW50aW5nIGBtYXhfZXhwZWN0ZWRgIGZyb20gYmVpbmcgc2V0IHRvIHplcm8uIEkgY2FuIGltbWVkaWF0ZWx5IHNlZSB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0J3MgbGlrZWx5IGJlaW5nIGRvbmUgdG8gYXZvaWQgYSBwb3RlbnRpYWwgYnVnIGRvd24gdGhlIGxpbmUuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuXG5cbkxvb2tpbmcgYXQgdGhlIGNvbmZpZ3MsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyByZWxhdGVkIHRvIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIExldCBtZSBzZWUuLi4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uIGEgZmV3IGtleSBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UgZnVsbHk6IGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLCBgbmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5YCwgYG5mbmxfY3RoZWxwZXJfbmV3YCwgYW5kIGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lgLiBUaGVzZSBhcmUgYWxsIHZlcnkgcmVsZXZhbnQgdG8gdGhlIGV4cGVjdGF0aW9uIGFuZCBwb2xpY3kgaGFuZGxpbmcgd2l0aGluIHRoaXMgTmV0bGluayBoZWxwZXIuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5YCBldmVuICpleGlzdHMqLiBJJ2xsIGRvdWJsZS1jaGVjayBpdHMgcHJlc2VuY2UgaW4gdGhlIGNvZGViYXNlIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgdmFsaWQgZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgc3Ryb25nIGluZGljYXRpb24gb2YgdGhlIHBhdGNoJ3Mgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyODMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTk6NDMuODMzNDQ3MzUyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDYxNzk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTI5Nj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyOTc6bmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZShjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKnBvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI5OC1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKm5ld19wb2xpY3ksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTMyNy1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjMyODpzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9hbGwoc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTMyOS1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zNDgtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozNDk6XFx0XFx0cmV0ID0gbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZShcXHUwMDI2aGVscGVyLVxcdTAwM2VleHBlY3RfcG9saWN5W2ldLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzUwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZuZXdfcG9saWN5W2ldLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zNjctXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozNjg6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3koc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM2OS1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mzg4OlxcdHJldHVybiBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHRiLCBoZWxwZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzg5LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzkyPW5mbmxfY3RoZWxwZXJfdXBkYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MDQtXFx0aWYgKHRiW05GQ1RIX1BPTElDWV0pIHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjQwNTpcXHRcXHRyZXQgPSBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3koaGVscGVyLCB0YltORkNUSF9QT0xJQ1ldKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQwNi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTk6NDMuODk4MDcyMzkxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODg0NDIxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbmZubF9jdGhlbHBlcmAgUG9saWN5IFVwZGF0ZSBGbG93KipcblxuT2theSwgc28gSSd2ZSBlc3RhYmxpc2hlZCB0aGF0IGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lgICpkb2VzKiBleGlzdCwgd2hpY2ggaXMgZ29vZC4gTm93LCBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gaG93IGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgIGlzIGhhbmRsZWQg4oCTIHRoYXQncyB0aGUgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQsIGFmdGVyIGFsbC4gUmlnaHQsIGBuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3lgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0IGRpcmVjdGx5LCB0aGF0IG11Y2ggSSByZW1lbWJlci4gVGhlIGluaXRpYWwgdGhvdWdodCB3YXMgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeWAgKml0c2VsZiogZGlkbid0IGNhbGwgYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAgZGlyZWN0bHksIGJ1dCBpdCBsb29rcyBsaWtlIGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsYCBtaWdodC4gSXQgY2FsbHMgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9vbmVgLCBhbmQgSSBkb24ndCB0aGluayB0aGF0IGNhbGxzIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbi4gSG93ZXZlciwgd2FpdCBhIG1pbnV0ZS4uLiBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5YCBjYWxscyBgbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkYCwgYW5kIHRoZW4gY2FsbHMgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9hbGxgLi4uIGFuZCB0aGF0J3MgdGhlIG9uZSBJIG5lZWQgdG8gZm9jdXMgb24uIFNvLCBpcyB0aGF0IHdoZXJlIHRoZSBjb25uZWN0aW9uIGxpZXM/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X2FsbGAgaXMgdGhlIHBhdGggdG8gYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAuIExvb2tzIGxpa2UgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9hbGxgIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyOTMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTk6NDguMjg2NTE2MTczWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzI1OlxcdFxcdHJldHVybiAwO1xcbiAzMjY6XFx0fVxcbiAzMjc6XFx0XFxuIDMyODpcXHRzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9hbGwoc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4gMzI5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIpXFxuIDMzMDpcXHR7XFxuIDMzMTpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKm5ld19wb2xpY3k7XFxuIDMzMjpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKnBvbGljeTtcXG4gMzMzOlxcdFxcdGludCBpLCByZXQgPSAwO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHRuZXdfcG9saWN5ID0ga21hbGxvY19vYmpzKCpuZXdfcG9saWN5LCBoZWxwZXItXFx1MDAzZWV4cGVjdF9jbGFzc19tYXggKyAxKTtcXG4gMzM2OlxcdFxcdGlmICghbmV3X3BvbGljeSlcXG4gMzM3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzMzg6XFx0XFxuIDMzOTpcXHRcXHQvKiBDaGVjayBmaXJzdCB0aGF0IGFsbCBwb2xpY3kgYXR0cmlidXRlcyBhcmUgd2VsbC1mb3JtZWQsIHNvIHdlIGRvbid0XFxuIDM0MDpcXHRcXHQgKiBsZWF2ZSB0aGluZ3MgaW4gaW5jb25zaXN0ZW50IHN0YXRlIG9uIGVycm9ycy5cXG4gMzQxOlxcdFxcdCAqL1xcbiAzNDI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGhlbHBlci1cXHUwMDNlZXhwZWN0X2NsYXNzX21heCArIDE7IGkrKykge1xcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHRcXHRpZiAoIXRiW05GQ1RIX1BPTElDWV9TRVQgKyBpXSkge1xcbiAzNDU6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gMzQ2OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbiAzNDc6XFx0XFx0XFx0fVxcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHRcXHRyZXQgPSBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lKFxcdTAwMjZoZWxwZXItXFx1MDAzZWV4cGVjdF9wb2xpY3lbaV0sXFxuIDM1MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bmV3X3BvbGljeVtpXSxcXG4gMzUxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHRiW05GQ1RIX1BPTElDWV9TRVQgKyBpXSk7XFxuIDM1MjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMzUzOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbiAzNTQ6XFx0XFx0fVxcbiAzNTU6XFx0XFx0LyogTm93IHdlIGNhbiBzYWZlbHkgdXBkYXRlIHRoZW0uICovXFxuIDM1NjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaGVscGVyLVxcdTAwM2VleHBlY3RfY2xhc3NfbWF4ICsgMTsgaSsrKSB7XFxuIDM1NzpcXHRcXHRcXHRwb2xpY3kgPSAoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICopXFxuIDM1ODpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2aGVscGVyLVxcdTAwM2VleHBlY3RfcG9saWN5W2ldO1xcbiAzNTk6XFx0XFx0XFx0cG9saWN5LVxcdTAwM2VtYXhfZXhwZWN0ZWQgPSBuZXdfcG9saWN5W2ldLm1heF9leHBlY3RlZDtcXG4gMzYwOlxcdFxcdFxcdHBvbGljeS1cXHUwMDNldGltZW91dFxcdD0gbmV3X3BvbGljeVtpXS50aW1lb3V0O1xcbiAzNjE6XFx0XFx0fVxcbiAzNjI6XFx0XFxuIDM2MzpcXHRlcnI6XFxuIDM2NDpcXHRcXHRrZnJlZShuZXdfcG9saWN5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTk6NDguMjg2NjA0ODkzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNzc0Mjc3MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlciBQb2xpY3kgVXBkYXRlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZWAgKmNhbGxzKiBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YD8gVGhhdCBzZWVtcyBhIGxpdHRsZSB1bnVzdWFsLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHJlbGF0aW9uc2hpcCBiZXR0ZXIuIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGUgY2FsbCBzdGFjay4gTGV0J3MgZGlnIGludG8gYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9vbmVgIGl0c2VsZiB0byBzZWUgZXhhY3RseSBob3cgYW5kIHdoeSB0aGlzIGNhbGwgdG8gYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAgaXMgaGFwcGVuaW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgaW50ZXJhY3Rpb24gaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBwb2xpY3kgdXBkYXRlIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NzQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAwOjIwOjA5LjA2MDg4MzkzNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXHRrZnJlZShoZWxwZXIpO1xcbiAyOTE6XFx0ZXJyX2N0aDpcXG4gMjkyOlxcdFxcdGtmcmVlKG5mY3RoKTtcXG4gMjkzOlxcdFxcdHJldHVybiByZXQ7XFxuIDI5NDpcXHR9XFxuIDI5NTpcXHRcXG4gMjk2OlxcdHN0YXRpYyBpbnRcXG4gMjk3OlxcdG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9vbmUoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpwb2xpY3ksXFxuIDI5ODpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKm5ld19wb2xpY3ksXFxuIDI5OTpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxcbiAzMDA6XFx0e1xcbiAzMDE6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbTkZDVEhfUE9MSUNZX01BWCArIDFdO1xcbiAzMDI6XFx0XFx0aW50IGVycjtcXG4gMzAzOlxcdFxcbiAzMDQ6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBORkNUSF9QT0xJQ1lfTUFYLCBhdHRyLFxcbiAzMDU6XFx0XFx0XFx0XFx0XFx0XFx0ICBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2wsIE5VTEwpO1xcbiAzMDY6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDMwNzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMDg6XFx0XFxuIDMwOTpcXHRcXHRpZiAoIXRiW05GQ1RIX1BPTElDWV9OQU1FXSB8fFxcbiAzMTA6XFx0XFx0ICAgICF0YltORkNUSF9QT0xJQ1lfRVhQRUNUX01BWF0gfHxcXG4gMzExOlxcdFxcdCAgICAhdGJbTkZDVEhfUE9MSUNZX0VYUEVDVF9USU1FT1VUXSlcXG4gMzEyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMTM6XFx0XFxuIDMxNDpcXHRcXHRpZiAobmxhX3N0cmNtcCh0YltORkNUSF9QT0xJQ1lfTkFNRV0sIHBvbGljeS1cXHUwMDNlbmFtZSkpXFxuIDMxNTpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHRuZXdfcG9saWN5LVxcdTAwM2VtYXhfZXhwZWN0ZWQgPVxcbiAzMTg6XFx0XFx0XFx0bnRvaGwobmxhX2dldF9iZTMyKHRiW05GQ1RIX1BPTElDWV9FWFBFQ1RfTUFYXSkpO1xcbiAzMTk6XFx0XFx0aWYgKG5ld19wb2xpY3ktXFx1MDAzZW1heF9leHBlY3RlZCBcXHUwMDNlIE5GX0NUX0VYUEVDVF9NQVhfQ05UKVxcbiAzMjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdG5ld19wb2xpY3ktXFx1MDAzZXRpbWVvdXQgPVxcbiAzMjM6XFx0XFx0XFx0bnRvaGwobmxhX2dldF9iZTMyKHRiW05GQ1RIX1BPTElDWV9FWFBFQ1RfVElNRU9VVF0pKTtcXG4gMzI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoyMDowOS4wNjA5NzA3OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc0ODA3NDI2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIGEgUG90ZW50aWFsIE92ZXJzaWdodCoqXG5cbk9rYXksIGhlcmUncyB3aGF0J3MgcnVubmluZyB0aHJvdWdoIG15IG1pbmQuIEkgaW5pdGlhbGx5IHNhdyBhIGJ1ZywgYW5kIG15IGZpcnN0IHRob3VnaHQgd2FzLCBcIldhaXQsIGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lYCBoYXMgdGhlIHNhbWUgYnVnIVwiIEkganVtcGVkIHRoZSBndW4gYSBsaXR0bGUsIHRob3VnaC4gVGhlIHBhdGNoIG9ubHkgdG91Y2hlZCBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCwgc28gbGV0J3MgcXVpY2tseSByZXZpZXcgdGhhdCBjb2RlIGFnYWluIHRvIG1ha2Ugc3VyZSBJJ20gc2VlaW5nIGl0IHJpZ2h0OlxuXG5gYGBjXG5cdGV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkID1cblx0XHRudG9obChubGFfZ2V0X2JlMzIodGJbTkZDVEhfUE9MSUNZX0VYUEVDVF9NQVhdKSk7XG4rXHRpZiAoIWV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkKVxuK1x0XHRleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZCA9IE5GX0NUX0VYUEVDVF9NQVhfQ05UO1xuIFx0aWYgKGV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkIFx1MDAzZSBORl9DVF9FWFBFQ1RfTUFYX0NOVClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5gYGBcblxuUmlnaHQsIGl0IGxvb2tzIGdvb2QuIEl0J3MgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgYG1heF9leHBlY3RlZGAgbWlnaHQgYmUgemVybywgd2hpY2ggaXMgbGlrZWx5IHRoZSByb290IG9mIHRoZSBidWcgSSB3YXMgdGhpbmtpbmcgb2YuXG5cbkkgd2FzIGdldHRpbmcgYWhlYWQgb2YgbXlzZWxmLCBhbmQgd2FzIGNvbmNlcm5lZCBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZWAgd2FzIG1pc3NlZCwgYnV0IGl0IHdhcyBub3QuIEkndmUgcmVjaGVja2VkIHRoZSBwYXRjaCBhbmQgaXQgb25seSBtb2RpZmllcyBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YC4gU28gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoZXNlIHR3bywgYW5kIGVuc3VyZSB0aGlzIGZpeCBtYWtlcyBpdCBpbnRvIGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lYC5cblxuQXQgdGhpcyBwb2ludCwgSSdtIGNvbmZpZGVudCB0aGUgcGF0Y2ggaXRzZWxmIGlzIGZ1bmN0aW9uYWwuIExldCdzIG1ha2Ugc3VyZSBJJ20gY2xlYXIgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBXZSdyZSB0YWxraW5nIGFib3V0IGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLCBgbmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5YCwgYW5kIGBuZm5sX2N0aGVscGVyX25ld2AuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9ucy4gV2UncmUgd29ya2luZyB3aXRoIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgY29uZmlnLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEFoLCB5ZXMsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAgZGVwZW5kcyBvbiBgTkZfQ1RfTkVUTElOS2AsIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAsIGBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUYCwgYW5kIGBORVRGSUxURVJfQURWQU5DRURgLCBidXQganVzdCBzcGVjaWZ5aW5nIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSBjb250ZXh0LlxuXG5XaXRoIHRoYXQsIEknbSByZWFkeSB0byBtYXJrIHRoaXMgYXMgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNjQsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MjA6MjYuNTQxNzE1NDY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk4MDY1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NUX05FVExJTktfSEVMUEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3lcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfbmV3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgbmV0bGluayBhdHRyaWJ1dGVzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIHNwZWNpZmljYWxseSBmaXhpbmcgYSBjYXNlIHdoZXJlIG1heF9leHBlY3RlZCBpcyAwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NUX05FVExJTktfSEVMUEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3lcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfbmV3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgbmV0bGluayBhdHRyaWJ1dGVzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIHNwZWNpZmljYWxseSBmaXhpbmcgYSBjYXNlIHdoZXJlIG1heF9leHBlY3RlZCBpcyAwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6x9wx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-27 00:09:47 +0000 UTC FinishedAt: 2026-06-27 00:20:27 +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": "fe9f4ee6c61a1410afd73bf011de5ae618004796", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CT_NETLINK_HELPER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "fe9f4ee6c61a1410afd73bf011de5ae618004796", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CT_NETLINK_HELPER" ], "series_id": "636d481a-db05-4649-a58d-023f412402aa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfnl_cthelper_expect_policy", "nfnl_cthelper_parse_expect_policy", "nfnl_cthelper_new" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5JiMzNDssCiAgICAmIzM0O25mbmxfY3RoZWxwZXJfcGFyc2VfZXhwZWN0X3BvbGljeSYjMzQ7LAogICAgJiMzNDtuZm5sX2N0aGVscGVyX25ldyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBvZiBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgc3BlY2lmaWNhbGx5IGZpeGluZyBhIGNhc2Ugd2hlcmUgbWF4X2V4cGVjdGVkIGlzIDAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXRmaWx0ZXIgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MjhkNzFlZjg1NTgxNzk2OTc0ZTg0ODY0ZjgxNzU1OGE3MWI0ZjIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDA6MTg6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbmluZGV4IGYxNDYwYjY4M2Q3YWY3Li4yY2JjY2E5MTEwZGJmNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbkBAIC0xNjMsNiAmIzQzOzE2Myw4IEBAIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cGVjdF9wb2xpY3ksXG4gXHRcdCAgICB0YltORkNUSF9QT0xJQ1lfTkFNRV0sIE5GX0NUX0hFTFBFUl9OQU1FX0xFTik7XG4gXHRleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZCA9XG4gXHRcdG50b2hsKG5sYV9nZXRfYmUzMih0YltORkNUSF9QT0xJQ1lfRVhQRUNUX01BWF0pKTtcbiYjNDM7XHRpZiAoIWV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkKVxuJiM0MztcdFx0ZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgPSBORl9DVF9FWFBFQ1RfTUFYX0NOVDtcbiBcdGlmIChleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZCBcdTAwM2UgTkZfQ1RfRVhQRUNUX01BWF9DTlQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5JiMzNDssCiAgICAmIzM0O25mbmxfY3RoZWxwZXJfcGFyc2VfZXhwZWN0X3BvbGljeSYjMzQ7LAogICAgJiMzNDtuZm5sX2N0aGVscGVyX25ldyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBvZiBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgc3BlY2lmaWNhbGx5IGZpeGluZyBhIGNhc2Ugd2hlcmUgbWF4X2V4cGVjdGVkIGlzIDAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXRmaWx0ZXIgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYyOGQ3MWVmODU1ODE3OTY5NzRlODQ4NjRmODE3NTU4YTcxYjRmMjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1biAyNyAwMDoxODowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jCmluZGV4IGYxNDYwYjY4M2Q3YWY3Li4yY2JjY2E5MTEwZGJmNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jCkBAIC0xNjMsNiAmIzQzOzE2Myw4IEBAIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cGVjdF9wb2xpY3ksCiAJCSAgICB0YltORkNUSF9QT0xJQ1lfTkFNRV0sIE5GX0NUX0hFTFBFUl9OQU1FX0xFTik7CiAJZXhwZWN0X3BvbGljeS0mZ3Q7bWF4X2V4cGVjdGVkID0KIAkJbnRvaGwobmxhX2dldF9iZTMyKHRiW05GQ1RIX1BPTElDWV9FWFBFQ1RfTUFYXSkpOwomIzQzOwlpZiAoIWV4cGVjdF9wb2xpY3ktJmd0O21heF9leHBlY3RlZCkKJiM0MzsJCWV4cGVjdF9wb2xpY3ktJmd0O21heF9leHBlY3RlZCA9IE5GX0NUX0VYUEVDVF9NQVhfQ05UOwogCWlmIChleHBlY3RfcG9saWN5LSZndDttYXhfZXhwZWN0ZWQgJmd0OyBORl9DVF9FWFBFQ1RfTUFYX0NOVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5OQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5mbmV0bGlua19jdGhlbHBlci5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBjaGFuZ2VzIHRvIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIGNvZGUgc25pcHBldCBzaG93cyB0aGF0IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIGBleHBlY3RfcG9saWN5LSZndDttYXhfZXhwZWN0ZWRgIGFmdGVyIHJldHJpZXZpbmcgaXQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGUgYE5GQ1RIX1BPTElDWV9FWFBFQ1RfTUFYYC4KCkJhc2ljYWxseSwgdGhleSYjMzk7dmUgYWRkZWQgYSBjb25kaXRpb25hbCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYE5GQ1RIX1BPTElDWV9FWFBFQ1RfTUFYYCBpcyB6ZXJvLiBJZiBpdCYjMzk7cyB6ZXJvLCB0aGUgY29kZSBub3cgZGVmYXVsdHMgYGV4cGVjdF9wb2xpY3ktJmd0O21heF9leHBlY3RlZGAgdG8gYE5GX0NUX0VYUEVDVF9NQVhfQ05UYC4gQWZ0ZXIgdGhhdCwgdGhleSBoYXZlIHRoZSBvcmlnaW5hbCBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSB2YWx1ZSBpcyBub3QgZ3JlYXRlciB0aGFuIGBORl9DVF9FWFBFQ1RfTUFYX0NOVGAsIHJldHVybmluZyBhbiBlcnJvciBpZiBpdCBpcy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgZ29vZCBzYWZldHkgbWVhc3VyZS4gUHJldmlvdXNseSwgYSB6ZXJvIHZhbHVlIGZvciBgbWF4X2V4cGVjdGVkYCBtaWdodCBoYXZlIGNhdXNlZCBpc3N1ZXMsIG1heWJlIGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBvciBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2UsIGVzcGVjaWFsbHkgaWYgdGhlIGNvZGUgd2FzbiYjMzk7dCBoYW5kbGluZyB0aGUgemVybyBjYXNlIHByb3Blcmx5LiBEZWZhdWx0aW5nIHRvIGBORl9DVF9FWFBFQ1RfTUFYX0NOVGAgZ2l2ZXMgaXQgYSByZWFzb25hYmxlLCBzYWZlIG1heGltdW0uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgaWYgSSBjYW4gZmluZCB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBwYXRjaCwgYnV0IG9uIHRoZSBzdXJmYWNlLCB0aGlzIGxvb2tzIGxpa2UgYSBkZWNlbnQgYWRkaXRpb24gZm9yIHJvYnVzdG5lc3MuIEl0JiMzOTtzIGEgZmFpcmx5IHN0YW5kYXJkIGFwcHJvYWNoIHRvIGhhbmRsaW5nIHBvdGVudGlhbGx5IG1pc3Npbmcgb3IgaW52YWxpZCBpbnB1dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MTQ1PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTQ2Om5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cGVjdF9wb2xpY3ksXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE0Ny1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTE3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTc4Om5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXRbTkZDVEhfUE9MSUNZX1NFVF9NQVgmIzQzOzFdID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xNzktXHRbTkZDVEhfUE9MSUNZX1NFVF9OVU1dID0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GX0NUX01BWF9FWFBFQ1RfQ0xBU1NFUyksXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xODM9bmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xOTAtXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9TRVRfTUFYLCBhdHRyLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoxOTE6XHRcdFx0XHRcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldCxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTkyLVx0XHRcdFx0XHQgIE5VTEwpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjA4LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyMDk6XHRcdHJldCA9IG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeShcdTAwMjZoZWxwZXItXHUwMDNlZXhwZWN0X3BvbGljeVtpXSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjEwLVx0XHRcdFx0XHRcdCAgdGJbTkZDVEhfUE9MSUNZX1NFVCYjNDM7aV0pO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzY4PXN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zNzUtXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9TRVRfTUFYLCBhdHRyLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozNzY6XHRcdFx0XHRcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldCxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzc3LVx0XHRcdFx0XHQgIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgQ29ubmVjdGlvbiBUcmFja2luZyBIZWxwZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAuIEkgcmVjb2duaXplIHRoYXQgZnVuY3Rpb247IGl0JiMzOTtzIGEga2V5IHBhcnQgb2YgaG93IHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgc3lzdGVtIGhhbmRsZXMgZXhwZWN0ZWQgY29ubmVjdGlvbnMsIHJpZ2h0PyBJdCYjMzk7cyBjYWxsZWQgYnkgYG5mbmxfY3RoZWxwZXJfcGFyc2VfZXhwZWN0X3BvbGljeWAgYW5kLCBJICp0aGluayosIGFsc28gYnkgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeWAg4oCTIGJ1dCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBsYXN0IHBhcnQuIEJlc3QgdG8gYmUgc3VyZS4gVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgc2hvdWxkIHByb2JhYmx5IGdvIGJhY2sgYW5kIGxvb2sgYXQgdGhlIGNvbnRyb2wgZmxvdyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIHRvIHNlZSBleGFjdGx5IGhvdyBhbmQgd2hlbiB0aGlzIHBvbGljeSBnZXRzIG1vZGlmaWVkLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGEgTmV0ZmlsdGVyIG1vZHVsZSwgdGhlIGZpcnN0IHN0ZXAgaXMgdG8gZGlnIGludG8gYG5mbmV0bGlua19jdGhlbHBlci5jYCBhbmQgZmlndXJlIG91dCB3aGF0IGl0IGRvZXMgaW4gcmVsYXRpb24gdG8gdGhlIEtjb25maWcgZmlsZS4gSSYjMzk7bGwgY2hlY2sgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB0aGF0IHBlcnRhaW4gdG8gdGhpcyBzcGVjaWZpYyBhcmVhIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFBlcmhhcHMgYSBzcGVjaWZpYyBmZWF0dXJlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgY29uZmlndXJhdGlvbiB0aGF0IGlzIHJlbGV2YW50IHRvIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgd2hpY2ggZmVhdHVyZXMgYXJlIHN1cHBvcnRlZC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYWxsb3cgbWUgdG8gYW5hbHl6ZSB0aGUgcGF0Y2ggbW9yZSBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZm5ldGxpbmtfY3RoZWxwZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0zOD1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19USU1FT1VUKSAmIzQzOz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM5Om9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUikgJiM0Mzs9IG5mbmV0bGlua19jdGhlbHBlci5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgQ29ubmVjdGlvbiBUcmFja2luZyBOZXRsaW5rIEhlbHBlcioqCgpBbHJpZ2h0LCBJJiMzOTttIHN0YXJpbmcgYXQgdGhpcyBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIGNvbmZpZyBvcHRpb24uIEl0JiMzOTtzIG9idmlvdXNseSBzaWduaWZpY2FudCwgZGVhbGluZyB3aXRoIE5ldGZpbHRlciBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggTmV0bGluayBmb3IgY29ubmVjdGlvbiB0cmFja2luZy4gVGhlIG9idmlvdXMgbmV4dCBzdGVwIGZvciBtZSwgZ2l2ZW4gbXkgZXhwZXJ0aXNlLCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayBmb3IgYW55ICpvdGhlciogZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE5GX0NUX05FVExJTktfSEVMUEVSYC4gSSYjMzk7bSB0aGlua2luZywgJiMzNDt3aGF0IG90aGVyIGZlYXR1cmVzIG9yIG1vZHVsZXMgcmVseSBvbiAqdGhpcyogc3BlY2lmaWMgZnVuY3Rpb25hbGl0eT8mIzM0OyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgZGVwZW5kZW5jeSB0cmVlLCBiZWNhdXNlIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycmVsYXRpb25zaGlwcyBpcyBrZXkuIElmIEkgZG9uJiMzOTt0IGtub3cgdGhlIGNvbXBsZXRlIHNldCBvZiBkZXBlbmRlbmNpZXMgSSBjb3VsZCBjYXVzZSBwcm9ibGVtcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZmlndXJpbmcgb3V0IGlmIHRoZSBpbXBsaWNhdGlvbnMgb2Ygc2V0dGluZyB0aGlzIGFyZSBzdHJhaWdodGZvcndhcmQgb3IgaWYgSSBuZWVkIHRvIGFkZHJlc3MgYSB3aG9sZSBjYXNjYWRlIG9mIHJlbGF0ZWQgY29uZmlncy4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgY2hhbmdlIHRoZSB2YWx1ZSBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNzM9Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg1OmNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4Ni1cdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MzEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCBwcm9tcHQ6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUgb2YgTkZfQ1RfTkVUTElOS19IRUxQRVIqKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBzdW1tYXJpemUgYSB0aG91Z2h0IHByb2Nlc3MgZm9jdXNlZCBvbiBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlICpkZXBlbmRlbmNpZXMqIG9mIHRoaXMgc3BlY2lmaWMgY29tcG9uZW50LiBJIGtub3cgaXQmIzM5O3MgYSBrZXJuZWwgbW9kdWxlLCBsaWtlbHkgcmVsYXRlZCB0byBuZXRmaWx0ZXIgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGFuZCB0aGF0ICYjMzQ7TkVUTElOSyYjMzQ7IHN1Z2dlc3RzIGNvbW11bmljYXRpb24gd2l0aCB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgbXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXNzZWN0IHdoYXQgb3RoZXIga2VybmVsIG1vZHVsZXMgb3IgZnVuY3Rpb25zIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAgcmVsaWVzIHVwb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHdoaWNoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrIG1pZ2h0IGJlIGludGVncmF0ZWQsIGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyLXNwYWNlIHRvb2xzIGFuZCBpbnRlcmZhY2VzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IHRoaXMgaGVscGVyICpwcm92aWRlcyogYW5kIGZyb20gd2hpY2ggcGFydHMgb2YgdGhlIGtlcm5lbCBpdCYjMzk7cyB1c2VkLiBUaGlzIGRlcGVuZGVuY3kgYW5hbHlzaXMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGNoYW5nZXMgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bGwgYmUgdGhpbmtpbmcgaW4gdGVybXMgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYW5kIHBvdGVudGlhbCBidWlsZCBvcmRlciBjb25jZXJucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4NTpcdGNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxuIDM4NjpcdFx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluayYjMzk7XG4gMzg3Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAzODg6XHRcdGRlcGVuZHMgb24gTkZfQ1RfTkVUTElOS1xuIDM4OTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxuIDM5MDpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG4gMzkxOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDM5MjpcdFx0aGVscFxuIDM5MzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSB1c2VyLXNwYWNlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyc1xuIDM5NDpcdFx0ICBpbmZyYXN0cnVjdHVyZS5cbiAzOTU6XHRcbiAzOTY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgYE4mIzM5Oy5cbiAzOTc6XHRcbiAzOTg6XHRjb25maWcgTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxuIDM5OTpcdFx0Ym9vbCBcJiMzNDtORlFVRVVFIGFuZCBORkxPRyBpbnRlZ3JhdGlvbiB3aXRoIENvbm5lY3Rpb24gVHJhY2tpbmdcJiMzNDtcbiA0MDA6XHRcdGRlZmF1bHQgblxuIDQwMTpcdFx0ZGVwZW5kcyBvbiAoTkVURklMVEVSX05FVExJTktfUVVFVUUgfHwgTkVURklMVEVSX05FVExJTktfTE9HKSBcdTAwMjZcdTAwMjYgTkZfQ1RfTkVUTElOS1xuIDQwMjpcdFx0aGVscFxuIDQwMzpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBORlFVRVVFIGFuZCBORkxPRyBjYW4gaW5jbHVkZVxuIDQwNDpcdFx0ICBDb25uZWN0aW9uIFRyYWNraW5nIGluZm9ybWF0aW9uIHRvZ2V0aGVyIHdpdGggdGhlIHBhY2tldCBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTM4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgQ29ubmVjdGlvbiBUcmFja2luZyBIZWxwZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhbiBpc3N1ZSB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBOZXRsaW5rIGludGVyZmFjZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBjb3JlIGZvY3VzIGlzIGFyb3VuZCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCB3aGljaCBpcyB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nIGF0IHRoZSByb290IG9mIHRoaXMuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgTmV0bGluayBtZXNzYWdlcy4gSXQgYWxzbyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYG5mbmxfY3RoZWxwZXJfbmV3YCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgYmVpbmcgaW5pdGlhbGl6ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGNvcnJlY3RzIGEgc2NlbmFyaW8gd2hlcmUgYG1heF9leHBlY3RlZGAgaXMgbWlzdGFrZW5seSBzZXQgdG8gemVyby4gVGhlIHBhdGNoIHdpbGwgc2V0IGl0IHRvIGBORl9DVF9FWFBFQ1RfTUFYX0NOVGAgaW4gdGhpcyBzcGVjaWZpYyBzY2VuYXJpbywgd2hpY2ggbGlrZWx5IHByZXZlbnRzIGEgcG90ZW50aWFsIGlzc3VlIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2l0aCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIuCgpJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIGBuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3lgIGFuZCBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5YCBmb3IgY29tcGxldGVuZXNzIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSB3b3JrZmxvdy4gQnV0IGZyb20gYSBjdXJzb3J5IGdsYW5jZSwgdGhlIGZpeCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGFuIGVkZ2UgY2FzZSBoYW5kbGluZyBhbmQgYSBmdW5jdGlvbmFsIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzkyPW5mbmxfY3RoZWxwZXJfdXBkYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDI2LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0Mjc6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MjgtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTc0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZubF9jdGhlbHBlcl9jYltORk5MX01TR19DVEhFTFBFUl9NQVhdID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03NTAtXHRbTkZOTF9NU0dfQ1RIRUxQRVJfTkVXXVx0PSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjc1MTpcdFx0LmNhbGxcdFx0PSBuZm5sX2N0aGVscGVyX25ldyxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzUyLVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfTVVURVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyODMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCYjMzk7cyBwcmV2ZW50aW5nIGBtYXhfZXhwZWN0ZWRgIGZyb20gYmVpbmcgc2V0IHRvIHplcm8uIEkgY2FuIGltbWVkaWF0ZWx5IHNlZSB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0JiMzOTtzIGxpa2VseSBiZWluZyBkb25lIHRvIGF2b2lkIGEgcG90ZW50aWFsIGJ1ZyBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLgoKTG9va2luZyBhdCB0aGUgY29uZmlncywgaXQgbG9va3MgbGlrZSB0aGlzIGlzIHJlbGF0ZWQgdG8gYE5GX0NUX05FVExJTktfSEVMUEVSYC4gTGV0IG1lIHNlZS4uLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIGEgZmV3IGtleSBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UgZnVsbHk6IGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLCBgbmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5YCwgYG5mbmxfY3RoZWxwZXJfbmV3YCwgYW5kIGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lgLiBUaGVzZSBhcmUgYWxsIHZlcnkgcmVsZXZhbnQgdG8gdGhlIGV4cGVjdGF0aW9uIGFuZCBwb2xpY3kgaGFuZGxpbmcgd2l0aGluIHRoaXMgTmV0bGluayBoZWxwZXIuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeWAgZXZlbiAqZXhpc3RzKi4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGl0cyBwcmVzZW5jZSBpbiB0aGUgY29kZWJhc2UgdG8gbWFrZSBzdXJlIHRoZSBwYXRjaCBpcyB0YXJnZXRpbmcgYSB2YWxpZCBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzdHJvbmcgaW5kaWNhdGlvbiBvZiB0aGUgcGF0Y2gmIzM5O3Mgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0yOTY9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyOTc6bmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZShjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKnBvbGljeSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjk4LVx0XHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpuZXdfcG9saWN5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzI3LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozMjg6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTMyOS1cdFx0XHRcdFx0ICAgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM0OC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MzQ5Olx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lKFx1MDAyNmhlbHBlci1cdTAwM2VleHBlY3RfcG9saWN5W2ldLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zNTAtXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2bmV3X3BvbGljeVtpXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MzY4OnN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM2OS1cdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzg3LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozODg6XHRyZXR1cm4gbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X2FsbCh0YiwgaGVscGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzg5LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTM5Mj1uZm5sX2N0aGVscGVyX3VwZGF0ZShjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQwNC1cdGlmICh0YltORkNUSF9QT0xJQ1ldKSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjQwNTpcdFx0cmV0ID0gbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KGhlbHBlciwgdGJbTkZDVEhfUE9MSUNZXSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQwNi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI5MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBuZm5sX2N0aGVscGVyYCBQb2xpY3kgVXBkYXRlIEZsb3cqKgoKT2theSwgc28gSSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhhdCBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5YCAqZG9lcyogZXhpc3QsIHdoaWNoIGlzIGdvb2QuIE5vdywgSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBob3cgYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAgaXMgaGFuZGxlZCDigJMgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQsIGFmdGVyIGFsbC4gUmlnaHQsIGBuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3lgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0IGRpcmVjdGx5LCB0aGF0IG11Y2ggSSByZW1lbWJlci4gVGhlIGluaXRpYWwgdGhvdWdodCB3YXMgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeWAgKml0c2VsZiogZGlkbiYjMzk7dCBjYWxsIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgIGRpcmVjdGx5LCBidXQgaXQgbG9va3MgbGlrZSBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X2FsbGAgbWlnaHQuIEl0IGNhbGxzIGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lYCwgYW5kIEkgZG9uJiMzOTt0IHRoaW5rIHRoYXQgY2FsbHMgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLiBIb3dldmVyLCB3YWl0IGEgbWludXRlLi4uIGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lgIGNhbGxzIGBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWRgLCBhbmQgdGhlbiBjYWxscyBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X2FsbGAuLi4gYW5kIHRoYXQmIzM5O3MgdGhlIG9uZSBJIG5lZWQgdG8gZm9jdXMgb24uIFNvLCBpcyB0aGF0IHdoZXJlIHRoZSBjb25uZWN0aW9uIGxpZXM/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X2FsbGAgaXMgdGhlIHBhdGggdG8gYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAuIExvb2tzIGxpa2UgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9hbGxgIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI1Olx0XHRyZXR1cm4gMDtcbiAzMjY6XHR9XG4gMzI3Olx0XG4gMzI4Olx0c3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHN0cnVjdCBubGF0dHIgKnRiW10sXG4gMzI5Olx0XHRcdFx0XHRcdCAgIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIpXG4gMzMwOlx0e1xuIDMzMTpcdFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpuZXdfcG9saWN5O1xuIDMzMjpcdFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpwb2xpY3k7XG4gMzMzOlx0XHRpbnQgaSwgcmV0ID0gMDtcbiAzMzQ6XHRcbiAzMzU6XHRcdG5ld19wb2xpY3kgPSBrbWFsbG9jX29ianMoKm5ld19wb2xpY3ksIGhlbHBlci1cdTAwM2VleHBlY3RfY2xhc3NfbWF4ICYjNDM7IDEpO1xuIDMzNjpcdFx0aWYgKCFuZXdfcG9saWN5KVxuIDMzNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzMzg6XHRcbiAzMzk6XHRcdC8qIENoZWNrIGZpcnN0IHRoYXQgYWxsIHBvbGljeSBhdHRyaWJ1dGVzIGFyZSB3ZWxsLWZvcm1lZCwgc28gd2UgZG9uJiMzOTt0XG4gMzQwOlx0XHQgKiBsZWF2ZSB0aGluZ3MgaW4gaW5jb25zaXN0ZW50IHN0YXRlIG9uIGVycm9ycy5cbiAzNDE6XHRcdCAqL1xuIDM0MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaGVscGVyLVx1MDAzZWV4cGVjdF9jbGFzc19tYXggJiM0MzsgMTsgaSYjNDM7JiM0MzspIHtcbiAzNDM6XHRcbiAzNDQ6XHRcdFx0aWYgKCF0YltORkNUSF9QT0xJQ1lfU0VUICYjNDM7IGldKSB7XG4gMzQ1Olx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiAzNDY6XHRcdFx0XHRnb3RvIGVycjtcbiAzNDc6XHRcdFx0fVxuIDM0ODpcdFxuIDM0OTpcdFx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lKFx1MDAyNmhlbHBlci1cdTAwM2VleHBlY3RfcG9saWN5W2ldLFxuIDM1MDpcdFx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNm5ld19wb2xpY3lbaV0sXG4gMzUxOlx0XHRcdFx0XHRcdFx0ICAgICAgdGJbTkZDVEhfUE9MSUNZX1NFVCAmIzQzOyBpXSk7XG4gMzUyOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMzUzOlx0XHRcdFx0Z290byBlcnI7XG4gMzU0Olx0XHR9XG4gMzU1Olx0XHQvKiBOb3cgd2UgY2FuIHNhZmVseSB1cGRhdGUgdGhlbS4gKi9cbiAzNTY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhlbHBlci1cdTAwM2VleHBlY3RfY2xhc3NfbWF4ICYjNDM7IDE7IGkmIzQzOyYjNDM7KSB7XG4gMzU3Olx0XHRcdHBvbGljeSA9IChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKilcbiAzNTg6XHRcdFx0XHRcdFx1MDAyNmhlbHBlci1cdTAwM2VleHBlY3RfcG9saWN5W2ldO1xuIDM1OTpcdFx0XHRwb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkID0gbmV3X3BvbGljeVtpXS5tYXhfZXhwZWN0ZWQ7XG4gMzYwOlx0XHRcdHBvbGljeS1cdTAwM2V0aW1lb3V0XHQ9IG5ld19wb2xpY3lbaV0udGltZW91dDtcbiAzNjE6XHRcdH1cbiAzNjI6XHRcbiAzNjM6XHRlcnI6XG4gMzY0Olx0XHRrZnJlZShuZXdfcG9saWN5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ3NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvbm5lY3Rpb24gVHJhY2tpbmcgSGVscGVyIFBvbGljeSBVcGRhdGUqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZWAgKmNhbGxzKiBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YD8gVGhhdCBzZWVtcyBhIGxpdHRsZSB1bnVzdWFsLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHJlbGF0aW9uc2hpcCBiZXR0ZXIuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGNhbGwgc3RhY2suIExldCYjMzk7cyBkaWcgaW50byBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZWAgaXRzZWxmIHRvIHNlZSBleGFjdGx5IGhvdyBhbmQgd2h5IHRoaXMgY2FsbCB0byBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCBpcyBoYXBwZW5pbmcuIFVuZGVyc3RhbmRpbmcgdGhpcyBpbnRlcmFjdGlvbiBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIHBvbGljeSB1cGRhdGUgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTA6XHRcdGtmcmVlKGhlbHBlcik7XG4gMjkxOlx0ZXJyX2N0aDpcbiAyOTI6XHRcdGtmcmVlKG5mY3RoKTtcbiAyOTM6XHRcdHJldHVybiByZXQ7XG4gMjk0Olx0fVxuIDI5NTpcdFxuIDI5NjpcdHN0YXRpYyBpbnRcbiAyOTc6XHRuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqcG9saWN5LFxuIDI5ODpcdFx0XHRcdFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpuZXdfcG9saWN5LFxuIDI5OTpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcbiAzMDA6XHR7XG4gMzAxOlx0XHRzdHJ1Y3QgbmxhdHRyICp0YltORkNUSF9QT0xJQ1lfTUFYICYjNDM7IDFdO1xuIDMwMjpcdFx0aW50IGVycjtcbiAzMDM6XHRcbiAzMDQ6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgTkZDVEhfUE9MSUNZX01BWCwgYXR0cixcbiAzMDU6XHRcdFx0XHRcdFx0ICBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2wsIE5VTEwpO1xuIDMwNjpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiAzMDc6XHRcdFx0cmV0dXJuIGVycjtcbiAzMDg6XHRcbiAzMDk6XHRcdGlmICghdGJbTkZDVEhfUE9MSUNZX05BTUVdIHx8XG4gMzEwOlx0XHQgICAgIXRiW05GQ1RIX1BPTElDWV9FWFBFQ1RfTUFYXSB8fFxuIDMxMTpcdFx0ICAgICF0YltORkNUSF9QT0xJQ1lfRVhQRUNUX1RJTUVPVVRdKVxuIDMxMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzMTM6XHRcbiAzMTQ6XHRcdGlmIChubGFfc3RyY21wKHRiW05GQ1RIX1BPTElDWV9OQU1FXSwgcG9saWN5LVx1MDAzZW5hbWUpKVxuIDMxNTpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDMxNjpcdFxuIDMxNzpcdFx0bmV3X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgPVxuIDMxODpcdFx0XHRudG9obChubGFfZ2V0X2JlMzIodGJbTkZDVEhfUE9MSUNZX0VYUEVDVF9NQVhdKSk7XG4gMzE5Olx0XHRpZiAobmV3X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgXHUwMDNlIE5GX0NUX0VYUEVDVF9NQVhfQ05UKVxuIDMyMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzMjE6XHRcbiAzMjI6XHRcdG5ld19wb2xpY3ktXHUwMDNldGltZW91dCA9XG4gMzIzOlx0XHRcdG50b2hsKG5sYV9nZXRfYmUzMih0YltORkNUSF9QT0xJQ1lfRVhQRUNUX1RJTUVPVVRdKSk7XG4gMzI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNjQKCQkJCQkJCW91dHB1dDogMTE4CgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBPdmVyc2lnaHQqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIHJ1bm5pbmcgdGhyb3VnaCBteSBtaW5kLiBJIGluaXRpYWxseSBzYXcgYSBidWcsIGFuZCBteSBmaXJzdCB0aG91Z2h0IHdhcywgJiMzNDtXYWl0LCBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZWAgaGFzIHRoZSBzYW1lIGJ1ZyEmIzM0OyBJIGp1bXBlZCB0aGUgZ3VuIGEgbGl0dGxlLCB0aG91Z2guIFRoZSBwYXRjaCBvbmx5IHRvdWNoZWQgYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAsIHNvIGxldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGF0IGNvZGUgYWdhaW4gdG8gbWFrZSBzdXJlIEkmIzM5O20gc2VlaW5nIGl0IHJpZ2h0OgoKYGBgYwoJZXhwZWN0X3BvbGljeS0mZ3Q7bWF4X2V4cGVjdGVkID0KCQludG9obChubGFfZ2V0X2JlMzIodGJbTkZDVEhfUE9MSUNZX0VYUEVDVF9NQVhdKSk7CiYjNDM7CWlmICghZXhwZWN0X3BvbGljeS0mZ3Q7bWF4X2V4cGVjdGVkKQomIzQzOwkJZXhwZWN0X3BvbGljeS0mZ3Q7bWF4X2V4cGVjdGVkID0gTkZfQ1RfRVhQRUNUX01BWF9DTlQ7CiAJaWYgKGV4cGVjdF9wb2xpY3ktJmd0O21heF9leHBlY3RlZCAmZ3Q7IE5GX0NUX0VYUEVDVF9NQVhfQ05UKQogCQlyZXR1cm4gLUVJTlZBTDsKYGBgCgpSaWdodCwgaXQgbG9va3MgZ29vZC4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgYG1heF9leHBlY3RlZGAgbWlnaHQgYmUgemVybywgd2hpY2ggaXMgbGlrZWx5IHRoZSByb290IG9mIHRoZSBidWcgSSB3YXMgdGhpbmtpbmcgb2YuCgpJIHdhcyBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZiwgYW5kIHdhcyBjb25jZXJuZWQgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9vbmVgIHdhcyBtaXNzZWQsIGJ1dCBpdCB3YXMgbm90LiBJJiMzOTt2ZSByZWNoZWNrZWQgdGhlIHBhdGNoIGFuZCBpdCBvbmx5IG1vZGlmaWVzIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLiBTbyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gdGhlc2UgdHdvLCBhbmQgZW5zdXJlIHRoaXMgZml4IG1ha2VzIGl0IGludG8gYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9vbmVgLgoKQXQgdGhpcyBwb2ludCwgSSYjMzk7bSBjb25maWRlbnQgdGhlIHBhdGNoIGl0c2VsZiBpcyBmdW5jdGlvbmFsLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gY2xlYXIgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCwgYG5mbmxfY3RoZWxwZXJfcGFyc2VfZXhwZWN0X3BvbGljeWAsIGFuZCBgbmZubF9jdGhlbHBlcl9uZXdgLgoKTm93LCByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb25zLiBXZSYjMzk7cmUgd29ya2luZyB3aXRoIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgY29uZmlnLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBBaCwgeWVzLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIGRlcGVuZHMgb24gYE5GX0NUX05FVExJTktgLCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLCBgTkVURklMVEVSX05FVExJTktfR0xVRV9DVGAsIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYnV0IGp1c3Qgc3BlY2lmeWluZyBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB0aGUgY29udGV4dC4KCldpdGggdGhhdCwgSSYjMzk7bSByZWFkeSB0byBtYXJrIHRoaXMgYXMgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDAwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DVF9ORVRMSU5LX0hFTFBFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeSYjMzQ7LAogICAgJiMzNDtuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3kmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgbmV0bGluayBhdHRyaWJ1dGVzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIHNwZWNpZmljYWxseSBmaXhpbmcgYSBjYXNlIHdoZXJlIG1heF9leHBlY3RlZCBpcyAwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DVF9ORVRMSU5LX0hFTFBFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeSYjMzQ7LAogICAgJiMzNDtuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3kmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9uZXcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgbmV0bGluayBhdHRyaWJ1dGVzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIHNwZWNpZmljYWxseSBmaXhpbmcgYSBjYXNlIHdoZXJlIG1heF9leHBlY3RlZCBpcyAwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTg6MDQuNTUzOTk0NjQ0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMDY3NTQxMTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NUX05FVExJTktfSEVMUEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3lcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfbmV3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgbmV0bGluayBhdHRyaWJ1dGVzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIHNwZWNpZmljYWxseSBmaXhpbmcgYSBjYXNlIHdoZXJlIG1heF9leHBlY3RlZCBpcyAwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoxODowNC41NTM5OTk0MzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjEyODc1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYyOGQ3MWVmODU1ODE3OTY5NzRlODQ4NjRmODE3NTU4YTcxYjRmMjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDA6MTg6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcXG5pbmRleCBmMTQ2MGI2ODNkN2FmNy4uMmNiY2NhOTExMGRiZjUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcXG5AQCAtMTYzLDYgKzE2Myw4IEBAIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cGVjdF9wb2xpY3ksXFxuIFxcdFxcdCAgICB0YltORkNUSF9QT0xJQ1lfTkFNRV0sIE5GX0NUX0hFTFBFUl9OQU1FX0xFTik7XFxuIFxcdGV4cGVjdF9wb2xpY3ktXFx1MDAzZW1heF9leHBlY3RlZCA9XFxuIFxcdFxcdG50b2hsKG5sYV9nZXRfYmUzMih0YltORkNUSF9QT0xJQ1lfRVhQRUNUX01BWF0pKTtcXG4rXFx0aWYgKCFleHBlY3RfcG9saWN5LVxcdTAwM2VtYXhfZXhwZWN0ZWQpXFxuK1xcdFxcdGV4cGVjdF9wb2xpY3ktXFx1MDAzZW1heF9leHBlY3RlZCA9IE5GX0NUX0VYUEVDVF9NQVhfQ05UO1xcbiBcXHRpZiAoZXhwZWN0X3BvbGljeS1cXHUwMDNlbWF4X2V4cGVjdGVkIFxcdTAwM2UgTkZfQ1RfRVhQRUNUX01BWF9DTlQpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTg6MDUuMDkwNzE0NDU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDE1MzA4MTEwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ1RfTkVUTElOS19IRUxQRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfcGFyc2VfZXhwZWN0X3BvbGljeVwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9uZXdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBvZiBuZXRsaW5rIGF0dHJpYnV0ZXMgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgc3BlY2lmaWNhbGx5IGZpeGluZyBhIGNhc2Ugd2hlcmUgbWF4X2V4cGVjdGVkIGlzIDAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXRmaWx0ZXIgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjI4ZDcxZWY4NTU4MTc5Njk3NGU4NDg2NGY4MTc1NThhNzFiNGYyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVuIDI3IDAwOjE4OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbmluZGV4IGYxNDYwYjY4M2Q3YWY3Li4yY2JjY2E5MTEwZGJmNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcbkBAIC0xNjMsNiArMTYzLDggQEAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwZWN0X3BvbGljeSxcbiBcdFx0ICAgIHRiW05GQ1RIX1BPTElDWV9OQU1FXSwgTkZfQ1RfSEVMUEVSX05BTUVfTEVOKTtcbiBcdGV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkID1cbiBcdFx0bnRvaGwobmxhX2dldF9iZTMyKHRiW05GQ1RIX1BPTElDWV9FWFBFQ1RfTUFYXSkpO1xuK1x0aWYgKCFleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZClcbitcdFx0ZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgPSBORl9DVF9FWFBFQ1RfTUFYX0NOVDtcbiBcdGlmIChleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZCBcdTAwM2UgTkZfQ1RfRVhQRUNUX01BWF9DTlQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTg6MDUuMDkwNzE1ODg1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMjE4MTc3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBuZXRmaWx0ZXIgQ29ubmVjdGlvbiBUcmFja2luZyBIZWxwZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmZuZXRsaW5rX2N0aGVscGVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgdG8gYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIFRoZSBjb2RlIHNuaXBwZXQgc2hvd3MgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWRgIGFmdGVyIHJldHJpZXZpbmcgaXQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGUgYE5GQ1RIX1BPTElDWV9FWFBFQ1RfTUFYYC5cblxuQmFzaWNhbGx5LCB0aGV5J3ZlIGFkZGVkIGEgY29uZGl0aW9uYWwgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGBORkNUSF9QT0xJQ1lfRVhQRUNUX01BWGAgaXMgemVyby4gSWYgaXQncyB6ZXJvLCB0aGUgY29kZSBub3cgZGVmYXVsdHMgYGV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkYCB0byBgTkZfQ1RfRVhQRUNUX01BWF9DTlRgLiBBZnRlciB0aGF0LCB0aGV5IGhhdmUgdGhlIG9yaWdpbmFsIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHZhbHVlIGlzIG5vdCBncmVhdGVyIHRoYW4gYE5GX0NUX0VYUEVDVF9NQVhfQ05UYCwgcmV0dXJuaW5nIGFuIGVycm9yIGlmIGl0IGlzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIGdvb2Qgc2FmZXR5IG1lYXN1cmUuIFByZXZpb3VzbHksIGEgemVybyB2YWx1ZSBmb3IgYG1heF9leHBlY3RlZGAgbWlnaHQgaGF2ZSBjYXVzZWQgaXNzdWVzLCBtYXliZSBsZWFkaW5nIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlLCBlc3BlY2lhbGx5IGlmIHRoZSBjb2RlIHdhc24ndCBoYW5kbGluZyB0aGUgemVybyBjYXNlIHByb3Blcmx5LiBEZWZhdWx0aW5nIHRvIGBORl9DVF9FWFBFQ1RfTUFYX0NOVGAgZ2l2ZXMgaXQgYSByZWFzb25hYmxlLCBzYWZlIG1heGltdW0uIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHNlZSBpZiBJIGNhbiBmaW5kIHRoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGlzIHBhdGNoLCBidXQgb24gdGhlIHN1cmZhY2UsIHRoaXMgbG9va3MgbGlrZSBhIGRlY2VudCBhZGRpdGlvbiBmb3Igcm9idXN0bmVzcy4gSXQncyBhIGZhaXJseSBzdGFuZGFyZCBhcHByb2FjaCB0byBoYW5kbGluZyBwb3RlbnRpYWxseSBtaXNzaW5nIG9yIGludmFsaWQgaW5wdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoxODoxNS4xMTI1MzU3NTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5OTcxMDg3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTE0NT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoxNDY6bmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwZWN0X3BvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE0Ny1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MTc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTc4Om5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXRbTkZDVEhfUE9MSUNZX1NFVF9NQVgrMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xNzktXFx0W05GQ1RIX1BPTElDWV9TRVRfTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xODM9bmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE5MC1cXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9TRVRfTUFYLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTkxOlxcdFxcdFxcdFxcdFxcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE5Mi1cXHRcXHRcXHRcXHRcXHQgIE5VTEwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yMDgtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyMDk6XFx0XFx0cmV0ID0gbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5KFxcdTAwMjZoZWxwZXItXFx1MDAzZWV4cGVjdF9wb2xpY3lbaV0sXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yMTAtXFx0XFx0XFx0XFx0XFx0XFx0ICB0YltORkNUSF9QT0xJQ1lfU0VUK2ldKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzY4PXN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3NS1cXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9TRVRfTUFYLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mzc2OlxcdFxcdFxcdFxcdFxcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3Ny1cXHRcXHRcXHRcXHRcXHQgIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoxODoxNi40MTIyNTQzOTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjYyNjIyNjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkFuYWx5emluZyBhIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLiBJIHJlY29nbml6ZSB0aGF0IGZ1bmN0aW9uOyBpdCdzIGEga2V5IHBhcnQgb2YgaG93IHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIgc3lzdGVtIGhhbmRsZXMgZXhwZWN0ZWQgY29ubmVjdGlvbnMsIHJpZ2h0PyBJdCdzIGNhbGxlZCBieSBgbmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5YCBhbmQsIEkgKnRoaW5rKiwgYWxzbyBieSBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5YCDigJMgYnV0IEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGxhc3QgcGFydC4gQmVzdCB0byBiZSBzdXJlLiBUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgY29udHJvbCBmbG93IGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgdG8gc2VlIGV4YWN0bHkgaG93IGFuZCB3aGVuIHRoaXMgcG9saWN5IGdldHMgbW9kaWZpZWQuXG5cbkdpdmVuIHRoYXQgdGhpcyBpcyBhIE5ldGZpbHRlciBtb2R1bGUsIHRoZSBmaXJzdCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBuZm5ldGxpbmtfY3RoZWxwZXIuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCBpdCBkb2VzIGluIHJlbGF0aW9uIHRvIHRoZSBLY29uZmlnIGZpbGUuIEknbGwgY2hlY2sgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB0aGF0IHBlcnRhaW4gdG8gdGhpcyBzcGVjaWZpYyBhcmVhIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFBlcmhhcHMgYSBzcGVjaWZpYyBmZWF0dXJlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgY29uZmlndXJhdGlvbiB0aGF0IGlzIHJlbGV2YW50IHRvIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IHVuZGVyc3RhbmQgd2hpY2ggZmVhdHVyZXMgYXJlIHN1cHBvcnRlZC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYWxsb3cgbWUgdG8gYW5hbHl6ZSB0aGUgcGF0Y2ggbW9yZSBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAwOjE4OjIxLjA3NDg3OTMyMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjIyMjUzMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZuZXRsaW5rX2N0aGVscGVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM4PW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX1RJTUVPVVQpICs9IG5mbmV0bGlua19jdHRpbWVvdXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSKSArPSBuZm5ldGxpbmtfY3RoZWxwZXIub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAwOjE4OjIxLjQzNzEwOTY3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MDk0MDAzNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIE5ldGxpbmsgSGVscGVyKipcblxuQWxyaWdodCwgSSdtIHN0YXJpbmcgYXQgdGhpcyBgTkZfQ1RfTkVUTElOS19IRUxQRVJgIGNvbmZpZyBvcHRpb24uIEl0J3Mgb2J2aW91c2x5IHNpZ25pZmljYW50LCBkZWFsaW5nIHdpdGggTmV0ZmlsdGVyIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBOZXRsaW5rIGZvciBjb25uZWN0aW9uIHRyYWNraW5nLiBUaGUgb2J2aW91cyBuZXh0IHN0ZXAgZm9yIG1lLCBnaXZlbiBteSBleHBlcnRpc2UsIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIGZvciBhbnkgKm90aGVyKiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLiBJJ20gdGhpbmtpbmcsIFwid2hhdCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIHJlbHkgb24gKnRoaXMqIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHk/XCIgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGRlcGVuZGVuY3kgdHJlZSwgYmVjYXVzZSB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcnJlbGF0aW9uc2hpcHMgaXMga2V5LiBJZiBJIGRvbid0IGtub3cgdGhlIGNvbXBsZXRlIHNldCBvZiBkZXBlbmRlbmNpZXMgSSBjb3VsZCBjYXVzZSBwcm9ibGVtcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBmaWd1cmluZyBvdXQgaWYgdGhlIGltcGxpY2F0aW9ucyBvZiBzZXR0aW5nIHRoaXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBvciBpZiBJIG5lZWQgdG8gYWRkcmVzcyBhIHdob2xlIGNhc2NhZGUgb2YgcmVsYXRlZCBjb25maWdzLiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBjaGFuZ2UgdGhlIHZhbHVlIGhlcmUuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTg6MzUuNTMxMTIxODQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NDE4MzczNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNzM9Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg1OmNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODYtXFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBpbiB1c2VyLXNwYWNlIHZpYSBOZXRsaW5rJ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoxODozNS44OTUzMDk5MjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY2Mjg2NDI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHByb21wdDpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlIG9mIE5GX0NUX05FVExJTktfSEVMUEVSKipcblxuT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBzdW1tYXJpemUgYSB0aG91Z2h0IHByb2Nlc3MgZm9jdXNlZCBvbiBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlICpkZXBlbmRlbmNpZXMqIG9mIHRoaXMgc3BlY2lmaWMgY29tcG9uZW50LiBJIGtub3cgaXQncyBhIGtlcm5lbCBtb2R1bGUsIGxpa2VseSByZWxhdGVkIHRvIG5ldGZpbHRlciBhbmQgY29ubmVjdGlvbiB0cmFja2luZywgYW5kIHRoYXQgXCJORVRMSU5LXCIgc3VnZ2VzdHMgY29tbXVuaWNhdGlvbiB3aXRoIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpc3NlY3Qgd2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBmdW5jdGlvbnMgYE5GX0NUX05FVExJTktfSEVMUEVSYCByZWxpZXMgdXBvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCB3aGljaCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yayBtaWdodCBiZSBpbnRlZ3JhdGVkLCBhbnkgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgcG9zc2libGUgaW50ZXJhY3Rpb25zIHdpdGggdXNlci1zcGFjZSB0b29scyBhbmQgaW50ZXJmYWNlcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IHRoaXMgaGVscGVyICpwcm92aWRlcyogYW5kIGZyb20gd2hpY2ggcGFydHMgb2YgdGhlIGtlcm5lbCBpdCdzIHVzZWQuIFRoaXMgZGVwZW5kZW5jeSBhbmFseXNpcyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJJ2xsIGJlIHRoaW5raW5nIGluIHRlcm1zIG9mIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGFuZCBwb3RlbnRpYWwgYnVpbGQgb3JkZXIgY29uY2VybnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoxOToxOS41NTgxNzY1NTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4NTpcXHRjb25maWcgTkZfQ1RfTkVUTElOS19IRUxQRVJcXG4gMzg2OlxcdFxcdHRyaXN0YXRlICdDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluaydcXG4gMzg3OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAzODg6XFx0XFx0ZGVwZW5kcyBvbiBORl9DVF9ORVRMSU5LXFxuIDM4OTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXFxuIDM5MDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcXG4gMzkxOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDM5MjpcXHRcXHRoZWxwXFxuIDM5MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHVzZXItc3BhY2UgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzXFxuIDM5NDpcXHRcXHQgIGluZnJhc3RydWN0dXJlLlxcbiAzOTU6XFx0XFxuIDM5NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IGBOJy5cXG4gMzk3OlxcdFxcbiAzOTg6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcXG4gMzk5OlxcdFxcdGJvb2wgXFxcIk5GUVVFVUUgYW5kIE5GTE9HIGludGVncmF0aW9uIHdpdGggQ29ubmVjdGlvbiBUcmFja2luZ1xcXCJcXG4gNDAwOlxcdFxcdGRlZmF1bHQgblxcbiA0MDE6XFx0XFx0ZGVwZW5kcyBvbiAoTkVURklMVEVSX05FVExJTktfUVVFVUUgfHwgTkVURklMVEVSX05FVExJTktfTE9HKSBcXHUwMDI2XFx1MDAyNiBORl9DVF9ORVRMSU5LXFxuIDQwMjpcXHRcXHRoZWxwXFxuIDQwMzpcXHRcXHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIE5GUVVFVUUgYW5kIE5GTE9HIGNhbiBpbmNsdWRlXFxuIDQwNDpcXHRcXHQgIENvbm5lY3Rpb24gVHJhY2tpbmcgaW5mb3JtYXRpb24gdG9nZXRoZXIgd2l0aCB0aGUgcGFja2V0IGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAwOjE5OjE5LjU1ODI3ODAwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzg3NDcyNDE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIENvbm5lY3Rpb24gVHJhY2tpbmcgSGVscGVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYW4gaXNzdWUgd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgTmV0bGluayBpbnRlcmZhY2UuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGUgY29yZSBmb2N1cyBpcyBhcm91bmQgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgd2hpY2ggaXMgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBhdCB0aGUgcm9vdCBvZiB0aGlzLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgTmV0bGluayBtZXNzYWdlcy4gSXQgYWxzbyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCBgbmZubF9jdGhlbHBlcl9uZXdgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyBiZWluZyBpbml0aWFsaXplZC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggY29ycmVjdHMgYSBzY2VuYXJpbyB3aGVyZSBgbWF4X2V4cGVjdGVkYCBpcyBtaXN0YWtlbmx5IHNldCB0byB6ZXJvLiBUaGUgcGF0Y2ggd2lsbCBzZXQgaXQgdG8gYE5GX0NUX0VYUEVDVF9NQVhfQ05UYCBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLCB3aGljaCBsaWtlbHkgcHJldmVudHMgYSBwb3RlbnRpYWwgaXNzdWUgb3IgdW5leHBlY3RlZCBiZWhhdmlvciB3aXRoIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlci5cblxuSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayBgbmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5YCBhbmQgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeWAgZm9yIGNvbXBsZXRlbmVzcyB0byB1bmRlcnN0YW5kIHRoZSBlbnRpcmUgd29ya2Zsb3cuIEJ1dCBmcm9tIGEgY3Vyc29yeSBnbGFuY2UsIHRoZSBmaXggc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBhbiBlZGdlIGNhc2UgaGFuZGxpbmcgYW5kIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MzgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoxOTozMy40MzMwMDQ2NjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2ODg0MzYyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZm5sX2N0aGVscGVyX25ld1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzkyPW5mbmxfY3RoZWxwZXJfdXBkYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MjYtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo0Mjc6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNDI4LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTc0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZubF9jdGhlbHBlcl9jYltORk5MX01TR19DVEhFTFBFUl9NQVhdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzUwLVxcdFtORk5MX01TR19DVEhFTFBFUl9ORVddXFx0PSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3NTE6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mbmxfY3RoZWxwZXJfbmV3LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtNzUyLVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX01VVEVYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoxOTozMy44MDE4NTI3OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDAzMTU5MjQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb25maWd1cmF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQncyBwcmV2ZW50aW5nIGBtYXhfZXhwZWN0ZWRgIGZyb20gYmVpbmcgc2V0IHRvIHplcm8uIEkgY2FuIGltbWVkaWF0ZWx5IHNlZSB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0J3MgbGlrZWx5IGJlaW5nIGRvbmUgdG8gYXZvaWQgYSBwb3RlbnRpYWwgYnVnIGRvd24gdGhlIGxpbmUuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuXG5cbkxvb2tpbmcgYXQgdGhlIGNvbmZpZ3MsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyByZWxhdGVkIHRvIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIExldCBtZSBzZWUuLi4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uIGEgZmV3IGtleSBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UgZnVsbHk6IGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLCBgbmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5YCwgYG5mbmxfY3RoZWxwZXJfbmV3YCwgYW5kIGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lgLiBUaGVzZSBhcmUgYWxsIHZlcnkgcmVsZXZhbnQgdG8gdGhlIGV4cGVjdGF0aW9uIGFuZCBwb2xpY3kgaGFuZGxpbmcgd2l0aGluIHRoaXMgTmV0bGluayBoZWxwZXIuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5YCBldmVuICpleGlzdHMqLiBJJ2xsIGRvdWJsZS1jaGVjayBpdHMgcHJlc2VuY2UgaW4gdGhlIGNvZGViYXNlIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgdmFsaWQgZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgc3Ryb25nIGluZGljYXRpb24gb2YgdGhlIHBhdGNoJ3Mgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyODMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTk6NDMuODMzNDQ3MzUyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDYxNzk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTI5Nj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyOTc6bmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZShjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKnBvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTI5OC1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKm5ld19wb2xpY3ksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTMyNy1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjMyODpzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9hbGwoc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTMyOS1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zNDgtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozNDk6XFx0XFx0cmV0ID0gbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZShcXHUwMDI2aGVscGVyLVxcdTAwM2VleHBlY3RfcG9saWN5W2ldLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzUwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZuZXdfcG9saWN5W2ldLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0zNjctXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzozNjg6c3RhdGljIGludCBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3koc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcixcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM2OS1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mzg4OlxcdHJldHVybiBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsKHRiLCBoZWxwZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzg5LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzkyPW5mbmxfY3RoZWxwZXJfdXBkYXRlKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy00MDQtXFx0aWYgKHRiW05GQ1RIX1BPTElDWV0pIHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjQwNTpcXHRcXHRyZXQgPSBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3koaGVscGVyLCB0YltORkNUSF9QT0xJQ1ldKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTQwNi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTk6NDMuODk4MDcyMzkxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODg0NDIxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbmZubF9jdGhlbHBlcmAgUG9saWN5IFVwZGF0ZSBGbG93KipcblxuT2theSwgc28gSSd2ZSBlc3RhYmxpc2hlZCB0aGF0IGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lgICpkb2VzKiBleGlzdCwgd2hpY2ggaXMgZ29vZC4gTm93LCBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gaG93IGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgIGlzIGhhbmRsZWQg4oCTIHRoYXQncyB0aGUgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQsIGFmdGVyIGFsbC4gUmlnaHQsIGBuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3lgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0IGRpcmVjdGx5LCB0aGF0IG11Y2ggSSByZW1lbWJlci4gVGhlIGluaXRpYWwgdGhvdWdodCB3YXMgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeWAgKml0c2VsZiogZGlkbid0IGNhbGwgYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAgZGlyZWN0bHksIGJ1dCBpdCBsb29rcyBsaWtlIGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfYWxsYCBtaWdodC4gSXQgY2FsbHMgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9vbmVgLCBhbmQgSSBkb24ndCB0aGluayB0aGF0IGNhbGxzIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbi4gSG93ZXZlciwgd2FpdCBhIG1pbnV0ZS4uLiBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5YCBjYWxscyBgbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkYCwgYW5kIHRoZW4gY2FsbHMgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9hbGxgLi4uIGFuZCB0aGF0J3MgdGhlIG9uZSBJIG5lZWQgdG8gZm9jdXMgb24uIFNvLCBpcyB0aGF0IHdoZXJlIHRoZSBjb25uZWN0aW9uIGxpZXM/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X2FsbGAgaXMgdGhlIHBhdGggdG8gYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAuIExvb2tzIGxpa2UgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9hbGxgIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyOTMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTk6NDguMjg2NTE2MTczWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzI1OlxcdFxcdHJldHVybiAwO1xcbiAzMjY6XFx0fVxcbiAzMjc6XFx0XFxuIDMyODpcXHRzdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9hbGwoc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4gMzI5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIpXFxuIDMzMDpcXHR7XFxuIDMzMTpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKm5ld19wb2xpY3k7XFxuIDMzMjpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKnBvbGljeTtcXG4gMzMzOlxcdFxcdGludCBpLCByZXQgPSAwO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHRuZXdfcG9saWN5ID0ga21hbGxvY19vYmpzKCpuZXdfcG9saWN5LCBoZWxwZXItXFx1MDAzZWV4cGVjdF9jbGFzc19tYXggKyAxKTtcXG4gMzM2OlxcdFxcdGlmICghbmV3X3BvbGljeSlcXG4gMzM3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzMzg6XFx0XFxuIDMzOTpcXHRcXHQvKiBDaGVjayBmaXJzdCB0aGF0IGFsbCBwb2xpY3kgYXR0cmlidXRlcyBhcmUgd2VsbC1mb3JtZWQsIHNvIHdlIGRvbid0XFxuIDM0MDpcXHRcXHQgKiBsZWF2ZSB0aGluZ3MgaW4gaW5jb25zaXN0ZW50IHN0YXRlIG9uIGVycm9ycy5cXG4gMzQxOlxcdFxcdCAqL1xcbiAzNDI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGhlbHBlci1cXHUwMDNlZXhwZWN0X2NsYXNzX21heCArIDE7IGkrKykge1xcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHRcXHRpZiAoIXRiW05GQ1RIX1BPTElDWV9TRVQgKyBpXSkge1xcbiAzNDU6XFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gMzQ2OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbiAzNDc6XFx0XFx0XFx0fVxcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHRcXHRyZXQgPSBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lKFxcdTAwMjZoZWxwZXItXFx1MDAzZWV4cGVjdF9wb2xpY3lbaV0sXFxuIDM1MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bmV3X3BvbGljeVtpXSxcXG4gMzUxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHRiW05GQ1RIX1BPTElDWV9TRVQgKyBpXSk7XFxuIDM1MjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMzUzOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbiAzNTQ6XFx0XFx0fVxcbiAzNTU6XFx0XFx0LyogTm93IHdlIGNhbiBzYWZlbHkgdXBkYXRlIHRoZW0uICovXFxuIDM1NjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaGVscGVyLVxcdTAwM2VleHBlY3RfY2xhc3NfbWF4ICsgMTsgaSsrKSB7XFxuIDM1NzpcXHRcXHRcXHRwb2xpY3kgPSAoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICopXFxuIDM1ODpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2aGVscGVyLVxcdTAwM2VleHBlY3RfcG9saWN5W2ldO1xcbiAzNTk6XFx0XFx0XFx0cG9saWN5LVxcdTAwM2VtYXhfZXhwZWN0ZWQgPSBuZXdfcG9saWN5W2ldLm1heF9leHBlY3RlZDtcXG4gMzYwOlxcdFxcdFxcdHBvbGljeS1cXHUwMDNldGltZW91dFxcdD0gbmV3X3BvbGljeVtpXS50aW1lb3V0O1xcbiAzNjE6XFx0XFx0fVxcbiAzNjI6XFx0XFxuIDM2MzpcXHRlcnI6XFxuIDM2NDpcXHRcXHRrZnJlZShuZXdfcG9saWN5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MTk6NDguMjg2NjA0ODkzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNzc0Mjc3MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlciBQb2xpY3kgVXBkYXRlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZWAgKmNhbGxzKiBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YD8gVGhhdCBzZWVtcyBhIGxpdHRsZSB1bnVzdWFsLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHJlbGF0aW9uc2hpcCBiZXR0ZXIuIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGUgY2FsbCBzdGFjay4gTGV0J3MgZGlnIGludG8gYG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9vbmVgIGl0c2VsZiB0byBzZWUgZXhhY3RseSBob3cgYW5kIHdoeSB0aGlzIGNhbGwgdG8gYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAgaXMgaGFwcGVuaW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgaW50ZXJhY3Rpb24gaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBwb2xpY3kgdXBkYXRlIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NzQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDAwOjIwOjA5LjA2MDg4MzkzNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXHRrZnJlZShoZWxwZXIpO1xcbiAyOTE6XFx0ZXJyX2N0aDpcXG4gMjkyOlxcdFxcdGtmcmVlKG5mY3RoKTtcXG4gMjkzOlxcdFxcdHJldHVybiByZXQ7XFxuIDI5NDpcXHR9XFxuIDI5NTpcXHRcXG4gMjk2OlxcdHN0YXRpYyBpbnRcXG4gMjk3OlxcdG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeV9vbmUoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpwb2xpY3ksXFxuIDI5ODpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKm5ld19wb2xpY3ksXFxuIDI5OTpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKVxcbiAzMDA6XFx0e1xcbiAzMDE6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbTkZDVEhfUE9MSUNZX01BWCArIDFdO1xcbiAzMDI6XFx0XFx0aW50IGVycjtcXG4gMzAzOlxcdFxcbiAzMDQ6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBORkNUSF9QT0xJQ1lfTUFYLCBhdHRyLFxcbiAzMDU6XFx0XFx0XFx0XFx0XFx0XFx0ICBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2wsIE5VTEwpO1xcbiAzMDY6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDMwNzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMDg6XFx0XFxuIDMwOTpcXHRcXHRpZiAoIXRiW05GQ1RIX1BPTElDWV9OQU1FXSB8fFxcbiAzMTA6XFx0XFx0ICAgICF0YltORkNUSF9QT0xJQ1lfRVhQRUNUX01BWF0gfHxcXG4gMzExOlxcdFxcdCAgICAhdGJbTkZDVEhfUE9MSUNZX0VYUEVDVF9USU1FT1VUXSlcXG4gMzEyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMTM6XFx0XFxuIDMxNDpcXHRcXHRpZiAobmxhX3N0cmNtcCh0YltORkNUSF9QT0xJQ1lfTkFNRV0sIHBvbGljeS1cXHUwMDNlbmFtZSkpXFxuIDMxNTpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHRuZXdfcG9saWN5LVxcdTAwM2VtYXhfZXhwZWN0ZWQgPVxcbiAzMTg6XFx0XFx0XFx0bnRvaGwobmxhX2dldF9iZTMyKHRiW05GQ1RIX1BPTElDWV9FWFBFQ1RfTUFYXSkpO1xcbiAzMTk6XFx0XFx0aWYgKG5ld19wb2xpY3ktXFx1MDAzZW1heF9leHBlY3RlZCBcXHUwMDNlIE5GX0NUX0VYUEVDVF9NQVhfQ05UKVxcbiAzMjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdG5ld19wb2xpY3ktXFx1MDAzZXRpbWVvdXQgPVxcbiAzMjM6XFx0XFx0XFx0bnRvaGwobmxhX2dldF9iZTMyKHRiW05GQ1RIX1BPTElDWV9FWFBFQ1RfVElNRU9VVF0pKTtcXG4gMzI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwMDoyMDowOS4wNjA5NzA3OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc0ODA3NDI2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIGEgUG90ZW50aWFsIE92ZXJzaWdodCoqXG5cbk9rYXksIGhlcmUncyB3aGF0J3MgcnVubmluZyB0aHJvdWdoIG15IG1pbmQuIEkgaW5pdGlhbGx5IHNhdyBhIGJ1ZywgYW5kIG15IGZpcnN0IHRob3VnaHQgd2FzLCBcIldhaXQsIGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lYCBoYXMgdGhlIHNhbWUgYnVnIVwiIEkganVtcGVkIHRoZSBndW4gYSBsaXR0bGUsIHRob3VnaC4gVGhlIHBhdGNoIG9ubHkgdG91Y2hlZCBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCwgc28gbGV0J3MgcXVpY2tseSByZXZpZXcgdGhhdCBjb2RlIGFnYWluIHRvIG1ha2Ugc3VyZSBJJ20gc2VlaW5nIGl0IHJpZ2h0OlxuXG5gYGBjXG5cdGV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkID1cblx0XHRudG9obChubGFfZ2V0X2JlMzIodGJbTkZDVEhfUE9MSUNZX0VYUEVDVF9NQVhdKSk7XG4rXHRpZiAoIWV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkKVxuK1x0XHRleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZCA9IE5GX0NUX0VYUEVDVF9NQVhfQ05UO1xuIFx0aWYgKGV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkIFx1MDAzZSBORl9DVF9FWFBFQ1RfTUFYX0NOVClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5gYGBcblxuUmlnaHQsIGl0IGxvb2tzIGdvb2QuIEl0J3MgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgYG1heF9leHBlY3RlZGAgbWlnaHQgYmUgemVybywgd2hpY2ggaXMgbGlrZWx5IHRoZSByb290IG9mIHRoZSBidWcgSSB3YXMgdGhpbmtpbmcgb2YuXG5cbkkgd2FzIGdldHRpbmcgYWhlYWQgb2YgbXlzZWxmLCBhbmQgd2FzIGNvbmNlcm5lZCBgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5X29uZWAgd2FzIG1pc3NlZCwgYnV0IGl0IHdhcyBub3QuIEkndmUgcmVjaGVja2VkIHRoZSBwYXRjaCBhbmQgaXQgb25seSBtb2RpZmllcyBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YC4gU28gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoZXNlIHR3bywgYW5kIGVuc3VyZSB0aGlzIGZpeCBtYWtlcyBpdCBpbnRvIGBuZm5sX2N0aGVscGVyX3VwZGF0ZV9wb2xpY3lfb25lYC5cblxuQXQgdGhpcyBwb2ludCwgSSdtIGNvbmZpZGVudCB0aGUgcGF0Y2ggaXRzZWxmIGlzIGZ1bmN0aW9uYWwuIExldCdzIG1ha2Ugc3VyZSBJJ20gY2xlYXIgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBXZSdyZSB0YWxraW5nIGFib3V0IGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLCBgbmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5YCwgYW5kIGBuZm5sX2N0aGVscGVyX25ld2AuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9ucy4gV2UncmUgd29ya2luZyB3aXRoIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgY29uZmlnLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEFoLCB5ZXMsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAgZGVwZW5kcyBvbiBgTkZfQ1RfTkVUTElOS2AsIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAsIGBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUYCwgYW5kIGBORVRGSUxURVJfQURWQU5DRURgLCBidXQganVzdCBzcGVjaWZ5aW5nIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSBjb250ZXh0LlxuXG5XaXRoIHRoYXQsIEknbSByZWFkeSB0byBtYXJrIHRoaXMgYXMgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNjQsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDA6MjA6MjYuNTQxNzE1NDY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk4MDY1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NUX05FVExJTktfSEVMUEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3lcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfbmV3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgbmV0bGluayBhdHRyaWJ1dGVzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIHNwZWNpZmljYWxseSBmaXhpbmcgYSBjYXNlIHdoZXJlIG1heF9leHBlY3RlZCBpcyAwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NUX05FVExJTktfSEVMUEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5XCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX3BhcnNlX2V4cGVjdF9wb2xpY3lcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfbmV3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgbmV0bGluayBhdHRyaWJ1dGVzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIHNwZWNpZmljYWxseSBmaXhpbmcgYSBjYXNlIHdoZXJlIG1heF9leHBlY3RlZCBpcyAwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6x9wx[1] Phase: Succeeded StartedAt: 2026-06-27 00:20:37 +0000 UTC FinishedAt: 2026-06-27 00:20:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-27 00:20:37 +0000 UTC FinishedAt: 2026-06-27 00:20:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2] Phase: Succeeded StartedAt: 2026-06-27 00:20:37 +0000 UTC FinishedAt: 2026-06-27 04:11:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:20:37 +0000 UTC FinishedAt: 2026-06-27 04:11:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:20:37 +0000 UTC FinishedAt: 2026-06-27 00:20:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:20:37 +0000 UTC FinishedAt: 2026-06-27 00:20:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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-workflow6x9wx/series-workflow6x9wx-convert-artifact-1984487225/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:20:47 +0000 UTC FinishedAt: 2026-06-27 00:43:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:20:47 +0000 UTC FinishedAt: 2026-06-27 00:43:42 +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:*6e7ac4e6-5790-4859-86b1-af56047a235c,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-workflow6x9wx/series-workflow6x9wx-convert-artifact-1984487225/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": "be6858e3-0523-4985-8d62-2b0b3dd52221", "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-workflow6x9wx/series-workflow6x9wx-build-action-3566029911/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:20:47 +0000 UTC FinishedAt: 2026-06-27 00:43:32 +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:*6e7ac4e6-5790-4859-86b1-af56047a235c,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-workflow6x9wx/series-workflow6x9wx-convert-artifact-1984487225/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": "be6858e3-0523-4985-8d62-2b0b3dd52221", "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-workflow6x9wx/series-workflow6x9wx-build-action-3566029911/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:43:42 +0000 UTC FinishedAt: 2026-06-27 00:43:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:43:42 +0000 UTC FinishedAt: 2026-06-27 00:43:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:43:42 +0000 UTC FinishedAt: 2026-06-27 00:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:43:42 +0000 UTC FinishedAt: 2026-06-27 00:43:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-workflow6x9wx/series-workflow6x9wx-convert-artifact-183283724/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:43:52 +0000 UTC FinishedAt: 2026-06-27 00:45:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:43:52 +0000 UTC FinishedAt: 2026-06-27 00:45:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*be6858e3-0523-4985-8d62-2b0b3dd52221,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-workflow6x9wx/series-workflow6x9wx-build-action-3566029911/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-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:45:58 +0000 UTC FinishedAt: 2026-06-27 00:45:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:45:58 +0000 UTC FinishedAt: 2026-06-27 00:45:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:45:58 +0000 UTC FinishedAt: 2026-06-27 01:06:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:45:58 +0000 UTC FinishedAt: 2026-06-27 01:06:28 +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:*6e7ac4e6-5790-4859-86b1-af56047a235c,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-workflow6x9wx/series-workflow6x9wx-convert-artifact-183283724/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": "4c8291a3-fe0c-4ba0-b7d3-79f5076fc159", "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-workflow6x9wx/series-workflow6x9wx-build-action-1624708136/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 00:45:58 +0000 UTC FinishedAt: 2026-06-27 01:06:18 +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:*6e7ac4e6-5790-4859-86b1-af56047a235c,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-workflow6x9wx/series-workflow6x9wx-convert-artifact-183283724/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": "4c8291a3-fe0c-4ba0-b7d3-79f5076fc159", "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-workflow6x9wx/series-workflow6x9wx-build-action-1624708136/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 01:06:28 +0000 UTC FinishedAt: 2026-06-27 01:06:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 01:06:28 +0000 UTC FinishedAt: 2026-06-27 01:06:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 01:06:28 +0000 UTC FinishedAt: 2026-06-27 01:08:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 01:06:28 +0000 UTC FinishedAt: 2026-06-27 01:08:18 +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:*4c8291a3-fe0c-4ba0-b7d3-79f5076fc159,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-workflow6x9wx/series-workflow6x9wx-build-action-1624708136/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-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 01:08:28 +0000 UTC FinishedAt: 2026-06-27 04:11:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 01:08:28 +0000 UTC FinishedAt: 2026-06-27 04:11:59 +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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"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:*be6858e3-0523-4985-8d62-2b0b3dd52221,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4c8291a3-fe0c-4ba0-b7d3-79f5076fc159,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-workflow6x9wx/series-workflow6x9wx-build-action-3566029911/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-workflow6x9wx/series-workflow6x9wx-build-action-1624708136/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 01:08:28 +0000 UTC FinishedAt: 2026-06-27 01:08:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 01:08:28 +0000 UTC FinishedAt: 2026-06-27 01:08:49 +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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"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-workflow6x9wx/series-workflow6x9wx-convert-artifact-3399454837/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 01:08:28 +0000 UTC FinishedAt: 2026-06-27 01:08:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 01:08:28 +0000 UTC FinishedAt: 2026-06-27 01:08:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 01:08:28 +0000 UTC FinishedAt: 2026-06-27 01:08:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 01:08:57 +0000 UTC FinishedAt: 2026-06-27 04:11:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6x9wx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"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":["nfnl_cthelper_expect_policy","nfnl_cthelper_parse_expect_policy","nfnl_cthelper_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK_HELPER"],"series_id":"636d481a-db05-4649-a58d-023f412402aa","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-06-27 01:08:57 +0000 UTC FinishedAt: 2026-06-27 04:11:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*be6858e3-0523-4985-8d62-2b0b3dd52221,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4c8291a3-fe0c-4ba0-b7d3-79f5076fc159,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-workflow6x9wx/series-workflow6x9wx-build-action-3566029911/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-workflow6x9wx/series-workflow6x9wx-build-action-1624708136/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-workflow6x9wx/series-workflow6x9wx-convert-artifact-3399454837/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,}