Name: series-workflowv75fk Phase: Succeeded StartedAt: 2026-08-26 09:17:10 +0000 UTC FinishedAt: 2026-08-26 13:45:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[0] Phase: Succeeded StartedAt: 2026-08-26 09:17:10 +0000 UTC FinishedAt: 2026-08-26 10:02:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 09:17:10 +0000 UTC FinishedAt: 2026-08-26 10:02:00 +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": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "INET", "VLAN_8021Q", "BRIDGE_IGMP_SNOOPING", "BRIDGE_VLAN_FILTERING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "INET", "VLAN_8021Q", "BRIDGE_IGMP_SNOOPING", "BRIDGE_VLAN_FILTERING" ], "series_id": "947d8bf5-93c8-4bdb-aee0-187f7f530c1f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_vlan_add", "br_vlan_delete", "nbp_vlan_add", "nbp_vlan_delete", "br_boolopt_toggle", "br_vlan_filter_toggle", "br_vlan_rtm_process_global_options" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX3ZsYW5fYWRkJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fZGVsZXRlJiMzNDssCiAgICAmIzM0O25icF92bGFuX2FkZCYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfYm9vbG9wdF90b2dnbGUmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9maWx0ZXJfdG9nZ2xlJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gdGhhdCBpcyBub3QgYSBicmlkZ2UgZW50cnkgd291bGQgZmFpbCBkdWUgdG8gYW4gaW5jb3JyZWN0IGVhcmx5IHJldHVybiBjb25kaXRpb24uIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudCwgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGxvZ2ljIGNoYW5nZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVhcmx5IHJldHVybiBjb25kaXRpb24gaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdpdGhpbiB0aGUgYnJpZGdlIG11bHRpY2FzdCBhbmQgVkxBTiBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGhvdyBWTEFOIG11bHRpY2FzdCBjb250ZXh0cyBhcmUgdG9nZ2xlZCB3aGVuIGBvbmAgaXMgZmFsc2UuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgaW9jdGwgd2hlbiBjb25maWd1cmluZyBicmlkZ2UgVkxBTnMgYW5kIG11bHRpY2FzdCBzbm9vcGluZyBvcHRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmFiMWMzMGI2YjBhOWU3ZjUxYWFkNDhjMDc0ZjRlZjJlNmUxNTczMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA5OjM1OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG5pbmRleCA3NWUxZTJhOGZjODNhLi4zZWY1ZDhiYmY1NTJlIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuQEAgLTQzNzcsOCAmIzQzOzQzNzcsOCBAQCB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbiBcdGlmIChicl92bGFuX2lzX21hc3Rlcih2bGFuKSkge1xuIFx0XHRiciA9IHZsYW4tXHUwMDNlYnI7XG4gXG4tXHRcdGlmICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8XG4tXHRcdCAgICAob24gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRpZiAob24gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHxcbiBcdFx0ICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKFx1MDAyNnZsYW4tXHUwMDNlYnJfbWNhc3RfY3R4KSkpXG4gXHRcdFx0cmV0dXJuO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjIxbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl92bGFuX2FkZCYjMzQ7LAogICAgJiMzNDticl92bGFuX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9hZGQmIzM0OywKICAgICYjMzQ7bmJwX3ZsYW5fZGVsZXRlJiMzNDssCiAgICAmIzM0O2JyX2Jvb2xvcHRfdG9nZ2xlJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fZmlsdGVyX3RvZ2dsZSYjMzQ7LAogICAgJiMzNDticl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlYXJseSByZXR1cm4gY29uZGl0aW9uIGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCB3aXRoaW4gdGhlIGJyaWRnZSBtdWx0aWNhc3QgYW5kIFZMQU4gbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBob3cgVkxBTiBtdWx0aWNhc3QgY29udGV4dHMgYXJlIHRvZ2dsZWQgd2hlbiBgb25gIGlzIGZhbHNlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgYW5kIGlvY3RsIHdoZW4gY29uZmlndXJpbmcgYnJpZGdlIFZMQU5zIGFuZCBtdWx0aWNhc3Qgc25vb3Bpbmcgb3B0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJhYjFjMzBiNmIwYTllN2Y1MWFhZDQ4YzA3NGY0ZWYyZTZlMTU3MzAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAwOTozNTozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCmluZGV4IDc1ZTFlMmE4ZmM4M2EuLjNlZjVkOGJiZjU1MmUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwpAQCAtNDM3Nyw4ICYjNDM7NDM3Nyw4IEBAIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKQogCWlmIChicl92bGFuX2lzX21hc3Rlcih2bGFuKSkgewogCQliciA9IHZsYW4tJmd0O2JyOwogCi0JCWlmICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8Ci0JCSAgICAob24gJmFtcDsmYW1wOwomIzQzOwkJaWYgKG9uICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fAogCQkgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoJmFtcDt2bGFuLSZndDticl9tY2FzdF9jdHgpKSkKIAkJCXJldHVybjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCcmlkZ2UgTXVsdGljYXN0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0b3VjaGluZyBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgYXJlIHRhcmdldGluZyB0aGUgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGZ1bmN0aW9uLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhhdCBmdW5jdGlvbjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGFsdGVyZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiB0aGF0IGFyZWEg4oCTIHRoZSBjYWxsIHNpdGVzLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBldmVyeXRoaW5nLiBJIG5lZWQgdGhlIGZ1bGwgY29udGV4dCB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSBvbiBtdWx0aWNhc3QgZm9yd2FyZGluZyB3aXRoaW4gdGhlIGJyaWRnZS4gVGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYSBidWcgZml4LCBvciBldmVuIGEgbmV3IGZlYXR1cmUuIExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzNDA9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2Njp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Ny17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NDExPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyMy1cdFx0XHRjb250aW51ZTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQyNDpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2cG9ydCwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI1LVx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyNy1cdGlmIChicl92bGFuX2lzX2JyZW50cnkodmxhbikpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0Mjg6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odmxhbiwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJyaWRnZSBNdWx0aWNhc3QgVG9nZ2xlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGNoYW5nZSBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIFRoZSBvbGQgY29kZSBoYWQgdGhpcyBjb25kaXRpb25hbCByZXR1cm4gYmFzZWQgb24gYCFicl92bGFuX2lzX2JyZW50cnkodmxhbilgIHdoZW4gYG9uYCB3YXMgZmFsc2UuIEJ1dCBub3csIHRoYXQgcGFydCBvZiB0aGUgbG9naWMgaXMgKm9ubHkqIGV4ZWN1dGVkIGlmIGBvbmAgaXMgKnRydWUqLgoKVGhpcyBoYXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSWYgYG9uYCBpcyBmYWxzZSwgdGhpcyBtZWFucyB3ZSB3aWxsIG5vIGxvbmdlciByZXR1cm4gaWYgYGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAgaXMgZmFsc2UuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgY2hhbmdlZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgbmV3IGJlaGF2aW91ciwgYW5kIHRvIGRvIHRoaXMgcHJvcGVybHkgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjYWxscyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnMgdG8gZGV0ZXJtaW5lIHRoZSBzaWRlLWVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM0MD12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzY2OnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MTE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDIzLVx0XHRcdGNvbnRpbnVlO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI0Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjUtXHR9XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI3LVx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQyODpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjktfVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwNzM9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwNzQ6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3NS1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTUwPXN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1NC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NTU6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTYtXHRcdFx0XHRcdFx0Ym9vbCBvbilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMjE0LVx0XHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMTU6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMjE2LVx0XHRicl9tdWx0aWNhc3RfY3R4X2RlaW5pdChcdTAwMjZtYXN0ZXJ2LVx1MDAzZWJyX21jYXN0X2N0eCk7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVx0X192bGFuX2ZsYWdzX2NvbW1pdCh2LCBmbGFncyk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTk6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIHRydWUpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMzYwLVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM5MD1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjctXHRcdG5icF92bGFuX3NldF92bGFuX2Rldl9zdGF0ZShwLCB2LVx1MDAzZXZpZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0Mjg6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtNDI5LVx0XHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnYtXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTcxOT1zdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjAtXHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc2MTpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2Mi1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTc1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKioKCk9rYXksIHNvIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIGNhbiBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gc2V2ZXJhbCBrZXkgYnJpZGdlIG11bHRpY2FzdCBhbmQgVkxBTiBmdW5jdGlvbnM6IGBicl92bGFuX3B1dF9tYXN0ZXJgLCBgX192bGFuX2FkZGAsIGBfX3ZsYW5fZGVsYCwgYGJyX3ZsYW5fYWRkX2V4aXN0aW5nYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gLiBHaXZlbiBpdHMgaW50ZWdyYXRpb24gd2l0aCB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLCB0aGlzIGlzIGRlZmluaXRlbHkgd2l0aGluIHRoZSByZWFsbSBvZiByZWFjaGFibGUga2VybmVsIGxvZ2ljIOKAkyB3ZSYjMzk7cmUgdGFsa2luZyBpbXBvcnRhbnQgc3R1ZmYgaGVyZS4gSGlnaCBwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIHJlc3VsdHMsIHBvdGVudGlhbGx5IGNyaXRpY2FsIG9uZXMuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIHRoZSBzb3VyY2UgY29kZSBpcyBpbiBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AsIHNvIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IG1ha2VmaWxlcyBhbmQgS2NvbmZpZyBmaWxlcyDigJMgYG5ldC9icmlkZ2UvTWFrZWZpbGVgIGFuZCBgbmV0L2JyaWRnZS9LY29uZmlnYCBzcGVjaWZpY2FsbHkuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgYnVpbGRpbmcgYSBmdXp6aW5nIGNhbXBhaWduIHRoYXQgY2FuIGFjdHVhbGx5IGhpdCB0aGlzIHRhcmdldC4gTmVlZCB0byBpZGVudGlmeSB3aGF0IGtlcm5lbCBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYW5kIGVuc3VyZSB0aGUgcmlnaHQgbW9kdWxlcyBhcmUgbG9hZGVkIHRvIGVuYWJsZSB0aGUgZmVhdHVyZS4gVGhlbiwgaXQmIzM5O3MgdGltZSB0byBjcmFmdCB0aGUgZnV6emVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikgJiM0Mzs9IGJyX25ldGZpbHRlci5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTIwLVxubmV0L2JyaWRnZS9NYWtlZmlsZToyMTpicmlkZ2UtJChDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcpICYjNDM7PSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmtpbmcgYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJR01QIFNub29waW5nIERlcGVuZGVuY3kqKgoKQWxyaWdodCwgc28gdGhlIHN5c3RlbSBpcyB0ZWxsaW5nIG1lIHRoYXQgYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AgaXMgYSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBpdGVtLiBGaW5lLCBtYWtlcyBzZW5zZSwgSUdNUCBzbm9vcGluZyBpcyBjcnVjaWFsIGluIG1hbnkgYnJpZGdlZCBlbnZpcm9ubWVudHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoZXNlIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AgcmVsYXRlcyB0byBvdGhlciBicmlkZ2luZyBmZWF0dXJlcy4KClRoZXJlZm9yZSwgSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBhbmQgYW55IGRlcGVuZGVuY2llcyBmb3IgYm90aCBgQlJJREdFX0lHTVBfU05PT1BJTkdgIGFuZCBhbHNvIHRoZSBiYXNlIGJyaWRnZSBmdW5jdGlvbmFsaXR5IHJlcHJlc2VudGVkIGJ5IGBCUklER0VgLiBUaGlzIGNoZWNrIHdpbGwgY29uZmlybSB0aGUgcmVsYXRpb25zaGlwcywgYW5kIGxldCBtZSBzZWUgaWYgYW55dGhpbmcgZWxzZSBuZWVkcyB0byBiZSB0d2Vha2VkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWxhdGlvbnNoaXBzLCBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBvcHRpb25zIHdpdGhpbiB0aGF0IGNvbmZpZ3VyYXRpb24gc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnLTUtXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXG5uZXQvYnJpZGdlL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNDktXG5uZXQvYnJpZGdlL0tjb25maWc6NTA6Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy02My1cbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtNUlAgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cbm5ldC9icmlkZ2UvS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7Q0ZNIHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaWdnaW5nIGludG8gQlJJREdFX0lHTVBfU05PT1BJTkcgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgQlJJREdFX0lHTVBfU05PT1BJTkdgLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3RoZXIgY29tcG9uZW50cywgbW9kdWxlcywgb3IgZmVhdHVyZXMgcmVseSBvbiwgb3IgYXJlIGluZmx1ZW5jZWQgYnksIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbi4gVW5kZXJzdGFuZGluZyB0aGVzZSBjb25uZWN0aW9ucyBpcyBjcnVjaWFsIGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMgb3IgdHJvdWJsZXNob290aW5nIGlzc3VlcyByZWxhdGVkIHRvIElHTVAgc25vb3Bpbmcgd2l0aGluIGEgYnJpZGdlZCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGtub3cgdGhlIHJpcHBsZSBlZmZlY3QuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnPTY9Y29uZmlnIEJSSURHRVxuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgQnJpZGdlIENvbmZpZ3VyYXRpb24gRmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzYuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgY29uZmlndXJlZCB0aGVyZSwgcHJvYmFibHkgc29tZSBmZWF0dXJlIG9yIHNldHRpbmcgcmVsYXRlZCB0byBuZXR3b3JrIGJyaWRnaW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCB0aGluZ3MgbGlrZSBzcGFubmluZyB0cmVlIHByb3RvY29sIChTVFApLCB0aGUgZm9yd2FyZGluZyBkYXRhYmFzZSwgb3IgcGVyaGFwcyBzb21lIGJyaWRnZS1zcGVjaWZpYyBoYXJkd2FyZSBvZmZsb2FkIG9wdGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFzIHdlbGwgYXMgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgYWZmZWN0IGhvdyB0aGVzZSBicmlkZ2UgZnVuY3Rpb25hbGl0aWVzIGFyZSBjb21waWxlZCBhbmQgaW5jbHVkZWQuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIHdlIGNhbiB1bmVhcnRoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMzI6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYnJpZGdlLlxuICAzMzpcdFxuICAzNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xuICAzNzpcdFx0Ym9vbCBcJiMzNDtJR01QL01MRCBzbm9vcGluZ1wmIzM0O1xuICAzODpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgMzk6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA0MDpcdFx0ZGVmYXVsdCB5XG4gIDQxOlx0XHRoZWxwXG4gIDQyOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XG4gIDQzOlx0XHQgIGZvcndhcmQgbXVsdGljYXN0IHRyYWZmaWMgYmFzZWQgb24gSUdNUC9NTEQgdHJhZmZpYyByZWNlaXZlZCBmcm9tXG4gIDQ0Olx0XHQgIGVhY2ggcG9ydC5cbiAgNDU6XHRcbiAgNDY6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDQ3Olx0XG4gIDQ4Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgQnJpZGdlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhlIGRlcGVuZGVuY2llcyBhcmUgYEJSSURHRWAgYW5kIGBJTkVUYC4gVGhhdCBtYWtlcyBzZW5zZTsgYSBuZXR3b3JrIGJyaWRnZSBhbmQgdGhlIEludGVybmV0IFByb3RvY29sIGFyZSBmb3VuZGF0aW9uYWwuIE5vdywgaXQmIzM5O3MgbW9kaWZ5aW5nIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCwgYW5kIHRoYXQgZnVuY3Rpb24gdGFrZXMgYSBgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbmAuIE9rYXksIHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBWTEFOcyBhbmQgbXVsdGljYXN0IGluIHRoZSBicmlkZ2UuIFRoYXQgdHJpZ2dlcnMgYSBxdWVzdGlvbjogaXMgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgYSByZXF1aXJlbWVudCBoZXJlPyBJdCBwcm9iYWJseSBpcywgYnV0IEkgYWx3YXlzIHZlcmlmeS4gVGltZSB0byBjaGVjayBgbmV0L2JyaWRnZS9LY29uZmlnYCBhbmQgY29uZmlybS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xuICA1MTpcdFx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuICA1MjpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgNTM6XHRcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxuICA1NDpcdFx0ZGVmYXVsdCBuXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XG4gIDU3Olx0XHQgIHJlY2VpdmUgYW5kIGZvcndhcmQgdHJhZmZpYyBiYXNlZCBvbiBWTEFOIGluZm9ybWF0aW9uIGluIHRoZSBwYWNrZXRcbiAgNTg6XHRcdCAgYW55IFZMQU4gaW5mb3JtYXRpb24gY29uZmlndXJlZCBvbiB0aGUgYnJpZGdlIHBvcnQgb3IgYnJpZGdlIGRldmljZS5cbiAgNTk6XHRcbiAgNjA6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDYxOlx0XG4gIDYyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDYzOlx0XG4gIDY0Olx0Y29uZmlnIEJSSURHRV9NUlBcbiAgNjU6XHRcdGJvb2wgXCYjMzQ7TVJQIHByb3RvY29sXCYjMzQ7XG4gIDY2Olx0XHRkZXBlbmRzIG9uIEJSSURHRVxuICA2NzpcdFx0ZGVmYXVsdCBuXG4gIDY4Olx0XHRoZWxwXG4gIDY5Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBNUlBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgZm9yIG15IGZlbGxvdyBleHBlcnRzOgoKKipJbnZlc3RpZ2F0aW5nIFZMQU4gRmlsdGVyaW5nIENvbXBpbGF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIE15IGZpcnN0IGh1bmNoIGlzIHRvIHZlcmlmeSBpdHMgY29tcGlsYXRpb24gc3RhdGUgdW5kZXIgdGhlIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIGNvbmZpZ3VyYXRpb24uIFRoZSB3aG9sZSBwb2ludCBpcyB0byBlbnN1cmUgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGFzIGV4cGVjdGVkLCBvciBpcyBhcHByb3ByaWF0ZWx5IGV4Y2x1ZGVkLCB3aGVuIFZMQU4gZmlsdGVyaW5nIGlzIHR1cm5lZCBvZmYuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYCBhbmQgY2hlY2sgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIHRoZSBjb2RlJiMzOTtzIGRlc2lnbmVkIHRvIGJlIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgYmFzZWQgb24gdGhhdCBzcGVjaWZpYyBmZWF0dXJlIGZsYWcuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBjbHV0dGVyIHVwIHRoZSBrZXJuZWwgd2hlbiBWTEFOIGZpbHRlcmluZyBpcyBub3QgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwNzM9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwNzQ6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3NS1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTUwPXN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1NC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NTU6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTYtXHRcdFx0XHRcdFx0Ym9vbCBvbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJyaWRnZSYjMzk7cyBQcml2YXRlIEhlYWRlcioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBhcm91bmQgbGluZSAxNTU1LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBzb21lIGNydWNpYWwgaW50ZXJuYWwgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcy4gSSYjMzk7bSBndWVzc2luZyBpdCBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBjb3JlIG9mIHRoZSBicmlkZ2UgaW1wbGVtZW50YXRpb24sIGxpa2VseSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgdGhlIGZvcndhcmRpbmcgZGF0YWJhc2UsIHNwYW5uaW5nIHRyZWUsIG9yIHBlcmhhcHMgc29tZSBpbnRlcm5hbCBldmVudCBoYW5kbGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZSB0byBhZGRyZXNzIG15IGN1cnJlbnQgcHJvYmxlbS4gSSYjMzk7bSByZWFsbHkgaG9waW5nIHRoZXJlIGlzIG5vIHdlaXJkIGxvY2tpbmcuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBsaW5lcyB1cCB3aXRoIG15IGh5cG90aGVzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9wcml2YXRlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1NDA6XHRzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfY3R4X2luaXQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbjE1NDE6XHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbjE1NDI6XHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXG4xNTQzOlx0e1xuMTU0NDpcdH1cbjE1NDU6XHRcbjE1NDY6XHRzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfY3R4X2RlaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbjE1NDc6XHR7XG4xNTQ4Olx0fVxuMTU0OTpcdFxuMTU1MDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXG4xNTUxOlx0XHRcdFx0XHRcdFx0ICAgICAgdTggc3RhdGUpXG4xNTUyOlx0e1xuMTU1MzpcdH1cbjE1NTQ6XHRcbjE1NTU6XHRzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxuMTU1NjpcdFx0XHRcdFx0XHRcdGJvb2wgb24pXG4xNTU3Olx0e1xuMTU1ODpcdH1cbjE1NTk6XHRcbjE1NjA6XHRzdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuMTU2MTpcdFx0XHRcdFx0XHRcdCAgICBib29sIG9uLFxuMTU2MjpcdFx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4xNTYzOlx0e1xuMTU2NDpcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTU2NTpcdH1cbjE1NjY6XHRcbjE1Njc6XHRzdGF0aWMgaW5saW5lIGJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxuMTU2ODpcdFx0XHRcdFx0XHRcdCAgIGJvb2wgb24pXG4xNTY5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njg1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgYmxvY2sgb2YgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ292ZXJuaW5nIGl0cyB2aXNpYmlsaXR5LiBUaGUgYCNpZmRlZmAgZGlyZWN0aXZlIGlzIHRoZSBnaXZlYXdheS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtXaGF0IHByZXByb2Nlc3NvciBtYWNybyBpcyBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiB0aGlzIHNlY3Rpb24/JiMzNDsgSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogaGVyZS4gSXMgdGhpcyBmb3IgYSBzcGVjaWZpYyBwbGF0Zm9ybSwgYSBkZWJ1Z2dpbmcgYnVpbGQsIGFuIG9wdGlvbmFsIGZlYXR1cmUsIG9yIHdoYXQ/IEtub3dpbmcgdGhlIG1hY3JvJiMzOTtzIGRlZmluaXRpb24gKG9yIHBvdGVudGlhbCBkZWZpbml0aW9ucykgaXMgdGhlIGNyaXRpY2FsIG5leHQgc3RlcC4gVGhpcyBpcyBtb3JlIHRoYW4ganVzdCByZWFkaW5nIHRoZSBjb2RlOyBpdOKAmXMgYWJvdXQgZ3Jhc3BpbmcgdGhlIGRlc2lnbiBkZWNpc2lvbnMgdGhhdCBsZWQgdG8gdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb2RlLCBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgbWFjcm9zIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGJlaGF2aW9yIHVuZGVyIHZhcmlvdXMgYnVpbGQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTY5PXN0cnVjdCBtYWNfYWRkciB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzItXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo3MzojaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC03NC0vKiBvdXIgb3duIHF1ZXJpZXIgKi9cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMTg9c3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCB7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMTk6I2lmZGVmIENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTIwLVx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydFx0XHQqcG9ydDtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNDA9c3RydWN0IG5ldF9icmlkZ2VfbWNhc3Qge1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTQxOiNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0Mi1cdHN0cnVjdCBuZXRfYnJpZGdlXHRcdCpicjtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMzk4LVx0dW5zaWduZWQgbG9uZ1x0XHRcdGZsYWdzO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6Mzk5OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00MDAtXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwXHRfX3JjdSAqdmxncnA7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDI2LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NDI3OiNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQyOC1cdHN0cnVjdCBicmlkZ2VfbWNhc3Rfc3RhdHNcdF9fcGVyY3B1ICptY2FzdF9zdGF0cztcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00MzQtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo0MzU6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDM2LVx0Y2hhclx0XHRcdFx0c3lzZnNfbmFtZVtJRk5BTVNJWl07XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDM4LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NDM5OiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDQwLVx0c3RydWN0IG5ldHBvbGxcdFx0XHQqbnA7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00NDEtI2VuZGlmXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo0NDI6I2lmZGVmIENPTkZJR19ORVRfU1dJVENIREVWXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00NDMtXHQvKiBJZGVudGlmaWVyIHVzZWQgdG8gZ3JvdXAgcG9ydHMgdGhhdCBzaGFyZSB0aGUgc2FtZSBzd2l0Y2hkZXZcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01MDA9c3RydWN0IG5ldF9icmlkZ2Uge1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUwNi1cdC8qIFRoZXNlIGZpZWxkcyBhcmUgYWNjZXNzZWQgb24gZWFjaCBwYWNrZXQgKi9cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjUwNzojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTA4LVx0X19iZTE2XHRcdFx0XHR2bGFuX3Byb3RvO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTU1Mi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjU1MzojaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01NTQtXHRzdHJ1Y3QgYnJpZGdlX21jYXN0X3N0YXRzXHRfX3BlcmNwdSAqbWNhc3Rfc3RhdHM7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTc4LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NTc5OiNpZmRlZiBDT05GSUdfTkVUX1NXSVRDSERFVlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTgwLVx0LyogQ291bnRlciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGF0IGhhcmR3YXJlIGRvbWFpbnMgZ2V0IHVuaXF1ZVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTU5Nz1zdHJ1Y3QgYnJfaW5wdXRfc2tiX2NiIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MDAtXHR1MTYgZnJhZ19tYXhfc2l6ZTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjYwMTojaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MDItXHR1OCBpZ21wO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYwOC1cdHU4IGdyYXRfYXJwOjE7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo2MDk6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxMC1cdHU4IHZsYW5fZmlsdGVyZWQ6MTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxMS0jZW5kaWZcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjYxMjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MTMtXHR1OCBicl9uZXRmaWx0ZXJfYnJvdXRlOjE7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNjE1LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NjE2OiNpZmRlZiBDT05GSUdfTkVUX1NXSVRDSERFVlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNjE3LVx0LyogU2V0IGlmIFRYIGRhdGEgcGxhbmUgb2ZmbG9hZGluZyBpcyB1c2VkIHRvd2FyZHMgYXQgbGVhc3Qgb25lXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNjM3LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NjM4OiNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYzOS0jIGRlZmluZSBCUl9JTlBVVF9TS0JfQ0JfTVJPVVRFUlNfT05MWShfX3NrYilcdChCUl9JTlBVVF9TS0JfQ0IoX19za2IpLVx1MDAzZW1yb3V0ZXJzX29ubHkpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NzQyPXN0YXRpYyBpbmxpbmUgdTggYnJfdmxhbl9tdWx0aWNhc3Rfcm91dGVyKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzQ1LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NzQ2OiNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTc0Ny1cdGlmICghYnJfdmxhbl9pc19tYXN0ZXIodikpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9ODEzPW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6ODE0OiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODE1LXN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRwb2xsX3NlbmRfc2tiKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTY5PWludCBicl9pb2N0bF9zdHViKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKnVhcmcpO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTk3MS0vKiBicl9tdWx0aWNhc3QuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTcyOiNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTk3My1pbnQgYnJfbXVsdGljYXN0X3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqKmJybWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTc0PWJyX211bHRpY2FzdF9jdHhfb3B0aW9uc19lcXVhbChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4MSxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTgxLS8qIGJyX3ZsYW4uYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU4MjojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU4My1ib29sIGJyX2FsbG93ZWRfaW5ncmVzcyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTg4OD1zdGF0aWMgaW5saW5lIHUxNiBicl92bGFuX2ZsYWdzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBwdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4OTUtLyogYnJfdmxhbl9vcHRpb25zLmMgKi9cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4OTY6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4OTctYm9vbCBicl92bGFuX29wdHNfZXFfcmFuZ2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdl9jdXJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE5NDM9c3RhdGljIGlubGluZSBib29sIGJyX3ZsYW5fc3RhdGVfYWxsb3dlZCh1OCBzdGF0ZSwgYm9vbCBsZWFybl9hbGxvdylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU2LS8qIGJyX21zdC5jICovXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTU3OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU4LURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShicl9tc3RfdXNlZCk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MjE3Nj1pbnQgYnJfcHJvY2Vzc192bGFuX2luZm8oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIxODItXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMTgzOiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIxODQtLyogYnJfc3lzZnNfaWYuYyAqL1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTIxOTg9c3RhdGljIGlubGluZSB2b2lkIGJyX3N5c2ZzX2RlbGJyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuOyB9XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjIwMS0vKiBicl9zd2l0Y2hkZXYuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjIwMjojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIyMDMtaW50IGJyX3N3aXRjaGRldl9wb3J0X29mZmxvYWQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNjMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgVkxBTiBDb250ZXh0IG9mIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCoqCgpPa2F5LCBzbyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuLi4gcmlnaHQsIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBicl9tdWx0aWNhc3QuY2AuIFRoYXQgbWFrZXMgc2Vuc2UsIGFuZCBJIHJlbWVtYmVyIGl0JiMzOTtzIGNvbnRpbmdlbnQgb24gYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AgYmVpbmcgZW5hYmxlZC4gQnV0IG15IGNvbmNlcm4gKm5vdyogaXMgdGhlIHBhcmFtZXRlcjogaXQgdGFrZXMgYSBgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbmAuIFRoZSBxdWVzdGlvbiB0aGF0IHNwcmluZ3MgdG8gbWluZCBpbW1lZGlhdGVseSBpcywgd2hhdCBoYXBwZW5zIHRvIHRoaXMgc3RydWN0IGlmIFZMQU4gZmlsdGVyaW5nLCBhcyBkZWZpbmVkIGJ5IGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCwgaXMgZGlzYWJsZWQ/IElzIHRoZSBzdHJ1Y3QgZXZlbiBkZWZpbmVkIGluIHRoYXQgc2NlbmFyaW8/IEkgbmVlZCB0byBjbGFyaWZ5IHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGNhbiBhY3R1YWxseSAqd29yayogaW4gdGhhdCBjb25maWd1cmF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuYCwgaW4gdGhpcyBjb250ZXh0LCBoYXMgdG8gYmUgYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYC4gVGltZSB0byBkaXZlIGluIHRoZXJlIGFuZCBzZWUgd2hhdCB0aGUgaW5jbHVkZSBkZXBlbmRlbmNpZXMgbG9vayBsaWtlIGZvciB0aGF0IHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG5ldF9icmlkZ2VfdmxhbiBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xODM9ZW51bSB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjIwLSAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjIxOnN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4ge1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjIyLVx0c3RydWN0IHJoYXNoX2hlYWRcdFx0dm5vZGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjMzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgZm9yIFZMQU4gRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgYCNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gVGhpcyBpcyB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7ZCBsb29rIHRvIHNlZSBpZiBWTEFOIGZpbHRlcmluZyBmdW5jdGlvbmFsaXR5IGlzIGV2ZW4gKmNvbXBpbGVkKiBpbnRvIHRoZSBrZXJuZWwgZm9yIHRoZSBicmlkZ2luZyBjb25maWd1cmF0aW9uLiBXaXRob3V0IHRoYXQsIHRoZXJlJiMzOTtzIG5vIHBvaW50IGluIGRpZ2dpbmcgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIEl0JiMzOTtzIHRoZSBtb3N0IGZ1bmRhbWVudGFsIHByZWxpbWluYXJ5IGNoZWNrIHRvIG1ha2UgYmVmb3JlIEkgd2FzdGUgdGltZSBvbiBtb3JlIGNvbXBsaWNhdGVkIHBhcnRzIG9mIHRoZSBjb2RlLiBGaW5kaW5nIHRoaXMgd2lsbCBpbmZvcm0gbXkgc3Vic2VxdWVudCBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHQgKiBAcG9ydF9tY2FzdF9jdHg6IGlmIE1BU1RFUiBmbGFnIHVuc2V0LCB0aGlzIGlzIHRoZSBwZXItcG9ydC92bGFuIG11bHRpY2FzdFxuIDIxMTpcdCAqICAgICAgICAgICAgICAgICAgY29udGV4dFxuIDIxMjpcdCAqIEBtc3RpOiBpZiBNQVNURVIgZmxhZyBzZXQsIHRoaXMgaG9sZHMgdGhlIFZMQU5zIE1TVCBpbnN0YW5jZVxuIDIxMzpcdCAqIEB2bGlzdDogc29ydGVkIGxpc3Qgb2YgVkxBTiBlbnRyaWVzXG4gMjE0Olx0ICogQHJjdTogdXNlZCBmb3IgZW50cnkgZGVzdHJ1Y3Rpb25cbiAyMTU6XHQgKlxuIDIxNjpcdCAqIFRoaXMgc3RydWN0dXJlIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBnbG9iYWwgcGVyLVZMQU4gZW50cmllcyBjb250YWluZWQgaW5cbiAyMTc6XHQgKiB0aGUgYnJpZGdlIHJoYXNodGFibGUgYW5kIHRoZSBsb2NhbCBwZXItcG9ydCBwZXItVkxBTiBlbnRyaWVzIGNvbnRhaW5lZCBpblxuIDIxODpcdCAqIHRoZSBwb3J0JiMzOTtzIHJoYXNodGFibGUuIFRoZSB1bmlvbiBlbnRyaWVzIHNob3VsZCBiZSBpbnRlcnByZXRlZCBkZXBlbmRpbmcgb25cbiAyMTk6XHQgKiB0aGUgZW50cnkgZmxhZ3MgdGhhdCBhcmUgc2V0LlxuIDIyMDpcdCAqL1xuIDIyMTpcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4ge1xuIDIyMjpcdFx0c3RydWN0IHJoYXNoX2hlYWRcdFx0dm5vZGU7XG4gMjIzOlx0XHRzdHJ1Y3Qgcmhhc2hfaGVhZFx0XHR0bm9kZTtcbiAyMjQ6XHRcdHUxNlx0XHRcdFx0dmlkO1xuIDIyNTpcdFx0dTE2XHRcdFx0XHRmbGFncztcbiAyMjY6XHRcdHUxNlx0XHRcdFx0cHJpdl9mbGFncztcbiAyMjc6XHRcdHU4XHRcdFx0XHRzdGF0ZTtcbiAyMjg6XHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzIF9fcGVyY3B1ICpzdGF0cztcbiAyMjk6XHRcdHVuaW9uIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVkxBTiBhbmQgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIG15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IGBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuYCBpcyBhbHdheXMgcHJlc2VudCwgd2hpY2ggc2VlbXMgcmVhc29uYWJsZSBnaXZlbiBpdHMgdWJpcXVpdG91cyB1c2UgaW4gYnJpZGdpbmcuIEJ1dCBub3cgSSBuZWVkIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyBvZiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIEkgc3VzcGVjdCBpdCYjMzk7cyBsaW5rZWQgdG8gSUdNUCBzbm9vcGluZy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlLgoKQWxyaWdodCwgY2hlY2tpbmcgYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYCwgSSBzZWUgbXkgaHVuY2ggd2FzIGNvcnJlY3QuIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCAqaXMqIGluZGVlZCB3cmFwcGVkIGluIGFuIGAjaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYCBibG9jay4gVGhhdCBtZWFucyB0aGF0IHRvIGhhdmUgdGhhdCBmdW5jdGlvbiBkZWZpbmVkLCBgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYCAqbXVzdCogYmUgZW5hYmxlZC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgYSBoYXJkIHJlcXVpcmVtZW50PyBMZXQmIzM5O3MgdHJhY2UgdGhlIGNhbGxzIHRvIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gTG9va3MgbGlrZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBicl92bGFuLmNgIGFuZCBgYnJfbXVsdGljYXN0LmNgLiBTbyBsZXQmIzM5O3MgbG9vayBhdCBgYnJfdmxhbi5jYCBhbmQgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMjE0LVx0XHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMTU6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMjE2LVx0XHRicl9tdWx0aWNhc3RfY3R4X2RlaW5pdChcdTAwMjZtYXN0ZXJ2LVx1MDAzZWJyX21jYXN0X2N0eCk7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVx0X192bGFuX2ZsYWdzX2NvbW1pdCh2LCBmbGFncyk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTk6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIHRydWUpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMzYwLVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM5MD1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjctXHRcdG5icF92bGFuX3NldF92bGFuX2Rldl9zdGF0ZShwLCB2LVx1MDAzZXZpZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0Mjg6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtNDI5LVx0XHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnYtXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTcxOT1zdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjAtXHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc2MTpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2Mi1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgYnJfdmxhbi5jYCoqCgpPa2F5LCBJIG5lZWQgdG8gZmlndXJlIG91dCBzb21ldGhpbmcgYWJvdXQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBicmlkZ2UgVkxBTiBmaWx0ZXJpbmcgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGUgYGJyX3ZsYW4uY2AgZmlsZSBnZXRzIGNvbXBpbGVkIGV2ZW4gd2hlbiB0aGUgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkaXNhYmxlZC4gSXQgc2VlbXMgYSBiaXQgb2RkIGlmIGl0IGRvZXMsIGFuZCBpdCB3b3VsZCBiZSBhIGdvb2Qgb3B0aW1pemF0aW9uIGlmIGl0IGRpZG4mIzM5O3QuIFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0IGRlYWxzIHdpdGggdGhlIGJ1aWxkIHByb2Nlc3MsIGlzIHRvIGNoZWNrIHRoZSBgbmV0L2JyaWRnZS9NYWtlZmlsZWAuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3Mgb3IgZGlyZWN0aXZlcy4gSSYjMzk7bGwgc2VlIHdoYXQgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfdmxhblxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvTWFrZWZpbGU9MjE9YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSAmIzQzOz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTIyLVxubmV0L2JyaWRnZS9NYWtlZmlsZToyMzpicmlkZ2UtJChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKSAmIzQzOz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjA2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBCcmlkZ2UgVkxBTiBhbmQgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBicl92bGFuLmNgIGlzIGRlZmluaXRlbHkgY29uZGl0aW9uYWxseSBjb21waWxlZCwgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdGhlIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgd2FzIGp1c3QgcmV2aWV3aW5nIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBjb25maXJtIHRob3NlIGJ1aWxkLXRpbWUgZmxhZ3MuCgpOb3csIHRoYXQgYnJpbmdzIG1lIHRvIGBicl9tdWx0aWNhc3QuY2AuIEFoLCB5ZXMsIHRoaXMgb25lIGlzIGdvdmVybmVkIGJ5IGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgLiBJIHNlZSB0aGUgY29ubmVjdGlvbiBub3cuIEkmIzM5O20gbm90aW5nIHRoZSBjbGVhciBsaW5rIHRoZXJlIGJldHdlZW4gdGhlIElHTVAgc25vb3BpbmcgZnVuY3Rpb25hbGl0eSBhbmQgdGhpcyBtb2R1bGUuCgpBbmQgdGhlbiB3aXRoaW4gYGJyX211bHRpY2FzdC5jYCwgSSYjMzk7dmUgbm90aWNlZCB0aGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYC4gR29vZCB0byBrZWVwIHRoYXQgaGllcmFyY2h5IG9mIGZ1bmN0aW9uIGNhbGxzIGFuZCBkZXBlbmRlbmNpZXMgaW4gbWluZC4gVGhhdCBpbnRlcm5hbCByZWxhdGlvbnNoaXAgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbXVsdGljYXN0IFZMQU4gb3BlcmF0aW9ucyBhcmUgc3RydWN0dXJlZC4gSSBzaG91bGQgYmUgYWJsZSB0byBtYWtlIGluZmVyZW5jZXMgZnJvbSB0aGUgZmFjdCBvZiBvbmUgY2FsbGluZyB0aGUgb3RoZXIsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgZGVidWdnaW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlJiMzOTtzIGV4ZWN1dGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM2Nj12b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTAtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MTE6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTIte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQzMTppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMi1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0NjQtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0NjU6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0NjYtXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NDcwPWJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQ4MC1cdHZsYW4tXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfR0xPQkFMX01DQVNUX0VOQUJMRUQ7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0ODE6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4odmxhbiwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDgyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQnJpZGdlIE11bHRpY2FzdCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGJhY2sgaW50byB0aGlzIGJyaWRnZSBtdWx0aWNhc3QgY29kZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRob3NlIGNydWNpYWwgZnVuY3Rpb25zOiBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW5gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBiZWhhdmlvciwgZXNwZWNpYWxseSBpbiB0aGF0IHNwZWNpZmljIHNjZW5hcmlvIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluIOKAkyB3aGVuIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBkaXNhYmxlZC4gQXJlIHRoZXNlIGZ1bmN0aW9ucyBldmVuIHJlbGV2YW50IGluIHRoYXQgY29udGV4dD8gSSBzdXNwZWN0IHRoZXkgbWlnaHQgbm90IGJlLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uIE15IGd1dCBzYXlzIHRoZXkgc2hvdWxkbiYjMzk7dCBiZSBleGVjdXRlZCwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBjYWxscyBhcmUgaGFuZGxlZCBhcHByb3ByaWF0ZWx5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byBgYnJfbXVsdGljYXN0LmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzAzLVx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XG5uZXQvYnJpZGdlL2JyLmM6MzA0Olx0XHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xubmV0L2JyaWRnZS9ici5jLTMwNS1cdFx0YnJlYWs7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NDExPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQzMTppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMi1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDc0PXZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwNzU6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDc2LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTU1PXN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1OS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NjA6c3RhdGljIGlubGluZSBpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjEtXHRcdFx0XHRcdFx0ICAgIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9ODk0PWludCBicl92bGFuX2ZpbHRlcl90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MjAtXHRcdGJyX2luZm8oYnIsIFwmIzM0O3ZsYW4gZmlsdGVyaW5nIGRpc2FibGVkLCBhdXRvbWF0aWNhbGx5IGRpc2FibGluZyBtdWx0aWNhc3QgdmxhbiBzbm9vcGluZ1xcblwmIzM0Oyk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo5MjE6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhiciwgZmFsc2UsIE5VTEwpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtOTIyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM2MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEJyaWRnZSBWTEFOIEZpbHRlcmluZyBCZWhhdmlvcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJyLmNgIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbiBgYnJfYm9vbG9wdF90b2dnbGVgLiBJIHNlZSB0aGF0IGl0IGNhbGxzIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLiBOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXA6IGRvZXMgYGJyX2Jvb2xvcHRfdG9nZ2xlYCBldmVuIGdldCBjb21waWxlZCB3aGVuIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBkaXNhYmxlZD8gSXQgc2VlbXMgYGJyLmNgICphbHdheXMqIGdldHMgY29tcGlsZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKQnV0IGhhbmcgb24sIGEgcmVkIGZsYWchIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGxpa2VseSBhY2Nlc3NlcyBgYnJfdmxhbl9ncm91cChicilgLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoZSBWTEFOIGZpbHRlcmluZyBmdW5jdGlvbmFsaXR5IG1pZ2h0IHN0aWxsIGJlIGNyZWVwaW5nIGluLiBMZXQgbWUgcXVpY2tseSBqdW1wIG92ZXIgdG8gYGJyX211bHRpY2FzdC5jYCBhbmQgZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgdG8gY29uZmlybSBteSBzdXNwaWNpb24gYW5kIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgbW9yZSBjbGVhcmx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZsYW5fZ3JvdXAgaXMgYWNjZXNzZWQgdG8gY29uZmlybSB0aGlzIHBvdGVudGlhbCBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0MzA6XHRcbjQ0MzE6XHRpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbjQ0MzI6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjQ0MzM6XHR7XG40NDM0Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcbjQ0MzU6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW47XG40NDM2Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuNDQzNzpcdFxuNDQzODpcdFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkgPT0gb24pXG40NDM5Olx0XHRcdHJldHVybiAwO1xuNDQ0MDpcdFxuNDQ0MTpcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNiAhYnJfb3B0X2dldChiciwgQlJPUFRfVkxBTl9FTkFCTEVEKSkge1xuNDQ0MjpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDYW5ub3QgZW5hYmxlIG11bHRpY2FzdCB2bGFuIHNub29waW5nIHdpdGggdmxhbiBmaWx0ZXJpbmcgZGlzYWJsZWRcJiMzNDspO1xuNDQ0MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ0NDQ6XHRcdH1cbjQ0NDU6XHRcbjQ0NDY6XHRcdHZnID0gYnJfdmxhbl9ncm91cChicik7XG40NDQ3Olx0XHRpZiAoIXZnKVxuNDQ0ODpcdFx0XHRyZXR1cm4gMDtcbjQ0NDk6XHRcbjQ0NTA6XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCwgb24pO1xuNDQ1MTpcdFxuNDQ1MjpcdFx0LyogZGlzYWJsZS9lbmFibGUgbm9uLXZsYW4gbWNhc3QgY29udGV4dHMgYmFzZWQgb24gdmxhbiBzbm9vcGluZyAqL1xuNDQ1MzpcdFx0aWYgKG9uKVxuNDQ1NDpcdFx0XHRfX2JyX211bHRpY2FzdF9zdG9wKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9jdHgpO1xuNDQ1NTpcdFx0ZWxzZVxuNDQ1NjpcdFx0XHRfX2JyX211bHRpY2FzdF9vcGVuKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9jdHgpO1xuNDQ1NzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcdTAwMjZici1cdTAwM2Vwb3J0X2xpc3QsIGxpc3QpIHtcbjQ0NTg6XHRcdFx0aWYgKG9uKVxuNDQ1OTpcdFx0XHRcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KFx1MDAyNnAtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG40NDYwOlx0XHRcdGVsc2VcbjQ0NjE6XHRcdFx0XHRicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KFx1MDAyNnAtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG40NDYyOlx0XHR9XG40NDYzOlx0XG40NDY0Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpXG40NDY1Olx0XHRcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XG40NDY2Olx0XG40NDY3Olx0XHRyZXR1cm4gMDtcbjQ0Njg6XHR9XG40NDY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgVkxBTiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBicl92bGFuX2dyb3VwKGJyKWAgaGVyZS4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVmaW5pdGVseSBsZXZlcmFnaW5nIFZMQU5zIHdpdGggdGhpcyBicmlkZ2UgKGBicmApLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJJiMzOTtsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMsIGFuZCBtb3N0IGxpa2VseSBJJiMzOTtsbCBmaW5kIHRoZSBkZWZpbml0aW9uIGluIGBicl9wcml2YXRlLmhgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIFZMQU4tcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHdvdWxkIGJlIGRlZmluZWQsIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcm5hbHMgb2YgdGhpcyBjb25maWd1cmF0aW9uLiBLbm93aW5nIHRoZSBkZXRhaWxzIGluIGBicl9wcml2YXRlLmhgIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgY29udGV4dCBvZiBob3cgdGhlc2UgVkxBTnMgYXJlIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl92bGFuX2dyb3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9wcml2YXRlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTY0MD1pbnQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjQzLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTY0NDpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKmJyX3ZsYW5fZ3JvdXAoXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjQ1LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTY1MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKm5icF92bGFuX2dyb3VwKFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2NTUtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNjU2OnN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqYnJfdmxhbl9ncm91cF9yY3UoXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjU3LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTgxMj1zdGF0aWMgaW5saW5lIGludCBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX21vZGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4MTgtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxODE5OnN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqYnJfdmxhbl9ncm91cChcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4MjAtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicilcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xODI1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqbmJwX3ZsYW5fZ3JvdXAoXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTgzMC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4MzE6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpicl92bGFuX2dyb3VwX3JjdShcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4MzItXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMjgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBicl9wcml2YXRlLmhgIC0gU3BlY2lmaWNhbGx5LCBMaW5lIDE4MTkqKgoKT2theSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYCBoZWFkZXIgZmlsZS4gTXkgaW50ZXJlc3QgaXMgcGlxdWVkLCBhbmQgSSBuZWVkIHRvIHpvb20gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTgxOS4gSSYjMzk7bSBsaWtlbHkgY2hhc2luZyBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGRlZmluaXRpb24sIG9yIHBlcmhhcHMgYSBtYWNybywgZnVuY3Rpb24gc2lnbmF0dXJlLCBvciBjb25zdGFudCB2YWx1ZSB0aGF0JiMzOTtzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkgb3IgYSBidWcgSSYjMzk7bSB0cnlpbmcgdG8gZGlhZ25vc2UuIEdpdmVuIHRoZSBmaWxlIGFuZCB0aGUgbGluZSBudW1iZXIsIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIGxvdy1sZXZlbCBhbmQgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgaW50ZXJuYWwgd29ya2luZ3Mgb2YgdGhlIExpbnV4IGJyaWRnZSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgdG8gbmF2aWdhdGUgdGhyb3VnaCBtYWNybyBkZWZpbml0aW9ucywgc3RydWN0dXJlIG1lbWJlcnMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGlubGluZSBjb21tZW50cyB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGUgY29kZSBhdCB0aGF0IHNwZWNpZmljIGxvY2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgxMDpcdH1cbjE4MTE6XHRcbjE4MTI6XHRzdGF0aWMgaW5saW5lIGludCBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX21vZGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuMTgxMzpcdFx0XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpkc3QsXG4xODE0Olx0XHRcdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4xODE1Olx0e1xuMTgxNjpcdFx0cmV0dXJuIDA7XG4xODE3Olx0fVxuMTgxODpcdFxuMTgxOTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqYnJfdmxhbl9ncm91cChcbjE4MjA6XHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuMTgyMTpcdHtcbjE4MjI6XHRcdHJldHVybiBOVUxMO1xuMTgyMzpcdH1cbjE4MjQ6XHRcbjE4MjU6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKm5icF92bGFuX2dyb3VwKFxuMTgyNjpcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuMTgyNzpcdHtcbjE4Mjg6XHRcdHJldHVybiBOVUxMO1xuMTgyOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NjMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVkxBTiBGaWx0ZXJpbmcgYW5kIE11bHRpY2FzdCBTbm9vcGluZyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgYnJfdmxhbl9ncm91cGAgcmV0dXJucyBgTlVMTGAgd2hlbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZGlzYWJsZWQuIFRoaXMgaXMga2V5LiBMb29raW5nIGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLCB0aGUgY29kZSBjaGVja3MgZm9yIHRoaXMgYE5VTExgIHJldHVybjsgaWYgaXQgaXMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAuIFRoYXQgbWVhbnMgaWYgVkxBTiBmaWx0ZXJpbmcgaXMgb2ZmLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYCBpdHNlbGYgaXMgbmV2ZXIgaW52b2tlZC4gU28sIHRoZSBtb2RpZmllZCBjb2RlIHBhdGggaXMgaW5hY2Nlc3NpYmxlIHdpdGhvdXQgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLgoKSSB3YW50IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgc28gSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgd2hlcmUgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIGFjdHVhbGx5IGNhbGxlZC4gV2l0aGluIGBicl92bGFuLmNgLCB0aGUgY2FsbHMgb3JpZ2luYXRlIGZyb20gYGJyX3ZsYW5fcHV0X21hc3RlcmAsIGBfX3ZsYW5fYWRkYCwgYF9fdmxhbl9kZWxgLCBhbmQgYGJyX3ZsYW5fYWRkX2V4aXN0aW5nYC4gTm93LCBjcml0aWNhbGx5LCBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbHNvIGNvbmRpdGlvbmFsIG9uIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gVGhpcyBjb25maXJtcyBteSBzdXNwaWNpb246IGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBhbiBhYnNvbHV0ZSBwcmVyZXF1aXNpdGUgdG8gcmVhY2ggYW55IG9mIHRoZXNlIHJlbGV2YW50IGNvZGUgc2VjdGlvbnMuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgYXJlIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBkZXBlbmRlbmNpZXMgY29tcGxldGVseS4gSXQgbG9va3MgbGlrZSBgQlJJREdFX0lHTVBfU05PT1BJTkdgIGRlcGVuZHMgb24gYEJSSURHRWAgYW5kIGBJTkVUYC4gYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgZGVwZW5kcyBvbiBgQlJJREdFYCBhbmQgYFZMQU5fODAyMVFgLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6CgoqICAgYEJSSURHRWAKKiAgIGBJTkVUYAoqICAgYFZMQU5fODAyMVFgCiogICBgQlJJREdFX0lHTVBfU05PT1BJTkdgCiogICBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYAoKTm93LCB0aW1lIHRvIGxvb2sgaW50byBgVkxBTl84MDIxUWAgYW5kIGFueSBvdGhlciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkxBTl84MDIxUSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC84MDIxcS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9LY29uZmlnLTUtXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXG5uZXQvODAyMXEvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XCYjMzQ7XG4tLVxubmV0LzgwMjFxL0tjb25maWctMjEtXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7R1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC84MDIxcS9LY29uZmlnLTMxLVxubmV0LzgwMjFxL0tjb25maWc6MzI6Y29uZmlnIFZMQU5fODAyMVFfTVZSUFxubmV0LzgwMjFxL0tjb25maWctMzMtXHRib29sIFwmIzM0O01WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzYxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZToKCioqRGl2aW5nIGludG8gdGhlIDgwMi4xUSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgbmV0LzgwMjFxL0tjb25maWdgIGZpbGUgYW5kIHplcm8gaW4gYXJvdW5kIGxpbmUgNi4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgODAyLjFRIFZMQU4gaGFuZGxpbmcgaW4gdGhlIGtlcm5lbCBhcmUgbGlrZWx5IHRvIGJlIGRlZmluZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY2VudHJhbCBlbmFibGUvZGlzYWJsZSBzd2l0Y2ggZm9yIHRoZSA4MDIuMVEgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBEZXBlbmRpbmcgb24gaG93IHRoaXMgaXMgc3RydWN0dXJlZCwgSSBtaWdodCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlLCBvciBpZiB0aGlzIGlzIHRoZSBnZW5lcmljIFZMQU4gaW1wbGVtZW50YXRpb24gb3IgaWYgdGhlcmUgYXJlIHNwZWNpZmljIGhhcmR3YXJlIGhvb2tzIGluIHRoaXMgZmlsZS4gSSYjMzk7bSBhbHNvIGhvcGluZyB0aGF0IHRoaXMgc2VjdGlvbiBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgZGVmYXVsdCBiZWhhdmlvciBvciBwb3RlbnRpYWxseSBzb21lIGNyaXRpY2FsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMuIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgaG93IGNsZWFubHkgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIHRvby4gSSByZWFsbHkgaG9wZSB0aGlzIGlzbiYjMzk7dCBqdXN0IGEgYmFzaWMsIGxvdy1sZXZlbCBlbmFibGUvZGlzYWJsZTsgSSYjMzk7ZCBsaWtlIHRvIHNlZSBzb21lIHRob3VnaHRmdWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0LzgwMjFxL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBDb25maWd1cmF0aW9uIGZvciA4MDIuMVEgVkxBTiBzdXBwb3J0XG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBWTEFOXzgwMjFRXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDs4MDIuMVEvODAyLjFhZCBWTEFOIFN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgU2VsZWN0IHRoaXMgYW5kIHlvdSB3aWxsIGJlIGFibGUgdG8gY3JlYXRlIDgwMi4xUSBWTEFOIGludGVyZmFjZXNcbiAgMTA6XHRcdCAgb24geW91ciBFdGhlcm5ldCBpbnRlcmZhY2VzLiA4MDIuMVEgVkxBTiBzdXBwb3J0cyBhbG1vc3RcbiAgMTE6XHRcdCAgZXZlcnl0aGluZyBhIHJlZ3VsYXIgRXRoZXJuZXQgaW50ZXJmYWNlIGRvZXMsIGluY2x1ZGluZ1xuICAxMjpcdFx0ICBmaXJld2FsbGluZywgYnJpZGdpbmcsIGFuZCBvZiBjb3Vyc2UgSVAgdHJhZmZpYy4gWW91IHdpbGwgbmVlZFxuICAxMzpcdFx0ICB0aGUgJiMzOTtpcCYjMzk7IHV0aWxpdHkgaW4gb3JkZXIgdG8gZWZmZWN0aXZlbHkgdXNlIFZMQU5zLlxuICAxNDpcdFx0ICBTZWUgdGhlIFZMQU4gd2ViIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb246XG4gIDE1Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cuY2FuZGVsYXRlY2guY29tL35ncmVlYXIvdmxhbi5odG1sXHUwMDNlXG4gIDE2Olx0XG4gIDE3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDE4Olx0XHQgIHdpbGwgYmUgY2FsbGVkIDgwMjFxLlxuICAxOTpcdFxuICAyMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzODYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJyaWRnZSBNdWx0aWNhc3QgVG9nZ2xlIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaGF2ZSBhbnkgZXhwbGljaXQgZGVwZW5kZW5jaWVzIGJlc2lkZXMsIHdlbGwsIHRoZSBvYnZpb3VzIG5lZWQgZm9yIGEgbmV0d29yayBzdGFja+KAlHNvbWV0aGluZyBsaWtlIGBORVRgLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyBuZWVkaW5nIGFueSBzcGVjaWFsIGF0dGVudGlvbiBvciBleG90aWMgbGlicmFyaWVzLCB3aGljaCBpcyBnb29kLgoKVGhhdCBtZWFucyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBJJiMzOTtsbCBuZWVkIGBCUklER0VgLCBgSU5FVGAsIGBWTEFOXzgwMjFRYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBUaG9zZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIEkmIzM5O2QgZXhwZWN0IHRvIHNlZS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gTXkgZm9jdXMgaXMgb24gdGhpcyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgdGhlIG9uZSBiZWluZyBtb2RpZmllZCwgYWZ0ZXIgYWxsLiBSaWdodCwgc28gd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBnZXR0aW5nIGNhbGxlZCBmcm9tPyBJIHNlZSBhIGxpc3Qgb2YgZnVuY3Rpb25zIGNhbGxpbmcgaXQ6IGBicl92bGFuX3B1dF9tYXN0ZXJgLCBgX192bGFuX2FkZGAsIGBfX3ZsYW5fZGVsYCwgYGJyX3ZsYW5fYWRkX2V4aXN0aW5nYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gLiBUaGVzZSBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMgaW50ZXJuYWxseSwgd2hpY2ggbmFycm93cyBkb3duIHRoZSBzY29wZSBhIGJpdC4KClRoZSBuZXh0IHN0ZXAgaXMgdG8gZmluZCB0aGUgcHVibGljIEFQSSBlbnRyeSBwb2ludHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGNhbGwgdGhlc2UgaW50ZXJuYWwgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjaGFuZ2UgcHJvcGFnYXRlcyBvdXR3YXJkcy4gTG9va2luZyBhdCBpdCwgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYCBhcmUgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuYC4KCk5vdyBJJiMzOTtsbCBzaGlmdCBnZWFycyBhbmQgbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGltcGFjdCBvZiBhbnkgY2hhbmdlIHRvIHRoZSBjb3JlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyLmM9Mjk0PWludCBicl9ib29sb3B0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGVudW0gYnJfYm9vbG9wdF9pZCBvcHQsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9ici5jLTMwMy1cdGNhc2UgQlJfQk9PTE9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HOlxubmV0L2JyaWRnZS9ici5jOjMwNDpcdFx0ZXJyID0gYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKGJyLCBvbiwgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnIuYy0zMDUtXHRcdGJyZWFrO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDQxMT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MzAtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MzE6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MzItXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTA3ND12b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDc1OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3Ni1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU1NT1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTktXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTYwOnN0YXRpYyBpbmxpbmUgaW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTYxLVx0XHRcdFx0XHRcdCAgICBib29sIG9uLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTg5ND1pbnQgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtOTIwLVx0XHRicl9pbmZvKGJyLCBcJiMzNDt2bGFuIGZpbHRlcmluZyBkaXNhYmxlZCwgYXV0b21hdGljYWxseSBkaXNhYmxpbmcgbXVsdGljYXN0IHZsYW4gc25vb3BpbmdcXG5cJiMzNDspO1xubmV0L2JyaWRnZS9icl92bGFuLmM6OTIxOlx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIGZhbHNlLCBOVUxMKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTkyMi1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3ODYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOgoKKipEaWdnaW5nIGludG8gQnJpZGdlIGFuZCBWTEFOIEludGVyYWN0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGEgY291cGxlIG9mIGtleSB0b2dnbGUgb3B0aW9ucyBoZXJlOiBgYnJfYm9vbG9wdF90b2dnbGVgIGFuZCBgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlYC4gU2VlbXMgbGlrZSBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBpbnRlcmFjdCwgb3IgaG93IGEgY2hhbmdlIGluIG9uZSBhZmZlY3RzIHRoZSBvdGhlci4gR29vZCB0byBrZWVwIHRoZXNlIGludGVyYWN0aW9ucyBmaXJtbHkgaW4gbWluZCwgZXNwZWNpYWxseSB3aXRoIG1vcmUgZHluYW1pYyBzeXN0ZW1zIGluIHBsYWNlLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdyBnb2luZyB0byBkcmlsbCBkb3duIGFuZCBleGFtaW5lIHRoZSBjYWxsIHNpdGVzIGZvciBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAuIFRoaXMgc3VnZ2VzdHMgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiBnbG9iYWwgVkxBTiBjb25maWd1cmF0aW9uIG9uIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYnJpZGdlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aG9zZSBjYWxscywgYW5kIHdoYXQgdGhlIG92ZXJhbGwgaW1wYWN0IGlzLiBUaGlzJiMzOTtsbCBoZWxwIG1lIHNlZSBpZiB0aGUgdG9nZ2xlcyBoYXZlIGltcGxpY2F0aW9ucyBvbiBhbnkgZ2xvYmFsIGZ1bmN0aW9ucy4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJkZXBlbmRlbmNpZXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MzE9aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDY5LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDcwOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDcxLXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDc1PWludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3Ni1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDc3OmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzgtXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU2MD1zdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjYtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTY3OnN0YXRpYyBpbmxpbmUgYm9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTY4LVx0XHRcdFx0XHRcdCAgIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz01NTA9c3RhdGljIGludCBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTU2NC1cdFx0bWNfc25vb3BpbmcgPSBubGFfZ2V0X3U4KHRiW0JSSURHRV9WTEFOREJfR09QVFNfTUNBU1RfU05PT1BJTkddKTtcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NTY1Olx0XHRpZiAoYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbih2LCAhIW1jX3Nub29waW5nKSlcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTY2LVx0XHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgYXMgdGhvdWdoIGl0IHdlcmUgbXkgdHJhaW4gb2YgdGhvdWdodDoKCioqRGlnZ2luZyBpbnRvIHRoZSBWTEFOIE11bHRpY2FzdCBGbG93KioKCk9rYXksIHNvIGBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGluIHRoaXMgbXVsdGljYXN0IHBhdGgsIGFuZCBpdCBjYWxscyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgbGluZWFnZSBhbmQgc2VlIHdob+KAmXMgYWN0dWFsbHkgdHJpZ2dlcmluZyB0aGlzIHBhcnRpY3VsYXIgY2FsbCBjaGFpbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzYC4gS25vd2luZyBpdHMgZGlyZWN0IGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBnbG9iYWwgVkxBTiBtdWx0aWNhc3Qgc2V0dGluZ3MgYXJlIHVsdGltYXRlbHkgYWRqdXN0ZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGNvbnRleHQsIGFuZCBoZWxwIG1lIHJlYXNvbiBhYm91dCB0aGUgcG9zc2libGUgaW1wYWN0IG9mIGNoYW5nZXMgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW5gIHNpbmNlIHRoaXMgY2FsbCBjaGFpbiBzZWVtcyBjZW50cmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz01MDg9c3RhdGljIHZvaWQgYnJfdmxhbl9nbG9iYWxfb3B0c19ub3RpZnkoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTQ5LVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo1NTA6c3RhdGljIGludCBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTUxLVx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jPTY4NT1pbnQgYnJfdmxhbl9ydG1fcHJvY2Vzc19nbG9iYWxfb3B0aW9ucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNzQ0LVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo3NDU6XHRcdGVyciA9IGJyX3ZsYW5fcHJvY2Vzc19nbG9iYWxfb25lX29wdHMoYnIsIHZnLCB2LCB0YiwgXHUwMDI2Y2hhbmdlZCxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNzQ2LVx0XHRcdFx0XHRcdCAgICAgIGV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTYzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkFuYWx5emluZyBWTEFOIENvbmZpZ3VyYXRpb24gUHJvY2Vzc2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGJyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnNgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCBjYWxscyBgYnJfdmxhbl9wcm9jZXNzX2dsb2JhbF9vbmVfb3B0c2AuIE5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHVuZGVybHlpbmcgcHJvY2Vzc2VzLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBmbG93IG9mIHRoaW5ncyBhIGJpdCBmdXJ0aGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNhbGxpbmcgdGhlIGNvcmUgVkxBTiBmdW5jdGlvbnMgLSBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaW5kIGFsbCB0aGUgY2FsbGVycyBvZiBgX192bGFuX2FkZGAsIGBfX3ZsYW5fZGVsYCwgYGJyX3ZsYW5fYWRkX2V4aXN0aW5nYCwgYW5kIGBicl92bGFuX3B1dF9tYXN0ZXJgLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgaW4gY29udGV4dCBvZiB0aGUgZ2xvYmFsIG9wdGlvbnMgcHJvY2Vzc2luZywgaXMga2V5IHRvIGZ1bGx5IHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X192bGFuX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jPTMyPXN0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICpicl92bGFuX2xvb2t1cChzdHJ1Y3Qgcmhhc2h0YWJsZSAqdGJsLCB1MTYgdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM2LVxubmV0L2JyaWRnZS9icl92bGFuLmM6Mzc6c3RhdGljIHZvaWQgX192bGFuX2FkZF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzgtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9NjE9c3RhdGljIGJvb2wgX192bGFuX2ZsYWdzX3VwZGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNzktXHRpZiAoZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRClcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjgwOlx0XHRfX3ZsYW5fYWRkX3B2aWQodmcsIHYpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtODEtXHRlbHNlXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTAzPXN0YXRpYyBpbnQgX192bGFuX3ZpZF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyMy1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEyNDpzdGF0aWMgdm9pZCBfX3ZsYW5fYWRkX2xpc3Qoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyNS17XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjM0PXN0YXRpYyB2b2lkIGJyX3ZsYW5faW5pdF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTI2Mi0gKi9cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjI2MzpzdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjY0LVx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU2LVxubmV0L2JyaWRnZS9icl92bGFuLmM6MzU3Olx0X192bGFuX2FkZF9saXN0KHYpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVx0X192bGFuX2ZsYWdzX2NvbW1pdCh2LCBmbGFncyk7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9Nzc5PWludCBicl92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQsIHUxNiBmbGFncywgYm9vbCAqY2hhbmdlZCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04MDktXHRcdHJlZmNvdW50X3NldChcdTAwMjZ2bGFuLVx1MDAzZXJlZmNudCwgMSk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4MTA6XHRyZXQgPSBfX3ZsYW5fYWRkKHZsYW4sIGZsYWdzLCBleHRhY2spO1xubmV0L2JyaWRnZS9icl92bGFuLmMtODExLVx0aWYgKHJldCkge1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTEzMTU9aW50IG5icF92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTM0Ny1cdHZsYW4tXHUwMDNlcG9ydCA9IHBvcnQ7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMzQ4Olx0cmV0ID0gX192bGFuX2FkZCh2bGFuLCBmbGFncywgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEzNDktXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW50ZXJuYWwgTmV0d29yayBWTEFOIENvbnNpZGVyYXRpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IFZMQU4gYXNzaWdubWVudHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBvcGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBhZGRpbmcgVkxBTnMuICYjMzQ7YnJfdmxhbl9hZGQmIzM0OyBpbW1lZGlhdGVseSBicmluZ3MgdG8gbWluZCB0aGUgYnJpZGdlIGludGVyZmFjZSwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYWRkaW5nIGEgVkxBTiB0YWcgdG8gYSBicmlkZ2UgaW50ZXJmYWNlLiBJJiMzOTttIGNvbnNpZGVyaW5nIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGZsb29kaW5nIGRvbWFpbnMsIGFuZCBob3cgdGhpcyB3aWxsIGFmZmVjdCB0cmFmZmljIGZvcndhcmRpbmcuIFRoZXJlIGFyZSB0aGUgdXN1YWwgc2VjdXJpdHkgY29uY2VybnMgSSYjMzk7bSBmYWN0b3JpbmcgaW4sIHRvbywgb2YgY291cnNlIC0gcHJvcGVyIFZMQU4gc2VncmVnYXRpb24gaXMgZXNzZW50aWFsLgoKVGhlbiwgJiMzNDtuYnBfdmxhbl9hZGQmIzM0Oy4gVGhpcyBzdWdnZXN0cyBhIG5ldHdvcmsgYm9vdCBwcm9jZXNzIG9yIFBYRSBjb250ZXh0LiBTbywgSSYjMzk7bSBtYXBwaW5nIHRoYXQgb250byB0aGUgYnJvYWRlciBwaWN0dXJlOyBjb25zaWRlcmluZyBob3cgd2UgaGFuZGxlIFZMQU4gYXNzaWdubWVudHMgZm9yIG5ldHdvcmsgYm9vdGluZyBvZiBkZXZpY2VzLiBUaGlzIHByb21wdHMgcXVlc3Rpb25zIGFib3V0IFZMQU4gdGFnZ2luZyBvbiB0aGUgYm9vdCBzZXJ2ZXIsIERIQ1AgY29uZmlndXJhdGlvbiB0byBhc3NpZ24gdGhlIGNvcnJlY3QgVkxBTiwgYW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIGFueSBwcmUtYm9vdCBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGFuZCBob3cgdGhleSBkZXBlbmQgb24gZWFjaCBvdGhlci4gSG93IGRvZXMgaXQgdGllIGludG8gdGhlIG92ZXJhbGwgcHJvdmlzaW9uaW5nIHdvcmtmbG93LCBhbmQgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGluIHRoZSBleGlzdGluZyBzZXR1cD8gSSYjMzk7bSBhc3Nlc3NpbmcgdGhlIGltcGFjdCBvbiBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCB0cnlpbmcgdG8gYW50aWNpcGF0ZSBhbnkgcG9zc2libGUgZWRnZSBjYXNlcyBvciByYWNlIGNvbmRpdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBhZGRyZXNzLiBJdCYjMzk7cyBhbGwgYWJvdXQgZW5zdXJpbmcgc21vb3RoIG9wZXJhdGlvbiBhbmQgdGhhdCB0aGUgVkxBTiBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCBhY3Jvc3MgdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZWxlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdmxhbl9kZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYz0zNz1zdGF0aWMgdm9pZCBfX3ZsYW5fYWRkX3B2aWQoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNDctXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0ODpzdGF0aWMgdm9pZCBfX3ZsYW5fZGVsZXRlX3B2aWQoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsIHUxNiB2aWQpXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00OS17XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9NjE9c3RhdGljIGJvb2wgX192bGFuX2ZsYWdzX3VwZGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtODEtXHRlbHNlXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4MjpcdFx0X192bGFuX2RlbGV0ZV9wdmlkKHZnLCB2LVx1MDAzZXZpZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04My1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMjQ9c3RhdGljIHZvaWQgX192bGFuX2FkZF9saXN0KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTQzLVxubmV0L2JyaWRnZS9icl92bGFuLmM6MTQ0OnN0YXRpYyB2b2lkIF9fdmxhbl9kZWxfbGlzdChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTQ1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMjEzLVx0XHRcdFx0ICAgICAgIFx1MDAyNm1hc3RlcnYtXHUwMDNldm5vZGUsIGJyX3ZsYW5fcmh0X3BhcmFtcyk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMTQ6XHRcdF9fdmxhbl9kZWxfbGlzdChtYXN0ZXJ2KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNS1cdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihtYXN0ZXJ2LCBmYWxzZSk7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzg5LVxubmV0L2JyaWRnZS9icl92bGFuLmM6MzkwOnN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzkxLXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MDQtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0MDU6XHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtXHUwMDNldmlkKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQwNi1cdGlmIChwKSB7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNDI1LVx0XHRcdFx0ICAgICAgIGJyX3ZsYW5fcmh0X3BhcmFtcyk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0MjY6XHRcdF9fdmxhbl9kZWxfbGlzdCh2KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQyNy1cdFx0bmJwX3ZsYW5fc2V0X3ZsYW5fZGV2X3N0YXRlKHAsIHYtXHUwMDNldmlkKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz00NDY9c3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00NTMtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0NTQ6XHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHZnLVx1MDAzZXB2aWQpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtNDU1LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZsYW4sIHRtcCwgXHUwMDI2dmctXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQ2NS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjQ2NjpcdFx0ZXJyID0gX192bGFuX2RlbCh2bGFuKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQ2Ny1cdFx0aWYgKGVycikge1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTgyND1pbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTg0MC1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjg0MTpcdHJldHVybiBfX3ZsYW5fZGVsKHYpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtODQyLX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMzYwPWludCBuYnBfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZClcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzcxLVxubmV0L2JyaWRnZS9icl92bGFuLmM6MTM3MjpcdHJldHVybiBfX3ZsYW5fZGVsKHYpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMTM3My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzg3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBJbW1lZGlhdGUgQ29uY2VybnMgd2l0aCBWTEFOIERlbGV0aW9uKioKClJpZ2h0LCBzbyAqYGJyX3ZsYW5fZGVsZXRlYCogYW5kICpgbmJwX3ZsYW5fZGVsZXRlYCouLi4gbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgb3BlcmF0aW9uYWwgaW1wbGljYXRpb25zIGhlcmUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZXNlIGRlbGV0aW9uIHJvdXRpbmVzIGFjcm9zcyBkaWZmZXJlbnQgYnJpZGdlIGludGVyZmFjZXMgYW5kIHBvdGVudGlhbGx5IG5vbi1icmlkZ2VkIHBvcnQgZW52aXJvbm1lbnRzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25zaWRlcjoKCiogICAqKkF0b21pY2l0eToqKiBBcmUgdGhlc2Ugb3BlcmF0aW9ucyB0cnVseSBhdG9taWM/IElmIGEgZGVsZXRpb24gZmFpbHMgbWlkd2F5IHRocm91Z2gsIHdoYXQmIzM5O3MgdGhlIHJvbGxiYWNrIHByb2NlZHVyZT8gRG9lcyBpdCBsZWF2ZSB0aGUgc3lzdGVtIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZT8gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBzY2VuYXJpb3Mgd2hlcmUgdGhlIFZMQU4gaXMgcmVmZXJlbmNlZCBpbiBtdWx0aXBsZSBwbGFjZXMg4oCTIFFvUyBwb2xpY2llcywgQUNMcywgZm9yd2FyZGluZyBkYXRhYmFzZXMuIEhvdyBhcmUgdGhvc2UgaGFuZGxlZD8gRG8gd2UgaGF2ZSByYWNlIGNvbmRpdGlvbnMgaWYgYW5vdGhlciBwcm9jZXNzIGF0dGVtcHRzIHRvIHVzZSB0aGUgdmxhbiwgb3IgY29uZmlndXJlIHRoZSB2bGFuIGF0IHRoZSBzYW1lIHRpbWU/CiogICAqKlJlc291cmNlIENsZWFudXA6KiogQmV5b25kIHJlbW92aW5nIHRoZSBWTEFOIElEIGZyb20gdGhlIGJyaWRnZSBvciBwb3J0IGNvbnRleHQsIHdoYXQgb3RoZXIgcmVzb3VyY2VzIGFyZSBiZWluZyBmcmVlZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgbWVtb3J5IGFsbG9jYXRpb25zLCBmb3J3YXJkaW5nIHRhYmxlIGVudHJpZXMsIGFueSBhc3NvY2lhdGVkIGNvbnRyb2wgcGxhbmUgc3RhdGU/IEkgbmVlZCB0byBrbm93IHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcyBvciBvdGhlciByZXNvdXJjZSBleGhhdXN0aW9uIGlmIGEgZGVsZXRpb24gaXMgcG9vcmx5IGltcGxlbWVudGVkLgoqICAgKipEZXBlbmRlbmN5IE1hbmFnZW1lbnQ6KiogSSYjMzk7bSB3b25kZXJpbmcgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIGhhbmRsZWQuIElmIGEgVkxBTiBpcyBkZWxldGVkIHRoYXQmIzM5O3MgcGFydCBvZiBhIExBRyBvciBhIHRydW5rLCBhcmUgdGhlIGFzc29jaWF0ZWQgcG9ydHMgYXV0b21hdGljYWxseSByZWNvbmZpZ3VyZWQgb3IgZGlzYWJsZWQ/IElmIHRoZSB2bGFuIGlzIGEgZGVmYXVsdCB2bGFuIG9uIGEgcG9ydCwgYW5kIHRoZSBwb3J0IGlzIGNvbm5lY3RlZCB0byBhIGhvc3QsIGhvdyBpcyB0aGUgaG9zdCBpbXBhY3RlZD8KKiAgICoqRXJyb3IgSGFuZGxpbmcgYW5kIFByb3BhZ2F0aW9uOioqIEhvdyByb2J1c3QgaXMgdGhlIGVycm9yIGhhbmRsaW5nPyBEb2VzIHRoZSBjb2RlIHByb3Blcmx5IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIFZMQU4gZG9lc24mIzM5O3QgZXhpc3Qgb3IgaXMgaW4gdXNlPyBXaGF0JiMzOTtzIHRoZSBlcnJvciByZXBvcnRpbmcgbGlrZT8gRG9lcyBpdCBwcm92aWRlIHN1ZmZpY2llbnQgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgdHJvdWJsZXNob290aW5nIGluIGEgY29tcGxleCBuZXR3b3JrIHNldHVwPyBEb2VzIGl0IHNpbXBseSByZXR1cm4gYW4gZXJyb3IgY29kZSBvciBkb2VzIGl0IHNlbmQgdXNlZnVsIGRlYnVnIG1lc3NhZ2VzPyBXaGF0IGlzIHRoZSBpbXBhY3Qgb2YgZXJyb3JzIHRvIHRoZSBicm9hZGVyIG5ldHdvcms/CiogICAqKkNvbnRleHR1YWwgRGlmZmVyZW5jZXM6KiogVGhlICYjMzk7bmJwJiMzOTsgcHJlZml4IG9uIGBuYnBfdmxhbl9kZWxldGVgIHBpcXVlcyBteSBpbnRlcmVzdC4gSXMgdGhpcyBtZWFudCBmb3Igbm9uLWJyaWRnZSBwb3J0cz8gSWYgc28sIHdoYXQgYXJlIHRoZSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3I/IEFyZSB0aGVyZSBzcGVjaWZpYyBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gdGFnZ2VkL3VudGFnZ2VkIFZMQU4gYXNzaWdubWVudHMgb24gdGhlc2UgaW50ZXJmYWNlcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBhc3N1bWUgdGhlIGBicl9gIHZlcnNpb24gaXMgZm9yIHN0YW5kYXJkIGJyaWRnZSBwb3J0cy4gQnV0IHdoYXQgYWJvdXQgdmlydHVhbCBpbnRlcmZhY2VzPyBIb3cgYWJvdXQgYm9uZCBwb3J0cz8KClVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHBvdGVudGlhbCBwaXRmYWxscyBhbmQgZWRnZSBjYXNlcyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgVkxBTiBkZWxldGlvbiBmdW5jdGlvbnMuIFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpbGwgYmUga2V5LCBidXQgSSYjMzk7bSBsb29raW5nIGZvciBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlc2lnbiBwaGlsb3NvcGh5LCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX3ZsYW5fYWRkX2V4aXN0aW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmM9Njg2PWJvb2wgYnJfc2hvdWxkX2xlYXJuKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcxOC1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjcxOTpzdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcyMC1cdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTc3OT1pbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsIGJvb2wgKmNoYW5nZWQsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNzkxLVx0aWYgKHZsYW4pXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3OTI6XHRcdHJldHVybiBicl92bGFuX2FkZF9leGlzdGluZyhiciwgdmcsIHZsYW4sIGZsYWdzLCBjaGFuZ2VkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzkzLVx0XHRcdFx0XHQgICAgZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2NzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVkxBTiBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgVkxBTiBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgY2FsbGVkIGRpcmVjdGx5IGJ5IGBicl92bGFuX2FkZGAuIFRoaXMgc3VnZ2VzdHMgdGhhdCBgYnJfdmxhbl9hZGRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBhZGRpbmcgVkxBTnMgaW4gbW9zdCBzY2VuYXJpb3MuIEdpdmVuIHRoaXMsIG15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGEgc2V0IG9mIGNvcmUgZnVuY3Rpb25zOiBgYnJfdmxhbl9hZGRgLCBgYnJfdmxhbl9kZWxldGVgLCBhbmQgdGhlbiB0aGUgTmV0d29yayBCcmlkZ2UgUHJvdG9jb2wgZXF1aXZhbGVudHMgYG5icF92bGFuX2FkZGAgYW5kIGBuYnBfdmxhbl9kZWxldGVgLiBUaGVzZSBhcmUgb2J2aW91c2x5IGhhbmRsaW5nIHRoZSBjb3JlIFZMQU4gY3JlYXRpb24gYW5kIHJlbW92YWwgb3BlcmF0aW9ucy4gSSYjMzk7bGwgYWxzbyBuZWVkIHRvIGV4YW1pbmUgaG93IHRoZSBicmlkZ2UtbGV2ZWwgYm9vbGVhbiBvcHRpb25zLCBsaWtlIGVuYWJsaW5nIG9yIGRpc2FibGluZyB2YXJpb3VzIGZlYXR1cmVzLCBhcmUgbWFuYWdlZCB0aHJvdWdoIGBicl9ib29sb3B0X3RvZ2dsZWAsIGFuZCB0aGUgZmlsdGVyaW5nIHRvZ2dsZXMgd2l0aCBgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlYC4gTGFzdGx5LCBJIHdpbGwgbm90IGZvcmdldCB0aGUgZ2xvYmFsIG9wdGlvbiBwcm9jZXNzaW5nIGRvbmUgYnkgYGJyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnNgLiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgYXBwbGllZCBpbiB0aGUgYnJvYWRlciBjb250ZXh0LgoKTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAgaW50byB0aGVzZSBmdW5jdGlvbnMsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O2xsIGxvb2sgZm9yIG90aGVyIGVudHJ5IHBvaW50cywgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSBwYXRocyB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmcuIEkgc2VlIHRoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIGNhbGxlZCBieSBgYnJfdmxhbl9wdXRfbWFzdGVyYC4gSXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCBzaW5jZSBpdCBzdWdnZXN0cyBhIHNlcGFyYXRlIG11bHRpY2FzdCBhc3BlY3QsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIG1vcmUgZ2VuZXJhbCBWTEFOIHByb2Nlc3NpbmcuIEkgbmVlZCB0byB0YWtlIGl0IGludG8gYWNjb3VudCwgd2hpbGUgSSYjMzk7bSBsb29raW5nIGFyb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfdmxhbl9wdXRfbWFzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmM9MTkyPXN0YXRpYyB2b2lkIGJyX21hc3Rlcl92bGFuX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIwMi1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjIwMzpzdGF0aWMgdm9pZCBicl92bGFuX3B1dF9tYXN0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydilcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIwNC17XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzc5LVxubmV0L2JyaWRnZS9icl92bGFuLmM6MzgwOlx0XHRcdGJyX3ZsYW5fcHV0X21hc3RlcihtYXN0ZXJ2KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM4MS1cdFx0XHR2LVx1MDAzZWJydmxhbiA9IE5VTEw7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MzkwPXN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQzMi1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjQzMzpcdGJyX3ZsYW5fcHV0X21hc3RlcihtYXN0ZXJ2KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQzNC1vdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTQ5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWTEFOIE9wZXJhdGlvbnMgaW4gdGhlIEJyaWRnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgVkxBTiBpbXBsZW1lbnRhdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgbG9naWMsIGF0IGxlYXN0IGZyb20gdGhpcyBjb250ZXh0LCBpcyB0cmlnZ2VyZWQgdGhyb3VnaCBgX192bGFuX2FkZGAgYW5kIGBfX3ZsYW5fZGVsYC4gVGhhdCYjMzk7cyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20uIE15IHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBtYW5hZ2luZyBWTEFOcyBhcmU6IGBicl92bGFuX2FkZGAsIGBicl92bGFuX2RlbGV0ZWAsIGBuYnBfdmxhbl9hZGRgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgd2hpY2ggaGFuZGxlIHRoZSBhY3R1YWwgYWRkaXRpb24gYW5kIHJlbW92YWwgb2YgVkxBTiBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSBgYnJfYm9vbG9wdF90b2dnbGVgLCBgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlYCwgYW5kIGBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zYCBhcmUgaW4gdGhlcmUgdG9vLCBsaWtlbHkgZm9yIGZlYXR1cmUgdG9nZ2xpbmcgb3IgY29uZmlndXJhdGlvbiB1cGRhdGVzLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYGJyX3ZsYW5fYWRkYCBhbmQgYGJyX3ZsYW5fZGVsZXRlYC4gQXJlIHRoZXNlIHN0YXRpYyBvciBnbG9iYWwgZnVuY3Rpb25zPyBLbm93aW5nIHRoYXQgd2lsbCBwcm92aWRlIGNyaXRpY2FsIGNvbnRleHQgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBtb2RpZmljYXRpb24uIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZmluZCB0aGF0IGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYnJfdmxhbl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTkwPXN0cnVjdCBza19idWZmICpicl9oYW5kbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU5My1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTk0OmludCBicl92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQsIHUxNiBmbGFncyxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1OTUtXHRcdGJvb2wgKmNoYW5nZWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTcyMj1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpicl9oYW5kbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTcyOS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE3MzA6c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzMxLVx0XHRcdCAgICAgIGJvb2wgKmNoYW5nZWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz02ODY9Ym9vbCBicl9zaG91bGRfbGVhcm4oc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICp2aWQpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNzE4LVxubmV0L2JyaWRnZS9icl92bGFuLmM6NzE5OnN0YXRpYyBpbnQgYnJfdmxhbl9hZGRfZXhpc3Rpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzIwLVx0XHRcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNzc4LSAqL1xubmV0L2JyaWRnZS9icl92bGFuLmM6Nzc5OmludCBicl92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQsIHUxNiBmbGFncywgYm9vbCAqY2hhbmdlZCxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc4MC1cdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ0NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqQXNzZXNzaW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBWTEFOcyBhbmQgRnVuY3Rpb24gQ2FsbHMqKgoKWWVzLCB0aGF0JiMzOTtzIHJpZ2h0LCB0aGUgc3ViamVjdCBiZWluZyBkaXNjdXNzZWQgaXMgZGVmaW5pdGVseSBub3Qgc3RhdGljLiBUaGUgY29udGV4dCBzdHJvbmdseSBpbXBsaWVzIGEgZHluYW1pYyBlbnZpcm9ubWVudCwgcGFydGljdWxhcmx5IHdpdGggVkxBTnMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb25zIHdpdGhpbiB0aGUgcmVsZXZhbnQgY29kZSBiYXNlIHdoZXJlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVkxBTiBjcmVhdGlvbiBhbmQgZGVsZXRpb24sIHRvIHVuZGVyc3RhbmQgaG93IGNoYW5nZXMgYXJlIGFwcGxpZWQuIFRvIGNsYXJpZnkgbXkgcG9zaXRpb24sIEkgYW0gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiBjaGVja2luZyB0aGUgYG5icF92bGFuX2FkZGAgYW5kIGBuYnBfdmxhbl9kZWxldGVgIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBmb3IgYXNzZXNzaW5nIGV4YWN0bHkgaG93IHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgYXJlIG1hZGUgYW5kIHdoYXQgb3RoZXIgYWN0aW9ucyBhcmUgcmVxdWlyZWQsIHN1Y2ggYXMgaW50ZXJmYWNlIHJlLWNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZWxzZSBuZWVkcyB0byBiZSBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgbmJwX3ZsYW5fYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTYxMT1pbnQgX19icl92bGFuX3NldF9kZWZhdWx0X3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgcHZpZCxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2MTItXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNjEzOmludCBuYnBfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCwgdTE2IGZsYWdzLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTYxNC1cdFx0IGJvb2wgKmNoYW5nZWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTc1MD1zdGF0aWMgaW5saW5lIGludCBicl92bGFuX2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3NTQtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNzU1OnN0YXRpYyBpbmxpbmUgaW50IG5icF92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzU2LVx0XHRcdCAgICAgICBib29sICpjaGFuZ2VkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTI1Nz1pbnQgbmJwX3ZsYW5faW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTMxNC0gKi9cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEzMTU6aW50IG5icF92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzE2LVx0XHQgYm9vbCAqY2hhbmdlZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzExOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBpbiB0aGUgbWlkZGxlIG9mIHRoaXMgYXNzZXNzbWVudDoKCioqQW5hbHl6aW5nIER5bmFtaWMgQmVoYXZpb3IqKgoKUmlnaHQsIHNvIHRoZSBzdWJqZWN0IGlzIGNsZWFybHkgaW5kaWNhdGluZyBzb21lIGZvcm0gb2Ygbm9uLXN0YXRpYyBiZWhhdmlvci4gVGhhdCYjMzk7cyB0aGUga2V5IHRha2Vhd2F5LiBOb3csIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBzdGF0aWMsIHdoYXQgYXJlIHRoZSBuZXh0IHN0ZXBzIHRvIGFzc2Vzcz8KClRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdG8gcXVpY2tseSBpbnZlc3RpZ2F0ZSBgYnJfYm9vbG9wdF90b2dnbGVgLiBJdCYjMzk7cyBhIHByaW1lIHN1c3BlY3QgZm9yIGNvbnRyb2xsaW5nIG9yIGluZmx1ZW5jaW5nIHRoZSBkeW5hbWljIHN0YXRlIG9mIHRoaXMgYXNwZWN0LiBUaW1lIHRvIGRpZyBpbiB0aGVyZSBhbmQgc2VlIGlmIGl0JiMzOTtzIHRoZSByaWdodCBmb2N1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGJyX2Jvb2xvcHRfdG9nZ2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9ici5jPTI2OD1icl90b2dnbGVfZmRiX2xvY2FsX3ZsYW5fMChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9ici5jLTI5My0gKi9cbm5ldC9icmlkZ2UvYnIuYzoyOTQ6aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcbm5ldC9icmlkZ2UvYnIuYy0yOTUtXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD03Njg9c3RhdGljIGlubGluZSBpbnQgYnJfb3B0X2dldChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzczLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6Nzc0OmludCBicl9ib29sb3B0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGVudW0gYnJfYm9vbG9wdF9pZCBvcHQsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC03NzUtXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTU3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTm9uLVN0YXRpYyBDb25zaWRlcmF0aW9ucyAmYW1wOyBWTEFOIEZpbHRlcmluZyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIHNvbWV0aGluZyAqbm9uLXN0YXRpYyouIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCB3aXRoIHRoYXQgZXN0YWJsaXNoZWQsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBzcGVjaWZpYyBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uOiBgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlYC4gVGhpcyBmdW5jdGlvbiBpcyBwaXZvdGFsIGluIHVuZGVyc3RhbmRpbmcgaG93IFZMQU4gZmlsdGVyaW5nIGJlaGF2ZXMgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyB0aGUgbHluY2hwaW4sIHRoZSBjb250cm9sIHBvaW50Li4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgbWFuaXB1bGF0ZWQsIG9yIGhvdyB0aGUgY29uZGl0aW9ucyBhcm91bmQgaXQgYXJlIGNoYW5naW5nLCBhcyB0aGF0IGluZm9ybXMgZXZlcnl0aGluZy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1OTk9dm9pZCBicl9yZWNhbGN1bGF0ZV9md2RfbWFzayhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTYwMDppbnQgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjAxLVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNzg4PXN0YXRpYyBpbmxpbmUgdTE2IGJyX2dldF9wdmlkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3OTItXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNzkzOnN0YXRpYyBpbmxpbmUgaW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzk0LVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIHZhbCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04ODQ9dm9pZCBicl9yZWNhbGN1bGF0ZV9md2RfbWFzayhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtODkzLVxubmV0L2JyaWRnZS9icl92bGFuLmM6ODk0OmludCBicl92bGFuX2ZpbHRlcl90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTg5NS1cdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxMDAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqTm9uLVN0YXRpYyBDb250ZXh0IGFuZCBPcHRpb24gUHJvY2Vzc2luZyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbm9uLXN0YXRpYyBoZXJlLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSB3b3JrIHRocm91Z2ggdGhpcy4gTm9uLXN0YXRpYyBpbXBsaWVzIGEgZmV3IHRoaW5ncyByaWdodCBvZmYgdGhlIGJhdCDigJMgcG90ZW50aWFsbHkgbXV0YWJsZSBzdGF0ZSwgcG9zc2libGUgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLCBhbmQgbGlrZWx5IHNvbWUgZHluYW1pYyBhbGxvY2F0aW9uLiBHb29kIHRvIGVzdGFibGlzaCB0aGF0IGZvdW5kYXRpb25hbCBmYWN0IGJlZm9yZSBkaXZpbmcgZGVlcGVyLgoKTm93LCBsZXQmIzM5O3Mgem9vbSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zYCBmdW5jdGlvbi4gVGhpcyBzZWVtcyBsaWtlIHRoZSBjcml0aWNhbCBwaWVjZSB0byB1bmRlcnN0YW5kLiBJdCYjMzk7cyBwcm9iYWJseSB3aGVyZSB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFZMQU4gcm91dGluZyBhcmUgcHJvY2Vzc2VkLiBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhpcyBmdW5jdGlvbiBjYXJlZnVsbHkgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCBoYW5kbGVzIHRob3NlIG5vbi1zdGF0aWMgYXNwZWN0cyB3ZSBqdXN0IGlkZW50aWZpZWQuIExldCYjMzk7cyBzZWUgaG93IGl0IHByb2Nlc3NlcyB0aG9zZSBnbG9iYWwgc2V0dGluZ3MgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIGZvciB0aGUgc3lzdGVtIG92ZXJhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTkwMj1pbnQgYnJfdmxhbl9wcm9jZXNzX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5MDctXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTA4OmludCBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTA5LVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz02Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJyX3ZsYW5fZGJfZ3BvbFtCUklER0VfVkxBTkRCX0dPUFRTX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTY4NC1cbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6Njg1OmludCBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTY4Ni1cdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY0OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFzc2Vzc21lbnQgb2YgdGhlIFJlbGV2YW50IENvZGUgUGF0aHMqKgoKT2theSwgbm9uLXN0YXRpYywgZ290IGl0LiBMZXQgbWUganVzdCBsYXkgb3V0IHRoZSBmb2N1cyBzeW1ib2xzIGFnYWluIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRyYWNrOiBgYnJfdmxhbl9hZGRgLCBgYnJfdmxhbl9kZWxldGVgLCBgbmJwX3ZsYW5fYWRkYCwgYG5icF92bGFuX2RlbGV0ZWAsIGBicl9ib29sb3B0X3RvZ2dsZWAsIGBicl92bGFuX2ZpbHRlcl90b2dnbGVgLCBhbmQgYGJyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnNgLgoKTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHBvdGVudGlhbCBlbnRyeSBwb2ludHMgdG8gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLiBJIGtub3cgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbmAsIGJ1dCBJIHRyYWNlZCB0aGF0IG9uZSBiZWZvcmUuIEFuZCBpdCBzZWVtcyB0aGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuYCwgYm90aCBvZiB3aGljaCBJICpkaWQqIHRyYWNlLgoKQWxyaWdodCwgd2hhdCBlbHNlIGNvdWxkIGJlIGNhbGxpbmcgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gPyBTY2FubmluZyB0aGUgYGJyX3ZsYW4uY2AgZmlsZSwgSSBzZWUgYGJyX3ZsYW5fcHV0X21hc3RlcmAsIGBfX3ZsYW5fYWRkYCwgYF9fdmxhbl9kZWxgLCBhbmQgYGJyX3ZsYW5fYWRkX2V4aXN0aW5nYC4gSSBiZWxpZXZlIEkmIzM5O3ZlIGFscmVhZHkgZXhhbWluZWQgdGhvc2UgYXMgd2VsbCwgc28gdGhhdCBzaG91bGRuJiMzOTt0IGJlIGEgcHJvYmxlbS4KCkhvbGQgb24gYSBzZWNvbmQuLi4gaXMgdGhhdCByaWdodD8gIGBfX3ZsYW5fYWRkYCBpcyAqYWxzbyogY2FsbGVkIGZyb20gYGJyX3ZsYW5faW5pdGAgYW5kIGBuYnBfdmxhbl9pbml0YD8gT2theSwgdGhhdCYjMzk7cyBhIGZyZXNoIGFuZ2xlLCBhbmQgdGhvc2UgYXJlIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZ2l2ZW4gdGhlaXIgaW5pdGlhbGl6YXRpb24gY29udGV4dHMuIExldCYjMzk7cyBkZWx2ZSBpbnRvIGBicl92bGFuX2luaXRgIGFuZCBgbmJwX3ZsYW5faW5pdGAgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3ZsYW5fYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmM9MzI9c3RhdGljIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKmJyX3ZsYW5fbG9va3VwKHN0cnVjdCByaGFzaHRhYmxlICp0YmwsIHUxNiB2aWQpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzYtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNzpzdGF0aWMgdm9pZCBfX3ZsYW5fYWRkX3B2aWQoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zOC1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz02MT1zdGF0aWMgYm9vbCBfX3ZsYW5fZmxhZ3NfdXBkYXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03OS1cdGlmIChmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19QVklEKVxubmV0L2JyaWRnZS9icl92bGFuLmM6ODA6XHRcdF9fdmxhbl9hZGRfcHZpZCh2Zywgdik7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04MS1cdGVsc2Vcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMDM9c3RhdGljIGludCBfX3ZsYW5fdmlkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTIzLVxubmV0L2JyaWRnZS9icl92bGFuLmM6MTI0OnN0YXRpYyB2b2lkIF9fdmxhbl9hZGRfbGlzdChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTI1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMzQ9c3RhdGljIHZvaWQgYnJfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMjYyLSAqL1xubmV0L2JyaWRnZS9icl92bGFuLmM6MjYzOnN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yNjQtXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zNTYtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTc6XHRfX3ZsYW5fYWRkX2xpc3Qodik7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zNTgtXHRfX3ZsYW5fZmxhZ3NfY29tbWl0KHYsIGZsYWdzKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz03Nzk9aW50IGJyX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZCwgdTE2IGZsYWdzLCBib29sICpjaGFuZ2VkLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTgwOS1cdFx0cmVmY291bnRfc2V0KFx1MDAyNnZsYW4tXHUwMDNlcmVmY250LCAxKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjgxMDpcdHJldCA9IF9fdmxhbl9hZGQodmxhbiwgZmxhZ3MsIGV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04MTEtXHRpZiAocmV0KSB7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTMxNT1pbnQgbmJwX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQsIHUxNiBmbGFncyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzQ3LVx0dmxhbi1cdTAwM2Vwb3J0ID0gcG9ydDtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEzNDg6XHRyZXQgPSBfX3ZsYW5fYWRkKHZsYW4sIGZsYWdzLCBleHRhY2spO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMTM0OS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjU1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBWTEFOIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBWTEFOcyBhcmUgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBicl92bGFuX2luaXRgIGFuZCBgbmJwX3ZsYW5faW5pdGAuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGRvbiYjMzk7dCBkaXJlY3RseSBjYWxsIGBfX3ZsYW5fYWRkYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGludHVpdGlvbiwgYmFzZWQgb24gcGFzdCBleHBlcmllbmNlIHdpdGggdGhpcyB0eXBlIG9mIHN5c3RlbSBhcmNoaXRlY3R1cmUsIGlzIHRoYXQgdGhleSYjMzk7bGwgbGlrZWx5IGNhbGwgc29tZXRoaW5nIGxpa2UgYGJyX3ZsYW5fYWRkYCBvciBgbmJwX3ZsYW5fYWRkYCBpbnRlcm5hbGx5LiBUbyBjb25maXJtIHRoaXMgYW5kIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBJIHJlYWxseSBzaG91bGQgZXhhbWluZSBgYnJfdmxhbl9pbml0YCBtb3JlIGNsb3NlbHkuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfdmxhbl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNjc9YnJfdmxhbl9nZXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzgtXHRcdC8qIG1pc3NpbmcgZ2xvYmFsIGN0eCwgY3JlYXRlIGl0IG5vdyAqL1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTc5Olx0XHRpZiAoYnJfdmxhbl9hZGQoYnIsIHZpZCwgMCwgXHUwMDI2Y2hhbmdlZCwgZXh0YWNrKSlcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE4MC1cdFx0XHRyZXR1cm4gTlVMTDtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yNjM9c3RhdGljIGludCBfX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yOTYtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyOTc6XHRcdFx0ZXJyID0gYnJfdmxhbl9hZGQoYnIsIHYtXHUwMDNldmlkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjk4LVx0XHRcdFx0XHQgIGZsYWdzIHwgQlJJREdFX1ZMQU5fSU5GT19CUkVOVFJZLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTY4Nj1ib29sIGJyX3Nob3VsZF9sZWFybihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZpZClcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03MTgtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3MTk6c3RhdGljIGludCBicl92bGFuX2FkZF9leGlzdGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03MjAtXHRcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NzgtICovXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3Nzk6aW50IGJyX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZCwgdTE2IGZsYWdzLCBib29sICpjaGFuZ2VkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzgwLVx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNzkxLVx0aWYgKHZsYW4pXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3OTI6XHRcdHJldHVybiBicl92bGFuX2FkZF9leGlzdGluZyhiciwgdmcsIHZsYW4sIGZsYWdzLCBjaGFuZ2VkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzkzLVx0XHRcdFx0XHQgICAgZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMTAyPWludCBfX2JyX3ZsYW5fc2V0X2RlZmF1bHRfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiBwdmlkLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExMzAtXHQgICAgKCFwdmVudCB8fCAhYnJfdmxhbl9zaG91bGRfdXNlKHB2ZW50KSkpIHtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExMzE6XHRcdGVyciA9IGJyX3ZsYW5fYWRkKGJyLCBwdmlkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTEzMi1cdFx0XHRcdCAgQlJJREdFX1ZMQU5fSU5GT19QVklEIHxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTkwLVx0XHRpZiAob2xkX3B2aWQpIHtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExOTE6XHRcdFx0YnJfdmxhbl9hZGQoYnIsIG9sZF9wdmlkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE5Mi1cdFx0XHRcdCAgICBCUklER0VfVkxBTl9JTkZPX1BWSUQgfFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE3NDc9aW50IGJyX3ZsYW5fYnJpZGdlX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzU1LVx0Y2FzZSBORVRERVZfUkVHSVNURVI6XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxNzU2Olx0XHRyZXQgPSBicl92bGFuX2FkZChiciwgYnItXHUwMDNlZGVmYXVsdF9wdmlkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTc1Ny1cdFx0XHRcdCAgQlJJREdFX1ZMQU5fSU5GT19QVklEIHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0MjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqVkxBTiBUYWdnaW5nICZhbXA7IEJyaWRnZSBFdmVudCBDb250ZXh0KioKCk9rYXksIHNvIGBicl92bGFuX2FkZGAgaXMgYSBrZXkgZnVuY3Rpb24sIGFuZCBJJiMzOTttIHNlZWluZyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBhIGNvdXBsZSBvZiBvdGhlciBwbGFjZXM6IGBfX2JyX3ZsYW5fc2V0X2RlZmF1bHRfcHZpZGAgYW5kIGBicl92bGFuX2JyaWRnZV9ldmVudGAuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSW1wb3J0YW50bHksIGJvdGggb2YgdGhvc2UgY2FsbGluZyBmdW5jdGlvbnMsIGBfX2JyX3ZsYW5fc2V0X2RlZmF1bHRfcHZpZGAgYW5kIGBicl92bGFuX2JyaWRnZV9ldmVudGAsIGFyZSAqbm90KiBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBsaWtlbHkgbWVhbnMgdGhleSYjMzk7cmUgaW50ZW5kZWQgdG8gYmUgY2FsbGFibGUgZnJvbSBlbHNld2hlcmUgaW4gdGhlIHN5c3RlbSwgcG90ZW50aWFsbHkgYnkgb3RoZXIgbW9kdWxlcy4gYGJyX3ZsYW5fYWRkYCBpcywgdGhlcmVmb3JlLCBhIGNlbnRyYWwgcGllY2UgdGhhdCYjMzk7cyBleHBvc2VkIHRvIG11bHRpcGxlIHBvaW50cyBvZiB0aGUgc3lzdGVtLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGEgYml0LCBJIHdhbnQgdG8gY2hlY2sgaG93IGBuYnBfdmxhbl9hZGRgIHRpZXMgaW50byBhbGwgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJwX3ZsYW5fYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmM9MTEwMj1pbnQgX19icl92bGFuX3NldF9kZWZhdWx0X3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgcHZpZCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTU0LVxubmV0L2JyaWRnZS9icl92bGFuLmM6MTE1NTpcdFx0ZXJyID0gbmJwX3ZsYW5fYWRkKHAsIHB2aWQsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTU2LVx0XHRcdFx0ICAgQlJJREdFX1ZMQU5fSU5GT19QVklEIHxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTc4LVx0XHRpZiAob2xkX3B2aWQpIHtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExNzk6XHRcdFx0bmJwX3ZsYW5fYWRkKHAsIG9sZF9wdmlkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE4MC1cdFx0XHRcdCAgICAgQlJJREdFX1ZMQU5fSU5GT19QVklEIHxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMjU3PWludCBuYnBfdmxhbl9pbml0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjg2LVxubmV0L2JyaWRnZS9icl92bGFuLmM6MTI4NzpcdFx0cmV0ID0gbmJwX3ZsYW5fYWRkKHAsIHAtXHUwMDNlYnItXHUwMDNlZGVmYXVsdF9wdmlkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTI4OC1cdFx0XHRcdCAgIEJSSURHRV9WTEFOX0lORk9fUFZJRCB8XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTMxNC0gKi9cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEzMTU6aW50IG5icF92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzE2LVx0XHQgYm9vbCAqY2hhbmdlZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIyMwoJCQkJCQkJb3V0cHV0OiAyMTgKCQkJCQkJCXRob3VnaHRzOiA3ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBCcmlkZ2UgTXVsdGljYXN0IGFuZCBWTEFOIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBoYXZlIGEgY2xlYXIgZnV6emluZyBzdHJhdGVneSBmb3JtaW5nLiAgYG5icF92bGFuX2FkZGAgaXMgdGhlIGtleSDigJMgaXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgbmJwX3ZsYW5faW5pdGAgYW5kIGBfX2JyX3ZsYW5fc2V0X2RlZmF1bHRfcHZpZGAsIHdoaWNoIGdpdmVzIG1lIGdvb2QgaW5pdGlhbCBlbnRyeSBwb2ludHMuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgVkxBTiBhbmQgYnJpZGdlIG1hbmlwdWxhdGlvbi4KClNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgdGFyZ2V0aW5nIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseTogYGJyX3ZsYW5fYWRkYCwgYGJyX3ZsYW5fZGVsZXRlYCwgYG5icF92bGFuX2FkZGAsIGBuYnBfdmxhbl9kZWxldGVgLCBgYnJfYm9vbG9wdF90b2dnbGVgLCBgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlYCwgYW5kIGBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zYCwgIGFuZCBgX19icl92bGFuX3NldF9kZWZhdWx0X3B2aWRgLiBUaGVzZSBhcmUgYWxsIGV4Y2VsbGVudCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIFRoZXNlIGVudHJ5IHBvaW50cyBzaG91bGQgYWRlcXVhdGVseSBjb3ZlciB0aGUgbG9naWMgY2hhbmdlIGZyb20gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLiBUaGUgY2hhbmdlcyB0byBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgYWx0ZXIgdGhlIGVhcmx5IHJldHVybiBsb2dpYy4gIFRoZSBwYXRjaCBtb2RpZmllcyBhIGNvbmRpdGlvbiwgc28gaXQmIzM5O3MgYSBnb29kIHRhcmdldC4KClRoZSBjaGFuZ2UgaW4gdGhlIHBhdGNoIGVzc2VudGlhbGx5IHJlbW92ZXMgYW4gZWFybHkgcmV0dXJuIGluIGNlcnRhaW4gY2FzZXMsIHdoaWNoIGFsdGVycyB0aGUgbXVsdGljYXN0L1ZMQU4gYmVoYXZpb3IuIFRoaXMgaXMgY2xlYXJseSByZWFjaGFibGUgdmlhIG5ldGxpbmsgYW5kIGlvY3RsIGZyb20gdXNlcnNwYWNlLCBtYWtpbmcgaXQgYSB2aWFibGUgZnV6emluZyB0YXJnZXQuICBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkOiBgQlJJREdFYCwgYElORVRgLCBgVkxBTl84MDIxUWAsIGBCUklER0VfSUdNUF9TTk9PUElOR2AsIGFuZCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4KCkkmIzM5O3ZlIGFscmVhZHkgbG9va2VkIGF0IHRoZSBjYWxsZXJzIG9mIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBhbmQsIGFzIGV4cGVjdGVkLCB0aGV5JiMzOTtyZSBjb3ZlcmVkIGJ5IG15IGNob3NlbiBlbnRyeSBwb2ludHMgKGBicl92bGFuX3B1dF9tYXN0ZXJgLCBgX192bGFuX2FkZGAsIGBfX3ZsYW5fZGVsYCwgYGJyX3ZsYW5fYWRkX2V4aXN0aW5nYCwgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbmApLiBJIG5lZWQgdG8gYmUgZWZmaWNpZW50LCBzbyBJIHdpbGwgcHJpb3JpdGl6ZSB0aGlzIHNtYWxsZXIgc3Vic2V0IG9mIGZvY3VzIHN5bWJvbHMgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX3ZsYW5fYWRkJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fZGVsZXRlJiMzNDssCiAgICAmIzM0O25icF92bGFuX2FkZCYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfYm9vbG9wdF90b2dnbGUmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9maWx0ZXJfdG9nZ2xlJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVhcmx5IHJldHVybiBjb25kaXRpb24gaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdpdGhpbiB0aGUgYnJpZGdlIG11bHRpY2FzdCBhbmQgVkxBTiBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGhvdyBWTEFOIG11bHRpY2FzdCBjb250ZXh0cyBhcmUgdG9nZ2xlZCB3aGVuIGBvbmAgaXMgZmFsc2UuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgaW9jdGwgd2hlbiBjb25maWd1cmluZyBicmlkZ2UgVkxBTnMgYW5kIG11bHRpY2FzdCBzbm9vcGluZyBvcHRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX3ZsYW5fYWRkJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fZGVsZXRlJiMzNDssCiAgICAmIzM0O25icF92bGFuX2FkZCYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfYm9vbG9wdF90b2dnbGUmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9maWx0ZXJfdG9nZ2xlJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVhcmx5IHJldHVybiBjb25kaXRpb24gaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdpdGhpbiB0aGUgYnJpZGdlIG11bHRpY2FzdCBhbmQgVkxBTiBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGhvdyBWTEFOIG11bHRpY2FzdCBjb250ZXh0cyBhcmUgdG9nZ2xlZCB3aGVuIGBvbmAgaXMgZmFsc2UuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgaW9jdGwgd2hlbiBjb25maWd1cmluZyBicmlkZ2UgVkxBTnMgYW5kIG11bHRpY2FzdCBzbm9vcGluZyBvcHRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCB3aGVyZSBkaXNhYmxpbmcgbXVsdGljYXN0IG9uIGEgVkxBTiB0aGF0IGlzIG5vdCBhIGJyaWRnZSBlbnRyeSB3b3VsZCBmYWlsIGR1ZSB0byBhbiBpbmNvcnJlY3QgZWFybHkgcmV0dXJuIGNvbmRpdGlvbi4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBzdGF0ZSBtYW5hZ2VtZW50LCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgbG9naWMgY2hhbmdlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiYWIxYzMwYjZiMGE5ZTdmNTFhYWQ0OGMwNzRmNGVmMmU2ZTE1NzMwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMDk6MzU6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwppbmRleCA3NWUxZTJhOGZjODNhLi4zZWY1ZDhiYmY1NTJlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKQEAgLTQzNzcsOCAmIzQzOzQzNzcsOCBAQCB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbikKIAlpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHsKIAkJYnIgPSB2bGFuLSZndDticjsKIAotCQlpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fAotCQkgICAgKG9uICZhbXA7JmFtcDsKJiM0MzsJCWlmIChvbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHwKIAkJICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKCZhbXA7dmxhbi0mZ3Q7YnJfbWNhc3RfY3R4KSkpCiAJCQlyZXR1cm47CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQnJpZGdlIE11bHRpY2FzdCBUb2dnbGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQmIzM5O3MgYSBjb25kaXRpb25hbCBsb2dpYyBhZGp1c3RtZW50IHdpdGhpbiBhbiBgaWZgIHN0YXRlbWVudC4gVGhlIGRpZmYgc2hvd3MgdGhlIGNoYW5nZTogYSBzbGlnaHQgcmVvcmRlcmluZyBvZiB0aGUgYm9vbGVhbiBsb2dpYy4gQmVmb3JlLCB0aGUgcmV0dXJuIGNvbmRpdGlvbiB3YXMgYmFzZWQgb24gYCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHwgKG9uICZhbXA7JmFtcDsgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZCgmYW1wO3ZsYW4tJmd0O2JyX21jYXN0X2N0eCkpYC4gTm93LCBpdCYjMzk7cyBgb24gJmFtcDsmYW1wOyAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fCBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKCZhbXA7dmxhbi0mZ3Q7YnJfbWNhc3RfY3R4KSlgLgoKRXNzZW50aWFsbHksIHRoaXMgYWx0ZXJzIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgZWFybHkuIEl0IHNlZW1zIHRoYXQgaWYgdGhlIGBvbmAgZmxhZyBpcyBub3cgZmFsc2UsIHRoZSBmdW5jdGlvbiBkb2VzbiYjMzk7dCBiYWlsIG91dCBpZiBgIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAgaXMgdHJ1ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIGJ1ZyDigJMgcGVyaGFwcyBhIG1lbW9yeSBsZWFrLCBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBvciBzaW1wbHkgYW4gaW5jb3JyZWN0IHN0YXRlIG1hbmFnZW1lbnQgaXNzdWUgd2l0aGluIHRoZSBicmlkZ2UgbXVsdGljYXN0IGNvbnRleHQuIEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IHNlZWluZyBhbnl0aGluZyBzdWdnZXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpdCYjMzk7cyBtb3JlIGFib3V0IGhvdyB0aGUgZnVuY3Rpb24mIzM5O3MgZXhlY3V0aW9uIGZsb3cgaXMgY29udHJvbGxlZCBieSB0aGF0IGBvbmAgZmxhZy4gQ2xlYXJseSwgc29tZXRoaW5nIHdhc24mIzM5O3Qgd29ya2luZyBjb3JyZWN0bHksIGFuZCB0aGlzIHNtYWxsIGNoYW5nZSBsaWtlbHkgZml4ZXMgdGhhdCwgbGlrZWx5IHdpdGggc29tZSBzb3J0IG9mIHN0YXRlIGlzc3VlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGFjdHVhbGx5IGRvZXMgdG8gcHJvcGVybHkgZXZhbHVhdGUgdGhpcyBwYXRjaCYjMzk7cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM0MD12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzY2OnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MTE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDIzLVx0XHRcdGNvbnRpbnVlO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI0Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjUtXHR9XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI3LVx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQyODpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTY5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIG1lbnRhbCBzdGVwczoKCioqRGl2aW5nIGludG8gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGFjdHVhbGx5ICpkb2VzKi4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQsIGFzIGFsd2F5cywgaXMgdG8ganVzdCAqcmVhZCB0aGUgY29kZSouIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpdHNlbGYgdG8gZ2V0IHRoZSBnaXN0IG9mIGl0cyBvcGVyYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGlucHV0IHBhcmFtZXRlcnMsIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgYW55IGNhbGxzIHRvIG90aGVyIGZ1bmN0aW9ucyBvciBsaWJyYXJpZXMgdGhhdCBtaWdodCBwcm92aWRlIGNsdWVzIGFib3V0IHRoZSB0YXNrIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGFjY29tcGxpc2guIEkmIzM5O2xsIGJlIHBheWluZyBhdHRlbnRpb24gdG8gaG93IGl0IGhhbmRsZXMgZWRnZSBjYXNlcyBvciBlcnJvciBjb25kaXRpb25zLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBmb3JtaW5nIGEgbWVudGFsIG1vZGVsIG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGJ5IGZvbGxvd2luZyB0aGUgZXhlY3V0aW9uIGZsb3cuIEZyb20gdGhlcmUgSSYjMzk7bGwgc3RhcnQgZm9ybXVsYXRpbmcgYW4gb3BpbmlvbiBvbiB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2Vybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzY2Olx0dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG40MzY3Olx0e1xuNDM2ODpcdFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xuNDM2OTpcdFxuNDM3MDpcdFx0LyogaXQmIzM5O3Mgb2theSB0byBjaGVjayBmb3IgdGhlIGZsYWcgd2l0aG91dCB0aGUgbXVsdGljYXN0IGxvY2sgYmVjYXVzZSBpdFxuNDM3MTpcdFx0ICogY2FuIG9ubHkgY2hhbmdlIHVuZGVyIFJUTkwgLVx1MDAzZSBtdWx0aWNhc3RfbG9jaywgd2UgbmVlZCB0aGUgbGF0dGVyIHRvXG40MzcyOlx0XHQgKiBzeW5jIHdpdGggdGltZXJzIGFuZCBwYWNrZXRzXG40MzczOlx0XHQgKi9cbjQzNzQ6XHRcdGlmIChvbiA9PSAhISh2bGFuLVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEKSlcbjQzNzU6XHRcdFx0cmV0dXJuO1xuNDM3NjpcdFxuNDM3NzpcdFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSB7XG40Mzc4Olx0XHRcdGJyID0gdmxhbi1cdTAwM2VicjtcbjQzNzk6XHRcbjQzODA6XHRcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNlxuNDM4MTpcdFx0XHQgICAgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHxcbjQzODI6XHRcdFx0ICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKFx1MDAyNnZsYW4tXHUwMDNlYnJfbWNhc3RfY3R4KSkpXG40MzgzOlx0XHRcdFx0cmV0dXJuO1xuNDM4NDpcdFxuNDM4NTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuNDM4NjpcdFx0XHR2bGFuLVx1MDAzZXByaXZfZmxhZ3MgXj0gQlJfVkxGTEFHX01DQVNUX0VOQUJMRUQ7XG40Mzg3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjQzODg6XHRcbjQzODk6XHRcdFx0aWYgKG9uKVxuNDM5MDpcdFx0XHRcdF9fYnJfbXVsdGljYXN0X29wZW4oXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpO1xuNDM5MTpcdFx0XHRlbHNlXG40MzkyOlx0XHRcdFx0X19icl9tdWx0aWNhc3Rfc3RvcChcdTAwMjZ2bGFuLVx1MDAzZWJyX21jYXN0X2N0eCk7XG40MzkzOlx0XHR9IGVsc2Uge1xuNDM5NDpcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4O1xuNDM5NTpcdFxuNDM5NjpcdFx0XHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbjQzOTc6XHRcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNiBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKGJybWN0eCkpXG40Mzk4Olx0XHRcdFx0cmV0dXJuO1xuNDM5OTpcdFxuNDQwMDpcdFx0XHRiciA9IHZsYW4tXHUwMDNlcG9ydC1cdTAwM2VicjtcbjQ0MDE6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjQ0MDI6XHRcdFx0dmxhbi1cdTAwM2Vwcml2X2ZsYWdzIF49IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEO1xuNDQwMzpcdFx0XHRpZiAob24pXG40NDA0Olx0XHRcdFx0X19icl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KFx1MDAyNnZsYW4tXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuNDQwNTpcdFx0XHRlbHNlXG40NDA2Olx0XHRcdFx0X19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbjQ0MDc6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuNDQwODpcdFx0fVxuNDQwOTpcdH1cbjQ0MTA6XHRcbjQ0MTE6XHRzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbjQ0MTI6XHR7XG40NDEzOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuNDQxNDpcdFxuNDQxNTpcdFx0aWYgKFdBUk5fT05fT05DRSghYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjY1CgkJCQkJCQlvdXRwdXQ6IDEzNQoJCQkJCQkJdGhvdWdodHM6IDI0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCdWcgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBlcnJvciBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHByZW1hdHVyZSByZXR1cm4gd2hlbiB0cnlpbmcgdG8gZGlzYWJsZSBtdWx0aWNhc3Qgb24gYSBWTEFOIHRoYXQgd2FzbiYjMzk7dCBhIGJyaWRnZSBlbnRyeSAoYCFicl92bGFuX2lzX2JyZW50cnkodmxhbilgIGFuZCBgb25gIGlzIGZhbHNlKS4gQmFzaWNhbGx5LCBpdCB3YXMgYmFpbGluZyBvdXQgdG9vIGVhcmx5LCBhbmQgdGhhdCYjMzk7cyB0aGUgcHJvYmxlbS4KClRoaXMgY291bGQgcmVzdWx0IGluIGEgZmV3IG5hc3R5IG91dGNvbWVzOiBpbmNvcnJlY3Qgc3RhdGUsIHBvc3NpYmxlIG1lbW9yeSBsZWFrcyAoYmVjYXVzZSByZXNvdXJjZXMgbWlnaHQgbm90IGJlIHByb3Blcmx5IGNsZWFuZWQgdXApLCBvciwgZXZlbiB3b3JzZSwgdXNlLWFmdGVyLWZyZWUgYnVncyBpZiBzb21lIGNvbXBvbmVudCBzdWJzZXF1ZW50bHkgdHJpZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgaW5jb3JyZWN0bHkgbWFuYWdlZCBWTEFOLgoKSG93ZXZlciwgYWZ0ZXIgYSBjbG9zZXIgbG9vaywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBkb2VzbiYjMzk7dCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UgYXJlbiYjMzk7dCBpbnRyb2R1Y2luZyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG9yIGNvbXBsZXggbWVtb3J5IGFsbG9jYXRpb25zIHRoYXQgd291bGQgd2FycmFudCBhIGRlZXAgZGl2ZSB3aXRoIEtNU0FOLiBLQVNBTiBhbmQgc3RhbmRhcmQgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIHNob3VsZCBhYnNvbHV0ZWx5IGJlIHN1ZmZpY2llbnQgdG8gZmxhZyBhbnkgcHJvYmxlbXMgdGhhdCBhcmlzZSBmcm9tIHRoaXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgbG9naWNhbCBjb250cm9sLWZsb3cgZXJyb3IsIG5vdCBhIGRhdGEtaW5pdGlhbGl6YXRpb24gcHJvYmxlbS4gTm8gbmVlZCB0byBicmluZyBvdXQgdGhlIGJpZyBndW5zIGhlcmU7IHN0YW5kYXJkIGJ1Zy1kZXRlY3RvcnMgc2hvdWxkIGJlIGZpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCB3aGVyZSBkaXNhYmxpbmcgbXVsdGljYXN0IG9uIGEgVkxBTiB0aGF0IGlzIG5vdCBhIGJyaWRnZSBlbnRyeSB3b3VsZCBmYWlsIGR1ZSB0byBhbiBpbmNvcnJlY3QgZWFybHkgcmV0dXJuIGNvbmRpdGlvbi4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBzdGF0ZSBtYW5hZ2VtZW50LCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgbG9naWMgY2hhbmdlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBWTEFOIHRoYXQgaXMgbm90IGEgYnJpZGdlIGVudHJ5IHdvdWxkIGZhaWwgZHVlIHRvIGFuIGluY29ycmVjdCBlYXJseSByZXR1cm4gY29uZGl0aW9uLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHN0YXRlIG1hbmFnZW1lbnQsIG1lbW9yeSBsZWFrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBsb2dpYyBjaGFuZ2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM1OjM3Ljg4NTE4ODIzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzE0ODk4MTQ2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfdmxhbl9hZGRcIixcbiAgICBcImJyX3ZsYW5fZGVsZXRlXCIsXG4gICAgXCJuYnBfdmxhbl9hZGRcIixcbiAgICBcIm5icF92bGFuX2RlbGV0ZVwiLFxuICAgIFwiYnJfYm9vbG9wdF90b2dnbGVcIixcbiAgICBcImJyX3ZsYW5fZmlsdGVyX3RvZ2dsZVwiLFxuICAgIFwiYnJfdmxhbl9ydG1fcHJvY2Vzc19nbG9iYWxfb3B0aW9uc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBWTEFOIHRoYXQgaXMgbm90IGEgYnJpZGdlIGVudHJ5IHdvdWxkIGZhaWwgZHVlIHRvIGFuIGluY29ycmVjdCBlYXJseSByZXR1cm4gY29uZGl0aW9uLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHN0YXRlIG1hbmFnZW1lbnQsIG1lbW9yeSBsZWFrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBsb2dpYyBjaGFuZ2UuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVhcmx5IHJldHVybiBjb25kaXRpb24gaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdpdGhpbiB0aGUgYnJpZGdlIG11bHRpY2FzdCBhbmQgVkxBTiBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGhvdyBWTEFOIG11bHRpY2FzdCBjb250ZXh0cyBhcmUgdG9nZ2xlZCB3aGVuIGBvbmAgaXMgZmFsc2UuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgaW9jdGwgd2hlbiBjb25maWd1cmluZyBicmlkZ2UgVkxBTnMgYW5kIG11bHRpY2FzdCBzbm9vcGluZyBvcHRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNTozNy44ODUxOTQyNjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NzAyMDY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJhYjFjMzBiNmIwYTllN2Y1MWFhZDQ4YzA3NGY0ZWYyZTZlMTU3MzBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDk6MzU6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcXG5pbmRleCA3NWUxZTJhOGZjODNhLi4zZWY1ZDhiYmY1NTJlIDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcXG4rKysgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXFxuQEAgLTQzNzcsOCArNDM3Nyw4IEBAIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbiBcXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHtcXG4gXFx0XFx0YnIgPSB2bGFuLVxcdTAwM2VicjtcXG4gXFxuLVxcdFxcdGlmICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8XFxuLVxcdFxcdCAgICAob24gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0aWYgKG9uIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxcbiBcXHRcXHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXFx1MDAyNnZsYW4tXFx1MDAzZWJyX21jYXN0X2N0eCkpKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNTozOC4yNzMwMTcxNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyOTQ1MTEzMTM3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfdmxhbl9hZGRcIixcbiAgICBcImJyX3ZsYW5fZGVsZXRlXCIsXG4gICAgXCJuYnBfdmxhbl9hZGRcIixcbiAgICBcIm5icF92bGFuX2RlbGV0ZVwiLFxuICAgIFwiYnJfYm9vbG9wdF90b2dnbGVcIixcbiAgICBcImJyX3ZsYW5fZmlsdGVyX3RvZ2dsZVwiLFxuICAgIFwiYnJfdmxhbl9ydG1fcHJvY2Vzc19nbG9iYWxfb3B0aW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlYXJseSByZXR1cm4gY29uZGl0aW9uIGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCB3aXRoaW4gdGhlIGJyaWRnZSBtdWx0aWNhc3QgYW5kIFZMQU4gbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBob3cgVkxBTiBtdWx0aWNhc3QgY29udGV4dHMgYXJlIHRvZ2dsZWQgd2hlbiBgb25gIGlzIGZhbHNlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgYW5kIGlvY3RsIHdoZW4gY29uZmlndXJpbmcgYnJpZGdlIFZMQU5zIGFuZCBtdWx0aWNhc3Qgc25vb3Bpbmcgb3B0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmFiMWMzMGI2YjBhOWU3ZjUxYWFkNDhjMDc0ZjRlZjJlNmUxNTczMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA5OjM1OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbmluZGV4IDc1ZTFlMmE4ZmM4M2EuLjNlZjVkOGJiZjU1MmUgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG5AQCAtNDM3Nyw4ICs0Mzc3LDggQEAgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4gXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHtcbiBcdFx0YnIgPSB2bGFuLVx1MDAzZWJyO1xuIFxuLVx0XHRpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuLVx0XHQgICAgKG9uIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAob24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuIFx0XHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKSlcbiBcdFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNTozOC4yNzMwMTg1MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMzk0NTQ1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCcmlkZ2UgTXVsdGljYXN0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgYXJlIHRhcmdldGluZyB0aGUgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGZ1bmN0aW9uLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhhdCBmdW5jdGlvbjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gYWx0ZXJlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhhdCBhcmVhIOKAkyB0aGUgY2FsbCBzaXRlcywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgZXZlcnl0aGluZy4gSSBuZWVkIHRoZSBmdWxsIGNvbnRleHQgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2Ugb24gbXVsdGljYXN0IGZvcndhcmRpbmcgd2l0aGluIHRoZSBicmlkZ2UuIFRoaXMgY291bGQgYmUgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgYnVnIGZpeCwgb3IgZXZlbiBhIG5ldyBmZWF0dXJlLiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MzU6NDYuNDEyNDc1Nzg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDYxNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzNDA9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2Njp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NDExPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDIzLVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQyNDpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI1LVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyNy1cXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQyODpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNTo0Ni40NjI1NDMyNDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTE1MTU0MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJyaWRnZSBNdWx0aWNhc3QgVG9nZ2xlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBjaGFuZ2UgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLiBUaGUgb2xkIGNvZGUgaGFkIHRoaXMgY29uZGl0aW9uYWwgcmV0dXJuIGJhc2VkIG9uIGAhYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pYCB3aGVuIGBvbmAgd2FzIGZhbHNlLiBCdXQgbm93LCB0aGF0IHBhcnQgb2YgdGhlIGxvZ2ljIGlzICpvbmx5KiBleGVjdXRlZCBpZiBgb25gIGlzICp0cnVlKi5cblxuVGhpcyBoYXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSWYgYG9uYCBpcyBmYWxzZSwgdGhpcyBtZWFucyB3ZSB3aWxsIG5vIGxvbmdlciByZXR1cm4gaWYgYGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAgaXMgZmFsc2UuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBjaGFuZ2VkLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBuZXcgYmVoYXZpb3VyLCBhbmQgdG8gZG8gdGhpcyBwcm9wZXJseSBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNhbGxzIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsZXJzIHRvIGRldGVybWluZSB0aGUgc2lkZS1lZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM1OjUyLjM3NzcwMDMzNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDIyNzI5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM0MD12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjUtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzY2OnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Ny17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MTE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjMtXFx0XFx0XFx0Y29udGludWU7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI0OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odnBvcnQsIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjUtXFx0fVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI3LVxcdGlmIChicl92bGFuX2lzX2JyZW50cnkodmxhbikpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI4OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odmxhbiwgb24pO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyOS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDczPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3NDp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3NS1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NTA9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTQtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1NTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTYtXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTIwMz1zdGF0aWMgdm9pZCBicl92bGFuX3B1dF9tYXN0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNC1cXHRcXHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MjE1OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNi1cXHRcXHRicl9tdWx0aWNhc3RfY3R4X2RlaW5pdChcXHUwMDI2bWFzdGVydi1cXHUwMDNlYnJfbWNhc3RfY3R4KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTI2Mz1zdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVxcdF9fdmxhbl9mbGFnc19jb21taXQodiwgZmxhZ3MpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjM1OTpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM2MC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM5MD1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQyNy1cXHRcXHRuYnBfdmxhbl9zZXRfdmxhbl9kZXZfc3RhdGUocCwgdi1cXHUwMDNldmlkKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0Mjg6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2LCBmYWxzZSk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtNDI5LVxcdFxcdGJyX211bHRpY2FzdF9wb3J0X2N0eF9kZWluaXQoXFx1MDAyNnYtXFx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTcxOT1zdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2MC1cXHRcXHQqY2hhbmdlZCA9IHRydWU7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6NzYxOlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odmxhbiwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzYyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MzU6NTIuNDI3OTM0NjQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0NTIxMDg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbioqXG5cbk9rYXksIHNvIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIGNhbiBzZWUgaXQncyBjYWxsZWQgZnJvbSBzZXZlcmFsIGtleSBicmlkZ2UgbXVsdGljYXN0IGFuZCBWTEFOIGZ1bmN0aW9uczogYGJyX3ZsYW5fcHV0X21hc3RlcmAsIGBfX3ZsYW5fYWRkYCwgYF9fdmxhbl9kZWxgLCBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbmAuIEdpdmVuIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIHRoaXMgaXMgZGVmaW5pdGVseSB3aXRoaW4gdGhlIHJlYWxtIG9mIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMg4oCTIHdlJ3JlIHRhbGtpbmcgaW1wb3J0YW50IHN0dWZmIGhlcmUuIEhpZ2ggcG90ZW50aWFsIGZvciBpbnRlcmVzdGluZyByZXN1bHRzLCBwb3RlbnRpYWxseSBjcml0aWNhbCBvbmVzLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIHNvdXJjZSBjb2RlIGlzIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCwgc28gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBtYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMg4oCTIGBuZXQvYnJpZGdlL01ha2VmaWxlYCBhbmQgYG5ldC9icmlkZ2UvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5LiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGJ1aWxkaW5nIGEgZnV6emluZyBjYW1wYWlnbiB0aGF0IGNhbiBhY3R1YWxseSBoaXQgdGhpcyB0YXJnZXQuIE5lZWQgdG8gaWRlbnRpZnkgd2hhdCBrZXJuZWwgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGFuZCBlbnN1cmUgdGhlIHJpZ2h0IG1vZHVsZXMgYXJlIGxvYWRlZCB0byBlbmFibGUgdGhlIGZlYXR1cmUuIFRoZW4sIGl0J3MgdGltZSB0byBjcmFmdCB0aGUgZnV6emVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTc1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM1OjU4LjA3MzE0OTQxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzA5MjY3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSArPSBicl9uZXRmaWx0ZXIub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjAtXFxubmV0L2JyaWRnZS9NYWtlZmlsZToyMTpicmlkZ2UtJChDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcpICs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM1OjU4LjEzMDI0NjI1MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mzk0OTQwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBuZXR3b3JraW5nIGFuZCBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJR01QIFNub29waW5nIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgc3lzdGVtIGlzIHRlbGxpbmcgbWUgdGhhdCBgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYCBpcyBhIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGl0ZW0uIEZpbmUsIG1ha2VzIHNlbnNlLCBJR01QIHNub29waW5nIGlzIGNydWNpYWwgaW4gbWFueSBicmlkZ2VkIGVudmlyb25tZW50cy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlc2Ugb3B0aW9ucyBpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgIHJlbGF0ZXMgdG8gb3RoZXIgYnJpZGdpbmcgZmVhdHVyZXMuXG5cblRoZXJlZm9yZSwgSSdsbCBnbyBkaXJlY3RseSB0byBgbmV0L2JyaWRnZS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gYW5kIGFueSBkZXBlbmRlbmNpZXMgZm9yIGJvdGggYEJSSURHRV9JR01QX1NOT09QSU5HYCBhbmQgYWxzbyB0aGUgYmFzZSBicmlkZ2UgZnVuY3Rpb25hbGl0eSByZXByZXNlbnRlZCBieSBgQlJJREdFYC4gVGhpcyBjaGVjayB3aWxsIGNvbmZpcm0gdGhlIHJlbGF0aW9uc2hpcHMsIGFuZCBsZXQgbWUgc2VlIGlmIGFueXRoaW5nIGVsc2UgbmVlZHMgdG8gYmUgdHdlYWtlZC4gSSdsbCBiZSBsb29raW5nIGZvciByZWxhdGlvbnNoaXBzLCBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBvcHRpb25zIHdpdGhpbiB0aGF0IGNvbmZpZ3VyYXRpb24gc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNjowMS45Njk3NDMwNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDExNjI3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJJREdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL0tjb25maWctNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXFxubmV0L2JyaWRnZS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIjgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6MzY6Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIklHTVAvTUxEIHNub29waW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo1MDpjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTYzLVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxcbm5ldC9icmlkZ2UvS2NvbmZpZy02NS1cXHRib29sIFxcXCJNUlAgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjc2OmNvbmZpZyBCUklER0VfQ0ZNXFxubmV0L2JyaWRnZS9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIkNGTSBwcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MzY6MDIuMjM5ODcxNzI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MDk3NDczNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpZ2dpbmcgaW50byBCUklER0VfSUdNUF9TTk9PUElORyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYEJSSURHRV9JR01QX1NOT09QSU5HYC4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IG90aGVyIGNvbXBvbmVudHMsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIHJlbHkgb24sIG9yIGFyZSBpbmZsdWVuY2VkIGJ5LCB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgY29ubmVjdGlvbnMgaXMgY3J1Y2lhbCBiZWZvcmUgbWFraW5nIGFueSBjaGFuZ2VzIG9yIHRyb3VibGVzaG9vdGluZyBpc3N1ZXMgcmVsYXRlZCB0byBJR01QIHNub29waW5nIHdpdGhpbiBhIGJyaWRnZWQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBrbm93IHRoZSByaXBwbGUgZWZmZWN0LiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjczLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MzY6MDguOTQ5NjIyNjA2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDg2MDExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZz02PWNvbmZpZyBCUklER0VcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6MzY6Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIklHTVAvTUxEIHNub29waW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNjowOS4wMDA0OTA5NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5MzQ1MzQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBCcmlkZ2UgQ29uZmlndXJhdGlvbiBGaWxlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzYuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBjb25maWd1cmVkIHRoZXJlLCBwcm9iYWJseSBzb21lIGZlYXR1cmUgb3Igc2V0dGluZyByZWxhdGVkIHRvIG5ldHdvcmsgYnJpZGdpbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgYWJvdXQgdGhpbmdzIGxpa2Ugc3Bhbm5pbmcgdHJlZSBwcm90b2NvbCAoU1RQKSwgdGhlIGZvcndhcmRpbmcgZGF0YWJhc2UsIG9yIHBlcmhhcHMgc29tZSBicmlkZ2Utc3BlY2lmaWMgaGFyZHdhcmUgb2ZmbG9hZCBvcHRpb25zLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFzIHdlbGwgYXMgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgYWZmZWN0IGhvdyB0aGVzZSBicmlkZ2UgZnVuY3Rpb25hbGl0aWVzIGFyZSBjb21waWxlZCBhbmQgaW5jbHVkZWQuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgd2UgY2FuIHVuZWFydGghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNjoxNS4yOTM5NDcwMDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcbiAgMzE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzI6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBicmlkZ2UuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxuICAzNzpcXHRcXHRib29sIFxcXCJJR01QL01MRCBzbm9vcGluZ1xcXCJcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDQwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxcbiAgNDM6XFx0XFx0ICBmb3J3YXJkIG11bHRpY2FzdCB0cmFmZmljIGJhc2VkIG9uIElHTVAvTUxEIHRyYWZmaWMgcmVjZWl2ZWQgZnJvbVxcbiAgNDQ6XFx0XFx0ICBlYWNoIHBvcnQuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNjoxNS4yOTQwMDE1MDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAyMzAwMTk0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgQnJpZGdlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGBCUklER0VgIGFuZCBgSU5FVGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGEgbmV0d29yayBicmlkZ2UgYW5kIHRoZSBJbnRlcm5ldCBQcm90b2NvbCBhcmUgZm91bmRhdGlvbmFsLiBOb3csIGl0J3MgbW9kaWZ5aW5nIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCwgYW5kIHRoYXQgZnVuY3Rpb24gdGFrZXMgYSBgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbmAuIE9rYXksIHNlZW1zIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIFZMQU5zIGFuZCBtdWx0aWNhc3QgaW4gdGhlIGJyaWRnZS4gVGhhdCB0cmlnZ2VycyBhIHF1ZXN0aW9uOiBpcyBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBhIHJlcXVpcmVtZW50IGhlcmU/IEl0IHByb2JhYmx5IGlzLCBidXQgSSBhbHdheXMgdmVyaWZ5LiBUaW1lIHRvIGNoZWNrIGBuZXQvYnJpZGdlL0tjb25maWdgIGFuZCBjb25maXJtLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM2OjI0LjMxNzAxNjQ4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xcbiAgNTE6XFx0XFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxuICA1MjpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgNTM6XFx0XFx0ZGVwZW5kcyBvbiBWTEFOXzgwMjFRXFxuICA1NDpcXHRcXHRkZWZhdWx0IG5cXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcXG4gIDU3OlxcdFxcdCAgcmVjZWl2ZSBhbmQgZm9yd2FyZCB0cmFmZmljIGJhc2VkIG9uIFZMQU4gaW5mb3JtYXRpb24gaW4gdGhlIHBhY2tldFxcbiAgNTg6XFx0XFx0ICBhbnkgVkxBTiBpbmZvcm1hdGlvbiBjb25maWd1cmVkIG9uIHRoZSBicmlkZ2UgcG9ydCBvciBicmlkZ2UgZGV2aWNlLlxcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICA2MzpcXHRcXG4gIDY0OlxcdGNvbmZpZyBCUklER0VfTVJQXFxuICA2NTpcXHRcXHRib29sIFxcXCJNUlAgcHJvdG9jb2xcXFwiXFxuICA2NjpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgNjc6XFx0XFx0ZGVmYXVsdCBuXFxuICA2ODpcXHRcXHRoZWxwXFxuICA2OTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBNUlBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MzY6MjQuMzE3MDgyNDAzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNTY3Mzg0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBteSBmZWxsb3cgZXhwZXJ0czpcblxuKipJbnZlc3RpZ2F0aW5nIFZMQU4gRmlsdGVyaW5nIENvbXBpbGF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGFraW5nIGEgbG9vayBhdCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIE15IGZpcnN0IGh1bmNoIGlzIHRvIHZlcmlmeSBpdHMgY29tcGlsYXRpb24gc3RhdGUgdW5kZXIgdGhlIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIGNvbmZpZ3VyYXRpb24uIFRoZSB3aG9sZSBwb2ludCBpcyB0byBlbnN1cmUgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGFzIGV4cGVjdGVkLCBvciBpcyBhcHByb3ByaWF0ZWx5IGV4Y2x1ZGVkLCB3aGVuIFZMQU4gZmlsdGVyaW5nIGlzIHR1cm5lZCBvZmYuIEknbGwgbmVlZCB0byBkaWcgaW50byBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgIGFuZCBjaGVjayB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcy4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGNvZGUncyBkZXNpZ25lZCB0byBiZSBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGJhc2VkIG9uIHRoYXQgc3BlY2lmaWMgZmVhdHVyZSBmbGFnLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gY2x1dHRlciB1cCB0aGUga2VybmVsIHdoZW4gVkxBTiBmaWx0ZXJpbmcgaXMgbm90IGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM2OjMwLjM3MzgyMzcxN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5MzkyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDczPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3NDp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3NS1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NTA9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTQtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1NTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTYtXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBvbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MzY6MzAuNDI3NzY4NDc0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzAxODY4NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCcmlkZ2UncyBQcml2YXRlIEhlYWRlcioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZm9jdXNpbmcgb24gYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYC4gU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBhcm91bmQgbGluZSAxNTU1LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBzb21lIGNydWNpYWwgaW50ZXJuYWwgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcy4gSSdtIGd1ZXNzaW5nIGl0IHByb2JhYmx5IGRlYWxzIHdpdGggdGhlIGNvcmUgb2YgdGhlIGJyaWRnZSBpbXBsZW1lbnRhdGlvbiwgbGlrZWx5IGRhdGEgc3RydWN0dXJlcyB1c2VkIGZvciB0aGUgZm9yd2FyZGluZyBkYXRhYmFzZSwgc3Bhbm5pbmcgdHJlZSwgb3IgcGVyaGFwcyBzb21lIGludGVybmFsIGV2ZW50IGhhbmRsaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gdGhlcmUgdG8gYWRkcmVzcyBteSBjdXJyZW50IHByb2JsZW0uIEknbSByZWFsbHkgaG9waW5nIHRoZXJlIGlzIG5vIHdlaXJkIGxvY2tpbmcuIExldCdzIHNlZSBpZiB0aGlzIGxpbmVzIHVwIHdpdGggbXkgaHlwb3RoZXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM2OjQwLjcyOTYzOTk2M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9wcml2YXRlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTU0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU0MDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfY3R4X2luaXQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcXG4xNTQxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXFxuMTU0MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG4xNTQzOlxcdHtcXG4xNTQ0OlxcdH1cXG4xNTQ1OlxcdFxcbjE1NDY6XFx0c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9wb3J0X2N0eF9kZWluaXQoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuMTU0NzpcXHR7XFxuMTU0ODpcXHR9XFxuMTU0OTpcXHRcXG4xNTUwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXFxuMTU1MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB1OCBzdGF0ZSlcXG4xNTUyOlxcdHtcXG4xNTUzOlxcdH1cXG4xNTU0OlxcdFxcbjE1NTU6XFx0c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcXG4xNTU2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGJvb2wgb24pXFxuMTU1NzpcXHR7XFxuMTU1ODpcXHR9XFxuMTU1OTpcXHRcXG4xNTYwOlxcdHN0YXRpYyBpbmxpbmUgaW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuMTU2MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCBvbixcXG4xNTYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTU2MzpcXHR7XFxuMTU2NDpcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTU2NTpcXHR9XFxuMTU2NjpcXHRcXG4xNTY3OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXFxuMTU2ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBib29sIG9uKVxcbjE1Njk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNjo0MC43Mjk3ODc3MjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM2MjM0MjI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIGJsb2NrIG9mIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQncyBnb3Zlcm5pbmcgaXRzIHZpc2liaWxpdHkuIFRoZSBgI2lmZGVmYCBkaXJlY3RpdmUgaXMgdGhlIGdpdmVhd2F5LiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiV2hhdCBwcmVwcm9jZXNzb3IgbWFjcm8gaXMgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhpcyBzZWN0aW9uP1wiIEl0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogaGVyZS4gSXMgdGhpcyBmb3IgYSBzcGVjaWZpYyBwbGF0Zm9ybSwgYSBkZWJ1Z2dpbmcgYnVpbGQsIGFuIG9wdGlvbmFsIGZlYXR1cmUsIG9yIHdoYXQ/IEtub3dpbmcgdGhlIG1hY3JvJ3MgZGVmaW5pdGlvbiAob3IgcG90ZW50aWFsIGRlZmluaXRpb25zKSBpcyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwLiBUaGlzIGlzIG1vcmUgdGhhbiBqdXN0IHJlYWRpbmcgdGhlIGNvZGU7IGl04oCZcyBhYm91dCBncmFzcGluZyB0aGUgZGVzaWduIGRlY2lzaW9ucyB0aGF0IGxlZCB0byB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSwgbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IG1hY3JvcyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBiZWhhdmlvciB1bmRlciB2YXJpb3VzIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njg1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNjo0OS4wOTIxMzIyNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNTg1MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD02OT1zdHJ1Y3QgbWFjX2FkZHIge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzItXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NzM6I2lmZGVmIENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTc0LS8qIG91ciBvd24gcXVlcmllciAqL1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTE4PXN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQge1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjExOTojaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTIwLVxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRcXHRcXHQqcG9ydDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE0MD1zdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCB7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTQxOiNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDItXFx0c3RydWN0IG5ldF9icmlkZ2VcXHRcXHQqYnI7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zOTgtXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGZsYWdzO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjM5OTojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQwMC1cXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwXFx0X19yY3UgKnZsZ3JwO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDI2LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjQyNzojaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDI4LVxcdHN0cnVjdCBicmlkZ2VfbWNhc3Rfc3RhdHNcXHRfX3BlcmNwdSAqbWNhc3Rfc3RhdHM7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00MzQtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NDM1OiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00MzYtXFx0Y2hhclxcdFxcdFxcdFxcdHN5c2ZzX25hbWVbSUZOQU1TSVpdO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDM4LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjQzOTojaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00NDAtXFx0c3RydWN0IG5ldHBvbGxcXHRcXHRcXHQqbnA7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDQxLSNlbmRpZlxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjQ0MjojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00NDMtXFx0LyogSWRlbnRpZmllciB1c2VkIHRvIGdyb3VwIHBvcnRzIHRoYXQgc2hhcmUgdGhlIHNhbWUgc3dpdGNoZGV2XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01MDA9c3RydWN0IG5ldF9icmlkZ2Uge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTA2LVxcdC8qIFRoZXNlIGZpZWxkcyBhcmUgYWNjZXNzZWQgb24gZWFjaCBwYWNrZXQgKi9cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo1MDc6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01MDgtXFx0X19iZTE2XFx0XFx0XFx0XFx0dmxhbl9wcm90bztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTU1Mi1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo1NTM6I2lmZGVmIENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTU1NC1cXHRzdHJ1Y3QgYnJpZGdlX21jYXN0X3N0YXRzXFx0X19wZXJjcHUgKm1jYXN0X3N0YXRzO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTc4LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjU3OTojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01ODAtXFx0LyogQ291bnRlciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGF0IGhhcmR3YXJlIGRvbWFpbnMgZ2V0IHVuaXF1ZVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTk3PXN0cnVjdCBicl9pbnB1dF9za2JfY2Ige1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNjAwLVxcdHUxNiBmcmFnX21heF9zaXplO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjYwMTojaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNjAyLVxcdHU4IGlnbXA7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MDgtXFx0dTggZ3JhdF9hcnA6MTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo2MDk6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MTAtXFx0dTggdmxhbl9maWx0ZXJlZDoxO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxMS0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo2MTI6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxMy1cXHR1OCBicl9uZXRmaWx0ZXJfYnJvdXRlOjE7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MTUtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NjE2OiNpZmRlZiBDT05GSUdfTkVUX1NXSVRDSERFVlxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxNy1cXHQvKiBTZXQgaWYgVFggZGF0YSBwbGFuZSBvZmZsb2FkaW5nIGlzIHVzZWQgdG93YXJkcyBhdCBsZWFzdCBvbmVcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYzNy1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo2Mzg6I2lmZGVmIENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYzOS0jIGRlZmluZSBCUl9JTlBVVF9TS0JfQ0JfTVJPVVRFUlNfT05MWShfX3NrYilcXHQoQlJfSU5QVVRfU0tCX0NCKF9fc2tiKS1cXHUwMDNlbXJvdXRlcnNfb25seSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTc0Mj1zdGF0aWMgaW5saW5lIHU4IGJyX3ZsYW5fbXVsdGljYXN0X3JvdXRlcihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzQ1LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjc0NjojaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzQ3LVxcdGlmICghYnJfdmxhbl9pc19tYXN0ZXIodikpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD04MTM9bmV0ZGV2X3R4X3QgYnJfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6ODE0OiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgxNS1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTY5PWludCBicl9pb2N0bF9zdHViKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKnVhcmcpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTcxLS8qIGJyX211bHRpY2FzdC5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTcyOiNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05NzMtaW50IGJyX211bHRpY2FzdF9yY3Yoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKipicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTc0PWJyX211bHRpY2FzdF9jdHhfb3B0aW9uc19lcXVhbChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4MSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1ODEtLyogYnJfdmxhbi5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU4MjojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1ODMtYm9vbCBicl9hbGxvd2VkX2luZ3Jlc3MoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTg4OD1zdGF0aWMgaW5saW5lIHUxNiBicl92bGFuX2ZsYWdzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBwdmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTg5NS0vKiBicl92bGFuX29wdGlvbnMuYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4OTY6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODk3LWJvb2wgYnJfdmxhbl9vcHRzX2VxX3JhbmdlKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZfY3VycixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE5NDM9c3RhdGljIGlubGluZSBib29sIGJyX3ZsYW5fc3RhdGVfYWxsb3dlZCh1OCBzdGF0ZSwgYm9vbCBsZWFybl9hbGxvdylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTYtLyogYnJfbXN0LmMgKi9cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTU3OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk1OC1ERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoYnJfbXN0X3VzZWQpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MjE3Nj1pbnQgYnJfcHJvY2Vzc192bGFuX2luZm8oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjE4Mi1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMTgzOiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMTg0LS8qIGJyX3N5c2ZzX2lmLmMgKi9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTIxOTg9c3RhdGljIGlubGluZSB2b2lkIGJyX3N5c2ZzX2RlbGJyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuOyB9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMjAxLS8qIGJyX3N3aXRjaGRldi5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjIwMjojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMjAzLWludCBicl9zd2l0Y2hkZXZfcG9ydF9vZmZsb2FkKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM2OjQ5LjI3MjczMjc3MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk1MTE1MTc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBWTEFOIENvbnRleHQgb2YgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gKipcblxuT2theSwgc28gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLi4uIHJpZ2h0LCBpdCdzIGRlZmluZWQgd2l0aGluIGBicl9tdWx0aWNhc3QuY2AuIFRoYXQgbWFrZXMgc2Vuc2UsIGFuZCBJIHJlbWVtYmVyIGl0J3MgY29udGluZ2VudCBvbiBgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYCBiZWluZyBlbmFibGVkLiBCdXQgbXkgY29uY2VybiAqbm93KiBpcyB0aGUgcGFyYW1ldGVyOiBpdCB0YWtlcyBhIGBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuYC4gVGhlIHF1ZXN0aW9uIHRoYXQgc3ByaW5ncyB0byBtaW5kIGltbWVkaWF0ZWx5IGlzLCB3aGF0IGhhcHBlbnMgdG8gdGhpcyBzdHJ1Y3QgaWYgVkxBTiBmaWx0ZXJpbmcsIGFzIGRlZmluZWQgYnkgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLCBpcyBkaXNhYmxlZD8gSXMgdGhlIHN0cnVjdCBldmVuIGRlZmluZWQgaW4gdGhhdCBzY2VuYXJpbz8gSSBuZWVkIHRvIGNsYXJpZnkgd2hldGhlciB0aGUgZnVuY3Rpb24gY2FuIGFjdHVhbGx5ICp3b3JrKiBpbiB0aGF0IGNvbmZpZ3VyYXRpb24uIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5gLCBpbiB0aGlzIGNvbnRleHQsIGhhcyB0byBiZSBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgLiBUaW1lIHRvIGRpdmUgaW4gdGhlcmUgYW5kIHNlZSB3aGF0IHRoZSBpbmNsdWRlIGRlcGVuZGVuY2llcyBsb29rIGxpa2UgZm9yIHRoYXQgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE2MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNzozNy4yMjM4ODY2OTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTE3NDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE4Mz1lbnVtIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIyMC0gKi9cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMjE6c3RydWN0IG5ldF9icmlkZ2VfdmxhbiB7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjIyLVxcdHN0cnVjdCByaGFzaF9oZWFkXFx0XFx0dm5vZGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM3OjM3LjQzNTA2NjY3OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA3ODAxMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBmb3IgVkxBTiBGaWx0ZXJpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgYCNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gVGhpcyBpcyB0aGUgZmlyc3QgcGxhY2UgSSdkIGxvb2sgdG8gc2VlIGlmIFZMQU4gZmlsdGVyaW5nIGZ1bmN0aW9uYWxpdHkgaXMgZXZlbiAqY29tcGlsZWQqIGludG8gdGhlIGtlcm5lbCBmb3IgdGhlIGJyaWRnaW5nIGNvbmZpZ3VyYXRpb24uIFdpdGhvdXQgdGhhdCwgdGhlcmUncyBubyBwb2ludCBpbiBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGl0J3MgaW1wbGVtZW50ZWQuIEl0J3MgdGhlIG1vc3QgZnVuZGFtZW50YWwgcHJlbGltaW5hcnkgY2hlY2sgdG8gbWFrZSBiZWZvcmUgSSB3YXN0ZSB0aW1lIG9uIG1vcmUgY29tcGxpY2F0ZWQgcGFydHMgb2YgdGhlIGNvZGUuIEZpbmRpbmcgdGhpcyB3aWxsIGluZm9ybSBteSBzdWJzZXF1ZW50IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzc6NDEuMDQyODcwNjU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0ICogQHBvcnRfbWNhc3RfY3R4OiBpZiBNQVNURVIgZmxhZyB1bnNldCwgdGhpcyBpcyB0aGUgcGVyLXBvcnQvdmxhbiBtdWx0aWNhc3RcXG4gMjExOlxcdCAqICAgICAgICAgICAgICAgICAgY29udGV4dFxcbiAyMTI6XFx0ICogQG1zdGk6IGlmIE1BU1RFUiBmbGFnIHNldCwgdGhpcyBob2xkcyB0aGUgVkxBTnMgTVNUIGluc3RhbmNlXFxuIDIxMzpcXHQgKiBAdmxpc3Q6IHNvcnRlZCBsaXN0IG9mIFZMQU4gZW50cmllc1xcbiAyMTQ6XFx0ICogQHJjdTogdXNlZCBmb3IgZW50cnkgZGVzdHJ1Y3Rpb25cXG4gMjE1OlxcdCAqXFxuIDIxNjpcXHQgKiBUaGlzIHN0cnVjdHVyZSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgZ2xvYmFsIHBlci1WTEFOIGVudHJpZXMgY29udGFpbmVkIGluXFxuIDIxNzpcXHQgKiB0aGUgYnJpZGdlIHJoYXNodGFibGUgYW5kIHRoZSBsb2NhbCBwZXItcG9ydCBwZXItVkxBTiBlbnRyaWVzIGNvbnRhaW5lZCBpblxcbiAyMTg6XFx0ICogdGhlIHBvcnQncyByaGFzaHRhYmxlLiBUaGUgdW5pb24gZW50cmllcyBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgZGVwZW5kaW5nIG9uXFxuIDIxOTpcXHQgKiB0aGUgZW50cnkgZmxhZ3MgdGhhdCBhcmUgc2V0LlxcbiAyMjA6XFx0ICovXFxuIDIyMTpcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuIHtcXG4gMjIyOlxcdFxcdHN0cnVjdCByaGFzaF9oZWFkXFx0XFx0dm5vZGU7XFxuIDIyMzpcXHRcXHRzdHJ1Y3Qgcmhhc2hfaGVhZFxcdFxcdHRub2RlO1xcbiAyMjQ6XFx0XFx0dTE2XFx0XFx0XFx0XFx0dmlkO1xcbiAyMjU6XFx0XFx0dTE2XFx0XFx0XFx0XFx0ZmxhZ3M7XFxuIDIyNjpcXHRcXHR1MTZcXHRcXHRcXHRcXHRwcml2X2ZsYWdzO1xcbiAyMjc6XFx0XFx0dThcXHRcXHRcXHRcXHRzdGF0ZTtcXG4gMjI4OlxcdFxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzIF9fcGVyY3B1ICpzdGF0cztcXG4gMjI5OlxcdFxcdHVuaW9uIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzc6NDEuMDQzMDU1ODA0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MTY5ODg3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVkxBTiBhbmQgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgYHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5gIGlzIGFsd2F5cyBwcmVzZW50LCB3aGljaCBzZWVtcyByZWFzb25hYmxlIGdpdmVuIGl0cyB1YmlxdWl0b3VzIHVzZSBpbiBicmlkZ2luZy4gQnV0IG5vdyBJIG5lZWQgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gSSBzdXNwZWN0IGl0J3MgbGlua2VkIHRvIElHTVAgc25vb3BpbmcuIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlLlxuXG5BbHJpZ2h0LCBjaGVja2luZyBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgLCBJIHNlZSBteSBodW5jaCB3YXMgY29ycmVjdC4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gICppcyogaW5kZWVkIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgIGJsb2NrLiBUaGF0IG1lYW5zIHRoYXQgdG8gaGF2ZSB0aGF0IGZ1bmN0aW9uIGRlZmluZWQsIGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgICptdXN0KiBiZSBlbmFibGVkLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaXMgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGEgaGFyZCByZXF1aXJlbWVudD8gTGV0J3MgdHJhY2UgdGhlIGNhbGxzIHRvIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gTG9va3MgbGlrZSBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYGJyX3ZsYW4uY2AgYW5kIGBicl9tdWx0aWNhc3QuY2AuIFNvIGxldCdzIGxvb2sgYXQgYGJyX3ZsYW4uY2AgYW5kIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE3MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM3OjQ2Ljg2MDA0ODUyOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MjM1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL2JyX3ZsYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMTQtXFx0XFx0X192bGFuX2RlbF9saXN0KG1hc3RlcnYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjIxNTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKG1hc3RlcnYsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMTYtXFx0XFx0YnJfbXVsdGljYXN0X2N0eF9kZWluaXQoXFx1MDAyNm1hc3RlcnYtXFx1MDAzZWJyX21jYXN0X2N0eCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yNjM9c3RhdGljIGludCBfX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM1OC1cXHRfX3ZsYW5fZmxhZ3NfY29tbWl0KHYsIGZsYWdzKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTk6XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2LCB0cnVlKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zNjAtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0zOTA9c3RhdGljIGludCBfX3ZsYW5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjctXFx0XFx0bmJwX3ZsYW5fc2V0X3ZsYW5fZGV2X3N0YXRlKHAsIHYtXFx1MDAzZXZpZCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6NDI4OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQyOS1cXHRcXHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFxcdTAwMjZ2LVxcdTAwM2Vwb3J0X21jYXN0X2N0eCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz03MTk9c3RhdGljIGludCBicl92bGFuX2FkZF9leGlzdGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjAtXFx0XFx0KmNoYW5nZWQgPSB0cnVlO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc2MTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2Mi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM3OjQ2LjkwNzc3NzAxNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDIzNzUyMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIG9mIGBicl92bGFuLmNgKipcblxuT2theSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgc29tZXRoaW5nIGFib3V0IHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGUgYnJpZGdlIFZMQU4gZmlsdGVyaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIHdvbmRlcmluZyBpZiB0aGUgYGJyX3ZsYW4uY2AgZmlsZSBnZXRzIGNvbXBpbGVkIGV2ZW4gd2hlbiB0aGUgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkaXNhYmxlZC4gSXQgc2VlbXMgYSBiaXQgb2RkIGlmIGl0IGRvZXMsIGFuZCBpdCB3b3VsZCBiZSBhIGdvb2Qgb3B0aW1pemF0aW9uIGlmIGl0IGRpZG4ndC4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gaXQgZGVhbHMgd2l0aCB0aGUgYnVpbGQgcHJvY2VzcywgaXMgdG8gY2hlY2sgdGhlIGBuZXQvYnJpZGdlL01ha2VmaWxlYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIG9yIGRpcmVjdGl2ZXMuIEknbGwgc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNzo1MS45MzE1MzI3MDZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTQwNDMzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl92bGFuXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9NYWtlZmlsZT0yMT1icmlkZ2UtJChDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcpICs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjItXFxubmV0L2JyaWRnZS9NYWtlZmlsZToyMzpicmlkZ2UtJChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKSArPSBicl92bGFuLm8gYnJfdmxhbl90dW5uZWwubyBicl92bGFuX29wdGlvbnMubyBicl9tc3Qub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM3OjUyLjExMjk0MjAwOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg1MTI4ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEJyaWRnZSBWTEFOIGFuZCBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgYnJfdmxhbi5jYCBpcyBkZWZpbml0ZWx5IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHNwZWNpZmljYWxseSB0aWVkIHRvIHRoZSBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2Aga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBJIHdhcyBqdXN0IHJldmlld2luZyB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgaXQncyBhbHdheXMgZ29vZCB0byBjb25maXJtIHRob3NlIGJ1aWxkLXRpbWUgZmxhZ3MuXG5cbk5vdywgdGhhdCBicmluZ3MgbWUgdG8gYGJyX211bHRpY2FzdC5jYC4gQWgsIHllcywgdGhpcyBvbmUgaXMgZ292ZXJuZWQgYnkgYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AuIEkgc2VlIHRoZSBjb25uZWN0aW9uIG5vdy4gSSdtIG5vdGluZyB0aGUgY2xlYXIgbGluayB0aGVyZSBiZXR3ZWVuIHRoZSBJR01QIHNub29waW5nIGZ1bmN0aW9uYWxpdHkgYW5kIHRoaXMgbW9kdWxlLlxuXG5BbmQgdGhlbiB3aXRoaW4gYGJyX211bHRpY2FzdC5jYCwgSSd2ZSBub3RpY2VkIHRoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gLiBHb29kIHRvIGtlZXAgdGhhdCBoaWVyYXJjaHkgb2YgZnVuY3Rpb24gY2FsbHMgYW5kIGRlcGVuZGVuY2llcyBpbiBtaW5kLiBUaGF0IGludGVybmFsIHJlbGF0aW9uc2hpcCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBtdWx0aWNhc3QgVkxBTiBvcGVyYXRpb25zIGFyZSBzdHJ1Y3R1cmVkLiBJIHNob3VsZCBiZSBhYmxlIHRvIG1ha2UgaW5mZXJlbmNlcyBmcm9tIHRoZSBmYWN0IG9mIG9uZSBjYWxsaW5nIHRoZSBvdGhlciwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBkZWJ1Z2dpbmcgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUncyBleGVjdXRpb24gcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MDYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNzo1Ni4xOTgwNzQzMjFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzQwMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX211bHRpY2FzdF90b2dnbGVfdmxhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM2Nj12b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQxMC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MTE6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDEyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MzE6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDMyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQ2NC1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0NjU6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0NjYtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0NzA9Ym9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0ODAtXFx0dmxhbi1cXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfR0xPQkFMX01DQVNUX0VOQUJMRUQ7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDgxOlxcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDgyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNzo1Ni4yNDQ0MTk1MTlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI4NDQ4NTk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJyaWRnZSBNdWx0aWNhc3QgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgYmFjayBpbnRvIHRoaXMgYnJpZGdlIG11bHRpY2FzdCBjb2RlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhvc2UgY3J1Y2lhbCBmdW5jdGlvbnM6IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGluIHRoYXQgc3BlY2lmaWMgc2NlbmFyaW8gd2UncmUgaW50ZXJlc3RlZCBpbiDigJMgd2hlbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZGlzYWJsZWQuIEFyZSB0aGVzZSBmdW5jdGlvbnMgZXZlbiByZWxldmFudCBpbiB0aGF0IGNvbnRleHQ/IEkgc3VzcGVjdCB0aGV5IG1pZ2h0IG5vdCBiZSwgYnV0IEkgbmVlZCB0byBjb25maXJtLiBNeSBndXQgc2F5cyB0aGV5IHNob3VsZG4ndCBiZSBleGVjdXRlZCwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBjYWxscyBhcmUgaGFuZGxlZCBhcHByb3ByaWF0ZWx5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byBgYnJfbXVsdGljYXN0LmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NDksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozODowNC41Mjg5MDg3MloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMjc1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0zMDMtXFx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XFxubmV0L2JyaWRnZS9ici5jOjMwNDpcXHRcXHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnIuYy0zMDUtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MTE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MzAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDMxOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDc0PXZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDc1OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzYtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NTU9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTktXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU2MDpzdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgb24sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04OTQ9aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTIwLVxcdFxcdGJyX2luZm8oYnIsIFxcXCJ2bGFuIGZpbHRlcmluZyBkaXNhYmxlZCwgYXV0b21hdGljYWxseSBkaXNhYmxpbmcgbXVsdGljYXN0IHZsYW4gc25vb3BpbmdcXFxcblxcXCIpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjkyMTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIGZhbHNlLCBOVUxMKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MjItXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozODowNC41NzYxNDQzOThaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAwMTMxNjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJyaWRnZSBWTEFOIEZpbHRlcmluZyBCZWhhdmlvcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBici5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gYGJyX2Jvb2xvcHRfdG9nZ2xlYC4gSSBzZWUgdGhhdCBpdCBjYWxscyBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBwb3BzIHVwOiBkb2VzIGBicl9ib29sb3B0X3RvZ2dsZWAgZXZlbiBnZXQgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZGlzYWJsZWQ/IEl0IHNlZW1zIGBici5jYCAqYWx3YXlzKiBnZXRzIGNvbXBpbGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy5cblxuQnV0IGhhbmcgb24sIGEgcmVkIGZsYWchIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGxpa2VseSBhY2Nlc3NlcyBgYnJfdmxhbl9ncm91cChicilgLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgdGhlIFZMQU4gZmlsdGVyaW5nIGZ1bmN0aW9uYWxpdHkgbWlnaHQgc3RpbGwgYmUgY3JlZXBpbmcgaW4uIExldCBtZSBxdWlja2x5IGp1bXAgb3ZlciB0byBgYnJfbXVsdGljYXN0LmNgIGFuZCBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCB0byBjb25maXJtIG15IHN1c3BpY2lvbiBhbmQgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBtb3JlIGNsZWFybHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdmxhbl9ncm91cCBpcyBhY2Nlc3NlZCB0byBjb25maXJtIHRoaXMgcG90ZW50aWFsIGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzYyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM4OjExLjU3NzQ2NDU4OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTEyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NDMwOlxcdFxcbjQ0MzE6XFx0aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxuNDQzMjpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuNDQzMzpcXHR7XFxuNDQzNDpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG40NDM1OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW47XFxuNDQzNjpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xcbjQ0Mzc6XFx0XFxuNDQzODpcXHRcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSA9PSBvbilcXG40NDM5OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ0NDA6XFx0XFxuNDQ0MTpcXHRcXHRpZiAob24gXFx1MDAyNlxcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpIHtcXG40NDQyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJDYW5ub3QgZW5hYmxlIG11bHRpY2FzdCB2bGFuIHNub29waW5nIHdpdGggdmxhbiBmaWx0ZXJpbmcgZGlzYWJsZWRcXFwiKTtcXG40NDQzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ0NDQ6XFx0XFx0fVxcbjQ0NDU6XFx0XFxuNDQ0NjpcXHRcXHR2ZyA9IGJyX3ZsYW5fZ3JvdXAoYnIpO1xcbjQ0NDc6XFx0XFx0aWYgKCF2ZylcXG40NDQ4OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ0NDk6XFx0XFxuNDQ1MDpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQsIG9uKTtcXG40NDUxOlxcdFxcbjQ0NTI6XFx0XFx0LyogZGlzYWJsZS9lbmFibGUgbm9uLXZsYW4gbWNhc3QgY29udGV4dHMgYmFzZWQgb24gdmxhbiBzbm9vcGluZyAqL1xcbjQ0NTM6XFx0XFx0aWYgKG9uKVxcbjQ0NTQ6XFx0XFx0XFx0X19icl9tdWx0aWNhc3Rfc3RvcChcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbjQ0NTU6XFx0XFx0ZWxzZVxcbjQ0NTY6XFx0XFx0XFx0X19icl9tdWx0aWNhc3Rfb3BlbihcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbjQ0NTc6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2YnItXFx1MDAzZXBvcnRfbGlzdCwgbGlzdCkge1xcbjQ0NTg6XFx0XFx0XFx0aWYgKG9uKVxcbjQ0NTk6XFx0XFx0XFx0XFx0YnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXFx1MDAyNnAtXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbjQ0NjA6XFx0XFx0XFx0ZWxzZVxcbjQ0NjE6XFx0XFx0XFx0XFx0YnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0X2N0eChcXHUwMDI2cC1cXHUwMDNlbXVsdGljYXN0X2N0eCk7XFxuNDQ2MjpcXHRcXHR9XFxuNDQ2MzpcXHRcXG40NDY0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2xpc3QsIHZsaXN0KVxcbjQ0NjU6XFx0XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHZsYW4sIG9uKTtcXG40NDY2OlxcdFxcbjQ0Njc6XFx0XFx0cmV0dXJuIDA7XFxuNDQ2ODpcXHR9XFxuNDQ2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzg6MTEuNTc3NzE3OTY4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NTM2NjY4NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgVkxBTiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgYnJfdmxhbl9ncm91cChicilgIGhlcmUuIFRoYXQgbWVhbnMgd2UncmUgZGVmaW5pdGVseSBsZXZlcmFnaW5nIFZMQU5zIHdpdGggdGhpcyBicmlkZ2UgKGBicmApLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJJ2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcywgYW5kIG1vc3QgbGlrZWx5IEknbGwgZmluZCB0aGUgZGVmaW5pdGlvbiBpbiBgYnJfcHJpdmF0ZS5oYC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIFZMQU4tcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHdvdWxkIGJlIGRlZmluZWQsIHNvIGxldCdzIHN0YXJ0IHRoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVybmFscyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24uIEtub3dpbmcgdGhlIGRldGFpbHMgaW4gYGJyX3ByaXZhdGUuaGAgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBjb250ZXh0IG9mIGhvdyB0aGVzZSBWTEFOcyBhcmUgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDA3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozODoxOC4wMzEzODc1NTJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzczNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX3ZsYW5fZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl9wcml2YXRlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTY0MD1pbnQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2NDMtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTY0NDpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKmJyX3ZsYW5fZ3JvdXAoXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTY0NS1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNjUwPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqbmJwX3ZsYW5fZ3JvdXAoXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjU1LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE2NTY6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpicl92bGFuX2dyb3VwX3JjdShcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjU3LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE4MTI9c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4MTgtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTgxOTpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKmJyX3ZsYW5fZ3JvdXAoXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTgyMC1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xODI1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqbmJwX3ZsYW5fZ3JvdXAoXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODMwLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4MzE6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpicl92bGFuX2dyb3VwX3JjdShcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODMyLVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzg6MTguMDc4NzY2NDhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3MzI2NjY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgYnJfcHJpdmF0ZS5oYCAtIFNwZWNpZmljYWxseSwgTGluZSAxODE5KipcblxuT2theSwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgIGhlYWRlciBmaWxlLiBNeSBpbnRlcmVzdCBpcyBwaXF1ZWQsIGFuZCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSAxODE5LiBJJ20gbGlrZWx5IGNoYXNpbmcgYSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uLCBvciBwZXJoYXBzIGEgbWFjcm8sIGZ1bmN0aW9uIHNpZ25hdHVyZSwgb3IgY29uc3RhbnQgdmFsdWUgdGhhdCdzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkgb3IgYSBidWcgSSdtIHRyeWluZyB0byBkaWFnbm9zZS4gR2l2ZW4gdGhlIGZpbGUgYW5kIHRoZSBsaW5lIG51bWJlciwgSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWV0aGluZyBsb3ctbGV2ZWwgYW5kIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGludGVybmFsIHdvcmtpbmdzIG9mIHRoZSBMaW51eCBicmlkZ2UgaW1wbGVtZW50YXRpb24uIEknbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gbmF2aWdhdGUgdGhyb3VnaCBtYWNybyBkZWZpbml0aW9ucywgc3RydWN0dXJlIG1lbWJlcnMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGlubGluZSBjb21tZW50cyB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGUgY29kZSBhdCB0aGF0IHNwZWNpZmljIGxvY2F0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTI4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzg6MjEuOTUyMDM2NDczWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxODEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODEwOlxcdH1cXG4xODExOlxcdFxcbjE4MTI6XFx0c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4xODEzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpkc3QsXFxuMTgxNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcXG4xODE1OlxcdHtcXG4xODE2OlxcdFxcdHJldHVybiAwO1xcbjE4MTc6XFx0fVxcbjE4MTg6XFx0XFxuMTgxOTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKmJyX3ZsYW5fZ3JvdXAoXFxuMTgyMDpcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuMTgyMTpcXHR7XFxuMTgyMjpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xODIzOlxcdH1cXG4xODI0OlxcdFxcbjE4MjU6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpuYnBfdmxhbl9ncm91cChcXG4xODI2OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuMTgyNzpcXHR7XFxuMTgyODpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xODI5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzg6MjEuOTUyMTYxOTQzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NzgwNDYxMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVkxBTiBGaWx0ZXJpbmcgYW5kIE11bHRpY2FzdCBTbm9vcGluZyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGUgZnVuY3Rpb24gYGJyX3ZsYW5fZ3JvdXBgIHJldHVybnMgYE5VTExgIHdoZW4gYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGRpc2FibGVkLiBUaGlzIGlzIGtleS4gTG9va2luZyBhdCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCwgdGhlIGNvZGUgY2hlY2tzIGZvciB0aGlzIGBOVUxMYCByZXR1cm47IGlmIGl0IGlzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLiBUaGF0IG1lYW5zIGlmIFZMQU4gZmlsdGVyaW5nIGlzIG9mZiwgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbmAgaXRzZWxmIGlzIG5ldmVyIGludm9rZWQuIFNvLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRoIGlzIGluYWNjZXNzaWJsZSB3aXRob3V0IGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC5cblxuSSB3YW50IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgc28gSSdtIGRvdWJsZS1jaGVja2luZyB3aGVyZSBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgaXMgYWN0dWFsbHkgY2FsbGVkLiBXaXRoaW4gYGJyX3ZsYW4uY2AsIHRoZSBjYWxscyBvcmlnaW5hdGUgZnJvbSBgYnJfdmxhbl9wdXRfbWFzdGVyYCwgYF9fdmxhbl9hZGRgLCBgX192bGFuX2RlbGAsIGFuZCBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgLiBOb3csIGNyaXRpY2FsbHksIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsc28gY29uZGl0aW9uYWwgb24gYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLiBUaGlzIGNvbmZpcm1zIG15IHN1c3BpY2lvbjogYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGFuIGFic29sdXRlIHByZXJlcXVpc2l0ZSB0byByZWFjaCBhbnkgb2YgdGhlc2UgcmVsZXZhbnQgY29kZSBzZWN0aW9ucy5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgd2UgYXJlIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBkZXBlbmRlbmNpZXMgY29tcGxldGVseS4gSXQgbG9va3MgbGlrZSBgQlJJREdFX0lHTVBfU05PT1BJTkdgIGRlcGVuZHMgb24gYEJSSURHRWAgYW5kIGBJTkVUYC4gYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgZGVwZW5kcyBvbiBgQlJJREdFYCBhbmQgYFZMQU5fODAyMVFgLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6XG5cbiogICBgQlJJREdFYFxuKiAgIGBJTkVUYFxuKiAgIGBWTEFOXzgwMjFRYFxuKiAgIGBCUklER0VfSUdNUF9TTk9PUElOR2BcbiogICBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYFxuXG5Ob3csIHRpbWUgdG8gbG9vayBpbnRvIGBWTEFOXzgwMjFRYCBhbmQgYW55IG90aGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzg6MjguNjMwMjEyMDA4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAyODE5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkxBTl84MDIxUVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvODAyMXEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvODAyMXEvS2NvbmZpZy01LVxcbm5ldC84MDIxcS9LY29uZmlnOjY6Y29uZmlnIFZMQU5fODAyMVFcXG5uZXQvODAyMXEvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCI4MDIuMVEvODAyLjFhZCBWTEFOIFN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvODAyMXEvS2NvbmZpZy0yMS1cXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXFxubmV0LzgwMjFxL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiR1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC84MDIxcS9LY29uZmlnLTMxLVxcbm5ldC84MDIxcS9LY29uZmlnOjMyOmNvbmZpZyBWTEFOXzgwMjFRX01WUlBcXG5uZXQvODAyMXEvS2NvbmZpZy0zMy1cXHRib29sIFxcXCJNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzg6MjguNjc2MjQ0OTY1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTgyNDQ5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGU6XG5cbioqRGl2aW5nIGludG8gdGhlIDgwMi4xUSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aGUgYG5ldC84MDIxcS9LY29uZmlnYCBmaWxlIGFuZCB6ZXJvIGluIGFyb3VuZCBsaW5lIDYuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciA4MDIuMVEgVkxBTiBoYW5kbGluZyBpbiB0aGUga2VybmVsIGFyZSBsaWtlbHkgdG8gYmUgZGVmaW5lZC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNlbnRyYWwgZW5hYmxlL2Rpc2FibGUgc3dpdGNoIGZvciB0aGUgODAyLjFRIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZC4gRGVwZW5kaW5nIG9uIGhvdyB0aGlzIGlzIHN0cnVjdHVyZWQsIEkgbWlnaHQgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSwgb3IgaWYgdGhpcyBpcyB0aGUgZ2VuZXJpYyBWTEFOIGltcGxlbWVudGF0aW9uIG9yIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBoYXJkd2FyZSBob29rcyBpbiB0aGlzIGZpbGUuIEknbSBhbHNvIGhvcGluZyB0aGF0IHRoaXMgc2VjdGlvbiBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgZGVmYXVsdCBiZWhhdmlvciBvciBwb3RlbnRpYWxseSBzb21lIGNyaXRpY2FsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMuIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgY2xlYW5seSBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgdG9vLiBJIHJlYWxseSBob3BlIHRoaXMgaXNuJ3QganVzdCBhIGJhc2ljLCBsb3ctbGV2ZWwgZW5hYmxlL2Rpc2FibGU7IEknZCBsaWtlIHRvIHNlZSBzb21lIHRob3VnaHRmdWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc2MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM4OjM0LjU3NDQ5Mjc2NVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDg3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvODAyMXEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBDb25maWd1cmF0aW9uIGZvciA4MDIuMVEgVkxBTiBzdXBwb3J0XFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBWTEFOXzgwMjFRXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBTZWxlY3QgdGhpcyBhbmQgeW91IHdpbGwgYmUgYWJsZSB0byBjcmVhdGUgODAyLjFRIFZMQU4gaW50ZXJmYWNlc1xcbiAgMTA6XFx0XFx0ICBvbiB5b3VyIEV0aGVybmV0IGludGVyZmFjZXMuIDgwMi4xUSBWTEFOIHN1cHBvcnRzIGFsbW9zdFxcbiAgMTE6XFx0XFx0ICBldmVyeXRoaW5nIGEgcmVndWxhciBFdGhlcm5ldCBpbnRlcmZhY2UgZG9lcywgaW5jbHVkaW5nXFxuICAxMjpcXHRcXHQgIGZpcmV3YWxsaW5nLCBicmlkZ2luZywgYW5kIG9mIGNvdXJzZSBJUCB0cmFmZmljLiBZb3Ugd2lsbCBuZWVkXFxuICAxMzpcXHRcXHQgIHRoZSAnaXAnIHV0aWxpdHkgaW4gb3JkZXIgdG8gZWZmZWN0aXZlbHkgdXNlIFZMQU5zLlxcbiAgMTQ6XFx0XFx0ICBTZWUgdGhlIFZMQU4gd2ViIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb246XFxuICAxNTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3LmNhbmRlbGF0ZWNoLmNvbS9+Z3JlZWFyL3ZsYW4uaHRtbFxcdTAwM2VcXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMTg6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCA4MDIxcS5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozODozNC41NzQ1NTQ3MzZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMTE0MTQ0Mjk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQnJpZGdlIE11bHRpY2FzdCBUb2dnbGUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBpdCBkb2Vzbid0IGFwcGVhciB0byBoYXZlIGFueSBleHBsaWNpdCBkZXBlbmRlbmNpZXMgYmVzaWRlcywgd2VsbCwgdGhlIG9idmlvdXMgbmVlZCBmb3IgYSBuZXR3b3JrIHN0YWNr4oCUc29tZXRoaW5nIGxpa2UgYE5FVGAuIE5vdGhpbmcgaW1tZWRpYXRlbHkganVtcHMgb3V0IGFzIG5lZWRpbmcgYW55IHNwZWNpYWwgYXR0ZW50aW9uIG9yIGV4b3RpYyBsaWJyYXJpZXMsIHdoaWNoIGlzIGdvb2QuXG5cblRoYXQgbWVhbnMgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSSdsbCBuZWVkIGBCUklER0VgLCBgSU5FVGAsIGBWTEFOXzgwMjFRYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBUaG9zZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIEknZCBleHBlY3QgdG8gc2VlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gTXkgZm9jdXMgaXMgb24gdGhpcyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgZnVuY3Rpb24g4oCTIHRoYXQncyB0aGUgb25lIGJlaW5nIG1vZGlmaWVkLCBhZnRlciBhbGwuIFJpZ2h0LCBzbyB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGdldHRpbmcgY2FsbGVkIGZyb20/IEkgc2VlIGEgbGlzdCBvZiBmdW5jdGlvbnMgY2FsbGluZyBpdDogYGJyX3ZsYW5fcHV0X21hc3RlcmAsIGBfX3ZsYW5fYWRkYCwgYF9fdmxhbl9kZWxgLCBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbmAuIFRoZXNlIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucyBpbnRlcm5hbGx5LCB3aGljaCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIGEgYml0LlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIGZpbmQgdGhlIHB1YmxpYyBBUEkgZW50cnkgcG9pbnRzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBub24tc3RhdGljIGZ1bmN0aW9ucyBjYWxsIHRoZXNlIGludGVybmFsIGZ1bmN0aW9ucywgZXNwZWNpYWxseSBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYCwgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSBjaGFuZ2UgcHJvcGFnYXRlcyBvdXR3YXJkcy4gTG9va2luZyBhdCBpdCwgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYCBhcmUgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuYC5cblxuTm93IEknbGwgc2hpZnQgZ2VhcnMgYW5kIGxvb2sgYXQgdGhlIGNhbGxlcnMgb2YgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHVzZWQuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgaW1wYWN0IG9mIGFueSBjaGFuZ2UgdG8gdGhlIGNvcmUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Mzg2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTU6MTUuNzE2MDAwODIzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjMyMDcxMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0zMDMtXFx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XFxubmV0L2JyaWRnZS9ici5jOjMwNDpcXHRcXHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnIuYy0zMDUtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MTE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MzAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDMxOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDc0PXZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDc1OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzYtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NTU9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTktXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU2MDpzdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgb24sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04OTQ9aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTIwLVxcdFxcdGJyX2luZm8oYnIsIFxcXCJ2bGFuIGZpbHRlcmluZyBkaXNhYmxlZCwgYXV0b21hdGljYWxseSBkaXNhYmxpbmcgbXVsdGljYXN0IHZsYW4gc25vb3BpbmdcXFxcblxcXCIpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjkyMTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIGZhbHNlLCBOVUxMKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MjItXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NToxNi4wNzkyMTM5NThaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzMjc2NDUyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkRpZ2dpbmcgaW50byBCcmlkZ2UgYW5kIFZMQU4gSW50ZXJhY3Rpb25zKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGEgY291cGxlIG9mIGtleSB0b2dnbGUgb3B0aW9ucyBoZXJlOiBgYnJfYm9vbG9wdF90b2dnbGVgIGFuZCBgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlYC4gU2VlbXMgbGlrZSBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBpbnRlcmFjdCwgb3IgaG93IGEgY2hhbmdlIGluIG9uZSBhZmZlY3RzIHRoZSBvdGhlci4gR29vZCB0byBrZWVwIHRoZXNlIGludGVyYWN0aW9ucyBmaXJtbHkgaW4gbWluZCwgZXNwZWNpYWxseSB3aXRoIG1vcmUgZHluYW1pYyBzeXN0ZW1zIGluIHBsYWNlLlxuXG5TcGVjaWZpY2FsbHksIEknbSBub3cgZ29pbmcgdG8gZHJpbGwgZG93biBhbmQgZXhhbWluZSB0aGUgY2FsbCBzaXRlcyBmb3IgYGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW5gLiBUaGlzIHN1Z2dlc3RzIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiBnbG9iYWwgVkxBTiBjb25maWd1cmF0aW9uIG9uIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYnJpZGdlIGNvbnRleHQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20sIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRob3NlIGNhbGxzLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBpbXBhY3QgaXMuIFRoaXMnbGwgaGVscCBtZSBzZWUgaWYgdGhlIHRvZ2dsZXMgaGF2ZSBpbXBsaWNhdGlvbnMgb24gYW55IGdsb2JhbCBmdW5jdGlvbnMuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyZGVwZW5kZW5jaWVzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU2OjA1LjQwNjg2MTUzMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2ODA1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MzE9aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0NjktXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDcwOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQ3MS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDc1PWludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzYtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDc3OmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDc4LVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU2MD1zdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU2Ni1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTY3OnN0YXRpYyBpbmxpbmUgYm9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU2OC1cXHRcXHRcXHRcXHRcXHRcXHQgICBib29sIG9uKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz01NTA9c3RhdGljIGludCBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTY0LVxcdFxcdG1jX3Nub29waW5nID0gbmxhX2dldF91OCh0YltCUklER0VfVkxBTkRCX0dPUFRTX01DQVNUX1NOT09QSU5HXSk7XFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo1NjU6XFx0XFx0aWYgKGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4odiwgISFtY19zbm9vcGluZykpXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy01NjYtXFx0XFx0XFx0KmNoYW5nZWQgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjowNS40NTY1NDkxMzhaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5ODAwODIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyB0aG91Z2ggaXQgd2VyZSBteSB0cmFpbiBvZiB0aG91Z2h0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgVkxBTiBNdWx0aWNhc3QgRmxvdyoqXG5cbk9rYXksIHNvIGBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGluIHRoaXMgbXVsdGljYXN0IHBhdGgsIGFuZCBpdCBjYWxscyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgbGluZWFnZSBhbmQgc2VlIHdob+KAmXMgYWN0dWFsbHkgdHJpZ2dlcmluZyB0aGlzIHBhcnRpY3VsYXIgY2FsbCBjaGFpbi4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGJyX3ZsYW5fcHJvY2Vzc19nbG9iYWxfb25lX29wdHNgLiBLbm93aW5nIGl0cyBkaXJlY3QgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGdsb2JhbCBWTEFOIG11bHRpY2FzdCBzZXR0aW5ncyBhcmUgdWx0aW1hdGVseSBhZGp1c3RlZC4gVGhpcyB3aWxsIGdpdmUgbWUgY29udGV4dCwgYW5kIGhlbHAgbWUgcmVhc29uIGFib3V0IHRoZSBwb3NzaWJsZSBpbXBhY3Qgb2YgY2hhbmdlcyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAgc2luY2UgdGhpcyBjYWxsIGNoYWluIHNlZW1zIGNlbnRyYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjMyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6MDguNzU0NTYwNzQ1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU5NDAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM9NTA4PXN0YXRpYyB2b2lkIGJyX3ZsYW5fZ2xvYmFsX29wdHNfbm90aWZ5KGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTQ5LVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NTUwOnN0YXRpYyBpbnQgYnJfdmxhbl9wcm9jZXNzX2dsb2JhbF9vbmVfb3B0cyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy01NTEtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jPTY4NT1pbnQgYnJfdmxhbl9ydG1fcHJvY2Vzc19nbG9iYWxfb3B0aW9ucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy03NDQtXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo3NDU6XFx0XFx0ZXJyID0gYnJfdmxhbl9wcm9jZXNzX2dsb2JhbF9vbmVfb3B0cyhiciwgdmcsIHYsIHRiLCBcXHUwMDI2Y2hhbmdlZCxcXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTc0Ni1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjowOC44MDIxNjE4NDNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMjUxNjgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkFuYWx5emluZyBWTEFOIENvbmZpZ3VyYXRpb24gUHJvY2Vzc2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zYCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQgY2FsbHMgYGJyX3ZsYW5fcHJvY2Vzc19nbG9iYWxfb25lX29wdHNgLiBOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSB1bmRlcmx5aW5nIHByb2Nlc3Nlcy4gU28sIG15IG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgZmxvdyBvZiB0aGluZ3MgYSBiaXQgZnVydGhlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNhbGxpbmcgdGhlIGNvcmUgVkxBTiBmdW5jdGlvbnMgLSBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaW5kIGFsbCB0aGUgY2FsbGVycyBvZiBgX192bGFuX2FkZGAsIGBfX3ZsYW5fZGVsYCwgYGJyX3ZsYW5fYWRkX2V4aXN0aW5nYCwgYW5kIGBicl92bGFuX3B1dF9tYXN0ZXJgLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgaW4gY29udGV4dCBvZiB0aGUgZ2xvYmFsIG9wdGlvbnMgcHJvY2Vzc2luZywgaXMga2V5IHRvIGZ1bGx5IHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjoxMi4yMzQ2ODEwNTRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTExMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdmxhbl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmM9MzI9c3RhdGljIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKmJyX3ZsYW5fbG9va3VwKHN0cnVjdCByaGFzaHRhYmxlICp0YmwsIHUxNiB2aWQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zNi1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNzpzdGF0aWMgdm9pZCBfX3ZsYW5fYWRkX3B2aWQoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzgtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz02MT1zdGF0aWMgYm9vbCBfX3ZsYW5fZmxhZ3NfdXBkYXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc5LVxcdGlmIChmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRClcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4MDpcXHRcXHRfX3ZsYW5fYWRkX3B2aWQodmcsIHYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTgxLVxcdGVsc2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTEwMz1zdGF0aWMgaW50IF9fdmxhbl92aWRfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyMy1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMjQ6c3RhdGljIHZvaWQgX192bGFuX2FkZF9saXN0KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTI1LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTIzND1zdGF0aWMgdm9pZCBicl92bGFuX2luaXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTI2Mi0gKi9cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyNjM6c3RhdGljIGludCBfX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yNjQtXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU2LVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjM1NzpcXHRfX3ZsYW5fYWRkX2xpc3Qodik7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVxcdF9fdmxhbl9mbGFnc19jb21taXQodiwgZmxhZ3MpO1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9Nzc5PWludCBicl92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQsIHUxNiBmbGFncywgYm9vbCAqY2hhbmdlZCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTgwOS1cXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnZsYW4tXFx1MDAzZXJlZmNudCwgMSk7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6ODEwOlxcdHJldCA9IF9fdmxhbl9hZGQodmxhbiwgZmxhZ3MsIGV4dGFjayk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtODExLVxcdGlmIChyZXQpIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTEzMTU9aW50IG5icF92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzQ3LVxcdHZsYW4tXFx1MDAzZXBvcnQgPSBwb3J0O1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEzNDg6XFx0cmV0ID0gX192bGFuX2FkZCh2bGFuLCBmbGFncywgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzQ5LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU2OjEyLjI4MTU5NzQ5MloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTQxNzYxMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkludGVybmFsIE5ldHdvcmsgVkxBTiBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgVkxBTiBhc3NpZ25tZW50cy4gU3BlY2lmaWNhbGx5LCBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgb3BlcmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggYWRkaW5nIFZMQU5zLiBcImJyX3ZsYW5fYWRkXCIgaW1tZWRpYXRlbHkgYnJpbmdzIHRvIG1pbmQgdGhlIGJyaWRnZSBpbnRlcmZhY2UsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFkZGluZyBhIFZMQU4gdGFnIHRvIGEgYnJpZGdlIGludGVyZmFjZS4gSSdtIGNvbnNpZGVyaW5nIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGZsb29kaW5nIGRvbWFpbnMsIGFuZCBob3cgdGhpcyB3aWxsIGFmZmVjdCB0cmFmZmljIGZvcndhcmRpbmcuIFRoZXJlIGFyZSB0aGUgdXN1YWwgc2VjdXJpdHkgY29uY2VybnMgSSdtIGZhY3RvcmluZyBpbiwgdG9vLCBvZiBjb3Vyc2UgLSBwcm9wZXIgVkxBTiBzZWdyZWdhdGlvbiBpcyBlc3NlbnRpYWwuXG5cblRoZW4sIFwibmJwX3ZsYW5fYWRkXCIuIFRoaXMgc3VnZ2VzdHMgYSBuZXR3b3JrIGJvb3QgcHJvY2VzcyBvciBQWEUgY29udGV4dC4gU28sIEknbSBtYXBwaW5nIHRoYXQgb250byB0aGUgYnJvYWRlciBwaWN0dXJlOyBjb25zaWRlcmluZyBob3cgd2UgaGFuZGxlIFZMQU4gYXNzaWdubWVudHMgZm9yIG5ldHdvcmsgYm9vdGluZyBvZiBkZXZpY2VzLiBUaGlzIHByb21wdHMgcXVlc3Rpb25zIGFib3V0IFZMQU4gdGFnZ2luZyBvbiB0aGUgYm9vdCBzZXJ2ZXIsIERIQ1AgY29uZmlndXJhdGlvbiB0byBhc3NpZ24gdGhlIGNvcnJlY3QgVkxBTiwgYW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIGFueSBwcmUtYm9vdCBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgYW5kIGhvdyB0aGV5IGRlcGVuZCBvbiBlYWNoIG90aGVyLiBIb3cgZG9lcyBpdCB0aWUgaW50byB0aGUgb3ZlcmFsbCBwcm92aXNpb25pbmcgd29ya2Zsb3csIGFuZCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMgaW4gdGhlIGV4aXN0aW5nIHNldHVwPyBJJ20gYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb24gbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgdHJ5aW5nIHRvIGFudGljaXBhdGUgYW55IHBvc3NpYmxlIGVkZ2UgY2FzZXMgb3IgcmFjZSBjb25kaXRpb25zIEknbGwgbmVlZCB0byBhZGRyZXNzLiBJdCdzIGFsbCBhYm91dCBlbnN1cmluZyBzbW9vdGggb3BlcmF0aW9uIGFuZCB0aGF0IHRoZSBWTEFOIGlzIGNvcnJlY3RseSBjb25maWd1cmVkIGFjcm9zcyB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlbGVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyODQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjoyMC44MjMzNjE4MTlaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODA3MDUxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3ZsYW5fZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM3PXN0YXRpYyB2b2lkIF9fdmxhbl9hZGRfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQ3LVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjQ4OnN0YXRpYyB2b2lkIF9fdmxhbl9kZWxldGVfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZywgdTE2IHZpZClcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00OS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz02MT1zdGF0aWMgYm9vbCBfX3ZsYW5fZmxhZ3NfdXBkYXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTgxLVxcdGVsc2VcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4MjpcXHRcXHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtXFx1MDAzZXZpZCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtODMtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMjQ9c3RhdGljIHZvaWQgX192bGFuX2FkZF9saXN0KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNDMtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTQ0OnN0YXRpYyB2b2lkIF9fdmxhbl9kZWxfbGlzdChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE0NS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMTMtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXN0ZXJ2LVxcdTAwM2V2bm9kZSwgYnJfdmxhbl9yaHRfcGFyYW1zKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMTQ6XFx0XFx0X192bGFuX2RlbF9saXN0KG1hc3RlcnYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNS1cXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKG1hc3RlcnYsIGZhbHNlKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTI2Mz1zdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzg5LVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjM5MDpzdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zOTEte1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNDA0LVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjQwNTpcXHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtXFx1MDAzZXZpZCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtNDA2LVxcdGlmIChwKSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjUtXFx0XFx0XFx0XFx0ICAgICAgIGJyX3ZsYW5fcmh0X3BhcmFtcyk7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6NDI2OlxcdFxcdF9fdmxhbl9kZWxfbGlzdCh2KTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjctXFx0XFx0bmJwX3ZsYW5fc2V0X3ZsYW5fZGV2X3N0YXRlKHAsIHYtXFx1MDAzZXZpZCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz00NDY9c3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQ1My1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0NTQ6XFx0X192bGFuX2RlbGV0ZV9wdmlkKHZnLCB2Zy1cXHUwMDNlcHZpZCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtNDU1LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuLCB0bXAsIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNDY1LVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjQ2NjpcXHRcXHRlcnIgPSBfX3ZsYW5fZGVsKHZsYW4pO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQ2Ny1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04MjQ9aW50IGJyX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTg0MC1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4NDE6XFx0cmV0dXJuIF9fdmxhbl9kZWwodik7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtODQyLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTEzNjA9aW50IG5icF92bGFuX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTM3MS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMzcyOlxcdHJldHVybiBfX3ZsYW5fZGVsKHYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEzNzMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjoyMS4yNjE0MzgyMloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTkwNDEwMzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IEltbWVkaWF0ZSBDb25jZXJucyB3aXRoIFZMQU4gRGVsZXRpb24qKlxuXG5SaWdodCwgc28gKmBicl92bGFuX2RlbGV0ZWAqIGFuZCAqYG5icF92bGFuX2RlbGV0ZWAqLi4uIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIG9wZXJhdGlvbmFsIGltcGxpY2F0aW9ucyBoZXJlLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZXNlIGRlbGV0aW9uIHJvdXRpbmVzIGFjcm9zcyBkaWZmZXJlbnQgYnJpZGdlIGludGVyZmFjZXMgYW5kIHBvdGVudGlhbGx5IG5vbi1icmlkZ2VkIHBvcnQgZW52aXJvbm1lbnRzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25zaWRlcjpcblxuKiAgICoqQXRvbWljaXR5OioqIEFyZSB0aGVzZSBvcGVyYXRpb25zIHRydWx5IGF0b21pYz8gSWYgYSBkZWxldGlvbiBmYWlscyBtaWR3YXkgdGhyb3VnaCwgd2hhdCdzIHRoZSByb2xsYmFjayBwcm9jZWR1cmU/IERvZXMgaXQgbGVhdmUgdGhlIHN5c3RlbSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGU/IEkgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgc2NlbmFyaW9zIHdoZXJlIHRoZSBWTEFOIGlzIHJlZmVyZW5jZWQgaW4gbXVsdGlwbGUgcGxhY2VzIOKAkyBRb1MgcG9saWNpZXMsIEFDTHMsIGZvcndhcmRpbmcgZGF0YWJhc2VzLiBIb3cgYXJlIHRob3NlIGhhbmRsZWQ/IERvIHdlIGhhdmUgcmFjZSBjb25kaXRpb25zIGlmIGFub3RoZXIgcHJvY2VzcyBhdHRlbXB0cyB0byB1c2UgdGhlIHZsYW4sIG9yIGNvbmZpZ3VyZSB0aGUgdmxhbiBhdCB0aGUgc2FtZSB0aW1lP1xuKiAgICoqUmVzb3VyY2UgQ2xlYW51cDoqKiBCZXlvbmQgcmVtb3ZpbmcgdGhlIFZMQU4gSUQgZnJvbSB0aGUgYnJpZGdlIG9yIHBvcnQgY29udGV4dCwgd2hhdCBvdGhlciByZXNvdXJjZXMgYXJlIGJlaW5nIGZyZWVkPyBBcmUgd2UgdGFsa2luZyBhYm91dCBtZW1vcnkgYWxsb2NhdGlvbnMsIGZvcndhcmRpbmcgdGFibGUgZW50cmllcywgYW55IGFzc29jaWF0ZWQgY29udHJvbCBwbGFuZSBzdGF0ZT8gSSBuZWVkIHRvIGtub3cgdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGxlYWtzIG9yIG90aGVyIHJlc291cmNlIGV4aGF1c3Rpb24gaWYgYSBkZWxldGlvbiBpcyBwb29ybHkgaW1wbGVtZW50ZWQuXG4qICAgKipEZXBlbmRlbmN5IE1hbmFnZW1lbnQ6KiogSSdtIHdvbmRlcmluZyB3aGF0IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgaGFuZGxlZC4gSWYgYSBWTEFOIGlzIGRlbGV0ZWQgdGhhdCdzIHBhcnQgb2YgYSBMQUcgb3IgYSB0cnVuaywgYXJlIHRoZSBhc3NvY2lhdGVkIHBvcnRzIGF1dG9tYXRpY2FsbHkgcmVjb25maWd1cmVkIG9yIGRpc2FibGVkPyBJZiB0aGUgdmxhbiBpcyBhIGRlZmF1bHQgdmxhbiBvbiBhIHBvcnQsIGFuZCB0aGUgcG9ydCBpcyBjb25uZWN0ZWQgdG8gYSBob3N0LCBob3cgaXMgdGhlIGhvc3QgaW1wYWN0ZWQ/XG4qICAgKipFcnJvciBIYW5kbGluZyBhbmQgUHJvcGFnYXRpb246KiogSG93IHJvYnVzdCBpcyB0aGUgZXJyb3IgaGFuZGxpbmc/IERvZXMgdGhlIGNvZGUgcHJvcGVybHkgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGEgVkxBTiBkb2Vzbid0IGV4aXN0IG9yIGlzIGluIHVzZT8gV2hhdCdzIHRoZSBlcnJvciByZXBvcnRpbmcgbGlrZT8gRG9lcyBpdCBwcm92aWRlIHN1ZmZpY2llbnQgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgdHJvdWJsZXNob290aW5nIGluIGEgY29tcGxleCBuZXR3b3JrIHNldHVwPyBEb2VzIGl0IHNpbXBseSByZXR1cm4gYW4gZXJyb3IgY29kZSBvciBkb2VzIGl0IHNlbmQgdXNlZnVsIGRlYnVnIG1lc3NhZ2VzPyBXaGF0IGlzIHRoZSBpbXBhY3Qgb2YgZXJyb3JzIHRvIHRoZSBicm9hZGVyIG5ldHdvcms/XG4qICAgKipDb250ZXh0dWFsIERpZmZlcmVuY2VzOioqIFRoZSAnbmJwJyBwcmVmaXggb24gYG5icF92bGFuX2RlbGV0ZWAgcGlxdWVzIG15IGludGVyZXN0LiBJcyB0aGlzIG1lYW50IGZvciBub24tYnJpZGdlIHBvcnRzPyBJZiBzbywgd2hhdCBhcmUgdGhlIHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvcj8gQXJlIHRoZXJlIHNwZWNpZmljIGVkZ2UgY2FzZXMgcmVsYXRlZCB0byB0YWdnZWQvdW50YWdnZWQgVkxBTiBhc3NpZ25tZW50cyBvbiB0aGVzZSBpbnRlcmZhY2VzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJIGFzc3VtZSB0aGUgYGJyX2AgdmVyc2lvbiBpcyBmb3Igc3RhbmRhcmQgYnJpZGdlIHBvcnRzLiBCdXQgd2hhdCBhYm91dCB2aXJ0dWFsIGludGVyZmFjZXM/IEhvdyBhYm91dCBib25kIHBvcnRzP1xuXG5VbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHBvdGVudGlhbCBwaXRmYWxscyBhbmQgZWRnZSBjYXNlcyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgVkxBTiBkZWxldGlvbiBmdW5jdGlvbnMuIFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpbGwgYmUga2V5LCBidXQgSSdtIGxvb2tpbmcgZm9yIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVzaWduIHBoaWxvc29waHksIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3ODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjoyNi4yNTE4NTE0MDJaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODIwNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX3ZsYW5fYWRkX2V4aXN0aW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jPTY4Nj1ib29sIGJyX3Nob3VsZF9sZWFybihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZpZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcxOC1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3MTk6c3RhdGljIGludCBicl92bGFuX2FkZF9leGlzdGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzIwLVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9Nzc5PWludCBicl92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQsIHUxNiBmbGFncywgYm9vbCAqY2hhbmdlZCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc5MS1cXHRpZiAodmxhbilcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3OTI6XFx0XFx0cmV0dXJuIGJyX3ZsYW5fYWRkX2V4aXN0aW5nKGJyLCB2ZywgdmxhbiwgZmxhZ3MsIGNoYW5nZWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzkzLVxcdFxcdFxcdFxcdFxcdCAgICBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjoyNi4yOTg2Nzc2NloiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY4ODc3NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFZMQU4gTWFuYWdlbWVudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBWTEFOIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIGBicl92bGFuX2FkZF9leGlzdGluZ2AgaXMgdGhlIHdvcmtob3JzZSBoZXJlLCBjYWxsZWQgZGlyZWN0bHkgYnkgYGJyX3ZsYW5fYWRkYC4gVGhpcyBzdWdnZXN0cyB0aGF0IGBicl92bGFuX2FkZGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIGFkZGluZyBWTEFOcyBpbiBtb3N0IHNjZW5hcmlvcy4gR2l2ZW4gdGhpcywgbXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYSBzZXQgb2YgY29yZSBmdW5jdGlvbnM6IGBicl92bGFuX2FkZGAsIGBicl92bGFuX2RlbGV0ZWAsIGFuZCB0aGVuIHRoZSBOZXR3b3JrIEJyaWRnZSBQcm90b2NvbCBlcXVpdmFsZW50cyBgbmJwX3ZsYW5fYWRkYCBhbmQgYG5icF92bGFuX2RlbGV0ZWAuIFRoZXNlIGFyZSBvYnZpb3VzbHkgaGFuZGxpbmcgdGhlIGNvcmUgVkxBTiBjcmVhdGlvbiBhbmQgcmVtb3ZhbCBvcGVyYXRpb25zLiBJJ2xsIGFsc28gbmVlZCB0byBleGFtaW5lIGhvdyB0aGUgYnJpZGdlLWxldmVsIGJvb2xlYW4gb3B0aW9ucywgbGlrZSBlbmFibGluZyBvciBkaXNhYmxpbmcgdmFyaW91cyBmZWF0dXJlcywgYXJlIG1hbmFnZWQgdGhyb3VnaCBgYnJfYm9vbG9wdF90b2dnbGVgLCBhbmQgdGhlIGZpbHRlcmluZyB0b2dnbGVzIHdpdGggYGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZWAuIExhc3RseSwgSSB3aWxsIG5vdCBmb3JnZXQgdGhlIGdsb2JhbCBvcHRpb24gcHJvY2Vzc2luZyBkb25lIGJ5IGBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zYC4gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgYXBwbGllZCBpbiB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCBpbnRvIHRoZXNlIGZ1bmN0aW9ucywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ2xsIGxvb2sgZm9yIG90aGVyIGVudHJ5IHBvaW50cywgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IHBhdGhzIHRoYXQgSSdtIG92ZXJsb29raW5nLiBJIHNlZSB0aGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBpcyBjYWxsZWQgYnkgYGJyX3ZsYW5fcHV0X21hc3RlcmAuIEl0IG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgc2luY2UgaXQgc3VnZ2VzdHMgYSBzZXBhcmF0ZSBtdWx0aWNhc3QgYXNwZWN0LCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBtb3JlIGdlbmVyYWwgVkxBTiBwcm9jZXNzaW5nLiBJIG5lZWQgdG8gdGFrZSBpdCBpbnRvIGFjY291bnQsIHdoaWxlIEknbSBsb29raW5nIGFyb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2NzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6MzAuODY3NTU4NzgxWiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIxODE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl92bGFuX3B1dF9tYXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmM9MTkyPXN0YXRpYyB2b2lkIGJyX21hc3Rlcl92bGFuX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjAyLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjIwMzpzdGF0aWMgdm9pZCBicl92bGFuX3B1dF9tYXN0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydilcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMDQte1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zNzktXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MzgwOlxcdFxcdFxcdGJyX3ZsYW5fcHV0X21hc3RlcihtYXN0ZXJ2KTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zODEtXFx0XFx0XFx0di1cXHUwMDNlYnJ2bGFuID0gTlVMTDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM5MD1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQzMi1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0MzM6XFx0YnJfdmxhbl9wdXRfbWFzdGVyKG1hc3RlcnYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQzNC1vdXQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU2OjMwLjkxNTc4MjA3OVoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTcwMjE1NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWTEFOIE9wZXJhdGlvbnMgaW4gdGhlIEJyaWRnZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFZMQU4gaW1wbGVtZW50YXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBjb3JlIGxvZ2ljLCBhdCBsZWFzdCBmcm9tIHRoaXMgY29udGV4dCwgaXMgdHJpZ2dlcmVkIHRocm91Z2ggYF9fdmxhbl9hZGRgIGFuZCBgX192bGFuX2RlbGAuIFRoYXQncyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20uIE15IHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBtYW5hZ2luZyBWTEFOcyBhcmU6IGBicl92bGFuX2FkZGAsIGBicl92bGFuX2RlbGV0ZWAsIGBuYnBfdmxhbl9hZGRgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgd2hpY2ggaGFuZGxlIHRoZSBhY3R1YWwgYWRkaXRpb24gYW5kIHJlbW92YWwgb2YgVkxBTiBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSBgYnJfYm9vbG9wdF90b2dnbGVgLCBgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlYCwgYW5kIGBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zYCBhcmUgaW4gdGhlcmUgdG9vLCBsaWtlbHkgZm9yIGZlYXR1cmUgdG9nZ2xpbmcgb3IgY29uZmlndXJhdGlvbiB1cGRhdGVzLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBgYnJfdmxhbl9hZGRgIGFuZCBgYnJfdmxhbl9kZWxldGVgLiBBcmUgdGhlc2Ugc3RhdGljIG9yIGdsb2JhbCBmdW5jdGlvbnM/IEtub3dpbmcgdGhhdCB3aWxsIHByb3ZpZGUgY3JpdGljYWwgY29udGV4dCBvbiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIG1vZGlmaWNhdGlvbi4gTGV0J3Mgc2VlIGlmIEkgY2FuIGZpbmQgdGhhdCBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1NDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6MzQuODg2MDAwMDg2WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk2MjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYnJfdmxhbl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU5MD1zdHJ1Y3Qgc2tfYnVmZiAqYnJfaGFuZGxlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU5My1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU5NDppbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU5NS1cXHRcXHRib29sICpjaGFuZ2VkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTcyMj1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpicl9oYW5kbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzI5LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE3MzA6c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTczMS1cXHRcXHRcXHQgICAgICBib29sICpjaGFuZ2VkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz02ODY9Ym9vbCBicl9zaG91bGRfbGVhcm4oc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICp2aWQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03MTgtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6NzE5OnN0YXRpYyBpbnQgYnJfdmxhbl9hZGRfZXhpc3Rpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcyMC1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc3OC0gKi9cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3Nzk6aW50IGJyX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZCwgdTE2IGZsYWdzLCBib29sICpjaGFuZ2VkLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc4MC1cXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU2OjM0LjkzMTk2NDgxNFoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg5MDU0NzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkFzc2Vzc2luZyB0aGUgRHluYW1pYyBOYXR1cmUgb2YgVkxBTnMgYW5kIEZ1bmN0aW9uIENhbGxzKipcblxuWWVzLCB0aGF0J3MgcmlnaHQsIHRoZSBzdWJqZWN0IGJlaW5nIGRpc2N1c3NlZCBpcyBkZWZpbml0ZWx5IG5vdCBzdGF0aWMuIFRoZSBjb250ZXh0IHN0cm9uZ2x5IGltcGxpZXMgYSBkeW5hbWljIGVudmlyb25tZW50LCBwYXJ0aWN1bGFybHkgd2l0aCBWTEFOcy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbnMgd2l0aGluIHRoZSByZWxldmFudCBjb2RlIGJhc2Ugd2hlcmUgd2UncmUgZGVhbGluZyB3aXRoIFZMQU4gY3JlYXRpb24gYW5kIGRlbGV0aW9uLCB0byB1bmRlcnN0YW5kIGhvdyBjaGFuZ2VzIGFyZSBhcHBsaWVkLiBUbyBjbGFyaWZ5IG15IHBvc2l0aW9uLCBJIGFtIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gY2hlY2tpbmcgdGhlIGBuYnBfdmxhbl9hZGRgIGFuZCBgbmJwX3ZsYW5fZGVsZXRlYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgZm9yIGFzc2Vzc2luZyBleGFjdGx5IGhvdyB0aGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGFyZSBtYWRlIGFuZCB3aGF0IG90aGVyIGFjdGlvbnMgYXJlIHJlcXVpcmVkLCBzdWNoIGFzIGludGVyZmFjZSByZS1jb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGVsc2UgbmVlZHMgdG8gYmUgZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0NDYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjozOC40MjEwMjE4NDJaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTM4NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBuYnBfdmxhbl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTYxMT1pbnQgX19icl92bGFuX3NldF9kZWZhdWx0X3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgcHZpZCxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjEyLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE2MTM6aW50IG5icF92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTYxNC1cXHRcXHQgYm9vbCAqY2hhbmdlZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE3NTA9c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3NTQtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTc1NTpzdGF0aWMgaW5saW5lIGludCBuYnBfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCwgdTE2IGZsYWdzLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3NTYtXFx0XFx0XFx0ICAgICAgIGJvb2wgKmNoYW5nZWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTEyNTc9aW50IG5icF92bGFuX2luaXQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTMxNC0gKi9cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMzE1OmludCBuYnBfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCwgdTE2IGZsYWdzLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEzMTYtXFx0XFx0IGJvb2wgKmNoYW5nZWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6MzguNDY5MTY1NjJaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5Njg4NTExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBpbiB0aGUgbWlkZGxlIG9mIHRoaXMgYXNzZXNzbWVudDpcblxuKipBbmFseXppbmcgRHluYW1pYyBCZWhhdmlvcioqXG5cblJpZ2h0LCBzbyB0aGUgc3ViamVjdCBpcyBjbGVhcmx5IGluZGljYXRpbmcgc29tZSBmb3JtIG9mIG5vbi1zdGF0aWMgYmVoYXZpb3IuIFRoYXQncyB0aGUga2V5IHRha2Vhd2F5LiBOb3csIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBzdGF0aWMsIHdoYXQgYXJlIHRoZSBuZXh0IHN0ZXBzIHRvIGFzc2Vzcz9cblxuVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0byBxdWlja2x5IGludmVzdGlnYXRlIGBicl9ib29sb3B0X3RvZ2dsZWAuIEl0J3MgYSBwcmltZSBzdXNwZWN0IGZvciBjb250cm9sbGluZyBvciBpbmZsdWVuY2luZyB0aGUgZHluYW1pYyBzdGF0ZSBvZiB0aGlzIGFzcGVjdC4gVGltZSB0byBkaWcgaW4gdGhlcmUgYW5kIHNlZSBpZiBpdCdzIHRoZSByaWdodCBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxMTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1Njo0Mi4wNjYwNTMzODNaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTg5Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBicl9ib29sb3B0X3RvZ2dsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyLmM9MjY4PWJyX3RvZ2dsZV9mZGJfbG9jYWxfdmxhbl8wKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0yOTMtICovXFxubmV0L2JyaWRnZS9ici5jOjI5NDppbnQgYnJfYm9vbG9wdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBlbnVtIGJyX2Jvb2xvcHRfaWQgb3B0LCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnIuYy0yOTUtXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NzY4PXN0YXRpYyBpbmxpbmUgaW50IGJyX29wdF9nZXQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzczLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjc3NDppbnQgYnJfYm9vbG9wdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBlbnVtIGJyX2Jvb2xvcHRfaWQgb3B0LCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTc3NS1cXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1Njo0Mi4xMTM2NDY5MTJaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NzEyNDg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTm9uLVN0YXRpYyBDb25zaWRlcmF0aW9ucyBcdTAwMjYgVkxBTiBGaWx0ZXJpbmcqKlxuXG5SaWdodCwgc28gd2UncmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggc29tZXRoaW5nICpub24tc3RhdGljKi4gVGhhdCdzIHRoZSBrZXkuIE5vdywgd2l0aCB0aGF0IGVzdGFibGlzaGVkLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgc3BlY2lmaWMgcG9pbnQgb2YgaW52ZXN0aWdhdGlvbjogYGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZWAuIFRoaXMgZnVuY3Rpb24gaXMgcGl2b3RhbCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBWTEFOIGZpbHRlcmluZyBiZWhhdmVzIGluIHRoaXMgY29udGV4dC4gSXQncyB0aGUgbHluY2hwaW4sIHRoZSBjb250cm9sIHBvaW50Li4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBob3cgaXQncyBiZWluZyBtYW5pcHVsYXRlZCwgb3IgaG93IHRoZSBjb25kaXRpb25zIGFyb3VuZCBpdCBhcmUgY2hhbmdpbmcsIGFzIHRoYXQgaW5mb3JtcyBldmVyeXRoaW5nLiBJJ20gZ29pbmcgdG8gc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTU3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6NDUuMTYwNzc1MjM5WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA4NjIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1OTk9dm9pZCBicl9yZWNhbGN1bGF0ZV9md2RfbWFzayhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE2MDA6aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2MDEtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTc4OD1zdGF0aWMgaW5saW5lIHUxNiBicl9nZXRfcHZpZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3OTItXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTc5MzpzdGF0aWMgaW5saW5lIGludCBicl92bGFuX2ZpbHRlcl90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3OTQtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB2YWwsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04ODQ9dm9pZCBicl9yZWNhbGN1bGF0ZV9md2RfbWFzayhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04OTMtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6ODk0OmludCBicl92bGFuX2ZpbHRlcl90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04OTUtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU2OjQ1LjIwNzg2ODI3N1oiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQyMzc3MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGlubmVyIG1vbm9sb2d1ZTpcblxuKipOb24tU3RhdGljIENvbnRleHQgYW5kIE9wdGlvbiBQcm9jZXNzaW5nKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbm9uLXN0YXRpYyBoZXJlLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIHdvcmsgdGhyb3VnaCB0aGlzLiBOb24tc3RhdGljIGltcGxpZXMgYSBmZXcgdGhpbmdzIHJpZ2h0IG9mZiB0aGUgYmF0IOKAkyBwb3RlbnRpYWxseSBtdXRhYmxlIHN0YXRlLCBwb3NzaWJsZSBleHRlcm5hbCBkZXBlbmRlbmNpZXMsIGFuZCBsaWtlbHkgc29tZSBkeW5hbWljIGFsbG9jYXRpb24uIEdvb2QgdG8gZXN0YWJsaXNoIHRoYXQgZm91bmRhdGlvbmFsIGZhY3QgYmVmb3JlIGRpdmluZyBkZWVwZXIuXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zYCBmdW5jdGlvbi4gVGhpcyBzZWVtcyBsaWtlIHRoZSBjcml0aWNhbCBwaWVjZSB0byB1bmRlcnN0YW5kLiBJdCdzIHByb2JhYmx5IHdoZXJlIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gVkxBTiByb3V0aW5nIGFyZSBwcm9jZXNzZWQuIEknbGwgbmVlZCB0byBhbmFseXplIHRoaXMgZnVuY3Rpb24gY2FyZWZ1bGx5IHRvIHVuZGVyc3RhbmQgKmhvdyogaXQgaGFuZGxlcyB0aG9zZSBub24tc3RhdGljIGFzcGVjdHMgd2UganVzdCBpZGVudGlmaWVkLiBMZXQncyBzZWUgaG93IGl0IHByb2Nlc3NlcyB0aG9zZSBnbG9iYWwgc2V0dGluZ3MgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIGZvciB0aGUgc3lzdGVtIG92ZXJhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTAwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6NDguNjUwMjQ4NDg2WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI2NDM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYnJfdmxhbl9ydG1fcHJvY2Vzc19nbG9iYWxfb3B0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTAyPWludCBicl92bGFuX3Byb2Nlc3Nfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTA3LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5MDg6aW50IGJyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTA5LVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz02Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJyX3ZsYW5fZGJfZ3BvbFtCUklER0VfVkxBTkRCX0dPUFRTX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy02ODQtXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo2ODU6aW50IGJyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTY4Ni1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6NDguNjk1NTE4MDU0WiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMTExODMzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBSZWxldmFudCBDb2RlIFBhdGhzKipcblxuT2theSwgbm9uLXN0YXRpYywgZ290IGl0LiBMZXQgbWUganVzdCBsYXkgb3V0IHRoZSBmb2N1cyBzeW1ib2xzIGFnYWluIHRvIG1ha2Ugc3VyZSBJJ20gb24gdHJhY2s6IGBicl92bGFuX2FkZGAsIGBicl92bGFuX2RlbGV0ZWAsIGBuYnBfdmxhbl9hZGRgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYGJyX2Jvb2xvcHRfdG9nZ2xlYCwgYGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZWAsIGFuZCBgYnJfdmxhbl9ydG1fcHJvY2Vzc19nbG9iYWxfb3B0aW9uc2AuXG5cbk5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55IHBvdGVudGlhbCBlbnRyeSBwb2ludHMgdG8gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLiBJIGtub3cgaXQncyBjYWxsZWQgZnJvbSBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYCwgYnV0IEkgdHJhY2VkIHRoYXQgb25lIGJlZm9yZS4gQW5kIGl0IHNlZW1zIHRoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbmAgaXRzZWxmIGlzIGNhbGxlZCBieSBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW5gLCBib3RoIG9mIHdoaWNoIEkgKmRpZCogdHJhY2UuXG5cbkFscmlnaHQsIHdoYXQgZWxzZSBjb3VsZCBiZSBjYWxsaW5nIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYD8gU2Nhbm5pbmcgdGhlIGBicl92bGFuLmNgIGZpbGUsIEkgc2VlIGBicl92bGFuX3B1dF9tYXN0ZXJgLCBgX192bGFuX2FkZGAsIGBfX3ZsYW5fZGVsYCwgYW5kIGBicl92bGFuX2FkZF9leGlzdGluZ2AuIEkgYmVsaWV2ZSBJJ3ZlIGFscmVhZHkgZXhhbWluZWQgdGhvc2UgYXMgd2VsbCwgc28gdGhhdCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGlzIHRoYXQgcmlnaHQ/ICBgX192bGFuX2FkZGAgaXMgKmFsc28qIGNhbGxlZCBmcm9tIGBicl92bGFuX2luaXRgIGFuZCBgbmJwX3ZsYW5faW5pdGA/IE9rYXksIHRoYXQncyBhIGZyZXNoIGFuZ2xlLCBhbmQgdGhvc2UgYXJlIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZ2l2ZW4gdGhlaXIgaW5pdGlhbGl6YXRpb24gY29udGV4dHMuIExldCdzIGRlbHZlIGludG8gYGJyX3ZsYW5faW5pdGAgYW5kIGBuYnBfdmxhbl9pbml0YCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6NTQuOTA2NzA0MDIzWiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkyNDM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3ZsYW5fYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jPTMyPXN0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICpicl92bGFuX2xvb2t1cChzdHJ1Y3Qgcmhhc2h0YWJsZSAqdGJsLCB1MTYgdmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzYtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6Mzc6c3RhdGljIHZvaWQgX192bGFuX2FkZF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM4LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9NjE9c3RhdGljIGJvb2wgX192bGFuX2ZsYWdzX3VwZGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03OS1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1BWSUQpXFxubmV0L2JyaWRnZS9icl92bGFuLmM6ODA6XFx0XFx0X192bGFuX2FkZF9wdmlkKHZnLCB2KTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04MS1cXHRlbHNlXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMDM9c3RhdGljIGludCBfX3ZsYW5fdmlkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjMtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTI0OnN0YXRpYyB2b2lkIF9fdmxhbl9hZGRfbGlzdChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyNS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMzQ9c3RhdGljIHZvaWQgYnJfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yNjItICovXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MjYzOnN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjY0LVxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM1Ni1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTc6XFx0X192bGFuX2FkZF9saXN0KHYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM1OC1cXHRfX3ZsYW5fZmxhZ3NfY29tbWl0KHYsIGZsYWdzKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTc3OT1pbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsIGJvb2wgKmNoYW5nZWQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04MDktXFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZ2bGFuLVxcdTAwM2VyZWZjbnQsIDEpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjgxMDpcXHRyZXQgPSBfX3ZsYW5fYWRkKHZsYW4sIGZsYWdzLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTgxMS1cXHRpZiAocmV0KSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMzE1PWludCBuYnBfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCwgdTE2IGZsYWdzLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTM0Ny1cXHR2bGFuLVxcdTAwM2Vwb3J0ID0gcG9ydDtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMzQ4OlxcdHJldCA9IF9fdmxhbl9hZGQodmxhbiwgZmxhZ3MsIGV4dGFjayk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTM0OS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1Njo1NC45NTI2MzM1ODFaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4NTUwNDYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFZMQU4gSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBWTEFOcyBhcmUgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBicl92bGFuX2luaXRgIGFuZCBgbmJwX3ZsYW5faW5pdGAuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGRvbid0IGRpcmVjdGx5IGNhbGwgYF9fdmxhbl9hZGRgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgaW50dWl0aW9uLCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGlzIHR5cGUgb2Ygc3lzdGVtIGFyY2hpdGVjdHVyZSwgaXMgdGhhdCB0aGV5J2xsIGxpa2VseSBjYWxsIHNvbWV0aGluZyBsaWtlIGBicl92bGFuX2FkZGAgb3IgYG5icF92bGFuX2FkZGAgaW50ZXJuYWxseS4gVG8gY29uZmlybSB0aGlzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgSSByZWFsbHkgc2hvdWxkIGV4YW1pbmUgYGJyX3ZsYW5faW5pdGAgbW9yZSBjbG9zZWx5LiBMZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyNTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1Njo1OC41MzgxNDE2ODRaIiwiU2VxIjo3MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjcxMjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX3ZsYW5fYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE2Nz1icl92bGFuX2dldF9tYXN0ZXIoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTc4LVxcdFxcdC8qIG1pc3NpbmcgZ2xvYmFsIGN0eCwgY3JlYXRlIGl0IG5vdyAqL1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjE3OTpcXHRcXHRpZiAoYnJfdmxhbl9hZGQoYnIsIHZpZCwgMCwgXFx1MDAyNmNoYW5nZWQsIGV4dGFjaykpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTgwLVxcdFxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yOTYtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6Mjk3OlxcdFxcdFxcdGVyciA9IGJyX3ZsYW5fYWRkKGJyLCB2LVxcdTAwM2V2aWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjk4LVxcdFxcdFxcdFxcdFxcdCAgZmxhZ3MgfCBCUklER0VfVkxBTl9JTkZPX0JSRU5UUlksXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz02ODY9Ym9vbCBicl9zaG91bGRfbGVhcm4oc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICp2aWQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03MTgtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6NzE5OnN0YXRpYyBpbnQgYnJfdmxhbl9hZGRfZXhpc3Rpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcyMC1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc3OC0gKi9cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3Nzk6aW50IGJyX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZCwgdTE2IGZsYWdzLCBib29sICpjaGFuZ2VkLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc4MC1cXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03OTEtXFx0aWYgKHZsYW4pXFxubmV0L2JyaWRnZS9icl92bGFuLmM6NzkyOlxcdFxcdHJldHVybiBicl92bGFuX2FkZF9leGlzdGluZyhiciwgdmcsIHZsYW4sIGZsYWdzLCBjaGFuZ2VkLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc5My1cXHRcXHRcXHRcXHRcXHQgICAgZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTExMDI9aW50IF9fYnJfdmxhbl9zZXRfZGVmYXVsdF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHB2aWQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTMwLVxcdCAgICAoIXB2ZW50IHx8ICFicl92bGFuX3Nob3VsZF91c2UocHZlbnQpKSkge1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExMzE6XFx0XFx0ZXJyID0gYnJfdmxhbl9hZGQoYnIsIHB2aWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTEzMi1cXHRcXHRcXHRcXHQgIEJSSURHRV9WTEFOX0lORk9fUFZJRCB8XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTkwLVxcdFxcdGlmIChvbGRfcHZpZCkge1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExOTE6XFx0XFx0XFx0YnJfdmxhbl9hZGQoYnIsIG9sZF9wdmlkLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExOTItXFx0XFx0XFx0XFx0ICAgIEJSSURHRV9WTEFOX0lORk9fUFZJRCB8XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNzQ3PWludCBicl92bGFuX2JyaWRnZV9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzU1LVxcdGNhc2UgTkVUREVWX1JFR0lTVEVSOlxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjE3NTY6XFx0XFx0cmV0ID0gYnJfdmxhbl9hZGQoYnIsIGJyLVxcdTAwM2VkZWZhdWx0X3B2aWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTc1Ny1cXHRcXHRcXHRcXHQgIEJSSURHRV9WTEFOX0lORk9fUFZJRCB8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU2OjU4LjU4NDQxNTY5MloiLCJTZXEiOjczLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcyMDM0MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZTpcblxuKipWTEFOIFRhZ2dpbmcgXHUwMDI2IEJyaWRnZSBFdmVudCBDb250ZXh0KipcblxuT2theSwgc28gYGJyX3ZsYW5fYWRkYCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIEknbSBzZWVpbmcgaXQncyBjYWxsZWQgZnJvbSBhIGNvdXBsZSBvZiBvdGhlciBwbGFjZXM6IGBfX2JyX3ZsYW5fc2V0X2RlZmF1bHRfcHZpZGAgYW5kIGBicl92bGFuX2JyaWRnZV9ldmVudGAuIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiBJbXBvcnRhbnRseSwgYm90aCBvZiB0aG9zZSBjYWxsaW5nIGZ1bmN0aW9ucywgYF9fYnJfdmxhbl9zZXRfZGVmYXVsdF9wdmlkYCBhbmQgYGJyX3ZsYW5fYnJpZGdlX2V2ZW50YCwgYXJlICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGxpa2VseSBtZWFucyB0aGV5J3JlIGludGVuZGVkIHRvIGJlIGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlIGluIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGJ5IG90aGVyIG1vZHVsZXMuIGBicl92bGFuX2FkZGAgaXMsIHRoZXJlZm9yZSwgYSBjZW50cmFsIHBpZWNlIHRoYXQncyBleHBvc2VkIHRvIG11bHRpcGxlIHBvaW50cyBvZiB0aGUgc3lzdGVtLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhIGJpdCwgSSB3YW50IHRvIGNoZWNrIGhvdyBgbmJwX3ZsYW5fYWRkYCB0aWVzIGludG8gYWxsIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDI2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTc6MDIuMDU2NDU0MDcyWiIsIlNlcSI6NzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ3NjUyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYnBfdmxhbl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmM9MTEwMj1pbnQgX19icl92bGFuX3NldF9kZWZhdWx0X3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgcHZpZCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExNTQtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTE1NTpcXHRcXHRlcnIgPSBuYnBfdmxhbl9hZGQocCwgcHZpZCxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTU2LVxcdFxcdFxcdFxcdCAgIEJSSURHRV9WTEFOX0lORk9fUFZJRCB8XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTc4LVxcdFxcdGlmIChvbGRfcHZpZCkge1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExNzk6XFx0XFx0XFx0bmJwX3ZsYW5fYWRkKHAsIG9sZF9wdmlkLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExODAtXFx0XFx0XFx0XFx0ICAgICBCUklER0VfVkxBTl9JTkZPX1BWSUQgfFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTI1Nz1pbnQgbmJwX3ZsYW5faW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjg2LVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEyODc6XFx0XFx0cmV0ID0gbmJwX3ZsYW5fYWRkKHAsIHAtXFx1MDAzZWJyLVxcdTAwM2VkZWZhdWx0X3B2aWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTI4OC1cXHRcXHRcXHRcXHQgICBCUklER0VfVkxBTl9JTkZPX1BWSUQgfFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTMxNC0gKi9cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMzE1OmludCBuYnBfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCwgdTE2IGZsYWdzLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEzMTYtXFx0XFx0IGJvb2wgKmNoYW5nZWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTc6MDIuMTAxOTM2OTNaIiwiU2VxIjo3NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2MDI1NDY3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBCcmlkZ2UgTXVsdGljYXN0IGFuZCBWTEFOIExvZ2ljKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGF2ZSBhIGNsZWFyIGZ1enppbmcgc3RyYXRlZ3kgZm9ybWluZy4gIGBuYnBfdmxhbl9hZGRgIGlzIHRoZSBrZXkg4oCTIGl0J3MgY2FsbGVkIGZyb20gYm90aCBgbmJwX3ZsYW5faW5pdGAgYW5kIGBfX2JyX3ZsYW5fc2V0X2RlZmF1bHRfcHZpZGAsIHdoaWNoIGdpdmVzIG1lIGdvb2QgaW5pdGlhbCBlbnRyeSBwb2ludHMuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgVkxBTiBhbmQgYnJpZGdlIG1hbmlwdWxhdGlvbi5cblxuU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIHRhcmdldGluZyB0aGVzZSBmdW5jdGlvbnMgZGlyZWN0bHk6IGBicl92bGFuX2FkZGAsIGBicl92bGFuX2RlbGV0ZWAsIGBuYnBfdmxhbl9hZGRgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYGJyX2Jvb2xvcHRfdG9nZ2xlYCwgYGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZWAsIGFuZCBgYnJfdmxhbl9ydG1fcHJvY2Vzc19nbG9iYWxfb3B0aW9uc2AsICBhbmQgYF9fYnJfdmxhbl9zZXRfZGVmYXVsdF9wdmlkYC4gVGhlc2UgYXJlIGFsbCBleGNlbGxlbnQgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBUaGVzZSBlbnRyeSBwb2ludHMgc2hvdWxkIGFkZXF1YXRlbHkgY292ZXIgdGhlIGxvZ2ljIGNoYW5nZSBmcm9tIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gVGhlIGNoYW5nZXMgdG8gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGFsdGVyIHRoZSBlYXJseSByZXR1cm4gbG9naWMuICBUaGUgcGF0Y2ggbW9kaWZpZXMgYSBjb25kaXRpb24sIHNvIGl0J3MgYSBnb29kIHRhcmdldC5cblxuVGhlIGNoYW5nZSBpbiB0aGUgcGF0Y2ggZXNzZW50aWFsbHkgcmVtb3ZlcyBhbiBlYXJseSByZXR1cm4gaW4gY2VydGFpbiBjYXNlcywgd2hpY2ggYWx0ZXJzIHRoZSBtdWx0aWNhc3QvVkxBTiBiZWhhdmlvci4gVGhpcyBpcyBjbGVhcmx5IHJlYWNoYWJsZSB2aWEgbmV0bGluayBhbmQgaW9jdGwgZnJvbSB1c2Vyc3BhY2UsIG1ha2luZyBpdCBhIHZpYWJsZSBmdXp6aW5nIHRhcmdldC4gIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBCUklER0VgLCBgSU5FVGAsIGBWTEFOXzgwMjFRYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLlxuXG5JJ3ZlIGFscmVhZHkgbG9va2VkIGF0IHRoZSBjYWxsZXJzIG9mIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBhbmQsIGFzIGV4cGVjdGVkLCB0aGV5J3JlIGNvdmVyZWQgYnkgbXkgY2hvc2VuIGVudHJ5IHBvaW50cyAoYGJyX3ZsYW5fcHV0X21hc3RlcmAsIGBfX3ZsYW5fYWRkYCwgYF9fdmxhbl9kZWxgLCBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYCkuIEkgbmVlZCB0byBiZSBlZmZpY2llbnQsIHNvIEkgd2lsbCBwcmlvcml0aXplIHRoaXMgc21hbGxlciBzdWJzZXQgb2YgZm9jdXMgc3ltYm9scyB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyMjMsIk91dHB1dFRva2VucyI6MjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU3OjEyLjcwNDQ4NzM3OFoiLCJTZXEiOjc2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODQwNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIklORVRcIixcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIkJSSURHRV9JR01QX1NOT09QSU5HXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl92bGFuX2FkZFwiLFxuICAgIFwiYnJfdmxhbl9kZWxldGVcIixcbiAgICBcIm5icF92bGFuX2FkZFwiLFxuICAgIFwibmJwX3ZsYW5fZGVsZXRlXCIsXG4gICAgXCJicl9ib29sb3B0X3RvZ2dsZVwiLFxuICAgIFwiYnJfdmxhbl9maWx0ZXJfdG9nZ2xlXCIsXG4gICAgXCJicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVhcmx5IHJldHVybiBjb25kaXRpb24gaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdpdGhpbiB0aGUgYnJpZGdlIG11bHRpY2FzdCBhbmQgVkxBTiBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGhvdyBWTEFOIG11bHRpY2FzdCBjb250ZXh0cyBhcmUgdG9nZ2xlZCB3aGVuIGBvbmAgaXMgZmFsc2UuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgaW9jdGwgd2hlbiBjb25maWd1cmluZyBicmlkZ2UgVkxBTnMgYW5kIG11bHRpY2FzdCBzbm9vcGluZyBvcHRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX3ZsYW5fYWRkXCIsXG4gICAgXCJicl92bGFuX2RlbGV0ZVwiLFxuICAgIFwibmJwX3ZsYW5fYWRkXCIsXG4gICAgXCJuYnBfdmxhbl9kZWxldGVcIixcbiAgICBcImJyX2Jvb2xvcHRfdG9nZ2xlXCIsXG4gICAgXCJicl92bGFuX2ZpbHRlcl90b2dnbGVcIixcbiAgICBcImJyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWFybHkgcmV0dXJuIGNvbmRpdGlvbiBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2l0aGluIHRoZSBicmlkZ2UgbXVsdGljYXN0IGFuZCBWTEFOIGxvZ2ljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgaG93IFZMQU4gbXVsdGljYXN0IGNvbnRleHRzIGFyZSB0b2dnbGVkIHdoZW4gYG9uYCBpcyBmYWxzZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGFuZCBpb2N0bCB3aGVuIGNvbmZpZ3VyaW5nIGJyaWRnZSBWTEFOcyBhbmQgbXVsdGljYXN0IHNub29waW5nIG9wdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU3OjEyLjc4NDMzNTc3NFoiLCJTZXEiOjc3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2NTkwNjU2Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTc6MTIuNzg0OTU5Njc0WiIsIlNlcSI6NzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI3NjU5MDAyNzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBWTEFOIHRoYXQgaXMgbm90IGEgYnJpZGdlIGVudHJ5IHdvdWxkIGZhaWwgZHVlIHRvIGFuIGluY29ycmVjdCBlYXJseSByZXR1cm4gY29uZGl0aW9uLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHN0YXRlIG1hbmFnZW1lbnQsIG1lbW9yeSBsZWFrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBsb2dpYyBjaGFuZ2UuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmFiMWMzMGI2YjBhOWU3ZjUxYWFkNDhjMDc0ZjRlZjJlNmUxNTczMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA5OjM1OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbmluZGV4IDc1ZTFlMmE4ZmM4M2EuLjNlZjVkOGJiZjU1MmUgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG5AQCAtNDM3Nyw4ICs0Mzc3LDggQEAgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4gXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHtcbiBcdFx0YnIgPSB2bGFuLVx1MDAzZWJyO1xuIFxuLVx0XHRpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuLVx0XHQgICAgKG9uIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAob24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuIFx0XHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKSlcbiBcdFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NzoxMi43ODQ5NjA1NjRaIiwiU2VxIjo3OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA2NTU0OTY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCcmlkZ2UgTXVsdGljYXN0IFRvZ2dsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyBhIGNvbmRpdGlvbmFsIGxvZ2ljIGFkanVzdG1lbnQgd2l0aGluIGFuIGBpZmAgc3RhdGVtZW50LiBUaGUgZGlmZiBzaG93cyB0aGUgY2hhbmdlOiBhIHNsaWdodCByZW9yZGVyaW5nIG9mIHRoZSBib29sZWFuIGxvZ2ljLiBCZWZvcmUsIHRoZSByZXR1cm4gY29uZGl0aW9uIHdhcyBiYXNlZCBvbiBgIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fCAob24gXHUwMDI2XHUwMDI2IGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKWAuIE5vdywgaXQncyBgb24gXHUwMDI2XHUwMDI2ICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8IGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKWAuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGFsdGVycyB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5LiBJdCBzZWVtcyB0aGF0IGlmIHRoZSBgb25gIGZsYWcgaXMgbm93IGZhbHNlLCB0aGUgZnVuY3Rpb24gZG9lc24ndCBiYWlsIG91dCBpZiBgIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAgaXMgdHJ1ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIGJ1ZyDigJMgcGVyaGFwcyBhIG1lbW9yeSBsZWFrLCBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBvciBzaW1wbHkgYW4gaW5jb3JyZWN0IHN0YXRlIG1hbmFnZW1lbnQgaXNzdWUgd2l0aGluIHRoZSBicmlkZ2UgbXVsdGljYXN0IGNvbnRleHQuIEknbSBub3QgaW1tZWRpYXRlbHkgc2VlaW5nIGFueXRoaW5nIHN1Z2dlc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGl0J3MgbW9yZSBhYm91dCBob3cgdGhlIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uIGZsb3cgaXMgY29udHJvbGxlZCBieSB0aGF0IGBvbmAgZmxhZy4gQ2xlYXJseSwgc29tZXRoaW5nIHdhc24ndCB3b3JraW5nIGNvcnJlY3RseSwgYW5kIHRoaXMgc21hbGwgY2hhbmdlIGxpa2VseSBmaXhlcyB0aGF0LCBsaWtlbHkgd2l0aCBzb21lIHNvcnQgb2Ygc3RhdGUgaXNzdWUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgYWN0dWFsbHkgZG9lcyB0byBwcm9wZXJseSBldmFsdWF0ZSB0aGlzIHBhdGNoJ3MgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTc6MTkuODUwNTEyNjU1WiIsIlNlcSI6ODAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgxMzk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzQwPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDQxMT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyMy1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MjQ6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2cG9ydCwgb24pO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyNS1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjctXFx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0Mjg6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTc6MTkuODk4MzM1NzczWiIsIlNlcSI6ODEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDUzMTIzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgbWVudGFsIHN0ZXBzOlxuXG4qKkRpdmluZyBpbnRvIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGFjdHVhbGx5ICpkb2VzKi4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQsIGFzIGFsd2F5cywgaXMgdG8ganVzdCAqcmVhZCB0aGUgY29kZSouIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGl0c2VsZiB0byBnZXQgdGhlIGdpc3Qgb2YgaXRzIG9wZXJhdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbnB1dCBwYXJhbWV0ZXJzLCBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFueSBjYWxscyB0byBvdGhlciBmdW5jdGlvbnMgb3IgbGlicmFyaWVzIHRoYXQgbWlnaHQgcHJvdmlkZSBjbHVlcyBhYm91dCB0aGUgdGFzayBpdCdzIGRlc2lnbmVkIHRvIGFjY29tcGxpc2guIEknbGwgYmUgcGF5aW5nIGF0dGVudGlvbiB0byBob3cgaXQgaGFuZGxlcyBlZGdlIGNhc2VzIG9yIGVycm9yIGNvbmRpdGlvbnMuIEVzc2VudGlhbGx5LCBJJ20gZm9ybWluZyBhIG1lbnRhbCBtb2RlbCBvZiB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlIGJ5IGZvbGxvd2luZyB0aGUgZXhlY3V0aW9uIGZsb3cuIEZyb20gdGhlcmUgSSdsbCBzdGFydCBmb3JtdWxhdGluZyBhbiBvcGluaW9uIG9uIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTc6MjMuNjQzNjUzNDdaIiwiU2VxIjo4MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM2NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDM2NjpcXHR2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG40MzY3OlxcdHtcXG40MzY4OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlICpicjtcXG40MzY5OlxcdFxcbjQzNzA6XFx0XFx0LyogaXQncyBva2F5IHRvIGNoZWNrIGZvciB0aGUgZmxhZyB3aXRob3V0IHRoZSBtdWx0aWNhc3QgbG9jayBiZWNhdXNlIGl0XFxuNDM3MTpcXHRcXHQgKiBjYW4gb25seSBjaGFuZ2UgdW5kZXIgUlROTCAtXFx1MDAzZSBtdWx0aWNhc3RfbG9jaywgd2UgbmVlZCB0aGUgbGF0dGVyIHRvXFxuNDM3MjpcXHRcXHQgKiBzeW5jIHdpdGggdGltZXJzIGFuZCBwYWNrZXRzXFxuNDM3MzpcXHRcXHQgKi9cXG40Mzc0OlxcdFxcdGlmIChvbiA9PSAhISh2bGFuLVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgQlJfVkxGTEFHX01DQVNUX0VOQUJMRUQpKVxcbjQzNzU6XFx0XFx0XFx0cmV0dXJuO1xcbjQzNzY6XFx0XFxuNDM3NzpcXHRcXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHtcXG40Mzc4OlxcdFxcdFxcdGJyID0gdmxhbi1cXHUwMDNlYnI7XFxuNDM3OTpcXHRcXG40MzgwOlxcdFxcdFxcdGlmIChvbiBcXHUwMDI2XFx1MDAyNlxcbjQzODE6XFx0XFx0XFx0ICAgICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8XFxuNDM4MjpcXHRcXHRcXHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXFx1MDAyNnZsYW4tXFx1MDAzZWJyX21jYXN0X2N0eCkpKVxcbjQzODM6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjQzODQ6XFx0XFxuNDM4NTpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfbG9jayk7XFxuNDM4NjpcXHRcXHRcXHR2bGFuLVxcdTAwM2Vwcml2X2ZsYWdzIF49IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEO1xcbjQzODc6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfbG9jayk7XFxuNDM4ODpcXHRcXG40Mzg5OlxcdFxcdFxcdGlmIChvbilcXG40MzkwOlxcdFxcdFxcdFxcdF9fYnJfbXVsdGljYXN0X29wZW4oXFx1MDAyNnZsYW4tXFx1MDAzZWJyX21jYXN0X2N0eCk7XFxuNDM5MTpcXHRcXHRcXHRlbHNlXFxuNDM5MjpcXHRcXHRcXHRcXHRfX2JyX211bHRpY2FzdF9zdG9wKFxcdTAwMjZ2bGFuLVxcdTAwM2Vicl9tY2FzdF9jdHgpO1xcbjQzOTM6XFx0XFx0fSBlbHNlIHtcXG40Mzk0OlxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHg7XFxuNDM5NTpcXHRcXG40Mzk2OlxcdFxcdFxcdGJybWN0eCA9IGJyX211bHRpY2FzdF9wb3J0X2N0eF9nZXRfZ2xvYmFsKFxcdTAwMjZ2bGFuLVxcdTAwM2Vwb3J0X21jYXN0X2N0eCk7XFxuNDM5NzpcXHRcXHRcXHRpZiAob24gXFx1MDAyNlxcdTAwMjYgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChicm1jdHgpKVxcbjQzOTg6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjQzOTk6XFx0XFxuNDQwMDpcXHRcXHRcXHRiciA9IHZsYW4tXFx1MDAzZXBvcnQtXFx1MDAzZWJyO1xcbjQ0MDE6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjQ0MDI6XFx0XFx0XFx0dmxhbi1cXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfTUNBU1RfRU5BQkxFRDtcXG40NDAzOlxcdFxcdFxcdGlmIChvbilcXG40NDA0OlxcdFxcdFxcdFxcdF9fYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0X2N0eChcXHUwMDI2dmxhbi1cXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xcbjQ0MDU6XFx0XFx0XFx0ZWxzZVxcbjQ0MDY6XFx0XFx0XFx0XFx0X19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChcXHUwMDI2dmxhbi1cXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xcbjQ0MDc6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfbG9jayk7XFxuNDQwODpcXHRcXHR9XFxuNDQwOTpcXHR9XFxuNDQxMDpcXHRcXG40NDExOlxcdHN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbjQ0MTI6XFx0e1xcbjQ0MTM6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDtcXG40NDE0OlxcdFxcbjQ0MTU6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NzoyMy42NDM4NzY3NloiLCJTZXEiOjgzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjU3MzEwODc0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBlcnJvciBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHByZW1hdHVyZSByZXR1cm4gd2hlbiB0cnlpbmcgdG8gZGlzYWJsZSBtdWx0aWNhc3Qgb24gYSBWTEFOIHRoYXQgd2Fzbid0IGEgYnJpZGdlIGVudHJ5IChgIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAgYW5kIGBvbmAgaXMgZmFsc2UpLiBCYXNpY2FsbHksIGl0IHdhcyBiYWlsaW5nIG91dCB0b28gZWFybHksIGFuZCB0aGF0J3MgdGhlIHByb2JsZW0uXG5cblRoaXMgY291bGQgcmVzdWx0IGluIGEgZmV3IG5hc3R5IG91dGNvbWVzOiBpbmNvcnJlY3Qgc3RhdGUsIHBvc3NpYmxlIG1lbW9yeSBsZWFrcyAoYmVjYXVzZSByZXNvdXJjZXMgbWlnaHQgbm90IGJlIHByb3Blcmx5IGNsZWFuZWQgdXApLCBvciwgZXZlbiB3b3JzZSwgdXNlLWFmdGVyLWZyZWUgYnVncyBpZiBzb21lIGNvbXBvbmVudCBzdWJzZXF1ZW50bHkgdHJpZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgaW5jb3JyZWN0bHkgbWFuYWdlZCBWTEFOLlxuXG5Ib3dldmVyLCBhZnRlciBhIGNsb3NlciBsb29rLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgZG9lc24ndCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UgYXJlbid0IGludHJvZHVjaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgY29tcGxleCBtZW1vcnkgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCB3YXJyYW50IGEgZGVlcCBkaXZlIHdpdGggS01TQU4uIEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgc2hvdWxkIGFic29sdXRlbHkgYmUgc3VmZmljaWVudCB0byBmbGFnIGFueSBwcm9ibGVtcyB0aGF0IGFyaXNlIGZyb20gdGhpcy4gV2UncmUgdGFsa2luZyBhYm91dCBhIGxvZ2ljYWwgY29udHJvbC1mbG93IGVycm9yLCBub3QgYSBkYXRhLWluaXRpYWxpemF0aW9uIHByb2JsZW0uIE5vIG5lZWQgdG8gYnJpbmcgb3V0IHRoZSBiaWcgZ3VucyBoZXJlOyBzdGFuZGFyZCBidWctZGV0ZWN0b3JzIHNob3VsZCBiZSBmaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY1LCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEwOjAxOjQ5LjM3NDk2Nzc4WiIsIlNlcSI6ODQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gdGhhdCBpcyBub3QgYSBicmlkZ2UgZW50cnkgd291bGQgZmFpbCBkdWUgdG8gYW4gaW5jb3JyZWN0IGVhcmx5IHJldHVybiBjb25kaXRpb24uIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudCwgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGxvZ2ljIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gdGhhdCBpcyBub3QgYSBicmlkZ2UgZW50cnkgd291bGQgZmFpbCBkdWUgdG8gYW4gaW5jb3JyZWN0IGVhcmx5IHJldHVybiBjb25kaXRpb24uIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudCwgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGxvZ2ljIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowv75fk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 09:17:10 +0000 UTC FinishedAt: 2026-08-26 10:01:50 +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": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "INET", "VLAN_8021Q", "BRIDGE_IGMP_SNOOPING", "BRIDGE_VLAN_FILTERING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "INET", "VLAN_8021Q", "BRIDGE_IGMP_SNOOPING", "BRIDGE_VLAN_FILTERING" ], "series_id": "947d8bf5-93c8-4bdb-aee0-187f7f530c1f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_vlan_add", "br_vlan_delete", "nbp_vlan_add", "nbp_vlan_delete", "br_boolopt_toggle", "br_vlan_filter_toggle", "br_vlan_rtm_process_global_options" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX3ZsYW5fYWRkJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fZGVsZXRlJiMzNDssCiAgICAmIzM0O25icF92bGFuX2FkZCYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfYm9vbG9wdF90b2dnbGUmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9maWx0ZXJfdG9nZ2xlJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gdGhhdCBpcyBub3QgYSBicmlkZ2UgZW50cnkgd291bGQgZmFpbCBkdWUgdG8gYW4gaW5jb3JyZWN0IGVhcmx5IHJldHVybiBjb25kaXRpb24uIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudCwgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGxvZ2ljIGNoYW5nZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVhcmx5IHJldHVybiBjb25kaXRpb24gaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdpdGhpbiB0aGUgYnJpZGdlIG11bHRpY2FzdCBhbmQgVkxBTiBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGhvdyBWTEFOIG11bHRpY2FzdCBjb250ZXh0cyBhcmUgdG9nZ2xlZCB3aGVuIGBvbmAgaXMgZmFsc2UuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgaW9jdGwgd2hlbiBjb25maWd1cmluZyBicmlkZ2UgVkxBTnMgYW5kIG11bHRpY2FzdCBzbm9vcGluZyBvcHRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmFiMWMzMGI2YjBhOWU3ZjUxYWFkNDhjMDc0ZjRlZjJlNmUxNTczMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA5OjM1OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG5pbmRleCA3NWUxZTJhOGZjODNhLi4zZWY1ZDhiYmY1NTJlIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuQEAgLTQzNzcsOCAmIzQzOzQzNzcsOCBAQCB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbiBcdGlmIChicl92bGFuX2lzX21hc3Rlcih2bGFuKSkge1xuIFx0XHRiciA9IHZsYW4tXHUwMDNlYnI7XG4gXG4tXHRcdGlmICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8XG4tXHRcdCAgICAob24gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRpZiAob24gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHxcbiBcdFx0ICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKFx1MDAyNnZsYW4tXHUwMDNlYnJfbWNhc3RfY3R4KSkpXG4gXHRcdFx0cmV0dXJuO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjIxbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl92bGFuX2FkZCYjMzQ7LAogICAgJiMzNDticl92bGFuX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9hZGQmIzM0OywKICAgICYjMzQ7bmJwX3ZsYW5fZGVsZXRlJiMzNDssCiAgICAmIzM0O2JyX2Jvb2xvcHRfdG9nZ2xlJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fZmlsdGVyX3RvZ2dsZSYjMzQ7LAogICAgJiMzNDticl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlYXJseSByZXR1cm4gY29uZGl0aW9uIGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCB3aXRoaW4gdGhlIGJyaWRnZSBtdWx0aWNhc3QgYW5kIFZMQU4gbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBob3cgVkxBTiBtdWx0aWNhc3QgY29udGV4dHMgYXJlIHRvZ2dsZWQgd2hlbiBgb25gIGlzIGZhbHNlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgYW5kIGlvY3RsIHdoZW4gY29uZmlndXJpbmcgYnJpZGdlIFZMQU5zIGFuZCBtdWx0aWNhc3Qgc25vb3Bpbmcgb3B0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJhYjFjMzBiNmIwYTllN2Y1MWFhZDQ4YzA3NGY0ZWYyZTZlMTU3MzAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAwOTozNTozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCmluZGV4IDc1ZTFlMmE4ZmM4M2EuLjNlZjVkOGJiZjU1MmUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwpAQCAtNDM3Nyw4ICYjNDM7NDM3Nyw4IEBAIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKQogCWlmIChicl92bGFuX2lzX21hc3Rlcih2bGFuKSkgewogCQliciA9IHZsYW4tJmd0O2JyOwogCi0JCWlmICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8Ci0JCSAgICAob24gJmFtcDsmYW1wOwomIzQzOwkJaWYgKG9uICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fAogCQkgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoJmFtcDt2bGFuLSZndDticl9tY2FzdF9jdHgpKSkKIAkJCXJldHVybjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCcmlkZ2UgTXVsdGljYXN0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0b3VjaGluZyBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgYXJlIHRhcmdldGluZyB0aGUgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGZ1bmN0aW9uLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhhdCBmdW5jdGlvbjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGFsdGVyZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiB0aGF0IGFyZWEg4oCTIHRoZSBjYWxsIHNpdGVzLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBldmVyeXRoaW5nLiBJIG5lZWQgdGhlIGZ1bGwgY29udGV4dCB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSBvbiBtdWx0aWNhc3QgZm9yd2FyZGluZyB3aXRoaW4gdGhlIGJyaWRnZS4gVGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYSBidWcgZml4LCBvciBldmVuIGEgbmV3IGZlYXR1cmUuIExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzNDA9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2Njp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Ny17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NDExPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyMy1cdFx0XHRjb250aW51ZTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQyNDpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2cG9ydCwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI1LVx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyNy1cdGlmIChicl92bGFuX2lzX2JyZW50cnkodmxhbikpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0Mjg6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odmxhbiwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJyaWRnZSBNdWx0aWNhc3QgVG9nZ2xlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGNoYW5nZSBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIFRoZSBvbGQgY29kZSBoYWQgdGhpcyBjb25kaXRpb25hbCByZXR1cm4gYmFzZWQgb24gYCFicl92bGFuX2lzX2JyZW50cnkodmxhbilgIHdoZW4gYG9uYCB3YXMgZmFsc2UuIEJ1dCBub3csIHRoYXQgcGFydCBvZiB0aGUgbG9naWMgaXMgKm9ubHkqIGV4ZWN1dGVkIGlmIGBvbmAgaXMgKnRydWUqLgoKVGhpcyBoYXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSWYgYG9uYCBpcyBmYWxzZSwgdGhpcyBtZWFucyB3ZSB3aWxsIG5vIGxvbmdlciByZXR1cm4gaWYgYGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAgaXMgZmFsc2UuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgY2hhbmdlZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgbmV3IGJlaGF2aW91ciwgYW5kIHRvIGRvIHRoaXMgcHJvcGVybHkgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjYWxscyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnMgdG8gZGV0ZXJtaW5lIHRoZSBzaWRlLWVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM0MD12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzY2OnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MTE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDIzLVx0XHRcdGNvbnRpbnVlO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI0Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjUtXHR9XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI3LVx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQyODpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjktfVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwNzM9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwNzQ6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3NS1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTUwPXN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1NC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NTU6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTYtXHRcdFx0XHRcdFx0Ym9vbCBvbilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMjE0LVx0XHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMTU6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMjE2LVx0XHRicl9tdWx0aWNhc3RfY3R4X2RlaW5pdChcdTAwMjZtYXN0ZXJ2LVx1MDAzZWJyX21jYXN0X2N0eCk7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVx0X192bGFuX2ZsYWdzX2NvbW1pdCh2LCBmbGFncyk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTk6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIHRydWUpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMzYwLVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM5MD1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjctXHRcdG5icF92bGFuX3NldF92bGFuX2Rldl9zdGF0ZShwLCB2LVx1MDAzZXZpZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0Mjg6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtNDI5LVx0XHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnYtXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTcxOT1zdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjAtXHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc2MTpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2Mi1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTc1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKioKCk9rYXksIHNvIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIGNhbiBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gc2V2ZXJhbCBrZXkgYnJpZGdlIG11bHRpY2FzdCBhbmQgVkxBTiBmdW5jdGlvbnM6IGBicl92bGFuX3B1dF9tYXN0ZXJgLCBgX192bGFuX2FkZGAsIGBfX3ZsYW5fZGVsYCwgYGJyX3ZsYW5fYWRkX2V4aXN0aW5nYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gLiBHaXZlbiBpdHMgaW50ZWdyYXRpb24gd2l0aCB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLCB0aGlzIGlzIGRlZmluaXRlbHkgd2l0aGluIHRoZSByZWFsbSBvZiByZWFjaGFibGUga2VybmVsIGxvZ2ljIOKAkyB3ZSYjMzk7cmUgdGFsa2luZyBpbXBvcnRhbnQgc3R1ZmYgaGVyZS4gSGlnaCBwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIHJlc3VsdHMsIHBvdGVudGlhbGx5IGNyaXRpY2FsIG9uZXMuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIHRoZSBzb3VyY2UgY29kZSBpcyBpbiBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AsIHNvIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IG1ha2VmaWxlcyBhbmQgS2NvbmZpZyBmaWxlcyDigJMgYG5ldC9icmlkZ2UvTWFrZWZpbGVgIGFuZCBgbmV0L2JyaWRnZS9LY29uZmlnYCBzcGVjaWZpY2FsbHkuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgYnVpbGRpbmcgYSBmdXp6aW5nIGNhbXBhaWduIHRoYXQgY2FuIGFjdHVhbGx5IGhpdCB0aGlzIHRhcmdldC4gTmVlZCB0byBpZGVudGlmeSB3aGF0IGtlcm5lbCBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYW5kIGVuc3VyZSB0aGUgcmlnaHQgbW9kdWxlcyBhcmUgbG9hZGVkIHRvIGVuYWJsZSB0aGUgZmVhdHVyZS4gVGhlbiwgaXQmIzM5O3MgdGltZSB0byBjcmFmdCB0aGUgZnV6emVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikgJiM0Mzs9IGJyX25ldGZpbHRlci5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTIwLVxubmV0L2JyaWRnZS9NYWtlZmlsZToyMTpicmlkZ2UtJChDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcpICYjNDM7PSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmtpbmcgYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJR01QIFNub29waW5nIERlcGVuZGVuY3kqKgoKQWxyaWdodCwgc28gdGhlIHN5c3RlbSBpcyB0ZWxsaW5nIG1lIHRoYXQgYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AgaXMgYSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBpdGVtLiBGaW5lLCBtYWtlcyBzZW5zZSwgSUdNUCBzbm9vcGluZyBpcyBjcnVjaWFsIGluIG1hbnkgYnJpZGdlZCBlbnZpcm9ubWVudHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoZXNlIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AgcmVsYXRlcyB0byBvdGhlciBicmlkZ2luZyBmZWF0dXJlcy4KClRoZXJlZm9yZSwgSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBhbmQgYW55IGRlcGVuZGVuY2llcyBmb3IgYm90aCBgQlJJREdFX0lHTVBfU05PT1BJTkdgIGFuZCBhbHNvIHRoZSBiYXNlIGJyaWRnZSBmdW5jdGlvbmFsaXR5IHJlcHJlc2VudGVkIGJ5IGBCUklER0VgLiBUaGlzIGNoZWNrIHdpbGwgY29uZmlybSB0aGUgcmVsYXRpb25zaGlwcywgYW5kIGxldCBtZSBzZWUgaWYgYW55dGhpbmcgZWxzZSBuZWVkcyB0byBiZSB0d2Vha2VkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWxhdGlvbnNoaXBzLCBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBvcHRpb25zIHdpdGhpbiB0aGF0IGNvbmZpZ3VyYXRpb24gc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnLTUtXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXG5uZXQvYnJpZGdlL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNDktXG5uZXQvYnJpZGdlL0tjb25maWc6NTA6Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy02My1cbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtNUlAgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cbm5ldC9icmlkZ2UvS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7Q0ZNIHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaWdnaW5nIGludG8gQlJJREdFX0lHTVBfU05PT1BJTkcgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgQlJJREdFX0lHTVBfU05PT1BJTkdgLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3RoZXIgY29tcG9uZW50cywgbW9kdWxlcywgb3IgZmVhdHVyZXMgcmVseSBvbiwgb3IgYXJlIGluZmx1ZW5jZWQgYnksIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbi4gVW5kZXJzdGFuZGluZyB0aGVzZSBjb25uZWN0aW9ucyBpcyBjcnVjaWFsIGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMgb3IgdHJvdWJsZXNob290aW5nIGlzc3VlcyByZWxhdGVkIHRvIElHTVAgc25vb3Bpbmcgd2l0aGluIGEgYnJpZGdlZCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGtub3cgdGhlIHJpcHBsZSBlZmZlY3QuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnPTY9Y29uZmlnIEJSSURHRVxuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgQnJpZGdlIENvbmZpZ3VyYXRpb24gRmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzYuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgY29uZmlndXJlZCB0aGVyZSwgcHJvYmFibHkgc29tZSBmZWF0dXJlIG9yIHNldHRpbmcgcmVsYXRlZCB0byBuZXR3b3JrIGJyaWRnaW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCB0aGluZ3MgbGlrZSBzcGFubmluZyB0cmVlIHByb3RvY29sIChTVFApLCB0aGUgZm9yd2FyZGluZyBkYXRhYmFzZSwgb3IgcGVyaGFwcyBzb21lIGJyaWRnZS1zcGVjaWZpYyBoYXJkd2FyZSBvZmZsb2FkIG9wdGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFzIHdlbGwgYXMgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgYWZmZWN0IGhvdyB0aGVzZSBicmlkZ2UgZnVuY3Rpb25hbGl0aWVzIGFyZSBjb21waWxlZCBhbmQgaW5jbHVkZWQuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIHdlIGNhbiB1bmVhcnRoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMzI6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYnJpZGdlLlxuICAzMzpcdFxuICAzNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xuICAzNzpcdFx0Ym9vbCBcJiMzNDtJR01QL01MRCBzbm9vcGluZ1wmIzM0O1xuICAzODpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgMzk6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA0MDpcdFx0ZGVmYXVsdCB5XG4gIDQxOlx0XHRoZWxwXG4gIDQyOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XG4gIDQzOlx0XHQgIGZvcndhcmQgbXVsdGljYXN0IHRyYWZmaWMgYmFzZWQgb24gSUdNUC9NTEQgdHJhZmZpYyByZWNlaXZlZCBmcm9tXG4gIDQ0Olx0XHQgIGVhY2ggcG9ydC5cbiAgNDU6XHRcbiAgNDY6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDQ3Olx0XG4gIDQ4Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgQnJpZGdlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhlIGRlcGVuZGVuY2llcyBhcmUgYEJSSURHRWAgYW5kIGBJTkVUYC4gVGhhdCBtYWtlcyBzZW5zZTsgYSBuZXR3b3JrIGJyaWRnZSBhbmQgdGhlIEludGVybmV0IFByb3RvY29sIGFyZSBmb3VuZGF0aW9uYWwuIE5vdywgaXQmIzM5O3MgbW9kaWZ5aW5nIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCwgYW5kIHRoYXQgZnVuY3Rpb24gdGFrZXMgYSBgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbmAuIE9rYXksIHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBWTEFOcyBhbmQgbXVsdGljYXN0IGluIHRoZSBicmlkZ2UuIFRoYXQgdHJpZ2dlcnMgYSBxdWVzdGlvbjogaXMgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgYSByZXF1aXJlbWVudCBoZXJlPyBJdCBwcm9iYWJseSBpcywgYnV0IEkgYWx3YXlzIHZlcmlmeS4gVGltZSB0byBjaGVjayBgbmV0L2JyaWRnZS9LY29uZmlnYCBhbmQgY29uZmlybS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xuICA1MTpcdFx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuICA1MjpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgNTM6XHRcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxuICA1NDpcdFx0ZGVmYXVsdCBuXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XG4gIDU3Olx0XHQgIHJlY2VpdmUgYW5kIGZvcndhcmQgdHJhZmZpYyBiYXNlZCBvbiBWTEFOIGluZm9ybWF0aW9uIGluIHRoZSBwYWNrZXRcbiAgNTg6XHRcdCAgYW55IFZMQU4gaW5mb3JtYXRpb24gY29uZmlndXJlZCBvbiB0aGUgYnJpZGdlIHBvcnQgb3IgYnJpZGdlIGRldmljZS5cbiAgNTk6XHRcbiAgNjA6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDYxOlx0XG4gIDYyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDYzOlx0XG4gIDY0Olx0Y29uZmlnIEJSSURHRV9NUlBcbiAgNjU6XHRcdGJvb2wgXCYjMzQ7TVJQIHByb3RvY29sXCYjMzQ7XG4gIDY2Olx0XHRkZXBlbmRzIG9uIEJSSURHRVxuICA2NzpcdFx0ZGVmYXVsdCBuXG4gIDY4Olx0XHRoZWxwXG4gIDY5Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBNUlBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgZm9yIG15IGZlbGxvdyBleHBlcnRzOgoKKipJbnZlc3RpZ2F0aW5nIFZMQU4gRmlsdGVyaW5nIENvbXBpbGF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIE15IGZpcnN0IGh1bmNoIGlzIHRvIHZlcmlmeSBpdHMgY29tcGlsYXRpb24gc3RhdGUgdW5kZXIgdGhlIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIGNvbmZpZ3VyYXRpb24uIFRoZSB3aG9sZSBwb2ludCBpcyB0byBlbnN1cmUgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGFzIGV4cGVjdGVkLCBvciBpcyBhcHByb3ByaWF0ZWx5IGV4Y2x1ZGVkLCB3aGVuIFZMQU4gZmlsdGVyaW5nIGlzIHR1cm5lZCBvZmYuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYCBhbmQgY2hlY2sgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIHRoZSBjb2RlJiMzOTtzIGRlc2lnbmVkIHRvIGJlIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgYmFzZWQgb24gdGhhdCBzcGVjaWZpYyBmZWF0dXJlIGZsYWcuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBjbHV0dGVyIHVwIHRoZSBrZXJuZWwgd2hlbiBWTEFOIGZpbHRlcmluZyBpcyBub3QgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwNzM9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwNzQ6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3NS1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTUwPXN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1NC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NTU6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTYtXHRcdFx0XHRcdFx0Ym9vbCBvbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJyaWRnZSYjMzk7cyBQcml2YXRlIEhlYWRlcioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBhcm91bmQgbGluZSAxNTU1LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBzb21lIGNydWNpYWwgaW50ZXJuYWwgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcy4gSSYjMzk7bSBndWVzc2luZyBpdCBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBjb3JlIG9mIHRoZSBicmlkZ2UgaW1wbGVtZW50YXRpb24sIGxpa2VseSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgdGhlIGZvcndhcmRpbmcgZGF0YWJhc2UsIHNwYW5uaW5nIHRyZWUsIG9yIHBlcmhhcHMgc29tZSBpbnRlcm5hbCBldmVudCBoYW5kbGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZSB0byBhZGRyZXNzIG15IGN1cnJlbnQgcHJvYmxlbS4gSSYjMzk7bSByZWFsbHkgaG9waW5nIHRoZXJlIGlzIG5vIHdlaXJkIGxvY2tpbmcuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBsaW5lcyB1cCB3aXRoIG15IGh5cG90aGVzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9wcml2YXRlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1NDA6XHRzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfY3R4X2luaXQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbjE1NDE6XHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbjE1NDI6XHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXG4xNTQzOlx0e1xuMTU0NDpcdH1cbjE1NDU6XHRcbjE1NDY6XHRzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfY3R4X2RlaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbjE1NDc6XHR7XG4xNTQ4Olx0fVxuMTU0OTpcdFxuMTU1MDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXG4xNTUxOlx0XHRcdFx0XHRcdFx0ICAgICAgdTggc3RhdGUpXG4xNTUyOlx0e1xuMTU1MzpcdH1cbjE1NTQ6XHRcbjE1NTU6XHRzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxuMTU1NjpcdFx0XHRcdFx0XHRcdGJvb2wgb24pXG4xNTU3Olx0e1xuMTU1ODpcdH1cbjE1NTk6XHRcbjE1NjA6XHRzdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuMTU2MTpcdFx0XHRcdFx0XHRcdCAgICBib29sIG9uLFxuMTU2MjpcdFx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4xNTYzOlx0e1xuMTU2NDpcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTU2NTpcdH1cbjE1NjY6XHRcbjE1Njc6XHRzdGF0aWMgaW5saW5lIGJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxuMTU2ODpcdFx0XHRcdFx0XHRcdCAgIGJvb2wgb24pXG4xNTY5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njg1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgYmxvY2sgb2YgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ292ZXJuaW5nIGl0cyB2aXNpYmlsaXR5LiBUaGUgYCNpZmRlZmAgZGlyZWN0aXZlIGlzIHRoZSBnaXZlYXdheS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtXaGF0IHByZXByb2Nlc3NvciBtYWNybyBpcyBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiB0aGlzIHNlY3Rpb24/JiMzNDsgSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogaGVyZS4gSXMgdGhpcyBmb3IgYSBzcGVjaWZpYyBwbGF0Zm9ybSwgYSBkZWJ1Z2dpbmcgYnVpbGQsIGFuIG9wdGlvbmFsIGZlYXR1cmUsIG9yIHdoYXQ/IEtub3dpbmcgdGhlIG1hY3JvJiMzOTtzIGRlZmluaXRpb24gKG9yIHBvdGVudGlhbCBkZWZpbml0aW9ucykgaXMgdGhlIGNyaXRpY2FsIG5leHQgc3RlcC4gVGhpcyBpcyBtb3JlIHRoYW4ganVzdCByZWFkaW5nIHRoZSBjb2RlOyBpdOKAmXMgYWJvdXQgZ3Jhc3BpbmcgdGhlIGRlc2lnbiBkZWNpc2lvbnMgdGhhdCBsZWQgdG8gdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb2RlLCBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgbWFjcm9zIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGJlaGF2aW9yIHVuZGVyIHZhcmlvdXMgYnVpbGQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTY5PXN0cnVjdCBtYWNfYWRkciB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzItXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo3MzojaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC03NC0vKiBvdXIgb3duIHF1ZXJpZXIgKi9cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMTg9c3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCB7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMTk6I2lmZGVmIENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTIwLVx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydFx0XHQqcG9ydDtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNDA9c3RydWN0IG5ldF9icmlkZ2VfbWNhc3Qge1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTQxOiNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0Mi1cdHN0cnVjdCBuZXRfYnJpZGdlXHRcdCpicjtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMzk4LVx0dW5zaWduZWQgbG9uZ1x0XHRcdGZsYWdzO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6Mzk5OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00MDAtXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwXHRfX3JjdSAqdmxncnA7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDI2LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NDI3OiNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQyOC1cdHN0cnVjdCBicmlkZ2VfbWNhc3Rfc3RhdHNcdF9fcGVyY3B1ICptY2FzdF9zdGF0cztcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00MzQtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo0MzU6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDM2LVx0Y2hhclx0XHRcdFx0c3lzZnNfbmFtZVtJRk5BTVNJWl07XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDM4LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NDM5OiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDQwLVx0c3RydWN0IG5ldHBvbGxcdFx0XHQqbnA7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00NDEtI2VuZGlmXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo0NDI6I2lmZGVmIENPTkZJR19ORVRfU1dJVENIREVWXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00NDMtXHQvKiBJZGVudGlmaWVyIHVzZWQgdG8gZ3JvdXAgcG9ydHMgdGhhdCBzaGFyZSB0aGUgc2FtZSBzd2l0Y2hkZXZcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01MDA9c3RydWN0IG5ldF9icmlkZ2Uge1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUwNi1cdC8qIFRoZXNlIGZpZWxkcyBhcmUgYWNjZXNzZWQgb24gZWFjaCBwYWNrZXQgKi9cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjUwNzojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTA4LVx0X19iZTE2XHRcdFx0XHR2bGFuX3Byb3RvO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTU1Mi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjU1MzojaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01NTQtXHRzdHJ1Y3QgYnJpZGdlX21jYXN0X3N0YXRzXHRfX3BlcmNwdSAqbWNhc3Rfc3RhdHM7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTc4LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NTc5OiNpZmRlZiBDT05GSUdfTkVUX1NXSVRDSERFVlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTgwLVx0LyogQ291bnRlciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGF0IGhhcmR3YXJlIGRvbWFpbnMgZ2V0IHVuaXF1ZVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTU5Nz1zdHJ1Y3QgYnJfaW5wdXRfc2tiX2NiIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MDAtXHR1MTYgZnJhZ19tYXhfc2l6ZTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjYwMTojaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MDItXHR1OCBpZ21wO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYwOC1cdHU4IGdyYXRfYXJwOjE7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo2MDk6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxMC1cdHU4IHZsYW5fZmlsdGVyZWQ6MTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxMS0jZW5kaWZcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjYxMjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MTMtXHR1OCBicl9uZXRmaWx0ZXJfYnJvdXRlOjE7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNjE1LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NjE2OiNpZmRlZiBDT05GSUdfTkVUX1NXSVRDSERFVlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNjE3LVx0LyogU2V0IGlmIFRYIGRhdGEgcGxhbmUgb2ZmbG9hZGluZyBpcyB1c2VkIHRvd2FyZHMgYXQgbGVhc3Qgb25lXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNjM3LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NjM4OiNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYzOS0jIGRlZmluZSBCUl9JTlBVVF9TS0JfQ0JfTVJPVVRFUlNfT05MWShfX3NrYilcdChCUl9JTlBVVF9TS0JfQ0IoX19za2IpLVx1MDAzZW1yb3V0ZXJzX29ubHkpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NzQyPXN0YXRpYyBpbmxpbmUgdTggYnJfdmxhbl9tdWx0aWNhc3Rfcm91dGVyKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzQ1LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NzQ2OiNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTc0Ny1cdGlmICghYnJfdmxhbl9pc19tYXN0ZXIodikpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9ODEzPW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6ODE0OiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODE1LXN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRwb2xsX3NlbmRfc2tiKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTY5PWludCBicl9pb2N0bF9zdHViKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKnVhcmcpO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTk3MS0vKiBicl9tdWx0aWNhc3QuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTcyOiNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTk3My1pbnQgYnJfbXVsdGljYXN0X3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqKmJybWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTc0PWJyX211bHRpY2FzdF9jdHhfb3B0aW9uc19lcXVhbChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4MSxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTgxLS8qIGJyX3ZsYW4uYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU4MjojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU4My1ib29sIGJyX2FsbG93ZWRfaW5ncmVzcyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTg4OD1zdGF0aWMgaW5saW5lIHUxNiBicl92bGFuX2ZsYWdzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBwdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4OTUtLyogYnJfdmxhbl9vcHRpb25zLmMgKi9cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4OTY6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4OTctYm9vbCBicl92bGFuX29wdHNfZXFfcmFuZ2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdl9jdXJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE5NDM9c3RhdGljIGlubGluZSBib29sIGJyX3ZsYW5fc3RhdGVfYWxsb3dlZCh1OCBzdGF0ZSwgYm9vbCBsZWFybl9hbGxvdylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU2LS8qIGJyX21zdC5jICovXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTU3OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU4LURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShicl9tc3RfdXNlZCk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MjE3Nj1pbnQgYnJfcHJvY2Vzc192bGFuX2luZm8oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIxODItXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMTgzOiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIxODQtLyogYnJfc3lzZnNfaWYuYyAqL1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTIxOTg9c3RhdGljIGlubGluZSB2b2lkIGJyX3N5c2ZzX2RlbGJyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuOyB9XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjIwMS0vKiBicl9zd2l0Y2hkZXYuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjIwMjojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIyMDMtaW50IGJyX3N3aXRjaGRldl9wb3J0X29mZmxvYWQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNjMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgVkxBTiBDb250ZXh0IG9mIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCoqCgpPa2F5LCBzbyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuLi4gcmlnaHQsIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBicl9tdWx0aWNhc3QuY2AuIFRoYXQgbWFrZXMgc2Vuc2UsIGFuZCBJIHJlbWVtYmVyIGl0JiMzOTtzIGNvbnRpbmdlbnQgb24gYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AgYmVpbmcgZW5hYmxlZC4gQnV0IG15IGNvbmNlcm4gKm5vdyogaXMgdGhlIHBhcmFtZXRlcjogaXQgdGFrZXMgYSBgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbmAuIFRoZSBxdWVzdGlvbiB0aGF0IHNwcmluZ3MgdG8gbWluZCBpbW1lZGlhdGVseSBpcywgd2hhdCBoYXBwZW5zIHRvIHRoaXMgc3RydWN0IGlmIFZMQU4gZmlsdGVyaW5nLCBhcyBkZWZpbmVkIGJ5IGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCwgaXMgZGlzYWJsZWQ/IElzIHRoZSBzdHJ1Y3QgZXZlbiBkZWZpbmVkIGluIHRoYXQgc2NlbmFyaW8/IEkgbmVlZCB0byBjbGFyaWZ5IHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGNhbiBhY3R1YWxseSAqd29yayogaW4gdGhhdCBjb25maWd1cmF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuYCwgaW4gdGhpcyBjb250ZXh0LCBoYXMgdG8gYmUgYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYC4gVGltZSB0byBkaXZlIGluIHRoZXJlIGFuZCBzZWUgd2hhdCB0aGUgaW5jbHVkZSBkZXBlbmRlbmNpZXMgbG9vayBsaWtlIGZvciB0aGF0IHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG5ldF9icmlkZ2VfdmxhbiBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xODM9ZW51bSB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjIwLSAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjIxOnN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4ge1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjIyLVx0c3RydWN0IHJoYXNoX2hlYWRcdFx0dm5vZGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjMzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgZm9yIFZMQU4gRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgYCNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gVGhpcyBpcyB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7ZCBsb29rIHRvIHNlZSBpZiBWTEFOIGZpbHRlcmluZyBmdW5jdGlvbmFsaXR5IGlzIGV2ZW4gKmNvbXBpbGVkKiBpbnRvIHRoZSBrZXJuZWwgZm9yIHRoZSBicmlkZ2luZyBjb25maWd1cmF0aW9uLiBXaXRob3V0IHRoYXQsIHRoZXJlJiMzOTtzIG5vIHBvaW50IGluIGRpZ2dpbmcgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIEl0JiMzOTtzIHRoZSBtb3N0IGZ1bmRhbWVudGFsIHByZWxpbWluYXJ5IGNoZWNrIHRvIG1ha2UgYmVmb3JlIEkgd2FzdGUgdGltZSBvbiBtb3JlIGNvbXBsaWNhdGVkIHBhcnRzIG9mIHRoZSBjb2RlLiBGaW5kaW5nIHRoaXMgd2lsbCBpbmZvcm0gbXkgc3Vic2VxdWVudCBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHQgKiBAcG9ydF9tY2FzdF9jdHg6IGlmIE1BU1RFUiBmbGFnIHVuc2V0LCB0aGlzIGlzIHRoZSBwZXItcG9ydC92bGFuIG11bHRpY2FzdFxuIDIxMTpcdCAqICAgICAgICAgICAgICAgICAgY29udGV4dFxuIDIxMjpcdCAqIEBtc3RpOiBpZiBNQVNURVIgZmxhZyBzZXQsIHRoaXMgaG9sZHMgdGhlIFZMQU5zIE1TVCBpbnN0YW5jZVxuIDIxMzpcdCAqIEB2bGlzdDogc29ydGVkIGxpc3Qgb2YgVkxBTiBlbnRyaWVzXG4gMjE0Olx0ICogQHJjdTogdXNlZCBmb3IgZW50cnkgZGVzdHJ1Y3Rpb25cbiAyMTU6XHQgKlxuIDIxNjpcdCAqIFRoaXMgc3RydWN0dXJlIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBnbG9iYWwgcGVyLVZMQU4gZW50cmllcyBjb250YWluZWQgaW5cbiAyMTc6XHQgKiB0aGUgYnJpZGdlIHJoYXNodGFibGUgYW5kIHRoZSBsb2NhbCBwZXItcG9ydCBwZXItVkxBTiBlbnRyaWVzIGNvbnRhaW5lZCBpblxuIDIxODpcdCAqIHRoZSBwb3J0JiMzOTtzIHJoYXNodGFibGUuIFRoZSB1bmlvbiBlbnRyaWVzIHNob3VsZCBiZSBpbnRlcnByZXRlZCBkZXBlbmRpbmcgb25cbiAyMTk6XHQgKiB0aGUgZW50cnkgZmxhZ3MgdGhhdCBhcmUgc2V0LlxuIDIyMDpcdCAqL1xuIDIyMTpcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4ge1xuIDIyMjpcdFx0c3RydWN0IHJoYXNoX2hlYWRcdFx0dm5vZGU7XG4gMjIzOlx0XHRzdHJ1Y3Qgcmhhc2hfaGVhZFx0XHR0bm9kZTtcbiAyMjQ6XHRcdHUxNlx0XHRcdFx0dmlkO1xuIDIyNTpcdFx0dTE2XHRcdFx0XHRmbGFncztcbiAyMjY6XHRcdHUxNlx0XHRcdFx0cHJpdl9mbGFncztcbiAyMjc6XHRcdHU4XHRcdFx0XHRzdGF0ZTtcbiAyMjg6XHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzIF9fcGVyY3B1ICpzdGF0cztcbiAyMjk6XHRcdHVuaW9uIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVkxBTiBhbmQgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIG15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IGBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuYCBpcyBhbHdheXMgcHJlc2VudCwgd2hpY2ggc2VlbXMgcmVhc29uYWJsZSBnaXZlbiBpdHMgdWJpcXVpdG91cyB1c2UgaW4gYnJpZGdpbmcuIEJ1dCBub3cgSSBuZWVkIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyBvZiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIEkgc3VzcGVjdCBpdCYjMzk7cyBsaW5rZWQgdG8gSUdNUCBzbm9vcGluZy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlLgoKQWxyaWdodCwgY2hlY2tpbmcgYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYCwgSSBzZWUgbXkgaHVuY2ggd2FzIGNvcnJlY3QuIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCAqaXMqIGluZGVlZCB3cmFwcGVkIGluIGFuIGAjaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYCBibG9jay4gVGhhdCBtZWFucyB0aGF0IHRvIGhhdmUgdGhhdCBmdW5jdGlvbiBkZWZpbmVkLCBgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYCAqbXVzdCogYmUgZW5hYmxlZC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgYSBoYXJkIHJlcXVpcmVtZW50PyBMZXQmIzM5O3MgdHJhY2UgdGhlIGNhbGxzIHRvIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gTG9va3MgbGlrZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBicl92bGFuLmNgIGFuZCBgYnJfbXVsdGljYXN0LmNgLiBTbyBsZXQmIzM5O3MgbG9vayBhdCBgYnJfdmxhbi5jYCBhbmQgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMjE0LVx0XHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMTU6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMjE2LVx0XHRicl9tdWx0aWNhc3RfY3R4X2RlaW5pdChcdTAwMjZtYXN0ZXJ2LVx1MDAzZWJyX21jYXN0X2N0eCk7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVx0X192bGFuX2ZsYWdzX2NvbW1pdCh2LCBmbGFncyk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTk6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIHRydWUpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMzYwLVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM5MD1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjctXHRcdG5icF92bGFuX3NldF92bGFuX2Rldl9zdGF0ZShwLCB2LVx1MDAzZXZpZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0Mjg6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtNDI5LVx0XHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnYtXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTcxOT1zdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjAtXHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc2MTpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2Mi1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgYnJfdmxhbi5jYCoqCgpPa2F5LCBJIG5lZWQgdG8gZmlndXJlIG91dCBzb21ldGhpbmcgYWJvdXQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBicmlkZ2UgVkxBTiBmaWx0ZXJpbmcgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGUgYGJyX3ZsYW4uY2AgZmlsZSBnZXRzIGNvbXBpbGVkIGV2ZW4gd2hlbiB0aGUgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkaXNhYmxlZC4gSXQgc2VlbXMgYSBiaXQgb2RkIGlmIGl0IGRvZXMsIGFuZCBpdCB3b3VsZCBiZSBhIGdvb2Qgb3B0aW1pemF0aW9uIGlmIGl0IGRpZG4mIzM5O3QuIFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0IGRlYWxzIHdpdGggdGhlIGJ1aWxkIHByb2Nlc3MsIGlzIHRvIGNoZWNrIHRoZSBgbmV0L2JyaWRnZS9NYWtlZmlsZWAuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3Mgb3IgZGlyZWN0aXZlcy4gSSYjMzk7bGwgc2VlIHdoYXQgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfdmxhblxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvTWFrZWZpbGU9MjE9YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSAmIzQzOz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTIyLVxubmV0L2JyaWRnZS9NYWtlZmlsZToyMzpicmlkZ2UtJChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKSAmIzQzOz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjA2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBCcmlkZ2UgVkxBTiBhbmQgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBicl92bGFuLmNgIGlzIGRlZmluaXRlbHkgY29uZGl0aW9uYWxseSBjb21waWxlZCwgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdGhlIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgd2FzIGp1c3QgcmV2aWV3aW5nIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBjb25maXJtIHRob3NlIGJ1aWxkLXRpbWUgZmxhZ3MuCgpOb3csIHRoYXQgYnJpbmdzIG1lIHRvIGBicl9tdWx0aWNhc3QuY2AuIEFoLCB5ZXMsIHRoaXMgb25lIGlzIGdvdmVybmVkIGJ5IGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgLiBJIHNlZSB0aGUgY29ubmVjdGlvbiBub3cuIEkmIzM5O20gbm90aW5nIHRoZSBjbGVhciBsaW5rIHRoZXJlIGJldHdlZW4gdGhlIElHTVAgc25vb3BpbmcgZnVuY3Rpb25hbGl0eSBhbmQgdGhpcyBtb2R1bGUuCgpBbmQgdGhlbiB3aXRoaW4gYGJyX211bHRpY2FzdC5jYCwgSSYjMzk7dmUgbm90aWNlZCB0aGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYC4gR29vZCB0byBrZWVwIHRoYXQgaGllcmFyY2h5IG9mIGZ1bmN0aW9uIGNhbGxzIGFuZCBkZXBlbmRlbmNpZXMgaW4gbWluZC4gVGhhdCBpbnRlcm5hbCByZWxhdGlvbnNoaXAgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbXVsdGljYXN0IFZMQU4gb3BlcmF0aW9ucyBhcmUgc3RydWN0dXJlZC4gSSBzaG91bGQgYmUgYWJsZSB0byBtYWtlIGluZmVyZW5jZXMgZnJvbSB0aGUgZmFjdCBvZiBvbmUgY2FsbGluZyB0aGUgb3RoZXIsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgZGVidWdnaW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlJiMzOTtzIGV4ZWN1dGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM2Nj12b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTAtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MTE6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTIte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQzMTppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMi1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0NjQtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0NjU6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0NjYtXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NDcwPWJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQ4MC1cdHZsYW4tXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfR0xPQkFMX01DQVNUX0VOQUJMRUQ7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0ODE6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4odmxhbiwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDgyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQnJpZGdlIE11bHRpY2FzdCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGJhY2sgaW50byB0aGlzIGJyaWRnZSBtdWx0aWNhc3QgY29kZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRob3NlIGNydWNpYWwgZnVuY3Rpb25zOiBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW5gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBiZWhhdmlvciwgZXNwZWNpYWxseSBpbiB0aGF0IHNwZWNpZmljIHNjZW5hcmlvIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluIOKAkyB3aGVuIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBkaXNhYmxlZC4gQXJlIHRoZXNlIGZ1bmN0aW9ucyBldmVuIHJlbGV2YW50IGluIHRoYXQgY29udGV4dD8gSSBzdXNwZWN0IHRoZXkgbWlnaHQgbm90IGJlLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uIE15IGd1dCBzYXlzIHRoZXkgc2hvdWxkbiYjMzk7dCBiZSBleGVjdXRlZCwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBjYWxscyBhcmUgaGFuZGxlZCBhcHByb3ByaWF0ZWx5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byBgYnJfbXVsdGljYXN0LmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzAzLVx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XG5uZXQvYnJpZGdlL2JyLmM6MzA0Olx0XHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xubmV0L2JyaWRnZS9ici5jLTMwNS1cdFx0YnJlYWs7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NDExPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQzMTppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMi1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDc0PXZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwNzU6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDc2LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTU1PXN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1OS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NjA6c3RhdGljIGlubGluZSBpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjEtXHRcdFx0XHRcdFx0ICAgIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9ODk0PWludCBicl92bGFuX2ZpbHRlcl90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MjAtXHRcdGJyX2luZm8oYnIsIFwmIzM0O3ZsYW4gZmlsdGVyaW5nIGRpc2FibGVkLCBhdXRvbWF0aWNhbGx5IGRpc2FibGluZyBtdWx0aWNhc3QgdmxhbiBzbm9vcGluZ1xcblwmIzM0Oyk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo5MjE6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhiciwgZmFsc2UsIE5VTEwpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtOTIyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM2MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEJyaWRnZSBWTEFOIEZpbHRlcmluZyBCZWhhdmlvcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJyLmNgIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbiBgYnJfYm9vbG9wdF90b2dnbGVgLiBJIHNlZSB0aGF0IGl0IGNhbGxzIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLiBOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXA6IGRvZXMgYGJyX2Jvb2xvcHRfdG9nZ2xlYCBldmVuIGdldCBjb21waWxlZCB3aGVuIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBkaXNhYmxlZD8gSXQgc2VlbXMgYGJyLmNgICphbHdheXMqIGdldHMgY29tcGlsZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKQnV0IGhhbmcgb24sIGEgcmVkIGZsYWchIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGxpa2VseSBhY2Nlc3NlcyBgYnJfdmxhbl9ncm91cChicilgLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoZSBWTEFOIGZpbHRlcmluZyBmdW5jdGlvbmFsaXR5IG1pZ2h0IHN0aWxsIGJlIGNyZWVwaW5nIGluLiBMZXQgbWUgcXVpY2tseSBqdW1wIG92ZXIgdG8gYGJyX211bHRpY2FzdC5jYCBhbmQgZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgdG8gY29uZmlybSBteSBzdXNwaWNpb24gYW5kIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgbW9yZSBjbGVhcmx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZsYW5fZ3JvdXAgaXMgYWNjZXNzZWQgdG8gY29uZmlybSB0aGlzIHBvdGVudGlhbCBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0MzA6XHRcbjQ0MzE6XHRpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbjQ0MzI6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjQ0MzM6XHR7XG40NDM0Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcbjQ0MzU6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW47XG40NDM2Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuNDQzNzpcdFxuNDQzODpcdFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkgPT0gb24pXG40NDM5Olx0XHRcdHJldHVybiAwO1xuNDQ0MDpcdFxuNDQ0MTpcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNiAhYnJfb3B0X2dldChiciwgQlJPUFRfVkxBTl9FTkFCTEVEKSkge1xuNDQ0MjpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDYW5ub3QgZW5hYmxlIG11bHRpY2FzdCB2bGFuIHNub29waW5nIHdpdGggdmxhbiBmaWx0ZXJpbmcgZGlzYWJsZWRcJiMzNDspO1xuNDQ0MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ0NDQ6XHRcdH1cbjQ0NDU6XHRcbjQ0NDY6XHRcdHZnID0gYnJfdmxhbl9ncm91cChicik7XG40NDQ3Olx0XHRpZiAoIXZnKVxuNDQ0ODpcdFx0XHRyZXR1cm4gMDtcbjQ0NDk6XHRcbjQ0NTA6XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCwgb24pO1xuNDQ1MTpcdFxuNDQ1MjpcdFx0LyogZGlzYWJsZS9lbmFibGUgbm9uLXZsYW4gbWNhc3QgY29udGV4dHMgYmFzZWQgb24gdmxhbiBzbm9vcGluZyAqL1xuNDQ1MzpcdFx0aWYgKG9uKVxuNDQ1NDpcdFx0XHRfX2JyX211bHRpY2FzdF9zdG9wKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9jdHgpO1xuNDQ1NTpcdFx0ZWxzZVxuNDQ1NjpcdFx0XHRfX2JyX211bHRpY2FzdF9vcGVuKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9jdHgpO1xuNDQ1NzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcdTAwMjZici1cdTAwM2Vwb3J0X2xpc3QsIGxpc3QpIHtcbjQ0NTg6XHRcdFx0aWYgKG9uKVxuNDQ1OTpcdFx0XHRcdGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KFx1MDAyNnAtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG40NDYwOlx0XHRcdGVsc2VcbjQ0NjE6XHRcdFx0XHRicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KFx1MDAyNnAtXHUwMDNlbXVsdGljYXN0X2N0eCk7XG40NDYyOlx0XHR9XG40NDYzOlx0XG40NDY0Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpXG40NDY1Olx0XHRcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XG40NDY2Olx0XG40NDY3Olx0XHRyZXR1cm4gMDtcbjQ0Njg6XHR9XG40NDY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgVkxBTiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBicl92bGFuX2dyb3VwKGJyKWAgaGVyZS4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVmaW5pdGVseSBsZXZlcmFnaW5nIFZMQU5zIHdpdGggdGhpcyBicmlkZ2UgKGBicmApLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJJiMzOTtsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMsIGFuZCBtb3N0IGxpa2VseSBJJiMzOTtsbCBmaW5kIHRoZSBkZWZpbml0aW9uIGluIGBicl9wcml2YXRlLmhgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIFZMQU4tcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHdvdWxkIGJlIGRlZmluZWQsIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcm5hbHMgb2YgdGhpcyBjb25maWd1cmF0aW9uLiBLbm93aW5nIHRoZSBkZXRhaWxzIGluIGBicl9wcml2YXRlLmhgIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgY29udGV4dCBvZiBob3cgdGhlc2UgVkxBTnMgYXJlIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl92bGFuX2dyb3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9wcml2YXRlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTY0MD1pbnQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjQzLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTY0NDpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKmJyX3ZsYW5fZ3JvdXAoXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjQ1LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTY1MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKm5icF92bGFuX2dyb3VwKFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2NTUtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNjU2OnN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqYnJfdmxhbl9ncm91cF9yY3UoXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjU3LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTgxMj1zdGF0aWMgaW5saW5lIGludCBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX21vZGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4MTgtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxODE5OnN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqYnJfdmxhbl9ncm91cChcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4MjAtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicilcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xODI1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqbmJwX3ZsYW5fZ3JvdXAoXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTgzMC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4MzE6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpicl92bGFuX2dyb3VwX3JjdShcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4MzItXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMjgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBicl9wcml2YXRlLmhgIC0gU3BlY2lmaWNhbGx5LCBMaW5lIDE4MTkqKgoKT2theSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYCBoZWFkZXIgZmlsZS4gTXkgaW50ZXJlc3QgaXMgcGlxdWVkLCBhbmQgSSBuZWVkIHRvIHpvb20gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTgxOS4gSSYjMzk7bSBsaWtlbHkgY2hhc2luZyBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGRlZmluaXRpb24sIG9yIHBlcmhhcHMgYSBtYWNybywgZnVuY3Rpb24gc2lnbmF0dXJlLCBvciBjb25zdGFudCB2YWx1ZSB0aGF0JiMzOTtzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkgb3IgYSBidWcgSSYjMzk7bSB0cnlpbmcgdG8gZGlhZ25vc2UuIEdpdmVuIHRoZSBmaWxlIGFuZCB0aGUgbGluZSBudW1iZXIsIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIGxvdy1sZXZlbCBhbmQgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgaW50ZXJuYWwgd29ya2luZ3Mgb2YgdGhlIExpbnV4IGJyaWRnZSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgdG8gbmF2aWdhdGUgdGhyb3VnaCBtYWNybyBkZWZpbml0aW9ucywgc3RydWN0dXJlIG1lbWJlcnMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGlubGluZSBjb21tZW50cyB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGUgY29kZSBhdCB0aGF0IHNwZWNpZmljIGxvY2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgxMDpcdH1cbjE4MTE6XHRcbjE4MTI6XHRzdGF0aWMgaW5saW5lIGludCBicl92bGFuX2ZpbGxfZm9yd2FyZF9wYXRoX21vZGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuMTgxMzpcdFx0XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpkc3QsXG4xODE0Olx0XHRcdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4xODE1Olx0e1xuMTgxNjpcdFx0cmV0dXJuIDA7XG4xODE3Olx0fVxuMTgxODpcdFxuMTgxOTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqYnJfdmxhbl9ncm91cChcbjE4MjA6XHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuMTgyMTpcdHtcbjE4MjI6XHRcdHJldHVybiBOVUxMO1xuMTgyMzpcdH1cbjE4MjQ6XHRcbjE4MjU6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKm5icF92bGFuX2dyb3VwKFxuMTgyNjpcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuMTgyNzpcdHtcbjE4Mjg6XHRcdHJldHVybiBOVUxMO1xuMTgyOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NjMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVkxBTiBGaWx0ZXJpbmcgYW5kIE11bHRpY2FzdCBTbm9vcGluZyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgYnJfdmxhbl9ncm91cGAgcmV0dXJucyBgTlVMTGAgd2hlbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZGlzYWJsZWQuIFRoaXMgaXMga2V5LiBMb29raW5nIGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgLCB0aGUgY29kZSBjaGVja3MgZm9yIHRoaXMgYE5VTExgIHJldHVybjsgaWYgaXQgaXMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAuIFRoYXQgbWVhbnMgaWYgVkxBTiBmaWx0ZXJpbmcgaXMgb2ZmLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYCBpdHNlbGYgaXMgbmV2ZXIgaW52b2tlZC4gU28sIHRoZSBtb2RpZmllZCBjb2RlIHBhdGggaXMgaW5hY2Nlc3NpYmxlIHdpdGhvdXQgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLgoKSSB3YW50IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgc28gSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgd2hlcmUgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIGFjdHVhbGx5IGNhbGxlZC4gV2l0aGluIGBicl92bGFuLmNgLCB0aGUgY2FsbHMgb3JpZ2luYXRlIGZyb20gYGJyX3ZsYW5fcHV0X21hc3RlcmAsIGBfX3ZsYW5fYWRkYCwgYF9fdmxhbl9kZWxgLCBhbmQgYGJyX3ZsYW5fYWRkX2V4aXN0aW5nYC4gTm93LCBjcml0aWNhbGx5LCBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbHNvIGNvbmRpdGlvbmFsIG9uIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gVGhpcyBjb25maXJtcyBteSBzdXNwaWNpb246IGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBhbiBhYnNvbHV0ZSBwcmVyZXF1aXNpdGUgdG8gcmVhY2ggYW55IG9mIHRoZXNlIHJlbGV2YW50IGNvZGUgc2VjdGlvbnMuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgYXJlIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBkZXBlbmRlbmNpZXMgY29tcGxldGVseS4gSXQgbG9va3MgbGlrZSBgQlJJREdFX0lHTVBfU05PT1BJTkdgIGRlcGVuZHMgb24gYEJSSURHRWAgYW5kIGBJTkVUYC4gYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgZGVwZW5kcyBvbiBgQlJJREdFYCBhbmQgYFZMQU5fODAyMVFgLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6CgoqICAgYEJSSURHRWAKKiAgIGBJTkVUYAoqICAgYFZMQU5fODAyMVFgCiogICBgQlJJREdFX0lHTVBfU05PT1BJTkdgCiogICBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYAoKTm93LCB0aW1lIHRvIGxvb2sgaW50byBgVkxBTl84MDIxUWAgYW5kIGFueSBvdGhlciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkxBTl84MDIxUSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC84MDIxcS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9LY29uZmlnLTUtXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXG5uZXQvODAyMXEvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XCYjMzQ7XG4tLVxubmV0LzgwMjFxL0tjb25maWctMjEtXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7R1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC84MDIxcS9LY29uZmlnLTMxLVxubmV0LzgwMjFxL0tjb25maWc6MzI6Y29uZmlnIFZMQU5fODAyMVFfTVZSUFxubmV0LzgwMjFxL0tjb25maWctMzMtXHRib29sIFwmIzM0O01WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzYxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZToKCioqRGl2aW5nIGludG8gdGhlIDgwMi4xUSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgbmV0LzgwMjFxL0tjb25maWdgIGZpbGUgYW5kIHplcm8gaW4gYXJvdW5kIGxpbmUgNi4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgODAyLjFRIFZMQU4gaGFuZGxpbmcgaW4gdGhlIGtlcm5lbCBhcmUgbGlrZWx5IHRvIGJlIGRlZmluZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY2VudHJhbCBlbmFibGUvZGlzYWJsZSBzd2l0Y2ggZm9yIHRoZSA4MDIuMVEgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBEZXBlbmRpbmcgb24gaG93IHRoaXMgaXMgc3RydWN0dXJlZCwgSSBtaWdodCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlLCBvciBpZiB0aGlzIGlzIHRoZSBnZW5lcmljIFZMQU4gaW1wbGVtZW50YXRpb24gb3IgaWYgdGhlcmUgYXJlIHNwZWNpZmljIGhhcmR3YXJlIGhvb2tzIGluIHRoaXMgZmlsZS4gSSYjMzk7bSBhbHNvIGhvcGluZyB0aGF0IHRoaXMgc2VjdGlvbiBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgZGVmYXVsdCBiZWhhdmlvciBvciBwb3RlbnRpYWxseSBzb21lIGNyaXRpY2FsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMuIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgaG93IGNsZWFubHkgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIHRvby4gSSByZWFsbHkgaG9wZSB0aGlzIGlzbiYjMzk7dCBqdXN0IGEgYmFzaWMsIGxvdy1sZXZlbCBlbmFibGUvZGlzYWJsZTsgSSYjMzk7ZCBsaWtlIHRvIHNlZSBzb21lIHRob3VnaHRmdWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0LzgwMjFxL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBDb25maWd1cmF0aW9uIGZvciA4MDIuMVEgVkxBTiBzdXBwb3J0XG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBWTEFOXzgwMjFRXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDs4MDIuMVEvODAyLjFhZCBWTEFOIFN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgU2VsZWN0IHRoaXMgYW5kIHlvdSB3aWxsIGJlIGFibGUgdG8gY3JlYXRlIDgwMi4xUSBWTEFOIGludGVyZmFjZXNcbiAgMTA6XHRcdCAgb24geW91ciBFdGhlcm5ldCBpbnRlcmZhY2VzLiA4MDIuMVEgVkxBTiBzdXBwb3J0cyBhbG1vc3RcbiAgMTE6XHRcdCAgZXZlcnl0aGluZyBhIHJlZ3VsYXIgRXRoZXJuZXQgaW50ZXJmYWNlIGRvZXMsIGluY2x1ZGluZ1xuICAxMjpcdFx0ICBmaXJld2FsbGluZywgYnJpZGdpbmcsIGFuZCBvZiBjb3Vyc2UgSVAgdHJhZmZpYy4gWW91IHdpbGwgbmVlZFxuICAxMzpcdFx0ICB0aGUgJiMzOTtpcCYjMzk7IHV0aWxpdHkgaW4gb3JkZXIgdG8gZWZmZWN0aXZlbHkgdXNlIFZMQU5zLlxuICAxNDpcdFx0ICBTZWUgdGhlIFZMQU4gd2ViIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb246XG4gIDE1Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cuY2FuZGVsYXRlY2guY29tL35ncmVlYXIvdmxhbi5odG1sXHUwMDNlXG4gIDE2Olx0XG4gIDE3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDE4Olx0XHQgIHdpbGwgYmUgY2FsbGVkIDgwMjFxLlxuICAxOTpcdFxuICAyMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzODYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJyaWRnZSBNdWx0aWNhc3QgVG9nZ2xlIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaGF2ZSBhbnkgZXhwbGljaXQgZGVwZW5kZW5jaWVzIGJlc2lkZXMsIHdlbGwsIHRoZSBvYnZpb3VzIG5lZWQgZm9yIGEgbmV0d29yayBzdGFja+KAlHNvbWV0aGluZyBsaWtlIGBORVRgLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyBuZWVkaW5nIGFueSBzcGVjaWFsIGF0dGVudGlvbiBvciBleG90aWMgbGlicmFyaWVzLCB3aGljaCBpcyBnb29kLgoKVGhhdCBtZWFucyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBJJiMzOTtsbCBuZWVkIGBCUklER0VgLCBgSU5FVGAsIGBWTEFOXzgwMjFRYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBUaG9zZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIEkmIzM5O2QgZXhwZWN0IHRvIHNlZS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gTXkgZm9jdXMgaXMgb24gdGhpcyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgdGhlIG9uZSBiZWluZyBtb2RpZmllZCwgYWZ0ZXIgYWxsLiBSaWdodCwgc28gd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBnZXR0aW5nIGNhbGxlZCBmcm9tPyBJIHNlZSBhIGxpc3Qgb2YgZnVuY3Rpb25zIGNhbGxpbmcgaXQ6IGBicl92bGFuX3B1dF9tYXN0ZXJgLCBgX192bGFuX2FkZGAsIGBfX3ZsYW5fZGVsYCwgYGJyX3ZsYW5fYWRkX2V4aXN0aW5nYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gLiBUaGVzZSBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMgaW50ZXJuYWxseSwgd2hpY2ggbmFycm93cyBkb3duIHRoZSBzY29wZSBhIGJpdC4KClRoZSBuZXh0IHN0ZXAgaXMgdG8gZmluZCB0aGUgcHVibGljIEFQSSBlbnRyeSBwb2ludHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGNhbGwgdGhlc2UgaW50ZXJuYWwgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjaGFuZ2UgcHJvcGFnYXRlcyBvdXR3YXJkcy4gTG9va2luZyBhdCBpdCwgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYCBhcmUgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuYC4KCk5vdyBJJiMzOTtsbCBzaGlmdCBnZWFycyBhbmQgbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGltcGFjdCBvZiBhbnkgY2hhbmdlIHRvIHRoZSBjb3JlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyLmM9Mjk0PWludCBicl9ib29sb3B0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGVudW0gYnJfYm9vbG9wdF9pZCBvcHQsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9ici5jLTMwMy1cdGNhc2UgQlJfQk9PTE9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HOlxubmV0L2JyaWRnZS9ici5jOjMwNDpcdFx0ZXJyID0gYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKGJyLCBvbiwgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnIuYy0zMDUtXHRcdGJyZWFrO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDQxMT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MzAtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MzE6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MzItXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTA3ND12b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDc1OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3Ni1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU1NT1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTktXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTYwOnN0YXRpYyBpbmxpbmUgaW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTYxLVx0XHRcdFx0XHRcdCAgICBib29sIG9uLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTg5ND1pbnQgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtOTIwLVx0XHRicl9pbmZvKGJyLCBcJiMzNDt2bGFuIGZpbHRlcmluZyBkaXNhYmxlZCwgYXV0b21hdGljYWxseSBkaXNhYmxpbmcgbXVsdGljYXN0IHZsYW4gc25vb3BpbmdcXG5cJiMzNDspO1xubmV0L2JyaWRnZS9icl92bGFuLmM6OTIxOlx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIGZhbHNlLCBOVUxMKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTkyMi1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3ODYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOgoKKipEaWdnaW5nIGludG8gQnJpZGdlIGFuZCBWTEFOIEludGVyYWN0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGEgY291cGxlIG9mIGtleSB0b2dnbGUgb3B0aW9ucyBoZXJlOiBgYnJfYm9vbG9wdF90b2dnbGVgIGFuZCBgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlYC4gU2VlbXMgbGlrZSBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBpbnRlcmFjdCwgb3IgaG93IGEgY2hhbmdlIGluIG9uZSBhZmZlY3RzIHRoZSBvdGhlci4gR29vZCB0byBrZWVwIHRoZXNlIGludGVyYWN0aW9ucyBmaXJtbHkgaW4gbWluZCwgZXNwZWNpYWxseSB3aXRoIG1vcmUgZHluYW1pYyBzeXN0ZW1zIGluIHBsYWNlLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdyBnb2luZyB0byBkcmlsbCBkb3duIGFuZCBleGFtaW5lIHRoZSBjYWxsIHNpdGVzIGZvciBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAuIFRoaXMgc3VnZ2VzdHMgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiBnbG9iYWwgVkxBTiBjb25maWd1cmF0aW9uIG9uIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYnJpZGdlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aG9zZSBjYWxscywgYW5kIHdoYXQgdGhlIG92ZXJhbGwgaW1wYWN0IGlzLiBUaGlzJiMzOTtsbCBoZWxwIG1lIHNlZSBpZiB0aGUgdG9nZ2xlcyBoYXZlIGltcGxpY2F0aW9ucyBvbiBhbnkgZ2xvYmFsIGZ1bmN0aW9ucy4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJkZXBlbmRlbmNpZXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MzE9aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDY5LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDcwOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDcxLXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDc1PWludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3Ni1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDc3OmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzgtXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU2MD1zdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjYtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTY3OnN0YXRpYyBpbmxpbmUgYm9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTY4LVx0XHRcdFx0XHRcdCAgIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz01NTA9c3RhdGljIGludCBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTU2NC1cdFx0bWNfc25vb3BpbmcgPSBubGFfZ2V0X3U4KHRiW0JSSURHRV9WTEFOREJfR09QVFNfTUNBU1RfU05PT1BJTkddKTtcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NTY1Olx0XHRpZiAoYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbih2LCAhIW1jX3Nub29waW5nKSlcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTY2LVx0XHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgYXMgdGhvdWdoIGl0IHdlcmUgbXkgdHJhaW4gb2YgdGhvdWdodDoKCioqRGlnZ2luZyBpbnRvIHRoZSBWTEFOIE11bHRpY2FzdCBGbG93KioKCk9rYXksIHNvIGBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGluIHRoaXMgbXVsdGljYXN0IHBhdGgsIGFuZCBpdCBjYWxscyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgbGluZWFnZSBhbmQgc2VlIHdob+KAmXMgYWN0dWFsbHkgdHJpZ2dlcmluZyB0aGlzIHBhcnRpY3VsYXIgY2FsbCBjaGFpbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzYC4gS25vd2luZyBpdHMgZGlyZWN0IGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBnbG9iYWwgVkxBTiBtdWx0aWNhc3Qgc2V0dGluZ3MgYXJlIHVsdGltYXRlbHkgYWRqdXN0ZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGNvbnRleHQsIGFuZCBoZWxwIG1lIHJlYXNvbiBhYm91dCB0aGUgcG9zc2libGUgaW1wYWN0IG9mIGNoYW5nZXMgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW5gIHNpbmNlIHRoaXMgY2FsbCBjaGFpbiBzZWVtcyBjZW50cmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz01MDg9c3RhdGljIHZvaWQgYnJfdmxhbl9nbG9iYWxfb3B0c19ub3RpZnkoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTQ5LVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo1NTA6c3RhdGljIGludCBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTUxLVx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jPTY4NT1pbnQgYnJfdmxhbl9ydG1fcHJvY2Vzc19nbG9iYWxfb3B0aW9ucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNzQ0LVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo3NDU6XHRcdGVyciA9IGJyX3ZsYW5fcHJvY2Vzc19nbG9iYWxfb25lX29wdHMoYnIsIHZnLCB2LCB0YiwgXHUwMDI2Y2hhbmdlZCxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNzQ2LVx0XHRcdFx0XHRcdCAgICAgIGV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTYzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkFuYWx5emluZyBWTEFOIENvbmZpZ3VyYXRpb24gUHJvY2Vzc2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGJyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnNgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCBjYWxscyBgYnJfdmxhbl9wcm9jZXNzX2dsb2JhbF9vbmVfb3B0c2AuIE5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHVuZGVybHlpbmcgcHJvY2Vzc2VzLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBmbG93IG9mIHRoaW5ncyBhIGJpdCBmdXJ0aGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNhbGxpbmcgdGhlIGNvcmUgVkxBTiBmdW5jdGlvbnMgLSBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaW5kIGFsbCB0aGUgY2FsbGVycyBvZiBgX192bGFuX2FkZGAsIGBfX3ZsYW5fZGVsYCwgYGJyX3ZsYW5fYWRkX2V4aXN0aW5nYCwgYW5kIGBicl92bGFuX3B1dF9tYXN0ZXJgLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgaW4gY29udGV4dCBvZiB0aGUgZ2xvYmFsIG9wdGlvbnMgcHJvY2Vzc2luZywgaXMga2V5IHRvIGZ1bGx5IHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X192bGFuX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jPTMyPXN0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICpicl92bGFuX2xvb2t1cChzdHJ1Y3Qgcmhhc2h0YWJsZSAqdGJsLCB1MTYgdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM2LVxubmV0L2JyaWRnZS9icl92bGFuLmM6Mzc6c3RhdGljIHZvaWQgX192bGFuX2FkZF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzgtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9NjE9c3RhdGljIGJvb2wgX192bGFuX2ZsYWdzX3VwZGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNzktXHRpZiAoZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRClcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjgwOlx0XHRfX3ZsYW5fYWRkX3B2aWQodmcsIHYpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtODEtXHRlbHNlXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTAzPXN0YXRpYyBpbnQgX192bGFuX3ZpZF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyMy1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEyNDpzdGF0aWMgdm9pZCBfX3ZsYW5fYWRkX2xpc3Qoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyNS17XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjM0PXN0YXRpYyB2b2lkIGJyX3ZsYW5faW5pdF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTI2Mi0gKi9cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjI2MzpzdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjY0LVx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU2LVxubmV0L2JyaWRnZS9icl92bGFuLmM6MzU3Olx0X192bGFuX2FkZF9saXN0KHYpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVx0X192bGFuX2ZsYWdzX2NvbW1pdCh2LCBmbGFncyk7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9Nzc5PWludCBicl92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQsIHUxNiBmbGFncywgYm9vbCAqY2hhbmdlZCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04MDktXHRcdHJlZmNvdW50X3NldChcdTAwMjZ2bGFuLVx1MDAzZXJlZmNudCwgMSk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4MTA6XHRyZXQgPSBfX3ZsYW5fYWRkKHZsYW4sIGZsYWdzLCBleHRhY2spO1xubmV0L2JyaWRnZS9icl92bGFuLmMtODExLVx0aWYgKHJldCkge1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTEzMTU9aW50IG5icF92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTM0Ny1cdHZsYW4tXHUwMDNlcG9ydCA9IHBvcnQ7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMzQ4Olx0cmV0ID0gX192bGFuX2FkZCh2bGFuLCBmbGFncywgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEzNDktXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW50ZXJuYWwgTmV0d29yayBWTEFOIENvbnNpZGVyYXRpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IFZMQU4gYXNzaWdubWVudHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBvcGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBhZGRpbmcgVkxBTnMuICYjMzQ7YnJfdmxhbl9hZGQmIzM0OyBpbW1lZGlhdGVseSBicmluZ3MgdG8gbWluZCB0aGUgYnJpZGdlIGludGVyZmFjZSwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYWRkaW5nIGEgVkxBTiB0YWcgdG8gYSBicmlkZ2UgaW50ZXJmYWNlLiBJJiMzOTttIGNvbnNpZGVyaW5nIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGZsb29kaW5nIGRvbWFpbnMsIGFuZCBob3cgdGhpcyB3aWxsIGFmZmVjdCB0cmFmZmljIGZvcndhcmRpbmcuIFRoZXJlIGFyZSB0aGUgdXN1YWwgc2VjdXJpdHkgY29uY2VybnMgSSYjMzk7bSBmYWN0b3JpbmcgaW4sIHRvbywgb2YgY291cnNlIC0gcHJvcGVyIFZMQU4gc2VncmVnYXRpb24gaXMgZXNzZW50aWFsLgoKVGhlbiwgJiMzNDtuYnBfdmxhbl9hZGQmIzM0Oy4gVGhpcyBzdWdnZXN0cyBhIG5ldHdvcmsgYm9vdCBwcm9jZXNzIG9yIFBYRSBjb250ZXh0LiBTbywgSSYjMzk7bSBtYXBwaW5nIHRoYXQgb250byB0aGUgYnJvYWRlciBwaWN0dXJlOyBjb25zaWRlcmluZyBob3cgd2UgaGFuZGxlIFZMQU4gYXNzaWdubWVudHMgZm9yIG5ldHdvcmsgYm9vdGluZyBvZiBkZXZpY2VzLiBUaGlzIHByb21wdHMgcXVlc3Rpb25zIGFib3V0IFZMQU4gdGFnZ2luZyBvbiB0aGUgYm9vdCBzZXJ2ZXIsIERIQ1AgY29uZmlndXJhdGlvbiB0byBhc3NpZ24gdGhlIGNvcnJlY3QgVkxBTiwgYW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIGFueSBwcmUtYm9vdCBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGFuZCBob3cgdGhleSBkZXBlbmQgb24gZWFjaCBvdGhlci4gSG93IGRvZXMgaXQgdGllIGludG8gdGhlIG92ZXJhbGwgcHJvdmlzaW9uaW5nIHdvcmtmbG93LCBhbmQgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGluIHRoZSBleGlzdGluZyBzZXR1cD8gSSYjMzk7bSBhc3Nlc3NpbmcgdGhlIGltcGFjdCBvbiBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCB0cnlpbmcgdG8gYW50aWNpcGF0ZSBhbnkgcG9zc2libGUgZWRnZSBjYXNlcyBvciByYWNlIGNvbmRpdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBhZGRyZXNzLiBJdCYjMzk7cyBhbGwgYWJvdXQgZW5zdXJpbmcgc21vb3RoIG9wZXJhdGlvbiBhbmQgdGhhdCB0aGUgVkxBTiBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCBhY3Jvc3MgdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZWxlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdmxhbl9kZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYz0zNz1zdGF0aWMgdm9pZCBfX3ZsYW5fYWRkX3B2aWQoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNDctXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0ODpzdGF0aWMgdm9pZCBfX3ZsYW5fZGVsZXRlX3B2aWQoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsIHUxNiB2aWQpXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00OS17XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9NjE9c3RhdGljIGJvb2wgX192bGFuX2ZsYWdzX3VwZGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtODEtXHRlbHNlXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4MjpcdFx0X192bGFuX2RlbGV0ZV9wdmlkKHZnLCB2LVx1MDAzZXZpZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04My1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMjQ9c3RhdGljIHZvaWQgX192bGFuX2FkZF9saXN0KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTQzLVxubmV0L2JyaWRnZS9icl92bGFuLmM6MTQ0OnN0YXRpYyB2b2lkIF9fdmxhbl9kZWxfbGlzdChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTQ1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMjEzLVx0XHRcdFx0ICAgICAgIFx1MDAyNm1hc3RlcnYtXHUwMDNldm5vZGUsIGJyX3ZsYW5fcmh0X3BhcmFtcyk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMTQ6XHRcdF9fdmxhbl9kZWxfbGlzdChtYXN0ZXJ2KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNS1cdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihtYXN0ZXJ2LCBmYWxzZSk7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzg5LVxubmV0L2JyaWRnZS9icl92bGFuLmM6MzkwOnN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzkxLXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MDQtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0MDU6XHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtXHUwMDNldmlkKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQwNi1cdGlmIChwKSB7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNDI1LVx0XHRcdFx0ICAgICAgIGJyX3ZsYW5fcmh0X3BhcmFtcyk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0MjY6XHRcdF9fdmxhbl9kZWxfbGlzdCh2KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQyNy1cdFx0bmJwX3ZsYW5fc2V0X3ZsYW5fZGV2X3N0YXRlKHAsIHYtXHUwMDNldmlkKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz00NDY9c3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00NTMtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0NTQ6XHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHZnLVx1MDAzZXB2aWQpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtNDU1LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZsYW4sIHRtcCwgXHUwMDI2dmctXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQ2NS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjQ2NjpcdFx0ZXJyID0gX192bGFuX2RlbCh2bGFuKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQ2Ny1cdFx0aWYgKGVycikge1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTgyND1pbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTg0MC1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjg0MTpcdHJldHVybiBfX3ZsYW5fZGVsKHYpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtODQyLX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMzYwPWludCBuYnBfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZClcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzcxLVxubmV0L2JyaWRnZS9icl92bGFuLmM6MTM3MjpcdHJldHVybiBfX3ZsYW5fZGVsKHYpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMTM3My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzg3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBJbW1lZGlhdGUgQ29uY2VybnMgd2l0aCBWTEFOIERlbGV0aW9uKioKClJpZ2h0LCBzbyAqYGJyX3ZsYW5fZGVsZXRlYCogYW5kICpgbmJwX3ZsYW5fZGVsZXRlYCouLi4gbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgb3BlcmF0aW9uYWwgaW1wbGljYXRpb25zIGhlcmUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZXNlIGRlbGV0aW9uIHJvdXRpbmVzIGFjcm9zcyBkaWZmZXJlbnQgYnJpZGdlIGludGVyZmFjZXMgYW5kIHBvdGVudGlhbGx5IG5vbi1icmlkZ2VkIHBvcnQgZW52aXJvbm1lbnRzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25zaWRlcjoKCiogICAqKkF0b21pY2l0eToqKiBBcmUgdGhlc2Ugb3BlcmF0aW9ucyB0cnVseSBhdG9taWM/IElmIGEgZGVsZXRpb24gZmFpbHMgbWlkd2F5IHRocm91Z2gsIHdoYXQmIzM5O3MgdGhlIHJvbGxiYWNrIHByb2NlZHVyZT8gRG9lcyBpdCBsZWF2ZSB0aGUgc3lzdGVtIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZT8gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBzY2VuYXJpb3Mgd2hlcmUgdGhlIFZMQU4gaXMgcmVmZXJlbmNlZCBpbiBtdWx0aXBsZSBwbGFjZXMg4oCTIFFvUyBwb2xpY2llcywgQUNMcywgZm9yd2FyZGluZyBkYXRhYmFzZXMuIEhvdyBhcmUgdGhvc2UgaGFuZGxlZD8gRG8gd2UgaGF2ZSByYWNlIGNvbmRpdGlvbnMgaWYgYW5vdGhlciBwcm9jZXNzIGF0dGVtcHRzIHRvIHVzZSB0aGUgdmxhbiwgb3IgY29uZmlndXJlIHRoZSB2bGFuIGF0IHRoZSBzYW1lIHRpbWU/CiogICAqKlJlc291cmNlIENsZWFudXA6KiogQmV5b25kIHJlbW92aW5nIHRoZSBWTEFOIElEIGZyb20gdGhlIGJyaWRnZSBvciBwb3J0IGNvbnRleHQsIHdoYXQgb3RoZXIgcmVzb3VyY2VzIGFyZSBiZWluZyBmcmVlZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgbWVtb3J5IGFsbG9jYXRpb25zLCBmb3J3YXJkaW5nIHRhYmxlIGVudHJpZXMsIGFueSBhc3NvY2lhdGVkIGNvbnRyb2wgcGxhbmUgc3RhdGU/IEkgbmVlZCB0byBrbm93IHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcyBvciBvdGhlciByZXNvdXJjZSBleGhhdXN0aW9uIGlmIGEgZGVsZXRpb24gaXMgcG9vcmx5IGltcGxlbWVudGVkLgoqICAgKipEZXBlbmRlbmN5IE1hbmFnZW1lbnQ6KiogSSYjMzk7bSB3b25kZXJpbmcgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIGhhbmRsZWQuIElmIGEgVkxBTiBpcyBkZWxldGVkIHRoYXQmIzM5O3MgcGFydCBvZiBhIExBRyBvciBhIHRydW5rLCBhcmUgdGhlIGFzc29jaWF0ZWQgcG9ydHMgYXV0b21hdGljYWxseSByZWNvbmZpZ3VyZWQgb3IgZGlzYWJsZWQ/IElmIHRoZSB2bGFuIGlzIGEgZGVmYXVsdCB2bGFuIG9uIGEgcG9ydCwgYW5kIHRoZSBwb3J0IGlzIGNvbm5lY3RlZCB0byBhIGhvc3QsIGhvdyBpcyB0aGUgaG9zdCBpbXBhY3RlZD8KKiAgICoqRXJyb3IgSGFuZGxpbmcgYW5kIFByb3BhZ2F0aW9uOioqIEhvdyByb2J1c3QgaXMgdGhlIGVycm9yIGhhbmRsaW5nPyBEb2VzIHRoZSBjb2RlIHByb3Blcmx5IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIFZMQU4gZG9lc24mIzM5O3QgZXhpc3Qgb3IgaXMgaW4gdXNlPyBXaGF0JiMzOTtzIHRoZSBlcnJvciByZXBvcnRpbmcgbGlrZT8gRG9lcyBpdCBwcm92aWRlIHN1ZmZpY2llbnQgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgdHJvdWJsZXNob290aW5nIGluIGEgY29tcGxleCBuZXR3b3JrIHNldHVwPyBEb2VzIGl0IHNpbXBseSByZXR1cm4gYW4gZXJyb3IgY29kZSBvciBkb2VzIGl0IHNlbmQgdXNlZnVsIGRlYnVnIG1lc3NhZ2VzPyBXaGF0IGlzIHRoZSBpbXBhY3Qgb2YgZXJyb3JzIHRvIHRoZSBicm9hZGVyIG5ldHdvcms/CiogICAqKkNvbnRleHR1YWwgRGlmZmVyZW5jZXM6KiogVGhlICYjMzk7bmJwJiMzOTsgcHJlZml4IG9uIGBuYnBfdmxhbl9kZWxldGVgIHBpcXVlcyBteSBpbnRlcmVzdC4gSXMgdGhpcyBtZWFudCBmb3Igbm9uLWJyaWRnZSBwb3J0cz8gSWYgc28sIHdoYXQgYXJlIHRoZSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3I/IEFyZSB0aGVyZSBzcGVjaWZpYyBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gdGFnZ2VkL3VudGFnZ2VkIFZMQU4gYXNzaWdubWVudHMgb24gdGhlc2UgaW50ZXJmYWNlcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBhc3N1bWUgdGhlIGBicl9gIHZlcnNpb24gaXMgZm9yIHN0YW5kYXJkIGJyaWRnZSBwb3J0cy4gQnV0IHdoYXQgYWJvdXQgdmlydHVhbCBpbnRlcmZhY2VzPyBIb3cgYWJvdXQgYm9uZCBwb3J0cz8KClVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHBvdGVudGlhbCBwaXRmYWxscyBhbmQgZWRnZSBjYXNlcyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgVkxBTiBkZWxldGlvbiBmdW5jdGlvbnMuIFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpbGwgYmUga2V5LCBidXQgSSYjMzk7bSBsb29raW5nIGZvciBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlc2lnbiBwaGlsb3NvcGh5LCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX3ZsYW5fYWRkX2V4aXN0aW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmM9Njg2PWJvb2wgYnJfc2hvdWxkX2xlYXJuKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcxOC1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjcxOTpzdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcyMC1cdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTc3OT1pbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsIGJvb2wgKmNoYW5nZWQsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNzkxLVx0aWYgKHZsYW4pXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3OTI6XHRcdHJldHVybiBicl92bGFuX2FkZF9leGlzdGluZyhiciwgdmcsIHZsYW4sIGZsYWdzLCBjaGFuZ2VkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzkzLVx0XHRcdFx0XHQgICAgZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2NzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVkxBTiBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgVkxBTiBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgY2FsbGVkIGRpcmVjdGx5IGJ5IGBicl92bGFuX2FkZGAuIFRoaXMgc3VnZ2VzdHMgdGhhdCBgYnJfdmxhbl9hZGRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBhZGRpbmcgVkxBTnMgaW4gbW9zdCBzY2VuYXJpb3MuIEdpdmVuIHRoaXMsIG15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGEgc2V0IG9mIGNvcmUgZnVuY3Rpb25zOiBgYnJfdmxhbl9hZGRgLCBgYnJfdmxhbl9kZWxldGVgLCBhbmQgdGhlbiB0aGUgTmV0d29yayBCcmlkZ2UgUHJvdG9jb2wgZXF1aXZhbGVudHMgYG5icF92bGFuX2FkZGAgYW5kIGBuYnBfdmxhbl9kZWxldGVgLiBUaGVzZSBhcmUgb2J2aW91c2x5IGhhbmRsaW5nIHRoZSBjb3JlIFZMQU4gY3JlYXRpb24gYW5kIHJlbW92YWwgb3BlcmF0aW9ucy4gSSYjMzk7bGwgYWxzbyBuZWVkIHRvIGV4YW1pbmUgaG93IHRoZSBicmlkZ2UtbGV2ZWwgYm9vbGVhbiBvcHRpb25zLCBsaWtlIGVuYWJsaW5nIG9yIGRpc2FibGluZyB2YXJpb3VzIGZlYXR1cmVzLCBhcmUgbWFuYWdlZCB0aHJvdWdoIGBicl9ib29sb3B0X3RvZ2dsZWAsIGFuZCB0aGUgZmlsdGVyaW5nIHRvZ2dsZXMgd2l0aCBgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlYC4gTGFzdGx5LCBJIHdpbGwgbm90IGZvcmdldCB0aGUgZ2xvYmFsIG9wdGlvbiBwcm9jZXNzaW5nIGRvbmUgYnkgYGJyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnNgLiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgYXBwbGllZCBpbiB0aGUgYnJvYWRlciBjb250ZXh0LgoKTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAgaW50byB0aGVzZSBmdW5jdGlvbnMsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O2xsIGxvb2sgZm9yIG90aGVyIGVudHJ5IHBvaW50cywgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSBwYXRocyB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmcuIEkgc2VlIHRoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIGNhbGxlZCBieSBgYnJfdmxhbl9wdXRfbWFzdGVyYC4gSXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCBzaW5jZSBpdCBzdWdnZXN0cyBhIHNlcGFyYXRlIG11bHRpY2FzdCBhc3BlY3QsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIG1vcmUgZ2VuZXJhbCBWTEFOIHByb2Nlc3NpbmcuIEkgbmVlZCB0byB0YWtlIGl0IGludG8gYWNjb3VudCwgd2hpbGUgSSYjMzk7bSBsb29raW5nIGFyb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfdmxhbl9wdXRfbWFzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmM9MTkyPXN0YXRpYyB2b2lkIGJyX21hc3Rlcl92bGFuX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIwMi1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjIwMzpzdGF0aWMgdm9pZCBicl92bGFuX3B1dF9tYXN0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydilcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIwNC17XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzc5LVxubmV0L2JyaWRnZS9icl92bGFuLmM6MzgwOlx0XHRcdGJyX3ZsYW5fcHV0X21hc3RlcihtYXN0ZXJ2KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM4MS1cdFx0XHR2LVx1MDAzZWJydmxhbiA9IE5VTEw7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MzkwPXN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQzMi1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjQzMzpcdGJyX3ZsYW5fcHV0X21hc3RlcihtYXN0ZXJ2KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQzNC1vdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTQ5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWTEFOIE9wZXJhdGlvbnMgaW4gdGhlIEJyaWRnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgVkxBTiBpbXBsZW1lbnRhdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgbG9naWMsIGF0IGxlYXN0IGZyb20gdGhpcyBjb250ZXh0LCBpcyB0cmlnZ2VyZWQgdGhyb3VnaCBgX192bGFuX2FkZGAgYW5kIGBfX3ZsYW5fZGVsYC4gVGhhdCYjMzk7cyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20uIE15IHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBtYW5hZ2luZyBWTEFOcyBhcmU6IGBicl92bGFuX2FkZGAsIGBicl92bGFuX2RlbGV0ZWAsIGBuYnBfdmxhbl9hZGRgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgd2hpY2ggaGFuZGxlIHRoZSBhY3R1YWwgYWRkaXRpb24gYW5kIHJlbW92YWwgb2YgVkxBTiBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSBgYnJfYm9vbG9wdF90b2dnbGVgLCBgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlYCwgYW5kIGBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zYCBhcmUgaW4gdGhlcmUgdG9vLCBsaWtlbHkgZm9yIGZlYXR1cmUgdG9nZ2xpbmcgb3IgY29uZmlndXJhdGlvbiB1cGRhdGVzLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYGJyX3ZsYW5fYWRkYCBhbmQgYGJyX3ZsYW5fZGVsZXRlYC4gQXJlIHRoZXNlIHN0YXRpYyBvciBnbG9iYWwgZnVuY3Rpb25zPyBLbm93aW5nIHRoYXQgd2lsbCBwcm92aWRlIGNyaXRpY2FsIGNvbnRleHQgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBtb2RpZmljYXRpb24uIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZmluZCB0aGF0IGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYnJfdmxhbl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTkwPXN0cnVjdCBza19idWZmICpicl9oYW5kbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU5My1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTk0OmludCBicl92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQsIHUxNiBmbGFncyxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1OTUtXHRcdGJvb2wgKmNoYW5nZWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTcyMj1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpicl9oYW5kbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTcyOS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE3MzA6c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzMxLVx0XHRcdCAgICAgIGJvb2wgKmNoYW5nZWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz02ODY9Ym9vbCBicl9zaG91bGRfbGVhcm4oc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICp2aWQpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNzE4LVxubmV0L2JyaWRnZS9icl92bGFuLmM6NzE5OnN0YXRpYyBpbnQgYnJfdmxhbl9hZGRfZXhpc3Rpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzIwLVx0XHRcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNzc4LSAqL1xubmV0L2JyaWRnZS9icl92bGFuLmM6Nzc5OmludCBicl92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQsIHUxNiBmbGFncywgYm9vbCAqY2hhbmdlZCxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc4MC1cdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ0NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqQXNzZXNzaW5nIHRoZSBEeW5hbWljIE5hdHVyZSBvZiBWTEFOcyBhbmQgRnVuY3Rpb24gQ2FsbHMqKgoKWWVzLCB0aGF0JiMzOTtzIHJpZ2h0LCB0aGUgc3ViamVjdCBiZWluZyBkaXNjdXNzZWQgaXMgZGVmaW5pdGVseSBub3Qgc3RhdGljLiBUaGUgY29udGV4dCBzdHJvbmdseSBpbXBsaWVzIGEgZHluYW1pYyBlbnZpcm9ubWVudCwgcGFydGljdWxhcmx5IHdpdGggVkxBTnMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb25zIHdpdGhpbiB0aGUgcmVsZXZhbnQgY29kZSBiYXNlIHdoZXJlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVkxBTiBjcmVhdGlvbiBhbmQgZGVsZXRpb24sIHRvIHVuZGVyc3RhbmQgaG93IGNoYW5nZXMgYXJlIGFwcGxpZWQuIFRvIGNsYXJpZnkgbXkgcG9zaXRpb24sIEkgYW0gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiBjaGVja2luZyB0aGUgYG5icF92bGFuX2FkZGAgYW5kIGBuYnBfdmxhbl9kZWxldGVgIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBmb3IgYXNzZXNzaW5nIGV4YWN0bHkgaG93IHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgYXJlIG1hZGUgYW5kIHdoYXQgb3RoZXIgYWN0aW9ucyBhcmUgcmVxdWlyZWQsIHN1Y2ggYXMgaW50ZXJmYWNlIHJlLWNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZWxzZSBuZWVkcyB0byBiZSBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgbmJwX3ZsYW5fYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTYxMT1pbnQgX19icl92bGFuX3NldF9kZWZhdWx0X3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgcHZpZCxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2MTItXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNjEzOmludCBuYnBfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCwgdTE2IGZsYWdzLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTYxNC1cdFx0IGJvb2wgKmNoYW5nZWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTc1MD1zdGF0aWMgaW5saW5lIGludCBicl92bGFuX2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3NTQtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNzU1OnN0YXRpYyBpbmxpbmUgaW50IG5icF92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzU2LVx0XHRcdCAgICAgICBib29sICpjaGFuZ2VkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTI1Nz1pbnQgbmJwX3ZsYW5faW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTMxNC0gKi9cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEzMTU6aW50IG5icF92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzE2LVx0XHQgYm9vbCAqY2hhbmdlZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzExOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBpbiB0aGUgbWlkZGxlIG9mIHRoaXMgYXNzZXNzbWVudDoKCioqQW5hbHl6aW5nIER5bmFtaWMgQmVoYXZpb3IqKgoKUmlnaHQsIHNvIHRoZSBzdWJqZWN0IGlzIGNsZWFybHkgaW5kaWNhdGluZyBzb21lIGZvcm0gb2Ygbm9uLXN0YXRpYyBiZWhhdmlvci4gVGhhdCYjMzk7cyB0aGUga2V5IHRha2Vhd2F5LiBOb3csIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBzdGF0aWMsIHdoYXQgYXJlIHRoZSBuZXh0IHN0ZXBzIHRvIGFzc2Vzcz8KClRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdG8gcXVpY2tseSBpbnZlc3RpZ2F0ZSBgYnJfYm9vbG9wdF90b2dnbGVgLiBJdCYjMzk7cyBhIHByaW1lIHN1c3BlY3QgZm9yIGNvbnRyb2xsaW5nIG9yIGluZmx1ZW5jaW5nIHRoZSBkeW5hbWljIHN0YXRlIG9mIHRoaXMgYXNwZWN0LiBUaW1lIHRvIGRpZyBpbiB0aGVyZSBhbmQgc2VlIGlmIGl0JiMzOTtzIHRoZSByaWdodCBmb2N1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGJyX2Jvb2xvcHRfdG9nZ2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9ici5jPTI2OD1icl90b2dnbGVfZmRiX2xvY2FsX3ZsYW5fMChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9ici5jLTI5My0gKi9cbm5ldC9icmlkZ2UvYnIuYzoyOTQ6aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcbm5ldC9icmlkZ2UvYnIuYy0yOTUtXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD03Njg9c3RhdGljIGlubGluZSBpbnQgYnJfb3B0X2dldChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzczLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6Nzc0OmludCBicl9ib29sb3B0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGVudW0gYnJfYm9vbG9wdF9pZCBvcHQsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC03NzUtXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTU3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTm9uLVN0YXRpYyBDb25zaWRlcmF0aW9ucyAmYW1wOyBWTEFOIEZpbHRlcmluZyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIHNvbWV0aGluZyAqbm9uLXN0YXRpYyouIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCB3aXRoIHRoYXQgZXN0YWJsaXNoZWQsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBzcGVjaWZpYyBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uOiBgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlYC4gVGhpcyBmdW5jdGlvbiBpcyBwaXZvdGFsIGluIHVuZGVyc3RhbmRpbmcgaG93IFZMQU4gZmlsdGVyaW5nIGJlaGF2ZXMgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyB0aGUgbHluY2hwaW4sIHRoZSBjb250cm9sIHBvaW50Li4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgbWFuaXB1bGF0ZWQsIG9yIGhvdyB0aGUgY29uZGl0aW9ucyBhcm91bmQgaXQgYXJlIGNoYW5naW5nLCBhcyB0aGF0IGluZm9ybXMgZXZlcnl0aGluZy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1OTk9dm9pZCBicl9yZWNhbGN1bGF0ZV9md2RfbWFzayhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTYwMDppbnQgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjAxLVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNzg4PXN0YXRpYyBpbmxpbmUgdTE2IGJyX2dldF9wdmlkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3OTItXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNzkzOnN0YXRpYyBpbmxpbmUgaW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzk0LVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIHZhbCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04ODQ9dm9pZCBicl9yZWNhbGN1bGF0ZV9md2RfbWFzayhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtODkzLVxubmV0L2JyaWRnZS9icl92bGFuLmM6ODk0OmludCBicl92bGFuX2ZpbHRlcl90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTg5NS1cdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxMDAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqTm9uLVN0YXRpYyBDb250ZXh0IGFuZCBPcHRpb24gUHJvY2Vzc2luZyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbm9uLXN0YXRpYyBoZXJlLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSB3b3JrIHRocm91Z2ggdGhpcy4gTm9uLXN0YXRpYyBpbXBsaWVzIGEgZmV3IHRoaW5ncyByaWdodCBvZmYgdGhlIGJhdCDigJMgcG90ZW50aWFsbHkgbXV0YWJsZSBzdGF0ZSwgcG9zc2libGUgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLCBhbmQgbGlrZWx5IHNvbWUgZHluYW1pYyBhbGxvY2F0aW9uLiBHb29kIHRvIGVzdGFibGlzaCB0aGF0IGZvdW5kYXRpb25hbCBmYWN0IGJlZm9yZSBkaXZpbmcgZGVlcGVyLgoKTm93LCBsZXQmIzM5O3Mgem9vbSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zYCBmdW5jdGlvbi4gVGhpcyBzZWVtcyBsaWtlIHRoZSBjcml0aWNhbCBwaWVjZSB0byB1bmRlcnN0YW5kLiBJdCYjMzk7cyBwcm9iYWJseSB3aGVyZSB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFZMQU4gcm91dGluZyBhcmUgcHJvY2Vzc2VkLiBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhpcyBmdW5jdGlvbiBjYXJlZnVsbHkgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCBoYW5kbGVzIHRob3NlIG5vbi1zdGF0aWMgYXNwZWN0cyB3ZSBqdXN0IGlkZW50aWZpZWQuIExldCYjMzk7cyBzZWUgaG93IGl0IHByb2Nlc3NlcyB0aG9zZSBnbG9iYWwgc2V0dGluZ3MgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIGZvciB0aGUgc3lzdGVtIG92ZXJhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTkwMj1pbnQgYnJfdmxhbl9wcm9jZXNzX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5MDctXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTA4OmludCBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTA5LVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz02Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJyX3ZsYW5fZGJfZ3BvbFtCUklER0VfVkxBTkRCX0dPUFRTX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTY4NC1cbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6Njg1OmludCBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTY4Ni1cdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY0OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFzc2Vzc21lbnQgb2YgdGhlIFJlbGV2YW50IENvZGUgUGF0aHMqKgoKT2theSwgbm9uLXN0YXRpYywgZ290IGl0LiBMZXQgbWUganVzdCBsYXkgb3V0IHRoZSBmb2N1cyBzeW1ib2xzIGFnYWluIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRyYWNrOiBgYnJfdmxhbl9hZGRgLCBgYnJfdmxhbl9kZWxldGVgLCBgbmJwX3ZsYW5fYWRkYCwgYG5icF92bGFuX2RlbGV0ZWAsIGBicl9ib29sb3B0X3RvZ2dsZWAsIGBicl92bGFuX2ZpbHRlcl90b2dnbGVgLCBhbmQgYGJyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnNgLgoKTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHBvdGVudGlhbCBlbnRyeSBwb2ludHMgdG8gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLiBJIGtub3cgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbmAsIGJ1dCBJIHRyYWNlZCB0aGF0IG9uZSBiZWZvcmUuIEFuZCBpdCBzZWVtcyB0aGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuYCwgYm90aCBvZiB3aGljaCBJICpkaWQqIHRyYWNlLgoKQWxyaWdodCwgd2hhdCBlbHNlIGNvdWxkIGJlIGNhbGxpbmcgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gPyBTY2FubmluZyB0aGUgYGJyX3ZsYW4uY2AgZmlsZSwgSSBzZWUgYGJyX3ZsYW5fcHV0X21hc3RlcmAsIGBfX3ZsYW5fYWRkYCwgYF9fdmxhbl9kZWxgLCBhbmQgYGJyX3ZsYW5fYWRkX2V4aXN0aW5nYC4gSSBiZWxpZXZlIEkmIzM5O3ZlIGFscmVhZHkgZXhhbWluZWQgdGhvc2UgYXMgd2VsbCwgc28gdGhhdCBzaG91bGRuJiMzOTt0IGJlIGEgcHJvYmxlbS4KCkhvbGQgb24gYSBzZWNvbmQuLi4gaXMgdGhhdCByaWdodD8gIGBfX3ZsYW5fYWRkYCBpcyAqYWxzbyogY2FsbGVkIGZyb20gYGJyX3ZsYW5faW5pdGAgYW5kIGBuYnBfdmxhbl9pbml0YD8gT2theSwgdGhhdCYjMzk7cyBhIGZyZXNoIGFuZ2xlLCBhbmQgdGhvc2UgYXJlIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZ2l2ZW4gdGhlaXIgaW5pdGlhbGl6YXRpb24gY29udGV4dHMuIExldCYjMzk7cyBkZWx2ZSBpbnRvIGBicl92bGFuX2luaXRgIGFuZCBgbmJwX3ZsYW5faW5pdGAgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3ZsYW5fYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmM9MzI9c3RhdGljIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKmJyX3ZsYW5fbG9va3VwKHN0cnVjdCByaGFzaHRhYmxlICp0YmwsIHUxNiB2aWQpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzYtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNzpzdGF0aWMgdm9pZCBfX3ZsYW5fYWRkX3B2aWQoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zOC1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz02MT1zdGF0aWMgYm9vbCBfX3ZsYW5fZmxhZ3NfdXBkYXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03OS1cdGlmIChmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19QVklEKVxubmV0L2JyaWRnZS9icl92bGFuLmM6ODA6XHRcdF9fdmxhbl9hZGRfcHZpZCh2Zywgdik7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04MS1cdGVsc2Vcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMDM9c3RhdGljIGludCBfX3ZsYW5fdmlkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTIzLVxubmV0L2JyaWRnZS9icl92bGFuLmM6MTI0OnN0YXRpYyB2b2lkIF9fdmxhbl9hZGRfbGlzdChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTI1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMzQ9c3RhdGljIHZvaWQgYnJfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMjYyLSAqL1xubmV0L2JyaWRnZS9icl92bGFuLmM6MjYzOnN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yNjQtXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zNTYtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTc6XHRfX3ZsYW5fYWRkX2xpc3Qodik7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zNTgtXHRfX3ZsYW5fZmxhZ3NfY29tbWl0KHYsIGZsYWdzKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz03Nzk9aW50IGJyX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZCwgdTE2IGZsYWdzLCBib29sICpjaGFuZ2VkLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTgwOS1cdFx0cmVmY291bnRfc2V0KFx1MDAyNnZsYW4tXHUwMDNlcmVmY250LCAxKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjgxMDpcdHJldCA9IF9fdmxhbl9hZGQodmxhbiwgZmxhZ3MsIGV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04MTEtXHRpZiAocmV0KSB7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTMxNT1pbnQgbmJwX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQsIHUxNiBmbGFncyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzQ3LVx0dmxhbi1cdTAwM2Vwb3J0ID0gcG9ydDtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEzNDg6XHRyZXQgPSBfX3ZsYW5fYWRkKHZsYW4sIGZsYWdzLCBleHRhY2spO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMTM0OS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjU1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBWTEFOIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBWTEFOcyBhcmUgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBicl92bGFuX2luaXRgIGFuZCBgbmJwX3ZsYW5faW5pdGAuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGRvbiYjMzk7dCBkaXJlY3RseSBjYWxsIGBfX3ZsYW5fYWRkYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGludHVpdGlvbiwgYmFzZWQgb24gcGFzdCBleHBlcmllbmNlIHdpdGggdGhpcyB0eXBlIG9mIHN5c3RlbSBhcmNoaXRlY3R1cmUsIGlzIHRoYXQgdGhleSYjMzk7bGwgbGlrZWx5IGNhbGwgc29tZXRoaW5nIGxpa2UgYGJyX3ZsYW5fYWRkYCBvciBgbmJwX3ZsYW5fYWRkYCBpbnRlcm5hbGx5LiBUbyBjb25maXJtIHRoaXMgYW5kIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBJIHJlYWxseSBzaG91bGQgZXhhbWluZSBgYnJfdmxhbl9pbml0YCBtb3JlIGNsb3NlbHkuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfdmxhbl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNjc9YnJfdmxhbl9nZXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzgtXHRcdC8qIG1pc3NpbmcgZ2xvYmFsIGN0eCwgY3JlYXRlIGl0IG5vdyAqL1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTc5Olx0XHRpZiAoYnJfdmxhbl9hZGQoYnIsIHZpZCwgMCwgXHUwMDI2Y2hhbmdlZCwgZXh0YWNrKSlcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE4MC1cdFx0XHRyZXR1cm4gTlVMTDtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yNjM9c3RhdGljIGludCBfX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yOTYtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyOTc6XHRcdFx0ZXJyID0gYnJfdmxhbl9hZGQoYnIsIHYtXHUwMDNldmlkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjk4LVx0XHRcdFx0XHQgIGZsYWdzIHwgQlJJREdFX1ZMQU5fSU5GT19CUkVOVFJZLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTY4Nj1ib29sIGJyX3Nob3VsZF9sZWFybihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZpZClcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03MTgtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3MTk6c3RhdGljIGludCBicl92bGFuX2FkZF9leGlzdGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03MjAtXHRcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NzgtICovXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3Nzk6aW50IGJyX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZCwgdTE2IGZsYWdzLCBib29sICpjaGFuZ2VkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzgwLVx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNzkxLVx0aWYgKHZsYW4pXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3OTI6XHRcdHJldHVybiBicl92bGFuX2FkZF9leGlzdGluZyhiciwgdmcsIHZsYW4sIGZsYWdzLCBjaGFuZ2VkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzkzLVx0XHRcdFx0XHQgICAgZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMTAyPWludCBfX2JyX3ZsYW5fc2V0X2RlZmF1bHRfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiBwdmlkLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExMzAtXHQgICAgKCFwdmVudCB8fCAhYnJfdmxhbl9zaG91bGRfdXNlKHB2ZW50KSkpIHtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExMzE6XHRcdGVyciA9IGJyX3ZsYW5fYWRkKGJyLCBwdmlkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTEzMi1cdFx0XHRcdCAgQlJJREdFX1ZMQU5fSU5GT19QVklEIHxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTkwLVx0XHRpZiAob2xkX3B2aWQpIHtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExOTE6XHRcdFx0YnJfdmxhbl9hZGQoYnIsIG9sZF9wdmlkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE5Mi1cdFx0XHRcdCAgICBCUklER0VfVkxBTl9JTkZPX1BWSUQgfFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE3NDc9aW50IGJyX3ZsYW5fYnJpZGdlX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzU1LVx0Y2FzZSBORVRERVZfUkVHSVNURVI6XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxNzU2Olx0XHRyZXQgPSBicl92bGFuX2FkZChiciwgYnItXHUwMDNlZGVmYXVsdF9wdmlkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTc1Ny1cdFx0XHRcdCAgQlJJREdFX1ZMQU5fSU5GT19QVklEIHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0MjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqVkxBTiBUYWdnaW5nICZhbXA7IEJyaWRnZSBFdmVudCBDb250ZXh0KioKCk9rYXksIHNvIGBicl92bGFuX2FkZGAgaXMgYSBrZXkgZnVuY3Rpb24sIGFuZCBJJiMzOTttIHNlZWluZyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBhIGNvdXBsZSBvZiBvdGhlciBwbGFjZXM6IGBfX2JyX3ZsYW5fc2V0X2RlZmF1bHRfcHZpZGAgYW5kIGBicl92bGFuX2JyaWRnZV9ldmVudGAuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSW1wb3J0YW50bHksIGJvdGggb2YgdGhvc2UgY2FsbGluZyBmdW5jdGlvbnMsIGBfX2JyX3ZsYW5fc2V0X2RlZmF1bHRfcHZpZGAgYW5kIGBicl92bGFuX2JyaWRnZV9ldmVudGAsIGFyZSAqbm90KiBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBsaWtlbHkgbWVhbnMgdGhleSYjMzk7cmUgaW50ZW5kZWQgdG8gYmUgY2FsbGFibGUgZnJvbSBlbHNld2hlcmUgaW4gdGhlIHN5c3RlbSwgcG90ZW50aWFsbHkgYnkgb3RoZXIgbW9kdWxlcy4gYGJyX3ZsYW5fYWRkYCBpcywgdGhlcmVmb3JlLCBhIGNlbnRyYWwgcGllY2UgdGhhdCYjMzk7cyBleHBvc2VkIHRvIG11bHRpcGxlIHBvaW50cyBvZiB0aGUgc3lzdGVtLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGEgYml0LCBJIHdhbnQgdG8gY2hlY2sgaG93IGBuYnBfdmxhbl9hZGRgIHRpZXMgaW50byBhbGwgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJwX3ZsYW5fYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmM9MTEwMj1pbnQgX19icl92bGFuX3NldF9kZWZhdWx0X3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgcHZpZCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTU0LVxubmV0L2JyaWRnZS9icl92bGFuLmM6MTE1NTpcdFx0ZXJyID0gbmJwX3ZsYW5fYWRkKHAsIHB2aWQsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTU2LVx0XHRcdFx0ICAgQlJJREdFX1ZMQU5fSU5GT19QVklEIHxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTc4LVx0XHRpZiAob2xkX3B2aWQpIHtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExNzk6XHRcdFx0bmJwX3ZsYW5fYWRkKHAsIG9sZF9wdmlkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE4MC1cdFx0XHRcdCAgICAgQlJJREdFX1ZMQU5fSU5GT19QVklEIHxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMjU3PWludCBuYnBfdmxhbl9pbml0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjg2LVxubmV0L2JyaWRnZS9icl92bGFuLmM6MTI4NzpcdFx0cmV0ID0gbmJwX3ZsYW5fYWRkKHAsIHAtXHUwMDNlYnItXHUwMDNlZGVmYXVsdF9wdmlkLFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTI4OC1cdFx0XHRcdCAgIEJSSURHRV9WTEFOX0lORk9fUFZJRCB8XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTMxNC0gKi9cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEzMTU6aW50IG5icF92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzE2LVx0XHQgYm9vbCAqY2hhbmdlZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIyMwoJCQkJCQkJb3V0cHV0OiAyMTgKCQkJCQkJCXRob3VnaHRzOiA3ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBCcmlkZ2UgTXVsdGljYXN0IGFuZCBWTEFOIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBoYXZlIGEgY2xlYXIgZnV6emluZyBzdHJhdGVneSBmb3JtaW5nLiAgYG5icF92bGFuX2FkZGAgaXMgdGhlIGtleSDigJMgaXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgbmJwX3ZsYW5faW5pdGAgYW5kIGBfX2JyX3ZsYW5fc2V0X2RlZmF1bHRfcHZpZGAsIHdoaWNoIGdpdmVzIG1lIGdvb2QgaW5pdGlhbCBlbnRyeSBwb2ludHMuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgVkxBTiBhbmQgYnJpZGdlIG1hbmlwdWxhdGlvbi4KClNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgdGFyZ2V0aW5nIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseTogYGJyX3ZsYW5fYWRkYCwgYGJyX3ZsYW5fZGVsZXRlYCwgYG5icF92bGFuX2FkZGAsIGBuYnBfdmxhbl9kZWxldGVgLCBgYnJfYm9vbG9wdF90b2dnbGVgLCBgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlYCwgYW5kIGBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zYCwgIGFuZCBgX19icl92bGFuX3NldF9kZWZhdWx0X3B2aWRgLiBUaGVzZSBhcmUgYWxsIGV4Y2VsbGVudCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIFRoZXNlIGVudHJ5IHBvaW50cyBzaG91bGQgYWRlcXVhdGVseSBjb3ZlciB0aGUgbG9naWMgY2hhbmdlIGZyb20gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLiBUaGUgY2hhbmdlcyB0byBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgYWx0ZXIgdGhlIGVhcmx5IHJldHVybiBsb2dpYy4gIFRoZSBwYXRjaCBtb2RpZmllcyBhIGNvbmRpdGlvbiwgc28gaXQmIzM5O3MgYSBnb29kIHRhcmdldC4KClRoZSBjaGFuZ2UgaW4gdGhlIHBhdGNoIGVzc2VudGlhbGx5IHJlbW92ZXMgYW4gZWFybHkgcmV0dXJuIGluIGNlcnRhaW4gY2FzZXMsIHdoaWNoIGFsdGVycyB0aGUgbXVsdGljYXN0L1ZMQU4gYmVoYXZpb3IuIFRoaXMgaXMgY2xlYXJseSByZWFjaGFibGUgdmlhIG5ldGxpbmsgYW5kIGlvY3RsIGZyb20gdXNlcnNwYWNlLCBtYWtpbmcgaXQgYSB2aWFibGUgZnV6emluZyB0YXJnZXQuICBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkOiBgQlJJREdFYCwgYElORVRgLCBgVkxBTl84MDIxUWAsIGBCUklER0VfSUdNUF9TTk9PUElOR2AsIGFuZCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4KCkkmIzM5O3ZlIGFscmVhZHkgbG9va2VkIGF0IHRoZSBjYWxsZXJzIG9mIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBhbmQsIGFzIGV4cGVjdGVkLCB0aGV5JiMzOTtyZSBjb3ZlcmVkIGJ5IG15IGNob3NlbiBlbnRyeSBwb2ludHMgKGBicl92bGFuX3B1dF9tYXN0ZXJgLCBgX192bGFuX2FkZGAsIGBfX3ZsYW5fZGVsYCwgYGJyX3ZsYW5fYWRkX2V4aXN0aW5nYCwgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbmApLiBJIG5lZWQgdG8gYmUgZWZmaWNpZW50LCBzbyBJIHdpbGwgcHJpb3JpdGl6ZSB0aGlzIHNtYWxsZXIgc3Vic2V0IG9mIGZvY3VzIHN5bWJvbHMgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX3ZsYW5fYWRkJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fZGVsZXRlJiMzNDssCiAgICAmIzM0O25icF92bGFuX2FkZCYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfYm9vbG9wdF90b2dnbGUmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9maWx0ZXJfdG9nZ2xlJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVhcmx5IHJldHVybiBjb25kaXRpb24gaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdpdGhpbiB0aGUgYnJpZGdlIG11bHRpY2FzdCBhbmQgVkxBTiBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGhvdyBWTEFOIG11bHRpY2FzdCBjb250ZXh0cyBhcmUgdG9nZ2xlZCB3aGVuIGBvbmAgaXMgZmFsc2UuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgaW9jdGwgd2hlbiBjb25maWd1cmluZyBicmlkZ2UgVkxBTnMgYW5kIG11bHRpY2FzdCBzbm9vcGluZyBvcHRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX3ZsYW5fYWRkJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fZGVsZXRlJiMzNDssCiAgICAmIzM0O25icF92bGFuX2FkZCYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfYm9vbG9wdF90b2dnbGUmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9maWx0ZXJfdG9nZ2xlJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVhcmx5IHJldHVybiBjb25kaXRpb24gaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdpdGhpbiB0aGUgYnJpZGdlIG11bHRpY2FzdCBhbmQgVkxBTiBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGhvdyBWTEFOIG11bHRpY2FzdCBjb250ZXh0cyBhcmUgdG9nZ2xlZCB3aGVuIGBvbmAgaXMgZmFsc2UuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgaW9jdGwgd2hlbiBjb25maWd1cmluZyBicmlkZ2UgVkxBTnMgYW5kIG11bHRpY2FzdCBzbm9vcGluZyBvcHRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCB3aGVyZSBkaXNhYmxpbmcgbXVsdGljYXN0IG9uIGEgVkxBTiB0aGF0IGlzIG5vdCBhIGJyaWRnZSBlbnRyeSB3b3VsZCBmYWlsIGR1ZSB0byBhbiBpbmNvcnJlY3QgZWFybHkgcmV0dXJuIGNvbmRpdGlvbi4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBzdGF0ZSBtYW5hZ2VtZW50LCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgbG9naWMgY2hhbmdlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiYWIxYzMwYjZiMGE5ZTdmNTFhYWQ0OGMwNzRmNGVmMmU2ZTE1NzMwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMDk6MzU6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwppbmRleCA3NWUxZTJhOGZjODNhLi4zZWY1ZDhiYmY1NTJlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKQEAgLTQzNzcsOCAmIzQzOzQzNzcsOCBAQCB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbikKIAlpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHsKIAkJYnIgPSB2bGFuLSZndDticjsKIAotCQlpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fAotCQkgICAgKG9uICZhbXA7JmFtcDsKJiM0MzsJCWlmIChvbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHwKIAkJICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKCZhbXA7dmxhbi0mZ3Q7YnJfbWNhc3RfY3R4KSkpCiAJCQlyZXR1cm47CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQnJpZGdlIE11bHRpY2FzdCBUb2dnbGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQmIzM5O3MgYSBjb25kaXRpb25hbCBsb2dpYyBhZGp1c3RtZW50IHdpdGhpbiBhbiBgaWZgIHN0YXRlbWVudC4gVGhlIGRpZmYgc2hvd3MgdGhlIGNoYW5nZTogYSBzbGlnaHQgcmVvcmRlcmluZyBvZiB0aGUgYm9vbGVhbiBsb2dpYy4gQmVmb3JlLCB0aGUgcmV0dXJuIGNvbmRpdGlvbiB3YXMgYmFzZWQgb24gYCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHwgKG9uICZhbXA7JmFtcDsgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZCgmYW1wO3ZsYW4tJmd0O2JyX21jYXN0X2N0eCkpYC4gTm93LCBpdCYjMzk7cyBgb24gJmFtcDsmYW1wOyAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fCBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKCZhbXA7dmxhbi0mZ3Q7YnJfbWNhc3RfY3R4KSlgLgoKRXNzZW50aWFsbHksIHRoaXMgYWx0ZXJzIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgZWFybHkuIEl0IHNlZW1zIHRoYXQgaWYgdGhlIGBvbmAgZmxhZyBpcyBub3cgZmFsc2UsIHRoZSBmdW5jdGlvbiBkb2VzbiYjMzk7dCBiYWlsIG91dCBpZiBgIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAgaXMgdHJ1ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIGJ1ZyDigJMgcGVyaGFwcyBhIG1lbW9yeSBsZWFrLCBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBvciBzaW1wbHkgYW4gaW5jb3JyZWN0IHN0YXRlIG1hbmFnZW1lbnQgaXNzdWUgd2l0aGluIHRoZSBicmlkZ2UgbXVsdGljYXN0IGNvbnRleHQuIEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IHNlZWluZyBhbnl0aGluZyBzdWdnZXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpdCYjMzk7cyBtb3JlIGFib3V0IGhvdyB0aGUgZnVuY3Rpb24mIzM5O3MgZXhlY3V0aW9uIGZsb3cgaXMgY29udHJvbGxlZCBieSB0aGF0IGBvbmAgZmxhZy4gQ2xlYXJseSwgc29tZXRoaW5nIHdhc24mIzM5O3Qgd29ya2luZyBjb3JyZWN0bHksIGFuZCB0aGlzIHNtYWxsIGNoYW5nZSBsaWtlbHkgZml4ZXMgdGhhdCwgbGlrZWx5IHdpdGggc29tZSBzb3J0IG9mIHN0YXRlIGlzc3VlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGFjdHVhbGx5IGRvZXMgdG8gcHJvcGVybHkgZXZhbHVhdGUgdGhpcyBwYXRjaCYjMzk7cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM0MD12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzY2OnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MTE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDIzLVx0XHRcdGNvbnRpbnVlO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI0Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjUtXHR9XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI3LVx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQyODpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTY5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIG1lbnRhbCBzdGVwczoKCioqRGl2aW5nIGludG8gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGFjdHVhbGx5ICpkb2VzKi4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQsIGFzIGFsd2F5cywgaXMgdG8ganVzdCAqcmVhZCB0aGUgY29kZSouIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpdHNlbGYgdG8gZ2V0IHRoZSBnaXN0IG9mIGl0cyBvcGVyYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGlucHV0IHBhcmFtZXRlcnMsIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgYW55IGNhbGxzIHRvIG90aGVyIGZ1bmN0aW9ucyBvciBsaWJyYXJpZXMgdGhhdCBtaWdodCBwcm92aWRlIGNsdWVzIGFib3V0IHRoZSB0YXNrIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGFjY29tcGxpc2guIEkmIzM5O2xsIGJlIHBheWluZyBhdHRlbnRpb24gdG8gaG93IGl0IGhhbmRsZXMgZWRnZSBjYXNlcyBvciBlcnJvciBjb25kaXRpb25zLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBmb3JtaW5nIGEgbWVudGFsIG1vZGVsIG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGJ5IGZvbGxvd2luZyB0aGUgZXhlY3V0aW9uIGZsb3cuIEZyb20gdGhlcmUgSSYjMzk7bGwgc3RhcnQgZm9ybXVsYXRpbmcgYW4gb3BpbmlvbiBvbiB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2Vybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzY2Olx0dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG40MzY3Olx0e1xuNDM2ODpcdFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xuNDM2OTpcdFxuNDM3MDpcdFx0LyogaXQmIzM5O3Mgb2theSB0byBjaGVjayBmb3IgdGhlIGZsYWcgd2l0aG91dCB0aGUgbXVsdGljYXN0IGxvY2sgYmVjYXVzZSBpdFxuNDM3MTpcdFx0ICogY2FuIG9ubHkgY2hhbmdlIHVuZGVyIFJUTkwgLVx1MDAzZSBtdWx0aWNhc3RfbG9jaywgd2UgbmVlZCB0aGUgbGF0dGVyIHRvXG40MzcyOlx0XHQgKiBzeW5jIHdpdGggdGltZXJzIGFuZCBwYWNrZXRzXG40MzczOlx0XHQgKi9cbjQzNzQ6XHRcdGlmIChvbiA9PSAhISh2bGFuLVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEKSlcbjQzNzU6XHRcdFx0cmV0dXJuO1xuNDM3NjpcdFxuNDM3NzpcdFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHZsYW4pKSB7XG40Mzc4Olx0XHRcdGJyID0gdmxhbi1cdTAwM2VicjtcbjQzNzk6XHRcbjQzODA6XHRcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNlxuNDM4MTpcdFx0XHQgICAgKCFicl92bGFuX2lzX2JyZW50cnkodmxhbikgfHxcbjQzODI6XHRcdFx0ICAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKFx1MDAyNnZsYW4tXHUwMDNlYnJfbWNhc3RfY3R4KSkpXG40MzgzOlx0XHRcdFx0cmV0dXJuO1xuNDM4NDpcdFxuNDM4NTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuNDM4NjpcdFx0XHR2bGFuLVx1MDAzZXByaXZfZmxhZ3MgXj0gQlJfVkxGTEFHX01DQVNUX0VOQUJMRUQ7XG40Mzg3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjQzODg6XHRcbjQzODk6XHRcdFx0aWYgKG9uKVxuNDM5MDpcdFx0XHRcdF9fYnJfbXVsdGljYXN0X29wZW4oXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpO1xuNDM5MTpcdFx0XHRlbHNlXG40MzkyOlx0XHRcdFx0X19icl9tdWx0aWNhc3Rfc3RvcChcdTAwMjZ2bGFuLVx1MDAzZWJyX21jYXN0X2N0eCk7XG40MzkzOlx0XHR9IGVsc2Uge1xuNDM5NDpcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4O1xuNDM5NTpcdFxuNDM5NjpcdFx0XHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbjQzOTc6XHRcdFx0aWYgKG9uIFx1MDAyNlx1MDAyNiBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKGJybWN0eCkpXG40Mzk4Olx0XHRcdFx0cmV0dXJuO1xuNDM5OTpcdFxuNDQwMDpcdFx0XHRiciA9IHZsYW4tXHUwMDNlcG9ydC1cdTAwM2VicjtcbjQ0MDE6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbjQ0MDI6XHRcdFx0dmxhbi1cdTAwM2Vwcml2X2ZsYWdzIF49IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEO1xuNDQwMzpcdFx0XHRpZiAob24pXG40NDA0Olx0XHRcdFx0X19icl9tdWx0aWNhc3RfZW5hYmxlX3BvcnRfY3R4KFx1MDAyNnZsYW4tXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuNDQwNTpcdFx0XHRlbHNlXG40NDA2Olx0XHRcdFx0X19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcbjQ0MDc6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xuNDQwODpcdFx0fVxuNDQwOTpcdH1cbjQ0MTA6XHRcbjQ0MTE6XHRzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbjQ0MTI6XHR7XG40NDEzOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuNDQxNDpcdFxuNDQxNTpcdFx0aWYgKFdBUk5fT05fT05DRSghYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjY1CgkJCQkJCQlvdXRwdXQ6IDEzNQoJCQkJCQkJdGhvdWdodHM6IDI0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCdWcgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBlcnJvciBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHByZW1hdHVyZSByZXR1cm4gd2hlbiB0cnlpbmcgdG8gZGlzYWJsZSBtdWx0aWNhc3Qgb24gYSBWTEFOIHRoYXQgd2FzbiYjMzk7dCBhIGJyaWRnZSBlbnRyeSAoYCFicl92bGFuX2lzX2JyZW50cnkodmxhbilgIGFuZCBgb25gIGlzIGZhbHNlKS4gQmFzaWNhbGx5LCBpdCB3YXMgYmFpbGluZyBvdXQgdG9vIGVhcmx5LCBhbmQgdGhhdCYjMzk7cyB0aGUgcHJvYmxlbS4KClRoaXMgY291bGQgcmVzdWx0IGluIGEgZmV3IG5hc3R5IG91dGNvbWVzOiBpbmNvcnJlY3Qgc3RhdGUsIHBvc3NpYmxlIG1lbW9yeSBsZWFrcyAoYmVjYXVzZSByZXNvdXJjZXMgbWlnaHQgbm90IGJlIHByb3Blcmx5IGNsZWFuZWQgdXApLCBvciwgZXZlbiB3b3JzZSwgdXNlLWFmdGVyLWZyZWUgYnVncyBpZiBzb21lIGNvbXBvbmVudCBzdWJzZXF1ZW50bHkgdHJpZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgaW5jb3JyZWN0bHkgbWFuYWdlZCBWTEFOLgoKSG93ZXZlciwgYWZ0ZXIgYSBjbG9zZXIgbG9vaywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBkb2VzbiYjMzk7dCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UgYXJlbiYjMzk7dCBpbnRyb2R1Y2luZyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG9yIGNvbXBsZXggbWVtb3J5IGFsbG9jYXRpb25zIHRoYXQgd291bGQgd2FycmFudCBhIGRlZXAgZGl2ZSB3aXRoIEtNU0FOLiBLQVNBTiBhbmQgc3RhbmRhcmQgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIHNob3VsZCBhYnNvbHV0ZWx5IGJlIHN1ZmZpY2llbnQgdG8gZmxhZyBhbnkgcHJvYmxlbXMgdGhhdCBhcmlzZSBmcm9tIHRoaXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgbG9naWNhbCBjb250cm9sLWZsb3cgZXJyb3IsIG5vdCBhIGRhdGEtaW5pdGlhbGl6YXRpb24gcHJvYmxlbS4gTm8gbmVlZCB0byBicmluZyBvdXQgdGhlIGJpZyBndW5zIGhlcmU7IHN0YW5kYXJkIGJ1Zy1kZXRlY3RvcnMgc2hvdWxkIGJlIGZpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCB3aGVyZSBkaXNhYmxpbmcgbXVsdGljYXN0IG9uIGEgVkxBTiB0aGF0IGlzIG5vdCBhIGJyaWRnZSBlbnRyeSB3b3VsZCBmYWlsIGR1ZSB0byBhbiBpbmNvcnJlY3QgZWFybHkgcmV0dXJuIGNvbmRpdGlvbi4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBzdGF0ZSBtYW5hZ2VtZW50LCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgbG9naWMgY2hhbmdlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBWTEFOIHRoYXQgaXMgbm90IGEgYnJpZGdlIGVudHJ5IHdvdWxkIGZhaWwgZHVlIHRvIGFuIGluY29ycmVjdCBlYXJseSByZXR1cm4gY29uZGl0aW9uLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHN0YXRlIG1hbmFnZW1lbnQsIG1lbW9yeSBsZWFrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBsb2dpYyBjaGFuZ2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM1OjM3Ljg4NTE4ODIzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzE0ODk4MTQ2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfdmxhbl9hZGRcIixcbiAgICBcImJyX3ZsYW5fZGVsZXRlXCIsXG4gICAgXCJuYnBfdmxhbl9hZGRcIixcbiAgICBcIm5icF92bGFuX2RlbGV0ZVwiLFxuICAgIFwiYnJfYm9vbG9wdF90b2dnbGVcIixcbiAgICBcImJyX3ZsYW5fZmlsdGVyX3RvZ2dsZVwiLFxuICAgIFwiYnJfdmxhbl9ydG1fcHJvY2Vzc19nbG9iYWxfb3B0aW9uc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBWTEFOIHRoYXQgaXMgbm90IGEgYnJpZGdlIGVudHJ5IHdvdWxkIGZhaWwgZHVlIHRvIGFuIGluY29ycmVjdCBlYXJseSByZXR1cm4gY29uZGl0aW9uLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHN0YXRlIG1hbmFnZW1lbnQsIG1lbW9yeSBsZWFrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBsb2dpYyBjaGFuZ2UuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVhcmx5IHJldHVybiBjb25kaXRpb24gaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdpdGhpbiB0aGUgYnJpZGdlIG11bHRpY2FzdCBhbmQgVkxBTiBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGhvdyBWTEFOIG11bHRpY2FzdCBjb250ZXh0cyBhcmUgdG9nZ2xlZCB3aGVuIGBvbmAgaXMgZmFsc2UuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgaW9jdGwgd2hlbiBjb25maWd1cmluZyBicmlkZ2UgVkxBTnMgYW5kIG11bHRpY2FzdCBzbm9vcGluZyBvcHRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNTozNy44ODUxOTQyNjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NzAyMDY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJhYjFjMzBiNmIwYTllN2Y1MWFhZDQ4YzA3NGY0ZWYyZTZlMTU3MzBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDk6MzU6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcXG5pbmRleCA3NWUxZTJhOGZjODNhLi4zZWY1ZDhiYmY1NTJlIDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcXG4rKysgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXFxuQEAgLTQzNzcsOCArNDM3Nyw4IEBAIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbiBcXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHtcXG4gXFx0XFx0YnIgPSB2bGFuLVxcdTAwM2VicjtcXG4gXFxuLVxcdFxcdGlmICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8XFxuLVxcdFxcdCAgICAob24gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0aWYgKG9uIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxcbiBcXHRcXHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXFx1MDAyNnZsYW4tXFx1MDAzZWJyX21jYXN0X2N0eCkpKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNTozOC4yNzMwMTcxNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyOTQ1MTEzMTM3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfdmxhbl9hZGRcIixcbiAgICBcImJyX3ZsYW5fZGVsZXRlXCIsXG4gICAgXCJuYnBfdmxhbl9hZGRcIixcbiAgICBcIm5icF92bGFuX2RlbGV0ZVwiLFxuICAgIFwiYnJfYm9vbG9wdF90b2dnbGVcIixcbiAgICBcImJyX3ZsYW5fZmlsdGVyX3RvZ2dsZVwiLFxuICAgIFwiYnJfdmxhbl9ydG1fcHJvY2Vzc19nbG9iYWxfb3B0aW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlYXJseSByZXR1cm4gY29uZGl0aW9uIGluIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCB3aXRoaW4gdGhlIGJyaWRnZSBtdWx0aWNhc3QgYW5kIFZMQU4gbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBob3cgVkxBTiBtdWx0aWNhc3QgY29udGV4dHMgYXJlIHRvZ2dsZWQgd2hlbiBgb25gIGlzIGZhbHNlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgYW5kIGlvY3RsIHdoZW4gY29uZmlndXJpbmcgYnJpZGdlIFZMQU5zIGFuZCBtdWx0aWNhc3Qgc25vb3Bpbmcgb3B0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmFiMWMzMGI2YjBhOWU3ZjUxYWFkNDhjMDc0ZjRlZjJlNmUxNTczMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA5OjM1OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbmluZGV4IDc1ZTFlMmE4ZmM4M2EuLjNlZjVkOGJiZjU1MmUgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG5AQCAtNDM3Nyw4ICs0Mzc3LDggQEAgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4gXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHtcbiBcdFx0YnIgPSB2bGFuLVx1MDAzZWJyO1xuIFxuLVx0XHRpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuLVx0XHQgICAgKG9uIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAob24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuIFx0XHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKSlcbiBcdFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNTozOC4yNzMwMTg1MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMzk0NTQ1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCcmlkZ2UgTXVsdGljYXN0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgYXJlIHRhcmdldGluZyB0aGUgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGZ1bmN0aW9uLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhhdCBmdW5jdGlvbjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gYWx0ZXJlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhhdCBhcmVhIOKAkyB0aGUgY2FsbCBzaXRlcywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgZXZlcnl0aGluZy4gSSBuZWVkIHRoZSBmdWxsIGNvbnRleHQgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2Ugb24gbXVsdGljYXN0IGZvcndhcmRpbmcgd2l0aGluIHRoZSBicmlkZ2UuIFRoaXMgY291bGQgYmUgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgYnVnIGZpeCwgb3IgZXZlbiBhIG5ldyBmZWF0dXJlLiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MzU6NDYuNDEyNDc1Nzg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDYxNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzNDA9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2Njp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NDExPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDIzLVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQyNDpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI1LVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyNy1cXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQyODpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNTo0Ni40NjI1NDMyNDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTE1MTU0MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJyaWRnZSBNdWx0aWNhc3QgVG9nZ2xlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBjaGFuZ2UgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLiBUaGUgb2xkIGNvZGUgaGFkIHRoaXMgY29uZGl0aW9uYWwgcmV0dXJuIGJhc2VkIG9uIGAhYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pYCB3aGVuIGBvbmAgd2FzIGZhbHNlLiBCdXQgbm93LCB0aGF0IHBhcnQgb2YgdGhlIGxvZ2ljIGlzICpvbmx5KiBleGVjdXRlZCBpZiBgb25gIGlzICp0cnVlKi5cblxuVGhpcyBoYXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSWYgYG9uYCBpcyBmYWxzZSwgdGhpcyBtZWFucyB3ZSB3aWxsIG5vIGxvbmdlciByZXR1cm4gaWYgYGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAgaXMgZmFsc2UuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBjaGFuZ2VkLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBuZXcgYmVoYXZpb3VyLCBhbmQgdG8gZG8gdGhpcyBwcm9wZXJseSBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNhbGxzIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsZXJzIHRvIGRldGVybWluZSB0aGUgc2lkZS1lZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM1OjUyLjM3NzcwMDMzNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDIyNzI5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM0MD12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjUtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzY2OnZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Ny17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MTE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjMtXFx0XFx0XFx0Y29udGludWU7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI0OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odnBvcnQsIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjUtXFx0fVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI3LVxcdGlmIChicl92bGFuX2lzX2JyZW50cnkodmxhbikpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDI4OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odmxhbiwgb24pO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyOS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDczPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3NDp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3NS1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NTA9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTQtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1NTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTYtXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTIwMz1zdGF0aWMgdm9pZCBicl92bGFuX3B1dF9tYXN0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNC1cXHRcXHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MjE1OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNi1cXHRcXHRicl9tdWx0aWNhc3RfY3R4X2RlaW5pdChcXHUwMDI2bWFzdGVydi1cXHUwMDNlYnJfbWNhc3RfY3R4KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTI2Mz1zdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVxcdF9fdmxhbl9mbGFnc19jb21taXQodiwgZmxhZ3MpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjM1OTpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM2MC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM5MD1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQyNy1cXHRcXHRuYnBfdmxhbl9zZXRfdmxhbl9kZXZfc3RhdGUocCwgdi1cXHUwMDNldmlkKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0Mjg6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2LCBmYWxzZSk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtNDI5LVxcdFxcdGJyX211bHRpY2FzdF9wb3J0X2N0eF9kZWluaXQoXFx1MDAyNnYtXFx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTcxOT1zdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2MC1cXHRcXHQqY2hhbmdlZCA9IHRydWU7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6NzYxOlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odmxhbiwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzYyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MzU6NTIuNDI3OTM0NjQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0NTIxMDg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbioqXG5cbk9rYXksIHNvIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIGNhbiBzZWUgaXQncyBjYWxsZWQgZnJvbSBzZXZlcmFsIGtleSBicmlkZ2UgbXVsdGljYXN0IGFuZCBWTEFOIGZ1bmN0aW9uczogYGJyX3ZsYW5fcHV0X21hc3RlcmAsIGBfX3ZsYW5fYWRkYCwgYF9fdmxhbl9kZWxgLCBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbmAuIEdpdmVuIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIHRoaXMgaXMgZGVmaW5pdGVseSB3aXRoaW4gdGhlIHJlYWxtIG9mIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMg4oCTIHdlJ3JlIHRhbGtpbmcgaW1wb3J0YW50IHN0dWZmIGhlcmUuIEhpZ2ggcG90ZW50aWFsIGZvciBpbnRlcmVzdGluZyByZXN1bHRzLCBwb3RlbnRpYWxseSBjcml0aWNhbCBvbmVzLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIHNvdXJjZSBjb2RlIGlzIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCwgc28gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBtYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMg4oCTIGBuZXQvYnJpZGdlL01ha2VmaWxlYCBhbmQgYG5ldC9icmlkZ2UvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5LiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGJ1aWxkaW5nIGEgZnV6emluZyBjYW1wYWlnbiB0aGF0IGNhbiBhY3R1YWxseSBoaXQgdGhpcyB0YXJnZXQuIE5lZWQgdG8gaWRlbnRpZnkgd2hhdCBrZXJuZWwgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGFuZCBlbnN1cmUgdGhlIHJpZ2h0IG1vZHVsZXMgYXJlIGxvYWRlZCB0byBlbmFibGUgdGhlIGZlYXR1cmUuIFRoZW4sIGl0J3MgdGltZSB0byBjcmFmdCB0aGUgZnV6emVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTc1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM1OjU4LjA3MzE0OTQxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzA5MjY3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSArPSBicl9uZXRmaWx0ZXIub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjAtXFxubmV0L2JyaWRnZS9NYWtlZmlsZToyMTpicmlkZ2UtJChDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcpICs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM1OjU4LjEzMDI0NjI1MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mzk0OTQwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBuZXR3b3JraW5nIGFuZCBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJR01QIFNub29waW5nIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgc3lzdGVtIGlzIHRlbGxpbmcgbWUgdGhhdCBgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYCBpcyBhIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGl0ZW0uIEZpbmUsIG1ha2VzIHNlbnNlLCBJR01QIHNub29waW5nIGlzIGNydWNpYWwgaW4gbWFueSBicmlkZ2VkIGVudmlyb25tZW50cy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlc2Ugb3B0aW9ucyBpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgIHJlbGF0ZXMgdG8gb3RoZXIgYnJpZGdpbmcgZmVhdHVyZXMuXG5cblRoZXJlZm9yZSwgSSdsbCBnbyBkaXJlY3RseSB0byBgbmV0L2JyaWRnZS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gYW5kIGFueSBkZXBlbmRlbmNpZXMgZm9yIGJvdGggYEJSSURHRV9JR01QX1NOT09QSU5HYCBhbmQgYWxzbyB0aGUgYmFzZSBicmlkZ2UgZnVuY3Rpb25hbGl0eSByZXByZXNlbnRlZCBieSBgQlJJREdFYC4gVGhpcyBjaGVjayB3aWxsIGNvbmZpcm0gdGhlIHJlbGF0aW9uc2hpcHMsIGFuZCBsZXQgbWUgc2VlIGlmIGFueXRoaW5nIGVsc2UgbmVlZHMgdG8gYmUgdHdlYWtlZC4gSSdsbCBiZSBsb29raW5nIGZvciByZWxhdGlvbnNoaXBzLCBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBvcHRpb25zIHdpdGhpbiB0aGF0IGNvbmZpZ3VyYXRpb24gc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNjowMS45Njk3NDMwNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDExNjI3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJJREdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL0tjb25maWctNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXFxubmV0L2JyaWRnZS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIjgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6MzY6Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIklHTVAvTUxEIHNub29waW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo1MDpjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTYzLVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxcbm5ldC9icmlkZ2UvS2NvbmZpZy02NS1cXHRib29sIFxcXCJNUlAgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjc2OmNvbmZpZyBCUklER0VfQ0ZNXFxubmV0L2JyaWRnZS9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIkNGTSBwcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MzY6MDIuMjM5ODcxNzI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MDk3NDczNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpZ2dpbmcgaW50byBCUklER0VfSUdNUF9TTk9PUElORyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYEJSSURHRV9JR01QX1NOT09QSU5HYC4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IG90aGVyIGNvbXBvbmVudHMsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIHJlbHkgb24sIG9yIGFyZSBpbmZsdWVuY2VkIGJ5LCB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgY29ubmVjdGlvbnMgaXMgY3J1Y2lhbCBiZWZvcmUgbWFraW5nIGFueSBjaGFuZ2VzIG9yIHRyb3VibGVzaG9vdGluZyBpc3N1ZXMgcmVsYXRlZCB0byBJR01QIHNub29waW5nIHdpdGhpbiBhIGJyaWRnZWQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBrbm93IHRoZSByaXBwbGUgZWZmZWN0LiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjczLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MzY6MDguOTQ5NjIyNjA2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDg2MDExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZz02PWNvbmZpZyBCUklER0VcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6MzY6Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIklHTVAvTUxEIHNub29waW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNjowOS4wMDA0OTA5NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5MzQ1MzQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBCcmlkZ2UgQ29uZmlndXJhdGlvbiBGaWxlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzYuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBjb25maWd1cmVkIHRoZXJlLCBwcm9iYWJseSBzb21lIGZlYXR1cmUgb3Igc2V0dGluZyByZWxhdGVkIHRvIG5ldHdvcmsgYnJpZGdpbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgYWJvdXQgdGhpbmdzIGxpa2Ugc3Bhbm5pbmcgdHJlZSBwcm90b2NvbCAoU1RQKSwgdGhlIGZvcndhcmRpbmcgZGF0YWJhc2UsIG9yIHBlcmhhcHMgc29tZSBicmlkZ2Utc3BlY2lmaWMgaGFyZHdhcmUgb2ZmbG9hZCBvcHRpb25zLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFzIHdlbGwgYXMgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgYWZmZWN0IGhvdyB0aGVzZSBicmlkZ2UgZnVuY3Rpb25hbGl0aWVzIGFyZSBjb21waWxlZCBhbmQgaW5jbHVkZWQuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgd2UgY2FuIHVuZWFydGghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNjoxNS4yOTM5NDcwMDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcbiAgMzE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzI6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBicmlkZ2UuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxuICAzNzpcXHRcXHRib29sIFxcXCJJR01QL01MRCBzbm9vcGluZ1xcXCJcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDQwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxcbiAgNDM6XFx0XFx0ICBmb3J3YXJkIG11bHRpY2FzdCB0cmFmZmljIGJhc2VkIG9uIElHTVAvTUxEIHRyYWZmaWMgcmVjZWl2ZWQgZnJvbVxcbiAgNDQ6XFx0XFx0ICBlYWNoIHBvcnQuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNjoxNS4yOTQwMDE1MDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAyMzAwMTk0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgQnJpZGdlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGBCUklER0VgIGFuZCBgSU5FVGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGEgbmV0d29yayBicmlkZ2UgYW5kIHRoZSBJbnRlcm5ldCBQcm90b2NvbCBhcmUgZm91bmRhdGlvbmFsLiBOb3csIGl0J3MgbW9kaWZ5aW5nIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCwgYW5kIHRoYXQgZnVuY3Rpb24gdGFrZXMgYSBgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbmAuIE9rYXksIHNlZW1zIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIFZMQU5zIGFuZCBtdWx0aWNhc3QgaW4gdGhlIGJyaWRnZS4gVGhhdCB0cmlnZ2VycyBhIHF1ZXN0aW9uOiBpcyBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBhIHJlcXVpcmVtZW50IGhlcmU/IEl0IHByb2JhYmx5IGlzLCBidXQgSSBhbHdheXMgdmVyaWZ5LiBUaW1lIHRvIGNoZWNrIGBuZXQvYnJpZGdlL0tjb25maWdgIGFuZCBjb25maXJtLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM2OjI0LjMxNzAxNjQ4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xcbiAgNTE6XFx0XFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxuICA1MjpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgNTM6XFx0XFx0ZGVwZW5kcyBvbiBWTEFOXzgwMjFRXFxuICA1NDpcXHRcXHRkZWZhdWx0IG5cXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcXG4gIDU3OlxcdFxcdCAgcmVjZWl2ZSBhbmQgZm9yd2FyZCB0cmFmZmljIGJhc2VkIG9uIFZMQU4gaW5mb3JtYXRpb24gaW4gdGhlIHBhY2tldFxcbiAgNTg6XFx0XFx0ICBhbnkgVkxBTiBpbmZvcm1hdGlvbiBjb25maWd1cmVkIG9uIHRoZSBicmlkZ2UgcG9ydCBvciBicmlkZ2UgZGV2aWNlLlxcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICA2MzpcXHRcXG4gIDY0OlxcdGNvbmZpZyBCUklER0VfTVJQXFxuICA2NTpcXHRcXHRib29sIFxcXCJNUlAgcHJvdG9jb2xcXFwiXFxuICA2NjpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgNjc6XFx0XFx0ZGVmYXVsdCBuXFxuICA2ODpcXHRcXHRoZWxwXFxuICA2OTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBNUlBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MzY6MjQuMzE3MDgyNDAzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNTY3Mzg0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBteSBmZWxsb3cgZXhwZXJ0czpcblxuKipJbnZlc3RpZ2F0aW5nIFZMQU4gRmlsdGVyaW5nIENvbXBpbGF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGFraW5nIGEgbG9vayBhdCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIE15IGZpcnN0IGh1bmNoIGlzIHRvIHZlcmlmeSBpdHMgY29tcGlsYXRpb24gc3RhdGUgdW5kZXIgdGhlIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIGNvbmZpZ3VyYXRpb24uIFRoZSB3aG9sZSBwb2ludCBpcyB0byBlbnN1cmUgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGFzIGV4cGVjdGVkLCBvciBpcyBhcHByb3ByaWF0ZWx5IGV4Y2x1ZGVkLCB3aGVuIFZMQU4gZmlsdGVyaW5nIGlzIHR1cm5lZCBvZmYuIEknbGwgbmVlZCB0byBkaWcgaW50byBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgIGFuZCBjaGVjayB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcy4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGNvZGUncyBkZXNpZ25lZCB0byBiZSBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGJhc2VkIG9uIHRoYXQgc3BlY2lmaWMgZmVhdHVyZSBmbGFnLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gY2x1dHRlciB1cCB0aGUga2VybmVsIHdoZW4gVkxBTiBmaWx0ZXJpbmcgaXMgbm90IGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM2OjMwLjM3MzgyMzcxN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5MzkyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDczPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3NDp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3NS1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NTA9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTQtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1NTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTYtXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBvbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MzY6MzAuNDI3NzY4NDc0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzAxODY4NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCcmlkZ2UncyBQcml2YXRlIEhlYWRlcioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZm9jdXNpbmcgb24gYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYC4gU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBhcm91bmQgbGluZSAxNTU1LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBzb21lIGNydWNpYWwgaW50ZXJuYWwgZGVmaW5pdGlvbnMgb3Igc3RydWN0dXJlcy4gSSdtIGd1ZXNzaW5nIGl0IHByb2JhYmx5IGRlYWxzIHdpdGggdGhlIGNvcmUgb2YgdGhlIGJyaWRnZSBpbXBsZW1lbnRhdGlvbiwgbGlrZWx5IGRhdGEgc3RydWN0dXJlcyB1c2VkIGZvciB0aGUgZm9yd2FyZGluZyBkYXRhYmFzZSwgc3Bhbm5pbmcgdHJlZSwgb3IgcGVyaGFwcyBzb21lIGludGVybmFsIGV2ZW50IGhhbmRsaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gdGhlcmUgdG8gYWRkcmVzcyBteSBjdXJyZW50IHByb2JsZW0uIEknbSByZWFsbHkgaG9waW5nIHRoZXJlIGlzIG5vIHdlaXJkIGxvY2tpbmcuIExldCdzIHNlZSBpZiB0aGlzIGxpbmVzIHVwIHdpdGggbXkgaHlwb3RoZXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM2OjQwLjcyOTYzOTk2M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9wcml2YXRlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTU0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU0MDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfY3R4X2luaXQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcXG4xNTQxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXFxuMTU0MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG4xNTQzOlxcdHtcXG4xNTQ0OlxcdH1cXG4xNTQ1OlxcdFxcbjE1NDY6XFx0c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9wb3J0X2N0eF9kZWluaXQoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuMTU0NzpcXHR7XFxuMTU0ODpcXHR9XFxuMTU0OTpcXHRcXG4xNTUwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXFxuMTU1MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB1OCBzdGF0ZSlcXG4xNTUyOlxcdHtcXG4xNTUzOlxcdH1cXG4xNTU0OlxcdFxcbjE1NTU6XFx0c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcXG4xNTU2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGJvb2wgb24pXFxuMTU1NzpcXHR7XFxuMTU1ODpcXHR9XFxuMTU1OTpcXHRcXG4xNTYwOlxcdHN0YXRpYyBpbmxpbmUgaW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuMTU2MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCBvbixcXG4xNTYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTU2MzpcXHR7XFxuMTU2NDpcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTU2NTpcXHR9XFxuMTU2NjpcXHRcXG4xNTY3OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXFxuMTU2ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBib29sIG9uKVxcbjE1Njk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNjo0MC43Mjk3ODc3MjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM2MjM0MjI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIGJsb2NrIG9mIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQncyBnb3Zlcm5pbmcgaXRzIHZpc2liaWxpdHkuIFRoZSBgI2lmZGVmYCBkaXJlY3RpdmUgaXMgdGhlIGdpdmVhd2F5LiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiV2hhdCBwcmVwcm9jZXNzb3IgbWFjcm8gaXMgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhpcyBzZWN0aW9uP1wiIEl0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogaGVyZS4gSXMgdGhpcyBmb3IgYSBzcGVjaWZpYyBwbGF0Zm9ybSwgYSBkZWJ1Z2dpbmcgYnVpbGQsIGFuIG9wdGlvbmFsIGZlYXR1cmUsIG9yIHdoYXQ/IEtub3dpbmcgdGhlIG1hY3JvJ3MgZGVmaW5pdGlvbiAob3IgcG90ZW50aWFsIGRlZmluaXRpb25zKSBpcyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwLiBUaGlzIGlzIG1vcmUgdGhhbiBqdXN0IHJlYWRpbmcgdGhlIGNvZGU7IGl04oCZcyBhYm91dCBncmFzcGluZyB0aGUgZGVzaWduIGRlY2lzaW9ucyB0aGF0IGxlZCB0byB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSwgbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IG1hY3JvcyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBiZWhhdmlvciB1bmRlciB2YXJpb3VzIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njg1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNjo0OS4wOTIxMzIyNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNTg1MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD02OT1zdHJ1Y3QgbWFjX2FkZHIge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzItXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NzM6I2lmZGVmIENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTc0LS8qIG91ciBvd24gcXVlcmllciAqL1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTE4PXN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQge1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjExOTojaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTIwLVxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRcXHRcXHQqcG9ydDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE0MD1zdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCB7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTQxOiNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNDItXFx0c3RydWN0IG5ldF9icmlkZ2VcXHRcXHQqYnI7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zOTgtXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGZsYWdzO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjM5OTojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQwMC1cXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwXFx0X19yY3UgKnZsZ3JwO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDI2LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjQyNzojaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDI4LVxcdHN0cnVjdCBicmlkZ2VfbWNhc3Rfc3RhdHNcXHRfX3BlcmNwdSAqbWNhc3Rfc3RhdHM7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00MzQtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NDM1OiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00MzYtXFx0Y2hhclxcdFxcdFxcdFxcdHN5c2ZzX25hbWVbSUZOQU1TSVpdO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDM4LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjQzOTojaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00NDAtXFx0c3RydWN0IG5ldHBvbGxcXHRcXHRcXHQqbnA7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDQxLSNlbmRpZlxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjQ0MjojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00NDMtXFx0LyogSWRlbnRpZmllciB1c2VkIHRvIGdyb3VwIHBvcnRzIHRoYXQgc2hhcmUgdGhlIHNhbWUgc3dpdGNoZGV2XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01MDA9c3RydWN0IG5ldF9icmlkZ2Uge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTA2LVxcdC8qIFRoZXNlIGZpZWxkcyBhcmUgYWNjZXNzZWQgb24gZWFjaCBwYWNrZXQgKi9cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo1MDc6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01MDgtXFx0X19iZTE2XFx0XFx0XFx0XFx0dmxhbl9wcm90bztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTU1Mi1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo1NTM6I2lmZGVmIENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTU1NC1cXHRzdHJ1Y3QgYnJpZGdlX21jYXN0X3N0YXRzXFx0X19wZXJjcHUgKm1jYXN0X3N0YXRzO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTc4LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjU3OTojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01ODAtXFx0LyogQ291bnRlciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGF0IGhhcmR3YXJlIGRvbWFpbnMgZ2V0IHVuaXF1ZVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTk3PXN0cnVjdCBicl9pbnB1dF9za2JfY2Ige1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNjAwLVxcdHUxNiBmcmFnX21heF9zaXplO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjYwMTojaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNjAyLVxcdHU4IGlnbXA7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MDgtXFx0dTggZ3JhdF9hcnA6MTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo2MDk6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MTAtXFx0dTggdmxhbl9maWx0ZXJlZDoxO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxMS0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo2MTI6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxMy1cXHR1OCBicl9uZXRmaWx0ZXJfYnJvdXRlOjE7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MTUtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NjE2OiNpZmRlZiBDT05GSUdfTkVUX1NXSVRDSERFVlxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxNy1cXHQvKiBTZXQgaWYgVFggZGF0YSBwbGFuZSBvZmZsb2FkaW5nIGlzIHVzZWQgdG93YXJkcyBhdCBsZWFzdCBvbmVcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYzNy1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo2Mzg6I2lmZGVmIENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYzOS0jIGRlZmluZSBCUl9JTlBVVF9TS0JfQ0JfTVJPVVRFUlNfT05MWShfX3NrYilcXHQoQlJfSU5QVVRfU0tCX0NCKF9fc2tiKS1cXHUwMDNlbXJvdXRlcnNfb25seSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTc0Mj1zdGF0aWMgaW5saW5lIHU4IGJyX3ZsYW5fbXVsdGljYXN0X3JvdXRlcihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzQ1LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjc0NjojaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzQ3LVxcdGlmICghYnJfdmxhbl9pc19tYXN0ZXIodikpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD04MTM9bmV0ZGV2X3R4X3QgYnJfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6ODE0OiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgxNS1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTY5PWludCBicl9pb2N0bF9zdHViKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKnVhcmcpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTcxLS8qIGJyX211bHRpY2FzdC5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTcyOiNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05NzMtaW50IGJyX211bHRpY2FzdF9yY3Yoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKipicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTc0PWJyX211bHRpY2FzdF9jdHhfb3B0aW9uc19lcXVhbChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4MSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1ODEtLyogYnJfdmxhbi5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU4MjojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1ODMtYm9vbCBicl9hbGxvd2VkX2luZ3Jlc3MoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTg4OD1zdGF0aWMgaW5saW5lIHUxNiBicl92bGFuX2ZsYWdzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBwdmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTg5NS0vKiBicl92bGFuX29wdGlvbnMuYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4OTY6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODk3LWJvb2wgYnJfdmxhbl9vcHRzX2VxX3JhbmdlKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZfY3VycixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE5NDM9c3RhdGljIGlubGluZSBib29sIGJyX3ZsYW5fc3RhdGVfYWxsb3dlZCh1OCBzdGF0ZSwgYm9vbCBsZWFybl9hbGxvdylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTYtLyogYnJfbXN0LmMgKi9cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTU3OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk1OC1ERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoYnJfbXN0X3VzZWQpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MjE3Nj1pbnQgYnJfcHJvY2Vzc192bGFuX2luZm8oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjE4Mi1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMTgzOiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMTg0LS8qIGJyX3N5c2ZzX2lmLmMgKi9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTIxOTg9c3RhdGljIGlubGluZSB2b2lkIGJyX3N5c2ZzX2RlbGJyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuOyB9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMjAxLS8qIGJyX3N3aXRjaGRldi5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjIwMjojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMjAzLWludCBicl9zd2l0Y2hkZXZfcG9ydF9vZmZsb2FkKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM2OjQ5LjI3MjczMjc3MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk1MTE1MTc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBWTEFOIENvbnRleHQgb2YgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gKipcblxuT2theSwgc28gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLi4uIHJpZ2h0LCBpdCdzIGRlZmluZWQgd2l0aGluIGBicl9tdWx0aWNhc3QuY2AuIFRoYXQgbWFrZXMgc2Vuc2UsIGFuZCBJIHJlbWVtYmVyIGl0J3MgY29udGluZ2VudCBvbiBgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYCBiZWluZyBlbmFibGVkLiBCdXQgbXkgY29uY2VybiAqbm93KiBpcyB0aGUgcGFyYW1ldGVyOiBpdCB0YWtlcyBhIGBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuYC4gVGhlIHF1ZXN0aW9uIHRoYXQgc3ByaW5ncyB0byBtaW5kIGltbWVkaWF0ZWx5IGlzLCB3aGF0IGhhcHBlbnMgdG8gdGhpcyBzdHJ1Y3QgaWYgVkxBTiBmaWx0ZXJpbmcsIGFzIGRlZmluZWQgYnkgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLCBpcyBkaXNhYmxlZD8gSXMgdGhlIHN0cnVjdCBldmVuIGRlZmluZWQgaW4gdGhhdCBzY2VuYXJpbz8gSSBuZWVkIHRvIGNsYXJpZnkgd2hldGhlciB0aGUgZnVuY3Rpb24gY2FuIGFjdHVhbGx5ICp3b3JrKiBpbiB0aGF0IGNvbmZpZ3VyYXRpb24uIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5gLCBpbiB0aGlzIGNvbnRleHQsIGhhcyB0byBiZSBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgLiBUaW1lIHRvIGRpdmUgaW4gdGhlcmUgYW5kIHNlZSB3aGF0IHRoZSBpbmNsdWRlIGRlcGVuZGVuY2llcyBsb29rIGxpa2UgZm9yIHRoYXQgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE2MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNzozNy4yMjM4ODY2OTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTE3NDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE4Mz1lbnVtIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIyMC0gKi9cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMjE6c3RydWN0IG5ldF9icmlkZ2VfdmxhbiB7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjIyLVxcdHN0cnVjdCByaGFzaF9oZWFkXFx0XFx0dm5vZGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM3OjM3LjQzNTA2NjY3OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA3ODAxMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBmb3IgVkxBTiBGaWx0ZXJpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgYCNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gVGhpcyBpcyB0aGUgZmlyc3QgcGxhY2UgSSdkIGxvb2sgdG8gc2VlIGlmIFZMQU4gZmlsdGVyaW5nIGZ1bmN0aW9uYWxpdHkgaXMgZXZlbiAqY29tcGlsZWQqIGludG8gdGhlIGtlcm5lbCBmb3IgdGhlIGJyaWRnaW5nIGNvbmZpZ3VyYXRpb24uIFdpdGhvdXQgdGhhdCwgdGhlcmUncyBubyBwb2ludCBpbiBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGl0J3MgaW1wbGVtZW50ZWQuIEl0J3MgdGhlIG1vc3QgZnVuZGFtZW50YWwgcHJlbGltaW5hcnkgY2hlY2sgdG8gbWFrZSBiZWZvcmUgSSB3YXN0ZSB0aW1lIG9uIG1vcmUgY29tcGxpY2F0ZWQgcGFydHMgb2YgdGhlIGNvZGUuIEZpbmRpbmcgdGhpcyB3aWxsIGluZm9ybSBteSBzdWJzZXF1ZW50IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzc6NDEuMDQyODcwNjU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0ICogQHBvcnRfbWNhc3RfY3R4OiBpZiBNQVNURVIgZmxhZyB1bnNldCwgdGhpcyBpcyB0aGUgcGVyLXBvcnQvdmxhbiBtdWx0aWNhc3RcXG4gMjExOlxcdCAqICAgICAgICAgICAgICAgICAgY29udGV4dFxcbiAyMTI6XFx0ICogQG1zdGk6IGlmIE1BU1RFUiBmbGFnIHNldCwgdGhpcyBob2xkcyB0aGUgVkxBTnMgTVNUIGluc3RhbmNlXFxuIDIxMzpcXHQgKiBAdmxpc3Q6IHNvcnRlZCBsaXN0IG9mIFZMQU4gZW50cmllc1xcbiAyMTQ6XFx0ICogQHJjdTogdXNlZCBmb3IgZW50cnkgZGVzdHJ1Y3Rpb25cXG4gMjE1OlxcdCAqXFxuIDIxNjpcXHQgKiBUaGlzIHN0cnVjdHVyZSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgZ2xvYmFsIHBlci1WTEFOIGVudHJpZXMgY29udGFpbmVkIGluXFxuIDIxNzpcXHQgKiB0aGUgYnJpZGdlIHJoYXNodGFibGUgYW5kIHRoZSBsb2NhbCBwZXItcG9ydCBwZXItVkxBTiBlbnRyaWVzIGNvbnRhaW5lZCBpblxcbiAyMTg6XFx0ICogdGhlIHBvcnQncyByaGFzaHRhYmxlLiBUaGUgdW5pb24gZW50cmllcyBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgZGVwZW5kaW5nIG9uXFxuIDIxOTpcXHQgKiB0aGUgZW50cnkgZmxhZ3MgdGhhdCBhcmUgc2V0LlxcbiAyMjA6XFx0ICovXFxuIDIyMTpcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuIHtcXG4gMjIyOlxcdFxcdHN0cnVjdCByaGFzaF9oZWFkXFx0XFx0dm5vZGU7XFxuIDIyMzpcXHRcXHRzdHJ1Y3Qgcmhhc2hfaGVhZFxcdFxcdHRub2RlO1xcbiAyMjQ6XFx0XFx0dTE2XFx0XFx0XFx0XFx0dmlkO1xcbiAyMjU6XFx0XFx0dTE2XFx0XFx0XFx0XFx0ZmxhZ3M7XFxuIDIyNjpcXHRcXHR1MTZcXHRcXHRcXHRcXHRwcml2X2ZsYWdzO1xcbiAyMjc6XFx0XFx0dThcXHRcXHRcXHRcXHRzdGF0ZTtcXG4gMjI4OlxcdFxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzIF9fcGVyY3B1ICpzdGF0cztcXG4gMjI5OlxcdFxcdHVuaW9uIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzc6NDEuMDQzMDU1ODA0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MTY5ODg3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVkxBTiBhbmQgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgYHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5gIGlzIGFsd2F5cyBwcmVzZW50LCB3aGljaCBzZWVtcyByZWFzb25hYmxlIGdpdmVuIGl0cyB1YmlxdWl0b3VzIHVzZSBpbiBicmlkZ2luZy4gQnV0IG5vdyBJIG5lZWQgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gSSBzdXNwZWN0IGl0J3MgbGlua2VkIHRvIElHTVAgc25vb3BpbmcuIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlLlxuXG5BbHJpZ2h0LCBjaGVja2luZyBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgLCBJIHNlZSBteSBodW5jaCB3YXMgY29ycmVjdC4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gICppcyogaW5kZWVkIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgIGJsb2NrLiBUaGF0IG1lYW5zIHRoYXQgdG8gaGF2ZSB0aGF0IGZ1bmN0aW9uIGRlZmluZWQsIGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgICptdXN0KiBiZSBlbmFibGVkLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaXMgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGEgaGFyZCByZXF1aXJlbWVudD8gTGV0J3MgdHJhY2UgdGhlIGNhbGxzIHRvIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gTG9va3MgbGlrZSBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYGJyX3ZsYW4uY2AgYW5kIGBicl9tdWx0aWNhc3QuY2AuIFNvIGxldCdzIGxvb2sgYXQgYGJyX3ZsYW4uY2AgYW5kIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE3MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM3OjQ2Ljg2MDA0ODUyOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MjM1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL2JyX3ZsYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMTQtXFx0XFx0X192bGFuX2RlbF9saXN0KG1hc3RlcnYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjIxNTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKG1hc3RlcnYsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMTYtXFx0XFx0YnJfbXVsdGljYXN0X2N0eF9kZWluaXQoXFx1MDAyNm1hc3RlcnYtXFx1MDAzZWJyX21jYXN0X2N0eCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yNjM9c3RhdGljIGludCBfX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM1OC1cXHRfX3ZsYW5fZmxhZ3NfY29tbWl0KHYsIGZsYWdzKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTk6XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2LCB0cnVlKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zNjAtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0zOTA9c3RhdGljIGludCBfX3ZsYW5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjctXFx0XFx0bmJwX3ZsYW5fc2V0X3ZsYW5fZGV2X3N0YXRlKHAsIHYtXFx1MDAzZXZpZCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6NDI4OlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQyOS1cXHRcXHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFxcdTAwMjZ2LVxcdTAwM2Vwb3J0X21jYXN0X2N0eCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz03MTk9c3RhdGljIGludCBicl92bGFuX2FkZF9leGlzdGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjAtXFx0XFx0KmNoYW5nZWQgPSB0cnVlO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc2MTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2Mi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM3OjQ2LjkwNzc3NzAxNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDIzNzUyMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIG9mIGBicl92bGFuLmNgKipcblxuT2theSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgc29tZXRoaW5nIGFib3V0IHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGUgYnJpZGdlIFZMQU4gZmlsdGVyaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIHdvbmRlcmluZyBpZiB0aGUgYGJyX3ZsYW4uY2AgZmlsZSBnZXRzIGNvbXBpbGVkIGV2ZW4gd2hlbiB0aGUgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkaXNhYmxlZC4gSXQgc2VlbXMgYSBiaXQgb2RkIGlmIGl0IGRvZXMsIGFuZCBpdCB3b3VsZCBiZSBhIGdvb2Qgb3B0aW1pemF0aW9uIGlmIGl0IGRpZG4ndC4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gaXQgZGVhbHMgd2l0aCB0aGUgYnVpbGQgcHJvY2VzcywgaXMgdG8gY2hlY2sgdGhlIGBuZXQvYnJpZGdlL01ha2VmaWxlYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIG9yIGRpcmVjdGl2ZXMuIEknbGwgc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNzo1MS45MzE1MzI3MDZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTQwNDMzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl92bGFuXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9NYWtlZmlsZT0yMT1icmlkZ2UtJChDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcpICs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjItXFxubmV0L2JyaWRnZS9NYWtlZmlsZToyMzpicmlkZ2UtJChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKSArPSBicl92bGFuLm8gYnJfdmxhbl90dW5uZWwubyBicl92bGFuX29wdGlvbnMubyBicl9tc3Qub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM3OjUyLjExMjk0MjAwOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg1MTI4ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEJyaWRnZSBWTEFOIGFuZCBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgYnJfdmxhbi5jYCBpcyBkZWZpbml0ZWx5IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHNwZWNpZmljYWxseSB0aWVkIHRvIHRoZSBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2Aga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBJIHdhcyBqdXN0IHJldmlld2luZyB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgaXQncyBhbHdheXMgZ29vZCB0byBjb25maXJtIHRob3NlIGJ1aWxkLXRpbWUgZmxhZ3MuXG5cbk5vdywgdGhhdCBicmluZ3MgbWUgdG8gYGJyX211bHRpY2FzdC5jYC4gQWgsIHllcywgdGhpcyBvbmUgaXMgZ292ZXJuZWQgYnkgYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AuIEkgc2VlIHRoZSBjb25uZWN0aW9uIG5vdy4gSSdtIG5vdGluZyB0aGUgY2xlYXIgbGluayB0aGVyZSBiZXR3ZWVuIHRoZSBJR01QIHNub29waW5nIGZ1bmN0aW9uYWxpdHkgYW5kIHRoaXMgbW9kdWxlLlxuXG5BbmQgdGhlbiB3aXRoaW4gYGJyX211bHRpY2FzdC5jYCwgSSd2ZSBub3RpY2VkIHRoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5gLiBHb29kIHRvIGtlZXAgdGhhdCBoaWVyYXJjaHkgb2YgZnVuY3Rpb24gY2FsbHMgYW5kIGRlcGVuZGVuY2llcyBpbiBtaW5kLiBUaGF0IGludGVybmFsIHJlbGF0aW9uc2hpcCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBtdWx0aWNhc3QgVkxBTiBvcGVyYXRpb25zIGFyZSBzdHJ1Y3R1cmVkLiBJIHNob3VsZCBiZSBhYmxlIHRvIG1ha2UgaW5mZXJlbmNlcyBmcm9tIHRoZSBmYWN0IG9mIG9uZSBjYWxsaW5nIHRoZSBvdGhlciwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBkZWJ1Z2dpbmcgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUncyBleGVjdXRpb24gcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MDYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNzo1Ni4xOTgwNzQzMjFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzQwMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX211bHRpY2FzdF90b2dnbGVfdmxhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM2Nj12b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQxMC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MTE6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDEyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MzE6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDMyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQ2NC1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0NjU6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0NjYtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0NzA9Ym9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0ODAtXFx0dmxhbi1cXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfR0xPQkFMX01DQVNUX0VOQUJMRUQ7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDgxOlxcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDgyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozNzo1Ni4yNDQ0MTk1MTlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI4NDQ4NTk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJyaWRnZSBNdWx0aWNhc3QgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgYmFjayBpbnRvIHRoaXMgYnJpZGdlIG11bHRpY2FzdCBjb2RlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhvc2UgY3J1Y2lhbCBmdW5jdGlvbnM6IGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGluIHRoYXQgc3BlY2lmaWMgc2NlbmFyaW8gd2UncmUgaW50ZXJlc3RlZCBpbiDigJMgd2hlbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZGlzYWJsZWQuIEFyZSB0aGVzZSBmdW5jdGlvbnMgZXZlbiByZWxldmFudCBpbiB0aGF0IGNvbnRleHQ/IEkgc3VzcGVjdCB0aGV5IG1pZ2h0IG5vdCBiZSwgYnV0IEkgbmVlZCB0byBjb25maXJtLiBNeSBndXQgc2F5cyB0aGV5IHNob3VsZG4ndCBiZSBleGVjdXRlZCwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBjYWxscyBhcmUgaGFuZGxlZCBhcHByb3ByaWF0ZWx5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byBgYnJfbXVsdGljYXN0LmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NDksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozODowNC41Mjg5MDg3MloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMjc1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0zMDMtXFx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XFxubmV0L2JyaWRnZS9ici5jOjMwNDpcXHRcXHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnIuYy0zMDUtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MTE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MzAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDMxOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDc0PXZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDc1OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzYtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NTU9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTktXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU2MDpzdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgb24sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04OTQ9aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTIwLVxcdFxcdGJyX2luZm8oYnIsIFxcXCJ2bGFuIGZpbHRlcmluZyBkaXNhYmxlZCwgYXV0b21hdGljYWxseSBkaXNhYmxpbmcgbXVsdGljYXN0IHZsYW4gc25vb3BpbmdcXFxcblxcXCIpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjkyMTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIGZhbHNlLCBOVUxMKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MjItXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozODowNC41NzYxNDQzOThaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAwMTMxNjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJyaWRnZSBWTEFOIEZpbHRlcmluZyBCZWhhdmlvcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBici5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gYGJyX2Jvb2xvcHRfdG9nZ2xlYC4gSSBzZWUgdGhhdCBpdCBjYWxscyBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBwb3BzIHVwOiBkb2VzIGBicl9ib29sb3B0X3RvZ2dsZWAgZXZlbiBnZXQgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZGlzYWJsZWQ/IEl0IHNlZW1zIGBici5jYCAqYWx3YXlzKiBnZXRzIGNvbXBpbGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy5cblxuQnV0IGhhbmcgb24sIGEgcmVkIGZsYWchIGBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmdgIGxpa2VseSBhY2Nlc3NlcyBgYnJfdmxhbl9ncm91cChicilgLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgdGhlIFZMQU4gZmlsdGVyaW5nIGZ1bmN0aW9uYWxpdHkgbWlnaHQgc3RpbGwgYmUgY3JlZXBpbmcgaW4uIExldCBtZSBxdWlja2x5IGp1bXAgb3ZlciB0byBgYnJfbXVsdGljYXN0LmNgIGFuZCBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCB0byBjb25maXJtIG15IHN1c3BpY2lvbiBhbmQgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBtb3JlIGNsZWFybHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdmxhbl9ncm91cCBpcyBhY2Nlc3NlZCB0byBjb25maXJtIHRoaXMgcG90ZW50aWFsIGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzYyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM4OjExLjU3NzQ2NDU4OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTEyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NDMwOlxcdFxcbjQ0MzE6XFx0aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxuNDQzMjpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuNDQzMzpcXHR7XFxuNDQzNDpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG40NDM1OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW47XFxuNDQzNjpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xcbjQ0Mzc6XFx0XFxuNDQzODpcXHRcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSA9PSBvbilcXG40NDM5OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ0NDA6XFx0XFxuNDQ0MTpcXHRcXHRpZiAob24gXFx1MDAyNlxcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpIHtcXG40NDQyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJDYW5ub3QgZW5hYmxlIG11bHRpY2FzdCB2bGFuIHNub29waW5nIHdpdGggdmxhbiBmaWx0ZXJpbmcgZGlzYWJsZWRcXFwiKTtcXG40NDQzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ0NDQ6XFx0XFx0fVxcbjQ0NDU6XFx0XFxuNDQ0NjpcXHRcXHR2ZyA9IGJyX3ZsYW5fZ3JvdXAoYnIpO1xcbjQ0NDc6XFx0XFx0aWYgKCF2ZylcXG40NDQ4OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ0NDk6XFx0XFxuNDQ1MDpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQsIG9uKTtcXG40NDUxOlxcdFxcbjQ0NTI6XFx0XFx0LyogZGlzYWJsZS9lbmFibGUgbm9uLXZsYW4gbWNhc3QgY29udGV4dHMgYmFzZWQgb24gdmxhbiBzbm9vcGluZyAqL1xcbjQ0NTM6XFx0XFx0aWYgKG9uKVxcbjQ0NTQ6XFx0XFx0XFx0X19icl9tdWx0aWNhc3Rfc3RvcChcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbjQ0NTU6XFx0XFx0ZWxzZVxcbjQ0NTY6XFx0XFx0XFx0X19icl9tdWx0aWNhc3Rfb3BlbihcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbjQ0NTc6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2YnItXFx1MDAzZXBvcnRfbGlzdCwgbGlzdCkge1xcbjQ0NTg6XFx0XFx0XFx0aWYgKG9uKVxcbjQ0NTk6XFx0XFx0XFx0XFx0YnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoXFx1MDAyNnAtXFx1MDAzZW11bHRpY2FzdF9jdHgpO1xcbjQ0NjA6XFx0XFx0XFx0ZWxzZVxcbjQ0NjE6XFx0XFx0XFx0XFx0YnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0X2N0eChcXHUwMDI2cC1cXHUwMDNlbXVsdGljYXN0X2N0eCk7XFxuNDQ2MjpcXHRcXHR9XFxuNDQ2MzpcXHRcXG40NDY0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2xpc3QsIHZsaXN0KVxcbjQ0NjU6XFx0XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHZsYW4sIG9uKTtcXG40NDY2OlxcdFxcbjQ0Njc6XFx0XFx0cmV0dXJuIDA7XFxuNDQ2ODpcXHR9XFxuNDQ2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzg6MTEuNTc3NzE3OTY4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NTM2NjY4NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgVkxBTiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgYnJfdmxhbl9ncm91cChicilgIGhlcmUuIFRoYXQgbWVhbnMgd2UncmUgZGVmaW5pdGVseSBsZXZlcmFnaW5nIFZMQU5zIHdpdGggdGhpcyBicmlkZ2UgKGBicmApLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJJ2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcywgYW5kIG1vc3QgbGlrZWx5IEknbGwgZmluZCB0aGUgZGVmaW5pdGlvbiBpbiBgYnJfcHJpdmF0ZS5oYC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIFZMQU4tcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHdvdWxkIGJlIGRlZmluZWQsIHNvIGxldCdzIHN0YXJ0IHRoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVybmFscyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24uIEtub3dpbmcgdGhlIGRldGFpbHMgaW4gYGJyX3ByaXZhdGUuaGAgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBjb250ZXh0IG9mIGhvdyB0aGVzZSBWTEFOcyBhcmUgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDA3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozODoxOC4wMzEzODc1NTJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzczNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX3ZsYW5fZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl9wcml2YXRlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTY0MD1pbnQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2NDMtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTY0NDpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKmJyX3ZsYW5fZ3JvdXAoXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTY0NS1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNjUwPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqbmJwX3ZsYW5fZ3JvdXAoXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjU1LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE2NTY6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpicl92bGFuX2dyb3VwX3JjdShcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjU3LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE4MTI9c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4MTgtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTgxOTpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKmJyX3ZsYW5fZ3JvdXAoXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTgyMC1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xODI1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqbmJwX3ZsYW5fZ3JvdXAoXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODMwLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4MzE6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpicl92bGFuX2dyb3VwX3JjdShcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODMyLVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzg6MTguMDc4NzY2NDhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3MzI2NjY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgYnJfcHJpdmF0ZS5oYCAtIFNwZWNpZmljYWxseSwgTGluZSAxODE5KipcblxuT2theSwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgIGhlYWRlciBmaWxlLiBNeSBpbnRlcmVzdCBpcyBwaXF1ZWQsIGFuZCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSAxODE5LiBJJ20gbGlrZWx5IGNoYXNpbmcgYSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uLCBvciBwZXJoYXBzIGEgbWFjcm8sIGZ1bmN0aW9uIHNpZ25hdHVyZSwgb3IgY29uc3RhbnQgdmFsdWUgdGhhdCdzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkgb3IgYSBidWcgSSdtIHRyeWluZyB0byBkaWFnbm9zZS4gR2l2ZW4gdGhlIGZpbGUgYW5kIHRoZSBsaW5lIG51bWJlciwgSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWV0aGluZyBsb3ctbGV2ZWwgYW5kIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGludGVybmFsIHdvcmtpbmdzIG9mIHRoZSBMaW51eCBicmlkZ2UgaW1wbGVtZW50YXRpb24uIEknbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gbmF2aWdhdGUgdGhyb3VnaCBtYWNybyBkZWZpbml0aW9ucywgc3RydWN0dXJlIG1lbWJlcnMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGlubGluZSBjb21tZW50cyB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGUgY29kZSBhdCB0aGF0IHNwZWNpZmljIGxvY2F0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTI4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzg6MjEuOTUyMDM2NDczWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxODEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODEwOlxcdH1cXG4xODExOlxcdFxcbjE4MTI6XFx0c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4xODEzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpkc3QsXFxuMTgxNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcXG4xODE1OlxcdHtcXG4xODE2OlxcdFxcdHJldHVybiAwO1xcbjE4MTc6XFx0fVxcbjE4MTg6XFx0XFxuMTgxOTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKmJyX3ZsYW5fZ3JvdXAoXFxuMTgyMDpcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuMTgyMTpcXHR7XFxuMTgyMjpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xODIzOlxcdH1cXG4xODI0OlxcdFxcbjE4MjU6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICpuYnBfdmxhbl9ncm91cChcXG4xODI2OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuMTgyNzpcXHR7XFxuMTgyODpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xODI5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzg6MjEuOTUyMTYxOTQzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NzgwNDYxMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVkxBTiBGaWx0ZXJpbmcgYW5kIE11bHRpY2FzdCBTbm9vcGluZyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGUgZnVuY3Rpb24gYGJyX3ZsYW5fZ3JvdXBgIHJldHVybnMgYE5VTExgIHdoZW4gYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGRpc2FibGVkLiBUaGlzIGlzIGtleS4gTG9va2luZyBhdCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCwgdGhlIGNvZGUgY2hlY2tzIGZvciB0aGlzIGBOVUxMYCByZXR1cm47IGlmIGl0IGlzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLiBUaGF0IG1lYW5zIGlmIFZMQU4gZmlsdGVyaW5nIGlzIG9mZiwgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbmAgaXRzZWxmIGlzIG5ldmVyIGludm9rZWQuIFNvLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRoIGlzIGluYWNjZXNzaWJsZSB3aXRob3V0IGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC5cblxuSSB3YW50IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgc28gSSdtIGRvdWJsZS1jaGVja2luZyB3aGVyZSBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgaXMgYWN0dWFsbHkgY2FsbGVkLiBXaXRoaW4gYGJyX3ZsYW4uY2AsIHRoZSBjYWxscyBvcmlnaW5hdGUgZnJvbSBgYnJfdmxhbl9wdXRfbWFzdGVyYCwgYF9fdmxhbl9hZGRgLCBgX192bGFuX2RlbGAsIGFuZCBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgLiBOb3csIGNyaXRpY2FsbHksIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsc28gY29uZGl0aW9uYWwgb24gYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLiBUaGlzIGNvbmZpcm1zIG15IHN1c3BpY2lvbjogYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGFuIGFic29sdXRlIHByZXJlcXVpc2l0ZSB0byByZWFjaCBhbnkgb2YgdGhlc2UgcmVsZXZhbnQgY29kZSBzZWN0aW9ucy5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgd2UgYXJlIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBkZXBlbmRlbmNpZXMgY29tcGxldGVseS4gSXQgbG9va3MgbGlrZSBgQlJJREdFX0lHTVBfU05PT1BJTkdgIGRlcGVuZHMgb24gYEJSSURHRWAgYW5kIGBJTkVUYC4gYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgZGVwZW5kcyBvbiBgQlJJREdFYCBhbmQgYFZMQU5fODAyMVFgLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6XG5cbiogICBgQlJJREdFYFxuKiAgIGBJTkVUYFxuKiAgIGBWTEFOXzgwMjFRYFxuKiAgIGBCUklER0VfSUdNUF9TTk9PUElOR2BcbiogICBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYFxuXG5Ob3csIHRpbWUgdG8gbG9vayBpbnRvIGBWTEFOXzgwMjFRYCBhbmQgYW55IG90aGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzg6MjguNjMwMjEyMDA4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAyODE5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkxBTl84MDIxUVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvODAyMXEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvODAyMXEvS2NvbmZpZy01LVxcbm5ldC84MDIxcS9LY29uZmlnOjY6Y29uZmlnIFZMQU5fODAyMVFcXG5uZXQvODAyMXEvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCI4MDIuMVEvODAyLjFhZCBWTEFOIFN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvODAyMXEvS2NvbmZpZy0yMS1cXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXFxubmV0LzgwMjFxL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiR1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC84MDIxcS9LY29uZmlnLTMxLVxcbm5ldC84MDIxcS9LY29uZmlnOjMyOmNvbmZpZyBWTEFOXzgwMjFRX01WUlBcXG5uZXQvODAyMXEvS2NvbmZpZy0zMy1cXHRib29sIFxcXCJNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6Mzg6MjguNjc2MjQ0OTY1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTgyNDQ5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGU6XG5cbioqRGl2aW5nIGludG8gdGhlIDgwMi4xUSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aGUgYG5ldC84MDIxcS9LY29uZmlnYCBmaWxlIGFuZCB6ZXJvIGluIGFyb3VuZCBsaW5lIDYuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciA4MDIuMVEgVkxBTiBoYW5kbGluZyBpbiB0aGUga2VybmVsIGFyZSBsaWtlbHkgdG8gYmUgZGVmaW5lZC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNlbnRyYWwgZW5hYmxlL2Rpc2FibGUgc3dpdGNoIGZvciB0aGUgODAyLjFRIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZC4gRGVwZW5kaW5nIG9uIGhvdyB0aGlzIGlzIHN0cnVjdHVyZWQsIEkgbWlnaHQgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSwgb3IgaWYgdGhpcyBpcyB0aGUgZ2VuZXJpYyBWTEFOIGltcGxlbWVudGF0aW9uIG9yIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBoYXJkd2FyZSBob29rcyBpbiB0aGlzIGZpbGUuIEknbSBhbHNvIGhvcGluZyB0aGF0IHRoaXMgc2VjdGlvbiBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgZGVmYXVsdCBiZWhhdmlvciBvciBwb3RlbnRpYWxseSBzb21lIGNyaXRpY2FsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMuIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgY2xlYW5seSBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgdG9vLiBJIHJlYWxseSBob3BlIHRoaXMgaXNuJ3QganVzdCBhIGJhc2ljLCBsb3ctbGV2ZWwgZW5hYmxlL2Rpc2FibGU7IEknZCBsaWtlIHRvIHNlZSBzb21lIHRob3VnaHRmdWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc2MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjM4OjM0LjU3NDQ5Mjc2NVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDg3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvODAyMXEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBDb25maWd1cmF0aW9uIGZvciA4MDIuMVEgVkxBTiBzdXBwb3J0XFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBWTEFOXzgwMjFRXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBTZWxlY3QgdGhpcyBhbmQgeW91IHdpbGwgYmUgYWJsZSB0byBjcmVhdGUgODAyLjFRIFZMQU4gaW50ZXJmYWNlc1xcbiAgMTA6XFx0XFx0ICBvbiB5b3VyIEV0aGVybmV0IGludGVyZmFjZXMuIDgwMi4xUSBWTEFOIHN1cHBvcnRzIGFsbW9zdFxcbiAgMTE6XFx0XFx0ICBldmVyeXRoaW5nIGEgcmVndWxhciBFdGhlcm5ldCBpbnRlcmZhY2UgZG9lcywgaW5jbHVkaW5nXFxuICAxMjpcXHRcXHQgIGZpcmV3YWxsaW5nLCBicmlkZ2luZywgYW5kIG9mIGNvdXJzZSBJUCB0cmFmZmljLiBZb3Ugd2lsbCBuZWVkXFxuICAxMzpcXHRcXHQgIHRoZSAnaXAnIHV0aWxpdHkgaW4gb3JkZXIgdG8gZWZmZWN0aXZlbHkgdXNlIFZMQU5zLlxcbiAgMTQ6XFx0XFx0ICBTZWUgdGhlIFZMQU4gd2ViIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb246XFxuICAxNTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3LmNhbmRlbGF0ZWNoLmNvbS9+Z3JlZWFyL3ZsYW4uaHRtbFxcdTAwM2VcXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMTg6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCA4MDIxcS5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTozODozNC41NzQ1NTQ3MzZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMTE0MTQ0Mjk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQnJpZGdlIE11bHRpY2FzdCBUb2dnbGUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBpdCBkb2Vzbid0IGFwcGVhciB0byBoYXZlIGFueSBleHBsaWNpdCBkZXBlbmRlbmNpZXMgYmVzaWRlcywgd2VsbCwgdGhlIG9idmlvdXMgbmVlZCBmb3IgYSBuZXR3b3JrIHN0YWNr4oCUc29tZXRoaW5nIGxpa2UgYE5FVGAuIE5vdGhpbmcgaW1tZWRpYXRlbHkganVtcHMgb3V0IGFzIG5lZWRpbmcgYW55IHNwZWNpYWwgYXR0ZW50aW9uIG9yIGV4b3RpYyBsaWJyYXJpZXMsIHdoaWNoIGlzIGdvb2QuXG5cblRoYXQgbWVhbnMgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSSdsbCBuZWVkIGBCUklER0VgLCBgSU5FVGAsIGBWTEFOXzgwMjFRYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBUaG9zZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIEknZCBleHBlY3QgdG8gc2VlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gTXkgZm9jdXMgaXMgb24gdGhpcyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgZnVuY3Rpb24g4oCTIHRoYXQncyB0aGUgb25lIGJlaW5nIG1vZGlmaWVkLCBhZnRlciBhbGwuIFJpZ2h0LCBzbyB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGdldHRpbmcgY2FsbGVkIGZyb20/IEkgc2VlIGEgbGlzdCBvZiBmdW5jdGlvbnMgY2FsbGluZyBpdDogYGJyX3ZsYW5fcHV0X21hc3RlcmAsIGBfX3ZsYW5fYWRkYCwgYF9fdmxhbl9kZWxgLCBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbmAuIFRoZXNlIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucyBpbnRlcm5hbGx5LCB3aGljaCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIGEgYml0LlxuXG5UaGUgbmV4dCBzdGVwIGlzIHRvIGZpbmQgdGhlIHB1YmxpYyBBUEkgZW50cnkgcG9pbnRzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBub24tc3RhdGljIGZ1bmN0aW9ucyBjYWxsIHRoZXNlIGludGVybmFsIGZ1bmN0aW9ucywgZXNwZWNpYWxseSBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYCwgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSBjaGFuZ2UgcHJvcGFnYXRlcyBvdXR3YXJkcy4gTG9va2luZyBhdCBpdCwgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYCBhcmUgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuYC5cblxuTm93IEknbGwgc2hpZnQgZ2VhcnMgYW5kIGxvb2sgYXQgdGhlIGNhbGxlcnMgb2YgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZ2AgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHVzZWQuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgaW1wYWN0IG9mIGFueSBjaGFuZ2UgdG8gdGhlIGNvcmUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Mzg2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTU6MTUuNzE2MDAwODIzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjMyMDcxMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0zMDMtXFx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XFxubmV0L2JyaWRnZS9ici5jOjMwNDpcXHRcXHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnIuYy0zMDUtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MTE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MzAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDMxOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDc0PXZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDc1OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzYtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NTU9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTktXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU2MDpzdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgb24sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04OTQ9aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTIwLVxcdFxcdGJyX2luZm8oYnIsIFxcXCJ2bGFuIGZpbHRlcmluZyBkaXNhYmxlZCwgYXV0b21hdGljYWxseSBkaXNhYmxpbmcgbXVsdGljYXN0IHZsYW4gc25vb3BpbmdcXFxcblxcXCIpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjkyMTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIGZhbHNlLCBOVUxMKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MjItXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NToxNi4wNzkyMTM5NThaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzMjc2NDUyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkRpZ2dpbmcgaW50byBCcmlkZ2UgYW5kIFZMQU4gSW50ZXJhY3Rpb25zKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGEgY291cGxlIG9mIGtleSB0b2dnbGUgb3B0aW9ucyBoZXJlOiBgYnJfYm9vbG9wdF90b2dnbGVgIGFuZCBgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlYC4gU2VlbXMgbGlrZSBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBpbnRlcmFjdCwgb3IgaG93IGEgY2hhbmdlIGluIG9uZSBhZmZlY3RzIHRoZSBvdGhlci4gR29vZCB0byBrZWVwIHRoZXNlIGludGVyYWN0aW9ucyBmaXJtbHkgaW4gbWluZCwgZXNwZWNpYWxseSB3aXRoIG1vcmUgZHluYW1pYyBzeXN0ZW1zIGluIHBsYWNlLlxuXG5TcGVjaWZpY2FsbHksIEknbSBub3cgZ29pbmcgdG8gZHJpbGwgZG93biBhbmQgZXhhbWluZSB0aGUgY2FsbCBzaXRlcyBmb3IgYGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW5gLiBUaGlzIHN1Z2dlc3RzIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiBnbG9iYWwgVkxBTiBjb25maWd1cmF0aW9uIG9uIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYnJpZGdlIGNvbnRleHQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20sIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRob3NlIGNhbGxzLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBpbXBhY3QgaXMuIFRoaXMnbGwgaGVscCBtZSBzZWUgaWYgdGhlIHRvZ2dsZXMgaGF2ZSBpbXBsaWNhdGlvbnMgb24gYW55IGdsb2JhbCBmdW5jdGlvbnMuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyZGVwZW5kZW5jaWVzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU2OjA1LjQwNjg2MTUzMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2ODA1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0MzE9aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0NjktXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDcwOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQ3MS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDc1PWludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzYtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDc3OmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDc4LVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU2MD1zdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU2Ni1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTY3OnN0YXRpYyBpbmxpbmUgYm9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU2OC1cXHRcXHRcXHRcXHRcXHRcXHQgICBib29sIG9uKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz01NTA9c3RhdGljIGludCBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTY0LVxcdFxcdG1jX3Nub29waW5nID0gbmxhX2dldF91OCh0YltCUklER0VfVkxBTkRCX0dPUFRTX01DQVNUX1NOT09QSU5HXSk7XFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo1NjU6XFx0XFx0aWYgKGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4odiwgISFtY19zbm9vcGluZykpXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy01NjYtXFx0XFx0XFx0KmNoYW5nZWQgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjowNS40NTY1NDkxMzhaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5ODAwODIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyB0aG91Z2ggaXQgd2VyZSBteSB0cmFpbiBvZiB0aG91Z2h0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgVkxBTiBNdWx0aWNhc3QgRmxvdyoqXG5cbk9rYXksIHNvIGBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGluIHRoaXMgbXVsdGljYXN0IHBhdGgsIGFuZCBpdCBjYWxscyBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgbGluZWFnZSBhbmQgc2VlIHdob+KAmXMgYWN0dWFsbHkgdHJpZ2dlcmluZyB0aGlzIHBhcnRpY3VsYXIgY2FsbCBjaGFpbi4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGJyX3ZsYW5fcHJvY2Vzc19nbG9iYWxfb25lX29wdHNgLiBLbm93aW5nIGl0cyBkaXJlY3QgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGdsb2JhbCBWTEFOIG11bHRpY2FzdCBzZXR0aW5ncyBhcmUgdWx0aW1hdGVseSBhZGp1c3RlZC4gVGhpcyB3aWxsIGdpdmUgbWUgY29udGV4dCwgYW5kIGhlbHAgbWUgcmVhc29uIGFib3V0IHRoZSBwb3NzaWJsZSBpbXBhY3Qgb2YgY2hhbmdlcyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbmAgc2luY2UgdGhpcyBjYWxsIGNoYWluIHNlZW1zIGNlbnRyYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjMyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6MDguNzU0NTYwNzQ1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU5NDAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM9NTA4PXN0YXRpYyB2b2lkIGJyX3ZsYW5fZ2xvYmFsX29wdHNfbm90aWZ5KGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTQ5LVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NTUwOnN0YXRpYyBpbnQgYnJfdmxhbl9wcm9jZXNzX2dsb2JhbF9vbmVfb3B0cyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy01NTEtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jPTY4NT1pbnQgYnJfdmxhbl9ydG1fcHJvY2Vzc19nbG9iYWxfb3B0aW9ucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy03NDQtXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo3NDU6XFx0XFx0ZXJyID0gYnJfdmxhbl9wcm9jZXNzX2dsb2JhbF9vbmVfb3B0cyhiciwgdmcsIHYsIHRiLCBcXHUwMDI2Y2hhbmdlZCxcXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTc0Ni1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjowOC44MDIxNjE4NDNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMjUxNjgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkFuYWx5emluZyBWTEFOIENvbmZpZ3VyYXRpb24gUHJvY2Vzc2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zYCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQgY2FsbHMgYGJyX3ZsYW5fcHJvY2Vzc19nbG9iYWxfb25lX29wdHNgLiBOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSB1bmRlcmx5aW5nIHByb2Nlc3Nlcy4gU28sIG15IG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgZmxvdyBvZiB0aGluZ3MgYSBiaXQgZnVydGhlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNhbGxpbmcgdGhlIGNvcmUgVkxBTiBmdW5jdGlvbnMgLSBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaW5kIGFsbCB0aGUgY2FsbGVycyBvZiBgX192bGFuX2FkZGAsIGBfX3ZsYW5fZGVsYCwgYGJyX3ZsYW5fYWRkX2V4aXN0aW5nYCwgYW5kIGBicl92bGFuX3B1dF9tYXN0ZXJgLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgaW4gY29udGV4dCBvZiB0aGUgZ2xvYmFsIG9wdGlvbnMgcHJvY2Vzc2luZywgaXMga2V5IHRvIGZ1bGx5IHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjoxMi4yMzQ2ODEwNTRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTExMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdmxhbl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmM9MzI9c3RhdGljIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKmJyX3ZsYW5fbG9va3VwKHN0cnVjdCByaGFzaHRhYmxlICp0YmwsIHUxNiB2aWQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zNi1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNzpzdGF0aWMgdm9pZCBfX3ZsYW5fYWRkX3B2aWQoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzgtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz02MT1zdGF0aWMgYm9vbCBfX3ZsYW5fZmxhZ3NfdXBkYXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc5LVxcdGlmIChmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRClcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4MDpcXHRcXHRfX3ZsYW5fYWRkX3B2aWQodmcsIHYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTgxLVxcdGVsc2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTEwMz1zdGF0aWMgaW50IF9fdmxhbl92aWRfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyMy1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMjQ6c3RhdGljIHZvaWQgX192bGFuX2FkZF9saXN0KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTI1LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTIzND1zdGF0aWMgdm9pZCBicl92bGFuX2luaXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTI2Mi0gKi9cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyNjM6c3RhdGljIGludCBfX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yNjQtXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU2LVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjM1NzpcXHRfX3ZsYW5fYWRkX2xpc3Qodik7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVxcdF9fdmxhbl9mbGFnc19jb21taXQodiwgZmxhZ3MpO1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9Nzc5PWludCBicl92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQsIHUxNiBmbGFncywgYm9vbCAqY2hhbmdlZCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTgwOS1cXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnZsYW4tXFx1MDAzZXJlZmNudCwgMSk7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6ODEwOlxcdHJldCA9IF9fdmxhbl9hZGQodmxhbiwgZmxhZ3MsIGV4dGFjayk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtODExLVxcdGlmIChyZXQpIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTEzMTU9aW50IG5icF92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzQ3LVxcdHZsYW4tXFx1MDAzZXBvcnQgPSBwb3J0O1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEzNDg6XFx0cmV0ID0gX192bGFuX2FkZCh2bGFuLCBmbGFncywgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzQ5LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU2OjEyLjI4MTU5NzQ5MloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTQxNzYxMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkludGVybmFsIE5ldHdvcmsgVkxBTiBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgVkxBTiBhc3NpZ25tZW50cy4gU3BlY2lmaWNhbGx5LCBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgb3BlcmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggYWRkaW5nIFZMQU5zLiBcImJyX3ZsYW5fYWRkXCIgaW1tZWRpYXRlbHkgYnJpbmdzIHRvIG1pbmQgdGhlIGJyaWRnZSBpbnRlcmZhY2UsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFkZGluZyBhIFZMQU4gdGFnIHRvIGEgYnJpZGdlIGludGVyZmFjZS4gSSdtIGNvbnNpZGVyaW5nIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGZsb29kaW5nIGRvbWFpbnMsIGFuZCBob3cgdGhpcyB3aWxsIGFmZmVjdCB0cmFmZmljIGZvcndhcmRpbmcuIFRoZXJlIGFyZSB0aGUgdXN1YWwgc2VjdXJpdHkgY29uY2VybnMgSSdtIGZhY3RvcmluZyBpbiwgdG9vLCBvZiBjb3Vyc2UgLSBwcm9wZXIgVkxBTiBzZWdyZWdhdGlvbiBpcyBlc3NlbnRpYWwuXG5cblRoZW4sIFwibmJwX3ZsYW5fYWRkXCIuIFRoaXMgc3VnZ2VzdHMgYSBuZXR3b3JrIGJvb3QgcHJvY2VzcyBvciBQWEUgY29udGV4dC4gU28sIEknbSBtYXBwaW5nIHRoYXQgb250byB0aGUgYnJvYWRlciBwaWN0dXJlOyBjb25zaWRlcmluZyBob3cgd2UgaGFuZGxlIFZMQU4gYXNzaWdubWVudHMgZm9yIG5ldHdvcmsgYm9vdGluZyBvZiBkZXZpY2VzLiBUaGlzIHByb21wdHMgcXVlc3Rpb25zIGFib3V0IFZMQU4gdGFnZ2luZyBvbiB0aGUgYm9vdCBzZXJ2ZXIsIERIQ1AgY29uZmlndXJhdGlvbiB0byBhc3NpZ24gdGhlIGNvcnJlY3QgVkxBTiwgYW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIGFueSBwcmUtYm9vdCBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgYW5kIGhvdyB0aGV5IGRlcGVuZCBvbiBlYWNoIG90aGVyLiBIb3cgZG9lcyBpdCB0aWUgaW50byB0aGUgb3ZlcmFsbCBwcm92aXNpb25pbmcgd29ya2Zsb3csIGFuZCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMgaW4gdGhlIGV4aXN0aW5nIHNldHVwPyBJJ20gYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb24gbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgdHJ5aW5nIHRvIGFudGljaXBhdGUgYW55IHBvc3NpYmxlIGVkZ2UgY2FzZXMgb3IgcmFjZSBjb25kaXRpb25zIEknbGwgbmVlZCB0byBhZGRyZXNzLiBJdCdzIGFsbCBhYm91dCBlbnN1cmluZyBzbW9vdGggb3BlcmF0aW9uIGFuZCB0aGF0IHRoZSBWTEFOIGlzIGNvcnJlY3RseSBjb25maWd1cmVkIGFjcm9zcyB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlbGVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyODQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjoyMC44MjMzNjE4MTlaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODA3MDUxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3ZsYW5fZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM3PXN0YXRpYyB2b2lkIF9fdmxhbl9hZGRfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQ3LVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjQ4OnN0YXRpYyB2b2lkIF9fdmxhbl9kZWxldGVfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZywgdTE2IHZpZClcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00OS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz02MT1zdGF0aWMgYm9vbCBfX3ZsYW5fZmxhZ3NfdXBkYXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTgxLVxcdGVsc2VcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4MjpcXHRcXHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtXFx1MDAzZXZpZCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtODMtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMjQ9c3RhdGljIHZvaWQgX192bGFuX2FkZF9saXN0KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNDMtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTQ0OnN0YXRpYyB2b2lkIF9fdmxhbl9kZWxfbGlzdChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE0NS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMTMtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYXN0ZXJ2LVxcdTAwM2V2bm9kZSwgYnJfdmxhbl9yaHRfcGFyYW1zKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMTQ6XFx0XFx0X192bGFuX2RlbF9saXN0KG1hc3RlcnYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTIxNS1cXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKG1hc3RlcnYsIGZhbHNlKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTI2Mz1zdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzg5LVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjM5MDpzdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zOTEte1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNDA0LVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjQwNTpcXHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtXFx1MDAzZXZpZCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtNDA2LVxcdGlmIChwKSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjUtXFx0XFx0XFx0XFx0ICAgICAgIGJyX3ZsYW5fcmh0X3BhcmFtcyk7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6NDI2OlxcdFxcdF9fdmxhbl9kZWxfbGlzdCh2KTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjctXFx0XFx0bmJwX3ZsYW5fc2V0X3ZsYW5fZGV2X3N0YXRlKHAsIHYtXFx1MDAzZXZpZCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz00NDY9c3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQ1My1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0NTQ6XFx0X192bGFuX2RlbGV0ZV9wdmlkKHZnLCB2Zy1cXHUwMDNlcHZpZCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtNDU1LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuLCB0bXAsIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNDY1LVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjQ2NjpcXHRcXHRlcnIgPSBfX3ZsYW5fZGVsKHZsYW4pO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQ2Ny1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04MjQ9aW50IGJyX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTg0MC1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4NDE6XFx0cmV0dXJuIF9fdmxhbl9kZWwodik7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtODQyLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTEzNjA9aW50IG5icF92bGFuX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTM3MS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMzcyOlxcdHJldHVybiBfX3ZsYW5fZGVsKHYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEzNzMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjoyMS4yNjE0MzgyMloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTkwNDEwMzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IEltbWVkaWF0ZSBDb25jZXJucyB3aXRoIFZMQU4gRGVsZXRpb24qKlxuXG5SaWdodCwgc28gKmBicl92bGFuX2RlbGV0ZWAqIGFuZCAqYG5icF92bGFuX2RlbGV0ZWAqLi4uIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIG9wZXJhdGlvbmFsIGltcGxpY2F0aW9ucyBoZXJlLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZXNlIGRlbGV0aW9uIHJvdXRpbmVzIGFjcm9zcyBkaWZmZXJlbnQgYnJpZGdlIGludGVyZmFjZXMgYW5kIHBvdGVudGlhbGx5IG5vbi1icmlkZ2VkIHBvcnQgZW52aXJvbm1lbnRzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25zaWRlcjpcblxuKiAgICoqQXRvbWljaXR5OioqIEFyZSB0aGVzZSBvcGVyYXRpb25zIHRydWx5IGF0b21pYz8gSWYgYSBkZWxldGlvbiBmYWlscyBtaWR3YXkgdGhyb3VnaCwgd2hhdCdzIHRoZSByb2xsYmFjayBwcm9jZWR1cmU/IERvZXMgaXQgbGVhdmUgdGhlIHN5c3RlbSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGU/IEkgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgc2NlbmFyaW9zIHdoZXJlIHRoZSBWTEFOIGlzIHJlZmVyZW5jZWQgaW4gbXVsdGlwbGUgcGxhY2VzIOKAkyBRb1MgcG9saWNpZXMsIEFDTHMsIGZvcndhcmRpbmcgZGF0YWJhc2VzLiBIb3cgYXJlIHRob3NlIGhhbmRsZWQ/IERvIHdlIGhhdmUgcmFjZSBjb25kaXRpb25zIGlmIGFub3RoZXIgcHJvY2VzcyBhdHRlbXB0cyB0byB1c2UgdGhlIHZsYW4sIG9yIGNvbmZpZ3VyZSB0aGUgdmxhbiBhdCB0aGUgc2FtZSB0aW1lP1xuKiAgICoqUmVzb3VyY2UgQ2xlYW51cDoqKiBCZXlvbmQgcmVtb3ZpbmcgdGhlIFZMQU4gSUQgZnJvbSB0aGUgYnJpZGdlIG9yIHBvcnQgY29udGV4dCwgd2hhdCBvdGhlciByZXNvdXJjZXMgYXJlIGJlaW5nIGZyZWVkPyBBcmUgd2UgdGFsa2luZyBhYm91dCBtZW1vcnkgYWxsb2NhdGlvbnMsIGZvcndhcmRpbmcgdGFibGUgZW50cmllcywgYW55IGFzc29jaWF0ZWQgY29udHJvbCBwbGFuZSBzdGF0ZT8gSSBuZWVkIHRvIGtub3cgdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGxlYWtzIG9yIG90aGVyIHJlc291cmNlIGV4aGF1c3Rpb24gaWYgYSBkZWxldGlvbiBpcyBwb29ybHkgaW1wbGVtZW50ZWQuXG4qICAgKipEZXBlbmRlbmN5IE1hbmFnZW1lbnQ6KiogSSdtIHdvbmRlcmluZyB3aGF0IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgaGFuZGxlZC4gSWYgYSBWTEFOIGlzIGRlbGV0ZWQgdGhhdCdzIHBhcnQgb2YgYSBMQUcgb3IgYSB0cnVuaywgYXJlIHRoZSBhc3NvY2lhdGVkIHBvcnRzIGF1dG9tYXRpY2FsbHkgcmVjb25maWd1cmVkIG9yIGRpc2FibGVkPyBJZiB0aGUgdmxhbiBpcyBhIGRlZmF1bHQgdmxhbiBvbiBhIHBvcnQsIGFuZCB0aGUgcG9ydCBpcyBjb25uZWN0ZWQgdG8gYSBob3N0LCBob3cgaXMgdGhlIGhvc3QgaW1wYWN0ZWQ/XG4qICAgKipFcnJvciBIYW5kbGluZyBhbmQgUHJvcGFnYXRpb246KiogSG93IHJvYnVzdCBpcyB0aGUgZXJyb3IgaGFuZGxpbmc/IERvZXMgdGhlIGNvZGUgcHJvcGVybHkgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGEgVkxBTiBkb2Vzbid0IGV4aXN0IG9yIGlzIGluIHVzZT8gV2hhdCdzIHRoZSBlcnJvciByZXBvcnRpbmcgbGlrZT8gRG9lcyBpdCBwcm92aWRlIHN1ZmZpY2llbnQgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgdHJvdWJsZXNob290aW5nIGluIGEgY29tcGxleCBuZXR3b3JrIHNldHVwPyBEb2VzIGl0IHNpbXBseSByZXR1cm4gYW4gZXJyb3IgY29kZSBvciBkb2VzIGl0IHNlbmQgdXNlZnVsIGRlYnVnIG1lc3NhZ2VzPyBXaGF0IGlzIHRoZSBpbXBhY3Qgb2YgZXJyb3JzIHRvIHRoZSBicm9hZGVyIG5ldHdvcms/XG4qICAgKipDb250ZXh0dWFsIERpZmZlcmVuY2VzOioqIFRoZSAnbmJwJyBwcmVmaXggb24gYG5icF92bGFuX2RlbGV0ZWAgcGlxdWVzIG15IGludGVyZXN0LiBJcyB0aGlzIG1lYW50IGZvciBub24tYnJpZGdlIHBvcnRzPyBJZiBzbywgd2hhdCBhcmUgdGhlIHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvcj8gQXJlIHRoZXJlIHNwZWNpZmljIGVkZ2UgY2FzZXMgcmVsYXRlZCB0byB0YWdnZWQvdW50YWdnZWQgVkxBTiBhc3NpZ25tZW50cyBvbiB0aGVzZSBpbnRlcmZhY2VzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJIGFzc3VtZSB0aGUgYGJyX2AgdmVyc2lvbiBpcyBmb3Igc3RhbmRhcmQgYnJpZGdlIHBvcnRzLiBCdXQgd2hhdCBhYm91dCB2aXJ0dWFsIGludGVyZmFjZXM/IEhvdyBhYm91dCBib25kIHBvcnRzP1xuXG5VbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHBvdGVudGlhbCBwaXRmYWxscyBhbmQgZWRnZSBjYXNlcyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgVkxBTiBkZWxldGlvbiBmdW5jdGlvbnMuIFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpbGwgYmUga2V5LCBidXQgSSdtIGxvb2tpbmcgZm9yIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVzaWduIHBoaWxvc29waHksIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3ODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjoyNi4yNTE4NTE0MDJaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODIwNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX3ZsYW5fYWRkX2V4aXN0aW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jPTY4Nj1ib29sIGJyX3Nob3VsZF9sZWFybihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZpZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcxOC1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3MTk6c3RhdGljIGludCBicl92bGFuX2FkZF9leGlzdGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzIwLVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9Nzc5PWludCBicl92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQsIHUxNiBmbGFncywgYm9vbCAqY2hhbmdlZCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc5MS1cXHRpZiAodmxhbilcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3OTI6XFx0XFx0cmV0dXJuIGJyX3ZsYW5fYWRkX2V4aXN0aW5nKGJyLCB2ZywgdmxhbiwgZmxhZ3MsIGNoYW5nZWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzkzLVxcdFxcdFxcdFxcdFxcdCAgICBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjoyNi4yOTg2Nzc2NloiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY4ODc3NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFZMQU4gTWFuYWdlbWVudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBWTEFOIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIGBicl92bGFuX2FkZF9leGlzdGluZ2AgaXMgdGhlIHdvcmtob3JzZSBoZXJlLCBjYWxsZWQgZGlyZWN0bHkgYnkgYGJyX3ZsYW5fYWRkYC4gVGhpcyBzdWdnZXN0cyB0aGF0IGBicl92bGFuX2FkZGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIGFkZGluZyBWTEFOcyBpbiBtb3N0IHNjZW5hcmlvcy4gR2l2ZW4gdGhpcywgbXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYSBzZXQgb2YgY29yZSBmdW5jdGlvbnM6IGBicl92bGFuX2FkZGAsIGBicl92bGFuX2RlbGV0ZWAsIGFuZCB0aGVuIHRoZSBOZXR3b3JrIEJyaWRnZSBQcm90b2NvbCBlcXVpdmFsZW50cyBgbmJwX3ZsYW5fYWRkYCBhbmQgYG5icF92bGFuX2RlbGV0ZWAuIFRoZXNlIGFyZSBvYnZpb3VzbHkgaGFuZGxpbmcgdGhlIGNvcmUgVkxBTiBjcmVhdGlvbiBhbmQgcmVtb3ZhbCBvcGVyYXRpb25zLiBJJ2xsIGFsc28gbmVlZCB0byBleGFtaW5lIGhvdyB0aGUgYnJpZGdlLWxldmVsIGJvb2xlYW4gb3B0aW9ucywgbGlrZSBlbmFibGluZyBvciBkaXNhYmxpbmcgdmFyaW91cyBmZWF0dXJlcywgYXJlIG1hbmFnZWQgdGhyb3VnaCBgYnJfYm9vbG9wdF90b2dnbGVgLCBhbmQgdGhlIGZpbHRlcmluZyB0b2dnbGVzIHdpdGggYGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZWAuIExhc3RseSwgSSB3aWxsIG5vdCBmb3JnZXQgdGhlIGdsb2JhbCBvcHRpb24gcHJvY2Vzc2luZyBkb25lIGJ5IGBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zYC4gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgYXBwbGllZCBpbiB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCBpbnRvIHRoZXNlIGZ1bmN0aW9ucywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ2xsIGxvb2sgZm9yIG90aGVyIGVudHJ5IHBvaW50cywgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IHBhdGhzIHRoYXQgSSdtIG92ZXJsb29raW5nLiBJIHNlZSB0aGF0IGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBpcyBjYWxsZWQgYnkgYGJyX3ZsYW5fcHV0X21hc3RlcmAuIEl0IG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgc2luY2UgaXQgc3VnZ2VzdHMgYSBzZXBhcmF0ZSBtdWx0aWNhc3QgYXNwZWN0LCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBtb3JlIGdlbmVyYWwgVkxBTiBwcm9jZXNzaW5nLiBJIG5lZWQgdG8gdGFrZSBpdCBpbnRvIGFjY291bnQsIHdoaWxlIEknbSBsb29raW5nIGFyb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2NzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6MzAuODY3NTU4NzgxWiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIxODE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl92bGFuX3B1dF9tYXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmM9MTkyPXN0YXRpYyB2b2lkIGJyX21hc3Rlcl92bGFuX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjAyLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjIwMzpzdGF0aWMgdm9pZCBicl92bGFuX3B1dF9tYXN0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydilcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMDQte1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zNzktXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MzgwOlxcdFxcdFxcdGJyX3ZsYW5fcHV0X21hc3RlcihtYXN0ZXJ2KTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zODEtXFx0XFx0XFx0di1cXHUwMDNlYnJ2bGFuID0gTlVMTDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM5MD1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQzMi1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0MzM6XFx0YnJfdmxhbl9wdXRfbWFzdGVyKG1hc3RlcnYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQzNC1vdXQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU2OjMwLjkxNTc4MjA3OVoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTcwMjE1NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWTEFOIE9wZXJhdGlvbnMgaW4gdGhlIEJyaWRnZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFZMQU4gaW1wbGVtZW50YXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBjb3JlIGxvZ2ljLCBhdCBsZWFzdCBmcm9tIHRoaXMgY29udGV4dCwgaXMgdHJpZ2dlcmVkIHRocm91Z2ggYF9fdmxhbl9hZGRgIGFuZCBgX192bGFuX2RlbGAuIFRoYXQncyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20uIE15IHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBtYW5hZ2luZyBWTEFOcyBhcmU6IGBicl92bGFuX2FkZGAsIGBicl92bGFuX2RlbGV0ZWAsIGBuYnBfdmxhbl9hZGRgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgd2hpY2ggaGFuZGxlIHRoZSBhY3R1YWwgYWRkaXRpb24gYW5kIHJlbW92YWwgb2YgVkxBTiBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSBgYnJfYm9vbG9wdF90b2dnbGVgLCBgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlYCwgYW5kIGBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zYCBhcmUgaW4gdGhlcmUgdG9vLCBsaWtlbHkgZm9yIGZlYXR1cmUgdG9nZ2xpbmcgb3IgY29uZmlndXJhdGlvbiB1cGRhdGVzLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBgYnJfdmxhbl9hZGRgIGFuZCBgYnJfdmxhbl9kZWxldGVgLiBBcmUgdGhlc2Ugc3RhdGljIG9yIGdsb2JhbCBmdW5jdGlvbnM/IEtub3dpbmcgdGhhdCB3aWxsIHByb3ZpZGUgY3JpdGljYWwgY29udGV4dCBvbiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIG1vZGlmaWNhdGlvbi4gTGV0J3Mgc2VlIGlmIEkgY2FuIGZpbmQgdGhhdCBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1NDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6MzQuODg2MDAwMDg2WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk2MjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYnJfdmxhbl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU5MD1zdHJ1Y3Qgc2tfYnVmZiAqYnJfaGFuZGxlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU5My1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU5NDppbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU5NS1cXHRcXHRib29sICpjaGFuZ2VkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTcyMj1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpicl9oYW5kbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzI5LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE3MzA6c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTczMS1cXHRcXHRcXHQgICAgICBib29sICpjaGFuZ2VkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz02ODY9Ym9vbCBicl9zaG91bGRfbGVhcm4oc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICp2aWQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03MTgtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6NzE5OnN0YXRpYyBpbnQgYnJfdmxhbl9hZGRfZXhpc3Rpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcyMC1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc3OC0gKi9cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3Nzk6aW50IGJyX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZCwgdTE2IGZsYWdzLCBib29sICpjaGFuZ2VkLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc4MC1cXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU2OjM0LjkzMTk2NDgxNFoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg5MDU0NzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkFzc2Vzc2luZyB0aGUgRHluYW1pYyBOYXR1cmUgb2YgVkxBTnMgYW5kIEZ1bmN0aW9uIENhbGxzKipcblxuWWVzLCB0aGF0J3MgcmlnaHQsIHRoZSBzdWJqZWN0IGJlaW5nIGRpc2N1c3NlZCBpcyBkZWZpbml0ZWx5IG5vdCBzdGF0aWMuIFRoZSBjb250ZXh0IHN0cm9uZ2x5IGltcGxpZXMgYSBkeW5hbWljIGVudmlyb25tZW50LCBwYXJ0aWN1bGFybHkgd2l0aCBWTEFOcy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbnMgd2l0aGluIHRoZSByZWxldmFudCBjb2RlIGJhc2Ugd2hlcmUgd2UncmUgZGVhbGluZyB3aXRoIFZMQU4gY3JlYXRpb24gYW5kIGRlbGV0aW9uLCB0byB1bmRlcnN0YW5kIGhvdyBjaGFuZ2VzIGFyZSBhcHBsaWVkLiBUbyBjbGFyaWZ5IG15IHBvc2l0aW9uLCBJIGFtIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gY2hlY2tpbmcgdGhlIGBuYnBfdmxhbl9hZGRgIGFuZCBgbmJwX3ZsYW5fZGVsZXRlYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgZm9yIGFzc2Vzc2luZyBleGFjdGx5IGhvdyB0aGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGFyZSBtYWRlIGFuZCB3aGF0IG90aGVyIGFjdGlvbnMgYXJlIHJlcXVpcmVkLCBzdWNoIGFzIGludGVyZmFjZSByZS1jb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGVsc2UgbmVlZHMgdG8gYmUgZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0NDYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NjozOC40MjEwMjE4NDJaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTM4NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBuYnBfdmxhbl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTYxMT1pbnQgX19icl92bGFuX3NldF9kZWZhdWx0X3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgcHZpZCxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNjEyLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE2MTM6aW50IG5icF92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTYxNC1cXHRcXHQgYm9vbCAqY2hhbmdlZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE3NTA9c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3NTQtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTc1NTpzdGF0aWMgaW5saW5lIGludCBuYnBfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCwgdTE2IGZsYWdzLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3NTYtXFx0XFx0XFx0ICAgICAgIGJvb2wgKmNoYW5nZWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTEyNTc9aW50IG5icF92bGFuX2luaXQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTMxNC0gKi9cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMzE1OmludCBuYnBfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCwgdTE2IGZsYWdzLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEzMTYtXFx0XFx0IGJvb2wgKmNoYW5nZWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6MzguNDY5MTY1NjJaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5Njg4NTExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBpbiB0aGUgbWlkZGxlIG9mIHRoaXMgYXNzZXNzbWVudDpcblxuKipBbmFseXppbmcgRHluYW1pYyBCZWhhdmlvcioqXG5cblJpZ2h0LCBzbyB0aGUgc3ViamVjdCBpcyBjbGVhcmx5IGluZGljYXRpbmcgc29tZSBmb3JtIG9mIG5vbi1zdGF0aWMgYmVoYXZpb3IuIFRoYXQncyB0aGUga2V5IHRha2Vhd2F5LiBOb3csIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBzdGF0aWMsIHdoYXQgYXJlIHRoZSBuZXh0IHN0ZXBzIHRvIGFzc2Vzcz9cblxuVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0byBxdWlja2x5IGludmVzdGlnYXRlIGBicl9ib29sb3B0X3RvZ2dsZWAuIEl0J3MgYSBwcmltZSBzdXNwZWN0IGZvciBjb250cm9sbGluZyBvciBpbmZsdWVuY2luZyB0aGUgZHluYW1pYyBzdGF0ZSBvZiB0aGlzIGFzcGVjdC4gVGltZSB0byBkaWcgaW4gdGhlcmUgYW5kIHNlZSBpZiBpdCdzIHRoZSByaWdodCBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxMTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1Njo0Mi4wNjYwNTMzODNaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTg5Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBicl9ib29sb3B0X3RvZ2dsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyLmM9MjY4PWJyX3RvZ2dsZV9mZGJfbG9jYWxfdmxhbl8wKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0yOTMtICovXFxubmV0L2JyaWRnZS9ici5jOjI5NDppbnQgYnJfYm9vbG9wdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBlbnVtIGJyX2Jvb2xvcHRfaWQgb3B0LCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnIuYy0yOTUtXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NzY4PXN0YXRpYyBpbmxpbmUgaW50IGJyX29wdF9nZXQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzczLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjc3NDppbnQgYnJfYm9vbG9wdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBlbnVtIGJyX2Jvb2xvcHRfaWQgb3B0LCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTc3NS1cXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1Njo0Mi4xMTM2NDY5MTJaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NzEyNDg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTm9uLVN0YXRpYyBDb25zaWRlcmF0aW9ucyBcdTAwMjYgVkxBTiBGaWx0ZXJpbmcqKlxuXG5SaWdodCwgc28gd2UncmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggc29tZXRoaW5nICpub24tc3RhdGljKi4gVGhhdCdzIHRoZSBrZXkuIE5vdywgd2l0aCB0aGF0IGVzdGFibGlzaGVkLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgc3BlY2lmaWMgcG9pbnQgb2YgaW52ZXN0aWdhdGlvbjogYGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZWAuIFRoaXMgZnVuY3Rpb24gaXMgcGl2b3RhbCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBWTEFOIGZpbHRlcmluZyBiZWhhdmVzIGluIHRoaXMgY29udGV4dC4gSXQncyB0aGUgbHluY2hwaW4sIHRoZSBjb250cm9sIHBvaW50Li4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBob3cgaXQncyBiZWluZyBtYW5pcHVsYXRlZCwgb3IgaG93IHRoZSBjb25kaXRpb25zIGFyb3VuZCBpdCBhcmUgY2hhbmdpbmcsIGFzIHRoYXQgaW5mb3JtcyBldmVyeXRoaW5nLiBJJ20gZ29pbmcgdG8gc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTU3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6NDUuMTYwNzc1MjM5WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA4NjIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1OTk9dm9pZCBicl9yZWNhbGN1bGF0ZV9md2RfbWFzayhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE2MDA6aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2MDEtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTc4OD1zdGF0aWMgaW5saW5lIHUxNiBicl9nZXRfcHZpZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3OTItXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTc5MzpzdGF0aWMgaW5saW5lIGludCBicl92bGFuX2ZpbHRlcl90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3OTQtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB2YWwsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04ODQ9dm9pZCBicl9yZWNhbGN1bGF0ZV9md2RfbWFzayhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04OTMtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6ODk0OmludCBicl92bGFuX2ZpbHRlcl90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04OTUtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU2OjQ1LjIwNzg2ODI3N1oiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQyMzc3MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGlubmVyIG1vbm9sb2d1ZTpcblxuKipOb24tU3RhdGljIENvbnRleHQgYW5kIE9wdGlvbiBQcm9jZXNzaW5nKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbm9uLXN0YXRpYyBoZXJlLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIHdvcmsgdGhyb3VnaCB0aGlzLiBOb24tc3RhdGljIGltcGxpZXMgYSBmZXcgdGhpbmdzIHJpZ2h0IG9mZiB0aGUgYmF0IOKAkyBwb3RlbnRpYWxseSBtdXRhYmxlIHN0YXRlLCBwb3NzaWJsZSBleHRlcm5hbCBkZXBlbmRlbmNpZXMsIGFuZCBsaWtlbHkgc29tZSBkeW5hbWljIGFsbG9jYXRpb24uIEdvb2QgdG8gZXN0YWJsaXNoIHRoYXQgZm91bmRhdGlvbmFsIGZhY3QgYmVmb3JlIGRpdmluZyBkZWVwZXIuXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGBicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zYCBmdW5jdGlvbi4gVGhpcyBzZWVtcyBsaWtlIHRoZSBjcml0aWNhbCBwaWVjZSB0byB1bmRlcnN0YW5kLiBJdCdzIHByb2JhYmx5IHdoZXJlIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gVkxBTiByb3V0aW5nIGFyZSBwcm9jZXNzZWQuIEknbGwgbmVlZCB0byBhbmFseXplIHRoaXMgZnVuY3Rpb24gY2FyZWZ1bGx5IHRvIHVuZGVyc3RhbmQgKmhvdyogaXQgaGFuZGxlcyB0aG9zZSBub24tc3RhdGljIGFzcGVjdHMgd2UganVzdCBpZGVudGlmaWVkLiBMZXQncyBzZWUgaG93IGl0IHByb2Nlc3NlcyB0aG9zZSBnbG9iYWwgc2V0dGluZ3MgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIGZvciB0aGUgc3lzdGVtIG92ZXJhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTAwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6NDguNjUwMjQ4NDg2WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI2NDM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYnJfdmxhbl9ydG1fcHJvY2Vzc19nbG9iYWxfb3B0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTAyPWludCBicl92bGFuX3Byb2Nlc3Nfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTA3LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5MDg6aW50IGJyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTA5LVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz02Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJyX3ZsYW5fZGJfZ3BvbFtCUklER0VfVkxBTkRCX0dPUFRTX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy02ODQtXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo2ODU6aW50IGJyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTY4Ni1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6NDguNjk1NTE4MDU0WiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMTExODMzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBSZWxldmFudCBDb2RlIFBhdGhzKipcblxuT2theSwgbm9uLXN0YXRpYywgZ290IGl0LiBMZXQgbWUganVzdCBsYXkgb3V0IHRoZSBmb2N1cyBzeW1ib2xzIGFnYWluIHRvIG1ha2Ugc3VyZSBJJ20gb24gdHJhY2s6IGBicl92bGFuX2FkZGAsIGBicl92bGFuX2RlbGV0ZWAsIGBuYnBfdmxhbl9hZGRgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYGJyX2Jvb2xvcHRfdG9nZ2xlYCwgYGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZWAsIGFuZCBgYnJfdmxhbl9ydG1fcHJvY2Vzc19nbG9iYWxfb3B0aW9uc2AuXG5cbk5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55IHBvdGVudGlhbCBlbnRyeSBwb2ludHMgdG8gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gLiBJIGtub3cgaXQncyBjYWxsZWQgZnJvbSBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYCwgYnV0IEkgdHJhY2VkIHRoYXQgb25lIGJlZm9yZS4gQW5kIGl0IHNlZW1zIHRoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfdmxhbmAgaXRzZWxmIGlzIGNhbGxlZCBieSBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nYCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW5gLCBib3RoIG9mIHdoaWNoIEkgKmRpZCogdHJhY2UuXG5cbkFscmlnaHQsIHdoYXQgZWxzZSBjb3VsZCBiZSBjYWxsaW5nIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYD8gU2Nhbm5pbmcgdGhlIGBicl92bGFuLmNgIGZpbGUsIEkgc2VlIGBicl92bGFuX3B1dF9tYXN0ZXJgLCBgX192bGFuX2FkZGAsIGBfX3ZsYW5fZGVsYCwgYW5kIGBicl92bGFuX2FkZF9leGlzdGluZ2AuIEkgYmVsaWV2ZSBJJ3ZlIGFscmVhZHkgZXhhbWluZWQgdGhvc2UgYXMgd2VsbCwgc28gdGhhdCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGlzIHRoYXQgcmlnaHQ/ICBgX192bGFuX2FkZGAgaXMgKmFsc28qIGNhbGxlZCBmcm9tIGBicl92bGFuX2luaXRgIGFuZCBgbmJwX3ZsYW5faW5pdGA/IE9rYXksIHRoYXQncyBhIGZyZXNoIGFuZ2xlLCBhbmQgdGhvc2UgYXJlIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZ2l2ZW4gdGhlaXIgaW5pdGlhbGl6YXRpb24gY29udGV4dHMuIExldCdzIGRlbHZlIGludG8gYGJyX3ZsYW5faW5pdGAgYW5kIGBuYnBfdmxhbl9pbml0YCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTY6NTQuOTA2NzA0MDIzWiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkyNDM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3ZsYW5fYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jPTMyPXN0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICpicl92bGFuX2xvb2t1cChzdHJ1Y3Qgcmhhc2h0YWJsZSAqdGJsLCB1MTYgdmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzYtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6Mzc6c3RhdGljIHZvaWQgX192bGFuX2FkZF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM4LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9NjE9c3RhdGljIGJvb2wgX192bGFuX2ZsYWdzX3VwZGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03OS1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1BWSUQpXFxubmV0L2JyaWRnZS9icl92bGFuLmM6ODA6XFx0XFx0X192bGFuX2FkZF9wdmlkKHZnLCB2KTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04MS1cXHRlbHNlXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMDM9c3RhdGljIGludCBfX3ZsYW5fdmlkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjMtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTI0OnN0YXRpYyB2b2lkIF9fdmxhbl9hZGRfbGlzdChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyNS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMzQ9c3RhdGljIHZvaWQgYnJfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yNjItICovXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MjYzOnN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjY0LVxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM1Ni1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTc6XFx0X192bGFuX2FkZF9saXN0KHYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTM1OC1cXHRfX3ZsYW5fZmxhZ3NfY29tbWl0KHYsIGZsYWdzKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTc3OT1pbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsIGJvb2wgKmNoYW5nZWQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04MDktXFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZ2bGFuLVxcdTAwM2VyZWZjbnQsIDEpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjgxMDpcXHRyZXQgPSBfX3ZsYW5fYWRkKHZsYW4sIGZsYWdzLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTgxMS1cXHRpZiAocmV0KSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMzE1PWludCBuYnBfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCwgdTE2IGZsYWdzLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTM0Ny1cXHR2bGFuLVxcdTAwM2Vwb3J0ID0gcG9ydDtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMzQ4OlxcdHJldCA9IF9fdmxhbl9hZGQodmxhbiwgZmxhZ3MsIGV4dGFjayk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTM0OS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1Njo1NC45NTI2MzM1ODFaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4NTUwNDYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFZMQU4gSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBWTEFOcyBhcmUgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBicl92bGFuX2luaXRgIGFuZCBgbmJwX3ZsYW5faW5pdGAuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGRvbid0IGRpcmVjdGx5IGNhbGwgYF9fdmxhbl9hZGRgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgaW50dWl0aW9uLCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGlzIHR5cGUgb2Ygc3lzdGVtIGFyY2hpdGVjdHVyZSwgaXMgdGhhdCB0aGV5J2xsIGxpa2VseSBjYWxsIHNvbWV0aGluZyBsaWtlIGBicl92bGFuX2FkZGAgb3IgYG5icF92bGFuX2FkZGAgaW50ZXJuYWxseS4gVG8gY29uZmlybSB0aGlzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgSSByZWFsbHkgc2hvdWxkIGV4YW1pbmUgYGJyX3ZsYW5faW5pdGAgbW9yZSBjbG9zZWx5LiBMZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyNTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1Njo1OC41MzgxNDE2ODRaIiwiU2VxIjo3MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjcxMjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX3ZsYW5fYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE2Nz1icl92bGFuX2dldF9tYXN0ZXIoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTc4LVxcdFxcdC8qIG1pc3NpbmcgZ2xvYmFsIGN0eCwgY3JlYXRlIGl0IG5vdyAqL1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjE3OTpcXHRcXHRpZiAoYnJfdmxhbl9hZGQoYnIsIHZpZCwgMCwgXFx1MDAyNmNoYW5nZWQsIGV4dGFjaykpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTgwLVxcdFxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yOTYtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6Mjk3OlxcdFxcdFxcdGVyciA9IGJyX3ZsYW5fYWRkKGJyLCB2LVxcdTAwM2V2aWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjk4LVxcdFxcdFxcdFxcdFxcdCAgZmxhZ3MgfCBCUklER0VfVkxBTl9JTkZPX0JSRU5UUlksXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz02ODY9Ym9vbCBicl9zaG91bGRfbGVhcm4oc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICp2aWQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03MTgtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6NzE5OnN0YXRpYyBpbnQgYnJfdmxhbl9hZGRfZXhpc3Rpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTcyMC1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc3OC0gKi9cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3Nzk6aW50IGJyX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZCwgdTE2IGZsYWdzLCBib29sICpjaGFuZ2VkLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc4MC1cXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03OTEtXFx0aWYgKHZsYW4pXFxubmV0L2JyaWRnZS9icl92bGFuLmM6NzkyOlxcdFxcdHJldHVybiBicl92bGFuX2FkZF9leGlzdGluZyhiciwgdmcsIHZsYW4sIGZsYWdzLCBjaGFuZ2VkLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc5My1cXHRcXHRcXHRcXHRcXHQgICAgZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTExMDI9aW50IF9fYnJfdmxhbl9zZXRfZGVmYXVsdF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHB2aWQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTMwLVxcdCAgICAoIXB2ZW50IHx8ICFicl92bGFuX3Nob3VsZF91c2UocHZlbnQpKSkge1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExMzE6XFx0XFx0ZXJyID0gYnJfdmxhbl9hZGQoYnIsIHB2aWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTEzMi1cXHRcXHRcXHRcXHQgIEJSSURHRV9WTEFOX0lORk9fUFZJRCB8XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTkwLVxcdFxcdGlmIChvbGRfcHZpZCkge1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExOTE6XFx0XFx0XFx0YnJfdmxhbl9hZGQoYnIsIG9sZF9wdmlkLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExOTItXFx0XFx0XFx0XFx0ICAgIEJSSURHRV9WTEFOX0lORk9fUFZJRCB8XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNzQ3PWludCBicl92bGFuX2JyaWRnZV9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzU1LVxcdGNhc2UgTkVUREVWX1JFR0lTVEVSOlxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjE3NTY6XFx0XFx0cmV0ID0gYnJfdmxhbl9hZGQoYnIsIGJyLVxcdTAwM2VkZWZhdWx0X3B2aWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTc1Ny1cXHRcXHRcXHRcXHQgIEJSSURHRV9WTEFOX0lORk9fUFZJRCB8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU2OjU4LjU4NDQxNTY5MloiLCJTZXEiOjczLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcyMDM0MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZTpcblxuKipWTEFOIFRhZ2dpbmcgXHUwMDI2IEJyaWRnZSBFdmVudCBDb250ZXh0KipcblxuT2theSwgc28gYGJyX3ZsYW5fYWRkYCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIEknbSBzZWVpbmcgaXQncyBjYWxsZWQgZnJvbSBhIGNvdXBsZSBvZiBvdGhlciBwbGFjZXM6IGBfX2JyX3ZsYW5fc2V0X2RlZmF1bHRfcHZpZGAgYW5kIGBicl92bGFuX2JyaWRnZV9ldmVudGAuIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiBJbXBvcnRhbnRseSwgYm90aCBvZiB0aG9zZSBjYWxsaW5nIGZ1bmN0aW9ucywgYF9fYnJfdmxhbl9zZXRfZGVmYXVsdF9wdmlkYCBhbmQgYGJyX3ZsYW5fYnJpZGdlX2V2ZW50YCwgYXJlICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGxpa2VseSBtZWFucyB0aGV5J3JlIGludGVuZGVkIHRvIGJlIGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlIGluIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGJ5IG90aGVyIG1vZHVsZXMuIGBicl92bGFuX2FkZGAgaXMsIHRoZXJlZm9yZSwgYSBjZW50cmFsIHBpZWNlIHRoYXQncyBleHBvc2VkIHRvIG11bHRpcGxlIHBvaW50cyBvZiB0aGUgc3lzdGVtLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhIGJpdCwgSSB3YW50IHRvIGNoZWNrIGhvdyBgbmJwX3ZsYW5fYWRkYCB0aWVzIGludG8gYWxsIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDI2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTc6MDIuMDU2NDU0MDcyWiIsIlNlcSI6NzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ3NjUyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYnBfdmxhbl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmM9MTEwMj1pbnQgX19icl92bGFuX3NldF9kZWZhdWx0X3B2aWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgcHZpZCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExNTQtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTE1NTpcXHRcXHRlcnIgPSBuYnBfdmxhbl9hZGQocCwgcHZpZCxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTU2LVxcdFxcdFxcdFxcdCAgIEJSSURHRV9WTEFOX0lORk9fUFZJRCB8XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTc4LVxcdFxcdGlmIChvbGRfcHZpZCkge1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExNzk6XFx0XFx0XFx0bmJwX3ZsYW5fYWRkKHAsIG9sZF9wdmlkLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExODAtXFx0XFx0XFx0XFx0ICAgICBCUklER0VfVkxBTl9JTkZPX1BWSUQgfFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTI1Nz1pbnQgbmJwX3ZsYW5faW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjg2LVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEyODc6XFx0XFx0cmV0ID0gbmJwX3ZsYW5fYWRkKHAsIHAtXFx1MDAzZWJyLVxcdTAwM2VkZWZhdWx0X3B2aWQsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTI4OC1cXHRcXHRcXHRcXHQgICBCUklER0VfVkxBTl9JTkZPX1BWSUQgfFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTMxNC0gKi9cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMzE1OmludCBuYnBfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCwgdTE2IGZsYWdzLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEzMTYtXFx0XFx0IGJvb2wgKmNoYW5nZWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTc6MDIuMTAxOTM2OTNaIiwiU2VxIjo3NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2MDI1NDY3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBCcmlkZ2UgTXVsdGljYXN0IGFuZCBWTEFOIExvZ2ljKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGF2ZSBhIGNsZWFyIGZ1enppbmcgc3RyYXRlZ3kgZm9ybWluZy4gIGBuYnBfdmxhbl9hZGRgIGlzIHRoZSBrZXkg4oCTIGl0J3MgY2FsbGVkIGZyb20gYm90aCBgbmJwX3ZsYW5faW5pdGAgYW5kIGBfX2JyX3ZsYW5fc2V0X2RlZmF1bHRfcHZpZGAsIHdoaWNoIGdpdmVzIG1lIGdvb2QgaW5pdGlhbCBlbnRyeSBwb2ludHMuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgVkxBTiBhbmQgYnJpZGdlIG1hbmlwdWxhdGlvbi5cblxuU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIHRhcmdldGluZyB0aGVzZSBmdW5jdGlvbnMgZGlyZWN0bHk6IGBicl92bGFuX2FkZGAsIGBicl92bGFuX2RlbGV0ZWAsIGBuYnBfdmxhbl9hZGRgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYGJyX2Jvb2xvcHRfdG9nZ2xlYCwgYGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZWAsIGFuZCBgYnJfdmxhbl9ydG1fcHJvY2Vzc19nbG9iYWxfb3B0aW9uc2AsICBhbmQgYF9fYnJfdmxhbl9zZXRfZGVmYXVsdF9wdmlkYC4gVGhlc2UgYXJlIGFsbCBleGNlbGxlbnQgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBUaGVzZSBlbnRyeSBwb2ludHMgc2hvdWxkIGFkZXF1YXRlbHkgY292ZXIgdGhlIGxvZ2ljIGNoYW5nZSBmcm9tIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYC4gVGhlIGNoYW5nZXMgdG8gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGFsdGVyIHRoZSBlYXJseSByZXR1cm4gbG9naWMuICBUaGUgcGF0Y2ggbW9kaWZpZXMgYSBjb25kaXRpb24sIHNvIGl0J3MgYSBnb29kIHRhcmdldC5cblxuVGhlIGNoYW5nZSBpbiB0aGUgcGF0Y2ggZXNzZW50aWFsbHkgcmVtb3ZlcyBhbiBlYXJseSByZXR1cm4gaW4gY2VydGFpbiBjYXNlcywgd2hpY2ggYWx0ZXJzIHRoZSBtdWx0aWNhc3QvVkxBTiBiZWhhdmlvci4gVGhpcyBpcyBjbGVhcmx5IHJlYWNoYWJsZSB2aWEgbmV0bGluayBhbmQgaW9jdGwgZnJvbSB1c2Vyc3BhY2UsIG1ha2luZyBpdCBhIHZpYWJsZSBmdXp6aW5nIHRhcmdldC4gIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBCUklER0VgLCBgSU5FVGAsIGBWTEFOXzgwMjFRYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYCwgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLlxuXG5JJ3ZlIGFscmVhZHkgbG9va2VkIGF0IHRoZSBjYWxsZXJzIG9mIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBhbmQsIGFzIGV4cGVjdGVkLCB0aGV5J3JlIGNvdmVyZWQgYnkgbXkgY2hvc2VuIGVudHJ5IHBvaW50cyAoYGJyX3ZsYW5fcHV0X21hc3RlcmAsIGBfX3ZsYW5fYWRkYCwgYF9fdmxhbl9kZWxgLCBgYnJfdmxhbl9hZGRfZXhpc3RpbmdgLCBgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuYCkuIEkgbmVlZCB0byBiZSBlZmZpY2llbnQsIHNvIEkgd2lsbCBwcmlvcml0aXplIHRoaXMgc21hbGxlciBzdWJzZXQgb2YgZm9jdXMgc3ltYm9scyB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyMjMsIk91dHB1dFRva2VucyI6MjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU3OjEyLjcwNDQ4NzM3OFoiLCJTZXEiOjc2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODQwNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIklORVRcIixcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIkJSSURHRV9JR01QX1NOT09QSU5HXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl92bGFuX2FkZFwiLFxuICAgIFwiYnJfdmxhbl9kZWxldGVcIixcbiAgICBcIm5icF92bGFuX2FkZFwiLFxuICAgIFwibmJwX3ZsYW5fZGVsZXRlXCIsXG4gICAgXCJicl9ib29sb3B0X3RvZ2dsZVwiLFxuICAgIFwiYnJfdmxhbl9maWx0ZXJfdG9nZ2xlXCIsXG4gICAgXCJicl92bGFuX3J0bV9wcm9jZXNzX2dsb2JhbF9vcHRpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVhcmx5IHJldHVybiBjb25kaXRpb24gaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdpdGhpbiB0aGUgYnJpZGdlIG11bHRpY2FzdCBhbmQgVkxBTiBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGhvdyBWTEFOIG11bHRpY2FzdCBjb250ZXh0cyBhcmUgdG9nZ2xlZCB3aGVuIGBvbmAgaXMgZmFsc2UuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBhbmQgaW9jdGwgd2hlbiBjb25maWd1cmluZyBicmlkZ2UgVkxBTnMgYW5kIG11bHRpY2FzdCBzbm9vcGluZyBvcHRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX3ZsYW5fYWRkXCIsXG4gICAgXCJicl92bGFuX2RlbGV0ZVwiLFxuICAgIFwibmJwX3ZsYW5fYWRkXCIsXG4gICAgXCJuYnBfdmxhbl9kZWxldGVcIixcbiAgICBcImJyX2Jvb2xvcHRfdG9nZ2xlXCIsXG4gICAgXCJicl92bGFuX2ZpbHRlcl90b2dnbGVcIixcbiAgICBcImJyX3ZsYW5fcnRtX3Byb2Nlc3NfZ2xvYmFsX29wdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWFybHkgcmV0dXJuIGNvbmRpdGlvbiBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2l0aGluIHRoZSBicmlkZ2UgbXVsdGljYXN0IGFuZCBWTEFOIGxvZ2ljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgaG93IFZMQU4gbXVsdGljYXN0IGNvbnRleHRzIGFyZSB0b2dnbGVkIHdoZW4gYG9uYCBpcyBmYWxzZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIGFuZCBpb2N0bCB3aGVuIGNvbmZpZ3VyaW5nIGJyaWRnZSBWTEFOcyBhbmQgbXVsdGljYXN0IHNub29waW5nIG9wdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjU3OjEyLjc4NDMzNTc3NFoiLCJTZXEiOjc3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2NTkwNjU2Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTc6MTIuNzg0OTU5Njc0WiIsIlNlcSI6NzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI3NjU5MDAyNzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIHdoZXJlIGRpc2FibGluZyBtdWx0aWNhc3Qgb24gYSBWTEFOIHRoYXQgaXMgbm90IGEgYnJpZGdlIGVudHJ5IHdvdWxkIGZhaWwgZHVlIHRvIGFuIGluY29ycmVjdCBlYXJseSByZXR1cm4gY29uZGl0aW9uLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHN0YXRlIG1hbmFnZW1lbnQsIG1lbW9yeSBsZWFrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBsb2dpYyBjaGFuZ2UuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmFiMWMzMGI2YjBhOWU3ZjUxYWFkNDhjMDc0ZjRlZjJlNmUxNTczMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA5OjM1OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbmluZGV4IDc1ZTFlMmE4ZmM4M2EuLjNlZjVkOGJiZjU1MmUgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG5AQCAtNDM3Nyw4ICs0Mzc3LDggQEAgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG4gXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHtcbiBcdFx0YnIgPSB2bGFuLVx1MDAzZWJyO1xuIFxuLVx0XHRpZiAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuLVx0XHQgICAgKG9uIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAob24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fFxuIFx0XHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKSlcbiBcdFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NzoxMi43ODQ5NjA1NjRaIiwiU2VxIjo3OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA2NTU0OTY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCcmlkZ2UgTXVsdGljYXN0IFRvZ2dsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyBhIGNvbmRpdGlvbmFsIGxvZ2ljIGFkanVzdG1lbnQgd2l0aGluIGFuIGBpZmAgc3RhdGVtZW50LiBUaGUgZGlmZiBzaG93cyB0aGUgY2hhbmdlOiBhIHNsaWdodCByZW9yZGVyaW5nIG9mIHRoZSBib29sZWFuIGxvZ2ljLiBCZWZvcmUsIHRoZSByZXR1cm4gY29uZGl0aW9uIHdhcyBiYXNlZCBvbiBgIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSB8fCAob24gXHUwMDI2XHUwMDI2IGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKWAuIE5vdywgaXQncyBgb24gXHUwMDI2XHUwMDI2ICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8IGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vicl9tY2FzdF9jdHgpKWAuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGFsdGVycyB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5LiBJdCBzZWVtcyB0aGF0IGlmIHRoZSBgb25gIGZsYWcgaXMgbm93IGZhbHNlLCB0aGUgZnVuY3Rpb24gZG9lc24ndCBiYWlsIG91dCBpZiBgIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAgaXMgdHJ1ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIGJ1ZyDigJMgcGVyaGFwcyBhIG1lbW9yeSBsZWFrLCBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBvciBzaW1wbHkgYW4gaW5jb3JyZWN0IHN0YXRlIG1hbmFnZW1lbnQgaXNzdWUgd2l0aGluIHRoZSBicmlkZ2UgbXVsdGljYXN0IGNvbnRleHQuIEknbSBub3QgaW1tZWRpYXRlbHkgc2VlaW5nIGFueXRoaW5nIHN1Z2dlc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGl0J3MgbW9yZSBhYm91dCBob3cgdGhlIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uIGZsb3cgaXMgY29udHJvbGxlZCBieSB0aGF0IGBvbmAgZmxhZy4gQ2xlYXJseSwgc29tZXRoaW5nIHdhc24ndCB3b3JraW5nIGNvcnJlY3RseSwgYW5kIHRoaXMgc21hbGwgY2hhbmdlIGxpa2VseSBmaXhlcyB0aGF0LCBsaWtlbHkgd2l0aCBzb21lIHNvcnQgb2Ygc3RhdGUgaXNzdWUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgYWN0dWFsbHkgZG9lcyB0byBwcm9wZXJseSBldmFsdWF0ZSB0aGlzIHBhdGNoJ3MgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTc6MTkuODUwNTEyNjU1WiIsIlNlcSI6ODAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgxMzk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzQwPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDQxMT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyMy1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MjQ6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2cG9ydCwgb24pO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQyNS1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MjctXFx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0Mjg6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDI5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTc6MTkuODk4MzM1NzczWiIsIlNlcSI6ODEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDUzMTIzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgbWVudGFsIHN0ZXBzOlxuXG4qKkRpdmluZyBpbnRvIGBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW5gIGFjdHVhbGx5ICpkb2VzKi4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQsIGFzIGFsd2F5cywgaXMgdG8ganVzdCAqcmVhZCB0aGUgY29kZSouIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGl0c2VsZiB0byBnZXQgdGhlIGdpc3Qgb2YgaXRzIG9wZXJhdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbnB1dCBwYXJhbWV0ZXJzLCBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFueSBjYWxscyB0byBvdGhlciBmdW5jdGlvbnMgb3IgbGlicmFyaWVzIHRoYXQgbWlnaHQgcHJvdmlkZSBjbHVlcyBhYm91dCB0aGUgdGFzayBpdCdzIGRlc2lnbmVkIHRvIGFjY29tcGxpc2guIEknbGwgYmUgcGF5aW5nIGF0dGVudGlvbiB0byBob3cgaXQgaGFuZGxlcyBlZGdlIGNhc2VzIG9yIGVycm9yIGNvbmRpdGlvbnMuIEVzc2VudGlhbGx5LCBJJ20gZm9ybWluZyBhIG1lbnRhbCBtb2RlbCBvZiB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlIGJ5IGZvbGxvd2luZyB0aGUgZXhlY3V0aW9uIGZsb3cuIEZyb20gdGhlcmUgSSdsbCBzdGFydCBmb3JtdWxhdGluZyBhbiBvcGluaW9uIG9uIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6NTc6MjMuNjQzNjUzNDdaIiwiU2VxIjo4MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM2NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDM2NjpcXHR2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG40MzY3OlxcdHtcXG40MzY4OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlICpicjtcXG40MzY5OlxcdFxcbjQzNzA6XFx0XFx0LyogaXQncyBva2F5IHRvIGNoZWNrIGZvciB0aGUgZmxhZyB3aXRob3V0IHRoZSBtdWx0aWNhc3QgbG9jayBiZWNhdXNlIGl0XFxuNDM3MTpcXHRcXHQgKiBjYW4gb25seSBjaGFuZ2UgdW5kZXIgUlROTCAtXFx1MDAzZSBtdWx0aWNhc3RfbG9jaywgd2UgbmVlZCB0aGUgbGF0dGVyIHRvXFxuNDM3MjpcXHRcXHQgKiBzeW5jIHdpdGggdGltZXJzIGFuZCBwYWNrZXRzXFxuNDM3MzpcXHRcXHQgKi9cXG40Mzc0OlxcdFxcdGlmIChvbiA9PSAhISh2bGFuLVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgQlJfVkxGTEFHX01DQVNUX0VOQUJMRUQpKVxcbjQzNzU6XFx0XFx0XFx0cmV0dXJuO1xcbjQzNzY6XFx0XFxuNDM3NzpcXHRcXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpIHtcXG40Mzc4OlxcdFxcdFxcdGJyID0gdmxhbi1cXHUwMDNlYnI7XFxuNDM3OTpcXHRcXG40MzgwOlxcdFxcdFxcdGlmIChvbiBcXHUwMDI2XFx1MDAyNlxcbjQzODE6XFx0XFx0XFx0ICAgICghYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pIHx8XFxuNDM4MjpcXHRcXHRcXHQgICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXFx1MDAyNnZsYW4tXFx1MDAzZWJyX21jYXN0X2N0eCkpKVxcbjQzODM6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjQzODQ6XFx0XFxuNDM4NTpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfbG9jayk7XFxuNDM4NjpcXHRcXHRcXHR2bGFuLVxcdTAwM2Vwcml2X2ZsYWdzIF49IEJSX1ZMRkxBR19NQ0FTVF9FTkFCTEVEO1xcbjQzODc6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfbG9jayk7XFxuNDM4ODpcXHRcXG40Mzg5OlxcdFxcdFxcdGlmIChvbilcXG40MzkwOlxcdFxcdFxcdFxcdF9fYnJfbXVsdGljYXN0X29wZW4oXFx1MDAyNnZsYW4tXFx1MDAzZWJyX21jYXN0X2N0eCk7XFxuNDM5MTpcXHRcXHRcXHRlbHNlXFxuNDM5MjpcXHRcXHRcXHRcXHRfX2JyX211bHRpY2FzdF9zdG9wKFxcdTAwMjZ2bGFuLVxcdTAwM2Vicl9tY2FzdF9jdHgpO1xcbjQzOTM6XFx0XFx0fSBlbHNlIHtcXG40Mzk0OlxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHg7XFxuNDM5NTpcXHRcXG40Mzk2OlxcdFxcdFxcdGJybWN0eCA9IGJyX211bHRpY2FzdF9wb3J0X2N0eF9nZXRfZ2xvYmFsKFxcdTAwMjZ2bGFuLVxcdTAwM2Vwb3J0X21jYXN0X2N0eCk7XFxuNDM5NzpcXHRcXHRcXHRpZiAob24gXFx1MDAyNlxcdTAwMjYgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChicm1jdHgpKVxcbjQzOTg6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjQzOTk6XFx0XFxuNDQwMDpcXHRcXHRcXHRiciA9IHZsYW4tXFx1MDAzZXBvcnQtXFx1MDAzZWJyO1xcbjQ0MDE6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbjQ0MDI6XFx0XFx0XFx0dmxhbi1cXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfTUNBU1RfRU5BQkxFRDtcXG40NDAzOlxcdFxcdFxcdGlmIChvbilcXG40NDA0OlxcdFxcdFxcdFxcdF9fYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0X2N0eChcXHUwMDI2dmxhbi1cXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xcbjQ0MDU6XFx0XFx0XFx0ZWxzZVxcbjQ0MDY6XFx0XFx0XFx0XFx0X19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChcXHUwMDI2dmxhbi1cXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xcbjQ0MDc6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfbG9jayk7XFxuNDQwODpcXHRcXHR9XFxuNDQwOTpcXHR9XFxuNDQxMDpcXHRcXG40NDExOlxcdHN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbjQ0MTI6XFx0e1xcbjQ0MTM6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDtcXG40NDE0OlxcdFxcbjQ0MTU6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghYnJfdmxhbl9pc19tYXN0ZXIodmxhbikpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOTo1NzoyMy42NDM4NzY3NloiLCJTZXEiOjgzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjU3MzEwODc0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBlcnJvciBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHByZW1hdHVyZSByZXR1cm4gd2hlbiB0cnlpbmcgdG8gZGlzYWJsZSBtdWx0aWNhc3Qgb24gYSBWTEFOIHRoYXQgd2Fzbid0IGEgYnJpZGdlIGVudHJ5IChgIWJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKWAgYW5kIGBvbmAgaXMgZmFsc2UpLiBCYXNpY2FsbHksIGl0IHdhcyBiYWlsaW5nIG91dCB0b28gZWFybHksIGFuZCB0aGF0J3MgdGhlIHByb2JsZW0uXG5cblRoaXMgY291bGQgcmVzdWx0IGluIGEgZmV3IG5hc3R5IG91dGNvbWVzOiBpbmNvcnJlY3Qgc3RhdGUsIHBvc3NpYmxlIG1lbW9yeSBsZWFrcyAoYmVjYXVzZSByZXNvdXJjZXMgbWlnaHQgbm90IGJlIHByb3Blcmx5IGNsZWFuZWQgdXApLCBvciwgZXZlbiB3b3JzZSwgdXNlLWFmdGVyLWZyZWUgYnVncyBpZiBzb21lIGNvbXBvbmVudCBzdWJzZXF1ZW50bHkgdHJpZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgaW5jb3JyZWN0bHkgbWFuYWdlZCBWTEFOLlxuXG5Ib3dldmVyLCBhZnRlciBhIGNsb3NlciBsb29rLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgZG9lc24ndCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UgYXJlbid0IGludHJvZHVjaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgY29tcGxleCBtZW1vcnkgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCB3YXJyYW50IGEgZGVlcCBkaXZlIHdpdGggS01TQU4uIEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgc2hvdWxkIGFic29sdXRlbHkgYmUgc3VmZmljaWVudCB0byBmbGFnIGFueSBwcm9ibGVtcyB0aGF0IGFyaXNlIGZyb20gdGhpcy4gV2UncmUgdGFsa2luZyBhYm91dCBhIGxvZ2ljYWwgY29udHJvbC1mbG93IGVycm9yLCBub3QgYSBkYXRhLWluaXRpYWxpemF0aW9uIHByb2JsZW0uIE5vIG5lZWQgdG8gYnJpbmcgb3V0IHRoZSBiaWcgZ3VucyBoZXJlOyBzdGFuZGFyZCBidWctZGV0ZWN0b3JzIHNob3VsZCBiZSBmaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY1LCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEwOjAxOjQ5LjM3NDk2Nzc4WiIsIlNlcSI6ODQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gdGhhdCBpcyBub3QgYSBicmlkZ2UgZW50cnkgd291bGQgZmFpbCBkdWUgdG8gYW4gaW5jb3JyZWN0IGVhcmx5IHJldHVybiBjb25kaXRpb24uIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudCwgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGxvZ2ljIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbmAgd2hlcmUgZGlzYWJsaW5nIG11bHRpY2FzdCBvbiBhIFZMQU4gdGhhdCBpcyBub3QgYSBicmlkZ2UgZW50cnkgd291bGQgZmFpbCBkdWUgdG8gYW4gaW5jb3JyZWN0IGVhcmx5IHJldHVybiBjb25kaXRpb24uIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudCwgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGxvZ2ljIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowv75fk[1] Phase: Succeeded StartedAt: 2026-08-26 10:02:00 +0000 UTC FinishedAt: 2026-08-26 10:02:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 10:02:00 +0000 UTC FinishedAt: 2026-08-26 10:02:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2] Phase: Succeeded StartedAt: 2026-08-26 10:02:00 +0000 UTC FinishedAt: 2026-08-26 13:45:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:02:00 +0000 UTC FinishedAt: 2026-08-26 13:45:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:02:00 +0000 UTC FinishedAt: 2026-08-26 10:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:02:00 +0000 UTC FinishedAt: 2026-08-26 10:02:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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-workflowv75fk/series-workflowv75fk-convert-artifact-687938594/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:02:10 +0000 UTC FinishedAt: 2026-08-26 10:17:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:02:10 +0000 UTC FinishedAt: 2026-08-26 10:17:55 +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:*912ef0e6-4de2-41ff-a49b-970fb7a67d65,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-workflowv75fk/series-workflowv75fk-convert-artifact-687938594/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": "b1717dd0-f735-4536-bc1a-896213ed2846", "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-workflowv75fk/series-workflowv75fk-build-action-3573456352/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:02:10 +0000 UTC FinishedAt: 2026-08-26 10:17:45 +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:*912ef0e6-4de2-41ff-a49b-970fb7a67d65,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-workflowv75fk/series-workflowv75fk-convert-artifact-687938594/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": "b1717dd0-f735-4536-bc1a-896213ed2846", "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-workflowv75fk/series-workflowv75fk-build-action-3573456352/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:17:55 +0000 UTC FinishedAt: 2026-08-26 10:17:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:17:55 +0000 UTC FinishedAt: 2026-08-26 10:17:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:17:55 +0000 UTC FinishedAt: 2026-08-26 10:18:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:17:55 +0000 UTC FinishedAt: 2026-08-26 10:18:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-workflowv75fk/series-workflowv75fk-convert-artifact-1559338621/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:18:06 +0000 UTC FinishedAt: 2026-08-26 10:20:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:18:06 +0000 UTC FinishedAt: 2026-08-26 10:20:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b1717dd0-f735-4536-bc1a-896213ed2846,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-workflowv75fk/series-workflowv75fk-build-action-3573456352/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-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:20:13 +0000 UTC FinishedAt: 2026-08-26 10:20:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:20:13 +0000 UTC FinishedAt: 2026-08-26 10:20:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:20:13 +0000 UTC FinishedAt: 2026-08-26 10:40:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:20:13 +0000 UTC FinishedAt: 2026-08-26 10:40:19 +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:*912ef0e6-4de2-41ff-a49b-970fb7a67d65,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-workflowv75fk/series-workflowv75fk-convert-artifact-1559338621/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": "d4db3223-a368-4267-af06-d31f5792d63d", "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-workflowv75fk/series-workflowv75fk-build-action-2775670489/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:20:13 +0000 UTC FinishedAt: 2026-08-26 10:39:43 +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:*912ef0e6-4de2-41ff-a49b-970fb7a67d65,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-workflowv75fk/series-workflowv75fk-convert-artifact-1559338621/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": "d4db3223-a368-4267-af06-d31f5792d63d", "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-workflowv75fk/series-workflowv75fk-build-action-2775670489/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:40:19 +0000 UTC FinishedAt: 2026-08-26 10:40:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:40:19 +0000 UTC FinishedAt: 2026-08-26 10:40:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:40:19 +0000 UTC FinishedAt: 2026-08-26 10:42:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:40:19 +0000 UTC FinishedAt: 2026-08-26 10:42:01 +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:*d4db3223-a368-4267-af06-d31f5792d63d,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-workflowv75fk/series-workflowv75fk-build-action-2775670489/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-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:42:11 +0000 UTC FinishedAt: 2026-08-26 13:45:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:42:11 +0000 UTC FinishedAt: 2026-08-26 13:45:01 +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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"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:*b1717dd0-f735-4536-bc1a-896213ed2846,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d4db3223-a368-4267-af06-d31f5792d63d,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-workflowv75fk/series-workflowv75fk-build-action-3573456352/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-workflowv75fk/series-workflowv75fk-build-action-2775670489/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:42:11 +0000 UTC FinishedAt: 2026-08-26 10:42:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:42:11 +0000 UTC FinishedAt: 2026-08-26 10:42:17 +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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"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-workflowv75fk/series-workflowv75fk-convert-artifact-3870871042/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:42:11 +0000 UTC FinishedAt: 2026-08-26 10:42:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:42:11 +0000 UTC FinishedAt: 2026-08-26 10:42:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:42:11 +0000 UTC FinishedAt: 2026-08-26 10:42:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:42:21 +0000 UTC FinishedAt: 2026-08-26 13:45:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv75fk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"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_vlan_add","br_vlan_delete","nbp_vlan_add","nbp_vlan_delete","br_boolopt_toggle","br_vlan_filter_toggle","br_vlan_rtm_process_global_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","INET","VLAN_8021Q","BRIDGE_IGMP_SNOOPING","BRIDGE_VLAN_FILTERING"],"series_id":"947d8bf5-93c8-4bdb-aee0-187f7f530c1f","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-26 10:42:21 +0000 UTC FinishedAt: 2026-08-26 13:44:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b1717dd0-f735-4536-bc1a-896213ed2846,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d4db3223-a368-4267-af06-d31f5792d63d,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-workflowv75fk/series-workflowv75fk-build-action-3573456352/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-workflowv75fk/series-workflowv75fk-build-action-2775670489/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-workflowv75fk/series-workflowv75fk-convert-artifact-3870871042/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,}