Name: series-workflow5xnrk Phase: Succeeded StartedAt: 2026-08-23 12:11:35 +0000 UTC FinishedAt: 2026-08-23 16:08:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[0] Phase: Succeeded StartedAt: 2026-08-23 12:11:35 +0000 UTC FinishedAt: 2026-08-23 12:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[0].run-triage Phase: Succeeded StartedAt: 2026-08-23 12:11:35 +0000 UTC FinishedAt: 2026-08-23 12:28:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_IGMP_SNOOPING", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_IGMP_SNOOPING", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q", "INET" ], "series_id": "9eb97dc1-6915-4b57-a8d7-60016c116bc4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_multicast_toggle_one_vlan", "br_multicast_toggle_vlan_snooping", "br_vlan_add" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbiYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9hZGQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdvdWxkIGluY29ycmVjdGx5IHJldHVybiBlYXJseSB3aGVuIHRvZ2dsaW5nIG9mZiBtdWx0aWNhc3QgZm9yIGEgbm9uLWJyZW50cnkgVkxBTi4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgc3RhdGUgbWFuYWdlbWVudCBmaXguIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgaXQgd291bGQgcmV0dXJuIGVhcmx5IHdoZW4gZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gaWYgdGhlIFZMQU4gaXMgbm90IGEgYnJpZGdlIGVudHJ5LiBUaGlzIGNvdWxkIGxlYXZlIHRoZSBtdWx0aWNhc3QgY29udGV4dCBhY3RpdmUgYW5kIHRoZSBgQlJfVkxGTEFHX01DQVNUX0VOQUJMRURgIGZsYWcgc2V0LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyB3aGVuIHRoZSBWTEFOIGlzIGRlc3Ryb3llZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJyaWRnZSBtdWx0aWNhc3QgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGFkZGluZy9yZW1vdmluZy9tb2RpZnlpbmcgYnJpZGdlIFZMQU5zIG9yIHRvZ2dsaW5nIG11bHRpY2FzdCBzbm9vcGluZy4gSXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY0Njg5MjIwNzlkNDY3ZWY5ZTk2ZTJiODYxNmM0MTUxZjM3MTNhYzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxMjoyNTo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuaW5kZXggNzVlMWUyYThmYzgzYS4uM2VmNWQ4YmJmNTUyZSAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbkBAIC00Mzc3LDggJiM0Mzs0Mzc3LDggQEAgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4gXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHtcbiBcdFx0YnIgPSB2bGFuLVx1MDAzZWJyO1xuIFxuLVx0XHRpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuLVx0XHQgICAgKG9uIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8XG4gXHRcdCAgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChcdTAwMjZ2bGFuLVx1MDAzZWJyX21jYXN0X2N0eCkpKVxuIFx0XHRcdHJldHVybjtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyYjMzQ7LAogICAgJiMzNDticl92bGFuX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgaXQgd291bGQgcmV0dXJuIGVhcmx5IHdoZW4gZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gaWYgdGhlIFZMQU4gaXMgbm90IGEgYnJpZGdlIGVudHJ5LiBUaGlzIGNvdWxkIGxlYXZlIHRoZSBtdWx0aWNhc3QgY29udGV4dCBhY3RpdmUgYW5kIHRoZSBgQlJfVkxGTEFHX01DQVNUX0VOQUJMRURgIGZsYWcgc2V0LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyB3aGVuIHRoZSBWTEFOIGlzIGRlc3Ryb3llZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJyaWRnZSBtdWx0aWNhc3QgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGFkZGluZy9yZW1vdmluZy9tb2RpZnlpbmcgYnJpZGdlIFZMQU5zIG9yIHRvZ2dsaW5nIG11bHRpY2FzdCBzbm9vcGluZy4gSXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY0Njg5MjIwNzlkNDY3ZWY5ZTk2ZTJiODYxNmM0MTUxZjM3MTNhYzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyMyAxMjoyNTo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCmluZGV4IDc1ZTFlMmE4ZmM4M2EuLjNlZjVkOGJiZjU1MmUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwpAQCAtNDM3Nyw4ICYjNDM7NDM3Nyw4IEBAIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKQogCWlmIChicl92bGFuX2lzX21hc3Rlcih2bGFuKSkgewogCQliciA9IHZsYW4tJmd0O2JyOwogCi0JCWlmICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8Ci0JCSAgICAob24gJmFtcDsmYW1wOwomIzQzOwkJaWYgKG9uICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fAogCQkgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoJmFtcDt2bGFuLSZndDticl9tY2FzdF9jdHgpKSkKIAkJCXJldHVybjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJyaWRnZSBNdWx0aWNhc3QgUGF0Y2gqKgoKT2theSwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB0b3VjaGluZyB0aGUgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBpbiB0aGUgZGlmZi4KCkFscmlnaHQsIEkgc2VlIGl0LiBUaGUgY29yZSBvZiB0aGUgbG9naWMgcmV2b2x2ZXMgYXJvdW5kIHRoaXMgY29uZGl0aW9uYWwgcmV0dXJuIHN0YXRlbWVudC4gUHJldmlvdXNseSwgaXQgbG9va2VkIGxpa2UgdGhpczoKCmBgYGMKCQlpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fAoJCSAgICAob24gJmFtcDsmYW1wOwoJCSAgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZCgmYW1wO3ZsYW4tJmd0O2JyX21jYXN0X2N0eCkpKQoJCQlyZXR1cm47CmBgYAoKQW5kIG5vdyBpdCYjMzk7czoKCmBgYGMKCQlpZiAob24gJmFtcDsmYW1wOwoJCSAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fAoJCSAgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZCgmYW1wO3ZsYW4tJmd0O2JyX21jYXN0X2N0eCkpKQoJCQlyZXR1cm47CmBgYAoKUmlnaHQgYXdheSwgSSBjYW4gc2VlIHRoZSBjaGFuZ2UgYWx0ZXJzIHRoZSBsb2dpYyBmbG93IHNpZ25pZmljYW50bHkuIFRoZSBvcmlnaW5hbCBjb2RlIHJldHVybmVkIGVhcmx5IGlmIGVpdGhlciBgIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAgT1IgaWYgYG9uYCB3YXMgdHJ1ZSBBTkQgdGhlIGdsb2JhbCBtdWx0aWNhc3QgY29udGV4dCB3YXMgZGlzYWJsZWQuIE5vdywgaXQgKm9ubHkqIHJldHVybnMgZWFybHkgaWYgYG9uYCBpcyB0cnVlIEFORCBlaXRoZXIgYCFicl92bGFuX2lzX2JyZW50cnkodmxhbilgIG9yIHRoZSBnbG9iYWwgY29udGV4dCBpcyBkaXNhYmxlZC4gRXNzZW50aWFsbHksIHRoZSBwYXRjaCBpcyBtYWtpbmcgdGhlIGAhYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pYCBjaGVjayBjb25kaXRpb25hbCBvbiBgb25gIGJlaW5nIHRydWUuIElmIGBvbmAgaXMgZmFsc2UsIGl0JiMzOTtzIG5vdCBnb2luZyB0byByZXR1cm4uIFRoaXMgaXMgdGhlIGNyaXRpY2FsIGNoYW5nZS4gTGV0IG1lIGdvIGJhY2sgYW5kIGxvb2sgYXQgdGhlIGZ1bmN0aW9uLCBhbmQgZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzQwPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjUtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjcte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDQxMT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjMtXHRcdFx0Y29udGludWU7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MjQ6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odnBvcnQsIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyNS1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjctXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI4Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQnJpZGdlIE11bHRpY2FzdCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGdvdmVybiB0aGUgbXVsdGljYXN0IGJlaGF2aW91ciBpbiB0aGlzIGJyaWRnZS4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHdlJiMzOTtsbCBiZSBkZWFsaW5nIHdpdGggYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIGhlcmUuIEFuZCBhIHF1aWNrIHNjYW4gc3VnZ2VzdHMgbXkgaW50dWl0aW9uIGlzIGNvcnJlY3QgLSB0aGlzIGNvZGUgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgb25seSB3aGVuIGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgIGlzIGVuYWJsZWQuIFRpbWUgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgc3BlY2lmaWVkIGluIHRoZSBgbmV0L2JyaWRnZS9NYWtlZmlsZWAuIEkgd2lsbCB2ZXJpZnkgaWYgdGhpcyBpcyB0aGUgb25seSBvcHRpb24gaW52b2x2ZWQgb3IgaWYgdGhlcmUgYXJlIG90aGVyLCBtb3JlIHN1YnRsZSBmYWN0b3JzIGF0IHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSAmIzQzOz0gYnJfbmV0ZmlsdGVyLm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjAtXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIxOmJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgJiM0Mzs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTQ4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJyaWRnZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGJyaWRnZSBjb25maWd1cmF0aW9uLCBhbmQgaXQmIzM5O3MgbG9va2luZyBsaWtlIGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgIGlzIGEgZGVmaW5pdGUgcmVxdWlyZW1lbnQuIE5vIHN1cnByaXNlcyB0aGVyZS4gT2YgY291cnNlLCBgQ09ORklHX0JSSURHRWAgaXRzZWxmIGlzIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2ssIHNvIHRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCBJJiMzOTttIHNlZWluZyB0aGlzIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBmdW5jdGlvbiwgYW5kIHRoZSAmIzM0O3ZsYW4mIzM0OyBpbiB0aGUgbmFtZSBpcyB0cmlnZ2VyaW5nIGEgZmxhZy4gSXQmIzM5O3MgbWFraW5nIG1lIHdvbmRlciBpZiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgYWxzbyBhIGRlcGVuZGVuY3kuIEdpdmVuIGhvdyBWTEFOcyBhbmQgbXVsdGljYXN0IG9mdGVuIHBsYXkgdG9nZXRoZXIgaW4gYnJpZGdpbmcgc2NlbmFyaW9zLCBpdCB3b3VsZCBtYWtlIHNlbnNlLiBCZXN0IHRvIHZlcmlmeSB0aGlzLCBzbyBJJiMzOTtsbCBqdW1wIHN0cmFpZ2h0IGludG8gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29uZmlybSB0aGUgcmVsYXRpb25zaGlwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzNDA9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2Njp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Ny17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NDExPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyMy1cdFx0XHRjb250aW51ZTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQyNDpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2cG9ydCwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI1LVx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyNy1cdGlmIChicl92bGFuX2lzX2JyZW50cnkodmxhbikpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0Mjg6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odmxhbiwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI5LX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDczPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDc0OnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzUtaW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU1MD1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTQtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTU1OnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTU2LVx0XHRcdFx0XHRcdGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjAzPXN0YXRpYyB2b2lkIGJyX3ZsYW5fcHV0X21hc3RlcihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptYXN0ZXJ2KVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNC1cdFx0X192bGFuX2RlbF9saXN0KG1hc3RlcnYpO1xubmV0L2JyaWRnZS9icl92bGFuLmM6MjE1Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKG1hc3RlcnYsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNi1cdFx0YnJfbXVsdGljYXN0X2N0eF9kZWluaXQoXHUwMDI2bWFzdGVydi1cdTAwM2Vicl9tY2FzdF9jdHgpO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTI2Mz1zdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM1OC1cdF9fdmxhbl9mbGFnc19jb21taXQodiwgZmxhZ3MpO1xubmV0L2JyaWRnZS9icl92bGFuLmM6MzU5Olx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2LCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM2MC1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0zOTA9c3RhdGljIGludCBfX3ZsYW5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNDI3LVx0XHRuYnBfdmxhbl9zZXRfdmxhbl9kZXZfc3RhdGUocCwgdi1cdTAwM2V2aWQpO1xubmV0L2JyaWRnZS9icl92bGFuLmM6NDI4Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQyOS1cdFx0YnJfbXVsdGljYXN0X3BvcnRfY3R4X2RlaW5pdChcdTAwMjZ2LVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz03MTk9c3RhdGljIGludCBicl92bGFuX2FkZF9leGlzdGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNzYwLVx0XHQqY2hhbmdlZCA9IHRydWU7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3NjE6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odmxhbiwgdHJ1ZSk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk5NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aGluZ3M6CgoqKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IFZMQU4gVG9nZ2xlIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNsZWFyIGl0JiMzOTtzIHBhcnQgb2YgdGhlIFZMQU4gZmlsdGVyaW5nIGxvZ2ljIHdpdGhpbiB0aGUgYnJpZGdpbmcgc3Vic3lzdGVtLiBUaGUgY29udGV4dCBjbHVlcyBwb2ludCBtZSB0byBgYnJfdmxhbi5jYC4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCBjb21waWxhdGlvbiBvZiBgYnJfdmxhbi5jYCBpcyBjb25kaXRpb25hbCwgZGVwZW5kaW5nIG9uIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gUmlnaHQsIHNvIHRoaXMgc3VnZ2VzdHMgdGhhdCBJIG5lZWQgdG8gY29uZmlybSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB0aGUgYG5ldC9icmlkZ2UvTWFrZWZpbGVgIHRvIHZlcmlmeSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgY29uZmlybSBob3cgYGJyX3ZsYW4uY2AgaXMgaW50ZWdyYXRlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGVuIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl92bGFuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlPTIxPWJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgJiM0Mzs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cbm5ldC9icmlkZ2UvTWFrZWZpbGU6MjM6YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgJiM0Mzs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzk2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqVkxBTiBGaWx0ZXJpbmcgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KioKClJpZ2h0LCBzbywgZGVmaW5pdGVseSwgd2UgbmVlZCBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgZW5hYmxlZC4gVGhhdCBtdWNoIGlzIGNsZWFyLiBMb29raW5nIGF0IHRoZSBicm9hZGVyIHBpY3R1cmUsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjb25maWd1cmF0aW9uIHRoYXQgaW5jbHVkZXMgYEJSSURHRWAsIGBCUklER0VfSUdNUF9TTk9PUElOR2AsIGFuZCBjcnVjaWFsbHksIHRoaXMgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlJiMzOTtyZSBlc3RhYmxpc2hpbmcgdGhlIGNvcmUgYnJpZGdlIGZ1bmN0aW9uYWxpdHksIGFkZGluZyBJR01QIHNub29waW5nIGZvciBtdWx0aWNhc3Qgb3B0aW1pemF0aW9uLCBhbmQgdGhlbiB0aGUgVkxBTiBmaWx0ZXJpbmcgY2FwYWJpbGl0eSB0byBtYW5hZ2UgdHJhZmZpYyBzZXBhcmF0aW9uLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgVkxBTiBmaWx0ZXJpbmcgaW50ZXJhY3RzIHdpdGggbXVsdGljYXN0IGZvcndhcmRpbmcuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGxpbmNocGluIGZvciBjb250cm9sbGluZyBtdWx0aWNhc3QgdHJhZmZpYyBvbiBhIHBlci1WTEFOIGJhc2lzIHdpdGhpbiB0aGUgYnJpZGdlLiBJdCBzaG91bGQgc2hlZCBsaWdodCBvbiBob3cgd2UgaGFuZGxlIG11bHRpY2FzdCBtZW1iZXJzaGlwIGFjcm9zcyBkaWZmZXJlbnQgVkxBTnMgZ2l2ZW4gdGhlIGZpbHRlcmluZyBjYXBhYmlsaXRpZXMuIFVuZGVyc3RhbmRpbmcgaG93IHRoYXQgdG9nZ2xlIHdvcmtzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzY2Olx0dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG40MzY3Olx0e1xuNDM2ODpcdFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xuNDM2OTpcdFxuNDM3MDpcdFx0LyogaXQmIzM5O3Mgb2theSB0byBjaGVjayBmb3IgdGhlIGZsYWcgd2l0aG91dCB0aGUgbXVsdGljYXN0IGxvY2sgYmVjYXVzZSBpdFxuNDM3MTpcdFx0ICogY2FuIG9ubHkgY2hhbmdlIHVuZGVyIFJUTkwgLVx1MDAzZSBtdWx0aWNhc3RfbG9jaywgd2UgbmVlZCB0aGUgbGF0dGVyIHRvXG40MzcyOlx0XHQgKiBzeW5jIHdpdGggdGltZXJzIGFuZCBwYWNrZXRzXG40MzczOlx0XHQgKi9cbjQzNzQ6XHRcdGlmIChvbiA9PSAhISh2bGFuLVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEKSlcbjQzNzU6XHRcdFx0cmV0dXJuO1xuNDM3NjpcdFxuNDM3NzpcdFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSB7XG40Mzc4Olx0XHRcdGJyID0gdmxhbi1cdTAwM2VicjtcbjQzNzk6XHRcbjQzODA6XHRcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNlxuNDM4MTpcdFx0XHQgICAgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHxcbjQzODI6XHRcdFx0ICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKFx1MDAyNnZsYW4tXHUwMDNlYnJfbWNhc3RfY3R4KSkpXG40MzgzOlx0XHRcdFx0cmV0dXJuO1xuNDM4NDpcdFxuNDM4NTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuNDM4NjpcdFx0XHR2bGFuLVx1MDAzZXByaXZfZmxhZ3MgXj0gQlJfVkxGTEFHX01DQVNUX0VOQUJMRUQ7XG40Mzg3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjQzODg6XHRcbjQzODk6XHRcdFx0aWYgKG9uKVxuNDM5MDpcdFx0XHRcdF9fYnJfbXVsdGljYXN0X29wZW4oXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpO1xuNDM5MTpcdFx0XHRlbHNlXG40MzkyOlx0XHRcdFx0X19icl9tdWx0aWNhc3Rfc3RvcChcdTAwMjZ2bGFuLVx1MDAzZWJyX21jYXN0X2N0eCk7XG40MzkzOlx0XHR9IGVsc2Uge1xuNDM5NDpcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4O1xuNDM5NTpcdFxuNDM5NjpcdFx0XHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbjQzOTc6XHRcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNiBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKGJybWN0eCkpXG40Mzk4Olx0XHRcdFx0cmV0dXJuO1xuNDM5OTpcdFxuNDQwMDpcdFx0XHRiciA9IHZsYW4tXHUwMDNlcG9ydC1cdTAwM2VicjtcbjQ0MDE6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjQ0MDI6XHRcdFx0dmxhbi1cdTAwM2Vwcml2X2ZsYWdzIF49IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEO1xuNDQwMzpcdFx0XHRpZiAob24pXG40NDA0Olx0XHRcdFx0X19icl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KFx1MDAyNnZsYW4tXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuNDQwNTpcdFx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NDAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQWRkcmVzc2luZyBhIEJyaWRnZSBNdWx0aWNhc3QgQnVnKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgbmFzdHkgYnVnLiBJdCBzZWVtcyB0aGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIGZhbHNlKWAgaGFkIGEgcHJlbWF0dXJlIGV4aXQgY29uZGl0aW9uIGlmIGAhYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2NlbmFyaW8gZm9yIGxlYXZpbmcgYSBtdWx0aWNhc3QgY29udGV4dCBydW5uaW5nIGFuZCBgQlJfVkxGTEFHX01DQVNUX0VOQUJMRURgIGhhbmdpbmcgYXJvdW5kLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBtZW1vcnkgbGVhayB3aGVuIHRoZSBWTEFOIGdldHMgdG9ybiBkb3duLiBOb3QgZ29vZCwgbm90IGdvb2QgYXQgYWxsLgoKVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UsIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYy4gVGhlIGNydWNpYWwgY2FsbCBzZXF1ZW5jZSBhcHBlYXJzIHRvIGJlIGBicl92bGFuX3B1dF9tYXN0ZXJgIHdoaWNoIHRoZW4gdHJpZ2dlcnMgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpYC4gTG9va3MgbGlrZSBhIGNvbW1vbiBzY2VuYXJpbywgYW5kIGEgZ29vZCBzcG90IHRvIGNhdXNlIHRoZSBidWcuCgpJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBicl92bGFuX3B1dF9tYXN0ZXJgIGZ1bmN0aW9uIGl0c2VsZi4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZSB0byBjb25maXJtIHRoZSBwYXRjaCYjMzk7cyBsb2dpYyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyB2dWxuZXJhYmlsaXR5IHdhcyBpbnRyb2R1Y2VkIGluIHRoZSBmaXJzdCBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAzOlx0c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXG4gMjA0Olx0e1xuIDIwNTpcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4gMjA2Olx0XG4gMjA3Olx0XHRpZiAoIWJyX3ZsYW5faXNfbWFzdGVyKG1hc3RlcnYpKVxuIDIwODpcdFx0XHRyZXR1cm47XG4gMjA5Olx0XG4gMjEwOlx0XHR2ZyA9IGJyX3ZsYW5fZ3JvdXAobWFzdGVydi1cdTAwM2Vicik7XG4gMjExOlx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNm1hc3RlcnYtXHUwMDNlcmVmY250KSkge1xuIDIxMjpcdFx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnZnLVx1MDAzZXZsYW5faGFzaCxcbiAyMTM6XHRcdFx0XHRcdCAgICAgICBcdTAwMjZtYXN0ZXJ2LVx1MDAzZXZub2RlLCBicl92bGFuX3JodF9wYXJhbXMpO1xuIDIxNDpcdFx0XHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XG4gMjE1Olx0XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpO1xuIDIxNjpcdFx0XHRicl9tdWx0aWNhc3RfY3R4X2RlaW5pdChcdTAwMjZtYXN0ZXJ2LVx1MDAzZWJyX21jYXN0X2N0eCk7XG4gMjE3Olx0XHRcdGNhbGxfcmN1KFx1MDAyNm1hc3RlcnYtXHUwMDNlcmN1LCBicl9tYXN0ZXJfdmxhbl9yY3VfZnJlZSk7XG4gMjE4Olx0XHR9XG4gMjE5Olx0fVxuIDIyMDpcdFxuIDIyMTpcdHN0YXRpYyB2b2lkIG5icF92bGFuX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuIDIyMjpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI1OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZvY3VzOiBCcmlkZ2UgTXVsdGljYXN0IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBiYXNlZCBvbiB3aGF0IEkmIzM5O20gc2VlaW5nLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uIHRoYXQmIzM5O3Mgd2l0aGluIHJlYWNoIGZvciBmdXp6aW5nLiBJIGNhbiBwcm9iYWJseSBjcmFmdCBpbnB1dHMgdGhhdCBsZWFkIGRpcmVjdGx5IHRvIGl0LiBOb3csIHdoaWNoIG90aGVyIGZ1bmN0aW9ucyBhcmUgcmVsZXZhbnQgaGVyZT8gYGJyX3ZsYW5fcHV0X21hc3RlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG9mdGVuIG1ha2VzIGZ1enppbmcgaXQgbGVzcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIG9mdGVuIGRpZmZpY3VsdCB0byB0cmlnZ2VyIHN0YXRpYyBmdW5jdGlvbnMgdGhyb3VnaCB0aGUgcHVibGljLWZhY2luZyBBUEkuIEJ1dCB3aGF0IGFib3V0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gPyBUaGF0IG9uZSBzZWVtcyBsaWtlIGEgc3Ryb25nIGNvbnRlbmRlciBhcyB3ZWxsLiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgaXQuIEkmIzM5O2xsIG9wZW4gdXAgYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHBvdGVudGlhbCB0YXJnZXRzIGluIHRoYXQgc2FtZSBzb3VyY2UgZmlsZSwgd2hpY2ggd291bGQgc3VnZ2VzdCBhIHBvdGVudGlhbCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0MTE6XHRzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbjQ0MTI6XHR7XG40NDEzOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuNDQxNDpcdFxuNDQxNTpcdFx0aWYgKFdBUk5fT05fT05DRSghYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpKVxuNDQxNjpcdFx0XHRyZXR1cm47XG40NDE3Olx0XG40NDE4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFx1MDAyNnZsYW4tXHUwMDNlYnItXHUwMDNlcG9ydF9saXN0LCBsaXN0KSB7XG40NDE5Olx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZwb3J0O1xuNDQyMDpcdFxuNDQyMTpcdFx0XHR2cG9ydCA9IGJyX3ZsYW5fZmluZChuYnBfdmxhbl9ncm91cChwKSwgdmxhbi1cdTAwM2V2aWQpO1xuNDQyMjpcdFx0XHRpZiAoIXZwb3J0KVxuNDQyMzpcdFx0XHRcdGNvbnRpbnVlO1xuNDQyNDpcdFx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XG40NDI1Olx0XHR9XG40NDI2Olx0XG40NDI3Olx0XHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxuNDQyODpcdFx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcbjQ0Mjk6XHR9XG40NDMwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgcXVlc3Rpb24gaXMgYWx3YXlzIHdoZXRoZXIgaXQmIzM5O3MgZXhwb3J0ZWQgb3IgaWYgaXQgaGFzIGludGVybmFsIHNjb3BlLiBBaCwgZ29vZCwgaXQmIzM5O3Mgbm9uLXN0YXRpYywgZGVjbGFyZWQgaW4gYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYC4gVGhhdCBtYWtlcyBpdCBhY2Nlc3NpYmxlLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4gVGhpcyBmdW5jdGlvbiBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24sIGEgdmFsdWFibGUgc3ltYm9sIHRvIGZvY3VzIG9uLiBOb3csIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyBmaXRzIGluIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBzaG91bGQgY2hlY2sgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgbmV4dCwgc2VlIGhvdyB0aGF0IHJlbGF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0MzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDQzMTpcdGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxuNDQzMjpcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuNDQzMzpcdHtcbjQ0MzQ6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuNDQzNTpcdFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbjtcbjQ0MzY6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7XG40NDM3Olx0XG40NDM4Olx0XHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSA9PSBvbilcbjQ0Mzk6XHRcdFx0cmV0dXJuIDA7XG40NDQwOlx0XG40NDQxOlx0XHRpZiAob24gXHUwMDI2XHUwMDI2ICFicl9vcHRfZ2V0KGJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpKSB7XG40NDQyOlx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0Nhbm5vdCBlbmFibGUgbXVsdGljYXN0IHZsYW4gc25vb3Bpbmcgd2l0aCB2bGFuIGZpbHRlcmluZyBkaXNhYmxlZFwmIzM0Oyk7XG40NDQzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDQ0NDpcdFx0fVxuNDQ0NTpcdFxuNDQ0NjpcdFx0dmcgPSBicl92bGFuX2dyb3VwKGJyKTtcbjQ0NDc6XHRcdGlmICghdmcpXG40NDQ4Olx0XHRcdHJldHVybiAwO1xuNDQ0OTpcdFxuNDQ1MDpcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVELCBvbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOgoKKipEaWdnaW5nIGludG8gVkxBTiBTbm9vcGluZyBhbmQgQnJpZGdlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyAqYWxzbyogbm90IGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIFZMQU4gc25vb3Bpbmcgd2l0aGluIHRoZSBicmlkZ2UuIEdpdmVuIHRoYXQsIGxldCYjMzk7cyBkaXZlIGludG8gYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGBfX3ZsYW5fYWRkYCBhbmQgYF9fdmxhbl9kZWxgIGZ1bmN0aW9ucy4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycyBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBWTEFOIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBzaG91bGQgaWxsdW1pbmF0ZSBob3cgc25vb3BpbmcgaXMgZW5hYmxlZCBhbmQgZGlzYWJsZWQgaW4gdGhpcyBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5IGFuZCBob3cgdGhleSBnZXQgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MzpcdHN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4gMjY0Olx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAyNjU6XHR7XG4gMjY2Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptYXN0ZXJ2ID0gTlVMTDtcbiAyNjc6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAgPSBOVUxMO1xuIDI2ODpcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4gMjY5Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIDI3MDpcdFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xuIDI3MTpcdFx0aW50IGVycjtcbiAyNzI6XHRcbiAyNzM6XHRcdGlmIChicl92bGFuX2lzX21hc3Rlcih2KSkge1xuIDI3NDpcdFx0XHRiciA9IHYtXHUwMDNlYnI7XG4gMjc1Olx0XHRcdGRldiA9IGJyLVx1MDAzZWRldjtcbiAyNzY6XHRcdFx0dmcgPSBicl92bGFuX2dyb3VwKGJyKTtcbiAyNzc6XHRcdH0gZWxzZSB7XG4gMjc4Olx0XHRcdHAgPSB2LVx1MDAzZXBvcnQ7XG4gMjc5Olx0XHRcdGJyID0gcC1cdTAwM2VicjtcbiAyODA6XHRcdFx0ZGV2ID0gcC1cdTAwM2VkZXY7XG4gMjgxOlx0XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXAocCk7XG4gMjgyOlx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDb25zaWRlcmluZyBWTEFOIEFkZGl0aW9uIFN0cmF0ZWdpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBWTEFOcyBhcmUgYWRkZWQsIHNwZWNpZmljYWxseSBpbiB0aGlzIGNvbnRleHQuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBfX3ZsYW5fYWRkYCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGxpbWl0ZWQgaW4gc2NvcGUsIGFuZCBwcm9iYWJseSBkZXNpZ25lZCBmb3IgYSBzcGVjaWZpYyBwdXJwb3NlIHdpdGhpbiBhIHBhcnRpY3VsYXIgbW9kdWxlIG9yIGZpbGUuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyBJJiMzOTttIHdvbmRlcmluZywgaWYgYF9fdmxhbl9hZGRgIGlzIGNvbnN0cmFpbmVkIGxpa2UgdGhhdCwgd2hhdCBhYm91dCBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgPyBXaGF0JiMzOTtzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHdvPyBJcyBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgIGEgbW9yZSBnZW5lcmFsaXplZCBmdW5jdGlvbj8gRG9lcyBpdCBidWlsZCBvbiB0b3Agb2YgYF9fdmxhbl9hZGRgLCBvciBpcyBpdCBjb21wbGV0ZWx5IGluZGVwZW5kZW50PyBVbmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZXNlIHR3byBhZGRpdGlvbiBtZXRob2RzIGlzIGVzc2VudGlhbCBmb3IgZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgVkxBTiBtYW5hZ2VtZW50IGxvZ2ljLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFuZCBkZXRlcm1pbmUgdGhlaXIgcmVzcGVjdGl2ZSB1c2UgY2FzZXMgYW5kIGhvdyB0aGV5IGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgYnJpZGdpbmcgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZXNzZW50aWFsbHkgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiBjaG9pY2VzIG1hZGUgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIGNob29zaW5nIG9uZSBvdmVyIHRoZSBvdGhlciBpbiBzcGVjaWZpYyBzY2VuYXJpb3MuIEFyZSB3ZSBkZWFsaW5nIHdpdGggdGhlIGNyZWF0aW9uIG9mIG5ldyBWTEFOcyB2ZXJzdXMgYWRkaW5nIGV4aXN0aW5nIG9uZXMgdG8gYSBicmlkZ2U/IEdvdHRhIGZpZ3VyZSB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzE5Olx0c3RhdGljIGludCBicl92bGFuX2FkZF9leGlzdGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gNzIwOlx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyxcbiA3MjE6XHRcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXG4gNzIyOlx0XHRcdFx0XHR1MTYgZmxhZ3MsIGJvb2wgKmNoYW5nZWQsXG4gNzIzOlx0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNzI0Olx0e1xuIDcyNTpcdFx0Ym9vbCBiZWNvbWVzX2JyZW50cnkgPSBmYWxzZTtcbiA3MjY6XHRcdGJvb2wgd291bGRfY2hhbmdlID0gZmFsc2U7XG4gNzI3Olx0XHRpbnQgZXJyO1xuIDcyODpcdFxuIDcyOTpcdFx0aWYgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikpIHtcbiA3MzA6XHRcdFx0LyogVHJ5aW5nIHRvIGNoYW5nZSBmbGFncyBvZiBub24tZXhpc3RlbnQgYnJpZGdlIHZsYW4gKi9cbiA3MzE6XHRcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fQlJFTlRSWSkpXG4gNzMyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzMzOlx0XG4gNzM0Olx0XHRcdGJlY29tZXNfYnJlbnRyeSA9IHRydWU7XG4gNzM1Olx0XHR9IGVsc2Uge1xuIDczNjpcdFx0XHR3b3VsZF9jaGFuZ2UgPSBfX3ZsYW5fZmxhZ3Nfd291bGRfY2hhbmdlKHZsYW4sIGZsYWdzKTtcbiA3Mzc6XHRcdH1cbiA3Mzg6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDb250ZW1wbGF0aW5nIGEgU3RhdGljIENvbmZpZ3VyYXRpb24gYW5kIFZMQU4gQWRkaXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGN1cnJlbnQgc2V0dXAgaXMgYWxzbyBzdGF0aWNhbGx5IGNvbmZpZ3VyZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgaXQgaW1tZWRpYXRlbHkgcmFpc2VzIHRoZSBxdWVzdGlvbjogd2hhdCBhYm91dCBhZGRpbmcgYSBWTEFOPyBNb3JlIHNwZWNpZmljYWxseSwgdGhlIGBicl92bGFuX2FkZGAgY29tbWFuZOKAlCBob3cgZG9lcyBpdCBwbGF5IGludG8gdGhpcyBzdGF0aWMgc2l0dWF0aW9uPyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCBob3cgdGhhdCBjb21tYW5kIGludGVncmF0ZXMgaW50byB0aGUgcHJlLWV4aXN0aW5nIHN0YXRpYyBjb25maWd1cmF0aW9uLCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgYnJpZGdlLCBhbmQgdGhlIG92ZXJhbGwgbmV0d29yayBhcmNoaXRlY3R1cmUuIElzIHRoZXJlIGFueXRoaW5nIHRoYXQgY291bGQgaW50ZXJmZXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl92bGFuX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jPTE2Nz1icl92bGFuX2dldF9tYXN0ZXIoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE3OC1cdFx0LyogbWlzc2luZyBnbG9iYWwgY3R4LCBjcmVhdGUgaXQgbm93ICovXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxNzk6XHRcdGlmIChicl92bGFuX2FkZChiciwgdmlkLCAwLCBcdTAwMjZjaGFuZ2VkLCBleHRhY2spKVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTgwLVx0XHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTI2Mz1zdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTI5Ni1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjI5NzpcdFx0XHRlcnIgPSBicl92bGFuX2FkZChiciwgdi1cdTAwM2V2aWQsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yOTgtXHRcdFx0XHRcdCAgZmxhZ3MgfCBCUklER0VfVkxBTl9JTkZPX0JSRU5UUlksXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9Njg2PWJvb2wgYnJfc2hvdWxkX2xlYXJuKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcxOC1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjcxOTpzdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcyMC1cdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc3OC0gKi9cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc3OTppbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsIGJvb2wgKmNoYW5nZWQsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03ODAtXHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03OTEtXHRpZiAodmxhbilcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc5MjpcdFx0cmV0dXJuIGJyX3ZsYW5fYWRkX2V4aXN0aW5nKGJyLCB2ZywgdmxhbiwgZmxhZ3MsIGNoYW5nZWQsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03OTMtXHRcdFx0XHRcdCAgICBleHRhY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTExMDI9aW50IF9fYnJfdmxhbl9zZXRfZGVmYXVsdF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHB2aWQsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTEzMC1cdCAgICAoIXB2ZW50IHx8ICFicl92bGFuX3Nob3VsZF91c2UocHZlbnQpKSkge1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTEzMTpcdFx0ZXJyID0gYnJfdmxhbl9hZGQoYnIsIHB2aWQsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTMyLVx0XHRcdFx0ICBCUklER0VfVkxBTl9JTkZPX1BWSUQgfFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExOTAtXHRcdGlmIChvbGRfcHZpZCkge1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTE5MTpcdFx0XHRicl92bGFuX2FkZChiciwgb2xkX3B2aWQsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTkyLVx0XHRcdFx0ICAgIEJSSURHRV9WTEFOX0lORk9fUFZJRCB8XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTc0Nz1pbnQgYnJfdmxhbl9icmlkZ2VfZXZlbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE3NTUtXHRjYXNlIE5FVERFVl9SRUdJU1RFUjpcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjE3NTY6XHRcdHJldCA9IGJyX3ZsYW5fYWRkKGJyLCBici1cdTAwM2VkZWZhdWx0X3B2aWQsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzU3LVx0XHRcdFx0ICBCUklER0VfVkxBTl9JTkZPX1BWSUQgfFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIEJyaWRnZSBNdWx0aWNhc3QgYW5kIFZMQU4gRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zLiBJdCBhcHBlYXJzIHRoYXQgYGJyX3ZsYW5fYWRkYCwgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgYXJlIGFsbCBub24tc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyBwb3RlbnRpYWwgZXh0ZXJuYWwgaW50ZXJhY3Rpb24gcG9pbnRzLgoKSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gIEkgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggaXMga2V5IGZvciBmdXp6aW5nLiAgTG9va2luZyBhdCB0aGUgY2FsbCBncmFwaCwgaXQmIzM5O3MgY2FsbGVkIGJ5IGBicl92bGFuX3B1dF9tYXN0ZXJgICh3aGVuIGEgVkxBTiBpcyBkZWxldGVkKSwgYF9fdmxhbl9hZGRgICh3aGVuIGEgVkxBTiBpcyBhZGRlZCksIGBicl92bGFuX2FkZF9leGlzdGluZ2AgKHdoZW4gYSBWTEFOIGlzIG1vZGlmaWVkKSwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gIChjYWxsZWQgZnJvbSBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCkuIEFoYSwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGlzIHRyaWdnZXJlZCB3aGVuIGBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRURgIGlzIHRvZ2dsZWQuIFRoYXQmIzM5O3MgZ29vZC4KClRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rLCBsaWtlbHkgdmlhIGNvbW1hbmRzIGxpa2UgYGJyX2NoYW5nZWxpbmtgIG9yIGBicl9zZXRsaW5rYC4gIFRoZSBhYmlsaXR5IHRvIG1vZGlmeSBWTEFOIHNldHRpbmdzIGFuZCBtdWx0aWNhc3Qgc25vb3BpbmcgZnJvbSB1c2Vyc3BhY2UgZGlyZWN0bHkgaW1wbGljYXRlcyB0aGF0IHRoZXNlIGNoYW5nZXMgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0LiBUaGlzIGlzIGFsbCB0ZWxsaW5nIG1lIHRoYXQgdGhlc2UgYXJlIHZhbGlkIHRhcmdldHMgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gdGhvc2UgdGhyZWUgZnVuY3Rpb25zOiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLCBhbmQgYGJyX3ZsYW5fYWRkYC4KCkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiAgSSYjMzk7bSBzZWVpbmcgdGhhdCB3ZSBuZWVkIHRvIGVuYWJsZSBgQlJJREdFYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiAgU2luY2UgYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AgaXMgZW5hYmxlZCBhbmQgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBlbmFibGVkLCBhbmQgYm90aCBkZXBlbmQgb24gYENPTkZJR19CUklER0VgIGluIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCwgdGhhdCBjb25maXJtcyB0aGUgY29ycmVjdCBjb25maWdzLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnPTY9Y29uZmlnIEJSSURHRVxuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5ODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gQnJpZGdlIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIHNwZWNpZmljYWxseSBmb3IgYnJpZGdpbmcuIE15IGZvY3VzIGlzIG9uIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IElHTVAgc25vb3BpbmcgYW5kIFZMQU4gZmlsdGVyaW5nIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgYnJpZGdlIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYEJSSURHRV9JR01QX1NOT09QSU5HYCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2Agb3B0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGhvdyB0aGVzZSBvcHRpb25zIGludGVyYWN0IGFuZCBwb3RlbnRpYWxseSBkZXBlbmQgb24gZWFjaCBvdGhlci4gQXJlIHRoZXJlIGFueSBjYXZlYXRzIG9yIHN1YnRsZSBpbXBsaWNhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cyB0aGF0IEkgbmVlZCB0byBiZSBtaW5kZnVsIG9mPyBQZXJoYXBzIHRoZXJlIGFyZSBiZXN0IHByYWN0aWNlcyBvciByZWNvbW1lbmRhdGlvbnMgYnVyaWVkIHdpdGhpbiB0aGUgY29tbWVudHMgb3Igc3Vycm91bmRpbmcgY29kZSB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmc/IFRoaXMgd2lsbCBoZWxwIG1lIHRvIGRldGVybWluZSBob3cgSSB3b3VsZCBsaWtlIHRvIGRlc2lnbiB0aGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzY6XHRjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbiAgMzc6XHRcdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbiAgMzg6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDM5Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgNDA6XHRcdGRlZmF1bHQgeVxuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxuICA0MzpcdFx0ICBmb3J3YXJkIG11bHRpY2FzdCB0cmFmZmljIGJhc2VkIG9uIElHTVAvTUxEIHRyYWZmaWMgcmVjZWl2ZWQgZnJvbVxuICA0NDpcdFx0ICBlYWNoIHBvcnQuXG4gIDQ1Olx0XG4gIDQ2Olx0XHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxuICA0NzpcdFxuICA0ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICA0OTpcdFxuICA1MDpcdGNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcbiAgNTE6XHRcdGJvb2wgXCYjMzQ7VkxBTiBmaWx0ZXJpbmdcJiMzNDtcbiAgNTI6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDUzOlx0XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbiAgNTQ6XHRcdGRlZmF1bHQgblxuICA1NTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ5NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZXBlbmRlbmN5IEFuYWx5c2lzIGZvciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBgQlJJREdFX0lHTVBfU05PT1BJTkdgIHJlbGllcyBvbiBgQlJJREdFYCBhbmQgYElORVRgLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgaW5jbHVkZWQuIFNpbWlsYXJseSwgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgZGVwZW5kcyBvbiBib3RoIGBCUklER0VgIGFuZCBgVkxBTl84MDIxUWAuCgpUaGVyZWZvcmUsIHRvIGVuYWJsZSBldmVyeXRoaW5nLCB3ZSBuZWVkIHRvIGluY2x1ZGU6IGBCUklER0VgLCBgSU5FVGAsIGBWTEFOXzgwMjFRYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBJdCYjMzk7cyBhbG1vc3QgYXV0b21hdGljLCBidXQgbGV0JiMzOTtzIGJlIHRob3JvdWdoLgoKV2hpbGUgYElORVRgIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCBpbiBtb3N0IGJ1aWxkcywgaXQmIzM5O3MgZ29vZCBwcmFjdGljZSB0byBsaXN0IGl0IGV4cGxpY2l0bHkgaGVyZSBmb3IgY29tcGxldGVuZXNzLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGBWTEFOXzgwMjFRYCBpcyBkZWZpbml0ZWx5IG5lZWRlZC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgZm9yIGBWTEFOXzgwMjFRYCwgc3BlY2lmaWNhbGx5IGluIGBuZXQvODAyMXEvS2NvbmZpZ2AuIEl0IG5ldmVyIGh1cnRzIHRvIGNvbmZpcm0gdGhlIHNvdXJjZSBvZiB0cnV0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZMQU5fODAyMVEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvODAyMXEvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvODAyMXEvS2NvbmZpZy01LVxubmV0LzgwMjFxL0tjb25maWc6Njpjb25maWcgVkxBTl84MDIxUVxubmV0LzgwMjFxL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xUS84MDIuMWFkIFZMQU4gU3VwcG9ydFwmIzM0O1xuLS1cbm5ldC84MDIxcS9LY29uZmlnLTIxLVxubmV0LzgwMjFxL0tjb25maWc6MjI6Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxubmV0LzgwMjFxL0tjb25maWctMjMtXHRib29sIFwmIzM0O0dWUlAgKEdBUlAgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvODAyMXEvS2NvbmZpZy0zMS1cbm5ldC84MDIxcS9LY29uZmlnOjMyOmNvbmZpZyBWTEFOXzgwMjFRX01WUlBcbm5ldC84MDIxcS9LY29uZmlnLTMzLVx0Ym9vbCBcJiMzNDtNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1MQoJCQkJCQkJb3V0cHV0OiAyMzAKCQkJCQkJCXRob3VnaHRzOiA0NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJyaWRnZSBNdWx0aWNhc3QgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgVkxBTl84MDIxUWAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJldmlldyB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCwgd2hpY2ggYXJlIHRoZSBmb2N1cyBzeW1ib2xzOiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLCBhbmQgYGJyX3ZsYW5fYWRkYC4gSSYjMzk7bSBhbHNvIGJyaWVmbHkgY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucywgYnV0IHRob3NlIHRocmVlIGxvb2sgbGlrZSB0aGUgY29yZSBvbmVzLgoKYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIHRoZSBvbmUgdGhhdCB3YXMgc3BlY2lmaWNhbGx5IG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guIEkgdGhpbmsgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgYW5kIGBicl92bGFuX2FkZGAgd2lsbCBiZSBnb29kIGVudHJ5IHBvaW50cyBmb3IgYW5hbHlzaXMgYXMgd2VsbCwgaW4gY2FzZSB0aGUgZml4IGhhcyBpbXBsaWNhdGlvbnMgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIGV4cG9ydGVkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIG5vbi1zdGF0aWMsIGRlY2xhcmVkIGluIGBuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaGAuIFRoYXQgbWFrZXMgaXQgYSBnbG9iYWwgc3ltYm9sIHdpdGhpbiB0aGUga2VybmVsLCBhY2Nlc3NpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGJ1dCBub3QgZXhwbGljaXRseSBleHBvcnRlZCB0byBtb2R1bGVzLiBUaGF0JiMzOTtzIGZpbmU7IGl0JiMzOTtzIHN0aWxsIGFjY2Vzc2libGUgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgZnV6emluZy4KCk15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoIGlzIHRoYXQgaXQgZml4ZXMgYSBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLiBJdCB3YXMgcmV0dXJuaW5nIGVhcmx5IHdoZW4gZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gaWYgdGhlIFZMQU4gd2FzbiYjMzk7dCBhbHJlYWR5IGEgYnJpZGdlIGVudHJ5LiBUaGlzIGNhbiBsZWFkIHRvIHRoZSBtdWx0aWNhc3QgY29udGV4dCBzdGF5aW5nIGFjdGl2ZSBhbmQgdGhlIGBCUl9WTEZMQUdfTUNBU1RfRU5BQkxFRGAgZmxhZyBiZWluZyBzZXQsIHdoaWNoIGNvdWxkIGNhdXNlIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBtZW1vcnkgbGVhayB3aGVuIHRoZSBWTEFOIGlzIGV2ZW50dWFsbHkgZGVzdHJveWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCBpbiB0aGUgYnJpZGdlJiMzOTtzIG11bHRpY2FzdCBsb2dpYywgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGRlYWxpbmcgd2l0aCBicmlkZ2UgVkxBTnMuIFNwZWNpZmljYWxseSwgd2hlbiBhZGRpbmcsIHJlbW92aW5nLCBvciBtb2RpZnlpbmcgYnJpZGdlIFZMQU5zLCBhbmQgYWxzbyB3aGVuIHRvZ2dsaW5nIG11bHRpY2FzdCBzbm9vcGluZy4gQmVjYXVzZSBpdCYjMzk7cyBhZmZlY3RpbmcgY29yZSBtdWx0aWNhc3QgYmVoYXZpb3IgYW5kIGFjY2Vzc2libGUgdmlhIHVzZXJzcGFjZSwgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZy4KCk15IGxpc3Qgb2YgcmVsZXZhbnQgY29uZmlncyBpbmNsdWRlcyBgQlJJREdFYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AsIGBWTEFOXzgwMjFRYCwgYW5kIGBJTkVUYC4KCldpdGggdGhpcyBhc3Nlc3NtZW50IGNvbXBsZXRlLCBJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbiYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSB3aGVuIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBWTEFOIGlmIHRoZSBWTEFOIGlzIG5vdCBhIGJyaWRnZSBlbnRyeS4gVGhpcyBjb3VsZCBsZWF2ZSB0aGUgbXVsdGljYXN0IGNvbnRleHQgYWN0aXZlIGFuZCB0aGUgYEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEYCBmbGFnIHNldCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3Mgd2hlbiB0aGUgVkxBTiBpcyBkZXN0cm95ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgd2hlbiBhZGRpbmcvcmVtb3ZpbmcvbW9kaWZ5aW5nIGJyaWRnZSBWTEFOcyBvciB0b2dnbGluZyBtdWx0aWNhc3Qgc25vb3BpbmcuIEl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbiYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSB3aGVuIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBWTEFOIGlmIHRoZSBWTEFOIGlzIG5vdCBhIGJyaWRnZSBlbnRyeS4gVGhpcyBjb3VsZCBsZWF2ZSB0aGUgbXVsdGljYXN0IGNvbnRleHQgYWN0aXZlIGFuZCB0aGUgYEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEYCBmbGFnIHNldCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3Mgd2hlbiB0aGUgVkxBTiBpcyBkZXN0cm95ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgd2hlbiBhZGRpbmcvcmVtb3ZpbmcvbW9kaWZ5aW5nIGJyaWRnZSBWTEFOcyBvciB0b2dnbGluZyBtdWx0aWNhc3Qgc25vb3BpbmcuIEl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIHRoZSBmdW5jdGlvbiB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gZWFybHkgd2hlbiB0b2dnbGluZyBvZmYgbXVsdGljYXN0IGZvciBhIG5vbi1icmVudHJ5IFZMQU4uIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBvcGVyYXRpb25zIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjQ2ODkyMjA3OWQ0NjdlZjllOTZlMmI4NjE2YzQxNTFmMzcxM2FjOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDEyOjI1OjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKaW5kZXggNzVlMWUyYThmYzgzYS4uM2VmNWQ4YmJmNTUyZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCkBAIC00Mzc3LDggJiM0Mzs0Mzc3LDggQEAgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pCiAJaWYgKGJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSB7CiAJCWJyID0gdmxhbi0mZ3Q7YnI7CiAKLQkJaWYgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHwKLQkJICAgIChvbiAmYW1wOyZhbXA7CiYjNDM7CQlpZiAob24gJmFtcDsmYW1wOwomIzQzOwkJICAgICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8CiAJCSAgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZCgmYW1wO3ZsYW4tJmd0O2JyX21jYXN0X2N0eCkpKQogCQkJcmV0dXJuOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJyaWRnZSBNdWx0aWNhc3QgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdpdGhpbiBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIFRpbWUgdG8gZGlnIGludG8gdGhlIGRpZmY6CgpgYGBjCi0JCWlmICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8Ci0JCSAgICAob24gJmFtcDsmYW1wOwomIzQzOwkJaWYgKG9uICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fAogCQkgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoJmFtcDt2bGFuLSZndDticl9tY2FzdF9jdHgpKSkKIAkJCXJldHVybjsKYGBgCgpSaWdodCBhd2F5LCBJIHNlZSBhIGxvZ2ljYWwgY2hhbmdlIGluIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LiBCZWZvcmUsIGl0IHdhcyByZXR1cm5pbmcgaWYgYCFicl92bGFuX2lzX2JyZW50cnkodmxhbilgIHdoZW4gYG9uYCB3YXMgZmFsc2UuIE5vdywgdGhhdCB3aG9sZSBibG9jayBpcyBza2lwcGVkIGlmIGBvbmAgaXMgZmFsc2UsIGR1ZSB0byB0aGUgc2hvcnQtY2lyY3VpdGluZyBvZiB0aGUgYCZhbXA7JmFtcDtgLiBTbywgZXNzZW50aWFsbHkgYSBjb250cm9sIGZsb3cgYWx0ZXJhdGlvbi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgbm8sIHRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBidWcgZml4IG9yIGNoYW5nZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCB0cnkgdG8gZ3Jhc3AgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIExldCYjMzk7cyBsb29rIGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM0MD12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzY2OnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MTE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDIzLVx0XHRcdGNvbnRpbnVlO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI0Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjUtXHR9XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI3LVx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQyODpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTU0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgeW91ciBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIE15IHByaW1hcnkgY29uY2VybiBpcywgYXMgYWx3YXlzIHdpdGggdGhlc2UgbG93LWxldmVsIGZ1bmN0aW9ucywgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGNvZGUgdG8gZW5zdXJlIHdlJiMzOTtyZSBub3QgaW5hZHZlcnRlbnRseSByZWFkaW5nIG9yIHBhc3NpbmcgZ2FyYmFnZSBkYXRhLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgaGFyZC10by1kZWJ1ZyBpbnN0YWJpbGl0eSBhbmQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBzbyBpdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBsb29raW5nIGZvci4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFzIGNsZWFuIGFzIGl0IHNob3VsZCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzY2Olx0dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG40MzY3Olx0e1xuNDM2ODpcdFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xuNDM2OTpcdFxuNDM3MDpcdFx0LyogaXQmIzM5O3Mgb2theSB0byBjaGVjayBmb3IgdGhlIGZsYWcgd2l0aG91dCB0aGUgbXVsdGljYXN0IGxvY2sgYmVjYXVzZSBpdFxuNDM3MTpcdFx0ICogY2FuIG9ubHkgY2hhbmdlIHVuZGVyIFJUTkwgLVx1MDAzZSBtdWx0aWNhc3RfbG9jaywgd2UgbmVlZCB0aGUgbGF0dGVyIHRvXG40MzcyOlx0XHQgKiBzeW5jIHdpdGggdGltZXJzIGFuZCBwYWNrZXRzXG40MzczOlx0XHQgKi9cbjQzNzQ6XHRcdGlmIChvbiA9PSAhISh2bGFuLVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEKSlcbjQzNzU6XHRcdFx0cmV0dXJuO1xuNDM3NjpcdFxuNDM3NzpcdFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSB7XG40Mzc4Olx0XHRcdGJyID0gdmxhbi1cdTAwM2VicjtcbjQzNzk6XHRcbjQzODA6XHRcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNlxuNDM4MTpcdFx0XHQgICAgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHxcbjQzODI6XHRcdFx0ICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKFx1MDAyNnZsYW4tXHUwMDNlYnJfbWNhc3RfY3R4KSkpXG40MzgzOlx0XHRcdFx0cmV0dXJuO1xuNDM4NDpcdFxuNDM4NTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuNDM4NjpcdFx0XHR2bGFuLVx1MDAzZXByaXZfZmxhZ3MgXj0gQlJfVkxGTEFHX01DQVNUX0VOQUJMRUQ7XG40Mzg3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjQzODg6XHRcbjQzODk6XHRcdFx0aWYgKG9uKVxuNDM5MDpcdFx0XHRcdF9fYnJfbXVsdGljYXN0X29wZW4oXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpO1xuNDM5MTpcdFx0XHRlbHNlXG40MzkyOlx0XHRcdFx0X19icl9tdWx0aWNhc3Rfc3RvcChcdTAwMjZ2bGFuLVx1MDAzZWJyX21jYXN0X2N0eCk7XG40MzkzOlx0XHR9IGVsc2Uge1xuNDM5NDpcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4O1xuNDM5NTpcdFxuNDM5NjpcdFx0XHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbjQzOTc6XHRcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNiBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKGJybWN0eCkpXG40Mzk4Olx0XHRcdFx0cmV0dXJuO1xuNDM5OTpcdFxuNDQwMDpcdFx0XHRiciA9IHZsYW4tXHUwMDNlcG9ydC1cdTAwM2VicjtcbjQ0MDE6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjQ0MDI6XHRcdFx0dmxhbi1cdTAwM2Vwcml2X2ZsYWdzIF49IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEO1xuNDQwMzpcdFx0XHRpZiAob24pXG40NDA0Olx0XHRcdFx0X19icl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KFx1MDAyNnZsYW4tXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuNDQwNTpcdFx0XHRlbHNlXG40NDA2Olx0XHRcdFx0X19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbjQ0MDc6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuNDQwODpcdFx0fVxuNDQwOTpcdH1cbjQ0MTA6XHRcbjQ0MTE6XHRzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbjQ0MTI6XHR7XG40NDEzOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuNDQxNDpcdFxuNDQxNTpcdFx0aWYgKFdBUk5fT05fT05DRSghYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDAyCgkJCQkJCQlvdXRwdXQ6IDEyMAoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZml4LCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG9sZCBjb2RlIGhhZCBhIGZsYXcgaW4gaXRzIGxvZ2ljIOKAkyBpdCB3YXMgYmFpbGluZyBvdXQgcHJlbWF0dXJlbHkuIFNwZWNpZmljYWxseSwgaXQgd2FzIHJldHVybmluZyBlYXJseSB3aGVuIGBvbmAgd2FzIGZhbHNlICphbmQqIGAhYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pYCB3YXMgdHJ1ZS4gVGhpcyBtZWFudCB0aGF0IHRoZSBtdWx0aWNhc3Qgc3RhdGUgZm9yIFZMQU5zIHRoYXQgKndlcmVuJiMzOTt0KiBCcmVudHJ5IHdvdWxkbiYjMzk7dCBnZXQgcHJvcGVybHkgdG9nZ2xlZCBvZmYsIGV2ZW4gd2hlbiB0aGV5IHNob3VsZC4gSXQmIzM5O3MgYSBjbGFzc2ljIGJvb2xlYW4gbG9naWMgZXJyb3IsIHNvbWV0aGluZyB5b3Ugc2VlIGFsbCB0aGUgdGltZSBpbiB0aGVzZSB0eXBlcyBvZiBzeXN0ZW1zLgoKVGhlIGdvb2QgbmV3cyBpcywgdGhlcmUmIzM5O3Mgbm8gaGludCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLiBUaGlzIGlzIHB1cmVseSBhYm91dCBjb250cm9sbGluZyB0aGUgbXVsdGljYXN0IHN0YXRlIHdpdGggYSBib29sZWFuIGZsYWcgYW5kIHRoZW4gY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24sIGBfX2JyX211bHRpY2FzdF9zdG9wYCBvciBgX19icl9tdWx0aWNhc3Rfb3BlbmAuIE5vIEtNU0FOIGlzc3Vlcywgbm8gS0FTQU4sIExPQ0tERVAsIG9yIGFueSBvZiB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoaXMgaXMgYSBnYXJkZW4tdmFyaWV0eSBsb2dpYyBidWcsIGFuZCBob25lc3RseSwgdGhleSYjMzk7cmUgdGhlIGVhc2llc3QgdG8gYWRkcmVzcyB3aGVuIHlvdSBmaW5kIHRoZW0hIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIG9uIHRoaXMgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdvdWxkIGluY29ycmVjdGx5IHJldHVybiBlYXJseSB3aGVuIHRvZ2dsaW5nIG9mZiBtdWx0aWNhc3QgZm9yIGEgbm9uLWJyZW50cnkgVkxBTi4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgc3RhdGUgbWFuYWdlbWVudCBmaXguIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIHRoZSBmdW5jdGlvbiB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gZWFybHkgd2hlbiB0b2dnbGluZyBvZmYgbXVsdGljYXN0IGZvciBhIG5vbi1icmVudHJ5IFZMQU4uIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBvcGVyYXRpb25zIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjU6NTYuMjkwNjI5Njg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NDI4NTk3MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5cIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ1wiLFxuICAgIFwiYnJfdmxhbl9hZGRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCB3aGVyZSB0aGUgZnVuY3Rpb24gd291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGVhcmx5IHdoZW4gdG9nZ2xpbmcgb2ZmIG11bHRpY2FzdCBmb3IgYSBub24tYnJlbnRyeSBWTEFOLiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3Igb3BlcmF0aW9ucyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSB3aGVuIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBWTEFOIGlmIHRoZSBWTEFOIGlzIG5vdCBhIGJyaWRnZSBlbnRyeS4gVGhpcyBjb3VsZCBsZWF2ZSB0aGUgbXVsdGljYXN0IGNvbnRleHQgYWN0aXZlIGFuZCB0aGUgYEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEYCBmbGFnIHNldCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3Mgd2hlbiB0aGUgVkxBTiBpcyBkZXN0cm95ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgd2hlbiBhZGRpbmcvcmVtb3ZpbmcvbW9kaWZ5aW5nIGJyaWRnZSBWTEFOcyBvciB0b2dnbGluZyBtdWx0aWNhc3Qgc25vb3BpbmcuIEl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI1OjU2LjI5MDYzNDc0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUxNzI5MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjQ2ODkyMjA3OWQ0NjdlZjllOTZlMmI4NjE2YzQxNTFmMzcxM2FjOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxMjoyNTo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xcbmluZGV4IDc1ZTFlMmE4ZmM4M2EuLjNlZjVkOGJiZjU1MmUgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcXG5AQCAtNDM3Nyw4ICs0Mzc3LDggQEAgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuIFxcdGlmIChicl92bGFuX2lzX21hc3Rlcih2bGFuKSkge1xcbiBcXHRcXHRiciA9IHZsYW4tXFx1MDAzZWJyO1xcbiBcXG4tXFx0XFx0aWYgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHxcXG4tXFx0XFx0ICAgIChvbiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRpZiAob24gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8XFxuIFxcdFxcdCAgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChcXHUwMDI2dmxhbi1cXHUwMDNlYnJfbWNhc3RfY3R4KSkpXFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI1OjU2LjY0MzE0NjY2OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk4MDM2ODEwNjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5cIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ1wiLFxuICAgIFwiYnJfdmxhbl9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgaXQgd291bGQgcmV0dXJuIGVhcmx5IHdoZW4gZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gaWYgdGhlIFZMQU4gaXMgbm90IGEgYnJpZGdlIGVudHJ5LiBUaGlzIGNvdWxkIGxlYXZlIHRoZSBtdWx0aWNhc3QgY29udGV4dCBhY3RpdmUgYW5kIHRoZSBgQlJfVkxGTEFHX01DQVNUX0VOQUJMRURgIGZsYWcgc2V0LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyB3aGVuIHRoZSBWTEFOIGlzIGRlc3Ryb3llZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJyaWRnZSBtdWx0aWNhc3QgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGFkZGluZy9yZW1vdmluZy9tb2RpZnlpbmcgYnJpZGdlIFZMQU5zIG9yIHRvZ2dsaW5nIG11bHRpY2FzdCBzbm9vcGluZy4gSXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjQ2ODkyMjA3OWQ0NjdlZjllOTZlMmI4NjE2YzQxNTFmMzcxM2FjOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDEyOjI1OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbmluZGV4IDc1ZTFlMmE4ZmM4M2EuLjNlZjVkOGJiZjU1MmUgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG5AQCAtNDM3Nyw4ICs0Mzc3LDggQEAgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4gXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHtcbiBcdFx0YnIgPSB2bGFuLVx1MDAzZWJyO1xuIFxuLVx0XHRpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuLVx0XHQgICAgKG9uIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAob24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuIFx0XHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKSlcbiBcdFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNTo1Ni42NDMxNDgwODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTc4NTE4OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJyaWRnZSBNdWx0aWNhc3QgUGF0Y2gqKlxuXG5Pa2F5LCBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIFNwZWNpZmljYWxseSwgaXQncyB0b3VjaGluZyB0aGUgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGZ1bmN0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGNoYW5nZWQgaW4gdGhlIGRpZmYuXG5cbkFscmlnaHQsIEkgc2VlIGl0LiBUaGUgY29yZSBvZiB0aGUgbG9naWMgcmV2b2x2ZXMgYXJvdW5kIHRoaXMgY29uZGl0aW9uYWwgcmV0dXJuIHN0YXRlbWVudC4gUHJldmlvdXNseSwgaXQgbG9va2VkIGxpa2UgdGhpczpcblxuYGBgY1xuXHRcdGlmICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8XG5cdFx0ICAgIChvbiBcdTAwMjZcdTAwMjZcblx0XHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKSlcblx0XHRcdHJldHVybjtcbmBgYFxuXG5BbmQgbm93IGl0J3M6XG5cbmBgYGNcblx0XHRpZiAob24gXHUwMDI2XHUwMDI2XG5cdFx0ICAgICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8XG5cdFx0ICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKFx1MDAyNnZsYW4tXHUwMDNlYnJfbWNhc3RfY3R4KSkpXG5cdFx0XHRyZXR1cm47XG5gYGBcblxuUmlnaHQgYXdheSwgSSBjYW4gc2VlIHRoZSBjaGFuZ2UgYWx0ZXJzIHRoZSBsb2dpYyBmbG93IHNpZ25pZmljYW50bHkuIFRoZSBvcmlnaW5hbCBjb2RlIHJldHVybmVkIGVhcmx5IGlmIGVpdGhlciBgIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAgT1IgaWYgYG9uYCB3YXMgdHJ1ZSBBTkQgdGhlIGdsb2JhbCBtdWx0aWNhc3QgY29udGV4dCB3YXMgZGlzYWJsZWQuIE5vdywgaXQgKm9ubHkqIHJldHVybnMgZWFybHkgaWYgYG9uYCBpcyB0cnVlIEFORCBlaXRoZXIgYCFicl92bGFuX2lzX2JyZW50cnkodmxhbilgIG9yIHRoZSBnbG9iYWwgY29udGV4dCBpcyBkaXNhYmxlZC4gRXNzZW50aWFsbHksIHRoZSBwYXRjaCBpcyBtYWtpbmcgdGhlIGAhYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pYCBjaGVjayBjb25kaXRpb25hbCBvbiBgb25gIGJlaW5nIHRydWUuIElmIGBvbmAgaXMgZmFsc2UsIGl0J3Mgbm90IGdvaW5nIHRvIHJldHVybi4gVGhpcyBpcyB0aGUgY3JpdGljYWwgY2hhbmdlLiBMZXQgbWUgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgZnVuY3Rpb24sIGFuZCBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MDMuODIxNjY5NzE4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTE5MDEwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzQwPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDQxMT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyMy1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MjQ6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2cG9ydCwgb24pO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyNS1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjctXFx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0Mjg6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MDMuOTY2ODY1ODgzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3MDc4OTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJyaWRnZSBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4gYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZ292ZXJuIHRoZSBtdWx0aWNhc3QgYmVoYXZpb3VyIGluIHRoaXMgYnJpZGdlLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgd2UnbGwgYmUgZGVhbGluZyB3aXRoIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCBoZXJlLiBBbmQgYSBxdWljayBzY2FuIHN1Z2dlc3RzIG15IGludHVpdGlvbiBpcyBjb3JyZWN0IC0gdGhpcyBjb2RlIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIG9ubHkgd2hlbiBgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYCBpcyBlbmFibGVkLiBUaW1lIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUgd2hhdCdzIHNwZWNpZmllZCBpbiB0aGUgYG5ldC9icmlkZ2UvTWFrZWZpbGVgLiBJIHdpbGwgdmVyaWZ5IGlmIHRoaXMgaXMgdGhlIG9ubHkgb3B0aW9uIGludm9sdmVkIG9yIGlmIHRoZXJlIGFyZSBvdGhlciwgbW9yZSBzdWJ0bGUgZmFjdG9ycyBhdCBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjExLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MDcuODM3NjU4MzQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjkzODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX211bHRpY2FzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICs9IGJyX25ldGZpbHRlci5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMC1cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIxOmJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MDcuODgzOTYwOTU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4MjY2NzU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgQnJpZGdlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGJyaWRnZSBjb25maWd1cmF0aW9uLCBhbmQgaXQncyBsb29raW5nIGxpa2UgYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AgaXMgYSBkZWZpbml0ZSByZXF1aXJlbWVudC4gTm8gc3VycHJpc2VzIHRoZXJlLiBPZiBjb3Vyc2UsIGBDT05GSUdfQlJJREdFYCBpdHNlbGYgaXMgdGhlIGZvdW5kYXRpb25hbCBidWlsZGluZyBibG9jaywgc28gdGhhdCdzIGEgZ2l2ZW4uIE5vdywgSSdtIHNlZWluZyB0aGlzIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBmdW5jdGlvbiwgYW5kIHRoZSBcInZsYW5cIiBpbiB0aGUgbmFtZSBpcyB0cmlnZ2VyaW5nIGEgZmxhZy4gSXQncyBtYWtpbmcgbWUgd29uZGVyIGlmIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBhbHNvIGEgZGVwZW5kZW5jeS4gR2l2ZW4gaG93IFZMQU5zIGFuZCBtdWx0aWNhc3Qgb2Z0ZW4gcGxheSB0b2dldGhlciBpbiBicmlkZ2luZyBzY2VuYXJpb3MsIGl0IHdvdWxkIG1ha2Ugc2Vuc2UuIEJlc3QgdG8gdmVyaWZ5IHRoaXMsIHNvIEknbGwganVtcCBzdHJhaWdodCBpbnRvIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpcm0gdGhlIHJlbGF0aW9uc2hpcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjEyLjM2NjYzMTk2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjczODg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM0MD12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjUtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzY2OnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Ny17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MTE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjMtXFx0XFx0XFx0Y29udGludWU7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI0OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odnBvcnQsIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjUtXFx0fVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI3LVxcdGlmIChicl92bGFuX2lzX2JyZW50cnkodmxhbikpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI4OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odmxhbiwgb24pO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyOS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDczPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3NDp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3NS1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NTA9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTQtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1NTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTYtXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTIwMz1zdGF0aWMgdm9pZCBicl92bGFuX3B1dF9tYXN0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNC1cXHRcXHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MjE1OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNi1cXHRcXHRicl9tdWx0aWNhc3RfY3R4X2RlaW5pdChcXHUwMDI2bWFzdGVydi1cXHUwMDNlYnJfbWNhc3RfY3R4KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTI2Mz1zdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVxcdF9fdmxhbl9mbGFnc19jb21taXQodiwgZmxhZ3MpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjM1OTpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM2MC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM5MD1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQyNy1cXHRcXHRuYnBfdmxhbl9zZXRfdmxhbl9kZXZfc3RhdGUocCwgdi1cXHUwMDNldmlkKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0Mjg6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2LCBmYWxzZSk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtNDI5LVxcdFxcdGJyX211bHRpY2FzdF9wb3J0X2N0eF9kZWluaXQoXFx1MDAyNnYtXFx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTcxOT1zdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2MC1cXHRcXHQqY2hhbmdlZCA9IHRydWU7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6NzYxOlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odmxhbiwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzYyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MTIuNDEzMzgwNzE0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0NDkzOTkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aGluZ3M6XG5cbioqQW5hbHl6aW5nIHRoZSBNdWx0aWNhc3QgVkxBTiBUb2dnbGUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBmdW5jdGlvbiwgYW5kIGl0J3MgY2xlYXIgaXQncyBwYXJ0IG9mIHRoZSBWTEFOIGZpbHRlcmluZyBsb2dpYyB3aXRoaW4gdGhlIGJyaWRnaW5nIHN1YnN5c3RlbS4gVGhlIGNvbnRleHQgY2x1ZXMgcG9pbnQgbWUgdG8gYGJyX3ZsYW4uY2AuIFNwZWNpZmljYWxseSwgSSBrbm93IHRoYXQgY29tcGlsYXRpb24gb2YgYGJyX3ZsYW4uY2AgaXMgY29uZGl0aW9uYWwsIGRlcGVuZGluZyBvbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AuIFJpZ2h0LCBzbyB0aGlzIHN1Z2dlc3RzIHRoYXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGRlcGVuZGVuY2llcy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGBuZXQvYnJpZGdlL01ha2VmaWxlYCB0byB2ZXJpZnkgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGNvbmZpcm0gaG93IGBicl92bGFuLmNgIGlzIGludGVncmF0ZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hlbiBhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk5NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjE2Ljk1ODMyMzIxNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MzU5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfdmxhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGU9MjE9YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSArPSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTIyLVxcbm5ldC9icmlkZ2UvTWFrZWZpbGU6MjM6YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgKz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNjoxNy4wMDU3NjUxNTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxMjk3NzA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqVkxBTiBGaWx0ZXJpbmcgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KipcblxuUmlnaHQsIHNvLCBkZWZpbml0ZWx5LCB3ZSBuZWVkIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBlbmFibGVkLiBUaGF0IG11Y2ggaXMgY2xlYXIuIExvb2tpbmcgYXQgdGhlIGJyb2FkZXIgcGljdHVyZSwgd2UncmUgZGVhbGluZyB3aXRoIGEgY29uZmlndXJhdGlvbiB0aGF0IGluY2x1ZGVzIGBCUklER0VgLCBgQlJJREdFX0lHTVBfU05PT1BJTkdgLCBhbmQgY3J1Y2lhbGx5LCB0aGlzIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSdyZSBlc3RhYmxpc2hpbmcgdGhlIGNvcmUgYnJpZGdlIGZ1bmN0aW9uYWxpdHksIGFkZGluZyBJR01QIHNub29waW5nIGZvciBtdWx0aWNhc3Qgb3B0aW1pemF0aW9uLCBhbmQgdGhlbiB0aGUgVkxBTiBmaWx0ZXJpbmcgY2FwYWJpbGl0eSB0byBtYW5hZ2UgdHJhZmZpYyBzZXBhcmF0aW9uLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFZMQU4gZmlsdGVyaW5nIGludGVyYWN0cyB3aXRoIG11bHRpY2FzdCBmb3J3YXJkaW5nLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGxpbmNocGluIGZvciBjb250cm9sbGluZyBtdWx0aWNhc3QgdHJhZmZpYyBvbiBhIHBlci1WTEFOIGJhc2lzIHdpdGhpbiB0aGUgYnJpZGdlLiBJdCBzaG91bGQgc2hlZCBsaWdodCBvbiBob3cgd2UgaGFuZGxlIG11bHRpY2FzdCBtZW1iZXJzaGlwIGFjcm9zcyBkaWZmZXJlbnQgVkxBTnMgZ2l2ZW4gdGhlIGZpbHRlcmluZyBjYXBhYmlsaXRpZXMuIFVuZGVyc3RhbmRpbmcgaG93IHRoYXQgdG9nZ2xlIHdvcmtzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM5NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjIwLjgxODc0NTI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzNjYsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQzNjY6XFx0dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuNDM2NzpcXHR7XFxuNDM2ODpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7XFxuNDM2OTpcXHRcXG40MzcwOlxcdFxcdC8qIGl0J3Mgb2theSB0byBjaGVjayBmb3IgdGhlIGZsYWcgd2l0aG91dCB0aGUgbXVsdGljYXN0IGxvY2sgYmVjYXVzZSBpdFxcbjQzNzE6XFx0XFx0ICogY2FuIG9ubHkgY2hhbmdlIHVuZGVyIFJUTkwgLVxcdTAwM2UgbXVsdGljYXN0X2xvY2ssIHdlIG5lZWQgdGhlIGxhdHRlciB0b1xcbjQzNzI6XFx0XFx0ICogc3luYyB3aXRoIHRpbWVycyBhbmQgcGFja2V0c1xcbjQzNzM6XFx0XFx0ICovXFxuNDM3NDpcXHRcXHRpZiAob24gPT0gISEodmxhbi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEKSlcXG40Mzc1OlxcdFxcdFxcdHJldHVybjtcXG40Mzc2OlxcdFxcbjQzNzc6XFx0XFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSB7XFxuNDM3ODpcXHRcXHRcXHRiciA9IHZsYW4tXFx1MDAzZWJyO1xcbjQzNzk6XFx0XFxuNDM4MDpcXHRcXHRcXHRpZiAob24gXFx1MDAyNlxcdTAwMjZcXG40MzgxOlxcdFxcdFxcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxcbjQzODI6XFx0XFx0XFx0ICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKFxcdTAwMjZ2bGFuLVxcdTAwM2Vicl9tY2FzdF9jdHgpKSlcXG40MzgzOlxcdFxcdFxcdFxcdHJldHVybjtcXG40Mzg0OlxcdFxcbjQzODU6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjQzODY6XFx0XFx0XFx0dmxhbi1cXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfTUNBU1RfRU5BQkxFRDtcXG40Mzg3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjQzODg6XFx0XFxuNDM4OTpcXHRcXHRcXHRpZiAob24pXFxuNDM5MDpcXHRcXHRcXHRcXHRfX2JyX211bHRpY2FzdF9vcGVuKFxcdTAwMjZ2bGFuLVxcdTAwM2Vicl9tY2FzdF9jdHgpO1xcbjQzOTE6XFx0XFx0XFx0ZWxzZVxcbjQzOTI6XFx0XFx0XFx0XFx0X19icl9tdWx0aWNhc3Rfc3RvcChcXHUwMDI2dmxhbi1cXHUwMDNlYnJfbWNhc3RfY3R4KTtcXG40MzkzOlxcdFxcdH0gZWxzZSB7XFxuNDM5NDpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4O1xcbjQzOTU6XFx0XFxuNDM5NjpcXHRcXHRcXHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChcXHUwMDI2dmxhbi1cXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xcbjQzOTc6XFx0XFx0XFx0aWYgKG9uIFxcdTAwMjZcXHUwMDI2IGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoYnJtY3R4KSlcXG40Mzk4OlxcdFxcdFxcdFxcdHJldHVybjtcXG40Mzk5OlxcdFxcbjQ0MDA6XFx0XFx0XFx0YnIgPSB2bGFuLVxcdTAwM2Vwb3J0LVxcdTAwM2VicjtcXG40NDAxOlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9sb2NrKTtcXG40NDAyOlxcdFxcdFxcdHZsYW4tXFx1MDAzZXByaXZfZmxhZ3MgXj0gQlJfVkxGTEFHX01DQVNUX0VOQUJMRUQ7XFxuNDQwMzpcXHRcXHRcXHRpZiAob24pXFxuNDQwNDpcXHRcXHRcXHRcXHRfX2JyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoXFx1MDAyNnZsYW4tXFx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcXG40NDA1OlxcdFxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MjAuODE4OTY4NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4MDkxNjcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBZGRyZXNzaW5nIGEgQnJpZGdlIE11bHRpY2FzdCBCdWcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIG5hc3R5IGJ1Zy4gSXQgc2VlbXMgdGhhdCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBmYWxzZSlgIGhhZCBhIHByZW1hdHVyZSBleGl0IGNvbmRpdGlvbiBpZiBgIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAuIFRoYXQncyBhIGNsYXNzaWMgc2NlbmFyaW8gZm9yIGxlYXZpbmcgYSBtdWx0aWNhc3QgY29udGV4dCBydW5uaW5nIGFuZCBgQlJfVkxGTEFHX01DQVNUX0VOQUJMRURgIGhhbmdpbmcgYXJvdW5kLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBtZW1vcnkgbGVhayB3aGVuIHRoZSBWTEFOIGdldHMgdG9ybiBkb3duLiBOb3QgZ29vZCwgbm90IGdvb2QgYXQgYWxsLlxuXG5UaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSwgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljLiBUaGUgY3J1Y2lhbCBjYWxsIHNlcXVlbmNlIGFwcGVhcnMgdG8gYmUgYGJyX3ZsYW5fcHV0X21hc3RlcmAgd2hpY2ggdGhlbiB0cmlnZ2VycyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihtYXN0ZXJ2LCBmYWxzZSlgLiBMb29rcyBsaWtlIGEgY29tbW9uIHNjZW5hcmlvLCBhbmQgYSBnb29kIHNwb3QgdG8gY2F1c2UgdGhlIGJ1Zy5cblxuSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgYnJfdmxhbl9wdXRfbWFzdGVyYCBmdW5jdGlvbiBpdHNlbGYuIEknbGwgdGFrZSBhIGxvb2sgYXQgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIHRoZXJlIHRvIGNvbmZpcm0gdGhlIHBhdGNoJ3MgbG9naWMgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgdnVsbmVyYWJpbGl0eSB3YXMgaW50cm9kdWNlZCBpbiB0aGUgZmlyc3QgcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NDAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNjoyNS4zOTk4ODc4NzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMzpcXHRzdGF0aWMgdm9pZCBicl92bGFuX3B1dF9tYXN0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydilcXG4gMjA0OlxcdHtcXG4gMjA1OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xcbiAyMDY6XFx0XFxuIDIwNzpcXHRcXHRpZiAoIWJyX3ZsYW5faXNfbWFzdGVyKG1hc3RlcnYpKVxcbiAyMDg6XFx0XFx0XFx0cmV0dXJuO1xcbiAyMDk6XFx0XFxuIDIxMDpcXHRcXHR2ZyA9IGJyX3ZsYW5fZ3JvdXAobWFzdGVydi1cXHUwMDNlYnIpO1xcbiAyMTE6XFx0XFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2bWFzdGVydi1cXHUwMDNlcmVmY250KSkge1xcbiAyMTI6XFx0XFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2dmctXFx1MDAzZXZsYW5faGFzaCxcXG4gMjEzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzdGVydi1cXHUwMDNldm5vZGUsIGJyX3ZsYW5fcmh0X3BhcmFtcyk7XFxuIDIxNDpcXHRcXHRcXHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XFxuIDIxNTpcXHRcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKG1hc3RlcnYsIGZhbHNlKTtcXG4gMjE2OlxcdFxcdFxcdGJyX211bHRpY2FzdF9jdHhfZGVpbml0KFxcdTAwMjZtYXN0ZXJ2LVxcdTAwM2Vicl9tY2FzdF9jdHgpO1xcbiAyMTc6XFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNm1hc3RlcnYtXFx1MDAzZXJjdSwgYnJfbWFzdGVyX3ZsYW5fcmN1X2ZyZWUpO1xcbiAyMTg6XFx0XFx0fVxcbiAyMTk6XFx0fVxcbiAyMjA6XFx0XFxuIDIyMTpcXHRzdGF0aWMgdm9pZCBuYnBfdmxhbl9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4gMjIyOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MjUuNDAwMDAxMTk4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzk0NjM3NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1czogQnJpZGdlIE11bHRpY2FzdCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBiYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gdGhhdCdzIHdpdGhpbiByZWFjaCBmb3IgZnV6emluZy4gSSBjYW4gcHJvYmFibHkgY3JhZnQgaW5wdXRzIHRoYXQgbGVhZCBkaXJlY3RseSB0byBpdC4gTm93LCB3aGljaCBvdGhlciBmdW5jdGlvbnMgYXJlIHJlbGV2YW50IGhlcmU/IGBicl92bGFuX3B1dF9tYXN0ZXJgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBvZnRlbiBtYWtlcyBmdXp6aW5nIGl0IGxlc3Mgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIG9mdGVuIGRpZmZpY3VsdCB0byB0cmlnZ2VyIHN0YXRpYyBmdW5jdGlvbnMgdGhyb3VnaCB0aGUgcHVibGljLWZhY2luZyBBUEkuIEJ1dCB3aGF0IGFib3V0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gPyBUaGF0IG9uZSBzZWVtcyBsaWtlIGEgc3Ryb25nIGNvbnRlbmRlciBhcyB3ZWxsLiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgaXQuIEknbGwgb3BlbiB1cCBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcG90ZW50aWFsIHRhcmdldHMgaW4gdGhhdCBzYW1lIHNvdXJjZSBmaWxlLCB3aGljaCB3b3VsZCBzdWdnZXN0IGEgcG90ZW50aWFsIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNjoyOS41Mzk0Njc1MjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQxMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQxMTpcXHRzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG40NDEyOlxcdHtcXG40NDEzOlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7XFxuNDQxNDpcXHRcXG40NDE1OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSlcXG40NDE2OlxcdFxcdFxcdHJldHVybjtcXG40NDE3OlxcdFxcbjQ0MTg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2dmxhbi1cXHUwMDNlYnItXFx1MDAzZXBvcnRfbGlzdCwgbGlzdCkge1xcbjQ0MTk6XFx0XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdnBvcnQ7XFxuNDQyMDpcXHRcXG40NDIxOlxcdFxcdFxcdHZwb3J0ID0gYnJfdmxhbl9maW5kKG5icF92bGFuX2dyb3VwKHApLCB2bGFuLVxcdTAwM2V2aWQpO1xcbjQ0MjI6XFx0XFx0XFx0aWYgKCF2cG9ydClcXG40NDIzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQ0MjQ6XFx0XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2cG9ydCwgb24pO1xcbjQ0MjU6XFx0XFx0fVxcbjQ0MjY6XFx0XFxuNDQyNzpcXHRcXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxcbjQ0Mjg6XFx0XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XFxuNDQyOTpcXHR9XFxuNDQzMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MjkuNTM5NjY0NDgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTY1ODc4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgcXVlc3Rpb24gaXMgYWx3YXlzIHdoZXRoZXIgaXQncyBleHBvcnRlZCBvciBpZiBpdCBoYXMgaW50ZXJuYWwgc2NvcGUuIEFoLCBnb29kLCBpdCdzIG5vbi1zdGF0aWMsIGRlY2xhcmVkIGluIGBuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaGAuIFRoYXQgbWFrZXMgaXQgYWNjZXNzaWJsZSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEknbSBsb29raW5nIGZvci4gVGhpcyBmdW5jdGlvbiBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24sIGEgdmFsdWFibGUgc3ltYm9sIHRvIGZvY3VzIG9uLiBOb3csIGxldCdzIHNlZSB3aGVyZSB0aGlzIGZpdHMgaW4gdGhlIGJpZ2dlciBwaWN0dXJlLiBJIHNob3VsZCBjaGVjayBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBuZXh0LCBzZWUgaG93IHRoYXQgcmVsYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkxMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MzMuMjk2MjU1MDM1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0MzEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ0MzE6XFx0aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxuNDQzMjpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuNDQzMzpcXHR7XFxuNDQzNDpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG40NDM1OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW47XFxuNDQzNjpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xcbjQ0Mzc6XFx0XFxuNDQzODpcXHRcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSA9PSBvbilcXG40NDM5OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ0NDA6XFx0XFxuNDQ0MTpcXHRcXHRpZiAob24gXFx1MDAyNlxcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpIHtcXG40NDQyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJDYW5ub3QgZW5hYmxlIG11bHRpY2FzdCB2bGFuIHNub29waW5nIHdpdGggdmxhbiBmaWx0ZXJpbmcgZGlzYWJsZWRcXFwiKTtcXG40NDQzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ0NDQ6XFx0XFx0fVxcbjQ0NDU6XFx0XFxuNDQ0NjpcXHRcXHR2ZyA9IGJyX3ZsYW5fZ3JvdXAoYnIpO1xcbjQ0NDc6XFx0XFx0aWYgKCF2ZylcXG40NDQ4OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ0NDk6XFx0XFxuNDQ1MDpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQsIG9uKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MzMuMjk2NDQ0MzM1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTc2OTcxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOlxuXG4qKkRpZ2dpbmcgaW50byBWTEFOIFNub29waW5nIGFuZCBCcmlkZ2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzICphbHNvKiBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggVkxBTiBzbm9vcGluZyB3aXRoaW4gdGhlIGJyaWRnZS4gR2l2ZW4gdGhhdCwgbGV0J3MgZGl2ZSBpbnRvIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBgX192bGFuX2FkZGAgYW5kIGBfX3ZsYW5fZGVsYCBmdW5jdGlvbnMuIFRob3NlIHNlZW0gbGlrZSB0aGUga2V5IHBsYXllcnMgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgVkxBTiBjb25maWd1cmF0aW9ucywgd2hpY2ggc2hvdWxkIGlsbHVtaW5hdGUgaG93IHNub29waW5nIGlzIGVuYWJsZWQgYW5kIGRpc2FibGVkIGluIHRoaXMgY29udGV4dC4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5IGFuZCBob3cgdGhleSBnZXQgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjM2LjYxNDE0NDEzMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjYzLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjYzOlxcdHN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXFxuIDI2NDpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDI2NTpcXHR7XFxuIDI2NjpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptYXN0ZXJ2ID0gTlVMTDtcXG4gMjY3OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAgPSBOVUxMO1xcbiAyNjg6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XFxuIDI2OTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiAyNzA6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xcbiAyNzE6XFx0XFx0aW50IGVycjtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0XFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHYpKSB7XFxuIDI3NDpcXHRcXHRcXHRiciA9IHYtXFx1MDAzZWJyO1xcbiAyNzU6XFx0XFx0XFx0ZGV2ID0gYnItXFx1MDAzZWRldjtcXG4gMjc2OlxcdFxcdFxcdHZnID0gYnJfdmxhbl9ncm91cChicik7XFxuIDI3NzpcXHRcXHR9IGVsc2Uge1xcbiAyNzg6XFx0XFx0XFx0cCA9IHYtXFx1MDAzZXBvcnQ7XFxuIDI3OTpcXHRcXHRcXHRiciA9IHAtXFx1MDAzZWJyO1xcbiAyODA6XFx0XFx0XFx0ZGV2ID0gcC1cXHUwMDNlZGV2O1xcbiAyODE6XFx0XFx0XFx0dmcgPSBuYnBfdmxhbl9ncm91cChwKTtcXG4gMjgyOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MzYuNjE0MjU2MDIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzk1NDc2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNvbnNpZGVyaW5nIFZMQU4gQWRkaXRpb24gU3RyYXRlZ2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBWTEFOcyBhcmUgYWRkZWQsIHNwZWNpZmljYWxseSBpbiB0aGlzIGNvbnRleHQuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBfX3ZsYW5fYWRkYCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0J3MgbGltaXRlZCBpbiBzY29wZSwgYW5kIHByb2JhYmx5IGRlc2lnbmVkIGZvciBhIHNwZWNpZmljIHB1cnBvc2Ugd2l0aGluIGEgcGFydGljdWxhciBtb2R1bGUgb3IgZmlsZS4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3cgSSdtIHdvbmRlcmluZywgaWYgYF9fdmxhbl9hZGRgIGlzIGNvbnN0cmFpbmVkIGxpa2UgdGhhdCwgd2hhdCBhYm91dCBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgPyBXaGF0J3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28/IElzIGBicl92bGFuX2FkZF9leGlzdGluZ2AgYSBtb3JlIGdlbmVyYWxpemVkIGZ1bmN0aW9uPyBEb2VzIGl0IGJ1aWxkIG9uIHRvcCBvZiBgX192bGFuX2FkZGAsIG9yIGlzIGl0IGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQ/IFVuZGVyc3RhbmRpbmcgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlc2UgdHdvIGFkZGl0aW9uIG1ldGhvZHMgaXMgZXNzZW50aWFsIGZvciBncmFzcGluZyB0aGUgb3ZlcmFsbCBWTEFOIG1hbmFnZW1lbnQgbG9naWMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYW5kIGRldGVybWluZSB0aGVpciByZXNwZWN0aXZlIHVzZSBjYXNlcyBhbmQgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBicmlkZ2luZyBpbXBsZW1lbnRhdGlvbi4gSSdtIGVzc2VudGlhbGx5IHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBkZXNpZ24gY2hvaWNlcyBtYWRlIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBjaG9vc2luZyBvbmUgb3ZlciB0aGUgb3RoZXIgaW4gc3BlY2lmaWMgc2NlbmFyaW9zLiBBcmUgd2UgZGVhbGluZyB3aXRoIHRoZSBjcmVhdGlvbiBvZiBuZXcgVkxBTnMgdmVyc3VzIGFkZGluZyBleGlzdGluZyBvbmVzIHRvIGEgYnJpZGdlPyBHb3R0YSBmaWd1cmUgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjQwLjE1MzgwNjM2NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTEwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzE5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzE5OlxcdHN0YXRpYyBpbnQgYnJfdmxhbl9hZGRfZXhpc3Rpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbiA3MjA6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXFxuIDcyMTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxcbiA3MjI6XFx0XFx0XFx0XFx0XFx0dTE2IGZsYWdzLCBib29sICpjaGFuZ2VkLFxcbiA3MjM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA3MjQ6XFx0e1xcbiA3MjU6XFx0XFx0Ym9vbCBiZWNvbWVzX2JyZW50cnkgPSBmYWxzZTtcXG4gNzI2OlxcdFxcdGJvb2wgd291bGRfY2hhbmdlID0gZmFsc2U7XFxuIDcyNzpcXHRcXHRpbnQgZXJyO1xcbiA3Mjg6XFx0XFxuIDcyOTpcXHRcXHRpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSkge1xcbiA3MzA6XFx0XFx0XFx0LyogVHJ5aW5nIHRvIGNoYW5nZSBmbGFncyBvZiBub24tZXhpc3RlbnQgYnJpZGdlIHZsYW4gKi9cXG4gNzMxOlxcdFxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19CUkVOVFJZKSlcXG4gNzMyOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3MzM6XFx0XFxuIDczNDpcXHRcXHRcXHRiZWNvbWVzX2JyZW50cnkgPSB0cnVlO1xcbiA3MzU6XFx0XFx0fSBlbHNlIHtcXG4gNzM2OlxcdFxcdFxcdHdvdWxkX2NoYW5nZSA9IF9fdmxhbl9mbGFnc193b3VsZF9jaGFuZ2UodmxhbiwgZmxhZ3MpO1xcbiA3Mzc6XFx0XFx0fVxcbiA3Mzg6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjQwLjE1MzkxODUwNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjI2ODM0NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ29udGVtcGxhdGluZyBhIFN0YXRpYyBDb25maWd1cmF0aW9uIGFuZCBWTEFOIEFkZGl0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGN1cnJlbnQgc2V0dXAgaXMgYWxzbyBzdGF0aWNhbGx5IGNvbmZpZ3VyZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBpdCBpbW1lZGlhdGVseSByYWlzZXMgdGhlIHF1ZXN0aW9uOiB3aGF0IGFib3V0IGFkZGluZyBhIFZMQU4/IE1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgYGJyX3ZsYW5fYWRkYCBjb21tYW5k4oCUIGhvdyBkb2VzIGl0IHBsYXkgaW50byB0aGlzIHN0YXRpYyBzaXR1YXRpb24/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIGhvdyB0aGF0IGNvbW1hbmQgaW50ZWdyYXRlcyBpbnRvIHRoZSBwcmUtZXhpc3Rpbmcgc3RhdGljIGNvbmZpZ3VyYXRpb24sIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBicmlkZ2UsIGFuZCB0aGUgb3ZlcmFsbCBuZXR3b3JrIGFyY2hpdGVjdHVyZS4gSXMgdGhlcmUgYW55dGhpbmcgdGhhdCBjb3VsZCBpbnRlcmZlcmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjQzLjc4MDc1NjI3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0MTE0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfdmxhbl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmM9MTY3PWJyX3ZsYW5fZ2V0X21hc3RlcihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzgtXFx0XFx0LyogbWlzc2luZyBnbG9iYWwgY3R4LCBjcmVhdGUgaXQgbm93ICovXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTc5OlxcdFxcdGlmIChicl92bGFuX2FkZChiciwgdmlkLCAwLCBcXHUwMDI2Y2hhbmdlZCwgZXh0YWNrKSlcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xODAtXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yNjM9c3RhdGljIGludCBfX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTI5Ni1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyOTc6XFx0XFx0XFx0ZXJyID0gYnJfdmxhbl9hZGQoYnIsIHYtXFx1MDAzZXZpZCxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yOTgtXFx0XFx0XFx0XFx0XFx0ICBmbGFncyB8IEJSSURHRV9WTEFOX0lORk9fQlJFTlRSWSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTY4Nj1ib29sIGJyX3Nob3VsZF9sZWFybihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZpZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcxOC1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3MTk6c3RhdGljIGludCBicl92bGFuX2FkZF9leGlzdGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzIwLVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzc4LSAqL1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc3OTppbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsIGJvb2wgKmNoYW5nZWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzgwLVxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc5MS1cXHRpZiAodmxhbilcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3OTI6XFx0XFx0cmV0dXJuIGJyX3ZsYW5fYWRkX2V4aXN0aW5nKGJyLCB2ZywgdmxhbiwgZmxhZ3MsIGNoYW5nZWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzkzLVxcdFxcdFxcdFxcdFxcdCAgICBleHRhY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTEwMj1pbnQgX19icl92bGFuX3NldF9kZWZhdWx0X3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgcHZpZCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExMzAtXFx0ICAgICghcHZlbnQgfHwgIWJyX3ZsYW5fc2hvdWxkX3VzZShwdmVudCkpKSB7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTEzMTpcXHRcXHRlcnIgPSBicl92bGFuX2FkZChiciwgcHZpZCxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTMyLVxcdFxcdFxcdFxcdCAgQlJJREdFX1ZMQU5fSU5GT19QVklEIHxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExOTAtXFx0XFx0aWYgKG9sZF9wdmlkKSB7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTE5MTpcXHRcXHRcXHRicl92bGFuX2FkZChiciwgb2xkX3B2aWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE5Mi1cXHRcXHRcXHRcXHQgICAgQlJJREdFX1ZMQU5fSU5GT19QVklEIHxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE3NDc9aW50IGJyX3ZsYW5fYnJpZGdlX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE3NTUtXFx0Y2FzZSBORVRERVZfUkVHSVNURVI6XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTc1NjpcXHRcXHRyZXQgPSBicl92bGFuX2FkZChiciwgYnItXFx1MDAzZWRlZmF1bHRfcHZpZCxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzU3LVxcdFxcdFxcdFxcdCAgQlJJREdFX1ZMQU5fSU5GT19QVklEIHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6NDMuODMyMTkxMzE0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MzY3NjgxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBCcmlkZ2UgTXVsdGljYXN0IGFuZCBWTEFOIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnMuIEl0IGFwcGVhcnMgdGhhdCBgYnJfdmxhbl9hZGRgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBhcmUgYWxsIG5vbi1zdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHBvdGVudGlhbCBleHRlcm5hbCBpbnRlcmFjdGlvbiBwb2ludHMuXG5cbkknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gIEkgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCB3aGljaCBpcyBrZXkgZm9yIGZ1enppbmcuICBMb29raW5nIGF0IHRoZSBjYWxsIGdyYXBoLCBpdCdzIGNhbGxlZCBieSBgYnJfdmxhbl9wdXRfbWFzdGVyYCAod2hlbiBhIFZMQU4gaXMgZGVsZXRlZCksIGBfX3ZsYW5fYWRkYCAod2hlbiBhIFZMQU4gaXMgYWRkZWQpLCBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgICh3aGVuIGEgVkxBTiBpcyBtb2RpZmllZCksIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYCAoY2FsbGVkIGZyb20gYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2ApLiBBaGEsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBpcyB0cmlnZ2VyZWQgd2hlbiBgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEYCBpcyB0b2dnbGVkLiBUaGF0J3MgZ29vZC5cblxuVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIG5ldGxpbmssIGxpa2VseSB2aWEgY29tbWFuZHMgbGlrZSBgYnJfY2hhbmdlbGlua2Agb3IgYGJyX3NldGxpbmtgLiAgVGhlIGFiaWxpdHkgdG8gbW9kaWZ5IFZMQU4gc2V0dGluZ3MgYW5kIG11bHRpY2FzdCBzbm9vcGluZyBmcm9tIHVzZXJzcGFjZSBkaXJlY3RseSBpbXBsaWNhdGVzIHRoYXQgdGhlc2UgY2hhbmdlcyBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3QuIFRoaXMgaXMgYWxsIHRlbGxpbmcgbWUgdGhhdCB0aGVzZSBhcmUgdmFsaWQgdGFyZ2V0cyBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRob3NlIHRocmVlIGZ1bmN0aW9uczogYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCwgYW5kIGBicl92bGFuX2FkZGAuXG5cbkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiAgSSdtIHNlZWluZyB0aGF0IHdlIG5lZWQgdG8gZW5hYmxlIGBCUklER0VgLCBgQlJJREdFX0lHTVBfU05PT1BJTkdgLCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AuICBTaW5jZSBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYCBpcyBlbmFibGVkIGFuZCBgbmV0L2JyaWRnZS9icl92bGFuLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGVuYWJsZWQsIGFuZCBib3RoIGRlcGVuZCBvbiBgQ09ORklHX0JSSURHRWAgaW4gdGhlIGBuZXQvYnJpZGdlL0tjb25maWdgLCB0aGF0IGNvbmZpcm1zIHRoZSBjb3JyZWN0IGNvbmZpZ3MuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYEtjb25maWdgIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODcxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjUxLjc2ODk2Mjc1OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MzY3NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL0tjb25maWc9Nj1jb25maWcgQlJJREdFXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctMzUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjM2OmNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cXHRib29sIFxcXCJJR01QL01MRCBzbm9vcGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6NTEuODE3ODA1NzA0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTMyNjQ1MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBCcmlkZ2UgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIHNwZWNpZmljYWxseSBmb3IgYnJpZGdpbmcuIE15IGZvY3VzIGlzIG9uIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IElHTVAgc25vb3BpbmcgYW5kIFZMQU4gZmlsdGVyaW5nIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgYnJpZGdlIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBgQlJJREdFX0lHTVBfU05PT1BJTkdgIGFuZCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBvcHRpb25zLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaG93IHRoZXNlIG9wdGlvbnMgaW50ZXJhY3QgYW5kIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBlYWNoIG90aGVyLiBBcmUgdGhlcmUgYW55IGNhdmVhdHMgb3Igc3VidGxlIGltcGxpY2F0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmxpY3RzIHRoYXQgSSBuZWVkIHRvIGJlIG1pbmRmdWwgb2Y/IFBlcmhhcHMgdGhlcmUgYXJlIGJlc3QgcHJhY3RpY2VzIG9yIHJlY29tbWVuZGF0aW9ucyBidXJpZWQgd2l0aGluIHRoZSBjb21tZW50cyBvciBzdXJyb3VuZGluZyBjb2RlIHRoYXQgSSdtIG92ZXJsb29raW5nPyBUaGlzIHdpbGwgaGVscCBtZSB0byBkZXRlcm1pbmUgaG93IEkgd291bGQgbGlrZSB0byBkZXNpZ24gdGhlIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5ODgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNjo1Ni40MzEwNzI4NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzY6XFx0Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxuICAzNzpcXHRcXHRib29sIFxcXCJJR01QL01MRCBzbm9vcGluZ1xcXCJcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDQwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxcbiAgNDM6XFx0XFx0ICBmb3J3YXJkIG11bHRpY2FzdCB0cmFmZmljIGJhc2VkIG9uIElHTVAvTUxEIHRyYWZmaWMgcmVjZWl2ZWQgZnJvbVxcbiAgNDQ6XFx0XFx0ICBlYWNoIHBvcnQuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xcbiAgNTE6XFx0XFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxuICA1MjpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgNTM6XFx0XFx0ZGVwZW5kcyBvbiBWTEFOXzgwMjFRXFxuICA1NDpcXHRcXHRkZWZhdWx0IG5cXG4gIDU1OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6NTYuNDMxMTM4ODhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY5NTg0MTYzMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVwZW5kZW5jeSBBbmFseXNpcyBmb3IgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gYEJSSURHRV9JR01QX1NOT09QSU5HYCByZWxpZXMgb24gYEJSSURHRWAgYW5kIGBJTkVUYCwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGluY2x1ZGVkLiBTaW1pbGFybHksIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIGRlcGVuZHMgb24gYm90aCBgQlJJREdFYCBhbmQgYFZMQU5fODAyMVFgLlxuXG5UaGVyZWZvcmUsIHRvIGVuYWJsZSBldmVyeXRoaW5nLCB3ZSBuZWVkIHRvIGluY2x1ZGU6IGBCUklER0VgLCBgSU5FVGAsIGBWTEFOXzgwMjFRYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBJdCdzIGFsbW9zdCBhdXRvbWF0aWMsIGJ1dCBsZXQncyBiZSB0aG9yb3VnaC5cblxuV2hpbGUgYElORVRgIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCBpbiBtb3N0IGJ1aWxkcywgaXQncyBnb29kIHByYWN0aWNlIHRvIGxpc3QgaXQgZXhwbGljaXRseSBoZXJlIGZvciBjb21wbGV0ZW5lc3MuIEFuZCwgb2YgY291cnNlLCB0aGUgYFZMQU5fODAyMVFgIGlzIGRlZmluaXRlbHkgbmVlZGVkLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGZvciBgVkxBTl84MDIxUWAsIHNwZWNpZmljYWxseSBpbiBgbmV0LzgwMjFxL0tjb25maWdgLiBJdCBuZXZlciBodXJ0cyB0byBjb25maXJtIHRoZSBzb3VyY2Ugb2YgdHJ1dGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDk0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6Mjc6MjMuMzg5NTU4MzIxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTcwMjk4MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZMQU5fODAyMVFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0LzgwMjFxL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0LzgwMjFxL0tjb25maWctNS1cXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXFxubmV0LzgwMjFxL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XFxcIlxcbi0tXFxubmV0LzgwMjFxL0tjb25maWctMjEtXFxubmV0LzgwMjFxL0tjb25maWc6MjI6Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxcbm5ldC84MDIxcS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkdWUlAgKEdBUlAgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvODAyMXEvS2NvbmZpZy0zMS1cXG5uZXQvODAyMXEvS2NvbmZpZzozMjpjb25maWcgVkxBTl84MDIxUV9NVlJQXFxubmV0LzgwMjFxL0tjb25maWctMzMtXFx0Ym9vbCBcXFwiTVZSUCAoTXVsdGlwbGUgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI3OjIzLjc4NjU5NjE5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODEwNzczODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCcmlkZ2UgTXVsdGljYXN0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGBWTEFOXzgwMjFRYCBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmV2aWV3IHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLCB3aGljaCBhcmUgdGhlIGZvY3VzIHN5bWJvbHM6IGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCwgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AsIGFuZCBgYnJfdmxhbl9hZGRgLiBJJ20gYWxzbyBicmllZmx5IGNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMsIGJ1dCB0aG9zZSB0aHJlZSBsb29rIGxpa2UgdGhlIGNvcmUgb25lcy5cblxuYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIHRoZSBvbmUgdGhhdCB3YXMgc3BlY2lmaWNhbGx5IG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guIEkgdGhpbmsgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgYW5kIGBicl92bGFuX2FkZGAgd2lsbCBiZSBnb29kIGVudHJ5IHBvaW50cyBmb3IgYW5hbHlzaXMgYXMgd2VsbCwgaW4gY2FzZSB0aGUgZml4IGhhcyBpbXBsaWNhdGlvbnMgdGhlcmUuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBpcyBleHBvcnRlZC4gSXQgbG9va3MgbGlrZSBpdCdzIG5vbi1zdGF0aWMsIGRlY2xhcmVkIGluIGBuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaGAuIFRoYXQgbWFrZXMgaXQgYSBnbG9iYWwgc3ltYm9sIHdpdGhpbiB0aGUga2VybmVsLCBhY2Nlc3NpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGJ1dCBub3QgZXhwbGljaXRseSBleHBvcnRlZCB0byBtb2R1bGVzLiBUaGF0J3MgZmluZTsgaXQncyBzdGlsbCBhY2Nlc3NpYmxlIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlIGZ1enppbmcuXG5cbk15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoIGlzIHRoYXQgaXQgZml4ZXMgYSBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLiBJdCB3YXMgcmV0dXJuaW5nIGVhcmx5IHdoZW4gZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gaWYgdGhlIFZMQU4gd2Fzbid0IGFscmVhZHkgYSBicmlkZ2UgZW50cnkuIFRoaXMgY2FuIGxlYWQgdG8gdGhlIG11bHRpY2FzdCBjb250ZXh0IHN0YXlpbmcgYWN0aXZlIGFuZCB0aGUgYEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEYCBmbGFnIGJlaW5nIHNldCwgd2hpY2ggY291bGQgY2F1c2UgYSB1c2UtYWZ0ZXItZnJlZSBvciBhIG1lbW9yeSBsZWFrIHdoZW4gdGhlIFZMQU4gaXMgZXZlbnR1YWxseSBkZXN0cm95ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWVwIGluIHRoZSBicmlkZ2UncyBtdWx0aWNhc3QgbG9naWMsIGFuZCBpdCdzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGRlYWxpbmcgd2l0aCBicmlkZ2UgVkxBTnMuIFNwZWNpZmljYWxseSwgd2hlbiBhZGRpbmcsIHJlbW92aW5nLCBvciBtb2RpZnlpbmcgYnJpZGdlIFZMQU5zLCBhbmQgYWxzbyB3aGVuIHRvZ2dsaW5nIG11bHRpY2FzdCBzbm9vcGluZy4gQmVjYXVzZSBpdCdzIGFmZmVjdGluZyBjb3JlIG11bHRpY2FzdCBiZWhhdmlvciBhbmQgYWNjZXNzaWJsZSB2aWEgdXNlcnNwYWNlLCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuXG5cbk15IGxpc3Qgb2YgcmVsZXZhbnQgY29uZmlncyBpbmNsdWRlcyBgQlJJREdFYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AsIGBWTEFOXzgwMjFRYCwgYW5kIGBJTkVUYC5cblxuV2l0aCB0aGlzIGFzc2Vzc21lbnQgY29tcGxldGUsIEkgd2lsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE1MSwiT3V0cHV0VG9rZW5zIjoyMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6Mjc6MzQuNTk3MzcyMzUzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1ODI0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5cIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ1wiLFxuICAgIFwiYnJfdmxhbl9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgaXQgd291bGQgcmV0dXJuIGVhcmx5IHdoZW4gZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gaWYgdGhlIFZMQU4gaXMgbm90IGEgYnJpZGdlIGVudHJ5LiBUaGlzIGNvdWxkIGxlYXZlIHRoZSBtdWx0aWNhc3QgY29udGV4dCBhY3RpdmUgYW5kIHRoZSBgQlJfVkxGTEFHX01DQVNUX0VOQUJMRURgIGZsYWcgc2V0LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyB3aGVuIHRoZSBWTEFOIGlzIGRlc3Ryb3llZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJyaWRnZSBtdWx0aWNhc3QgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGFkZGluZy9yZW1vdmluZy9tb2RpZnlpbmcgYnJpZGdlIFZMQU5zIG9yIHRvZ2dsaW5nIG11bHRpY2FzdCBzbm9vcGluZy4gSXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9JR01QX1NOT09QSU5HXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuXCIsXG4gICAgXCJicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdcIixcbiAgICBcImJyX3ZsYW5fYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSB3aGVuIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBWTEFOIGlmIHRoZSBWTEFOIGlzIG5vdCBhIGJyaWRnZSBlbnRyeS4gVGhpcyBjb3VsZCBsZWF2ZSB0aGUgbXVsdGljYXN0IGNvbnRleHQgYWN0aXZlIGFuZCB0aGUgYEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEYCBmbGFnIHNldCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3Mgd2hlbiB0aGUgVkxBTiBpcyBkZXN0cm95ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgd2hlbiBhZGRpbmcvcmVtb3ZpbmcvbW9kaWZ5aW5nIGJyaWRnZSBWTEFOcyBvciB0b2dnbGluZyBtdWx0aWNhc3Qgc25vb3BpbmcuIEl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI3OjM0LjY3OTk2MTIxNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMzkyNTYzNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNzozNC42ODA0NjQ0NzRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTgwMzg3NDg1ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCB3aGVyZSB0aGUgZnVuY3Rpb24gd291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGVhcmx5IHdoZW4gdG9nZ2xpbmcgb2ZmIG11bHRpY2FzdCBmb3IgYSBub24tYnJlbnRyeSBWTEFOLiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3Igb3BlcmF0aW9ucyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjQ2ODkyMjA3OWQ0NjdlZjllOTZlMmI4NjE2YzQxNTFmMzcxM2FjOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDEyOjI1OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbmluZGV4IDc1ZTFlMmE4ZmM4M2EuLjNlZjVkOGJiZjU1MmUgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG5AQCAtNDM3Nyw4ICs0Mzc3LDggQEAgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4gXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHtcbiBcdFx0YnIgPSB2bGFuLVx1MDAzZWJyO1xuIFxuLVx0XHRpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuLVx0XHQgICAgKG9uIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAob24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuIFx0XHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKSlcbiBcdFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNzozNC42ODA0NjUzNzRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwMDkwMzIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCcmlkZ2UgTXVsdGljYXN0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2l0aGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gVGltZSB0byBkaWcgaW50byB0aGUgZGlmZjpcblxuYGBgY1xuLVx0XHRpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuLVx0XHQgICAgKG9uIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAob24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuIFx0XHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKSlcbiBcdFx0XHRyZXR1cm47XG5gYGBcblxuUmlnaHQgYXdheSwgSSBzZWUgYSBsb2dpY2FsIGNoYW5nZSBpbiBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gQmVmb3JlLCBpdCB3YXMgcmV0dXJuaW5nIGlmIGAhYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pYCB3aGVuIGBvbmAgd2FzIGZhbHNlLiBOb3csIHRoYXQgd2hvbGUgYmxvY2sgaXMgc2tpcHBlZCBpZiBgb25gIGlzIGZhbHNlLCBkdWUgdG8gdGhlIHNob3J0LWNpcmN1aXRpbmcgb2YgdGhlIGBcdTAwMjZcdTAwMjZgLiBTbywgZXNzZW50aWFsbHkgYSBjb250cm9sIGZsb3cgYWx0ZXJhdGlvbi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgbm8sIHRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBidWcgZml4IG9yIGNoYW5nZS4gTGV0J3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIHRyeSB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gTGV0J3MgbG9vayBhdCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6Mjc6NDAuMzgxMzcxMzU3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU1ODkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzQwPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDQxMT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyMy1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MjQ6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2cG9ydCwgb24pO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyNS1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjctXFx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0Mjg6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6Mjc6NDAuNDI5OTM2MTcyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzM3ODgwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gTXkgcHJpbWFyeSBjb25jZXJuIGlzLCBhcyBhbHdheXMgd2l0aCB0aGVzZSBsb3ctbGV2ZWwgZnVuY3Rpb25zLCB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZSB0byBlbnN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgcmVhZGluZyBvciBwYXNzaW5nIGdhcmJhZ2UgZGF0YS4gVGhhdCdzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgaGFyZC10by1kZWJ1ZyBpbnN0YWJpbGl0eSBhbmQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBzbyBpdCdzIHRoZSBmaXJzdCB0aGluZyBJJ20gbG9va2luZyBmb3IuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFzIGNsZWFuIGFzIGl0IHNob3VsZCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI3OjQzLjc2MzcyNzc4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzNjYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQzNjY6XFx0dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuNDM2NzpcXHR7XFxuNDM2ODpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7XFxuNDM2OTpcXHRcXG40MzcwOlxcdFxcdC8qIGl0J3Mgb2theSB0byBjaGVjayBmb3IgdGhlIGZsYWcgd2l0aG91dCB0aGUgbXVsdGljYXN0IGxvY2sgYmVjYXVzZSBpdFxcbjQzNzE6XFx0XFx0ICogY2FuIG9ubHkgY2hhbmdlIHVuZGVyIFJUTkwgLVxcdTAwM2UgbXVsdGljYXN0X2xvY2ssIHdlIG5lZWQgdGhlIGxhdHRlciB0b1xcbjQzNzI6XFx0XFx0ICogc3luYyB3aXRoIHRpbWVycyBhbmQgcGFja2V0c1xcbjQzNzM6XFx0XFx0ICovXFxuNDM3NDpcXHRcXHRpZiAob24gPT0gISEodmxhbi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEKSlcXG40Mzc1OlxcdFxcdFxcdHJldHVybjtcXG40Mzc2OlxcdFxcbjQzNzc6XFx0XFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSB7XFxuNDM3ODpcXHRcXHRcXHRiciA9IHZsYW4tXFx1MDAzZWJyO1xcbjQzNzk6XFx0XFxuNDM4MDpcXHRcXHRcXHRpZiAob24gXFx1MDAyNlxcdTAwMjZcXG40MzgxOlxcdFxcdFxcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxcbjQzODI6XFx0XFx0XFx0ICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKFxcdTAwMjZ2bGFuLVxcdTAwM2Vicl9tY2FzdF9jdHgpKSlcXG40MzgzOlxcdFxcdFxcdFxcdHJldHVybjtcXG40Mzg0OlxcdFxcbjQzODU6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjQzODY6XFx0XFx0XFx0dmxhbi1cXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfTUNBU1RfRU5BQkxFRDtcXG40Mzg3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjQzODg6XFx0XFxuNDM4OTpcXHRcXHRcXHRpZiAob24pXFxuNDM5MDpcXHRcXHRcXHRcXHRfX2JyX211bHRpY2FzdF9vcGVuKFxcdTAwMjZ2bGFuLVxcdTAwM2Vicl9tY2FzdF9jdHgpO1xcbjQzOTE6XFx0XFx0XFx0ZWxzZVxcbjQzOTI6XFx0XFx0XFx0XFx0X19icl9tdWx0aWNhc3Rfc3RvcChcXHUwMDI2dmxhbi1cXHUwMDNlYnJfbWNhc3RfY3R4KTtcXG40MzkzOlxcdFxcdH0gZWxzZSB7XFxuNDM5NDpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4O1xcbjQzOTU6XFx0XFxuNDM5NjpcXHRcXHRcXHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChcXHUwMDI2dmxhbi1cXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xcbjQzOTc6XFx0XFx0XFx0aWYgKG9uIFxcdTAwMjZcXHUwMDI2IGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoYnJtY3R4KSlcXG40Mzk4OlxcdFxcdFxcdFxcdHJldHVybjtcXG40Mzk5OlxcdFxcbjQ0MDA6XFx0XFx0XFx0YnIgPSB2bGFuLVxcdTAwM2Vwb3J0LVxcdTAwM2VicjtcXG40NDAxOlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9sb2NrKTtcXG40NDAyOlxcdFxcdFxcdHZsYW4tXFx1MDAzZXByaXZfZmxhZ3MgXj0gQlJfVkxGTEFHX01DQVNUX0VOQUJMRUQ7XFxuNDQwMzpcXHRcXHRcXHRpZiAob24pXFxuNDQwNDpcXHRcXHRcXHRcXHRfX2JyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoXFx1MDAyNnZsYW4tXFx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcXG40NDA1OlxcdFxcdFxcdGVsc2VcXG40NDA2OlxcdFxcdFxcdFxcdF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXFx1MDAyNnZsYW4tXFx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcXG40NDA3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjQ0MDg6XFx0XFx0fVxcbjQ0MDk6XFx0fVxcbjQ0MTA6XFx0XFxuNDQxMTpcXHRzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG40NDEyOlxcdHtcXG40NDEzOlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7XFxuNDQxNDpcXHRcXG40NDE1OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6Mjc6NDMuNzY0MDIxNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTU1MTY2NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZml4LCBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgb2xkIGNvZGUgaGFkIGEgZmxhdyBpbiBpdHMgbG9naWMg4oCTIGl0IHdhcyBiYWlsaW5nIG91dCBwcmVtYXR1cmVseS4gU3BlY2lmaWNhbGx5LCBpdCB3YXMgcmV0dXJuaW5nIGVhcmx5IHdoZW4gYG9uYCB3YXMgZmFsc2UgKmFuZCogYCFicl92bGFuX2lzX2JyZW50cnkodmxhbilgIHdhcyB0cnVlLiBUaGlzIG1lYW50IHRoYXQgdGhlIG11bHRpY2FzdCBzdGF0ZSBmb3IgVkxBTnMgdGhhdCAqd2VyZW4ndCogQnJlbnRyeSB3b3VsZG4ndCBnZXQgcHJvcGVybHkgdG9nZ2xlZCBvZmYsIGV2ZW4gd2hlbiB0aGV5IHNob3VsZC4gSXQncyBhIGNsYXNzaWMgYm9vbGVhbiBsb2dpYyBlcnJvciwgc29tZXRoaW5nIHlvdSBzZWUgYWxsIHRoZSB0aW1lIGluIHRoZXNlIHR5cGVzIG9mIHN5c3RlbXMuXG5cblRoZSBnb29kIG5ld3MgaXMsIHRoZXJlJ3Mgbm8gaGludCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLiBUaGlzIGlzIHB1cmVseSBhYm91dCBjb250cm9sbGluZyB0aGUgbXVsdGljYXN0IHN0YXRlIHdpdGggYSBib29sZWFuIGZsYWcgYW5kIHRoZW4gY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24sIGBfX2JyX211bHRpY2FzdF9zdG9wYCBvciBgX19icl9tdWx0aWNhc3Rfb3BlbmAuIE5vIEtNU0FOIGlzc3Vlcywgbm8gS0FTQU4sIExPQ0tERVAsIG9yIGFueSBvZiB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoaXMgaXMgYSBnYXJkZW4tdmFyaWV0eSBsb2dpYyBidWcsIGFuZCBob25lc3RseSwgdGhleSdyZSB0aGUgZWFzaWVzdCB0byBhZGRyZXNzIHdoZW4geW91IGZpbmQgdGhlbSEgSSdsbCBnbyBhaGVhZCBhbmQgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBvbiB0aGlzIG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAwMiwiT3V0cHV0VG9rZW5zIjoxMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNzo1Mi43MTkxOTA2MzZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCB3aGVyZSB0aGUgZnVuY3Rpb24gd291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGVhcmx5IHdoZW4gdG9nZ2xpbmcgb2ZmIG11bHRpY2FzdCBmb3IgYSBub24tYnJlbnRyeSBWTEFOLiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3Igb3BlcmF0aW9ucyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIHRoZSBmdW5jdGlvbiB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gZWFybHkgd2hlbiB0b2dnbGluZyBvZmYgbXVsdGljYXN0IGZvciBhIG5vbi1icmVudHJ5IFZMQU4uIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBvcGVyYXRpb25zIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5xnrk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-23 12:11:35 +0000 UTC FinishedAt: 2026-08-23 12:27:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_IGMP_SNOOPING", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_IGMP_SNOOPING", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q", "INET" ], "series_id": "9eb97dc1-6915-4b57-a8d7-60016c116bc4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_multicast_toggle_one_vlan", "br_multicast_toggle_vlan_snooping", "br_vlan_add" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbiYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9hZGQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdvdWxkIGluY29ycmVjdGx5IHJldHVybiBlYXJseSB3aGVuIHRvZ2dsaW5nIG9mZiBtdWx0aWNhc3QgZm9yIGEgbm9uLWJyZW50cnkgVkxBTi4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgc3RhdGUgbWFuYWdlbWVudCBmaXguIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgaXQgd291bGQgcmV0dXJuIGVhcmx5IHdoZW4gZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gaWYgdGhlIFZMQU4gaXMgbm90IGEgYnJpZGdlIGVudHJ5LiBUaGlzIGNvdWxkIGxlYXZlIHRoZSBtdWx0aWNhc3QgY29udGV4dCBhY3RpdmUgYW5kIHRoZSBgQlJfVkxGTEFHX01DQVNUX0VOQUJMRURgIGZsYWcgc2V0LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyB3aGVuIHRoZSBWTEFOIGlzIGRlc3Ryb3llZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJyaWRnZSBtdWx0aWNhc3QgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGFkZGluZy9yZW1vdmluZy9tb2RpZnlpbmcgYnJpZGdlIFZMQU5zIG9yIHRvZ2dsaW5nIG11bHRpY2FzdCBzbm9vcGluZy4gSXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY0Njg5MjIwNzlkNDY3ZWY5ZTk2ZTJiODYxNmM0MTUxZjM3MTNhYzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxMjoyNTo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuaW5kZXggNzVlMWUyYThmYzgzYS4uM2VmNWQ4YmJmNTUyZSAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbkBAIC00Mzc3LDggJiM0Mzs0Mzc3LDggQEAgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4gXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHtcbiBcdFx0YnIgPSB2bGFuLVx1MDAzZWJyO1xuIFxuLVx0XHRpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuLVx0XHQgICAgKG9uIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8XG4gXHRcdCAgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChcdTAwMjZ2bGFuLVx1MDAzZWJyX21jYXN0X2N0eCkpKVxuIFx0XHRcdHJldHVybjtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyYjMzQ7LAogICAgJiMzNDticl92bGFuX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgaXQgd291bGQgcmV0dXJuIGVhcmx5IHdoZW4gZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gaWYgdGhlIFZMQU4gaXMgbm90IGEgYnJpZGdlIGVudHJ5LiBUaGlzIGNvdWxkIGxlYXZlIHRoZSBtdWx0aWNhc3QgY29udGV4dCBhY3RpdmUgYW5kIHRoZSBgQlJfVkxGTEFHX01DQVNUX0VOQUJMRURgIGZsYWcgc2V0LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyB3aGVuIHRoZSBWTEFOIGlzIGRlc3Ryb3llZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJyaWRnZSBtdWx0aWNhc3QgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGFkZGluZy9yZW1vdmluZy9tb2RpZnlpbmcgYnJpZGdlIFZMQU5zIG9yIHRvZ2dsaW5nIG11bHRpY2FzdCBzbm9vcGluZy4gSXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY0Njg5MjIwNzlkNDY3ZWY5ZTk2ZTJiODYxNmM0MTUxZjM3MTNhYzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyMyAxMjoyNTo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCmluZGV4IDc1ZTFlMmE4ZmM4M2EuLjNlZjVkOGJiZjU1MmUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwpAQCAtNDM3Nyw4ICYjNDM7NDM3Nyw4IEBAIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKQogCWlmIChicl92bGFuX2lzX21hc3Rlcih2bGFuKSkgewogCQliciA9IHZsYW4tJmd0O2JyOwogCi0JCWlmICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8Ci0JCSAgICAob24gJmFtcDsmYW1wOwomIzQzOwkJaWYgKG9uICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fAogCQkgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoJmFtcDt2bGFuLSZndDticl9tY2FzdF9jdHgpKSkKIAkJCXJldHVybjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJyaWRnZSBNdWx0aWNhc3QgUGF0Y2gqKgoKT2theSwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB0b3VjaGluZyB0aGUgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBpbiB0aGUgZGlmZi4KCkFscmlnaHQsIEkgc2VlIGl0LiBUaGUgY29yZSBvZiB0aGUgbG9naWMgcmV2b2x2ZXMgYXJvdW5kIHRoaXMgY29uZGl0aW9uYWwgcmV0dXJuIHN0YXRlbWVudC4gUHJldmlvdXNseSwgaXQgbG9va2VkIGxpa2UgdGhpczoKCmBgYGMKCQlpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fAoJCSAgICAob24gJmFtcDsmYW1wOwoJCSAgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZCgmYW1wO3ZsYW4tJmd0O2JyX21jYXN0X2N0eCkpKQoJCQlyZXR1cm47CmBgYAoKQW5kIG5vdyBpdCYjMzk7czoKCmBgYGMKCQlpZiAob24gJmFtcDsmYW1wOwoJCSAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fAoJCSAgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZCgmYW1wO3ZsYW4tJmd0O2JyX21jYXN0X2N0eCkpKQoJCQlyZXR1cm47CmBgYAoKUmlnaHQgYXdheSwgSSBjYW4gc2VlIHRoZSBjaGFuZ2UgYWx0ZXJzIHRoZSBsb2dpYyBmbG93IHNpZ25pZmljYW50bHkuIFRoZSBvcmlnaW5hbCBjb2RlIHJldHVybmVkIGVhcmx5IGlmIGVpdGhlciBgIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAgT1IgaWYgYG9uYCB3YXMgdHJ1ZSBBTkQgdGhlIGdsb2JhbCBtdWx0aWNhc3QgY29udGV4dCB3YXMgZGlzYWJsZWQuIE5vdywgaXQgKm9ubHkqIHJldHVybnMgZWFybHkgaWYgYG9uYCBpcyB0cnVlIEFORCBlaXRoZXIgYCFicl92bGFuX2lzX2JyZW50cnkodmxhbilgIG9yIHRoZSBnbG9iYWwgY29udGV4dCBpcyBkaXNhYmxlZC4gRXNzZW50aWFsbHksIHRoZSBwYXRjaCBpcyBtYWtpbmcgdGhlIGAhYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pYCBjaGVjayBjb25kaXRpb25hbCBvbiBgb25gIGJlaW5nIHRydWUuIElmIGBvbmAgaXMgZmFsc2UsIGl0JiMzOTtzIG5vdCBnb2luZyB0byByZXR1cm4uIFRoaXMgaXMgdGhlIGNyaXRpY2FsIGNoYW5nZS4gTGV0IG1lIGdvIGJhY2sgYW5kIGxvb2sgYXQgdGhlIGZ1bmN0aW9uLCBhbmQgZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzQwPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjUtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjcte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDQxMT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjMtXHRcdFx0Y29udGludWU7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MjQ6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odnBvcnQsIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyNS1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjctXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI4Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQnJpZGdlIE11bHRpY2FzdCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGdvdmVybiB0aGUgbXVsdGljYXN0IGJlaGF2aW91ciBpbiB0aGlzIGJyaWRnZS4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHdlJiMzOTtsbCBiZSBkZWFsaW5nIHdpdGggYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIGhlcmUuIEFuZCBhIHF1aWNrIHNjYW4gc3VnZ2VzdHMgbXkgaW50dWl0aW9uIGlzIGNvcnJlY3QgLSB0aGlzIGNvZGUgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgb25seSB3aGVuIGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgIGlzIGVuYWJsZWQuIFRpbWUgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgc3BlY2lmaWVkIGluIHRoZSBgbmV0L2JyaWRnZS9NYWtlZmlsZWAuIEkgd2lsbCB2ZXJpZnkgaWYgdGhpcyBpcyB0aGUgb25seSBvcHRpb24gaW52b2x2ZWQgb3IgaWYgdGhlcmUgYXJlIG90aGVyLCBtb3JlIHN1YnRsZSBmYWN0b3JzIGF0IHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSAmIzQzOz0gYnJfbmV0ZmlsdGVyLm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjAtXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIxOmJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgJiM0Mzs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTQ4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJyaWRnZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGJyaWRnZSBjb25maWd1cmF0aW9uLCBhbmQgaXQmIzM5O3MgbG9va2luZyBsaWtlIGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgIGlzIGEgZGVmaW5pdGUgcmVxdWlyZW1lbnQuIE5vIHN1cnByaXNlcyB0aGVyZS4gT2YgY291cnNlLCBgQ09ORklHX0JSSURHRWAgaXRzZWxmIGlzIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2ssIHNvIHRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCBJJiMzOTttIHNlZWluZyB0aGlzIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBmdW5jdGlvbiwgYW5kIHRoZSAmIzM0O3ZsYW4mIzM0OyBpbiB0aGUgbmFtZSBpcyB0cmlnZ2VyaW5nIGEgZmxhZy4gSXQmIzM5O3MgbWFraW5nIG1lIHdvbmRlciBpZiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgYWxzbyBhIGRlcGVuZGVuY3kuIEdpdmVuIGhvdyBWTEFOcyBhbmQgbXVsdGljYXN0IG9mdGVuIHBsYXkgdG9nZXRoZXIgaW4gYnJpZGdpbmcgc2NlbmFyaW9zLCBpdCB3b3VsZCBtYWtlIHNlbnNlLiBCZXN0IHRvIHZlcmlmeSB0aGlzLCBzbyBJJiMzOTtsbCBqdW1wIHN0cmFpZ2h0IGludG8gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29uZmlybSB0aGUgcmVsYXRpb25zaGlwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzNDA9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2Njp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Ny17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NDExPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyMy1cdFx0XHRjb250aW51ZTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQyNDpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2cG9ydCwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI1LVx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyNy1cdGlmIChicl92bGFuX2lzX2JyZW50cnkodmxhbikpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0Mjg6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odmxhbiwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI5LX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDczPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDc0OnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzUtaW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU1MD1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTQtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTU1OnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTU2LVx0XHRcdFx0XHRcdGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjAzPXN0YXRpYyB2b2lkIGJyX3ZsYW5fcHV0X21hc3RlcihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptYXN0ZXJ2KVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNC1cdFx0X192bGFuX2RlbF9saXN0KG1hc3RlcnYpO1xubmV0L2JyaWRnZS9icl92bGFuLmM6MjE1Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKG1hc3RlcnYsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNi1cdFx0YnJfbXVsdGljYXN0X2N0eF9kZWluaXQoXHUwMDI2bWFzdGVydi1cdTAwM2Vicl9tY2FzdF9jdHgpO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTI2Mz1zdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM1OC1cdF9fdmxhbl9mbGFnc19jb21taXQodiwgZmxhZ3MpO1xubmV0L2JyaWRnZS9icl92bGFuLmM6MzU5Olx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2LCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM2MC1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0zOTA9c3RhdGljIGludCBfX3ZsYW5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNDI3LVx0XHRuYnBfdmxhbl9zZXRfdmxhbl9kZXZfc3RhdGUocCwgdi1cdTAwM2V2aWQpO1xubmV0L2JyaWRnZS9icl92bGFuLmM6NDI4Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQyOS1cdFx0YnJfbXVsdGljYXN0X3BvcnRfY3R4X2RlaW5pdChcdTAwMjZ2LVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz03MTk9c3RhdGljIGludCBicl92bGFuX2FkZF9leGlzdGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNzYwLVx0XHQqY2hhbmdlZCA9IHRydWU7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3NjE6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odmxhbiwgdHJ1ZSk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk5NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aGluZ3M6CgoqKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IFZMQU4gVG9nZ2xlIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNsZWFyIGl0JiMzOTtzIHBhcnQgb2YgdGhlIFZMQU4gZmlsdGVyaW5nIGxvZ2ljIHdpdGhpbiB0aGUgYnJpZGdpbmcgc3Vic3lzdGVtLiBUaGUgY29udGV4dCBjbHVlcyBwb2ludCBtZSB0byBgYnJfdmxhbi5jYC4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCBjb21waWxhdGlvbiBvZiBgYnJfdmxhbi5jYCBpcyBjb25kaXRpb25hbCwgZGVwZW5kaW5nIG9uIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gUmlnaHQsIHNvIHRoaXMgc3VnZ2VzdHMgdGhhdCBJIG5lZWQgdG8gY29uZmlybSB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB0aGUgYG5ldC9icmlkZ2UvTWFrZWZpbGVgIHRvIHZlcmlmeSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgY29uZmlybSBob3cgYGJyX3ZsYW4uY2AgaXMgaW50ZWdyYXRlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGVuIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl92bGFuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlPTIxPWJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgJiM0Mzs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cbm5ldC9icmlkZ2UvTWFrZWZpbGU6MjM6YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgJiM0Mzs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzk2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqVkxBTiBGaWx0ZXJpbmcgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KioKClJpZ2h0LCBzbywgZGVmaW5pdGVseSwgd2UgbmVlZCBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgZW5hYmxlZC4gVGhhdCBtdWNoIGlzIGNsZWFyLiBMb29raW5nIGF0IHRoZSBicm9hZGVyIHBpY3R1cmUsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjb25maWd1cmF0aW9uIHRoYXQgaW5jbHVkZXMgYEJSSURHRWAsIGBCUklER0VfSUdNUF9TTk9PUElOR2AsIGFuZCBjcnVjaWFsbHksIHRoaXMgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlJiMzOTtyZSBlc3RhYmxpc2hpbmcgdGhlIGNvcmUgYnJpZGdlIGZ1bmN0aW9uYWxpdHksIGFkZGluZyBJR01QIHNub29waW5nIGZvciBtdWx0aWNhc3Qgb3B0aW1pemF0aW9uLCBhbmQgdGhlbiB0aGUgVkxBTiBmaWx0ZXJpbmcgY2FwYWJpbGl0eSB0byBtYW5hZ2UgdHJhZmZpYyBzZXBhcmF0aW9uLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgVkxBTiBmaWx0ZXJpbmcgaW50ZXJhY3RzIHdpdGggbXVsdGljYXN0IGZvcndhcmRpbmcuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGxpbmNocGluIGZvciBjb250cm9sbGluZyBtdWx0aWNhc3QgdHJhZmZpYyBvbiBhIHBlci1WTEFOIGJhc2lzIHdpdGhpbiB0aGUgYnJpZGdlLiBJdCBzaG91bGQgc2hlZCBsaWdodCBvbiBob3cgd2UgaGFuZGxlIG11bHRpY2FzdCBtZW1iZXJzaGlwIGFjcm9zcyBkaWZmZXJlbnQgVkxBTnMgZ2l2ZW4gdGhlIGZpbHRlcmluZyBjYXBhYmlsaXRpZXMuIFVuZGVyc3RhbmRpbmcgaG93IHRoYXQgdG9nZ2xlIHdvcmtzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzY2Olx0dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG40MzY3Olx0e1xuNDM2ODpcdFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xuNDM2OTpcdFxuNDM3MDpcdFx0LyogaXQmIzM5O3Mgb2theSB0byBjaGVjayBmb3IgdGhlIGZsYWcgd2l0aG91dCB0aGUgbXVsdGljYXN0IGxvY2sgYmVjYXVzZSBpdFxuNDM3MTpcdFx0ICogY2FuIG9ubHkgY2hhbmdlIHVuZGVyIFJUTkwgLVx1MDAzZSBtdWx0aWNhc3RfbG9jaywgd2UgbmVlZCB0aGUgbGF0dGVyIHRvXG40MzcyOlx0XHQgKiBzeW5jIHdpdGggdGltZXJzIGFuZCBwYWNrZXRzXG40MzczOlx0XHQgKi9cbjQzNzQ6XHRcdGlmIChvbiA9PSAhISh2bGFuLVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEKSlcbjQzNzU6XHRcdFx0cmV0dXJuO1xuNDM3NjpcdFxuNDM3NzpcdFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSB7XG40Mzc4Olx0XHRcdGJyID0gdmxhbi1cdTAwM2VicjtcbjQzNzk6XHRcbjQzODA6XHRcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNlxuNDM4MTpcdFx0XHQgICAgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHxcbjQzODI6XHRcdFx0ICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKFx1MDAyNnZsYW4tXHUwMDNlYnJfbWNhc3RfY3R4KSkpXG40MzgzOlx0XHRcdFx0cmV0dXJuO1xuNDM4NDpcdFxuNDM4NTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuNDM4NjpcdFx0XHR2bGFuLVx1MDAzZXByaXZfZmxhZ3MgXj0gQlJfVkxGTEFHX01DQVNUX0VOQUJMRUQ7XG40Mzg3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjQzODg6XHRcbjQzODk6XHRcdFx0aWYgKG9uKVxuNDM5MDpcdFx0XHRcdF9fYnJfbXVsdGljYXN0X29wZW4oXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpO1xuNDM5MTpcdFx0XHRlbHNlXG40MzkyOlx0XHRcdFx0X19icl9tdWx0aWNhc3Rfc3RvcChcdTAwMjZ2bGFuLVx1MDAzZWJyX21jYXN0X2N0eCk7XG40MzkzOlx0XHR9IGVsc2Uge1xuNDM5NDpcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4O1xuNDM5NTpcdFxuNDM5NjpcdFx0XHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbjQzOTc6XHRcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNiBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKGJybWN0eCkpXG40Mzk4Olx0XHRcdFx0cmV0dXJuO1xuNDM5OTpcdFxuNDQwMDpcdFx0XHRiciA9IHZsYW4tXHUwMDNlcG9ydC1cdTAwM2VicjtcbjQ0MDE6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjQ0MDI6XHRcdFx0dmxhbi1cdTAwM2Vwcml2X2ZsYWdzIF49IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEO1xuNDQwMzpcdFx0XHRpZiAob24pXG40NDA0Olx0XHRcdFx0X19icl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KFx1MDAyNnZsYW4tXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuNDQwNTpcdFx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NDAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQWRkcmVzc2luZyBhIEJyaWRnZSBNdWx0aWNhc3QgQnVnKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgbmFzdHkgYnVnLiBJdCBzZWVtcyB0aGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIGZhbHNlKWAgaGFkIGEgcHJlbWF0dXJlIGV4aXQgY29uZGl0aW9uIGlmIGAhYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2NlbmFyaW8gZm9yIGxlYXZpbmcgYSBtdWx0aWNhc3QgY29udGV4dCBydW5uaW5nIGFuZCBgQlJfVkxGTEFHX01DQVNUX0VOQUJMRURgIGhhbmdpbmcgYXJvdW5kLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBtZW1vcnkgbGVhayB3aGVuIHRoZSBWTEFOIGdldHMgdG9ybiBkb3duLiBOb3QgZ29vZCwgbm90IGdvb2QgYXQgYWxsLgoKVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UsIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgYnJpZGdlIG11bHRpY2FzdCBsb2dpYy4gVGhlIGNydWNpYWwgY2FsbCBzZXF1ZW5jZSBhcHBlYXJzIHRvIGJlIGBicl92bGFuX3B1dF9tYXN0ZXJgIHdoaWNoIHRoZW4gdHJpZ2dlcnMgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpYC4gTG9va3MgbGlrZSBhIGNvbW1vbiBzY2VuYXJpbywgYW5kIGEgZ29vZCBzcG90IHRvIGNhdXNlIHRoZSBidWcuCgpJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBicl92bGFuX3B1dF9tYXN0ZXJgIGZ1bmN0aW9uIGl0c2VsZi4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZSB0byBjb25maXJtIHRoZSBwYXRjaCYjMzk7cyBsb2dpYyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyB2dWxuZXJhYmlsaXR5IHdhcyBpbnRyb2R1Y2VkIGluIHRoZSBmaXJzdCBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAzOlx0c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXG4gMjA0Olx0e1xuIDIwNTpcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4gMjA2Olx0XG4gMjA3Olx0XHRpZiAoIWJyX3ZsYW5faXNfbWFzdGVyKG1hc3RlcnYpKVxuIDIwODpcdFx0XHRyZXR1cm47XG4gMjA5Olx0XG4gMjEwOlx0XHR2ZyA9IGJyX3ZsYW5fZ3JvdXAobWFzdGVydi1cdTAwM2Vicik7XG4gMjExOlx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNm1hc3RlcnYtXHUwMDNlcmVmY250KSkge1xuIDIxMjpcdFx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnZnLVx1MDAzZXZsYW5faGFzaCxcbiAyMTM6XHRcdFx0XHRcdCAgICAgICBcdTAwMjZtYXN0ZXJ2LVx1MDAzZXZub2RlLCBicl92bGFuX3JodF9wYXJhbXMpO1xuIDIxNDpcdFx0XHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XG4gMjE1Olx0XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpO1xuIDIxNjpcdFx0XHRicl9tdWx0aWNhc3RfY3R4X2RlaW5pdChcdTAwMjZtYXN0ZXJ2LVx1MDAzZWJyX21jYXN0X2N0eCk7XG4gMjE3Olx0XHRcdGNhbGxfcmN1KFx1MDAyNm1hc3RlcnYtXHUwMDNlcmN1LCBicl9tYXN0ZXJfdmxhbl9yY3VfZnJlZSk7XG4gMjE4Olx0XHR9XG4gMjE5Olx0fVxuIDIyMDpcdFxuIDIyMTpcdHN0YXRpYyB2b2lkIG5icF92bGFuX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuIDIyMjpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI1OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZvY3VzOiBCcmlkZ2UgTXVsdGljYXN0IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBiYXNlZCBvbiB3aGF0IEkmIzM5O20gc2VlaW5nLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uIHRoYXQmIzM5O3Mgd2l0aGluIHJlYWNoIGZvciBmdXp6aW5nLiBJIGNhbiBwcm9iYWJseSBjcmFmdCBpbnB1dHMgdGhhdCBsZWFkIGRpcmVjdGx5IHRvIGl0LiBOb3csIHdoaWNoIG90aGVyIGZ1bmN0aW9ucyBhcmUgcmVsZXZhbnQgaGVyZT8gYGJyX3ZsYW5fcHV0X21hc3RlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG9mdGVuIG1ha2VzIGZ1enppbmcgaXQgbGVzcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIG9mdGVuIGRpZmZpY3VsdCB0byB0cmlnZ2VyIHN0YXRpYyBmdW5jdGlvbnMgdGhyb3VnaCB0aGUgcHVibGljLWZhY2luZyBBUEkuIEJ1dCB3aGF0IGFib3V0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gPyBUaGF0IG9uZSBzZWVtcyBsaWtlIGEgc3Ryb25nIGNvbnRlbmRlciBhcyB3ZWxsLiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgaXQuIEkmIzM5O2xsIG9wZW4gdXAgYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHBvdGVudGlhbCB0YXJnZXRzIGluIHRoYXQgc2FtZSBzb3VyY2UgZmlsZSwgd2hpY2ggd291bGQgc3VnZ2VzdCBhIHBvdGVudGlhbCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0MTE6XHRzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbjQ0MTI6XHR7XG40NDEzOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuNDQxNDpcdFxuNDQxNTpcdFx0aWYgKFdBUk5fT05fT05DRSghYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpKVxuNDQxNjpcdFx0XHRyZXR1cm47XG40NDE3Olx0XG40NDE4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFx1MDAyNnZsYW4tXHUwMDNlYnItXHUwMDNlcG9ydF9saXN0LCBsaXN0KSB7XG40NDE5Olx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZwb3J0O1xuNDQyMDpcdFxuNDQyMTpcdFx0XHR2cG9ydCA9IGJyX3ZsYW5fZmluZChuYnBfdmxhbl9ncm91cChwKSwgdmxhbi1cdTAwM2V2aWQpO1xuNDQyMjpcdFx0XHRpZiAoIXZwb3J0KVxuNDQyMzpcdFx0XHRcdGNvbnRpbnVlO1xuNDQyNDpcdFx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XG40NDI1Olx0XHR9XG40NDI2Olx0XG40NDI3Olx0XHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxuNDQyODpcdFx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcbjQ0Mjk6XHR9XG40NDMwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgcXVlc3Rpb24gaXMgYWx3YXlzIHdoZXRoZXIgaXQmIzM5O3MgZXhwb3J0ZWQgb3IgaWYgaXQgaGFzIGludGVybmFsIHNjb3BlLiBBaCwgZ29vZCwgaXQmIzM5O3Mgbm9uLXN0YXRpYywgZGVjbGFyZWQgaW4gYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYC4gVGhhdCBtYWtlcyBpdCBhY2Nlc3NpYmxlLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4gVGhpcyBmdW5jdGlvbiBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24sIGEgdmFsdWFibGUgc3ltYm9sIHRvIGZvY3VzIG9uLiBOb3csIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyBmaXRzIGluIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBzaG91bGQgY2hlY2sgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgbmV4dCwgc2VlIGhvdyB0aGF0IHJlbGF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0MzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDQzMTpcdGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxuNDQzMjpcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuNDQzMzpcdHtcbjQ0MzQ6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuNDQzNTpcdFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbjtcbjQ0MzY6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7XG40NDM3Olx0XG40NDM4Olx0XHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSA9PSBvbilcbjQ0Mzk6XHRcdFx0cmV0dXJuIDA7XG40NDQwOlx0XG40NDQxOlx0XHRpZiAob24gXHUwMDI2XHUwMDI2ICFicl9vcHRfZ2V0KGJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpKSB7XG40NDQyOlx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0Nhbm5vdCBlbmFibGUgbXVsdGljYXN0IHZsYW4gc25vb3Bpbmcgd2l0aCB2bGFuIGZpbHRlcmluZyBkaXNhYmxlZFwmIzM0Oyk7XG40NDQzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDQ0NDpcdFx0fVxuNDQ0NTpcdFxuNDQ0NjpcdFx0dmcgPSBicl92bGFuX2dyb3VwKGJyKTtcbjQ0NDc6XHRcdGlmICghdmcpXG40NDQ4Olx0XHRcdHJldHVybiAwO1xuNDQ0OTpcdFxuNDQ1MDpcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVELCBvbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOgoKKipEaWdnaW5nIGludG8gVkxBTiBTbm9vcGluZyBhbmQgQnJpZGdlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyAqYWxzbyogbm90IGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIFZMQU4gc25vb3Bpbmcgd2l0aGluIHRoZSBicmlkZ2UuIEdpdmVuIHRoYXQsIGxldCYjMzk7cyBkaXZlIGludG8gYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGBfX3ZsYW5fYWRkYCBhbmQgYF9fdmxhbl9kZWxgIGZ1bmN0aW9ucy4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycyBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBWTEFOIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBzaG91bGQgaWxsdW1pbmF0ZSBob3cgc25vb3BpbmcgaXMgZW5hYmxlZCBhbmQgZGlzYWJsZWQgaW4gdGhpcyBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5IGFuZCBob3cgdGhleSBnZXQgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MzpcdHN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4gMjY0Olx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAyNjU6XHR7XG4gMjY2Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptYXN0ZXJ2ID0gTlVMTDtcbiAyNjc6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAgPSBOVUxMO1xuIDI2ODpcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4gMjY5Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIDI3MDpcdFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xuIDI3MTpcdFx0aW50IGVycjtcbiAyNzI6XHRcbiAyNzM6XHRcdGlmIChicl92bGFuX2lzX21hc3Rlcih2KSkge1xuIDI3NDpcdFx0XHRiciA9IHYtXHUwMDNlYnI7XG4gMjc1Olx0XHRcdGRldiA9IGJyLVx1MDAzZWRldjtcbiAyNzY6XHRcdFx0dmcgPSBicl92bGFuX2dyb3VwKGJyKTtcbiAyNzc6XHRcdH0gZWxzZSB7XG4gMjc4Olx0XHRcdHAgPSB2LVx1MDAzZXBvcnQ7XG4gMjc5Olx0XHRcdGJyID0gcC1cdTAwM2VicjtcbiAyODA6XHRcdFx0ZGV2ID0gcC1cdTAwM2VkZXY7XG4gMjgxOlx0XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXAocCk7XG4gMjgyOlx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDb25zaWRlcmluZyBWTEFOIEFkZGl0aW9uIFN0cmF0ZWdpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBWTEFOcyBhcmUgYWRkZWQsIHNwZWNpZmljYWxseSBpbiB0aGlzIGNvbnRleHQuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBfX3ZsYW5fYWRkYCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGxpbWl0ZWQgaW4gc2NvcGUsIGFuZCBwcm9iYWJseSBkZXNpZ25lZCBmb3IgYSBzcGVjaWZpYyBwdXJwb3NlIHdpdGhpbiBhIHBhcnRpY3VsYXIgbW9kdWxlIG9yIGZpbGUuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyBJJiMzOTttIHdvbmRlcmluZywgaWYgYF9fdmxhbl9hZGRgIGlzIGNvbnN0cmFpbmVkIGxpa2UgdGhhdCwgd2hhdCBhYm91dCBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgPyBXaGF0JiMzOTtzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHdvPyBJcyBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgIGEgbW9yZSBnZW5lcmFsaXplZCBmdW5jdGlvbj8gRG9lcyBpdCBidWlsZCBvbiB0b3Agb2YgYF9fdmxhbl9hZGRgLCBvciBpcyBpdCBjb21wbGV0ZWx5IGluZGVwZW5kZW50PyBVbmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZXNlIHR3byBhZGRpdGlvbiBtZXRob2RzIGlzIGVzc2VudGlhbCBmb3IgZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgVkxBTiBtYW5hZ2VtZW50IGxvZ2ljLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFuZCBkZXRlcm1pbmUgdGhlaXIgcmVzcGVjdGl2ZSB1c2UgY2FzZXMgYW5kIGhvdyB0aGV5IGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgYnJpZGdpbmcgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZXNzZW50aWFsbHkgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiBjaG9pY2VzIG1hZGUgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIGNob29zaW5nIG9uZSBvdmVyIHRoZSBvdGhlciBpbiBzcGVjaWZpYyBzY2VuYXJpb3MuIEFyZSB3ZSBkZWFsaW5nIHdpdGggdGhlIGNyZWF0aW9uIG9mIG5ldyBWTEFOcyB2ZXJzdXMgYWRkaW5nIGV4aXN0aW5nIG9uZXMgdG8gYSBicmlkZ2U/IEdvdHRhIGZpZ3VyZSB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcxOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzE5Olx0c3RhdGljIGludCBicl92bGFuX2FkZF9leGlzdGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gNzIwOlx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyxcbiA3MjE6XHRcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXG4gNzIyOlx0XHRcdFx0XHR1MTYgZmxhZ3MsIGJvb2wgKmNoYW5nZWQsXG4gNzIzOlx0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNzI0Olx0e1xuIDcyNTpcdFx0Ym9vbCBiZWNvbWVzX2JyZW50cnkgPSBmYWxzZTtcbiA3MjY6XHRcdGJvb2wgd291bGRfY2hhbmdlID0gZmFsc2U7XG4gNzI3Olx0XHRpbnQgZXJyO1xuIDcyODpcdFxuIDcyOTpcdFx0aWYgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikpIHtcbiA3MzA6XHRcdFx0LyogVHJ5aW5nIHRvIGNoYW5nZSBmbGFncyBvZiBub24tZXhpc3RlbnQgYnJpZGdlIHZsYW4gKi9cbiA3MzE6XHRcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fQlJFTlRSWSkpXG4gNzMyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzMzOlx0XG4gNzM0Olx0XHRcdGJlY29tZXNfYnJlbnRyeSA9IHRydWU7XG4gNzM1Olx0XHR9IGVsc2Uge1xuIDczNjpcdFx0XHR3b3VsZF9jaGFuZ2UgPSBfX3ZsYW5fZmxhZ3Nfd291bGRfY2hhbmdlKHZsYW4sIGZsYWdzKTtcbiA3Mzc6XHRcdH1cbiA3Mzg6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDb250ZW1wbGF0aW5nIGEgU3RhdGljIENvbmZpZ3VyYXRpb24gYW5kIFZMQU4gQWRkaXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGN1cnJlbnQgc2V0dXAgaXMgYWxzbyBzdGF0aWNhbGx5IGNvbmZpZ3VyZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgaXQgaW1tZWRpYXRlbHkgcmFpc2VzIHRoZSBxdWVzdGlvbjogd2hhdCBhYm91dCBhZGRpbmcgYSBWTEFOPyBNb3JlIHNwZWNpZmljYWxseSwgdGhlIGBicl92bGFuX2FkZGAgY29tbWFuZOKAlCBob3cgZG9lcyBpdCBwbGF5IGludG8gdGhpcyBzdGF0aWMgc2l0dWF0aW9uPyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCBob3cgdGhhdCBjb21tYW5kIGludGVncmF0ZXMgaW50byB0aGUgcHJlLWV4aXN0aW5nIHN0YXRpYyBjb25maWd1cmF0aW9uLCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgYnJpZGdlLCBhbmQgdGhlIG92ZXJhbGwgbmV0d29yayBhcmNoaXRlY3R1cmUuIElzIHRoZXJlIGFueXRoaW5nIHRoYXQgY291bGQgaW50ZXJmZXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl92bGFuX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jPTE2Nz1icl92bGFuX2dldF9tYXN0ZXIoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE3OC1cdFx0LyogbWlzc2luZyBnbG9iYWwgY3R4LCBjcmVhdGUgaXQgbm93ICovXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxNzk6XHRcdGlmIChicl92bGFuX2FkZChiciwgdmlkLCAwLCBcdTAwMjZjaGFuZ2VkLCBleHRhY2spKVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTgwLVx0XHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTI2Mz1zdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTI5Ni1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjI5NzpcdFx0XHRlcnIgPSBicl92bGFuX2FkZChiciwgdi1cdTAwM2V2aWQsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yOTgtXHRcdFx0XHRcdCAgZmxhZ3MgfCBCUklER0VfVkxBTl9JTkZPX0JSRU5UUlksXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9Njg2PWJvb2wgYnJfc2hvdWxkX2xlYXJuKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcxOC1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjcxOTpzdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcyMC1cdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc3OC0gKi9cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc3OTppbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsIGJvb2wgKmNoYW5nZWQsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03ODAtXHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03OTEtXHRpZiAodmxhbilcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc5MjpcdFx0cmV0dXJuIGJyX3ZsYW5fYWRkX2V4aXN0aW5nKGJyLCB2ZywgdmxhbiwgZmxhZ3MsIGNoYW5nZWQsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03OTMtXHRcdFx0XHRcdCAgICBleHRhY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTExMDI9aW50IF9fYnJfdmxhbl9zZXRfZGVmYXVsdF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHB2aWQsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTEzMC1cdCAgICAoIXB2ZW50IHx8ICFicl92bGFuX3Nob3VsZF91c2UocHZlbnQpKSkge1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTEzMTpcdFx0ZXJyID0gYnJfdmxhbl9hZGQoYnIsIHB2aWQsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTMyLVx0XHRcdFx0ICBCUklER0VfVkxBTl9JTkZPX1BWSUQgfFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExOTAtXHRcdGlmIChvbGRfcHZpZCkge1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTE5MTpcdFx0XHRicl92bGFuX2FkZChiciwgb2xkX3B2aWQsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTkyLVx0XHRcdFx0ICAgIEJSSURHRV9WTEFOX0lORk9fUFZJRCB8XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTc0Nz1pbnQgYnJfdmxhbl9icmlkZ2VfZXZlbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE3NTUtXHRjYXNlIE5FVERFVl9SRUdJU1RFUjpcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjE3NTY6XHRcdHJldCA9IGJyX3ZsYW5fYWRkKGJyLCBici1cdTAwM2VkZWZhdWx0X3B2aWQsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzU3LVx0XHRcdFx0ICBCUklER0VfVkxBTl9JTkZPX1BWSUQgfFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIEJyaWRnZSBNdWx0aWNhc3QgYW5kIFZMQU4gRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zLiBJdCBhcHBlYXJzIHRoYXQgYGJyX3ZsYW5fYWRkYCwgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgYXJlIGFsbCBub24tc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyBwb3RlbnRpYWwgZXh0ZXJuYWwgaW50ZXJhY3Rpb24gcG9pbnRzLgoKSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gIEkgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggaXMga2V5IGZvciBmdXp6aW5nLiAgTG9va2luZyBhdCB0aGUgY2FsbCBncmFwaCwgaXQmIzM5O3MgY2FsbGVkIGJ5IGBicl92bGFuX3B1dF9tYXN0ZXJgICh3aGVuIGEgVkxBTiBpcyBkZWxldGVkKSwgYF9fdmxhbl9hZGRgICh3aGVuIGEgVkxBTiBpcyBhZGRlZCksIGBicl92bGFuX2FkZF9leGlzdGluZ2AgKHdoZW4gYSBWTEFOIGlzIG1vZGlmaWVkKSwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gIChjYWxsZWQgZnJvbSBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCkuIEFoYSwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGlzIHRyaWdnZXJlZCB3aGVuIGBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRURgIGlzIHRvZ2dsZWQuIFRoYXQmIzM5O3MgZ29vZC4KClRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rLCBsaWtlbHkgdmlhIGNvbW1hbmRzIGxpa2UgYGJyX2NoYW5nZWxpbmtgIG9yIGBicl9zZXRsaW5rYC4gIFRoZSBhYmlsaXR5IHRvIG1vZGlmeSBWTEFOIHNldHRpbmdzIGFuZCBtdWx0aWNhc3Qgc25vb3BpbmcgZnJvbSB1c2Vyc3BhY2UgZGlyZWN0bHkgaW1wbGljYXRlcyB0aGF0IHRoZXNlIGNoYW5nZXMgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0LiBUaGlzIGlzIGFsbCB0ZWxsaW5nIG1lIHRoYXQgdGhlc2UgYXJlIHZhbGlkIHRhcmdldHMgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gdGhvc2UgdGhyZWUgZnVuY3Rpb25zOiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLCBhbmQgYGJyX3ZsYW5fYWRkYC4KCkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiAgSSYjMzk7bSBzZWVpbmcgdGhhdCB3ZSBuZWVkIHRvIGVuYWJsZSBgQlJJREdFYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiAgU2luY2UgYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AgaXMgZW5hYmxlZCBhbmQgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBlbmFibGVkLCBhbmQgYm90aCBkZXBlbmQgb24gYENPTkZJR19CUklER0VgIGluIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCwgdGhhdCBjb25maXJtcyB0aGUgY29ycmVjdCBjb25maWdzLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnPTY9Y29uZmlnIEJSSURHRVxuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5ODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gQnJpZGdlIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIHNwZWNpZmljYWxseSBmb3IgYnJpZGdpbmcuIE15IGZvY3VzIGlzIG9uIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IElHTVAgc25vb3BpbmcgYW5kIFZMQU4gZmlsdGVyaW5nIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgYnJpZGdlIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYEJSSURHRV9JR01QX1NOT09QSU5HYCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2Agb3B0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGhvdyB0aGVzZSBvcHRpb25zIGludGVyYWN0IGFuZCBwb3RlbnRpYWxseSBkZXBlbmQgb24gZWFjaCBvdGhlci4gQXJlIHRoZXJlIGFueSBjYXZlYXRzIG9yIHN1YnRsZSBpbXBsaWNhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cyB0aGF0IEkgbmVlZCB0byBiZSBtaW5kZnVsIG9mPyBQZXJoYXBzIHRoZXJlIGFyZSBiZXN0IHByYWN0aWNlcyBvciByZWNvbW1lbmRhdGlvbnMgYnVyaWVkIHdpdGhpbiB0aGUgY29tbWVudHMgb3Igc3Vycm91bmRpbmcgY29kZSB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmc/IFRoaXMgd2lsbCBoZWxwIG1lIHRvIGRldGVybWluZSBob3cgSSB3b3VsZCBsaWtlIHRvIGRlc2lnbiB0aGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzY6XHRjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbiAgMzc6XHRcdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbiAgMzg6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDM5Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgNDA6XHRcdGRlZmF1bHQgeVxuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxuICA0MzpcdFx0ICBmb3J3YXJkIG11bHRpY2FzdCB0cmFmZmljIGJhc2VkIG9uIElHTVAvTUxEIHRyYWZmaWMgcmVjZWl2ZWQgZnJvbVxuICA0NDpcdFx0ICBlYWNoIHBvcnQuXG4gIDQ1Olx0XG4gIDQ2Olx0XHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxuICA0NzpcdFxuICA0ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICA0OTpcdFxuICA1MDpcdGNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcbiAgNTE6XHRcdGJvb2wgXCYjMzQ7VkxBTiBmaWx0ZXJpbmdcJiMzNDtcbiAgNTI6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDUzOlx0XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbiAgNTQ6XHRcdGRlZmF1bHQgblxuICA1NTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ5NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZXBlbmRlbmN5IEFuYWx5c2lzIGZvciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBgQlJJREdFX0lHTVBfU05PT1BJTkdgIHJlbGllcyBvbiBgQlJJREdFYCBhbmQgYElORVRgLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgaW5jbHVkZWQuIFNpbWlsYXJseSwgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgZGVwZW5kcyBvbiBib3RoIGBCUklER0VgIGFuZCBgVkxBTl84MDIxUWAuCgpUaGVyZWZvcmUsIHRvIGVuYWJsZSBldmVyeXRoaW5nLCB3ZSBuZWVkIHRvIGluY2x1ZGU6IGBCUklER0VgLCBgSU5FVGAsIGBWTEFOXzgwMjFRYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBJdCYjMzk7cyBhbG1vc3QgYXV0b21hdGljLCBidXQgbGV0JiMzOTtzIGJlIHRob3JvdWdoLgoKV2hpbGUgYElORVRgIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCBpbiBtb3N0IGJ1aWxkcywgaXQmIzM5O3MgZ29vZCBwcmFjdGljZSB0byBsaXN0IGl0IGV4cGxpY2l0bHkgaGVyZSBmb3IgY29tcGxldGVuZXNzLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGBWTEFOXzgwMjFRYCBpcyBkZWZpbml0ZWx5IG5lZWRlZC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgZm9yIGBWTEFOXzgwMjFRYCwgc3BlY2lmaWNhbGx5IGluIGBuZXQvODAyMXEvS2NvbmZpZ2AuIEl0IG5ldmVyIGh1cnRzIHRvIGNvbmZpcm0gdGhlIHNvdXJjZSBvZiB0cnV0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZMQU5fODAyMVEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvODAyMXEvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvODAyMXEvS2NvbmZpZy01LVxubmV0LzgwMjFxL0tjb25maWc6Njpjb25maWcgVkxBTl84MDIxUVxubmV0LzgwMjFxL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xUS84MDIuMWFkIFZMQU4gU3VwcG9ydFwmIzM0O1xuLS1cbm5ldC84MDIxcS9LY29uZmlnLTIxLVxubmV0LzgwMjFxL0tjb25maWc6MjI6Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxubmV0LzgwMjFxL0tjb25maWctMjMtXHRib29sIFwmIzM0O0dWUlAgKEdBUlAgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvODAyMXEvS2NvbmZpZy0zMS1cbm5ldC84MDIxcS9LY29uZmlnOjMyOmNvbmZpZyBWTEFOXzgwMjFRX01WUlBcbm5ldC84MDIxcS9LY29uZmlnLTMzLVx0Ym9vbCBcJiMzNDtNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1MQoJCQkJCQkJb3V0cHV0OiAyMzAKCQkJCQkJCXRob3VnaHRzOiA0NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJyaWRnZSBNdWx0aWNhc3QgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgVkxBTl84MDIxUWAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJldmlldyB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCwgd2hpY2ggYXJlIHRoZSBmb2N1cyBzeW1ib2xzOiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLCBhbmQgYGJyX3ZsYW5fYWRkYC4gSSYjMzk7bSBhbHNvIGJyaWVmbHkgY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucywgYnV0IHRob3NlIHRocmVlIGxvb2sgbGlrZSB0aGUgY29yZSBvbmVzLgoKYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIHRoZSBvbmUgdGhhdCB3YXMgc3BlY2lmaWNhbGx5IG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guIEkgdGhpbmsgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgYW5kIGBicl92bGFuX2FkZGAgd2lsbCBiZSBnb29kIGVudHJ5IHBvaW50cyBmb3IgYW5hbHlzaXMgYXMgd2VsbCwgaW4gY2FzZSB0aGUgZml4IGhhcyBpbXBsaWNhdGlvbnMgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIGV4cG9ydGVkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIG5vbi1zdGF0aWMsIGRlY2xhcmVkIGluIGBuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaGAuIFRoYXQgbWFrZXMgaXQgYSBnbG9iYWwgc3ltYm9sIHdpdGhpbiB0aGUga2VybmVsLCBhY2Nlc3NpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGJ1dCBub3QgZXhwbGljaXRseSBleHBvcnRlZCB0byBtb2R1bGVzLiBUaGF0JiMzOTtzIGZpbmU7IGl0JiMzOTtzIHN0aWxsIGFjY2Vzc2libGUgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgZnV6emluZy4KCk15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoIGlzIHRoYXQgaXQgZml4ZXMgYSBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLiBJdCB3YXMgcmV0dXJuaW5nIGVhcmx5IHdoZW4gZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gaWYgdGhlIFZMQU4gd2FzbiYjMzk7dCBhbHJlYWR5IGEgYnJpZGdlIGVudHJ5LiBUaGlzIGNhbiBsZWFkIHRvIHRoZSBtdWx0aWNhc3QgY29udGV4dCBzdGF5aW5nIGFjdGl2ZSBhbmQgdGhlIGBCUl9WTEZMQUdfTUNBU1RfRU5BQkxFRGAgZmxhZyBiZWluZyBzZXQsIHdoaWNoIGNvdWxkIGNhdXNlIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBtZW1vcnkgbGVhayB3aGVuIHRoZSBWTEFOIGlzIGV2ZW50dWFsbHkgZGVzdHJveWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCBpbiB0aGUgYnJpZGdlJiMzOTtzIG11bHRpY2FzdCBsb2dpYywgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGRlYWxpbmcgd2l0aCBicmlkZ2UgVkxBTnMuIFNwZWNpZmljYWxseSwgd2hlbiBhZGRpbmcsIHJlbW92aW5nLCBvciBtb2RpZnlpbmcgYnJpZGdlIFZMQU5zLCBhbmQgYWxzbyB3aGVuIHRvZ2dsaW5nIG11bHRpY2FzdCBzbm9vcGluZy4gQmVjYXVzZSBpdCYjMzk7cyBhZmZlY3RpbmcgY29yZSBtdWx0aWNhc3QgYmVoYXZpb3IgYW5kIGFjY2Vzc2libGUgdmlhIHVzZXJzcGFjZSwgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZy4KCk15IGxpc3Qgb2YgcmVsZXZhbnQgY29uZmlncyBpbmNsdWRlcyBgQlJJREdFYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AsIGBWTEFOXzgwMjFRYCwgYW5kIGBJTkVUYC4KCldpdGggdGhpcyBhc3Nlc3NtZW50IGNvbXBsZXRlLCBJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbiYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSB3aGVuIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBWTEFOIGlmIHRoZSBWTEFOIGlzIG5vdCBhIGJyaWRnZSBlbnRyeS4gVGhpcyBjb3VsZCBsZWF2ZSB0aGUgbXVsdGljYXN0IGNvbnRleHQgYWN0aXZlIGFuZCB0aGUgYEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEYCBmbGFnIHNldCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3Mgd2hlbiB0aGUgVkxBTiBpcyBkZXN0cm95ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgd2hlbiBhZGRpbmcvcmVtb3ZpbmcvbW9kaWZ5aW5nIGJyaWRnZSBWTEFOcyBvciB0b2dnbGluZyBtdWx0aWNhc3Qgc25vb3BpbmcuIEl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbiYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSB3aGVuIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBWTEFOIGlmIHRoZSBWTEFOIGlzIG5vdCBhIGJyaWRnZSBlbnRyeS4gVGhpcyBjb3VsZCBsZWF2ZSB0aGUgbXVsdGljYXN0IGNvbnRleHQgYWN0aXZlIGFuZCB0aGUgYEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEYCBmbGFnIHNldCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3Mgd2hlbiB0aGUgVkxBTiBpcyBkZXN0cm95ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgd2hlbiBhZGRpbmcvcmVtb3ZpbmcvbW9kaWZ5aW5nIGJyaWRnZSBWTEFOcyBvciB0b2dnbGluZyBtdWx0aWNhc3Qgc25vb3BpbmcuIEl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIHRoZSBmdW5jdGlvbiB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gZWFybHkgd2hlbiB0b2dnbGluZyBvZmYgbXVsdGljYXN0IGZvciBhIG5vbi1icmVudHJ5IFZMQU4uIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBvcGVyYXRpb25zIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjQ2ODkyMjA3OWQ0NjdlZjllOTZlMmI4NjE2YzQxNTFmMzcxM2FjOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDEyOjI1OjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKaW5kZXggNzVlMWUyYThmYzgzYS4uM2VmNWQ4YmJmNTUyZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCkBAIC00Mzc3LDggJiM0Mzs0Mzc3LDggQEAgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pCiAJaWYgKGJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSB7CiAJCWJyID0gdmxhbi0mZ3Q7YnI7CiAKLQkJaWYgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHwKLQkJICAgIChvbiAmYW1wOyZhbXA7CiYjNDM7CQlpZiAob24gJmFtcDsmYW1wOwomIzQzOwkJICAgICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8CiAJCSAgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZCgmYW1wO3ZsYW4tJmd0O2JyX21jYXN0X2N0eCkpKQogCQkJcmV0dXJuOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJyaWRnZSBNdWx0aWNhc3QgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdpdGhpbiBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIFRpbWUgdG8gZGlnIGludG8gdGhlIGRpZmY6CgpgYGBjCi0JCWlmICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8Ci0JCSAgICAob24gJmFtcDsmYW1wOwomIzQzOwkJaWYgKG9uICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fAogCQkgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoJmFtcDt2bGFuLSZndDticl9tY2FzdF9jdHgpKSkKIAkJCXJldHVybjsKYGBgCgpSaWdodCBhd2F5LCBJIHNlZSBhIGxvZ2ljYWwgY2hhbmdlIGluIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LiBCZWZvcmUsIGl0IHdhcyByZXR1cm5pbmcgaWYgYCFicl92bGFuX2lzX2JyZW50cnkodmxhbilgIHdoZW4gYG9uYCB3YXMgZmFsc2UuIE5vdywgdGhhdCB3aG9sZSBibG9jayBpcyBza2lwcGVkIGlmIGBvbmAgaXMgZmFsc2UsIGR1ZSB0byB0aGUgc2hvcnQtY2lyY3VpdGluZyBvZiB0aGUgYCZhbXA7JmFtcDtgLiBTbywgZXNzZW50aWFsbHkgYSBjb250cm9sIGZsb3cgYWx0ZXJhdGlvbi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgbm8sIHRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBidWcgZml4IG9yIGNoYW5nZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCB0cnkgdG8gZ3Jhc3AgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIExldCYjMzk7cyBsb29rIGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM0MD12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzY2OnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MTE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDIzLVx0XHRcdGNvbnRpbnVlO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI0Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjUtXHR9XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI3LVx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQyODpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTU0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgeW91ciBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIE15IHByaW1hcnkgY29uY2VybiBpcywgYXMgYWx3YXlzIHdpdGggdGhlc2UgbG93LWxldmVsIGZ1bmN0aW9ucywgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGNvZGUgdG8gZW5zdXJlIHdlJiMzOTtyZSBub3QgaW5hZHZlcnRlbnRseSByZWFkaW5nIG9yIHBhc3NpbmcgZ2FyYmFnZSBkYXRhLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgaGFyZC10by1kZWJ1ZyBpbnN0YWJpbGl0eSBhbmQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBzbyBpdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBsb29raW5nIGZvci4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFzIGNsZWFuIGFzIGl0IHNob3VsZCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzY2Olx0dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG40MzY3Olx0e1xuNDM2ODpcdFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xuNDM2OTpcdFxuNDM3MDpcdFx0LyogaXQmIzM5O3Mgb2theSB0byBjaGVjayBmb3IgdGhlIGZsYWcgd2l0aG91dCB0aGUgbXVsdGljYXN0IGxvY2sgYmVjYXVzZSBpdFxuNDM3MTpcdFx0ICogY2FuIG9ubHkgY2hhbmdlIHVuZGVyIFJUTkwgLVx1MDAzZSBtdWx0aWNhc3RfbG9jaywgd2UgbmVlZCB0aGUgbGF0dGVyIHRvXG40MzcyOlx0XHQgKiBzeW5jIHdpdGggdGltZXJzIGFuZCBwYWNrZXRzXG40MzczOlx0XHQgKi9cbjQzNzQ6XHRcdGlmIChvbiA9PSAhISh2bGFuLVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEKSlcbjQzNzU6XHRcdFx0cmV0dXJuO1xuNDM3NjpcdFxuNDM3NzpcdFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSB7XG40Mzc4Olx0XHRcdGJyID0gdmxhbi1cdTAwM2VicjtcbjQzNzk6XHRcbjQzODA6XHRcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNlxuNDM4MTpcdFx0XHQgICAgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHxcbjQzODI6XHRcdFx0ICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKFx1MDAyNnZsYW4tXHUwMDNlYnJfbWNhc3RfY3R4KSkpXG40MzgzOlx0XHRcdFx0cmV0dXJuO1xuNDM4NDpcdFxuNDM4NTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuNDM4NjpcdFx0XHR2bGFuLVx1MDAzZXByaXZfZmxhZ3MgXj0gQlJfVkxGTEFHX01DQVNUX0VOQUJMRUQ7XG40Mzg3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjQzODg6XHRcbjQzODk6XHRcdFx0aWYgKG9uKVxuNDM5MDpcdFx0XHRcdF9fYnJfbXVsdGljYXN0X29wZW4oXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpO1xuNDM5MTpcdFx0XHRlbHNlXG40MzkyOlx0XHRcdFx0X19icl9tdWx0aWNhc3Rfc3RvcChcdTAwMjZ2bGFuLVx1MDAzZWJyX21jYXN0X2N0eCk7XG40MzkzOlx0XHR9IGVsc2Uge1xuNDM5NDpcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4O1xuNDM5NTpcdFxuNDM5NjpcdFx0XHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbjQzOTc6XHRcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNiBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKGJybWN0eCkpXG40Mzk4Olx0XHRcdFx0cmV0dXJuO1xuNDM5OTpcdFxuNDQwMDpcdFx0XHRiciA9IHZsYW4tXHUwMDNlcG9ydC1cdTAwM2VicjtcbjQ0MDE6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjQ0MDI6XHRcdFx0dmxhbi1cdTAwM2Vwcml2X2ZsYWdzIF49IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEO1xuNDQwMzpcdFx0XHRpZiAob24pXG40NDA0Olx0XHRcdFx0X19icl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KFx1MDAyNnZsYW4tXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuNDQwNTpcdFx0XHRlbHNlXG40NDA2Olx0XHRcdFx0X19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbjQ0MDc6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuNDQwODpcdFx0fVxuNDQwOTpcdH1cbjQ0MTA6XHRcbjQ0MTE6XHRzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbjQ0MTI6XHR7XG40NDEzOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuNDQxNDpcdFxuNDQxNTpcdFx0aWYgKFdBUk5fT05fT05DRSghYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDAyCgkJCQkJCQlvdXRwdXQ6IDEyMAoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZml4LCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG9sZCBjb2RlIGhhZCBhIGZsYXcgaW4gaXRzIGxvZ2ljIOKAkyBpdCB3YXMgYmFpbGluZyBvdXQgcHJlbWF0dXJlbHkuIFNwZWNpZmljYWxseSwgaXQgd2FzIHJldHVybmluZyBlYXJseSB3aGVuIGBvbmAgd2FzIGZhbHNlICphbmQqIGAhYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pYCB3YXMgdHJ1ZS4gVGhpcyBtZWFudCB0aGF0IHRoZSBtdWx0aWNhc3Qgc3RhdGUgZm9yIFZMQU5zIHRoYXQgKndlcmVuJiMzOTt0KiBCcmVudHJ5IHdvdWxkbiYjMzk7dCBnZXQgcHJvcGVybHkgdG9nZ2xlZCBvZmYsIGV2ZW4gd2hlbiB0aGV5IHNob3VsZC4gSXQmIzM5O3MgYSBjbGFzc2ljIGJvb2xlYW4gbG9naWMgZXJyb3IsIHNvbWV0aGluZyB5b3Ugc2VlIGFsbCB0aGUgdGltZSBpbiB0aGVzZSB0eXBlcyBvZiBzeXN0ZW1zLgoKVGhlIGdvb2QgbmV3cyBpcywgdGhlcmUmIzM5O3Mgbm8gaGludCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLiBUaGlzIGlzIHB1cmVseSBhYm91dCBjb250cm9sbGluZyB0aGUgbXVsdGljYXN0IHN0YXRlIHdpdGggYSBib29sZWFuIGZsYWcgYW5kIHRoZW4gY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24sIGBfX2JyX211bHRpY2FzdF9zdG9wYCBvciBgX19icl9tdWx0aWNhc3Rfb3BlbmAuIE5vIEtNU0FOIGlzc3Vlcywgbm8gS0FTQU4sIExPQ0tERVAsIG9yIGFueSBvZiB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoaXMgaXMgYSBnYXJkZW4tdmFyaWV0eSBsb2dpYyBidWcsIGFuZCBob25lc3RseSwgdGhleSYjMzk7cmUgdGhlIGVhc2llc3QgdG8gYWRkcmVzcyB3aGVuIHlvdSBmaW5kIHRoZW0hIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIG9uIHRoaXMgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdvdWxkIGluY29ycmVjdGx5IHJldHVybiBlYXJseSB3aGVuIHRvZ2dsaW5nIG9mZiBtdWx0aWNhc3QgZm9yIGEgbm9uLWJyZW50cnkgVkxBTi4gVGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgc3RhdGUgbWFuYWdlbWVudCBmaXguIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIG9wZXJhdGlvbnMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIHRoZSBmdW5jdGlvbiB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gZWFybHkgd2hlbiB0b2dnbGluZyBvZmYgbXVsdGljYXN0IGZvciBhIG5vbi1icmVudHJ5IFZMQU4uIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBvcGVyYXRpb25zIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjU6NTYuMjkwNjI5Njg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NDI4NTk3MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5cIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ1wiLFxuICAgIFwiYnJfdmxhbl9hZGRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCB3aGVyZSB0aGUgZnVuY3Rpb24gd291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGVhcmx5IHdoZW4gdG9nZ2xpbmcgb2ZmIG11bHRpY2FzdCBmb3IgYSBub24tYnJlbnRyeSBWTEFOLiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3Igb3BlcmF0aW9ucyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSB3aGVuIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBWTEFOIGlmIHRoZSBWTEFOIGlzIG5vdCBhIGJyaWRnZSBlbnRyeS4gVGhpcyBjb3VsZCBsZWF2ZSB0aGUgbXVsdGljYXN0IGNvbnRleHQgYWN0aXZlIGFuZCB0aGUgYEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEYCBmbGFnIHNldCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3Mgd2hlbiB0aGUgVkxBTiBpcyBkZXN0cm95ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgd2hlbiBhZGRpbmcvcmVtb3ZpbmcvbW9kaWZ5aW5nIGJyaWRnZSBWTEFOcyBvciB0b2dnbGluZyBtdWx0aWNhc3Qgc25vb3BpbmcuIEl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI1OjU2LjI5MDYzNDc0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUxNzI5MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjQ2ODkyMjA3OWQ0NjdlZjllOTZlMmI4NjE2YzQxNTFmMzcxM2FjOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxMjoyNTo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xcbmluZGV4IDc1ZTFlMmE4ZmM4M2EuLjNlZjVkOGJiZjU1MmUgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcXG5AQCAtNDM3Nyw4ICs0Mzc3LDggQEAgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuIFxcdGlmIChicl92bGFuX2lzX21hc3Rlcih2bGFuKSkge1xcbiBcXHRcXHRiciA9IHZsYW4tXFx1MDAzZWJyO1xcbiBcXG4tXFx0XFx0aWYgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHxcXG4tXFx0XFx0ICAgIChvbiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRpZiAob24gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8XFxuIFxcdFxcdCAgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChcXHUwMDI2dmxhbi1cXHUwMDNlYnJfbWNhc3RfY3R4KSkpXFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI1OjU2LjY0MzE0NjY2OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk4MDM2ODEwNjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5cIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ1wiLFxuICAgIFwiYnJfdmxhbl9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgaXQgd291bGQgcmV0dXJuIGVhcmx5IHdoZW4gZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gaWYgdGhlIFZMQU4gaXMgbm90IGEgYnJpZGdlIGVudHJ5LiBUaGlzIGNvdWxkIGxlYXZlIHRoZSBtdWx0aWNhc3QgY29udGV4dCBhY3RpdmUgYW5kIHRoZSBgQlJfVkxGTEFHX01DQVNUX0VOQUJMRURgIGZsYWcgc2V0LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyB3aGVuIHRoZSBWTEFOIGlzIGRlc3Ryb3llZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJyaWRnZSBtdWx0aWNhc3QgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGFkZGluZy9yZW1vdmluZy9tb2RpZnlpbmcgYnJpZGdlIFZMQU5zIG9yIHRvZ2dsaW5nIG11bHRpY2FzdCBzbm9vcGluZy4gSXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjQ2ODkyMjA3OWQ0NjdlZjllOTZlMmI4NjE2YzQxNTFmMzcxM2FjOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDEyOjI1OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbmluZGV4IDc1ZTFlMmE4ZmM4M2EuLjNlZjVkOGJiZjU1MmUgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG5AQCAtNDM3Nyw4ICs0Mzc3LDggQEAgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4gXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHtcbiBcdFx0YnIgPSB2bGFuLVx1MDAzZWJyO1xuIFxuLVx0XHRpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuLVx0XHQgICAgKG9uIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAob24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuIFx0XHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKSlcbiBcdFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNTo1Ni42NDMxNDgwODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTc4NTE4OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJyaWRnZSBNdWx0aWNhc3QgUGF0Y2gqKlxuXG5Pa2F5LCBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIFNwZWNpZmljYWxseSwgaXQncyB0b3VjaGluZyB0aGUgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGZ1bmN0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGNoYW5nZWQgaW4gdGhlIGRpZmYuXG5cbkFscmlnaHQsIEkgc2VlIGl0LiBUaGUgY29yZSBvZiB0aGUgbG9naWMgcmV2b2x2ZXMgYXJvdW5kIHRoaXMgY29uZGl0aW9uYWwgcmV0dXJuIHN0YXRlbWVudC4gUHJldmlvdXNseSwgaXQgbG9va2VkIGxpa2UgdGhpczpcblxuYGBgY1xuXHRcdGlmICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8XG5cdFx0ICAgIChvbiBcdTAwMjZcdTAwMjZcblx0XHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKSlcblx0XHRcdHJldHVybjtcbmBgYFxuXG5BbmQgbm93IGl0J3M6XG5cbmBgYGNcblx0XHRpZiAob24gXHUwMDI2XHUwMDI2XG5cdFx0ICAgICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8XG5cdFx0ICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKFx1MDAyNnZsYW4tXHUwMDNlYnJfbWNhc3RfY3R4KSkpXG5cdFx0XHRyZXR1cm47XG5gYGBcblxuUmlnaHQgYXdheSwgSSBjYW4gc2VlIHRoZSBjaGFuZ2UgYWx0ZXJzIHRoZSBsb2dpYyBmbG93IHNpZ25pZmljYW50bHkuIFRoZSBvcmlnaW5hbCBjb2RlIHJldHVybmVkIGVhcmx5IGlmIGVpdGhlciBgIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAgT1IgaWYgYG9uYCB3YXMgdHJ1ZSBBTkQgdGhlIGdsb2JhbCBtdWx0aWNhc3QgY29udGV4dCB3YXMgZGlzYWJsZWQuIE5vdywgaXQgKm9ubHkqIHJldHVybnMgZWFybHkgaWYgYG9uYCBpcyB0cnVlIEFORCBlaXRoZXIgYCFicl92bGFuX2lzX2JyZW50cnkodmxhbilgIG9yIHRoZSBnbG9iYWwgY29udGV4dCBpcyBkaXNhYmxlZC4gRXNzZW50aWFsbHksIHRoZSBwYXRjaCBpcyBtYWtpbmcgdGhlIGAhYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pYCBjaGVjayBjb25kaXRpb25hbCBvbiBgb25gIGJlaW5nIHRydWUuIElmIGBvbmAgaXMgZmFsc2UsIGl0J3Mgbm90IGdvaW5nIHRvIHJldHVybi4gVGhpcyBpcyB0aGUgY3JpdGljYWwgY2hhbmdlLiBMZXQgbWUgZ28gYmFjayBhbmQgbG9vayBhdCB0aGUgZnVuY3Rpb24sIGFuZCBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MDMuODIxNjY5NzE4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTE5MDEwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzQwPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDQxMT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyMy1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MjQ6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2cG9ydCwgb24pO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyNS1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjctXFx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0Mjg6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MDMuOTY2ODY1ODgzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3MDc4OTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJyaWRnZSBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4gYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZ292ZXJuIHRoZSBtdWx0aWNhc3QgYmVoYXZpb3VyIGluIHRoaXMgYnJpZGdlLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgd2UnbGwgYmUgZGVhbGluZyB3aXRoIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCBoZXJlLiBBbmQgYSBxdWljayBzY2FuIHN1Z2dlc3RzIG15IGludHVpdGlvbiBpcyBjb3JyZWN0IC0gdGhpcyBjb2RlIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIG9ubHkgd2hlbiBgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYCBpcyBlbmFibGVkLiBUaW1lIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUgd2hhdCdzIHNwZWNpZmllZCBpbiB0aGUgYG5ldC9icmlkZ2UvTWFrZWZpbGVgLiBJIHdpbGwgdmVyaWZ5IGlmIHRoaXMgaXMgdGhlIG9ubHkgb3B0aW9uIGludm9sdmVkIG9yIGlmIHRoZXJlIGFyZSBvdGhlciwgbW9yZSBzdWJ0bGUgZmFjdG9ycyBhdCBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjExLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MDcuODM3NjU4MzQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjkzODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX211bHRpY2FzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICs9IGJyX25ldGZpbHRlci5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMC1cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIxOmJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MDcuODgzOTYwOTU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4MjY2NzU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgQnJpZGdlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGJyaWRnZSBjb25maWd1cmF0aW9uLCBhbmQgaXQncyBsb29raW5nIGxpa2UgYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AgaXMgYSBkZWZpbml0ZSByZXF1aXJlbWVudC4gTm8gc3VycHJpc2VzIHRoZXJlLiBPZiBjb3Vyc2UsIGBDT05GSUdfQlJJREdFYCBpdHNlbGYgaXMgdGhlIGZvdW5kYXRpb25hbCBidWlsZGluZyBibG9jaywgc28gdGhhdCdzIGEgZ2l2ZW4uIE5vdywgSSdtIHNlZWluZyB0aGlzIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBmdW5jdGlvbiwgYW5kIHRoZSBcInZsYW5cIiBpbiB0aGUgbmFtZSBpcyB0cmlnZ2VyaW5nIGEgZmxhZy4gSXQncyBtYWtpbmcgbWUgd29uZGVyIGlmIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBhbHNvIGEgZGVwZW5kZW5jeS4gR2l2ZW4gaG93IFZMQU5zIGFuZCBtdWx0aWNhc3Qgb2Z0ZW4gcGxheSB0b2dldGhlciBpbiBicmlkZ2luZyBzY2VuYXJpb3MsIGl0IHdvdWxkIG1ha2Ugc2Vuc2UuIEJlc3QgdG8gdmVyaWZ5IHRoaXMsIHNvIEknbGwganVtcCBzdHJhaWdodCBpbnRvIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpcm0gdGhlIHJlbGF0aW9uc2hpcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjEyLjM2NjYzMTk2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjczODg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM0MD12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjUtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzY2OnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Ny17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MTE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjMtXFx0XFx0XFx0Y29udGludWU7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI0OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odnBvcnQsIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjUtXFx0fVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI3LVxcdGlmIChicl92bGFuX2lzX2JyZW50cnkodmxhbikpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI4OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odmxhbiwgb24pO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyOS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDczPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3NDp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3NS1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NTA9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTQtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1NTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTYtXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTIwMz1zdGF0aWMgdm9pZCBicl92bGFuX3B1dF9tYXN0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNC1cXHRcXHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MjE1OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNi1cXHRcXHRicl9tdWx0aWNhc3RfY3R4X2RlaW5pdChcXHUwMDI2bWFzdGVydi1cXHUwMDNlYnJfbWNhc3RfY3R4KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTI2Mz1zdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVxcdF9fdmxhbl9mbGFnc19jb21taXQodiwgZmxhZ3MpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjM1OTpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM2MC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM5MD1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQyNy1cXHRcXHRuYnBfdmxhbl9zZXRfdmxhbl9kZXZfc3RhdGUocCwgdi1cXHUwMDNldmlkKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0Mjg6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2LCBmYWxzZSk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtNDI5LVxcdFxcdGJyX211bHRpY2FzdF9wb3J0X2N0eF9kZWluaXQoXFx1MDAyNnYtXFx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTcxOT1zdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2MC1cXHRcXHQqY2hhbmdlZCA9IHRydWU7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6NzYxOlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odmxhbiwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzYyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MTIuNDEzMzgwNzE0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0NDkzOTkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aGluZ3M6XG5cbioqQW5hbHl6aW5nIHRoZSBNdWx0aWNhc3QgVkxBTiBUb2dnbGUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBmdW5jdGlvbiwgYW5kIGl0J3MgY2xlYXIgaXQncyBwYXJ0IG9mIHRoZSBWTEFOIGZpbHRlcmluZyBsb2dpYyB3aXRoaW4gdGhlIGJyaWRnaW5nIHN1YnN5c3RlbS4gVGhlIGNvbnRleHQgY2x1ZXMgcG9pbnQgbWUgdG8gYGJyX3ZsYW4uY2AuIFNwZWNpZmljYWxseSwgSSBrbm93IHRoYXQgY29tcGlsYXRpb24gb2YgYGJyX3ZsYW4uY2AgaXMgY29uZGl0aW9uYWwsIGRlcGVuZGluZyBvbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AuIFJpZ2h0LCBzbyB0aGlzIHN1Z2dlc3RzIHRoYXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGRlcGVuZGVuY2llcy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGBuZXQvYnJpZGdlL01ha2VmaWxlYCB0byB2ZXJpZnkgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGNvbmZpcm0gaG93IGBicl92bGFuLmNgIGlzIGludGVncmF0ZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hlbiBhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk5NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjE2Ljk1ODMyMzIxNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MzU5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfdmxhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGU9MjE9YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSArPSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTIyLVxcbm5ldC9icmlkZ2UvTWFrZWZpbGU6MjM6YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgKz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNjoxNy4wMDU3NjUxNTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxMjk3NzA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqVkxBTiBGaWx0ZXJpbmcgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KipcblxuUmlnaHQsIHNvLCBkZWZpbml0ZWx5LCB3ZSBuZWVkIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBlbmFibGVkLiBUaGF0IG11Y2ggaXMgY2xlYXIuIExvb2tpbmcgYXQgdGhlIGJyb2FkZXIgcGljdHVyZSwgd2UncmUgZGVhbGluZyB3aXRoIGEgY29uZmlndXJhdGlvbiB0aGF0IGluY2x1ZGVzIGBCUklER0VgLCBgQlJJREdFX0lHTVBfU05PT1BJTkdgLCBhbmQgY3J1Y2lhbGx5LCB0aGlzIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSdyZSBlc3RhYmxpc2hpbmcgdGhlIGNvcmUgYnJpZGdlIGZ1bmN0aW9uYWxpdHksIGFkZGluZyBJR01QIHNub29waW5nIGZvciBtdWx0aWNhc3Qgb3B0aW1pemF0aW9uLCBhbmQgdGhlbiB0aGUgVkxBTiBmaWx0ZXJpbmcgY2FwYWJpbGl0eSB0byBtYW5hZ2UgdHJhZmZpYyBzZXBhcmF0aW9uLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFZMQU4gZmlsdGVyaW5nIGludGVyYWN0cyB3aXRoIG11bHRpY2FzdCBmb3J3YXJkaW5nLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGxpbmNocGluIGZvciBjb250cm9sbGluZyBtdWx0aWNhc3QgdHJhZmZpYyBvbiBhIHBlci1WTEFOIGJhc2lzIHdpdGhpbiB0aGUgYnJpZGdlLiBJdCBzaG91bGQgc2hlZCBsaWdodCBvbiBob3cgd2UgaGFuZGxlIG11bHRpY2FzdCBtZW1iZXJzaGlwIGFjcm9zcyBkaWZmZXJlbnQgVkxBTnMgZ2l2ZW4gdGhlIGZpbHRlcmluZyBjYXBhYmlsaXRpZXMuIFVuZGVyc3RhbmRpbmcgaG93IHRoYXQgdG9nZ2xlIHdvcmtzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM5NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjIwLjgxODc0NTI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzNjYsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQzNjY6XFx0dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuNDM2NzpcXHR7XFxuNDM2ODpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7XFxuNDM2OTpcXHRcXG40MzcwOlxcdFxcdC8qIGl0J3Mgb2theSB0byBjaGVjayBmb3IgdGhlIGZsYWcgd2l0aG91dCB0aGUgbXVsdGljYXN0IGxvY2sgYmVjYXVzZSBpdFxcbjQzNzE6XFx0XFx0ICogY2FuIG9ubHkgY2hhbmdlIHVuZGVyIFJUTkwgLVxcdTAwM2UgbXVsdGljYXN0X2xvY2ssIHdlIG5lZWQgdGhlIGxhdHRlciB0b1xcbjQzNzI6XFx0XFx0ICogc3luYyB3aXRoIHRpbWVycyBhbmQgcGFja2V0c1xcbjQzNzM6XFx0XFx0ICovXFxuNDM3NDpcXHRcXHRpZiAob24gPT0gISEodmxhbi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEKSlcXG40Mzc1OlxcdFxcdFxcdHJldHVybjtcXG40Mzc2OlxcdFxcbjQzNzc6XFx0XFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSB7XFxuNDM3ODpcXHRcXHRcXHRiciA9IHZsYW4tXFx1MDAzZWJyO1xcbjQzNzk6XFx0XFxuNDM4MDpcXHRcXHRcXHRpZiAob24gXFx1MDAyNlxcdTAwMjZcXG40MzgxOlxcdFxcdFxcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxcbjQzODI6XFx0XFx0XFx0ICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKFxcdTAwMjZ2bGFuLVxcdTAwM2Vicl9tY2FzdF9jdHgpKSlcXG40MzgzOlxcdFxcdFxcdFxcdHJldHVybjtcXG40Mzg0OlxcdFxcbjQzODU6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjQzODY6XFx0XFx0XFx0dmxhbi1cXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfTUNBU1RfRU5BQkxFRDtcXG40Mzg3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjQzODg6XFx0XFxuNDM4OTpcXHRcXHRcXHRpZiAob24pXFxuNDM5MDpcXHRcXHRcXHRcXHRfX2JyX211bHRpY2FzdF9vcGVuKFxcdTAwMjZ2bGFuLVxcdTAwM2Vicl9tY2FzdF9jdHgpO1xcbjQzOTE6XFx0XFx0XFx0ZWxzZVxcbjQzOTI6XFx0XFx0XFx0XFx0X19icl9tdWx0aWNhc3Rfc3RvcChcXHUwMDI2dmxhbi1cXHUwMDNlYnJfbWNhc3RfY3R4KTtcXG40MzkzOlxcdFxcdH0gZWxzZSB7XFxuNDM5NDpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4O1xcbjQzOTU6XFx0XFxuNDM5NjpcXHRcXHRcXHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChcXHUwMDI2dmxhbi1cXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xcbjQzOTc6XFx0XFx0XFx0aWYgKG9uIFxcdTAwMjZcXHUwMDI2IGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoYnJtY3R4KSlcXG40Mzk4OlxcdFxcdFxcdFxcdHJldHVybjtcXG40Mzk5OlxcdFxcbjQ0MDA6XFx0XFx0XFx0YnIgPSB2bGFuLVxcdTAwM2Vwb3J0LVxcdTAwM2VicjtcXG40NDAxOlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9sb2NrKTtcXG40NDAyOlxcdFxcdFxcdHZsYW4tXFx1MDAzZXByaXZfZmxhZ3MgXj0gQlJfVkxGTEFHX01DQVNUX0VOQUJMRUQ7XFxuNDQwMzpcXHRcXHRcXHRpZiAob24pXFxuNDQwNDpcXHRcXHRcXHRcXHRfX2JyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoXFx1MDAyNnZsYW4tXFx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcXG40NDA1OlxcdFxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MjAuODE4OTY4NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4MDkxNjcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBZGRyZXNzaW5nIGEgQnJpZGdlIE11bHRpY2FzdCBCdWcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIG5hc3R5IGJ1Zy4gSXQgc2VlbXMgdGhhdCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBmYWxzZSlgIGhhZCBhIHByZW1hdHVyZSBleGl0IGNvbmRpdGlvbiBpZiBgIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAuIFRoYXQncyBhIGNsYXNzaWMgc2NlbmFyaW8gZm9yIGxlYXZpbmcgYSBtdWx0aWNhc3QgY29udGV4dCBydW5uaW5nIGFuZCBgQlJfVkxGTEFHX01DQVNUX0VOQUJMRURgIGhhbmdpbmcgYXJvdW5kLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBtZW1vcnkgbGVhayB3aGVuIHRoZSBWTEFOIGdldHMgdG9ybiBkb3duLiBOb3QgZ29vZCwgbm90IGdvb2QgYXQgYWxsLlxuXG5UaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSwgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljLiBUaGUgY3J1Y2lhbCBjYWxsIHNlcXVlbmNlIGFwcGVhcnMgdG8gYmUgYGJyX3ZsYW5fcHV0X21hc3RlcmAgd2hpY2ggdGhlbiB0cmlnZ2VycyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihtYXN0ZXJ2LCBmYWxzZSlgLiBMb29rcyBsaWtlIGEgY29tbW9uIHNjZW5hcmlvLCBhbmQgYSBnb29kIHNwb3QgdG8gY2F1c2UgdGhlIGJ1Zy5cblxuSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgYnJfdmxhbl9wdXRfbWFzdGVyYCBmdW5jdGlvbiBpdHNlbGYuIEknbGwgdGFrZSBhIGxvb2sgYXQgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIHRoZXJlIHRvIGNvbmZpcm0gdGhlIHBhdGNoJ3MgbG9naWMgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgdnVsbmVyYWJpbGl0eSB3YXMgaW50cm9kdWNlZCBpbiB0aGUgZmlyc3QgcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NDAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNjoyNS4zOTk4ODc4NzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMzpcXHRzdGF0aWMgdm9pZCBicl92bGFuX3B1dF9tYXN0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydilcXG4gMjA0OlxcdHtcXG4gMjA1OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xcbiAyMDY6XFx0XFxuIDIwNzpcXHRcXHRpZiAoIWJyX3ZsYW5faXNfbWFzdGVyKG1hc3RlcnYpKVxcbiAyMDg6XFx0XFx0XFx0cmV0dXJuO1xcbiAyMDk6XFx0XFxuIDIxMDpcXHRcXHR2ZyA9IGJyX3ZsYW5fZ3JvdXAobWFzdGVydi1cXHUwMDNlYnIpO1xcbiAyMTE6XFx0XFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2bWFzdGVydi1cXHUwMDNlcmVmY250KSkge1xcbiAyMTI6XFx0XFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2dmctXFx1MDAzZXZsYW5faGFzaCxcXG4gMjEzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFzdGVydi1cXHUwMDNldm5vZGUsIGJyX3ZsYW5fcmh0X3BhcmFtcyk7XFxuIDIxNDpcXHRcXHRcXHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XFxuIDIxNTpcXHRcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKG1hc3RlcnYsIGZhbHNlKTtcXG4gMjE2OlxcdFxcdFxcdGJyX211bHRpY2FzdF9jdHhfZGVpbml0KFxcdTAwMjZtYXN0ZXJ2LVxcdTAwM2Vicl9tY2FzdF9jdHgpO1xcbiAyMTc6XFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNm1hc3RlcnYtXFx1MDAzZXJjdSwgYnJfbWFzdGVyX3ZsYW5fcmN1X2ZyZWUpO1xcbiAyMTg6XFx0XFx0fVxcbiAyMTk6XFx0fVxcbiAyMjA6XFx0XFxuIDIyMTpcXHRzdGF0aWMgdm9pZCBuYnBfdmxhbl9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4gMjIyOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MjUuNDAwMDAxMTk4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzk0NjM3NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1czogQnJpZGdlIE11bHRpY2FzdCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBiYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gdGhhdCdzIHdpdGhpbiByZWFjaCBmb3IgZnV6emluZy4gSSBjYW4gcHJvYmFibHkgY3JhZnQgaW5wdXRzIHRoYXQgbGVhZCBkaXJlY3RseSB0byBpdC4gTm93LCB3aGljaCBvdGhlciBmdW5jdGlvbnMgYXJlIHJlbGV2YW50IGhlcmU/IGBicl92bGFuX3B1dF9tYXN0ZXJgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBvZnRlbiBtYWtlcyBmdXp6aW5nIGl0IGxlc3Mgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIG9mdGVuIGRpZmZpY3VsdCB0byB0cmlnZ2VyIHN0YXRpYyBmdW5jdGlvbnMgdGhyb3VnaCB0aGUgcHVibGljLWZhY2luZyBBUEkuIEJ1dCB3aGF0IGFib3V0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gPyBUaGF0IG9uZSBzZWVtcyBsaWtlIGEgc3Ryb25nIGNvbnRlbmRlciBhcyB3ZWxsLiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgaXQuIEknbGwgb3BlbiB1cCBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcG90ZW50aWFsIHRhcmdldHMgaW4gdGhhdCBzYW1lIHNvdXJjZSBmaWxlLCB3aGljaCB3b3VsZCBzdWdnZXN0IGEgcG90ZW50aWFsIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNjoyOS41Mzk0Njc1MjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQxMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQxMTpcXHRzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG40NDEyOlxcdHtcXG40NDEzOlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7XFxuNDQxNDpcXHRcXG40NDE1OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSlcXG40NDE2OlxcdFxcdFxcdHJldHVybjtcXG40NDE3OlxcdFxcbjQ0MTg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2dmxhbi1cXHUwMDNlYnItXFx1MDAzZXBvcnRfbGlzdCwgbGlzdCkge1xcbjQ0MTk6XFx0XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdnBvcnQ7XFxuNDQyMDpcXHRcXG40NDIxOlxcdFxcdFxcdHZwb3J0ID0gYnJfdmxhbl9maW5kKG5icF92bGFuX2dyb3VwKHApLCB2bGFuLVxcdTAwM2V2aWQpO1xcbjQ0MjI6XFx0XFx0XFx0aWYgKCF2cG9ydClcXG40NDIzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQ0MjQ6XFx0XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2cG9ydCwgb24pO1xcbjQ0MjU6XFx0XFx0fVxcbjQ0MjY6XFx0XFxuNDQyNzpcXHRcXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxcbjQ0Mjg6XFx0XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XFxuNDQyOTpcXHR9XFxuNDQzMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MjkuNTM5NjY0NDgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTY1ODc4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgcXVlc3Rpb24gaXMgYWx3YXlzIHdoZXRoZXIgaXQncyBleHBvcnRlZCBvciBpZiBpdCBoYXMgaW50ZXJuYWwgc2NvcGUuIEFoLCBnb29kLCBpdCdzIG5vbi1zdGF0aWMsIGRlY2xhcmVkIGluIGBuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaGAuIFRoYXQgbWFrZXMgaXQgYWNjZXNzaWJsZSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEknbSBsb29raW5nIGZvci4gVGhpcyBmdW5jdGlvbiBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24sIGEgdmFsdWFibGUgc3ltYm9sIHRvIGZvY3VzIG9uLiBOb3csIGxldCdzIHNlZSB3aGVyZSB0aGlzIGZpdHMgaW4gdGhlIGJpZ2dlciBwaWN0dXJlLiBJIHNob3VsZCBjaGVjayBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBuZXh0LCBzZWUgaG93IHRoYXQgcmVsYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkxMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MzMuMjk2MjU1MDM1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0MzEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ0MzE6XFx0aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxuNDQzMjpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuNDQzMzpcXHR7XFxuNDQzNDpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG40NDM1OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW47XFxuNDQzNjpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xcbjQ0Mzc6XFx0XFxuNDQzODpcXHRcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSA9PSBvbilcXG40NDM5OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ0NDA6XFx0XFxuNDQ0MTpcXHRcXHRpZiAob24gXFx1MDAyNlxcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpIHtcXG40NDQyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJDYW5ub3QgZW5hYmxlIG11bHRpY2FzdCB2bGFuIHNub29waW5nIHdpdGggdmxhbiBmaWx0ZXJpbmcgZGlzYWJsZWRcXFwiKTtcXG40NDQzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ0NDQ6XFx0XFx0fVxcbjQ0NDU6XFx0XFxuNDQ0NjpcXHRcXHR2ZyA9IGJyX3ZsYW5fZ3JvdXAoYnIpO1xcbjQ0NDc6XFx0XFx0aWYgKCF2ZylcXG40NDQ4OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ0NDk6XFx0XFxuNDQ1MDpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQsIG9uKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MzMuMjk2NDQ0MzM1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTc2OTcxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOlxuXG4qKkRpZ2dpbmcgaW50byBWTEFOIFNub29waW5nIGFuZCBCcmlkZ2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzICphbHNvKiBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggVkxBTiBzbm9vcGluZyB3aXRoaW4gdGhlIGJyaWRnZS4gR2l2ZW4gdGhhdCwgbGV0J3MgZGl2ZSBpbnRvIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBgX192bGFuX2FkZGAgYW5kIGBfX3ZsYW5fZGVsYCBmdW5jdGlvbnMuIFRob3NlIHNlZW0gbGlrZSB0aGUga2V5IHBsYXllcnMgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgVkxBTiBjb25maWd1cmF0aW9ucywgd2hpY2ggc2hvdWxkIGlsbHVtaW5hdGUgaG93IHNub29waW5nIGlzIGVuYWJsZWQgYW5kIGRpc2FibGVkIGluIHRoaXMgY29udGV4dC4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5IGFuZCBob3cgdGhleSBnZXQgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjM2LjYxNDE0NDEzMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjYzLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjYzOlxcdHN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXFxuIDI2NDpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDI2NTpcXHR7XFxuIDI2NjpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptYXN0ZXJ2ID0gTlVMTDtcXG4gMjY3OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAgPSBOVUxMO1xcbiAyNjg6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XFxuIDI2OTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiAyNzA6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xcbiAyNzE6XFx0XFx0aW50IGVycjtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0XFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHYpKSB7XFxuIDI3NDpcXHRcXHRcXHRiciA9IHYtXFx1MDAzZWJyO1xcbiAyNzU6XFx0XFx0XFx0ZGV2ID0gYnItXFx1MDAzZWRldjtcXG4gMjc2OlxcdFxcdFxcdHZnID0gYnJfdmxhbl9ncm91cChicik7XFxuIDI3NzpcXHRcXHR9IGVsc2Uge1xcbiAyNzg6XFx0XFx0XFx0cCA9IHYtXFx1MDAzZXBvcnQ7XFxuIDI3OTpcXHRcXHRcXHRiciA9IHAtXFx1MDAzZWJyO1xcbiAyODA6XFx0XFx0XFx0ZGV2ID0gcC1cXHUwMDNlZGV2O1xcbiAyODE6XFx0XFx0XFx0dmcgPSBuYnBfdmxhbl9ncm91cChwKTtcXG4gMjgyOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6MzYuNjE0MjU2MDIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzk1NDc2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNvbnNpZGVyaW5nIFZMQU4gQWRkaXRpb24gU3RyYXRlZ2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBWTEFOcyBhcmUgYWRkZWQsIHNwZWNpZmljYWxseSBpbiB0aGlzIGNvbnRleHQuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBfX3ZsYW5fYWRkYCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0J3MgbGltaXRlZCBpbiBzY29wZSwgYW5kIHByb2JhYmx5IGRlc2lnbmVkIGZvciBhIHNwZWNpZmljIHB1cnBvc2Ugd2l0aGluIGEgcGFydGljdWxhciBtb2R1bGUgb3IgZmlsZS4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3cgSSdtIHdvbmRlcmluZywgaWYgYF9fdmxhbl9hZGRgIGlzIGNvbnN0cmFpbmVkIGxpa2UgdGhhdCwgd2hhdCBhYm91dCBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgPyBXaGF0J3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28/IElzIGBicl92bGFuX2FkZF9leGlzdGluZ2AgYSBtb3JlIGdlbmVyYWxpemVkIGZ1bmN0aW9uPyBEb2VzIGl0IGJ1aWxkIG9uIHRvcCBvZiBgX192bGFuX2FkZGAsIG9yIGlzIGl0IGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQ/IFVuZGVyc3RhbmRpbmcgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlc2UgdHdvIGFkZGl0aW9uIG1ldGhvZHMgaXMgZXNzZW50aWFsIGZvciBncmFzcGluZyB0aGUgb3ZlcmFsbCBWTEFOIG1hbmFnZW1lbnQgbG9naWMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYW5kIGRldGVybWluZSB0aGVpciByZXNwZWN0aXZlIHVzZSBjYXNlcyBhbmQgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBicmlkZ2luZyBpbXBsZW1lbnRhdGlvbi4gSSdtIGVzc2VudGlhbGx5IHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBkZXNpZ24gY2hvaWNlcyBtYWRlIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBjaG9vc2luZyBvbmUgb3ZlciB0aGUgb3RoZXIgaW4gc3BlY2lmaWMgc2NlbmFyaW9zLiBBcmUgd2UgZGVhbGluZyB3aXRoIHRoZSBjcmVhdGlvbiBvZiBuZXcgVkxBTnMgdmVyc3VzIGFkZGluZyBleGlzdGluZyBvbmVzIHRvIGEgYnJpZGdlPyBHb3R0YSBmaWd1cmUgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjQwLjE1MzgwNjM2NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTEwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzE5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzE5OlxcdHN0YXRpYyBpbnQgYnJfdmxhbl9hZGRfZXhpc3Rpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbiA3MjA6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXFxuIDcyMTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxcbiA3MjI6XFx0XFx0XFx0XFx0XFx0dTE2IGZsYWdzLCBib29sICpjaGFuZ2VkLFxcbiA3MjM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA3MjQ6XFx0e1xcbiA3MjU6XFx0XFx0Ym9vbCBiZWNvbWVzX2JyZW50cnkgPSBmYWxzZTtcXG4gNzI2OlxcdFxcdGJvb2wgd291bGRfY2hhbmdlID0gZmFsc2U7XFxuIDcyNzpcXHRcXHRpbnQgZXJyO1xcbiA3Mjg6XFx0XFxuIDcyOTpcXHRcXHRpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSkge1xcbiA3MzA6XFx0XFx0XFx0LyogVHJ5aW5nIHRvIGNoYW5nZSBmbGFncyBvZiBub24tZXhpc3RlbnQgYnJpZGdlIHZsYW4gKi9cXG4gNzMxOlxcdFxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19CUkVOVFJZKSlcXG4gNzMyOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3MzM6XFx0XFxuIDczNDpcXHRcXHRcXHRiZWNvbWVzX2JyZW50cnkgPSB0cnVlO1xcbiA3MzU6XFx0XFx0fSBlbHNlIHtcXG4gNzM2OlxcdFxcdFxcdHdvdWxkX2NoYW5nZSA9IF9fdmxhbl9mbGFnc193b3VsZF9jaGFuZ2UodmxhbiwgZmxhZ3MpO1xcbiA3Mzc6XFx0XFx0fVxcbiA3Mzg6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjQwLjE1MzkxODUwNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjI2ODM0NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ29udGVtcGxhdGluZyBhIFN0YXRpYyBDb25maWd1cmF0aW9uIGFuZCBWTEFOIEFkZGl0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGN1cnJlbnQgc2V0dXAgaXMgYWxzbyBzdGF0aWNhbGx5IGNvbmZpZ3VyZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBpdCBpbW1lZGlhdGVseSByYWlzZXMgdGhlIHF1ZXN0aW9uOiB3aGF0IGFib3V0IGFkZGluZyBhIFZMQU4/IE1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgYGJyX3ZsYW5fYWRkYCBjb21tYW5k4oCUIGhvdyBkb2VzIGl0IHBsYXkgaW50byB0aGlzIHN0YXRpYyBzaXR1YXRpb24/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIGhvdyB0aGF0IGNvbW1hbmQgaW50ZWdyYXRlcyBpbnRvIHRoZSBwcmUtZXhpc3Rpbmcgc3RhdGljIGNvbmZpZ3VyYXRpb24sIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBicmlkZ2UsIGFuZCB0aGUgb3ZlcmFsbCBuZXR3b3JrIGFyY2hpdGVjdHVyZS4gSXMgdGhlcmUgYW55dGhpbmcgdGhhdCBjb3VsZCBpbnRlcmZlcmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjQzLjc4MDc1NjI3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0MTE0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfdmxhbl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmM9MTY3PWJyX3ZsYW5fZ2V0X21hc3RlcihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzgtXFx0XFx0LyogbWlzc2luZyBnbG9iYWwgY3R4LCBjcmVhdGUgaXQgbm93ICovXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTc5OlxcdFxcdGlmIChicl92bGFuX2FkZChiciwgdmlkLCAwLCBcXHUwMDI2Y2hhbmdlZCwgZXh0YWNrKSlcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xODAtXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yNjM9c3RhdGljIGludCBfX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTI5Ni1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyOTc6XFx0XFx0XFx0ZXJyID0gYnJfdmxhbl9hZGQoYnIsIHYtXFx1MDAzZXZpZCxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yOTgtXFx0XFx0XFx0XFx0XFx0ICBmbGFncyB8IEJSSURHRV9WTEFOX0lORk9fQlJFTlRSWSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTY4Nj1ib29sIGJyX3Nob3VsZF9sZWFybihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZpZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcxOC1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3MTk6c3RhdGljIGludCBicl92bGFuX2FkZF9leGlzdGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzIwLVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzc4LSAqL1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc3OTppbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsIGJvb2wgKmNoYW5nZWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzgwLVxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc5MS1cXHRpZiAodmxhbilcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3OTI6XFx0XFx0cmV0dXJuIGJyX3ZsYW5fYWRkX2V4aXN0aW5nKGJyLCB2ZywgdmxhbiwgZmxhZ3MsIGNoYW5nZWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzkzLVxcdFxcdFxcdFxcdFxcdCAgICBleHRhY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTEwMj1pbnQgX19icl92bGFuX3NldF9kZWZhdWx0X3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgcHZpZCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExMzAtXFx0ICAgICghcHZlbnQgfHwgIWJyX3ZsYW5fc2hvdWxkX3VzZShwdmVudCkpKSB7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTEzMTpcXHRcXHRlcnIgPSBicl92bGFuX2FkZChiciwgcHZpZCxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTMyLVxcdFxcdFxcdFxcdCAgQlJJREdFX1ZMQU5fSU5GT19QVklEIHxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExOTAtXFx0XFx0aWYgKG9sZF9wdmlkKSB7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTE5MTpcXHRcXHRcXHRicl92bGFuX2FkZChiciwgb2xkX3B2aWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE5Mi1cXHRcXHRcXHRcXHQgICAgQlJJREdFX1ZMQU5fSU5GT19QVklEIHxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE3NDc9aW50IGJyX3ZsYW5fYnJpZGdlX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE3NTUtXFx0Y2FzZSBORVRERVZfUkVHSVNURVI6XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTc1NjpcXHRcXHRyZXQgPSBicl92bGFuX2FkZChiciwgYnItXFx1MDAzZWRlZmF1bHRfcHZpZCxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzU3LVxcdFxcdFxcdFxcdCAgQlJJREdFX1ZMQU5fSU5GT19QVklEIHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6NDMuODMyMTkxMzE0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MzY3NjgxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBCcmlkZ2UgTXVsdGljYXN0IGFuZCBWTEFOIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnMuIEl0IGFwcGVhcnMgdGhhdCBgYnJfdmxhbl9hZGRgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBhcmUgYWxsIG5vbi1zdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHBvdGVudGlhbCBleHRlcm5hbCBpbnRlcmFjdGlvbiBwb2ludHMuXG5cbkknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gIEkgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCB3aGljaCBpcyBrZXkgZm9yIGZ1enppbmcuICBMb29raW5nIGF0IHRoZSBjYWxsIGdyYXBoLCBpdCdzIGNhbGxlZCBieSBgYnJfdmxhbl9wdXRfbWFzdGVyYCAod2hlbiBhIFZMQU4gaXMgZGVsZXRlZCksIGBfX3ZsYW5fYWRkYCAod2hlbiBhIFZMQU4gaXMgYWRkZWQpLCBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgICh3aGVuIGEgVkxBTiBpcyBtb2RpZmllZCksIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYCAoY2FsbGVkIGZyb20gYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2ApLiBBaGEsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBpcyB0cmlnZ2VyZWQgd2hlbiBgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEYCBpcyB0b2dnbGVkLiBUaGF0J3MgZ29vZC5cblxuVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIG5ldGxpbmssIGxpa2VseSB2aWEgY29tbWFuZHMgbGlrZSBgYnJfY2hhbmdlbGlua2Agb3IgYGJyX3NldGxpbmtgLiAgVGhlIGFiaWxpdHkgdG8gbW9kaWZ5IFZMQU4gc2V0dGluZ3MgYW5kIG11bHRpY2FzdCBzbm9vcGluZyBmcm9tIHVzZXJzcGFjZSBkaXJlY3RseSBpbXBsaWNhdGVzIHRoYXQgdGhlc2UgY2hhbmdlcyBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3QuIFRoaXMgaXMgYWxsIHRlbGxpbmcgbWUgdGhhdCB0aGVzZSBhcmUgdmFsaWQgdGFyZ2V0cyBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRob3NlIHRocmVlIGZ1bmN0aW9uczogYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCwgYW5kIGBicl92bGFuX2FkZGAuXG5cbkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiAgSSdtIHNlZWluZyB0aGF0IHdlIG5lZWQgdG8gZW5hYmxlIGBCUklER0VgLCBgQlJJREdFX0lHTVBfU05PT1BJTkdgLCBhbmQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AuICBTaW5jZSBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYCBpcyBlbmFibGVkIGFuZCBgbmV0L2JyaWRnZS9icl92bGFuLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGVuYWJsZWQsIGFuZCBib3RoIGRlcGVuZCBvbiBgQ09ORklHX0JSSURHRWAgaW4gdGhlIGBuZXQvYnJpZGdlL0tjb25maWdgLCB0aGF0IGNvbmZpcm1zIHRoZSBjb3JyZWN0IGNvbmZpZ3MuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYEtjb25maWdgIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODcxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI2OjUxLjc2ODk2Mjc1OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MzY3NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL0tjb25maWc9Nj1jb25maWcgQlJJREdFXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctMzUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjM2OmNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cXHRib29sIFxcXCJJR01QL01MRCBzbm9vcGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6NTEuODE3ODA1NzA0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTMyNjQ1MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBCcmlkZ2UgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIHNwZWNpZmljYWxseSBmb3IgYnJpZGdpbmcuIE15IGZvY3VzIGlzIG9uIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IElHTVAgc25vb3BpbmcgYW5kIFZMQU4gZmlsdGVyaW5nIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgYnJpZGdlIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBgQlJJREdFX0lHTVBfU05PT1BJTkdgIGFuZCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBvcHRpb25zLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaG93IHRoZXNlIG9wdGlvbnMgaW50ZXJhY3QgYW5kIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBlYWNoIG90aGVyLiBBcmUgdGhlcmUgYW55IGNhdmVhdHMgb3Igc3VidGxlIGltcGxpY2F0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmxpY3RzIHRoYXQgSSBuZWVkIHRvIGJlIG1pbmRmdWwgb2Y/IFBlcmhhcHMgdGhlcmUgYXJlIGJlc3QgcHJhY3RpY2VzIG9yIHJlY29tbWVuZGF0aW9ucyBidXJpZWQgd2l0aGluIHRoZSBjb21tZW50cyBvciBzdXJyb3VuZGluZyBjb2RlIHRoYXQgSSdtIG92ZXJsb29raW5nPyBUaGlzIHdpbGwgaGVscCBtZSB0byBkZXRlcm1pbmUgaG93IEkgd291bGQgbGlrZSB0byBkZXNpZ24gdGhlIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5ODgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNjo1Ni40MzEwNzI4NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzY6XFx0Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxuICAzNzpcXHRcXHRib29sIFxcXCJJR01QL01MRCBzbm9vcGluZ1xcXCJcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDQwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxcbiAgNDM6XFx0XFx0ICBmb3J3YXJkIG11bHRpY2FzdCB0cmFmZmljIGJhc2VkIG9uIElHTVAvTUxEIHRyYWZmaWMgcmVjZWl2ZWQgZnJvbVxcbiAgNDQ6XFx0XFx0ICBlYWNoIHBvcnQuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xcbiAgNTE6XFx0XFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxuICA1MjpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgNTM6XFx0XFx0ZGVwZW5kcyBvbiBWTEFOXzgwMjFRXFxuICA1NDpcXHRcXHRkZWZhdWx0IG5cXG4gIDU1OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6MjY6NTYuNDMxMTM4ODhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY5NTg0MTYzMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVwZW5kZW5jeSBBbmFseXNpcyBmb3IgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gYEJSSURHRV9JR01QX1NOT09QSU5HYCByZWxpZXMgb24gYEJSSURHRWAgYW5kIGBJTkVUYCwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGluY2x1ZGVkLiBTaW1pbGFybHksIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIGRlcGVuZHMgb24gYm90aCBgQlJJREdFYCBhbmQgYFZMQU5fODAyMVFgLlxuXG5UaGVyZWZvcmUsIHRvIGVuYWJsZSBldmVyeXRoaW5nLCB3ZSBuZWVkIHRvIGluY2x1ZGU6IGBCUklER0VgLCBgSU5FVGAsIGBWTEFOXzgwMjFRYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBJdCdzIGFsbW9zdCBhdXRvbWF0aWMsIGJ1dCBsZXQncyBiZSB0aG9yb3VnaC5cblxuV2hpbGUgYElORVRgIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCBpbiBtb3N0IGJ1aWxkcywgaXQncyBnb29kIHByYWN0aWNlIHRvIGxpc3QgaXQgZXhwbGljaXRseSBoZXJlIGZvciBjb21wbGV0ZW5lc3MuIEFuZCwgb2YgY291cnNlLCB0aGUgYFZMQU5fODAyMVFgIGlzIGRlZmluaXRlbHkgbmVlZGVkLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGZvciBgVkxBTl84MDIxUWAsIHNwZWNpZmljYWxseSBpbiBgbmV0LzgwMjFxL0tjb25maWdgLiBJdCBuZXZlciBodXJ0cyB0byBjb25maXJtIHRoZSBzb3VyY2Ugb2YgdHJ1dGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDk0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6Mjc6MjMuMzg5NTU4MzIxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTcwMjk4MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZMQU5fODAyMVFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0LzgwMjFxL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0LzgwMjFxL0tjb25maWctNS1cXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXFxubmV0LzgwMjFxL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XFxcIlxcbi0tXFxubmV0LzgwMjFxL0tjb25maWctMjEtXFxubmV0LzgwMjFxL0tjb25maWc6MjI6Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxcbm5ldC84MDIxcS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkdWUlAgKEdBUlAgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvODAyMXEvS2NvbmZpZy0zMS1cXG5uZXQvODAyMXEvS2NvbmZpZzozMjpjb25maWcgVkxBTl84MDIxUV9NVlJQXFxubmV0LzgwMjFxL0tjb25maWctMzMtXFx0Ym9vbCBcXFwiTVZSUCAoTXVsdGlwbGUgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI3OjIzLjc4NjU5NjE5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODEwNzczODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCcmlkZ2UgTXVsdGljYXN0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGBWTEFOXzgwMjFRYCBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmV2aWV3IHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLCB3aGljaCBhcmUgdGhlIGZvY3VzIHN5bWJvbHM6IGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCwgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AsIGFuZCBgYnJfdmxhbl9hZGRgLiBJJ20gYWxzbyBicmllZmx5IGNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMsIGJ1dCB0aG9zZSB0aHJlZSBsb29rIGxpa2UgdGhlIGNvcmUgb25lcy5cblxuYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIHRoZSBvbmUgdGhhdCB3YXMgc3BlY2lmaWNhbGx5IG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guIEkgdGhpbmsgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgYW5kIGBicl92bGFuX2FkZGAgd2lsbCBiZSBnb29kIGVudHJ5IHBvaW50cyBmb3IgYW5hbHlzaXMgYXMgd2VsbCwgaW4gY2FzZSB0aGUgZml4IGhhcyBpbXBsaWNhdGlvbnMgdGhlcmUuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBpcyBleHBvcnRlZC4gSXQgbG9va3MgbGlrZSBpdCdzIG5vbi1zdGF0aWMsIGRlY2xhcmVkIGluIGBuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaGAuIFRoYXQgbWFrZXMgaXQgYSBnbG9iYWwgc3ltYm9sIHdpdGhpbiB0aGUga2VybmVsLCBhY2Nlc3NpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGJ1dCBub3QgZXhwbGljaXRseSBleHBvcnRlZCB0byBtb2R1bGVzLiBUaGF0J3MgZmluZTsgaXQncyBzdGlsbCBhY2Nlc3NpYmxlIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlIGZ1enppbmcuXG5cbk15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoIGlzIHRoYXQgaXQgZml4ZXMgYSBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLiBJdCB3YXMgcmV0dXJuaW5nIGVhcmx5IHdoZW4gZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gaWYgdGhlIFZMQU4gd2Fzbid0IGFscmVhZHkgYSBicmlkZ2UgZW50cnkuIFRoaXMgY2FuIGxlYWQgdG8gdGhlIG11bHRpY2FzdCBjb250ZXh0IHN0YXlpbmcgYWN0aXZlIGFuZCB0aGUgYEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEYCBmbGFnIGJlaW5nIHNldCwgd2hpY2ggY291bGQgY2F1c2UgYSB1c2UtYWZ0ZXItZnJlZSBvciBhIG1lbW9yeSBsZWFrIHdoZW4gdGhlIFZMQU4gaXMgZXZlbnR1YWxseSBkZXN0cm95ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWVwIGluIHRoZSBicmlkZ2UncyBtdWx0aWNhc3QgbG9naWMsIGFuZCBpdCdzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGRlYWxpbmcgd2l0aCBicmlkZ2UgVkxBTnMuIFNwZWNpZmljYWxseSwgd2hlbiBhZGRpbmcsIHJlbW92aW5nLCBvciBtb2RpZnlpbmcgYnJpZGdlIFZMQU5zLCBhbmQgYWxzbyB3aGVuIHRvZ2dsaW5nIG11bHRpY2FzdCBzbm9vcGluZy4gQmVjYXVzZSBpdCdzIGFmZmVjdGluZyBjb3JlIG11bHRpY2FzdCBiZWhhdmlvciBhbmQgYWNjZXNzaWJsZSB2aWEgdXNlcnNwYWNlLCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuXG5cbk15IGxpc3Qgb2YgcmVsZXZhbnQgY29uZmlncyBpbmNsdWRlcyBgQlJJREdFYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AsIGBWTEFOXzgwMjFRYCwgYW5kIGBJTkVUYC5cblxuV2l0aCB0aGlzIGFzc2Vzc21lbnQgY29tcGxldGUsIEkgd2lsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE1MSwiT3V0cHV0VG9rZW5zIjoyMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6Mjc6MzQuNTk3MzcyMzUzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1ODI0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5cIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ1wiLFxuICAgIFwiYnJfdmxhbl9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgaXQgd291bGQgcmV0dXJuIGVhcmx5IHdoZW4gZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gaWYgdGhlIFZMQU4gaXMgbm90IGEgYnJpZGdlIGVudHJ5LiBUaGlzIGNvdWxkIGxlYXZlIHRoZSBtdWx0aWNhc3QgY29udGV4dCBhY3RpdmUgYW5kIHRoZSBgQlJfVkxGTEFHX01DQVNUX0VOQUJMRURgIGZsYWcgc2V0LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyB3aGVuIHRoZSBWTEFOIGlzIGRlc3Ryb3llZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJyaWRnZSBtdWx0aWNhc3QgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGFkZGluZy9yZW1vdmluZy9tb2RpZnlpbmcgYnJpZGdlIFZMQU5zIG9yIHRvZ2dsaW5nIG11bHRpY2FzdCBzbm9vcGluZy4gSXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9JR01QX1NOT09QSU5HXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuXCIsXG4gICAgXCJicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdcIixcbiAgICBcImJyX3ZsYW5fYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSB3aGVuIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBWTEFOIGlmIHRoZSBWTEFOIGlzIG5vdCBhIGJyaWRnZSBlbnRyeS4gVGhpcyBjb3VsZCBsZWF2ZSB0aGUgbXVsdGljYXN0IGNvbnRleHQgYWN0aXZlIGFuZCB0aGUgYEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEYCBmbGFnIHNldCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3Mgd2hlbiB0aGUgVkxBTiBpcyBkZXN0cm95ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBicmlkZ2UgbXVsdGljYXN0IGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgd2hlbiBhZGRpbmcvcmVtb3ZpbmcvbW9kaWZ5aW5nIGJyaWRnZSBWTEFOcyBvciB0b2dnbGluZyBtdWx0aWNhc3Qgc25vb3BpbmcuIEl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI3OjM0LjY3OTk2MTIxNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMzkyNTYzNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNzozNC42ODA0NjQ0NzRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTgwMzg3NDg1ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCB3aGVyZSB0aGUgZnVuY3Rpb24gd291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGVhcmx5IHdoZW4gdG9nZ2xpbmcgb2ZmIG11bHRpY2FzdCBmb3IgYSBub24tYnJlbnRyeSBWTEFOLiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3Igb3BlcmF0aW9ucyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjQ2ODkyMjA3OWQ0NjdlZjllOTZlMmI4NjE2YzQxNTFmMzcxM2FjOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDEyOjI1OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbmluZGV4IDc1ZTFlMmE4ZmM4M2EuLjNlZjVkOGJiZjU1MmUgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG5AQCAtNDM3Nyw4ICs0Mzc3LDggQEAgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4gXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHtcbiBcdFx0YnIgPSB2bGFuLVx1MDAzZWJyO1xuIFxuLVx0XHRpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuLVx0XHQgICAgKG9uIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAob24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuIFx0XHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKSlcbiBcdFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNzozNC42ODA0NjUzNzRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwMDkwMzIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCcmlkZ2UgTXVsdGljYXN0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2l0aGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gVGltZSB0byBkaWcgaW50byB0aGUgZGlmZjpcblxuYGBgY1xuLVx0XHRpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuLVx0XHQgICAgKG9uIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAob24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuIFx0XHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKSlcbiBcdFx0XHRyZXR1cm47XG5gYGBcblxuUmlnaHQgYXdheSwgSSBzZWUgYSBsb2dpY2FsIGNoYW5nZSBpbiBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gQmVmb3JlLCBpdCB3YXMgcmV0dXJuaW5nIGlmIGAhYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pYCB3aGVuIGBvbmAgd2FzIGZhbHNlLiBOb3csIHRoYXQgd2hvbGUgYmxvY2sgaXMgc2tpcHBlZCBpZiBgb25gIGlzIGZhbHNlLCBkdWUgdG8gdGhlIHNob3J0LWNpcmN1aXRpbmcgb2YgdGhlIGBcdTAwMjZcdTAwMjZgLiBTbywgZXNzZW50aWFsbHkgYSBjb250cm9sIGZsb3cgYWx0ZXJhdGlvbi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgbm8sIHRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBidWcgZml4IG9yIGNoYW5nZS4gTGV0J3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIHRyeSB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gTGV0J3MgbG9vayBhdCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6Mjc6NDAuMzgxMzcxMzU3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU1ODkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzQwPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDQxMT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyMy1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MjQ6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2cG9ydCwgb24pO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyNS1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjctXFx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0Mjg6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6Mjc6NDAuNDI5OTM2MTcyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzM3ODgwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gTXkgcHJpbWFyeSBjb25jZXJuIGlzLCBhcyBhbHdheXMgd2l0aCB0aGVzZSBsb3ctbGV2ZWwgZnVuY3Rpb25zLCB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZSB0byBlbnN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgcmVhZGluZyBvciBwYXNzaW5nIGdhcmJhZ2UgZGF0YS4gVGhhdCdzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgaGFyZC10by1kZWJ1ZyBpbnN0YWJpbGl0eSBhbmQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBzbyBpdCdzIHRoZSBmaXJzdCB0aGluZyBJJ20gbG9va2luZyBmb3IuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFzIGNsZWFuIGFzIGl0IHNob3VsZCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEyOjI3OjQzLjc2MzcyNzc4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzNjYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQzNjY6XFx0dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuNDM2NzpcXHR7XFxuNDM2ODpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7XFxuNDM2OTpcXHRcXG40MzcwOlxcdFxcdC8qIGl0J3Mgb2theSB0byBjaGVjayBmb3IgdGhlIGZsYWcgd2l0aG91dCB0aGUgbXVsdGljYXN0IGxvY2sgYmVjYXVzZSBpdFxcbjQzNzE6XFx0XFx0ICogY2FuIG9ubHkgY2hhbmdlIHVuZGVyIFJUTkwgLVxcdTAwM2UgbXVsdGljYXN0X2xvY2ssIHdlIG5lZWQgdGhlIGxhdHRlciB0b1xcbjQzNzI6XFx0XFx0ICogc3luYyB3aXRoIHRpbWVycyBhbmQgcGFja2V0c1xcbjQzNzM6XFx0XFx0ICovXFxuNDM3NDpcXHRcXHRpZiAob24gPT0gISEodmxhbi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEKSlcXG40Mzc1OlxcdFxcdFxcdHJldHVybjtcXG40Mzc2OlxcdFxcbjQzNzc6XFx0XFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSB7XFxuNDM3ODpcXHRcXHRcXHRiciA9IHZsYW4tXFx1MDAzZWJyO1xcbjQzNzk6XFx0XFxuNDM4MDpcXHRcXHRcXHRpZiAob24gXFx1MDAyNlxcdTAwMjZcXG40MzgxOlxcdFxcdFxcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxcbjQzODI6XFx0XFx0XFx0ICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKFxcdTAwMjZ2bGFuLVxcdTAwM2Vicl9tY2FzdF9jdHgpKSlcXG40MzgzOlxcdFxcdFxcdFxcdHJldHVybjtcXG40Mzg0OlxcdFxcbjQzODU6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjQzODY6XFx0XFx0XFx0dmxhbi1cXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfTUNBU1RfRU5BQkxFRDtcXG40Mzg3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjQzODg6XFx0XFxuNDM4OTpcXHRcXHRcXHRpZiAob24pXFxuNDM5MDpcXHRcXHRcXHRcXHRfX2JyX211bHRpY2FzdF9vcGVuKFxcdTAwMjZ2bGFuLVxcdTAwM2Vicl9tY2FzdF9jdHgpO1xcbjQzOTE6XFx0XFx0XFx0ZWxzZVxcbjQzOTI6XFx0XFx0XFx0XFx0X19icl9tdWx0aWNhc3Rfc3RvcChcXHUwMDI2dmxhbi1cXHUwMDNlYnJfbWNhc3RfY3R4KTtcXG40MzkzOlxcdFxcdH0gZWxzZSB7XFxuNDM5NDpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4O1xcbjQzOTU6XFx0XFxuNDM5NjpcXHRcXHRcXHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChcXHUwMDI2dmxhbi1cXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xcbjQzOTc6XFx0XFx0XFx0aWYgKG9uIFxcdTAwMjZcXHUwMDI2IGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoYnJtY3R4KSlcXG40Mzk4OlxcdFxcdFxcdFxcdHJldHVybjtcXG40Mzk5OlxcdFxcbjQ0MDA6XFx0XFx0XFx0YnIgPSB2bGFuLVxcdTAwM2Vwb3J0LVxcdTAwM2VicjtcXG40NDAxOlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9sb2NrKTtcXG40NDAyOlxcdFxcdFxcdHZsYW4tXFx1MDAzZXByaXZfZmxhZ3MgXj0gQlJfVkxGTEFHX01DQVNUX0VOQUJMRUQ7XFxuNDQwMzpcXHRcXHRcXHRpZiAob24pXFxuNDQwNDpcXHRcXHRcXHRcXHRfX2JyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoXFx1MDAyNnZsYW4tXFx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcXG40NDA1OlxcdFxcdFxcdGVsc2VcXG40NDA2OlxcdFxcdFxcdFxcdF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXFx1MDAyNnZsYW4tXFx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcXG40NDA3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjQ0MDg6XFx0XFx0fVxcbjQ0MDk6XFx0fVxcbjQ0MTA6XFx0XFxuNDQxMTpcXHRzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG40NDEyOlxcdHtcXG40NDEzOlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7XFxuNDQxNDpcXHRcXG40NDE1OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTI6Mjc6NDMuNzY0MDIxNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTU1MTY2NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZml4LCBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgb2xkIGNvZGUgaGFkIGEgZmxhdyBpbiBpdHMgbG9naWMg4oCTIGl0IHdhcyBiYWlsaW5nIG91dCBwcmVtYXR1cmVseS4gU3BlY2lmaWNhbGx5LCBpdCB3YXMgcmV0dXJuaW5nIGVhcmx5IHdoZW4gYG9uYCB3YXMgZmFsc2UgKmFuZCogYCFicl92bGFuX2lzX2JyZW50cnkodmxhbilgIHdhcyB0cnVlLiBUaGlzIG1lYW50IHRoYXQgdGhlIG11bHRpY2FzdCBzdGF0ZSBmb3IgVkxBTnMgdGhhdCAqd2VyZW4ndCogQnJlbnRyeSB3b3VsZG4ndCBnZXQgcHJvcGVybHkgdG9nZ2xlZCBvZmYsIGV2ZW4gd2hlbiB0aGV5IHNob3VsZC4gSXQncyBhIGNsYXNzaWMgYm9vbGVhbiBsb2dpYyBlcnJvciwgc29tZXRoaW5nIHlvdSBzZWUgYWxsIHRoZSB0aW1lIGluIHRoZXNlIHR5cGVzIG9mIHN5c3RlbXMuXG5cblRoZSBnb29kIG5ld3MgaXMsIHRoZXJlJ3Mgbm8gaGludCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLiBUaGlzIGlzIHB1cmVseSBhYm91dCBjb250cm9sbGluZyB0aGUgbXVsdGljYXN0IHN0YXRlIHdpdGggYSBib29sZWFuIGZsYWcgYW5kIHRoZW4gY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24sIGBfX2JyX211bHRpY2FzdF9zdG9wYCBvciBgX19icl9tdWx0aWNhc3Rfb3BlbmAuIE5vIEtNU0FOIGlzc3Vlcywgbm8gS0FTQU4sIExPQ0tERVAsIG9yIGFueSBvZiB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoaXMgaXMgYSBnYXJkZW4tdmFyaWV0eSBsb2dpYyBidWcsIGFuZCBob25lc3RseSwgdGhleSdyZSB0aGUgZWFzaWVzdCB0byBhZGRyZXNzIHdoZW4geW91IGZpbmQgdGhlbSEgSSdsbCBnbyBhaGVhZCBhbmQgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBvbiB0aGlzIG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAwMiwiT3V0cHV0VG9rZW5zIjoxMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMjoyNzo1Mi43MTkxOTA2MzZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCB3aGVyZSB0aGUgZnVuY3Rpb24gd291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGVhcmx5IHdoZW4gdG9nZ2xpbmcgb2ZmIG11bHRpY2FzdCBmb3IgYSBub24tYnJlbnRyeSBWTEFOLiBUaGlzIGlzIGEgY29udHJvbCBmbG93IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZpeC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3Igb3BlcmF0aW9ucyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIHRoZSBmdW5jdGlvbiB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gZWFybHkgd2hlbiB0b2dnbGluZyBvZmYgbXVsdGljYXN0IGZvciBhIG5vbi1icmVudHJ5IFZMQU4uIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgZml4LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBvcGVyYXRpb25zIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5xnrk[1] Phase: Succeeded StartedAt: 2026-08-23 12:28:03 +0000 UTC FinishedAt: 2026-08-23 12:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-23 12:28:03 +0000 UTC FinishedAt: 2026-08-23 12:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2] Phase: Succeeded StartedAt: 2026-08-23 12:28:03 +0000 UTC FinishedAt: 2026-08-23 16:08:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-23 12:28:03 +0000 UTC FinishedAt: 2026-08-23 16:08:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-23 12:28:03 +0000 UTC FinishedAt: 2026-08-23 12:28:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-23 12:28:03 +0000 UTC FinishedAt: 2026-08-23 12:28:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xnrk/series-workflow5xnrk-convert-artifact-1558560936/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-23 12:28:13 +0000 UTC FinishedAt: 2026-08-23 12:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-23 12:28:13 +0000 UTC FinishedAt: 2026-08-23 12:44:30 +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:*967d6b52-0662-4c14-bf63-d07bb07d18fb,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-workflow5xnrk/series-workflow5xnrk-convert-artifact-1558560936/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": "18f486d8-5f97-4b61-9304-db925ee0adf4", "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-workflow5xnrk/series-workflow5xnrk-build-action-3385210654/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-23 12:28:13 +0000 UTC FinishedAt: 2026-08-23 12:44:20 +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:*967d6b52-0662-4c14-bf63-d07bb07d18fb,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-workflow5xnrk/series-workflow5xnrk-convert-artifact-1558560936/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": "18f486d8-5f97-4b61-9304-db925ee0adf4", "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-workflow5xnrk/series-workflow5xnrk-build-action-3385210654/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-23 12:44:30 +0000 UTC FinishedAt: 2026-08-23 12:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-23 12:44:30 +0000 UTC FinishedAt: 2026-08-23 12:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-23 12:44:30 +0000 UTC FinishedAt: 2026-08-23 12:44:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-23 12:44:30 +0000 UTC FinishedAt: 2026-08-23 12:44:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xnrk/series-workflow5xnrk-convert-artifact-744150415/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-23 12:44:40 +0000 UTC FinishedAt: 2026-08-23 12:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-23 12:44:40 +0000 UTC FinishedAt: 2026-08-23 12:46:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*18f486d8-5f97-4b61-9304-db925ee0adf4,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-workflow5xnrk/series-workflow5xnrk-build-action-3385210654/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-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-23 12:46:44 +0000 UTC FinishedAt: 2026-08-23 12:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-23 12:46:44 +0000 UTC FinishedAt: 2026-08-23 12:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-23 12:46:44 +0000 UTC FinishedAt: 2026-08-23 13:04:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-23 12:46:44 +0000 UTC FinishedAt: 2026-08-23 13:04:20 +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:*967d6b52-0662-4c14-bf63-d07bb07d18fb,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-workflow5xnrk/series-workflow5xnrk-convert-artifact-744150415/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": "7716e2e0-7d39-487a-ab5c-e24faaf7d3fc", "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-workflow5xnrk/series-workflow5xnrk-build-action-3226711715/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-23 12:46:44 +0000 UTC FinishedAt: 2026-08-23 13:04:10 +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:*967d6b52-0662-4c14-bf63-d07bb07d18fb,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-workflow5xnrk/series-workflow5xnrk-convert-artifact-744150415/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": "7716e2e0-7d39-487a-ab5c-e24faaf7d3fc", "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-workflow5xnrk/series-workflow5xnrk-build-action-3226711715/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-23 13:04:20 +0000 UTC FinishedAt: 2026-08-23 13:04:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-23 13:04:20 +0000 UTC FinishedAt: 2026-08-23 13:04:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-23 13:04:20 +0000 UTC FinishedAt: 2026-08-23 13:06:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-23 13:04:20 +0000 UTC FinishedAt: 2026-08-23 13:06: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:*7716e2e0-7d39-487a-ab5c-e24faaf7d3fc,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-workflow5xnrk/series-workflow5xnrk-build-action-3226711715/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-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-23 13:06:28 +0000 UTC FinishedAt: 2026-08-23 16:08:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-23 13:06:28 +0000 UTC FinishedAt: 2026-08-23 16:08:57 +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":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"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:*18f486d8-5f97-4b61-9304-db925ee0adf4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7716e2e0-7d39-487a-ab5c-e24faaf7d3fc,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-workflow5xnrk/series-workflow5xnrk-build-action-3385210654/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-workflow5xnrk/series-workflow5xnrk-build-action-3226711715/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-23 13:06:28 +0000 UTC FinishedAt: 2026-08-23 13:06:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-23 13:06:28 +0000 UTC FinishedAt: 2026-08-23 13:06:33 +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":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"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-workflow5xnrk/series-workflow5xnrk-convert-artifact-2993726536/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-23 13:06:28 +0000 UTC FinishedAt: 2026-08-23 13:06:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-23 13:06:28 +0000 UTC FinishedAt: 2026-08-23 13:06:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-23 13:06:28 +0000 UTC FinishedAt: 2026-08-23 13:06:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-23 13:06:38 +0000 UTC FinishedAt: 2026-08-23 16:08:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xnrk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_toggle_one_vlan","br_multicast_toggle_vlan_snooping","br_vlan_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING","VLAN_8021Q","INET"],"series_id":"9eb97dc1-6915-4b57-a8d7-60016c116bc4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-23 13:06:38 +0000 UTC FinishedAt: 2026-08-23 16:08:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*18f486d8-5f97-4b61-9304-db925ee0adf4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7716e2e0-7d39-487a-ab5c-e24faaf7d3fc,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-workflow5xnrk/series-workflow5xnrk-build-action-3385210654/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-workflow5xnrk/series-workflow5xnrk-build-action-3226711715/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-workflow5xnrk/series-workflow5xnrk-convert-artifact-2993726536/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,}