Name: series-workflowqwhfr Phase: Succeeded StartedAt: 2026-08-05 16:01:55 +0000 UTC FinishedAt: 2026-08-05 17:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[0] Phase: Succeeded StartedAt: 2026-08-05 16:01:55 +0000 UTC FinishedAt: 2026-08-05 16:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 16:01:55 +0000 UTC FinishedAt: 2026-08-05 16:05:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OVPN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OVPN" ], "series_id": "3dae8b26-6e0d-4d90-91db-8b34ccf5ea49" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovpn_crypto_kill_key", "ovpn_peer_endpoints_update", "ovpn_decrypt_post", "ovpn_encrypt_post" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09WUE4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnBuX2NyeXB0b19raWxsX2tleSYjMzQ7LAogICAgJiMzNDtvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtvdnBuX2RlY3J5cHRfcG9zdCYjMzQ7LAogICAgJiMzNDtvdnBuX2VuY3J5cHRfcG9zdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBpbiB0aGUgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZCBkcml2ZXIgKG92cG4pLiBUaGUgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIGhhbmRsaW5nIGNyeXB0b2dyYXBoaWMga2V5cyBhbmQgcGVlciBlbmRwb2ludCB1cGRhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTljYTczOTFhMjM5ZThlYmJkZDhiOTg4MTQ3Y2E2NjVkN2JmMDA0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTY6MDQ6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmNcbmluZGV4IDkwNTgwZTMyMDUyZmIuLjJjNTZmYjE4MGVkOGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jXG5AQCAtNjAsMTAgJiM0Mzs2MCwxMiBAQCBib29sIG92cG5fY3J5cHRvX2tpbGxfa2V5KHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSAqY3MsIHU4IGtleV9pZClcbiBcdHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MgPSBOVUxMO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNzLVx1MDAzZWxvY2spO1xuLVx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cdTAwM2VzbG90c1swXSktXHUwMDNla2V5X2lkID09IGtleV9pZCkge1xuJiM0MztcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMF0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICByY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMF0pLVx1MDAzZWtleV9pZCA9PSBrZXlfaWQpIHtcbiBcdFx0a3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzBdLCBOVUxMLFxuIFx0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmNzLVx1MDAzZWxvY2spKTtcbi1cdH0gZWxzZSBpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzFdKS1cdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XG4mIzQzO1x0fSBlbHNlIGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMV0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgcmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzFdKS1cdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XG4gXHRcdGtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy1cdTAwM2VzbG90c1sxXSwgTlVMTCxcbiBcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZjcy1cdTAwM2Vsb2NrKSk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMgYi9kcml2ZXJzL25ldC9vdnBuL3BlZXIuY1xuaW5kZXggYTIxZDAyYWM3MTVlMC4uMDM4ODZjNDZlYzg1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL3BlZXIuY1xuQEAgLTMwMiw3ICYjNDM7MzAyLDEyIEBAIHZvaWQgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBlZXItXHUwMDNlbG9jayk7XG4gXHRcdGJpbmQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBlZXItXHUwMDNlYmluZCxcbiBcdFx0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnBlZXItXHUwMDNlbG9jaykpO1xuLVx0XHRpZiAodW5saWtlbHkoIWJpbmQpKSB7XG4mIzQzO1x0XHQvKiBwZWVyLVx1MDAzZWxvY2sgd2FzIHJlbGVhc2VkIGFib3ZlLCB0aGVyZWZvcmUgdGhlIHBlZXIgbWF5IGhhdmVcbiYjNDM7XHRcdCAqIGJlZW4gcmVtb3ZlZCBpbiB0aGUgbWVhbnRpbWU6IG92cG5fcGVlcl9yZW1vdmUoKSB1bmhhc2hlc1xuJiM0MztcdFx0ICogaGFzaF9lbnRyeV9pZCB1bmRlciBvdnBuLVx1MDAzZWxvY2suIFJlLWxpbmtpbmcgYSByZW1vdmVkIHBlZXJcbiYjNDM7XHRcdCAqIHdvdWxkIGxlYXZlIGl0IHJlYWNoYWJsZSBhZnRlciBpdCBoYXMgYmVlbiBmcmVlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KCFiaW5kIHx8IGhsaXN0X3VuaGFzaGVkKFx1MDAyNnBlZXItXHUwMDNlaGFzaF9lbnRyeV9pZCkpKSB7XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwZWVyLVx1MDAzZW92cG4tXHUwMDNlbG9jayk7XG4gXHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPVlBOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3Zwbl9jcnlwdG9fa2lsbF9rZXkmIzM0OywKICAgICYjMzQ7b3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGUmIzM0OywKICAgICYjMzQ7b3Zwbl9kZWNyeXB0X3Bvc3QmIzM0OywKICAgICYjMzQ7b3Zwbl9lbmNyeXB0X3Bvc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgaW4gdGhlIE9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWQgZHJpdmVyIChvdnBuKS4gVGhlIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyBoYW5kbGluZyBjcnlwdG9ncmFwaGljIGtleXMgYW5kIHBlZXIgZW5kcG9pbnQgdXBkYXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU5Y2E3MzkxYTIzOWU4ZWJiZGQ4Yjk4ODE0N2NhNjY1ZDdiZjAwNGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDE2OjA0OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMKaW5kZXggOTA1ODBlMzIwNTJmYi4uMmM1NmZiMTgwZWQ4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jCkBAIC02MCwxMCAmIzQzOzYwLDEyIEBAIGJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKQogCXN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MgPSBOVUxMOwogCiAJc3Bpbl9sb2NrX2JoKCZhbXA7Y3MtJmd0O2xvY2spOwotCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3MtJmd0O3Nsb3RzWzBdKS0mZ3Q7a2V5X2lkID09IGtleV9pZCkgewomIzQzOwlpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLSZndDtzbG90c1swXSkgJmFtcDsmYW1wOwomIzQzOwkgICAgcmN1X2FjY2Vzc19wb2ludGVyKGNzLSZndDtzbG90c1swXSktJmd0O2tleV9pZCA9PSBrZXlfaWQpIHsKIAkJa3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLSZndDtzbG90c1swXSwgTlVMTCwKIAkJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2NzLSZndDtsb2NrKSk7Ci0JfSBlbHNlIGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3MtJmd0O3Nsb3RzWzFdKS0mZ3Q7a2V5X2lkID09IGtleV9pZCkgewomIzQzOwl9IGVsc2UgaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy0mZ3Q7c2xvdHNbMV0pICZhbXA7JmFtcDsKJiM0MzsJCSAgIHJjdV9hY2Nlc3NfcG9pbnRlcihjcy0mZ3Q7c2xvdHNbMV0pLSZndDtrZXlfaWQgPT0ga2V5X2lkKSB7CiAJCWtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy0mZ3Q7c2xvdHNbMV0sIE5VTEwsCiAJCQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtjcy0mZ3Q7bG9jaykpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vcGVlci5jIGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMKaW5kZXggYTIxZDAyYWM3MTVlMC4uMDM4ODZjNDZlYzg1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMKQEAgLTMwMiw3ICYjNDM7MzAyLDEyIEBAIHZvaWQgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7cGVlci0mZ3Q7bG9jayk7CiAJCWJpbmQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBlZXItJmd0O2JpbmQsCiAJCQkJCQkgbG9ja2RlcF9pc19oZWxkKCZhbXA7cGVlci0mZ3Q7bG9jaykpOwotCQlpZiAodW5saWtlbHkoIWJpbmQpKSB7CiYjNDM7CQkvKiBwZWVyLSZndDtsb2NrIHdhcyByZWxlYXNlZCBhYm92ZSwgdGhlcmVmb3JlIHRoZSBwZWVyIG1heSBoYXZlCiYjNDM7CQkgKiBiZWVuIHJlbW92ZWQgaW4gdGhlIG1lYW50aW1lOiBvdnBuX3BlZXJfcmVtb3ZlKCkgdW5oYXNoZXMKJiM0MzsJCSAqIGhhc2hfZW50cnlfaWQgdW5kZXIgb3Zwbi0mZ3Q7bG9jay4gUmUtbGlua2luZyBhIHJlbW92ZWQgcGVlcgomIzQzOwkJICogd291bGQgbGVhdmUgaXQgcmVhY2hhYmxlIGFmdGVyIGl0IGhhcyBiZWVuIGZyZWVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAodW5saWtlbHkoIWJpbmQgfHwgaGxpc3RfdW5oYXNoZWQoJmFtcDtwZWVyLSZndDtoYXNoX2VudHJ5X2lkKSkpIHsKIAkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7cGVlci0mZ3Q7bG9jayk7CiAJCQlzcGluX3VubG9ja19iaCgmYW1wO3BlZXItJmd0O292cG4tJmd0O2xvY2spOwogCQkJcmV0dXJuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQ5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT3BlblZQTiBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jYCBhbmQgYGRyaXZlcnMvbmV0L292cG4vcGVlci5jYC4gVGhlIGNoYW5nZXMgc2VlbSBzdHJhaWdodGZvcndhcmQ7IHRoZXkmIzM5O3JlIHB1dHRpbmcgaW4gc29tZSBOVUxMIGNoZWNrcyBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGFuZCwgbW9yZSBpbnRlcmVzdGluZ2x5LCBhIGNoZWNrIGZvciBgaGxpc3RfdW5oYXNoZWQoJmFtcDtwZWVyLSZndDtoYXNoX2VudHJ5X2lkKWAgd2l0aGluIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAuIE15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBmdW5jdGlvbmFsLCBhZGRyZXNzaW5nIHNvbWUgY3JpdGljYWwgdnVsbmVyYWJpbGl0aWVzLiBTcGVjaWZpY2FsbHksIHdlJiMzOTtyZSBsb29raW5nIGF0IHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBsaWtlbHkgYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gY2F0Y2ggYmVmb3JlIHRoZXkgYmVjb21lIGlzc3Vlcy4KClRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgdGhlIGBvdnBuYCBkcml2ZXIsIHdoaWNoIGZyb20gbWVtb3J5IGhhbmRsZXMgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZGluZy4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIEtjb25maWcgdG8gc2VlIGhvdyB0aGlzIGRyaXZlciBpcyBjb25maWd1cmVkIGFuZCBpZiBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBUaGVzZSBraW5kcyBvZiBsb3ctbGV2ZWwgbWVtb3J5IHNhZmV0eSBmaXhlcyBhcmUgYWx3YXlzIGltcG9ydGFudCB0byBjYXRjaCwgc28gSSYjMzk7bGwgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIG5vdyB0byBiZXR0ZXIgdW5kZXJzdGFuZCB3aGF0IHRoZSB0ZWFtIGlzIHRyeWluZyB0byBwcmV2ZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPVlBOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9OTI9Y29uZmlnIFdJUkVHVUFSRF9ERUJVR1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMTAyLVxuZHJpdmVycy9uZXQvS2NvbmZpZzoxMDM6Y29uZmlnIE9WUE5cbmRyaXZlcnMvbmV0L0tjb25maWctMTA0LVx0dHJpc3RhdGUgXCYjMzQ7T3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgT1ZQTiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBPVlBOYCB0aGluZy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBiZWZvcmUgSSBldmVuIHN0YXJ0IHRoaW5raW5nIGFib3V0IGNvbmZpZ3VyYXRpb24gb3IgdHJvdWJsZXNob290aW5nLCBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBtYXAgb3V0IHRoZSBlbnRpcmUgZWNvc3lzdGVtIHRoYXQgdGhpcyByZWxpZXMgb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgb3BlcmF0aW5nIHN5c3RlbSwgYW55IGNvcmUgbGlicmFyaWVzLCBhbmQgYW55IG5ldHdvcmsgc2VydmljZXMgb3Igc29mdHdhcmUgaXQgbGV2ZXJhZ2VzLiBJcyBpdCBzdGF0aWNhbGx5IGxpbmtlZCBhZ2FpbnN0IGFueXRoaW5nIHVudXN1YWw/IFdoYXQgYWJvdXQgaXRzIGNyeXB0byBsaWJyYXJpZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgdmVyc2lvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IG9yIGF2b2lkIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXM/IFJlYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gdmlzdWFsaXplIHRoZSBlbnRpcmUgZGVwZW5kZW5jeSB0cmVlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIHByb3BlciBkZXBsb3ltZW50LCBzZWN1cml0eSBhbmFseXNpcywgYW5kIGVmZmljaWVudCB0cm91Ymxlc2hvb3RpbmcgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcbiAxMDE6XHRcdCAgU2F5IE4gaGVyZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UmIzM5O3JlIGRvaW5nLlxuIDEwMjpcdFxuIDEwMzpcdGNvbmZpZyBPVlBOXG4gMTA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkXCYjMzQ7XG4gMTA1Olx0XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgSU5FVFxuIDEwNjpcdFx0c2VsZWN0IERTVF9DQUNIRVxuIDEwNzpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gMTA4Olx0XHRzZWxlY3QgQ1JZUFRPXG4gMTA5Olx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuIDExMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAxMTE6XHRcdHNlbGVjdCBDUllQVE9fQ0hBQ0hBMjBQT0xZMTMwNVxuIDExMjpcdFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbiAxMTM6XHRcdGhlbHBcbiAxMTQ6XHRcdCAgVGhpcyBtb2R1bGUgZW5oYW5jZXMgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBPcGVuVlBOIHVzZXJzcGFjZSBzb2Z0d2FyZVxuIDExNTpcdFx0ICBieSBvZmZsb2FkaW5nIHRoZSBkYXRhIGNoYW5uZWwgcHJvY2Vzc2luZyB0byBrZXJuZWxzcGFjZS5cbiAxMTY6XHRcbiAxMTc6XHRjb25maWcgRVFVQUxJWkVSXG4gMTE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtFUUwgKHNlcmlhbCBsaW5lIGxvYWQgYmFsYW5jaW5nKSBzdXBwb3J0XCYjMzQ7XG4gMTE5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgT1ZQTiBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBNb2RpZmljYXRpb25zKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgYE9WUE5gIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIHdpdGhpbiB0aGF0IGNvbnRleHQ6IGBvdnBuX2NyeXB0b19raWxsX2tleWAgYW5kIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAuIFRoZSBrZXkgcXVlc3Rpb24gaGVyZSwgdGhlIGltbWVkaWF0ZSBjb25jZXJuLCBpcyB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgb3Igc3RhdGljLiBUaGlzIGlzIGdvaW5nIHRvIGRyYXN0aWNhbGx5IGltcGFjdCBob3cgd2UgbmVlZCB0byBhcHByb2FjaCBhbnkgYW5hbHlzaXMgb3IgcG90ZW50aWFsIGRlYnVnZ2luZy4gVW5kZXJzdGFuZGluZyB0aGVpciBzY29wZSBhbmQgdmlzaWJpbGl0eSBpcyBlc3NlbnRpYWwgdG8gZnVydGhlciB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292cG5fY3J5cHRvX2tpbGxfa2V5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYz00MD12b2lkIG92cG5fY3J5cHRvX3N0YXRlX3JlbGVhc2Uoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcylcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jLTU3LS8qIHJlbW92ZXMgdGhlIGtleSBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIGlkIGZyb20gdGhlIGNyeXB0byBjb250ZXh0ICovXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jOjU4OmJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy01OS17XG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaD0xMzk9aW50IG92cG5fY3J5cHRvX2NvbmZpZ19nZXQoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcyxcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oLTE0Mi1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmg6MTQzOmJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKTtcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgtMTQ0LVxuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYz0yMzg9dm9pZCBvdnBuX2VuY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYy0yNjQtXHRcdFx0ICAgIHBlZXItXHUwMDNlaWQpO1xuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjI2NTpcdFx0aWYgKG92cG5fY3J5cHRvX2tpbGxfa2V5KFx1MDAyNnBlZXItXHUwMDNlY3J5cHRvLCBrcy1cdTAwM2VrZXlfaWQpKVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTI2Ni1cdFx0XHQvKiBsZXQgdXNlcnNwYWNlIGtub3cgc28gdGhhdCBhIG5ldyBrZXkgbXVzdCBiZSBuZWdvdGlhdGVkICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBPcGVuVlBOJiMzOTtzIENyeXB0b2dyYXBoeSoqCgpPa2F5LCBzbyBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgb3Zwbl9lbmNyeXB0X3Bvc3RgLCB3aGljaCwganVkZ2luZyBieSB0aGUgbmFtZSwgbG9va3MgbGlrZSBpdCYjMzk7cyBjb25uZWN0ZWQgdG8gYXN5bmNocm9ub3VzIGNyeXB0byBvcGVyYXRpb25zLiBQcm9iYWJseSBhIGNhbGxiYWNrIG9yIGEgcG9zdC1wcm9jZXNzaW5nIGZ1bmN0aW9uIGFmdGVyIGVuY3J5cHRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGZsb3cuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgga2V5cyBhbmQgZW5jcnlwdGlvbiBwcm9jZXNzZXMsIGxldCYjMzk7cyBzZWUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBwZWVyIGVuZHBvaW50IHVwZGF0ZXMuIEkmIzM5O2xsIGNoZWNrIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhIGxpbmsgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9pby5jPTEwOD12b2lkIG92cG5fZGVjcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTE1MC1cdFx0LyogY2hlY2sgaWYgdGhpcyBwZWVyIGNoYW5nZWQgbG9jYWwgb3IgcmVtb3RlIGVuZHBvaW50ICovXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MTUxOlx0XHRvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZShwZWVyLCBza2IpO1xuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTE1Mi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L292cG4vcGVlci5jPTE0Mz1pbnQgb3Zwbl9wZWVyX3Jlc2V0X3NvY2thZGRyKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMtMTkyLS8qKlxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmM6MTkzOiAqIG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlIC0gdXBkYXRlIHJlbW90ZSBvciBsb2NhbCBlbmRwb2ludCBmb3IgcGVlclxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMtMTk0LSAqIEBwZWVyOiBwZWVyIHRvIHVwZGF0ZSB0aGUgcmVtb3RlIGVuZHBvaW50IGZvclxuLS1cbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTE5Ni0gKi9cbmRyaXZlcnMvbmV0L292cG4vcGVlci5jOjE5Nzp2b2lkIG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuYy0xOTgte1xuLS1cbmRyaXZlcnMvbmV0L292cG4vcGVlci5oPTE1Nz12b2lkIG92cG5fcGVlcl9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmgtMTU4LVxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmg6MTU5OnZvaWQgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuaC0xNjAtaW50IG92cG5fcGVlcl9yZXNldF9zb2NrYWRkcihzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzk0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuCgoqKkluaXRpYWwgQXNzZXNzbWVudDogRnV6emluZyBDYW5kaWRhdGVzKioKCkFscmlnaHQsIGxvb2tpbmcgYXQgYG92cG5fZGVjcnlwdF9wb3N0YCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1llcywgdGhlc2UgbG9vayBsaWtlIHByb21pc2luZyB0YXJnZXRzIGZvciBmdXp6aW5nLiYjMzQ7IEVuY3J5cHRpb24vZGVjcnlwdGlvbiByb3V0aW5lcyBhcmUgb2Z0ZW4gcHJpbWUgc3BvdHMgdG8gdW5jb3ZlciB2dWxuZXJhYmlsaXRpZXMuIEhvd2V2ZXIsIGEgcG90ZW50aWFsIGNhdmVhdCBwb3BzIHVwIOKAkyB0aGV5ICptaWdodCogYmUgaW50ZXJuYWwgZnVuY3Rpb25zLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlaXIgc2NvcGUgYW5kIGlmIHRoZXkmIzM5O3JlIGV4cG9zZWQgdG8gdW50cnVzdGVkIGlucHV0LiBMZXQmIzM5O3MgdHJhY2UgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKnVzZWQqIHRvIHVuZGVyc3RhbmQgdGhlaXIgY2FsbCBjb250ZXh0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3Zwbl9kZWNyeXB0X3Bvc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmM9MjQwPWludCBvdnBuX2FlYWRfZGVjcnlwdChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYy0zMTctXHRhZWFkX3JlcXVlc3Rfc2V0X3RmbShyZXEsIGtzLVx1MDAzZWRlY3J5cHQpO1xuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5jOjMxODpcdGFlYWRfcmVxdWVzdF9zZXRfY2FsbGJhY2socmVxLCAwLCBvdnBuX2RlY3J5cHRfcG9zdCwgc2tiKTtcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYy0zMTktXHRhZWFkX3JlcXVlc3Rfc2V0X2NyeXB0KHJlcSwgc2csIHNnLCBwYXlsb2FkX2xlbiAmIzQzOyB0YWdfc2l6ZSwgaXYpO1xuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYz02MD1zdGF0aWMgdm9pZCBvdnBuX25ldGRldl93cml0ZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYy04Ni1cbmRyaXZlcnMvbmV0L292cG4vaW8uYzo4NzpcdC8qIG5ldHdvcmsgaGVhZGVyIHJlc2V0IGluIG92cG5fZGVjcnlwdF9wb3N0KCkgKi9cbmRyaXZlcnMvbmV0L292cG4vaW8uYy04OC1cdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTEwNy1cbmRyaXZlcnMvbmV0L292cG4vaW8uYzoxMDg6dm9pZCBvdnBuX2RlY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTEwOS17XG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jPTIxND12b2lkIG92cG5fcmVjdihzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYy0yMzQtXHRtZW1zZXQob3Zwbl9za2JfY2Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBvdnBuX2NiKSk7XG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MjM1Olx0b3Zwbl9kZWNyeXB0X3Bvc3Qoc2tiLCBvdnBuX2FlYWRfZGVjcnlwdChwZWVyLCBrcywgc2tiKSk7XG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjM2LX1cbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmg9MzE9dm9pZCBvdnBuX2VuY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KTtcbmRyaXZlcnMvbmV0L292cG4vaW8uaDozMjp2b2lkIG92cG5fZGVjcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpO1xuZHJpdmVycy9uZXQvb3Zwbi9pby5oLTMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTc5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipQYWNrZXQgUmVjZXB0aW9uIGluIE9wZW5WUE46IGBvdnBuX3JlY3ZgKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHBhY2tldCByZWNlcHRpb24gaW4gT3BlblZQTiwgYXMgeW91JiMzOTtkIGV4cGVjdCwgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBgb3Zwbl9yZWN2YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBwbGFjZSB0aGUgcmVjZWl2ZWQgZGF0YSBoaXRzLiBJdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciwgdGhlIGluaXRpYWwgcG9pbnQgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbmV0d29yayB0cmFmZmljLiBVbmRlcnN0YW5kaW5nIHdoYXQgaGFwcGVucyAqYWZ0ZXIqIHRoYXQsIHdpdGhpbiBgb3Zwbl9yZWN2YCBhbmQgdGhlIHN1YnNlcXVlbnQgcHJvY2Vzc2luZyBzdGFnZXMsIGlzIGNydWNpYWwuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGRlY3J5cHRpb24sIGF1dGhlbnRpY2F0aW9uIGNoZWNrcywgcG90ZW50aWFsIHJlYXNzZW1ibHksIGFuZCB0aGVuIG9ud2FyZCB0byB0aGUgdHVubmVsIGludGVyZmFjZS4gQnV0LCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBpbmNvbWluZyBkYXRhLCBgb3Zwbl9yZWN2YCAqaXMqIHRoZSBzdGFydGluZyBsaW5lLiBJIGltbWVkaWF0ZWx5IGJlZ2luIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGlzIGFyY2hpdGVjdGVkIHRvIGhhbmRsZSBtdWx0aXBsZSBjb25uZWN0aW9ucyBvciBhbnkgb3RoZXIgc3BlY2lmaWMgb3B0aW1pemF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3Zwbl9yZWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9pby5jPTEwOD12b2lkIG92cG5fZGVjcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTIxMy0vKiBSWCBwYXRoIGVudHJ5IHBvaW50OiBkZWNyeXB0IHBhY2tldCBhbmQgZm9yd2FyZCBpdCB0byB0aGUgZGV2aWNlICovXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MjE0OnZvaWQgb3Zwbl9yZWN2KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjE1LXtcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmg9MjU9bmV0ZGV2X3R4X3Qgb3Zwbl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L292cG4vaW8uaC0yNi1cbmRyaXZlcnMvbmV0L292cG4vaW8uaDoyNzp2b2lkIG92cG5fcmVjdihzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L292cG4vaW8uaC0yOC12b2lkIG92cG5feG1pdF9zcGVjaWFsKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIGNvbnN0IHZvaWQgKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi90Y3AuYz0xMDI9c3RhdGljIHZvaWQgb3Zwbl90Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi90Y3AuYy0xMzktXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jOjE0MDpcdC8qIGhvbGQgcmVmZXJlbmNlIHRvIHBlZXIgYXMgcmVxdWlyZWQgYnkgb3Zwbl9yZWN2KCkuXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jLTE0MS1cdCAqXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi90Y3AuYy0xNDctXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jOjE0ODpcdG92cG5fcmVjdihwZWVyLCBza2IpO1xuZHJpdmVycy9uZXQvb3Zwbi90Y3AuYy0xNDktXHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYz02Nz1zdGF0aWMgaW50IG92cG5fdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtMTIzLVx0X19za2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jOjEyNDpcdG92cG5fcmVjdihwZWVyLCBza2IpO1xuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy0xMjUtXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqTmV0d29yayBQYWNrZXQgSGFuZGxpbmcgLSBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgT3BlblZQTiBhY3R1YWxseSBpbnRlcmZhY2VzIHdpdGggdGhlIG5ldHdvcmsuIEkga25vdyB0aGF0IGBvdnBuX3VkcF9lbmNhcF9yZWN2YCBhbmQgYG92cG5fdGNwX3JjdmAgYXJlIHRoZSByZWFsIGVudHJ5IHBvaW50cyBmb3IgcmVjZWl2aW5nIHBhY2tldHMsIHRoZSBpbml0aWFsIGhvb2tzIGZyb20gdGhlIG5ldHdvcmsgc3RhY2sgaW50byB0aGUgT3BlblZQTiBjb2RlLiAgT24gdGhlIG90aGVyIHNpZGUgb2YgdGhpbmdzLCBpdCBzZWVtcyBsaWtlIGBvdnBuX25ldF94bWl0YCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIHNlbmRpbmcgcGFja2V0cyBvdXQsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRhdGEgZ29lcyB0byBiZSBwdXQgb24gdGhlIHdpcmUuIEdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG9uIGBvdnBuX25ldF94bWl0YCBzaW5jZSB0aGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292cG5fbmV0X3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuL2lvLmM9MzM2PXN0YXRpYyB2b2lkIG92cG5fc2VuZChzdHJ1Y3Qgb3Zwbl9wcml2ICpvdnBuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYy0zNTUtICovXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MzU2Om5ldGRldl90eF90IG92cG5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0zNTcte1xuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uaD0yMz1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBvdnBuX2tlZXBhbGl2ZV9tZXNzYWdlW09WUE5fS0VFUEFMSVZFX1NJWkVdO1xuZHJpdmVycy9uZXQvb3Zwbi9pby5oLTI0LVxuZHJpdmVycy9uZXQvb3Zwbi9pby5oOjI1Om5ldGRldl90eF90IG92cG5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9vdnBuL2lvLmgtMjYtXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9tYWluLmM9MTAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgb3Zwbl9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jLTEwMi1cdC5uZG9fdW5pbml0XHRcdD0gb3Zwbl9uZXRfdW5pbml0LFxuZHJpdmVycy9uZXQvb3Zwbi9tYWluLmM6MTAzOlx0Lm5kb19zdGFydF94bWl0XHRcdD0gb3Zwbl9uZXRfeG1pdCxcbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jLTEwNC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgT3BlblZQTiBzZWN1cml0eToKCioqRGVidWdnaW5nIE9wZW5WUE4gQ3J5cHRvIEtleSBIYW5kbGluZyoqCgpBbHJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgd2l0aGluIGBvdnBuX2NyeXB0b19raWxsX2tleWAgYW5kIHRoZSBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0IG9mIGBvdnBuX2NyeXB0b19raWxsX2tleWAuIEl0IHNlZW1zIHRoZSBidWcgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBvdnBuX2NyeXB0b19raWxsX2tleWAgaXMgY2FsbGVkIHVuZGVyIGJvdGggc3VjY2VzcyBhbmQgZmFpbHVyZSBjb25kaXRpb25zIHdpdGhpbiBgb3Zwbl9lbmNyeXB0X3Bvc3RgLiBUaGlzIHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgaW5jb3JyZWN0IGNsZWFudXAgaWYgYG92cG5fZW5jcnlwdF9wb3N0YCBkb2VzbiYjMzk7dCBjb25zaXN0ZW50bHkgdHJpZ2dlciBpdCBpbiBvbmUgY29uZGl0aW9uIG9yIGFub3RoZXIuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgbG9naWMgb2YgYG92cG5fZW5jcnlwdF9wb3N0YCBpdHNlbGYgdG8gY2xhcmlmeSB0aGUgZXhhY3Qgc2NlbmFyaW9zIHRoYXQgbGVhZCB0byBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGJlaW5nIGludm9rZWQuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgbGlrZWx5IHJvb3QgY2F1c2Ugb2YgdGhlIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3Zwbl9lbmNyeXB0X3Bvc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmM9MTM3PWludCBvdnBuX2FlYWRfZW5jcnlwdChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYy0yMzAtXHRhZWFkX3JlcXVlc3Rfc2V0X3RmbShyZXEsIGtzLVx1MDAzZWVuY3J5cHQpO1xuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5jOjIzMTpcdGFlYWRfcmVxdWVzdF9zZXRfY2FsbGJhY2socmVxLCAwLCBvdnBuX2VuY3J5cHRfcG9zdCwgc2tiKTtcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYy0yMzItXHRhZWFkX3JlcXVlc3Rfc2V0X2NyeXB0KHJlcSwgc2csIHNnLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYz0yMTQ9dm9pZCBvdnBuX3JlY3Yoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjM3LVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjIzODp2b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjM5LXtcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM9MzEyPXN0YXRpYyBib29sIG92cG5fZW5jcnlwdF9vbmUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMzIxLVx0LyogdGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgcGVlciBiZWNhdXNlIHRoZSBjcnlwdG8gY29kZSBtYXkgcnVuIGFzeW5jLlxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjMyMjpcdCAqIG92cG5fZW5jcnlwdF9wb3N0KCkgd2lsbCByZWxlYXNlIGl0IHVwb24gY29tcGxldGlvblxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTMyMy1cdCAqL1xuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYy0zMzAtXHRtZW1zZXQob3Zwbl9za2JfY2Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBvdnBuX2NiKSk7XG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MzMxOlx0b3Zwbl9lbmNyeXB0X3Bvc3Qoc2tiLCBvdnBuX2FlYWRfZW5jcnlwdChwZWVyLCBrcywgc2tiKSk7XG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMzMyLVx0cmV0dXJuIHRydWU7XG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5oPTI4PXZvaWQgb3Zwbl94bWl0X3NwZWNpYWwoc3RydWN0IG92cG5fcGVlciAqcGVlciwgY29uc3Qgdm9pZCAqZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmgtMzAtXG5kcml2ZXJzL25ldC9vdnBuL2lvLmg6MzE6dm9pZCBvdnBuX2VuY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KTtcbmRyaXZlcnMvbmV0L292cG4vaW8uaC0zMi12b2lkIG92cG5fZGVjcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTU4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgUG9zdC1FbmNyeXB0aW9uIFByb2Nlc3MgaW4gT3BlblZQTioqCgpBbHJpZ2h0LCBzbyB0aGUgcG9zdC1lbmNyeXB0aW9uIHN0YWdlLCBzcGVjaWZpY2FsbHkgYG92cG5fZW5jcnlwdF9wb3N0YCwgaGFzIGdyYWJiZWQgbXkgYXR0ZW50aW9uLiBJIGtub3cgaXQmIzM5O3MgYSBjcnVjaWFsIHN0ZXAsIG9jY3VycmluZywgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIHJpZ2h0IGFmdGVyIHRoZSBkYXRhIGhhcyBiZWVuIGVuY3J5cHRlZCBpbiB0aGUgT3BlblZQTiBwcm9jZXNzLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O1doZXJlJiMzOTtzIHRoZSBpbXBsZW1lbnRhdGlvbj8gVGltZSB0byB0cmFjayB0aGlzIGRvd24gYW5kIHVuZGVyc3RhbmQgaXRzIGV4YWN0IHJvbGUuJiMzNDsKCk15IGluc3RpbmN0cyB0ZWxsIG1lIHRvIGp1bXAgaW50byB0aGUgYGRyaXZlcnMvbmV0L292cG4vaW8uY2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBnby10byBsb2NhdGlvbiBmb3IgY29yZSBJL08gb3BlcmF0aW9ucyBhbmQgbmV0d29yayBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBPcGVuVlBOIGtlcm5lbCBtb2R1bGVzLiBUaGUgYGlvLmNgIGZpbGUgaXMgbGlrZWx5IHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGxvZ2ljIGJlaGluZCB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgYWZ0ZXIgdGhlIGRhdGEgaXMgc2NyYW1ibGVkLCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCBpcyB0aGUga2V5IHRvIHRoYXQgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBhbnRpY2lwYXRlIGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgZmluYWwgcGFja2V0IGFzc2VtYmx5LCBwb3RlbnRpYWxseSBhZGRpbmcgaGVhZGVycywgcHJlcGFyaW5nIHRoZSBkYXRhIGZvciB0cmFuc21pc3Npb24gb3IgaGFuZGxpbmcgYW55IG5lY2Vzc2FyeSBwb3N0LWVuY3J5cHRpb24gdHJhbnNmb3JtYXRpb25zLCBvciBldmVuIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIHZlcmlmeSBteSBleHBlY3RhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9pby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzg6XHR2b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXG4gMjM5Olx0e1xuIDI0MDpcdFx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcztcbiAyNDE6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBkYXRhO1xuIDI0MjpcdFx0c3RydWN0IG92cG5fc29ja2V0ICpzb2NrO1xuIDI0MzpcdFx0c3RydWN0IG92cG5fcGVlciAqcGVlcjtcbiAyNDQ6XHRcdHVuc2lnbmVkIGludCBvcmlnX2xlbjtcbiAyNDU6XHRcbiAyNDY6XHRcdC8qIGVuY3J5cHRpb24gaXMgaGFwcGVuaW5nIGFzeW5jaHJvbm91c2x5LiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmVcbiAyNDc6XHRcdCAqIGNhbGxlZCBsYXRlciBieSB0aGUgY3J5cHRvIGNhbGxiYWNrIHdpdGggYSBwcm9wZXIgcmV0dXJuIHZhbHVlXG4gMjQ4Olx0XHQgKi9cbiAyNDk6XHRcdGlmICh1bmxpa2VseShyZXQgPT0gLUVJTlBST0dSRVNTKSlcbiAyNTA6XHRcdFx0cmV0dXJuO1xuIDI1MTpcdFxuIDI1MjpcdFx0a3MgPSBvdnBuX3NrYl9jYihza2IpLVx1MDAzZWtzO1xuIDI1MzpcdFx0cGVlciA9IG92cG5fc2tiX2NiKHNrYiktXHUwMDNlcGVlcjtcbiAyNTQ6XHRcbiAyNTU6XHRcdC8qIGNyeXB0byBpcyBkb25lLCBjbGVhbnVwIHNrYiBDQiBhbmQgaXRzIG1lbWJlcnMgKi9cbiAyNTY6XHRcdGtmcmVlKG92cG5fc2tiX2NiKHNrYiktXHUwMDNlY3J5cHRvX3RtcCk7XG4gMjU3Olx0XG4gMjU4Olx0XHRpZiAodW5saWtlbHkocmV0ID09IC1FUkFOR0UpKSB7XG4gMjU5Olx0XHRcdC8qIHdlIHJhbiBvdXQgb2YgSVZzIGFuZCB3ZSBtdXN0IGtpbGwgdGhlIGtleSBhcyBpdCBjYW4mIzM5O3QgYmVcbiAyNjA6XHRcdFx0ICogdXNlIGFueW1vcmVcbiAyNjE6XHRcdFx0ICovXG4gMjYyOlx0XHRcdG5ldGRldl93YXJuKHBlZXItXHUwMDNlb3Zwbi1cdTAwM2VkZXYsXG4gMjYzOlx0XHRcdFx0ICAgIFwmIzM0O2tpbGxpbmcga2V5ICV1IGZvciBwZWVyICV1XFxuXCYjMzQ7LCBrcy1cdTAwM2VrZXlfaWQsXG4gMjY0Olx0XHRcdFx0ICAgIHBlZXItXHUwMDNlaWQpO1xuIDI2NTpcdFx0XHRpZiAob3Zwbl9jcnlwdG9fa2lsbF9rZXkoXHUwMDI2cGVlci1cdTAwM2VjcnlwdG8sIGtzLVx1MDAzZWtleV9pZCkpXG4gMjY2Olx0XHRcdFx0LyogbGV0IHVzZXJzcGFjZSBrbm93IHNvIHRoYXQgYSBuZXcga2V5IG11c3QgYmUgbmVnb3RpYXRlZCAqL1xuIDI2NzpcdFx0XHRcdG92cG5fbmxfa2V5X3N3YXBfbm90aWZ5KHBlZXIsIGtzLVx1MDAzZWtleV9pZCk7XG4gMjY4Olx0XG4gMjY5Olx0XHRcdGdvdG8gZXJyO1xuIDI3MDpcdFx0fVxuIDI3MTpcdFxuIDI3MjpcdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpXG4gMjczOlx0XHRcdGdvdG8gZXJyO1xuIDI3NDpcdFxuIDI3NTpcdFx0c2tiX21hcmtfbm90X29uX2xpc3Qoc2tiKTtcbiAyNzY6XHRcdG9yaWdfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiAyNzc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkyMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgRXJyb3IgSGFuZGxpbmcgYW5kIEtleSBNYW5hZ2VtZW50IGluIE9wZW5WUE4qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBmdW5jdGlvbiBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgZXJyb3IgY29kZSBgLUVSQU5HRWAuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGlmIHdlIGdldCBhbiBgLUVSQU5HRWAgZXJyb3IsIGBvdnBuX2NyeXB0b19raWxsX2tleWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgY2FsbGVkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdzsgaXQgbWVhbnMgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBhY3Rpb24gYmVpbmcgdGFrZW4gdG8gaGFuZGxlIHRoYXQgcGFydGljdWxhciByYW5nZSBlcnJvciwgbGlrZWx5IHJlbGF0ZWQgdG8ga2V5IG1hbmFnZW1lbnQgb3IgZGVjcnlwdGlvbi4gSXQgd291bGQgYmUgZ29vZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGEgbGl0dGxlIGJpdCBiZXR0ZXIsIGp1c3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjYWxsLgoKTm93LCBteSBtaW5kIHNoaWZ0cyB0byBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgLiBJIHJlbWVtYmVyIHRoaXMgZnVuY3Rpb24uIEl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgdGhlIGRlY3J5cHRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGZyb20gYG92cG5fZGVjcnlwdF9wb3N0YC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBhbnkgZmFpbHVyZSBkdXJpbmcgZW5kcG9pbnQgdXBkYXRlIGNvdWxkIGNhdXNlIHByb2JsZW1zIGRvd24gdGhlIGxpbmUuIEnigJlkIHdhbnQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgbm90IHNvbWVob3cgcmVsYXRlZCB0byB0aGUgYC1FUkFOR0VgIHNpdHVhdGlvbiBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L292cG4vaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTA4Olx0dm9pZCBvdnBuX2RlY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxuIDEwOTpcdHtcbiAxMTA6XHRcdHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3M7XG4gMTExOlx0XHR1bnNpZ25lZCBpbnQgcGF5bG9hZF9vZmZzZXQgPSAwO1xuIDExMjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRhdGE7XG4gMTEzOlx0XHRzdHJ1Y3Qgb3Zwbl9zb2NrZXQgKnNvY2s7XG4gMTE0Olx0XHRzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyO1xuIDExNTpcdFx0X19iZTE2IHByb3RvO1xuIDExNjpcdFx0X19iZTMyICpwaWQ7XG4gMTE3Olx0XG4gMTE4Olx0XHQvKiBjcnlwdG8gaXMgaGFwcGVuaW5nIGFzeW5jaHJvbm91c2x5LiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkXG4gMTE5Olx0XHQgKiBhZ2FpbiBsYXRlciBieSB0aGUgY3J5cHRvIGNhbGxiYWNrIHdpdGggYSBwcm9wZXIgcmV0dXJuIGNvZGVcbiAxMjA6XHRcdCAqL1xuIDEyMTpcdFx0aWYgKHVubGlrZWx5KHJldCA9PSAtRUlOUFJPR1JFU1MpKVxuIDEyMjpcdFx0XHRyZXR1cm47XG4gMTIzOlx0XG4gMTI0Olx0XHRwYXlsb2FkX29mZnNldCA9IG92cG5fc2tiX2NiKHNrYiktXHUwMDNlcGF5bG9hZF9vZmZzZXQ7XG4gMTI1Olx0XHRrcyA9IG92cG5fc2tiX2NiKHNrYiktXHUwMDNla3M7XG4gMTI2Olx0XHRwZWVyID0gb3Zwbl9za2JfY2Ioc2tiKS1cdTAwM2VwZWVyO1xuIDEyNzpcdFxuIDEyODpcdFx0LyogY3J5cHRvIGlzIGRvbmUsIGNsZWFudXAgc2tiIENCIGFuZCBpdHMgbWVtYmVycyAqL1xuIDEyOTpcdFx0a2ZyZWUob3Zwbl9za2JfY2Ioc2tiKS1cdTAwM2VjcnlwdG9fdG1wKTtcbiAxMzA6XHRcbiAxMzE6XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKVxuIDEzMjpcdFx0XHRnb3RvIGRyb3A7XG4gMTMzOlx0XG4gMTM0Olx0XHQvKiBQSUQgc2l0cyBhZnRlciB0aGUgb3AgKi9cbiAxMzU6XHRcdHBpZCA9IChfX2ZvcmNlIF9fYmUzMiAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBPVlBOX09QQ09ERV9TSVpFKTtcbiAxMzY6XHRcdHJldCA9IG92cG5fcGt0aWRfcmVjdihcdTAwMjZrcy1cdTAwM2VwaWRfcmVjdiwgbnRvaGwoKnBpZCksIDApO1xuIDEzNzpcdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbiAxMzg6XHRcdFx0bmV0X2Vycl9yYXRlbGltaXRlZChcJiMzNDslczogUEtUIElEIFJYIGVycm9yIGZvciBwZWVyICV1OiAlZFxcblwmIzM0OyxcbiAxMzk6XHRcdFx0XHRcdCAgICBuZXRkZXZfbmFtZShwZWVyLVx1MDAzZW92cG4tXHUwMDNlZGV2KSwgcGVlci1cdTAwM2VpZCxcbiAxNDA6XHRcdFx0XHRcdCAgICByZXQpO1xuIDE0MTpcdFx0XHRnb3RvIGRyb3A7XG4gMTQyOlx0XHR9XG4gMTQzOlx0XG4gMTQ0Olx0XHQvKiBrZWVwIHRyYWNrIG9mIGxhc3QgcmVjZWl2ZWQgYXV0aGVudGljYXRlZCBwYWNrZXQgZm9yIGtlZXBhbGl2ZSAqL1xuIDE0NTpcdFx0V1JJVEVfT05DRShwZWVyLVx1MDAzZWxhc3RfcmVjdiwga3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKSk7XG4gMTQ2Olx0XG4gMTQ3Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMTQ4Olx0XHRzb2NrID0gcmN1X2RlcmVmZXJlbmNlKHBlZXItXHUwMDNlc29jayk7XG4gMTQ5Olx0XHRpZiAoc29jayBcdTAwMjZcdTAwMjYgc29jay1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUClcbiAxNTA6XHRcdFx0LyogY2hlY2sgaWYgdGhpcyBwZWVyIGNoYW5nZWQgbG9jYWwgb3IgcmVtb3RlIGVuZHBvaW50ICovXG4gMTUxOlx0XHRcdG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlKHBlZXIsIHNrYik7XG4gMTUyOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAxNTM6XHRcbiAxNTQ6XHRcdC8qIHBvaW50IHRvIGVuY2Fwc3VsYXRlZCBJUCBwYWNrZXQgKi9cbiAxNTU6XHRcdF9fc2tiX3B1bGwoc2tiLCBwYXlsb2FkX29mZnNldCk7XG4gMTU2Olx0XG4gMTU3Olx0XHQvKiBjaGVjayBpZiB0aGlzIGlzIGEgdmFsaWQgZGF0YXBhY2tldCB0aGF0IGhhcyB0byBiZSBkZWxpdmVyZWQgdG8gdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDU1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIEZ1bmN0aW9uIENhbGwqKgoKQWxyaWdodCwgdGhlIGZhY3QgdGhhdCBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIGlzIGJlaW5nIGNhbGxlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgVURQIHBhY2tldCBkZWNyeXB0aW9uIHRlbGxzIG1lIHNvbWV0aGluZyBjcml0aWNhbDogd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHdvcmtpbmcgcGF0aC4gVGhpcyBmdW5jdGlvbiBpcyBiZWluZyByZWFjaGVkIGFuZCBleGVjdXRlZCwgaW5kaWNhdGluZyBhIGZ1bmN0aW9uYWwgZW5kcG9pbnQgdXBkYXRlIHByb2Nlc3Mgd2l0aGluIHRoZSBPcGVuVlBOIGRyaXZlci4gSSBjYW4gY29uZmlybSB0aGlzIGlzIG5vdCBtZXJlbHkgdGhlb3JldGljYWwsIGJ1dCBoYXMgYmVlbiBvYnNlcnZlZC4gVGhpcyBpcyBnb29kLCBiZWNhdXNlIGl0IHZhbGlkYXRlcyBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcGF0aCBvZiBleGVjdXRpb24uCgpOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSYjMzk7bGwgbmVlZCB0byBkaXNzZWN0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBjb25zdWx0aW5nIGBkcml2ZXJzL25ldC9vdnBuL3BlZXIuY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgbG9naWMgaXMgYmVpbmcgdHJpZ2dlcmVkIGluIHRoaXMgc3VjY2Vzc2Z1bCBkZWNyeXB0aW9uIHNjZW5hcmlvLiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIHNpZ25pZmljYW50IGZvciBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBvdmVyYWxsIG5ldHdvcmsgYmVoYXZpb3VyLCBzbyBJIG5lZWQgYSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L292cG4vcGVlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk3Olx0dm9pZCBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDE5ODpcdHtcbiAxOTk6XHRcdHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpuaGVhZDtcbiAyMDA6XHRcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzO1xuIDIwMTpcdFx0c3RydWN0IHNvY2thZGRyX2luNiAqc2E2O1xuIDIwMjpcdFx0Ym9vbCByZXNldF9jYWNoZSA9IGZhbHNlO1xuIDIwMzpcdFx0c3RydWN0IHNvY2thZGRyX2luICpzYTtcbiAyMDQ6XHRcdHN0cnVjdCBvdnBuX2JpbmQgKmJpbmQ7XG4gMjA1Olx0XHRjb25zdCB2b2lkICpsb2NhbF9pcDtcbiAyMDY6XHRcdHNpemVfdCBzYWxlbiA9IDA7XG4gMjA3Olx0XG4gMjA4Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2Vsb2NrKTtcbiAyMDk6XHRcdGJpbmQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBlZXItXHUwMDNlYmluZCxcbiAyMTA6XHRcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZwZWVyLVx1MDAzZWxvY2spKTtcbiAyMTE6XHRcdGlmICh1bmxpa2VseSghYmluZCkpXG4gMjEyOlx0XHRcdGdvdG8gdW5sb2NrO1xuIDIxMzpcdFxuIDIxNDpcdFx0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbiAyMTU6XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuIDIxNjpcdFx0XHQvKiBmbG9hdCBjaGVjayAqL1xuIDIxNzpcdFx0XHRpZiAodW5saWtlbHkoIW92cG5fYmluZF9za2Jfc3JjX21hdGNoKGJpbmQsIHNrYikpKSB7XG4gMjE4Olx0XHRcdFx0LyogdW5jb25kaXRpb25hbGx5IHNhdmUgbG9jYWwgZW5kcG9pbnQgaW4gY2FzZVxuIDIxOTpcdFx0XHRcdCAqIG9mIGZsb2F0LCBhcyBpdCBtYXkgaGF2ZSBjaGFuZ2VkIGFzIHdlbGxcbiAyMjA6XHRcdFx0XHQgKi9cbiAyMjE6XHRcdFx0XHRsb2NhbF9pcCA9IFx1MDAyNmlwX2hkcihza2IpLVx1MDAzZWRhZGRyO1xuIDIyMjpcdFx0XHRcdHNhID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVx1MDAyNnNzO1xuIDIyMzpcdFx0XHRcdHNhLVx1MDAzZXNpbl9mYW1pbHkgPSBBRl9JTkVUO1xuIDIyNDpcdFx0XHRcdHNhLVx1MDAzZXNpbl9hZGRyLnNfYWRkciA9IGlwX2hkcihza2IpLVx1MDAzZXNhZGRyO1xuIDIyNTpcdFx0XHRcdHNhLVx1MDAzZXNpbl9wb3J0ID0gdWRwX2hkcihza2IpLVx1MDAzZXNvdXJjZTtcbiAyMjY6XHRcdFx0XHRzYWxlbiA9IHNpemVvZigqc2EpO1xuIDIyNzpcdFx0XHRcdHJlc2V0X2NhY2hlID0gdHJ1ZTtcbiAyMjg6XHRcdFx0XHRicmVhaztcbiAyMjk6XHRcdFx0fVxuIDIzMDpcdFxuIDIzMTpcdFx0XHQvKiBpZiBubyBmbG9hdCBoYXBwZW5lZCwgbGV0JiMzOTtzIGRvdWJsZSBjaGVjayBpZiB0aGUgbG9jYWwgZW5kcG9pbnRcbiAyMzI6XHRcdFx0ICogaGFzIGNoYW5nZWRcbiAyMzM6XHRcdFx0ICovXG4gMjM0Olx0XHRcdGlmICh1bmxpa2VseShiaW5kLVx1MDAzZWxvY2FsLmlwdjQuc19hZGRyICE9IGlwX2hkcihza2IpLVx1MDAzZWRhZGRyKSkge1xuIDIzNTpcdFx0XHRcdG5ldF9kYmdfcmF0ZWxpbWl0ZWQoXCYjMzQ7JXM6IGxlYXJuaW5nIGxvY2FsIElQdjQgZm9yIHBlZXIgJWQgKCVwSTQgLVx1MDAzZSAlcEk0KVxcblwmIzM0OyxcbiAyMzY6XHRcdFx0XHRcdFx0ICAgIG5ldGRldl9uYW1lKHBlZXItXHUwMDNlb3Zwbi1cdTAwM2VkZXYpLFxuIDIzNzpcdFx0XHRcdFx0XHQgICAgcGVlci1cdTAwM2VpZCwgXHUwMDI2YmluZC1cdTAwM2Vsb2NhbC5pcHY0LnNfYWRkcixcbiAyMzg6XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmlwX2hkcihza2IpLVx1MDAzZWRhZGRyKTtcbiAyMzk6XHRcdFx0XHRiaW5kLVx1MDAzZWxvY2FsLmlwdjQuc19hZGRyID0gaXBfaGRyKHNrYiktXHUwMDNlZGFkZHI7XG4gMjQwOlx0XHRcdFx0cmVzZXRfY2FjaGUgPSB0cnVlO1xuIDI0MTpcdFx0XHR9XG4gMjQyOlx0XHRcdGJyZWFrO1xuIDI0MzpcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbiAyNDQ6XHRcdFx0LyogZmxvYXQgY2hlY2sgKi9cbiAyNDU6XHRcdFx0aWYgKHVubGlrZWx5KCFvdnBuX2JpbmRfc2tiX3NyY19tYXRjaChiaW5kLCBza2IpKSkge1xuIDI0NjpcdFx0XHRcdC8qIHVuY29uZGl0aW9uYWxseSBzYXZlIGxvY2FsIGVuZHBvaW50IGluIGNhc2VcbiAyNDc6XHRcdFx0XHQgKiBvZiBmbG9hdCwgYXMgaXQgbWF5IGhhdmUgY2hhbmdlZCBhcyB3ZWxsXG4gMjQ4Olx0XHRcdFx0ICovXG4gMjQ5Olx0XHRcdFx0bG9jYWxfaXAgPSBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyO1xuIDI1MDpcdFx0XHRcdHNhNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopXHUwMDI2c3M7XG4gMjUxOlx0XHRcdFx0c2E2LVx1MDAzZXNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7XG4gMjUyOlx0XHRcdFx0c2E2LVx1MDAzZXNpbjZfYWRkciA9IGlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHI7XG4gMjUzOlx0XHRcdFx0c2E2LVx1MDAzZXNpbjZfcG9ydCA9IHVkcF9oZHIoc2tiKS1cdTAwM2Vzb3VyY2U7XG4gMjU0Olx0XHRcdFx0c2E2LVx1MDAzZXNpbjZfc2NvcGVfaWQgPSBpcHY2X2lmYWNlX3Njb3BlX2lkKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4gMjU1Olx0XHRcdFx0XHRcdFx0XHRcdCBza2ItXHUwMDNlc2tiX2lpZik7XG4gMjU2Olx0XHRcdFx0c2FsZW4gPSBzaXplb2YoKnNhNik7XG4gMjU3Olx0XHRcdFx0cmVzZXRfY2FjaGUgPSB0cnVlO1xuIDI1ODpcdFx0XHRcdGJyZWFrO1xuIDI1OTpcdFx0XHR9XG4gMjYwOlx0XG4gMjYxOlx0XHRcdC8qIGlmIG5vIGZsb2F0IGhhcHBlbmVkLCBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIGlmIHRoZSBsb2NhbCBlbmRwb2ludFxuIDI2MjpcdFx0XHQgKiBoYXMgY2hhbmdlZFxuIDI2MzpcdFx0XHQgKi9cbiAyNjQ6XHRcdFx0aWYgKHVubGlrZWx5KCFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2YmluZC1cdTAwM2Vsb2NhbC5pcHY2LFxuIDI2NTpcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyKSkpIHtcbiAyNjY6XHRcdFx0XHRuZXRfZGJnX3JhdGVsaW1pdGVkKFwmIzM0OyVzOiBsZWFybmluZyBsb2NhbCBJUHY2IGZvciBwZWVyICVkICglcEk2YyAtXHUwMDNlICVwSTZjKVxcblwmIzM0OyxcbiAyNjc6XHRcdFx0XHRcdFx0ICAgIG5ldGRldl9uYW1lKHBlZXItXHUwMDNlb3Zwbi1cdTAwM2VkZXYpLFxuIDI2ODpcdFx0XHRcdFx0XHQgICAgcGVlci1cdTAwM2VpZCwgXHUwMDI2YmluZC1cdTAwM2Vsb2NhbC5pcHY2LFxuIDI2OTpcdFx0XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcik7XG4gMjcwOlx0XHRcdFx0YmluZC1cdTAwM2Vsb2NhbC5pcHY2ID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcjtcbiAyNzE6XHRcdFx0XHRyZXNldF9jYWNoZSA9IHRydWU7XG4gMjcyOlx0XHRcdH1cbiAyNzM6XHRcdFx0YnJlYWs7XG4gMjc0Olx0XHRkZWZhdWx0OlxuIDI3NTpcdFx0XHRnb3RvIHVubG9jaztcbiAyNzY6XHRcdH1cbiAyNzc6XHRcbiAyNzg6XHRcdGlmICh1bmxpa2VseShyZXNldF9jYWNoZSkpXG4gMjc5Olx0XHRcdGRzdF9jYWNoZV9yZXNldChcdTAwMjZwZWVyLVx1MDAzZWRzdF9jYWNoZSk7XG4gMjgwOlx0XG4gMjgxOlx0XHQvKiBpZiB0aGUgcGVlciBkaWQgbm90IGZsb2F0LCB3ZSBjYW4gYmFpbCBvdXQgbm93ICovXG4gMjgyOlx0XHRpZiAobGlrZWx5KCFzYWxlbikpXG4gMjgzOlx0XHRcdGdvdG8gdW5sb2NrO1xuIDI4NDpcdFxuIDI4NTpcdFx0aWYgKHVubGlrZWx5KG92cG5fcGVlcl9yZXNldF9zb2NrYWRkcihwZWVyLFxuIDI4NjpcdFx0XHRcdFx0XHQgICAgICAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKilcdTAwMjZzcyxcbiAyODc6XHRcdFx0XHRcdFx0ICAgICAgbG9jYWxfaXApIFx1MDAzYyAwKSlcbiAyODg6XHRcdFx0Z290byB1bmxvY2s7XG4gMjg5Olx0XG4gMjkwOlx0XHRuZXRfZGJnX3JhdGVsaW1pdGVkKFwmIzM0OyVzOiBwZWVyICVkIGZsb2F0ZWQgdG8gJXBJU2NwXCYjMzQ7LFxuIDI5MTpcdFx0XHRcdCAgICBuZXRkZXZfbmFtZShwZWVyLVx1MDAzZW92cG4tXHUwMDNlZGV2KSwgcGVlci1cdTAwM2VpZCwgXHUwMDI2c3MpO1xuIDI5MjpcdFxuIDI5MzpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2Vsb2NrKTtcbiAyOTQ6XHRcbiAyOTU6XHRcdG92cG5fbmxfcGVlcl9mbG9hdF9ub3RpZnkocGVlciwgXHUwMDI2c3MpO1xuIDI5NjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjAwOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRpZmYgaW4gYG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlYCwgYW5kIGl0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGNoZWNrIGZvciBgaGxpc3RfdW5oYXNoZWQoJmFtcDtwZWVyLSZndDtoYXNoX2VudHJ5X2lkKWAgaW4gdGhlIGBpZiAodW5saWtlbHkoIWJpbmQpKWAgY29uZGl0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzPyBXaHkgYXJlIHdlIHN1ZGRlbmx5IGNvbmNlcm5lZCBhYm91dCB0aGUgcGVlciBiZWluZyB1bmhhc2hlZD8KCkkgcmVtZW1iZXIgdGhpcyBmdW5jdGlvbiwgaXQgdXBkYXRlcyB0aGUgcGVlciYjMzk7cyBlbmRwb2ludHMsIGFuZCB1c2VzIFJDVSBmb3IgYWNjZXNzaW5nIHRoZSBgYmluZGAgcG9pbnRlciB1bmRlciBgcGVlci0mZ3Q7bG9ja2AuIFRoZSBjcnVjaWFsIHBhcnQgaXMgdGhhdCB0aGUgYHBlZXItJmd0O2xvY2tgIGlzICpyZWxlYXNlZCogYmVmb3JlIGFjY2Vzc2luZyBgYmluZGAuIFRoaXMgbWVhbnMgYSB3aW5kb3cgZXhpc3RzIGJldHdlZW4gdGhlIGxvY2sgcmVsZWFzZSBhbmQgdGhlIGNoZWNrIGZvciBgIWJpbmRgLiBUaGF0IHdpbmRvdyBpcyB0aGUgdnVsbmVyYWJpbGl0eS4KClRoZSBjb21tZW50IG5haWxzIGl0OiAgYG92cG5fcGVlcl9yZW1vdmUoKWAgY2FuIHVuaGFzaCB0aGUgcGVlciYjMzk7cyBoYXNoIGVudHJ5IHVuZGVyIGBvdnBuLSZndDtsb2NrYC4gIElmIGBvdnBuX3BlZXJfcmVtb3ZlYCBpcyBjYWxsZWQgd2hpbGUgdGhpcyBmdW5jdGlvbiBpcyBydW5uaW5nIChzcGVjaWZpY2FsbHkgYmV0d2VlbiBgc3Bpbl91bmxvY2tfYmgoJmFtcDtwZWVyLSZndDtsb2NrKWAgYW5kIHRoZSBjaGVjayBmb3IgYGJpbmRgKSwgdGhlbiB0aGUgcGVlciBjb3VsZCBiZSBmcmVlZCwgYW5kIHJlLWxpbmtpbmcgdGhlIG5vdy1mcmVlZCBwZWVyIHdvdWxkIGJlIGJhZCBuZXdzIGJlYXJzLiBUaGUgbmV3IGNvZGUgaXMgY2F0Y2hpbmcgdGhpcyBieSBjaGVja2luZyBpZiB0aGUgcGVlciBoYXMgYmVlbiB1bmhhc2hlZC4gVGhpcyBuZXcgY2hlY2sgKGBobGlzdF91bmhhc2hlZGApIHNlZW1zIGxpa2UgYSBncmVhdCBhZGRpdGlvbiB0byBwcm92aWRlIHNhZmV0eSBpbiB0aGlzIHJhY2UtY29uZGl0aW9uLiBXZSYjMzk7cmUgZWZmZWN0aXZlbHkgZW5zdXJpbmcgdGhhdCB0aGUgcGVlciBpcyBzdGlsbCB2YWxpZCBiZWZvcmUgY29udGludWluZyB0aGUgdXBkYXRlIHByb2Nlc3MuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgcmVhZCB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIG1heWJlIGludmVzdGlnYXRlIG90aGVyIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFx0bmV0X2RiZ19yYXRlbGltaXRlZChcJiMzNDslczogcGVlciAlZCBmbG9hdGVkIHRvICVwSVNjcFwmIzM0OyxcbiAyOTE6XHRcdFx0XHQgICAgbmV0ZGV2X25hbWUocGVlci1cdTAwM2VvdnBuLVx1MDAzZWRldiksIHBlZXItXHUwMDNlaWQsIFx1MDAyNnNzKTtcbiAyOTI6XHRcbiAyOTM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBlZXItXHUwMDNlbG9jayk7XG4gMjk0Olx0XG4gMjk1Olx0XHRvdnBuX25sX3BlZXJfZmxvYXRfbm90aWZ5KHBlZXIsIFx1MDAyNnNzKTtcbiAyOTY6XHRcbiAyOTc6XHRcdC8qIHJlaGFzaGluZyBpcyByZXF1aXJlZCBvbmx5IGluIE1QIG1vZGUgYXMgUDJQIGhhcyBvbmUgcGVlclxuIDI5ODpcdFx0ICogb25seSBhbmQgdGh1cyB0aGVyZSBpcyBubyBoYXNodGFibGVcbiAyOTk6XHRcdCAqL1xuIDMwMDpcdFx0aWYgKHBlZXItXHUwMDNlb3Zwbi1cdTAwM2Vtb2RlID09IE9WUE5fTU9ERV9NUCkge1xuIDMwMTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2VvdnBuLVx1MDAzZWxvY2spO1xuIDMwMjpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2Vsb2NrKTtcbiAzMDM6XHRcdFx0YmluZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGVlci1cdTAwM2ViaW5kLFxuIDMwNDpcdFx0XHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2cGVlci1cdTAwM2Vsb2NrKSk7XG4gMzA1Olx0XHRcdC8qIHBlZXItXHUwMDNlbG9jayB3YXMgcmVsZWFzZWQgYWJvdmUsIHRoZXJlZm9yZSB0aGUgcGVlciBtYXkgaGF2ZVxuIDMwNjpcdFx0XHQgKiBiZWVuIHJlbW92ZWQgaW4gdGhlIG1lYW50aW1lOiBvdnBuX3BlZXJfcmVtb3ZlKCkgdW5oYXNoZXNcbiAzMDc6XHRcdFx0ICogaGFzaF9lbnRyeV9pZCB1bmRlciBvdnBuLVx1MDAzZWxvY2suIFJlLWxpbmtpbmcgYSByZW1vdmVkIHBlZXJcbiAzMDg6XHRcdFx0ICogd291bGQgbGVhdmUgaXQgcmVhY2hhYmxlIGFmdGVyIGl0IGhhcyBiZWVuIGZyZWVkLlxuIDMwOTpcdFx0XHQgKi9cbiAzMTA6XHRcdFx0aWYgKHVubGlrZWx5KCFiaW5kIHx8IGhsaXN0X3VuaGFzaGVkKFx1MDAyNnBlZXItXHUwMDNlaGFzaF9lbnRyeV9pZCkpKSB7XG4gMzExOlx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2Vsb2NrKTtcbiAzMTI6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwZWVyLVx1MDAzZW92cG4tXHUwMDNlbG9jayk7XG4gMzEzOlx0XHRcdFx0cmV0dXJuO1xuIDMxNDpcdFx0XHR9XG4gMzE1Olx0XG4gMzE2Olx0XHRcdC8qIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5LCB0aGVyZWZvcmUgYW5vdGhlclxuIDMxNzpcdFx0XHQgKiBmbG9hdCBtYXkgaGF2ZSBoYXBwZW5lZCBpbiBwYXJhbGxlbDogcGVyZm9ybSByZWhhc2hpbmdcbiAzMTg6XHRcdFx0ICogdXNpbmcgdGhlIHBlZXItXHUwMDNlYmluZC1cdTAwM2VyZW1vdGUgZGlyZWN0bHkgYXMga2V5XG4gMzE5Olx0XHRcdCAqL1xuIDMyMDpcdFxuIDMyMTpcdFx0XHRzd2l0Y2ggKGJpbmQtXHUwMDNlcmVtb3RlLmluNC5zaW5fZmFtaWx5KSB7XG4gMzIyOlx0XHRcdGNhc2UgQUZfSU5FVDpcbiAzMjM6XHRcdFx0XHRzYWxlbiA9IHNpemVvZigqc2EpO1xuIDMyNDpcdFx0XHRcdGJyZWFrO1xuIDMyNTpcdFx0XHRjYXNlIEFGX0lORVQ2OlxuIDMyNjpcdFx0XHRcdHNhbGVuID0gc2l6ZW9mKCpzYTYpO1xuIDMyNzpcdFx0XHRcdGJyZWFrO1xuIDMyODpcdFx0XHR9XG4gMzI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzAzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE9wZW5WUE4gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAgaXMgZGVmaW5pdGVseSB3b3JraW5nIGFzIGV4cGVjdGVkOyB0aGF0JiMzOTtzIGdvb2QuIE15IGZvY3VzIGlzIG9uIHRoZSBgT1ZQTmAgY29uZmlndXJhdGlvbnMuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3Mgc2V0LiBOb3csIGxldCYjMzk7cyBzZWUsIGBPVlBOYCBkZXBlbmRzIG9uIGBORVQgJmFtcDsmYW1wOyBJTkVUYCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eS4gSXQgYWxzbyBzZWxlY3RzIGBEU1RfQ0FDSEVgLCBgTkVUX1VEUF9UVU5ORUxgLCBgQ1JZUFRPYCwgYENSWVBUT19BRVNgLCBgQ1JZUFRPX0dDTWAsIGBDUllQVE9fQ0hBQ0hBMjBQT0xZMTMwNWAsIGFuZCBgU1RSRUFNX1BBUlNFUmAuIEdvb2QsIHNvIGNvbmZpcm1pbmcgYE9WUE5gIGlzIHRoZSBvbmx5IGNvbmZpZyBJIG5lZWQsIGF0IGxlYXN0IGZvciBub3cuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSSB0aGluayBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGFuZCBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIGFyZSBnb29kIGNhbmRpZGF0ZXMgdG8gcmVhbGx5IGZvY3VzIGluIG9uLiBZdXAsIGJvdGggYXJlIGRlZmluaXRlbHkgc29saWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIga2V5IGZ1bmN0aW9ucz8gSSBzaG91bGQgYWRkIGBvdnBuX2RlY3J5cHRfcG9zdGAgYW5kIGBvdnBuX2VuY3J5cHRfcG9zdGAgdG8gdGhlIGxpc3Q7IEkgY2FuIGRlZmluaXRlbHkgc2VlIHRob3NlIGJlaW5nIGltcG9ydGFudC4gT2theSwgYW5kIGZvciB0aGUgZW50cnkgcG9pbnRzLCBgb3Zwbl91ZHBfZW5jYXBfcmVjdmAgYW5kIGBvdnBuX3RjcF9yY3ZgIGxvb2sgbGlrZSB0aGUgY29ycmVjdCBzcG90cy4gQW5kLCBvYnZpb3VzbHksIGBvdnBuX25ldF94bWl0YCBoYW5kbGVzIHRoZSBzZW5kIG9wZXJhdGlvbnMuIFJpZ2h0LCBJJiMzOTtsbCBhZGQgdGhvc2UgdG8gbXkgZm9jdXMgc3ltYm9scywgbWFraW5nIHN1cmUgSSBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMuCgpXYWl0IGEgc2Vjb25kLCBgb3Zwbl91ZHBfZW5jYXBfcmVjdmAgaXMgc3RhdGljLiBUaGF0IHVzdWFsbHkgbWVhbnMgaXQmIzM5O3MgaW5saW5lZC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3Zwbl91ZHBfZW5jYXBfcmVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L292cG4vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L292cG4vdWRwLmM9MzM9c3RhdGljIHN0cnVjdCBvdnBuX3NvY2tldCAqb3Zwbl9zb2NrZXRfZnJvbV91ZHBfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy01MS0vKipcbmRyaXZlcnMvbmV0L292cG4vdWRwLmM6NTI6ICogb3Zwbl91ZHBfZW5jYXBfcmVjdiAtIFN0YXJ0IHByb2Nlc3NpbmcgYSByZWNlaXZlZCBVRFAgcGFja2V0LlxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy01My0gKiBAc2s6IHNvY2tldCBvdmVyIHdoaWNoIHRoZSBwYWNrZXQgd2FzIHJlY2VpdmVkXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy02Ni0gKi9cbmRyaXZlcnMvbmV0L292cG4vdWRwLmM6Njc6c3RhdGljIGludCBvdnBuX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtNjgte1xuLS1cbmRyaXZlcnMvbmV0L292cG4vdWRwLmM9Mzg0PWludCBvdnBuX3VkcF9zb2NrZXRfYXR0YWNoKHN0cnVjdCBvdnBuX3NvY2tldCAqb3Zwbl9zb2NrLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtMzg5LVx0XHQuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9PVlBOSU5VRFAsXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jOjM5MDpcdFx0LmVuY2FwX3JjdiA9IG92cG5fdWRwX2VuY2FwX3JlY3YsXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTM5MS1cdFx0LmVuY2FwX2Rlc3Ryb3kgPSBvdnBuX3VkcF9lbmNhcF9kZXN0cm95LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQxMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFBlcmZvcm1hbmNlIEJvdHRsZW5lY2tzIGluIHRoZSBPcGVuVlBOIENvZGViYXNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIHBhc3NlZCBhcyBhIHBvaW50ZXIuIFRoYXQgbWVhbnMgaXQmIzM5O3MgaGlnaGx5IHVubGlrZWx5IHRoYXQgdGhlIGNvbXBpbGVyIHdpbGwgYmUgYWJsZSB0byBpbmxpbmUgaXQsIHdoaWNoIGlzIHNvbWV0aGluZyBJIGFsd2F5cyBrZWVwIGFuIGV5ZSBvdXQgZm9yIHdoZW4gcGVyZm9ybWFuY2UgdHVuaW5nLiBJIHdhbnQgdG8gaWRlbnRpZnkgYXJlYXMgcmlwZSBmb3Igb3B0aW1pemF0aW9uLgoKUmlnaHQgbm93LCBteSBndXQgc2F5cyB0aGF0IEkgc2hvdWxkIHN0YXJ0IGxvb2tpbmcgYXQgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9ydGVkIG9yLCBhdCBsZWFzdCwgbm90IHN0YXRpYy4gYG92cG5fZGVjcnlwdF9wb3N0YCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCBmaXQgdGhhdCBiaWxsLiBTbyBJJiMzOTtsbCBzdGFydCB0aGVyZS4gSG93ZXZlciwgaXQgbG9va3MgbGlrZSBhIGZldyBvdGhlcnMsIHN1Y2ggYXMgYG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlYCBhcmUgYWxzbyBpbiB0aGlzIGNhdGVnb3J5LCBhcyBpcyBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLgoKVGhlcmVmb3JlLCB0aGUgbWFpbiBmdW5jdGlvbiBzeW1ib2xzIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhcmU6CgoqICAgYG92cG5fY3J5cHRvX2tpbGxfa2V5YAoqICAgYG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlYAoqICAgYG92cG5fZGVjcnlwdF9wb3N0YAoqICAgYG92cG5fZW5jcnlwdF9wb3N0YAoKTmV4dCwgSSYjMzk7bGwgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gQmFzZWQgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkmIzM5O20gc2VlaW5nIGlzIGBPVlBOYC4gSSBzaG91bGQgZW5zdXJlIG5vIG90aGVyIG9wdGlvbnMgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIGZ1bmN0aW9ucywgc3VjaCBhcyBpZiBzdGF0ZW1lbnRzIHRoYXQgZG8gbm90IHJlbHkgb24gYE9WUE5gLiBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyB1bmRlciBgZHJpdmVycy9uZXQvb3Zwbi9LY29uZmlnYCBhbmQgYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3NzaWJsZSBidWlsZCBjb25maWd1cmF0aW9uIGNvbnNpZGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1ZQTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTkyPWNvbmZpZyBXSVJFR1VBUkRfREVCVUdcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTEwMi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MTAzOmNvbmZpZyBPVlBOXG5kcml2ZXJzL25ldC9LY29uZmlnLTEwNC1cdHRyaXN0YXRlIFwmIzM0O09wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNDAKCQkJCQkJCW91dHB1dDogMTE4CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE9wZW5WUE4gRHJpdmVyIFZ1bG5lcmFiaWxpdHkgRml4KioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QuIFRoaXMgZml4IGlzIHRhcmdldGVkIGF0IHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agc2VjdGlvbiwgc28gaXQmIzM5O3MgY2xlYXJseSBmb2N1c2luZyBvbiB0aGUgT3BlblZQTiBkcml2ZXIsIGBPVlBOYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIHF1aWNrbHkgZGlzdGlsbCB0aGUga2V5IGVsZW1lbnRzOiB0aGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHRhZ2dlZCBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIHRoYXQgZnV6emluZyB3b3VsZCBiZSBhIHZhbHVhYmxlIGFwcHJvYWNoIHRvIHZhbGlkYXRlIHRoZSBmaXguCgpUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMuIEkgc2VlIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAsIGBvdnBuX2RlY3J5cHRfcG9zdGAsIGFuZCBgb3Zwbl9lbmNyeXB0X3Bvc3RgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBPcGVuVlBOIGFyY2hpdGVjdHVyZSwgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgaW52b2x2ZWQgaW4ga2V5IG1hbmFnZW1lbnQsIGVuZHBvaW50IGhhbmRsaW5nIChjcnVjaWFsIGZvciBjb25uZWN0aW9ucyksIGFuZCBwb3N0LXByb2Nlc3Npbmcgb2YgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLiBUaGUgZml4IGlzIGVuYWJsaW5nIHRoZSBgT1ZQTmAgY29uZmlnIGl0c2VsZi4KClRoZSByZWFzb25pbmcgcHJvdmlkZWQgc3RhdGVzIHRoYXQgdGhlIHBhdGNoIGFkZHJlc3NlcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyB3aXRoaW4gdGhlIGBvdnBuYCBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gY29yZSBsb2dpYyByZWxhdGVkIHRvIGNyeXB0byBrZXlzIGFuZCBwZWVyIGVuZHBvaW50IHVwZGF0ZXMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGNvbWJpbmF0aW9uIG9mIHZ1bG5lcmFiaWxpdGllcywgYW5kIHRoZSBzcGVjaWZpYyBsb2NhdGlvbnMgYXJlIGNvbmNlcm5pbmcuIFRoZXNlIGlzc3VlcyBvZnRlbiBzdGVtIGZyb20gcmFjZSBjb25kaXRpb25zLCBpbXByb3BlciBlcnJvciBoYW5kbGluZywgb3IgbWVtb3J5IG1hbmFnZW1lbnQgZmxhd3MuIEdpdmVuIHRoZSBpbXBhY3Qgb24gdGhlIGRhdGEgY2hhbm5lbCwgdGhpcyBmaXggaXMgY2xlYXJseSBoaWdoLXByaW9yaXR5IGFuZCByZXF1aXJlcyB0aG9yb3VnaCBzY3J1dGlueS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBwYXRjaCBpdHNlbGYgdG8gc2VlIGhvdyB0aGVzZSB2dWxuZXJhYmlsaXRpZXMgd2VyZSBtYW5pZmVzdGVkIGFuZCBob3cgdGhlIGZpeCBhZGRyZXNzZXMgdGhlbSwgYnV0IHRoaXMgaW5pdGlhbCBhbmFseXNpcyBpcyBwcm9taXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPVlBOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3Zwbl9jcnlwdG9fa2lsbF9rZXkmIzM0OywKICAgICYjMzQ7b3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGUmIzM0OywKICAgICYjMzQ7b3Zwbl9kZWNyeXB0X3Bvc3QmIzM0OywKICAgICYjMzQ7b3Zwbl9lbmNyeXB0X3Bvc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgaW4gdGhlIE9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWQgZHJpdmVyIChvdnBuKS4gVGhlIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyBoYW5kbGluZyBjcnlwdG9ncmFwaGljIGtleXMgYW5kIHBlZXIgZW5kcG9pbnQgdXBkYXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1ZQTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292cG5fY3J5cHRvX2tpbGxfa2V5JiMzNDssCiAgICAmIzM0O292cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlJiMzNDssCiAgICAmIzM0O292cG5fZGVjcnlwdF9wb3N0JiMzNDssCiAgICAmIzM0O292cG5fZW5jcnlwdF9wb3N0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGluIHRoZSBPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkIGRyaXZlciAob3ZwbikuIFRoZSBjaGFuZ2VzIGFyZSBpbiByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgaGFuZGxpbmcgY3J5cHRvZ3JhcGhpYyBrZXlzIGFuZCBwZWVyIGVuZHBvaW50IHVwZGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDoxOS40NTY1ODE3ODhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODg5NzExNjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPVlBOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3Zwbl9jcnlwdG9fa2lsbF9rZXlcIixcbiAgICBcIm92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlXCIsXG4gICAgXCJvdnBuX2RlY3J5cHRfcG9zdFwiLFxuICAgIFwib3Zwbl9lbmNyeXB0X3Bvc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBpbiB0aGUgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZCBkcml2ZXIgKG92cG4pLiBUaGUgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIGhhbmRsaW5nIGNyeXB0b2dyYXBoaWMga2V5cyBhbmQgcGVlciBlbmRwb2ludCB1cGRhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDoxOS40NTY1ODk0MjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNjk1NTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU5Y2E3MzkxYTIzOWU4ZWJiZGQ4Yjk4ODE0N2NhNjY1ZDdiZjAwNGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAxNjowNDoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY1xcbmluZGV4IDkwNTgwZTMyMDUyZmIuLjJjNTZmYjE4MGVkOGYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmNcXG5AQCAtNjAsMTAgKzYwLDEyIEBAIGJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKVxcbiBcXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzID0gTlVMTDtcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2Y3MtXFx1MDAzZWxvY2spO1xcbi1cXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVxcdTAwM2VzbG90c1swXSktXFx1MDAzZWtleV9pZCA9PSBrZXlfaWQpIHtcXG4rXFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cXHUwMDNlc2xvdHNbMF0pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICByY3VfYWNjZXNzX3BvaW50ZXIoY3MtXFx1MDAzZXNsb3RzWzBdKS1cXHUwMDNla2V5X2lkID09IGtleV9pZCkge1xcbiBcXHRcXHRrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtXFx1MDAzZXNsb3RzWzBdLCBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHQgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZjcy1cXHUwMDNlbG9jaykpO1xcbi1cXHR9IGVsc2UgaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cXHUwMDNlc2xvdHNbMV0pLVxcdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XFxuK1xcdH0gZWxzZSBpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVxcdTAwM2VzbG90c1sxXSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgcmN1X2FjY2Vzc19wb2ludGVyKGNzLVxcdTAwM2VzbG90c1sxXSktXFx1MDAzZWtleV9pZCA9PSBrZXlfaWQpIHtcXG4gXFx0XFx0a3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLVxcdTAwM2VzbG90c1sxXSwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0XFx0IGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2Y3MtXFx1MDAzZWxvY2spKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuYyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXFxuaW5kZXggYTIxZDAyYWM3MTVlMC4uMDM4ODZjNDZlYzg1MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXFxuQEAgLTMwMiw3ICszMDIsMTIgQEAgdm9pZCBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnBlZXItXFx1MDAzZWxvY2spO1xcbiBcXHRcXHRiaW5kID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwZWVyLVxcdTAwM2ViaW5kLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZwZWVyLVxcdTAwM2Vsb2NrKSk7XFxuLVxcdFxcdGlmICh1bmxpa2VseSghYmluZCkpIHtcXG4rXFx0XFx0LyogcGVlci1cXHUwMDNlbG9jayB3YXMgcmVsZWFzZWQgYWJvdmUsIHRoZXJlZm9yZSB0aGUgcGVlciBtYXkgaGF2ZVxcbitcXHRcXHQgKiBiZWVuIHJlbW92ZWQgaW4gdGhlIG1lYW50aW1lOiBvdnBuX3BlZXJfcmVtb3ZlKCkgdW5oYXNoZXNcXG4rXFx0XFx0ICogaGFzaF9lbnRyeV9pZCB1bmRlciBvdnBuLVxcdTAwM2Vsb2NrLiBSZS1saW5raW5nIGEgcmVtb3ZlZCBwZWVyXFxuK1xcdFxcdCAqIHdvdWxkIGxlYXZlIGl0IHJlYWNoYWJsZSBhZnRlciBpdCBoYXMgYmVlbiBmcmVlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh1bmxpa2VseSghYmluZCB8fCBobGlzdF91bmhhc2hlZChcXHUwMDI2cGVlci1cXHUwMDNlaGFzaF9lbnRyeV9pZCkpKSB7XFxuIFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwZWVyLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnBlZXItXFx1MDAzZW92cG4tXFx1MDAzZWxvY2spO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjIwLjA5NDM4NDc0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc4MjU5MzA0NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9WUE5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnBuX2NyeXB0b19raWxsX2tleVwiLFxuICAgIFwib3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVcIixcbiAgICBcIm92cG5fZGVjcnlwdF9wb3N0XCIsXG4gICAgXCJvdnBuX2VuY3J5cHRfcG9zdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGluIHRoZSBPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkIGRyaXZlciAob3ZwbikuIFRoZSBjaGFuZ2VzIGFyZSBpbiByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgaGFuZGxpbmcgY3J5cHRvZ3JhcGhpYyBrZXlzIGFuZCBwZWVyIGVuZHBvaW50IHVwZGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU5Y2E3MzkxYTIzOWU4ZWJiZGQ4Yjk4ODE0N2NhNjY1ZDdiZjAwNGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDE2OjA0OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmNcbmluZGV4IDkwNTgwZTMyMDUyZmIuLjJjNTZmYjE4MGVkOGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jXG4rKysgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jXG5AQCAtNjAsMTAgKzYwLDEyIEBAIGJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKVxuIFx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyA9IE5VTEw7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2Y3MtXHUwMDNlbG9jayk7XG4tXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzBdKS1cdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XG4rXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzBdKSBcdTAwMjZcdTAwMjZcbitcdCAgICByY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMF0pLVx1MDAzZWtleV9pZCA9PSBrZXlfaWQpIHtcbiBcdFx0a3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzBdLCBOVUxMLFxuIFx0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmNzLVx1MDAzZWxvY2spKTtcbi1cdH0gZWxzZSBpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzFdKS1cdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XG4rXHR9IGVsc2UgaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cdTAwM2VzbG90c1sxXSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgIHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cdTAwM2VzbG90c1sxXSktXHUwMDNla2V5X2lkID09IGtleV9pZCkge1xuIFx0XHRrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMV0sIE5VTEwsXG4gXHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Y3MtXHUwMDNlbG9jaykpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vcGVlci5jIGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNcbmluZGV4IGEyMWQwMmFjNzE1ZTAuLjAzODg2YzQ2ZWM4NTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuY1xuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNcbkBAIC0zMDIsNyArMzAyLDEyIEBAIHZvaWQgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBlZXItXHUwMDNlbG9jayk7XG4gXHRcdGJpbmQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBlZXItXHUwMDNlYmluZCxcbiBcdFx0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnBlZXItXHUwMDNlbG9jaykpO1xuLVx0XHRpZiAodW5saWtlbHkoIWJpbmQpKSB7XG4rXHRcdC8qIHBlZXItXHUwMDNlbG9jayB3YXMgcmVsZWFzZWQgYWJvdmUsIHRoZXJlZm9yZSB0aGUgcGVlciBtYXkgaGF2ZVxuK1x0XHQgKiBiZWVuIHJlbW92ZWQgaW4gdGhlIG1lYW50aW1lOiBvdnBuX3BlZXJfcmVtb3ZlKCkgdW5oYXNoZXNcbitcdFx0ICogaGFzaF9lbnRyeV9pZCB1bmRlciBvdnBuLVx1MDAzZWxvY2suIFJlLWxpbmtpbmcgYSByZW1vdmVkIHBlZXJcbitcdFx0ICogd291bGQgbGVhdmUgaXQgcmVhY2hhYmxlIGFmdGVyIGl0IGhhcyBiZWVuIGZyZWVkLlxuK1x0XHQgKi9cbitcdFx0aWYgKHVubGlrZWx5KCFiaW5kIHx8IGhsaXN0X3VuaGFzaGVkKFx1MDAyNnBlZXItXHUwMDNlaGFzaF9lbnRyeV9pZCkpKSB7XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwZWVyLVx1MDAzZW92cG4tXHUwMDNlbG9jayk7XG4gXHRcdFx0cmV0dXJuO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6MDQ6MjAuMDk0Mzg2MTc5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4NjgxMTc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE9wZW5WUE4gRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY2AgYW5kIGBkcml2ZXJzL25ldC9vdnBuL3BlZXIuY2AuIFRoZSBjaGFuZ2VzIHNlZW0gc3RyYWlnaHRmb3J3YXJkOyB0aGV5J3JlIHB1dHRpbmcgaW4gc29tZSBOVUxMIGNoZWNrcyBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGFuZCwgbW9yZSBpbnRlcmVzdGluZ2x5LCBhIGNoZWNrIGZvciBgaGxpc3RfdW5oYXNoZWQoXHUwMDI2cGVlci1cdTAwM2VoYXNoX2VudHJ5X2lkKWAgd2l0aGluIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAuIE15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBmdW5jdGlvbmFsLCBhZGRyZXNzaW5nIHNvbWUgY3JpdGljYWwgdnVsbmVyYWJpbGl0aWVzLiBTcGVjaWZpY2FsbHksIHdlJ3JlIGxvb2tpbmcgYXQgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIGxpa2VseSBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIGltcG9ydGFudCB0byBjYXRjaCBiZWZvcmUgdGhleSBiZWNvbWUgaXNzdWVzLlxuXG5UaGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIHRoZSBgb3ZwbmAgZHJpdmVyLCB3aGljaCBmcm9tIG1lbW9yeSBoYW5kbGVzIE9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRpbmcuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIEtjb25maWcgdG8gc2VlIGhvdyB0aGlzIGRyaXZlciBpcyBjb25maWd1cmVkIGFuZCBpZiBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIFRoZXNlIGtpbmRzIG9mIGxvdy1sZXZlbCBtZW1vcnkgc2FmZXR5IGZpeGVzIGFyZSBhbHdheXMgaW1wb3J0YW50IHRvIGNhdGNoLCBzbyBJJ2xsIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBub3cgdG8gYmV0dGVyIHVuZGVyc3RhbmQgd2hhdCB0aGUgdGVhbSBpcyB0cnlpbmcgdG8gcHJldmVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjI0Ljg4MTE5OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MDE1NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPVlBOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTkyPWNvbmZpZyBXSVJFR1VBUkRfREVCVUdcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMTAyLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTAzOmNvbmZpZyBPVlBOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMDQtXFx0dHJpc3RhdGUgXFxcIk9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjI1LjAxMDIyMTI2NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Nzc1MjA2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBPVlBOIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBPVlBOYCB0aGluZy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBiZWZvcmUgSSBldmVuIHN0YXJ0IHRoaW5raW5nIGFib3V0IGNvbmZpZ3VyYXRpb24gb3IgdHJvdWJsZXNob290aW5nLCBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBtYXAgb3V0IHRoZSBlbnRpcmUgZWNvc3lzdGVtIHRoYXQgdGhpcyByZWxpZXMgb24uIEknbSB0aGlua2luZyBhYm91dCBvcGVyYXRpbmcgc3lzdGVtLCBhbnkgY29yZSBsaWJyYXJpZXMsIGFuZCBhbnkgbmV0d29yayBzZXJ2aWNlcyBvciBzb2Z0d2FyZSBpdCBsZXZlcmFnZXMuIElzIGl0IHN0YXRpY2FsbHkgbGlua2VkIGFnYWluc3QgYW55dGhpbmcgdW51c3VhbD8gV2hhdCBhYm91dCBpdHMgY3J5cHRvIGxpYnJhcmllcz8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyB2ZXJzaW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgb3IgYXZvaWQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcz8gUmVhbGx5LCBJJ20gdHJ5aW5nIHRvIHZpc3VhbGl6ZSB0aGUgZW50aXJlIGRlcGVuZGVuY3kgdHJlZS4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGZvciBwcm9wZXIgZGVwbG95bWVudCwgc2VjdXJpdHkgYW5hbHlzaXMsIGFuZCBlZmZpY2llbnQgdHJvdWJsZXNob290aW5nIGRvd24gdGhlIGxpbmUuIEl0J3MgdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDoyOC42ODc3NDQxNTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXG4gMTAxOlxcdFxcdCAgU2F5IE4gaGVyZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuXFxuIDEwMjpcXHRcXG4gMTAzOlxcdGNvbmZpZyBPVlBOXFxuIDEwNDpcXHRcXHR0cmlzdGF0ZSBcXFwiT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZFxcXCJcXG4gMTA1OlxcdFxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gMTA2OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gMTA3OlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAxMDg6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAxMDk6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gMTEwOlxcdFxcdHNlbGVjdCBDUllQVE9fR0NNXFxuIDExMTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NIQUNIQTIwUE9MWTEzMDVcXG4gMTEyOlxcdFxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxuIDExMzpcXHRcXHRoZWxwXFxuIDExNDpcXHRcXHQgIFRoaXMgbW9kdWxlIGVuaGFuY2VzIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgT3BlblZQTiB1c2Vyc3BhY2Ugc29mdHdhcmVcXG4gMTE1OlxcdFxcdCAgYnkgb2ZmbG9hZGluZyB0aGUgZGF0YSBjaGFubmVsIHByb2Nlc3NpbmcgdG8ga2VybmVsc3BhY2UuXFxuIDExNjpcXHRcXG4gMTE3OlxcdGNvbmZpZyBFUVVBTElaRVJcXG4gMTE4OlxcdFxcdHRyaXN0YXRlIFxcXCJFUUwgKHNlcmlhbCBsaW5lIGxvYWQgYmFsYW5jaW5nKSBzdXBwb3J0XFxcIlxcbiAxMTk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDoyOC42ODc4MjYzNDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc4NzA4NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIE9WUE4gQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZSBgT1ZQTmAgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgd2l0aGluIHRoYXQgY29udGV4dDogYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBhbmQgYG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlYC4gVGhlIGtleSBxdWVzdGlvbiBoZXJlLCB0aGUgaW1tZWRpYXRlIGNvbmNlcm4sIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBvciBzdGF0aWMuIFRoaXMgaXMgZ29pbmcgdG8gZHJhc3RpY2FsbHkgaW1wYWN0IGhvdyB3ZSBuZWVkIHRvIGFwcHJvYWNoIGFueSBhbmFseXNpcyBvciBwb3RlbnRpYWwgZGVidWdnaW5nLiBVbmRlcnN0YW5kaW5nIHRoZWlyIHNjb3BlIGFuZCB2aXNpYmlsaXR5IGlzIGVzc2VudGlhbCB0byBmdXJ0aGVyIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjMyLjA2NjUzODExN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI4MTgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnBuX2NyeXB0b19raWxsX2tleVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9vdnBuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jPTQwPXZvaWQgb3Zwbl9jcnlwdG9fc3RhdGVfcmVsZWFzZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzKVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy01Ny0vKiByZW1vdmVzIHRoZSBrZXkgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBpZCBmcm9tIHRoZSBjcnlwdG8gY29udGV4dCAqL1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmM6NTg6Ym9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy01OS17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oPTEzOT1pbnQgb3Zwbl9jcnlwdG9fY29uZmlnX2dldChzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaC0xNDItXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaDoxNDM6Ym9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpO1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgtMTQ0LVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jPTIzOD12b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjY0LVxcdFxcdFxcdCAgICBwZWVyLVxcdTAwM2VpZCk7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjI2NTpcXHRcXHRpZiAob3Zwbl9jcnlwdG9fa2lsbF9rZXkoXFx1MDAyNnBlZXItXFx1MDAzZWNyeXB0bywga3MtXFx1MDAzZWtleV9pZCkpXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTI2Ni1cXHRcXHRcXHQvKiBsZXQgdXNlcnNwYWNlIGtub3cgc28gdGhhdCBhIG5ldyBrZXkgbXVzdCBiZSBuZWdvdGlhdGVkICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjMyLjExNTgyNjc0NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjIyMjYwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE9wZW5WUE4ncyBDcnlwdG9ncmFwaHkqKlxuXG5Pa2F5LCBzbyBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBJdCdzIGNhbGxlZCBmcm9tIGBvdnBuX2VuY3J5cHRfcG9zdGAsIHdoaWNoLCBqdWRnaW5nIGJ5IHRoZSBuYW1lLCBsb29rcyBsaWtlIGl0J3MgY29ubmVjdGVkIHRvIGFzeW5jaHJvbm91cyBjcnlwdG8gb3BlcmF0aW9ucy4gUHJvYmFibHkgYSBjYWxsYmFjayBvciBhIHBvc3QtcHJvY2Vzc2luZyBmdW5jdGlvbiBhZnRlciBlbmNyeXB0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBmbG93LiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGgga2V5cyBhbmQgZW5jcnlwdGlvbiBwcm9jZXNzZXMsIGxldCdzIHNlZSBob3cgdGhpcyB0aWVzIGludG8gdGhlIHBlZXIgZW5kcG9pbnQgdXBkYXRlcy4gSSdsbCBjaGVjayBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIGFuZCBzZWUgaWYgdGhlcmUncyBhIGxpbmsgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDozNi42MzgwNTQ5MjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTI1MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L292cG4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vaW8uYz0xMDg9dm9pZCBvdnBuX2RlY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTE1MC1cXHRcXHQvKiBjaGVjayBpZiB0aGlzIHBlZXIgY2hhbmdlZCBsb2NhbCBvciByZW1vdGUgZW5kcG9pbnQgKi9cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MTUxOlxcdFxcdG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlKHBlZXIsIHNrYik7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTE1Mi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vcGVlci5jPTE0Mz1pbnQgb3Zwbl9wZWVyX3Jlc2V0X3NvY2thZGRyKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuYy0xOTItLyoqXFxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmM6MTkzOiAqIG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlIC0gdXBkYXRlIHJlbW90ZSBvciBsb2NhbCBlbmRwb2ludCBmb3IgcGVlclxcbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTE5NC0gKiBAcGVlcjogcGVlciB0byB1cGRhdGUgdGhlIHJlbW90ZSBlbmRwb2ludCBmb3JcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTE5Ni0gKi9cXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuYzoxOTc6dm9pZCBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTE5OC17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuaD0xNTc9dm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuaC0xNTgtXFxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmg6MTU5OnZvaWQgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmgtMTYwLWludCBvdnBuX3BlZXJfcmVzZXRfc29ja2FkZHIoc3RydWN0IG92cG5fcGVlciAqcGVlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6MDQ6MzYuNjgyOTg2NzYzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTU2MjIxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEZ1enppbmcgQ2FuZGlkYXRlcyoqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgYG92cG5fZGVjcnlwdF9wb3N0YCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlllcywgdGhlc2UgbG9vayBsaWtlIHByb21pc2luZyB0YXJnZXRzIGZvciBmdXp6aW5nLlwiIEVuY3J5cHRpb24vZGVjcnlwdGlvbiByb3V0aW5lcyBhcmUgb2Z0ZW4gcHJpbWUgc3BvdHMgdG8gdW5jb3ZlciB2dWxuZXJhYmlsaXRpZXMuIEhvd2V2ZXIsIGEgcG90ZW50aWFsIGNhdmVhdCBwb3BzIHVwIOKAkyB0aGV5ICptaWdodCogYmUgaW50ZXJuYWwgZnVuY3Rpb25zLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlaXIgc2NvcGUgYW5kIGlmIHRoZXkncmUgZXhwb3NlZCB0byB1bnRydXN0ZWQgaW5wdXQuIExldCdzIHRyYWNlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICp1c2VkKiB0byB1bmRlcnN0YW5kIHRoZWlyIGNhbGwgY29udGV4dHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3OTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDo0MC40Nzg2MTEzNTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzI4Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92cG5fZGVjcnlwdF9wb3N0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L292cG4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYz0yNDA9aW50IG92cG5fYWVhZF9kZWNyeXB0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MsXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMtMzE3LVxcdGFlYWRfcmVxdWVzdF9zZXRfdGZtKHJlcSwga3MtXFx1MDAzZWRlY3J5cHQpO1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYzozMTg6XFx0YWVhZF9yZXF1ZXN0X3NldF9jYWxsYmFjayhyZXEsIDAsIG92cG5fZGVjcnlwdF9wb3N0LCBza2IpO1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYy0zMTktXFx0YWVhZF9yZXF1ZXN0X3NldF9jcnlwdChyZXEsIHNnLCBzZywgcGF5bG9hZF9sZW4gKyB0YWdfc2l6ZSwgaXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jPTYwPXN0YXRpYyB2b2lkIG92cG5fbmV0ZGV2X3dyaXRlKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtODYtXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjg3OlxcdC8qIG5ldHdvcmsgaGVhZGVyIHJlc2V0IGluIG92cG5fZGVjcnlwdF9wb3N0KCkgKi9cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtODgtXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0xMDctXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjEwODp2b2lkIG92cG5fZGVjcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTEwOS17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM9MjE0PXZvaWQgb3Zwbl9yZWN2KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjM0LVxcdG1lbXNldChvdnBuX3NrYl9jYihza2IpLCAwLCBzaXplb2Yoc3RydWN0IG92cG5fY2IpKTtcXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MjM1OlxcdG92cG5fZGVjcnlwdF9wb3N0KHNrYiwgb3Zwbl9hZWFkX2RlY3J5cHQocGVlciwga3MsIHNrYikpO1xcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0yMzYtfVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5oPTMxPXZvaWQgb3Zwbl9lbmNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldCk7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5oOjMyOnZvaWQgb3Zwbl9kZWNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldCk7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5oLTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDo0MC41MjMzNDUyOTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2Njk5ODIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKlBhY2tldCBSZWNlcHRpb24gaW4gT3BlblZQTjogYG92cG5fcmVjdmAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiBwYWNrZXQgcmVjZXB0aW9uIGluIE9wZW5WUE4sIGFzIHlvdSdkIGV4cGVjdCwgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBgb3Zwbl9yZWN2YCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHBsYWNlIHRoZSByZWNlaXZlZCBkYXRhIGhpdHMuIEl0J3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBpbml0aWFsIHBvaW50IG9mIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmsgdHJhZmZpYy4gVW5kZXJzdGFuZGluZyB3aGF0IGhhcHBlbnMgKmFmdGVyKiB0aGF0LCB3aXRoaW4gYG92cG5fcmVjdmAgYW5kIHRoZSBzdWJzZXF1ZW50IHByb2Nlc3Npbmcgc3RhZ2VzLCBpcyBjcnVjaWFsLiBXZSdyZSB0YWxraW5nIGFib3V0IGRlY3J5cHRpb24sIGF1dGhlbnRpY2F0aW9uIGNoZWNrcywgcG90ZW50aWFsIHJlYXNzZW1ibHksIGFuZCB0aGVuIG9ud2FyZCB0byB0aGUgdHVubmVsIGludGVyZmFjZS4gQnV0LCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBpbmNvbWluZyBkYXRhLCBgb3Zwbl9yZWN2YCAqaXMqIHRoZSBzdGFydGluZyBsaW5lLiBJIGltbWVkaWF0ZWx5IGJlZ2luIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGlzIGFyY2hpdGVjdGVkIHRvIGhhbmRsZSBtdWx0aXBsZSBjb25uZWN0aW9ucyBvciBhbnkgb3RoZXIgc3BlY2lmaWMgb3B0aW1pemF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU3OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjQ0LjA5MDM0NzkyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NDI3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3Zwbl9yZWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L292cG4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vaW8uYz0xMDg9dm9pZCBvdnBuX2RlY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTIxMy0vKiBSWCBwYXRoIGVudHJ5IHBvaW50OiBkZWNyeXB0IHBhY2tldCBhbmQgZm9yd2FyZCBpdCB0byB0aGUgZGV2aWNlICovXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjIxNDp2b2lkIG92cG5fcmVjdihzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0yMTUte1xcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5oPTI1PW5ldGRldl90eF90IG92cG5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5oLTI2LVxcbmRyaXZlcnMvbmV0L292cG4vaW8uaDoyNzp2b2lkIG92cG5fcmVjdihzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC9vdnBuL2lvLmgtMjgtdm9pZCBvdnBuX3htaXRfc3BlY2lhbChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBjb25zdCB2b2lkICpkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi90Y3AuYz0xMDI9c3RhdGljIHZvaWQgb3Zwbl90Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jLTEzOS1cXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jOjE0MDpcXHQvKiBob2xkIHJlZmVyZW5jZSB0byBwZWVyIGFzIHJlcXVpcmVkIGJ5IG92cG5fcmVjdigpLlxcbmRyaXZlcnMvbmV0L292cG4vdGNwLmMtMTQxLVxcdCAqXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jLTE0Ny1cXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jOjE0ODpcXHRvdnBuX3JlY3YocGVlciwgc2tiKTtcXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jLTE0OS1cXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jPTY3PXN0YXRpYyBpbnQgb3Zwbl91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTEyMy1cXHRfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jOjEyNDpcXHRvdnBuX3JlY3YocGVlciwgc2tiKTtcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTEyNS1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6MDQ6NDQuMTM3MTk4MDgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjE2NTA4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqTmV0d29yayBQYWNrZXQgSGFuZGxpbmcgLSBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IE9wZW5WUE4gYWN0dWFsbHkgaW50ZXJmYWNlcyB3aXRoIHRoZSBuZXR3b3JrLiBJIGtub3cgdGhhdCBgb3Zwbl91ZHBfZW5jYXBfcmVjdmAgYW5kIGBvdnBuX3RjcF9yY3ZgIGFyZSB0aGUgcmVhbCBlbnRyeSBwb2ludHMgZm9yIHJlY2VpdmluZyBwYWNrZXRzLCB0aGUgaW5pdGlhbCBob29rcyBmcm9tIHRoZSBuZXR3b3JrIHN0YWNrIGludG8gdGhlIE9wZW5WUE4gY29kZS4gIE9uIHRoZSBvdGhlciBzaWRlIG9mIHRoaW5ncywgaXQgc2VlbXMgbGlrZSBgb3Zwbl9uZXRfeG1pdGAgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBzZW5kaW5nIHBhY2tldHMgb3V0LCB0aGF0J3Mgd2hlcmUgdGhlIGRhdGEgZ29lcyB0byBiZSBwdXQgb24gdGhlIHdpcmUuIEdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG9uIGBvdnBuX25ldF94bWl0YCBzaW5jZSB0aGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbi4gTGV0J3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM3OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjQ3LjY5ODg1MTUyMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNDk3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3Zwbl9uZXRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9vdnBuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9vdnBuL2lvLmM9MzM2PXN0YXRpYyB2b2lkIG92cG5fc2VuZChzdHJ1Y3Qgb3Zwbl9wcml2ICpvdnBuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTM1NS0gKi9cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MzU2Om5ldGRldl90eF90IG92cG5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMzU3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uaD0yMz1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBvdnBuX2tlZXBhbGl2ZV9tZXNzYWdlW09WUE5fS0VFUEFMSVZFX1NJWkVdO1xcbmRyaXZlcnMvbmV0L292cG4vaW8uaC0yNC1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmg6MjU6bmV0ZGV2X3R4X3Qgb3Zwbl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9vdnBuL2lvLmgtMjYtXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL21haW4uYz0xMDA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBvdnBuX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL21haW4uYy0xMDItXFx0Lm5kb191bmluaXRcXHRcXHQ9IG92cG5fbmV0X3VuaW5pdCxcXG5kcml2ZXJzL25ldC9vdnBuL21haW4uYzoxMDM6XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBvdnBuX25ldF94bWl0LFxcbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jLTEwNC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDo0Ny43NDMwMDUxNzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg5NDcyNjE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBjb250ZXh0IGlzIE9wZW5WUE4gc2VjdXJpdHk6XG5cbioqRGVidWdnaW5nIE9wZW5WUE4gQ3J5cHRvIEtleSBIYW5kbGluZyoqXG5cbkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyB3aXRoaW4gYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBhbmQgdGhlIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYG92cG5fY3J5cHRvX2tpbGxfa2V5YC4gSXQgc2VlbXMgdGhlIGJ1ZyBpcyBsaWtlbHkgcmVsYXRlZCB0byB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBpcyBjYWxsZWQgdW5kZXIgYm90aCBzdWNjZXNzIGFuZCBmYWlsdXJlIGNvbmRpdGlvbnMgd2l0aGluIGBvdnBuX2VuY3J5cHRfcG9zdGAuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBpbmNvcnJlY3QgY2xlYW51cCBpZiBgb3Zwbl9lbmNyeXB0X3Bvc3RgIGRvZXNuJ3QgY29uc2lzdGVudGx5IHRyaWdnZXIgaXQgaW4gb25lIGNvbmRpdGlvbiBvciBhbm90aGVyLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGxvZ2ljIG9mIGBvdnBuX2VuY3J5cHRfcG9zdGAgaXRzZWxmIHRvIGNsYXJpZnkgdGhlIGV4YWN0IHNjZW5hcmlvcyB0aGF0IGxlYWQgdG8gYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBiZWluZyBpbnZva2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGxpa2VseSByb290IGNhdXNlIG9mIHRoZSBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDo1NS42Mzc3MzQ2MTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjE2MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92cG5fZW5jcnlwdF9wb3N0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L292cG4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYz0xMzc9aW50IG92cG5fYWVhZF9lbmNyeXB0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MsXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMtMjMwLVxcdGFlYWRfcmVxdWVzdF9zZXRfdGZtKHJlcSwga3MtXFx1MDAzZWVuY3J5cHQpO1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYzoyMzE6XFx0YWVhZF9yZXF1ZXN0X3NldF9jYWxsYmFjayhyZXEsIDAsIG92cG5fZW5jcnlwdF9wb3N0LCBza2IpO1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYy0yMzItXFx0YWVhZF9yZXF1ZXN0X3NldF9jcnlwdChyZXEsIHNnLCBzZyxcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYz0yMTQ9dm9pZCBvdnBuX3JlY3Yoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0yMzctXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjIzODp2b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTIzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM9MzEyPXN0YXRpYyBib29sIG92cG5fZW5jcnlwdF9vbmUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0zMjEtXFx0LyogdGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgcGVlciBiZWNhdXNlIHRoZSBjcnlwdG8gY29kZSBtYXkgcnVuIGFzeW5jLlxcbmRyaXZlcnMvbmV0L292cG4vaW8uYzozMjI6XFx0ICogb3Zwbl9lbmNyeXB0X3Bvc3QoKSB3aWxsIHJlbGVhc2UgaXQgdXBvbiBjb21wbGV0aW9uXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTMyMy1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0zMzAtXFx0bWVtc2V0KG92cG5fc2tiX2NiKHNrYiksIDAsIHNpemVvZihzdHJ1Y3Qgb3Zwbl9jYikpO1xcbmRyaXZlcnMvbmV0L292cG4vaW8uYzozMzE6XFx0b3Zwbl9lbmNyeXB0X3Bvc3Qoc2tiLCBvdnBuX2FlYWRfZW5jcnlwdChwZWVyLCBrcywgc2tiKSk7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTMzMi1cXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uaD0yOD12b2lkIG92cG5feG1pdF9zcGVjaWFsKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIGNvbnN0IHZvaWQgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmgtMzAtXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5oOjMxOnZvaWQgb3Zwbl9lbmNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldCk7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5oLTMyLXZvaWQgb3Zwbl9kZWNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjU1LjY4Mzk5MjIwMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYxNTYyMDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQb3N0LUVuY3J5cHRpb24gUHJvY2VzcyBpbiBPcGVuVlBOKipcblxuQWxyaWdodCwgc28gdGhlIHBvc3QtZW5jcnlwdGlvbiBzdGFnZSwgc3BlY2lmaWNhbGx5IGBvdnBuX2VuY3J5cHRfcG9zdGAsIGhhcyBncmFiYmVkIG15IGF0dGVudGlvbi4gSSBrbm93IGl0J3MgYSBjcnVjaWFsIHN0ZXAsIG9jY3VycmluZywgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIHJpZ2h0IGFmdGVyIHRoZSBkYXRhIGhhcyBiZWVuIGVuY3J5cHRlZCBpbiB0aGUgT3BlblZQTiBwcm9jZXNzLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiV2hlcmUncyB0aGUgaW1wbGVtZW50YXRpb24/IFRpbWUgdG8gdHJhY2sgdGhpcyBkb3duIGFuZCB1bmRlcnN0YW5kIGl0cyBleGFjdCByb2xlLlwiXG5cbk15IGluc3RpbmN0cyB0ZWxsIG1lIHRvIGp1bXAgaW50byB0aGUgYGRyaXZlcnMvbmV0L292cG4vaW8uY2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgdGhlIGdvLXRvIGxvY2F0aW9uIGZvciBjb3JlIEkvTyBvcGVyYXRpb25zIGFuZCBuZXR3b3JrIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIE9wZW5WUE4ga2VybmVsIG1vZHVsZXMuIFRoZSBgaW8uY2AgZmlsZSBpcyBsaWtlbHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGxvZ2ljIGJlaGluZCB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgYWZ0ZXIgdGhlIGRhdGEgaXMgc2NyYW1ibGVkLCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCBpcyB0aGUga2V5IHRvIHRoYXQgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBhbnRpY2lwYXRlIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBmaW5hbCBwYWNrZXQgYXNzZW1ibHksIHBvdGVudGlhbGx5IGFkZGluZyBoZWFkZXJzLCBwcmVwYXJpbmcgdGhlIGRhdGEgZm9yIHRyYW5zbWlzc2lvbiBvciBoYW5kbGluZyBhbnkgbmVjZXNzYXJ5IHBvc3QtZW5jcnlwdGlvbiB0cmFuc2Zvcm1hdGlvbnMsIG9yIGV2ZW4gZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyB0byB2ZXJpZnkgbXkgZXhwZWN0YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTU4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6MDQ6NTkuOTQ1NTU2OTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvb3Zwbi9pby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzOCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzODpcXHR2b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXFxuIDIzOTpcXHR7XFxuIDI0MDpcXHRcXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xcbiAyNDE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRhdGE7XFxuIDI0MjpcXHRcXHRzdHJ1Y3Qgb3Zwbl9zb2NrZXQgKnNvY2s7XFxuIDI0MzpcXHRcXHRzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyO1xcbiAyNDQ6XFx0XFx0dW5zaWduZWQgaW50IG9yaWdfbGVuO1xcbiAyNDU6XFx0XFxuIDI0NjpcXHRcXHQvKiBlbmNyeXB0aW9uIGlzIGhhcHBlbmluZyBhc3luY2hyb25vdXNseS4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlXFxuIDI0NzpcXHRcXHQgKiBjYWxsZWQgbGF0ZXIgYnkgdGhlIGNyeXB0byBjYWxsYmFjayB3aXRoIGEgcHJvcGVyIHJldHVybiB2YWx1ZVxcbiAyNDg6XFx0XFx0ICovXFxuIDI0OTpcXHRcXHRpZiAodW5saWtlbHkocmV0ID09IC1FSU5QUk9HUkVTUykpXFxuIDI1MDpcXHRcXHRcXHRyZXR1cm47XFxuIDI1MTpcXHRcXG4gMjUyOlxcdFxcdGtzID0gb3Zwbl9za2JfY2Ioc2tiKS1cXHUwMDNla3M7XFxuIDI1MzpcXHRcXHRwZWVyID0gb3Zwbl9za2JfY2Ioc2tiKS1cXHUwMDNlcGVlcjtcXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0LyogY3J5cHRvIGlzIGRvbmUsIGNsZWFudXAgc2tiIENCIGFuZCBpdHMgbWVtYmVycyAqL1xcbiAyNTY6XFx0XFx0a2ZyZWUob3Zwbl9za2JfY2Ioc2tiKS1cXHUwMDNlY3J5cHRvX3RtcCk7XFxuIDI1NzpcXHRcXG4gMjU4OlxcdFxcdGlmICh1bmxpa2VseShyZXQgPT0gLUVSQU5HRSkpIHtcXG4gMjU5OlxcdFxcdFxcdC8qIHdlIHJhbiBvdXQgb2YgSVZzIGFuZCB3ZSBtdXN0IGtpbGwgdGhlIGtleSBhcyBpdCBjYW4ndCBiZVxcbiAyNjA6XFx0XFx0XFx0ICogdXNlIGFueW1vcmVcXG4gMjYxOlxcdFxcdFxcdCAqL1xcbiAyNjI6XFx0XFx0XFx0bmV0ZGV2X3dhcm4ocGVlci1cXHUwMDNlb3Zwbi1cXHUwMDNlZGV2LFxcbiAyNjM6XFx0XFx0XFx0XFx0ICAgIFxcXCJraWxsaW5nIGtleSAldSBmb3IgcGVlciAldVxcXFxuXFxcIiwga3MtXFx1MDAzZWtleV9pZCxcXG4gMjY0OlxcdFxcdFxcdFxcdCAgICBwZWVyLVxcdTAwM2VpZCk7XFxuIDI2NTpcXHRcXHRcXHRpZiAob3Zwbl9jcnlwdG9fa2lsbF9rZXkoXFx1MDAyNnBlZXItXFx1MDAzZWNyeXB0bywga3MtXFx1MDAzZWtleV9pZCkpXFxuIDI2NjpcXHRcXHRcXHRcXHQvKiBsZXQgdXNlcnNwYWNlIGtub3cgc28gdGhhdCBhIG5ldyBrZXkgbXVzdCBiZSBuZWdvdGlhdGVkICovXFxuIDI2NzpcXHRcXHRcXHRcXHRvdnBuX25sX2tleV9zd2FwX25vdGlmeShwZWVyLCBrcy1cXHUwMDNla2V5X2lkKTtcXG4gMjY4OlxcdFxcbiAyNjk6XFx0XFx0XFx0Z290byBlcnI7XFxuIDI3MDpcXHRcXHR9XFxuIDI3MTpcXHRcXG4gMjcyOlxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYyAwKSlcXG4gMjczOlxcdFxcdFxcdGdvdG8gZXJyO1xcbiAyNzQ6XFx0XFxuIDI3NTpcXHRcXHRza2JfbWFya19ub3Rfb25fbGlzdChza2IpO1xcbiAyNzY6XFx0XFx0b3JpZ19sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gMjc3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDo1OS45NDU2Mzc4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIyNjIwMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIEVycm9yIEhhbmRsaW5nIGFuZCBLZXkgTWFuYWdlbWVudCBpbiBPcGVuVlBOKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGZ1bmN0aW9uIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBlcnJvciBjb2RlIGAtRVJBTkdFYC4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgaWYgd2UgZ2V0IGFuIGAtRVJBTkdFYCBlcnJvciwgYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIGNhbGxlZC4gVGhhdCdzIGdvb2QgdG8ga25vdzsgaXQgbWVhbnMgdGhlcmUncyBhIHNwZWNpZmljIGFjdGlvbiBiZWluZyB0YWtlbiB0byBoYW5kbGUgdGhhdCBwYXJ0aWN1bGFyIHJhbmdlIGVycm9yLCBsaWtlbHkgcmVsYXRlZCB0byBrZXkgbWFuYWdlbWVudCBvciBkZWNyeXB0aW9uLiBJdCB3b3VsZCBiZSBnb29kIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYSBsaXR0bGUgYml0IGJldHRlciwganVzdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNhbGwuXG5cbk5vdywgbXkgbWluZCBzaGlmdHMgdG8gYG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlYC4gSSByZW1lbWJlciB0aGlzIGZ1bmN0aW9uLiBJdCdzIGNhbGxlZCBkdXJpbmcgdGhlIGRlY3J5cHRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGZyb20gYG92cG5fZGVjcnlwdF9wb3N0YC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBhbnkgZmFpbHVyZSBkdXJpbmcgZW5kcG9pbnQgdXBkYXRlIGNvdWxkIGNhdXNlIHByb2JsZW1zIGRvd24gdGhlIGxpbmUuIEnigJlkIHdhbnQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgbm90IHNvbWVob3cgcmVsYXRlZCB0byB0aGUgYC1FUkFOR0VgIHNpdHVhdGlvbiBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTIzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNTowMy44NjgyNjAzNzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvb3Zwbi9pby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwODpcXHR2b2lkIG92cG5fZGVjcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXFxuIDEwOTpcXHR7XFxuIDExMDpcXHRcXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xcbiAxMTE6XFx0XFx0dW5zaWduZWQgaW50IHBheWxvYWRfb2Zmc2V0ID0gMDtcXG4gMTEyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBkYXRhO1xcbiAxMTM6XFx0XFx0c3RydWN0IG92cG5fc29ja2V0ICpzb2NrO1xcbiAxMTQ6XFx0XFx0c3RydWN0IG92cG5fcGVlciAqcGVlcjtcXG4gMTE1OlxcdFxcdF9fYmUxNiBwcm90bztcXG4gMTE2OlxcdFxcdF9fYmUzMiAqcGlkO1xcbiAxMTc6XFx0XFxuIDExODpcXHRcXHQvKiBjcnlwdG8gaXMgaGFwcGVuaW5nIGFzeW5jaHJvbm91c2x5LiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkXFxuIDExOTpcXHRcXHQgKiBhZ2FpbiBsYXRlciBieSB0aGUgY3J5cHRvIGNhbGxiYWNrIHdpdGggYSBwcm9wZXIgcmV0dXJuIGNvZGVcXG4gMTIwOlxcdFxcdCAqL1xcbiAxMjE6XFx0XFx0aWYgKHVubGlrZWx5KHJldCA9PSAtRUlOUFJPR1JFU1MpKVxcbiAxMjI6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHRwYXlsb2FkX29mZnNldCA9IG92cG5fc2tiX2NiKHNrYiktXFx1MDAzZXBheWxvYWRfb2Zmc2V0O1xcbiAxMjU6XFx0XFx0a3MgPSBvdnBuX3NrYl9jYihza2IpLVxcdTAwM2VrcztcXG4gMTI2OlxcdFxcdHBlZXIgPSBvdnBuX3NrYl9jYihza2IpLVxcdTAwM2VwZWVyO1xcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHQvKiBjcnlwdG8gaXMgZG9uZSwgY2xlYW51cCBza2IgQ0IgYW5kIGl0cyBtZW1iZXJzICovXFxuIDEyOTpcXHRcXHRrZnJlZShvdnBuX3NrYl9jYihza2IpLVxcdTAwM2VjcnlwdG9fdG1wKTtcXG4gMTMwOlxcdFxcbiAxMzE6XFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKVxcbiAxMzI6XFx0XFx0XFx0Z290byBkcm9wO1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHQvKiBQSUQgc2l0cyBhZnRlciB0aGUgb3AgKi9cXG4gMTM1OlxcdFxcdHBpZCA9IChfX2ZvcmNlIF9fYmUzMiAqKShza2ItXFx1MDAzZWRhdGEgKyBPVlBOX09QQ09ERV9TSVpFKTtcXG4gMTM2OlxcdFxcdHJldCA9IG92cG5fcGt0aWRfcmVjdihcXHUwMDI2a3MtXFx1MDAzZXBpZF9yZWN2LCBudG9obCgqcGlkKSwgMCk7XFxuIDEzNzpcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG4gMTM4OlxcdFxcdFxcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXFxcIiVzOiBQS1QgSUQgUlggZXJyb3IgZm9yIHBlZXIgJXU6ICVkXFxcXG5cXFwiLFxcbiAxMzk6XFx0XFx0XFx0XFx0XFx0ICAgIG5ldGRldl9uYW1lKHBlZXItXFx1MDAzZW92cG4tXFx1MDAzZWRldiksIHBlZXItXFx1MDAzZWlkLFxcbiAxNDA6XFx0XFx0XFx0XFx0XFx0ICAgIHJldCk7XFxuIDE0MTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDE0MjpcXHRcXHR9XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdC8qIGtlZXAgdHJhY2sgb2YgbGFzdCByZWNlaXZlZCBhdXRoZW50aWNhdGVkIHBhY2tldCBmb3Iga2VlcGFsaXZlICovXFxuIDE0NTpcXHRcXHRXUklURV9PTkNFKHBlZXItXFx1MDAzZWxhc3RfcmVjdiwga3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKSk7XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMTQ4OlxcdFxcdHNvY2sgPSByY3VfZGVyZWZlcmVuY2UocGVlci1cXHUwMDNlc29jayk7XFxuIDE0OTpcXHRcXHRpZiAoc29jayBcXHUwMDI2XFx1MDAyNiBzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApXFxuIDE1MDpcXHRcXHRcXHQvKiBjaGVjayBpZiB0aGlzIHBlZXIgY2hhbmdlZCBsb2NhbCBvciByZW1vdGUgZW5kcG9pbnQgKi9cXG4gMTUxOlxcdFxcdFxcdG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlKHBlZXIsIHNrYik7XFxuIDE1MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0LyogcG9pbnQgdG8gZW5jYXBzdWxhdGVkIElQIHBhY2tldCAqL1xcbiAxNTU6XFx0XFx0X19za2JfcHVsbChza2IsIHBheWxvYWRfb2Zmc2V0KTtcXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFx0LyogY2hlY2sgaWYgdGhpcyBpcyBhIHZhbGlkIGRhdGFwYWNrZXQgdGhhdCBoYXMgdG8gYmUgZGVsaXZlcmVkIHRvIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNTowMy44NjgzNDE1NDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4NTkyMjc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCB0aGUgZmFjdCB0aGF0IGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAgaXMgYmVpbmcgY2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBVRFAgcGFja2V0IGRlY3J5cHRpb24gdGVsbHMgbWUgc29tZXRoaW5nIGNyaXRpY2FsOiB3ZSdyZSBkZWFsaW5nIHdpdGggYSB3b3JraW5nIHBhdGguIFRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgcmVhY2hlZCBhbmQgZXhlY3V0ZWQsIGluZGljYXRpbmcgYSBmdW5jdGlvbmFsIGVuZHBvaW50IHVwZGF0ZSBwcm9jZXNzIHdpdGhpbiB0aGUgT3BlblZQTiBkcml2ZXIuIEkgY2FuIGNvbmZpcm0gdGhpcyBpcyBub3QgbWVyZWx5IHRoZW9yZXRpY2FsLCBidXQgaGFzIGJlZW4gb2JzZXJ2ZWQuIFRoaXMgaXMgZ29vZCwgYmVjYXVzZSBpdCB2YWxpZGF0ZXMgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHBhdGggb2YgZXhlY3V0aW9uLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAgaXRzZWxmLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgY29uc3VsdGluZyBgZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNgIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGxvZ2ljIGlzIGJlaW5nIHRyaWdnZXJlZCBpbiB0aGlzIHN1Y2Nlc3NmdWwgZGVjcnlwdGlvbiBzY2VuYXJpby4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBzaWduaWZpY2FudCBmb3IgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgb3ZlcmFsbCBuZXR3b3JrIGJlaGF2aW91ciwgc28gSSBuZWVkIGEgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA1OjA4LjQ1NDI2NjQwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NzpcXHR2b2lkIG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDE5ODpcXHR7XFxuIDE5OTpcXHRcXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqbmhlYWQ7XFxuIDIwMDpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcztcXG4gMjAxOlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNhNjtcXG4gMjAyOlxcdFxcdGJvb2wgcmVzZXRfY2FjaGUgPSBmYWxzZTtcXG4gMjAzOlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9pbiAqc2E7XFxuIDIwNDpcXHRcXHRzdHJ1Y3Qgb3Zwbl9iaW5kICpiaW5kO1xcbiAyMDU6XFx0XFx0Y29uc3Qgdm9pZCAqbG9jYWxfaXA7XFxuIDIwNjpcXHRcXHRzaXplX3Qgc2FsZW4gPSAwO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnBlZXItXFx1MDAzZWxvY2spO1xcbiAyMDk6XFx0XFx0YmluZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGVlci1cXHUwMDNlYmluZCxcXG4gMjEwOlxcdFxcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnBlZXItXFx1MDAzZWxvY2spKTtcXG4gMjExOlxcdFxcdGlmICh1bmxpa2VseSghYmluZCkpXFxuIDIxMjpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuIDIxNTpcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4gMjE2OlxcdFxcdFxcdC8qIGZsb2F0IGNoZWNrICovXFxuIDIxNzpcXHRcXHRcXHRpZiAodW5saWtlbHkoIW92cG5fYmluZF9za2Jfc3JjX21hdGNoKGJpbmQsIHNrYikpKSB7XFxuIDIxODpcXHRcXHRcXHRcXHQvKiB1bmNvbmRpdGlvbmFsbHkgc2F2ZSBsb2NhbCBlbmRwb2ludCBpbiBjYXNlXFxuIDIxOTpcXHRcXHRcXHRcXHQgKiBvZiBmbG9hdCwgYXMgaXQgbWF5IGhhdmUgY2hhbmdlZCBhcyB3ZWxsXFxuIDIyMDpcXHRcXHRcXHRcXHQgKi9cXG4gMjIxOlxcdFxcdFxcdFxcdGxvY2FsX2lwID0gXFx1MDAyNmlwX2hkcihza2IpLVxcdTAwM2VkYWRkcjtcXG4gMjIyOlxcdFxcdFxcdFxcdHNhID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVxcdTAwMjZzcztcXG4gMjIzOlxcdFxcdFxcdFxcdHNhLVxcdTAwM2VzaW5fZmFtaWx5ID0gQUZfSU5FVDtcXG4gMjI0OlxcdFxcdFxcdFxcdHNhLVxcdTAwM2VzaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHI7XFxuIDIyNTpcXHRcXHRcXHRcXHRzYS1cXHUwMDNlc2luX3BvcnQgPSB1ZHBfaGRyKHNrYiktXFx1MDAzZXNvdXJjZTtcXG4gMjI2OlxcdFxcdFxcdFxcdHNhbGVuID0gc2l6ZW9mKCpzYSk7XFxuIDIyNzpcXHRcXHRcXHRcXHRyZXNldF9jYWNoZSA9IHRydWU7XFxuIDIyODpcXHRcXHRcXHRcXHRicmVhaztcXG4gMjI5OlxcdFxcdFxcdH1cXG4gMjMwOlxcdFxcbiAyMzE6XFx0XFx0XFx0LyogaWYgbm8gZmxvYXQgaGFwcGVuZWQsIGxldCdzIGRvdWJsZSBjaGVjayBpZiB0aGUgbG9jYWwgZW5kcG9pbnRcXG4gMjMyOlxcdFxcdFxcdCAqIGhhcyBjaGFuZ2VkXFxuIDIzMzpcXHRcXHRcXHQgKi9cXG4gMjM0OlxcdFxcdFxcdGlmICh1bmxpa2VseShiaW5kLVxcdTAwM2Vsb2NhbC5pcHY0LnNfYWRkciAhPSBpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpKSB7XFxuIDIzNTpcXHRcXHRcXHRcXHRuZXRfZGJnX3JhdGVsaW1pdGVkKFxcXCIlczogbGVhcm5pbmcgbG9jYWwgSVB2NCBmb3IgcGVlciAlZCAoJXBJNCAtXFx1MDAzZSAlcEk0KVxcXFxuXFxcIixcXG4gMjM2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBuZXRkZXZfbmFtZShwZWVyLVxcdTAwM2VvdnBuLVxcdTAwM2VkZXYpLFxcbiAyMzc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBlZXItXFx1MDAzZWlkLCBcXHUwMDI2YmluZC1cXHUwMDNlbG9jYWwuaXB2NC5zX2FkZHIsXFxuIDIzODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwX2hkcihza2IpLVxcdTAwM2VkYWRkcik7XFxuIDIzOTpcXHRcXHRcXHRcXHRiaW5kLVxcdTAwM2Vsb2NhbC5pcHY0LnNfYWRkciA9IGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcjtcXG4gMjQwOlxcdFxcdFxcdFxcdHJlc2V0X2NhY2hlID0gdHJ1ZTtcXG4gMjQxOlxcdFxcdFxcdH1cXG4gMjQyOlxcdFxcdFxcdGJyZWFrO1xcbiAyNDM6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4gMjQ0OlxcdFxcdFxcdC8qIGZsb2F0IGNoZWNrICovXFxuIDI0NTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIW92cG5fYmluZF9za2Jfc3JjX21hdGNoKGJpbmQsIHNrYikpKSB7XFxuIDI0NjpcXHRcXHRcXHRcXHQvKiB1bmNvbmRpdGlvbmFsbHkgc2F2ZSBsb2NhbCBlbmRwb2ludCBpbiBjYXNlXFxuIDI0NzpcXHRcXHRcXHRcXHQgKiBvZiBmbG9hdCwgYXMgaXQgbWF5IGhhdmUgY2hhbmdlZCBhcyB3ZWxsXFxuIDI0ODpcXHRcXHRcXHRcXHQgKi9cXG4gMjQ5OlxcdFxcdFxcdFxcdGxvY2FsX2lwID0gXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyO1xcbiAyNTA6XFx0XFx0XFx0XFx0c2E2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilcXHUwMDI2c3M7XFxuIDI1MTpcXHRcXHRcXHRcXHRzYTYtXFx1MDAzZXNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7XFxuIDI1MjpcXHRcXHRcXHRcXHRzYTYtXFx1MDAzZXNpbjZfYWRkciA9IGlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyO1xcbiAyNTM6XFx0XFx0XFx0XFx0c2E2LVxcdTAwM2VzaW42X3BvcnQgPSB1ZHBfaGRyKHNrYiktXFx1MDAzZXNvdXJjZTtcXG4gMjU0OlxcdFxcdFxcdFxcdHNhNi1cXHUwMDNlc2luNl9zY29wZV9pZCA9IGlwdjZfaWZhY2Vfc2NvcGVfaWQoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbiAyNTU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlc2tiX2lpZik7XFxuIDI1NjpcXHRcXHRcXHRcXHRzYWxlbiA9IHNpemVvZigqc2E2KTtcXG4gMjU3OlxcdFxcdFxcdFxcdHJlc2V0X2NhY2hlID0gdHJ1ZTtcXG4gMjU4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyNTk6XFx0XFx0XFx0fVxcbiAyNjA6XFx0XFxuIDI2MTpcXHRcXHRcXHQvKiBpZiBubyBmbG9hdCBoYXBwZW5lZCwgbGV0J3MgZG91YmxlIGNoZWNrIGlmIHRoZSBsb2NhbCBlbmRwb2ludFxcbiAyNjI6XFx0XFx0XFx0ICogaGFzIGNoYW5nZWRcXG4gMjYzOlxcdFxcdFxcdCAqL1xcbiAyNjQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmJpbmQtXFx1MDAzZWxvY2FsLmlwdjYsXFxuIDI2NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpKSkge1xcbiAyNjY6XFx0XFx0XFx0XFx0bmV0X2RiZ19yYXRlbGltaXRlZChcXFwiJXM6IGxlYXJuaW5nIGxvY2FsIElQdjYgZm9yIHBlZXIgJWQgKCVwSTZjIC1cXHUwMDNlICVwSTZjKVxcXFxuXFxcIixcXG4gMjY3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBuZXRkZXZfbmFtZShwZWVyLVxcdTAwM2VvdnBuLVxcdTAwM2VkZXYpLFxcbiAyNjg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBlZXItXFx1MDAzZWlkLCBcXHUwMDI2YmluZC1cXHUwMDNlbG9jYWwuaXB2NixcXG4gMjY5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpO1xcbiAyNzA6XFx0XFx0XFx0XFx0YmluZC1cXHUwMDNlbG9jYWwuaXB2NiA9IGlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyO1xcbiAyNzE6XFx0XFx0XFx0XFx0cmVzZXRfY2FjaGUgPSB0cnVlO1xcbiAyNzI6XFx0XFx0XFx0fVxcbiAyNzM6XFx0XFx0XFx0YnJlYWs7XFxuIDI3NDpcXHRcXHRkZWZhdWx0OlxcbiAyNzU6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIDI3NjpcXHRcXHR9XFxuIDI3NzpcXHRcXG4gMjc4OlxcdFxcdGlmICh1bmxpa2VseShyZXNldF9jYWNoZSkpXFxuIDI3OTpcXHRcXHRcXHRkc3RfY2FjaGVfcmVzZXQoXFx1MDAyNnBlZXItXFx1MDAzZWRzdF9jYWNoZSk7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdC8qIGlmIHRoZSBwZWVyIGRpZCBub3QgZmxvYXQsIHdlIGNhbiBiYWlsIG91dCBub3cgKi9cXG4gMjgyOlxcdFxcdGlmIChsaWtlbHkoIXNhbGVuKSlcXG4gMjgzOlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiAyODQ6XFx0XFxuIDI4NTpcXHRcXHRpZiAodW5saWtlbHkob3Zwbl9wZWVyX3Jlc2V0X3NvY2thZGRyKHBlZXIsXFxuIDI4NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKilcXHUwMDI2c3MsXFxuIDI4NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBsb2NhbF9pcCkgXFx1MDAzYyAwKSlcXG4gMjg4OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiAyODk6XFx0XFxuIDI5MDpcXHRcXHRuZXRfZGJnX3JhdGVsaW1pdGVkKFxcXCIlczogcGVlciAlZCBmbG9hdGVkIHRvICVwSVNjcFxcXCIsXFxuIDI5MTpcXHRcXHRcXHRcXHQgICAgbmV0ZGV2X25hbWUocGVlci1cXHUwMDNlb3Zwbi1cXHUwMDNlZGV2KSwgcGVlci1cXHUwMDNlaWQsIFxcdTAwMjZzcyk7XFxuIDI5MjpcXHRcXG4gMjkzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwZWVyLVxcdTAwM2Vsb2NrKTtcXG4gMjk0OlxcdFxcbiAyOTU6XFx0XFx0b3Zwbl9ubF9wZWVyX2Zsb2F0X25vdGlmeShwZWVyLCBcXHUwMDI2c3MpO1xcbiAyOTY6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA1OjA4LjQ1NDQyNzU1NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Nzg3NDIwMTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uIGluIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRpZmYgaW4gYG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlYCwgYW5kIGl0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGNoZWNrIGZvciBgaGxpc3RfdW5oYXNoZWQoXHUwMDI2cGVlci1cdTAwM2VoYXNoX2VudHJ5X2lkKWAgaW4gdGhlIGBpZiAodW5saWtlbHkoIWJpbmQpKWAgY29uZGl0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IHdoYXQncyBkcml2aW5nIHRoaXM/IFdoeSBhcmUgd2Ugc3VkZGVubHkgY29uY2VybmVkIGFib3V0IHRoZSBwZWVyIGJlaW5nIHVuaGFzaGVkP1xuXG5JIHJlbWVtYmVyIHRoaXMgZnVuY3Rpb24sIGl0IHVwZGF0ZXMgdGhlIHBlZXIncyBlbmRwb2ludHMsIGFuZCB1c2VzIFJDVSBmb3IgYWNjZXNzaW5nIHRoZSBgYmluZGAgcG9pbnRlciB1bmRlciBgcGVlci1cdTAwM2Vsb2NrYC4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IHRoZSBgcGVlci1cdTAwM2Vsb2NrYCBpcyAqcmVsZWFzZWQqIGJlZm9yZSBhY2Nlc3NpbmcgYGJpbmRgLiBUaGlzIG1lYW5zIGEgd2luZG93IGV4aXN0cyBiZXR3ZWVuIHRoZSBsb2NrIHJlbGVhc2UgYW5kIHRoZSBjaGVjayBmb3IgYCFiaW5kYC4gVGhhdCB3aW5kb3cgaXMgdGhlIHZ1bG5lcmFiaWxpdHkuXG5cblRoZSBjb21tZW50IG5haWxzIGl0OiAgYG92cG5fcGVlcl9yZW1vdmUoKWAgY2FuIHVuaGFzaCB0aGUgcGVlcidzIGhhc2ggZW50cnkgdW5kZXIgYG92cG4tXHUwMDNlbG9ja2AuICBJZiBgb3Zwbl9wZWVyX3JlbW92ZWAgaXMgY2FsbGVkIHdoaWxlIHRoaXMgZnVuY3Rpb24gaXMgcnVubmluZyAoc3BlY2lmaWNhbGx5IGJldHdlZW4gYHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBlZXItXHUwMDNlbG9jaylgIGFuZCB0aGUgY2hlY2sgZm9yIGBiaW5kYCksIHRoZW4gdGhlIHBlZXIgY291bGQgYmUgZnJlZWQsIGFuZCByZS1saW5raW5nIHRoZSBub3ctZnJlZWQgcGVlciB3b3VsZCBiZSBiYWQgbmV3cyBiZWFycy4gVGhlIG5ldyBjb2RlIGlzIGNhdGNoaW5nIHRoaXMgYnkgY2hlY2tpbmcgaWYgdGhlIHBlZXIgaGFzIGJlZW4gdW5oYXNoZWQuIFRoaXMgbmV3IGNoZWNrIChgaGxpc3RfdW5oYXNoZWRgKSBzZWVtcyBsaWtlIGEgZ3JlYXQgYWRkaXRpb24gdG8gcHJvdmlkZSBzYWZldHkgaW4gdGhpcyByYWNlLWNvbmRpdGlvbi4gV2UncmUgZWZmZWN0aXZlbHkgZW5zdXJpbmcgdGhhdCB0aGUgcGVlciBpcyBzdGlsbCB2YWxpZCBiZWZvcmUgY29udGludWluZyB0aGUgdXBkYXRlIHByb2Nlc3MuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgcmVhZCB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIG1heWJlIGludmVzdGlnYXRlIG90aGVyIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6MDU6MTcuMjQxODUwOTcyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9vdnBuL3BlZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTA6XFx0XFx0bmV0X2RiZ19yYXRlbGltaXRlZChcXFwiJXM6IHBlZXIgJWQgZmxvYXRlZCB0byAlcElTY3BcXFwiLFxcbiAyOTE6XFx0XFx0XFx0XFx0ICAgIG5ldGRldl9uYW1lKHBlZXItXFx1MDAzZW92cG4tXFx1MDAzZWRldiksIHBlZXItXFx1MDAzZWlkLCBcXHUwMDI2c3MpO1xcbiAyOTI6XFx0XFxuIDI5MzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cGVlci1cXHUwMDNlbG9jayk7XFxuIDI5NDpcXHRcXG4gMjk1OlxcdFxcdG92cG5fbmxfcGVlcl9mbG9hdF9ub3RpZnkocGVlciwgXFx1MDAyNnNzKTtcXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0LyogcmVoYXNoaW5nIGlzIHJlcXVpcmVkIG9ubHkgaW4gTVAgbW9kZSBhcyBQMlAgaGFzIG9uZSBwZWVyXFxuIDI5ODpcXHRcXHQgKiBvbmx5IGFuZCB0aHVzIHRoZXJlIGlzIG5vIGhhc2h0YWJsZVxcbiAyOTk6XFx0XFx0ICovXFxuIDMwMDpcXHRcXHRpZiAocGVlci1cXHUwMDNlb3Zwbi1cXHUwMDNlbW9kZSA9PSBPVlBOX01PREVfTVApIHtcXG4gMzAxOlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cGVlci1cXHUwMDNlb3Zwbi1cXHUwMDNlbG9jayk7XFxuIDMwMjpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnBlZXItXFx1MDAzZWxvY2spO1xcbiAzMDM6XFx0XFx0XFx0YmluZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGVlci1cXHUwMDNlYmluZCxcXG4gMzA0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnBlZXItXFx1MDAzZWxvY2spKTtcXG4gMzA1OlxcdFxcdFxcdC8qIHBlZXItXFx1MDAzZWxvY2sgd2FzIHJlbGVhc2VkIGFib3ZlLCB0aGVyZWZvcmUgdGhlIHBlZXIgbWF5IGhhdmVcXG4gMzA2OlxcdFxcdFxcdCAqIGJlZW4gcmVtb3ZlZCBpbiB0aGUgbWVhbnRpbWU6IG92cG5fcGVlcl9yZW1vdmUoKSB1bmhhc2hlc1xcbiAzMDc6XFx0XFx0XFx0ICogaGFzaF9lbnRyeV9pZCB1bmRlciBvdnBuLVxcdTAwM2Vsb2NrLiBSZS1saW5raW5nIGEgcmVtb3ZlZCBwZWVyXFxuIDMwODpcXHRcXHRcXHQgKiB3b3VsZCBsZWF2ZSBpdCByZWFjaGFibGUgYWZ0ZXIgaXQgaGFzIGJlZW4gZnJlZWQuXFxuIDMwOTpcXHRcXHRcXHQgKi9cXG4gMzEwOlxcdFxcdFxcdGlmICh1bmxpa2VseSghYmluZCB8fCBobGlzdF91bmhhc2hlZChcXHUwMDI2cGVlci1cXHUwMDNlaGFzaF9lbnRyeV9pZCkpKSB7XFxuIDMxMTpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cGVlci1cXHUwMDNlbG9jayk7XFxuIDMxMjpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cGVlci1cXHUwMDNlb3Zwbi1cXHUwMDNlbG9jayk7XFxuIDMxMzpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDMxNDpcXHRcXHRcXHR9XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdFxcdC8qIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5LCB0aGVyZWZvcmUgYW5vdGhlclxcbiAzMTc6XFx0XFx0XFx0ICogZmxvYXQgbWF5IGhhdmUgaGFwcGVuZWQgaW4gcGFyYWxsZWw6IHBlcmZvcm0gcmVoYXNoaW5nXFxuIDMxODpcXHRcXHRcXHQgKiB1c2luZyB0aGUgcGVlci1cXHUwMDNlYmluZC1cXHUwMDNlcmVtb3RlIGRpcmVjdGx5IGFzIGtleVxcbiAzMTk6XFx0XFx0XFx0ICovXFxuIDMyMDpcXHRcXG4gMzIxOlxcdFxcdFxcdHN3aXRjaCAoYmluZC1cXHUwMDNlcmVtb3RlLmluNC5zaW5fZmFtaWx5KSB7XFxuIDMyMjpcXHRcXHRcXHRjYXNlIEFGX0lORVQ6XFxuIDMyMzpcXHRcXHRcXHRcXHRzYWxlbiA9IHNpemVvZigqc2EpO1xcbiAzMjQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDMyNTpcXHRcXHRcXHRjYXNlIEFGX0lORVQ2OlxcbiAzMjY6XFx0XFx0XFx0XFx0c2FsZW4gPSBzaXplb2YoKnNhNik7XFxuIDMyNzpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzI4OlxcdFxcdFxcdH1cXG4gMzI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNToxNy4yNDIwMjYyMTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM0OTEyOTEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBPcGVuVlBOIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAgaXMgZGVmaW5pdGVseSB3b3JraW5nIGFzIGV4cGVjdGVkOyB0aGF0J3MgZ29vZC4gTXkgZm9jdXMgaXMgb24gdGhlIGBPVlBOYCBjb25maWd1cmF0aW9ucy4gUmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIHNldC4gTm93LCBsZXQncyBzZWUsIGBPVlBOYCBkZXBlbmRzIG9uIGBORVQgXHUwMDI2XHUwMDI2IElORVRgIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB0aGUgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LiBJdCBhbHNvIHNlbGVjdHMgYERTVF9DQUNIRWAsIGBORVRfVURQX1RVTk5FTGAsIGBDUllQVE9gLCBgQ1JZUFRPX0FFU2AsIGBDUllQVE9fR0NNYCwgYENSWVBUT19DSEFDSEEyMFBPTFkxMzA1YCwgYW5kIGBTVFJFQU1fUEFSU0VSYC4gR29vZCwgc28gY29uZmlybWluZyBgT1ZQTmAgaXMgdGhlIG9ubHkgY29uZmlnIEkgbmVlZCwgYXQgbGVhc3QgZm9yIG5vdy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSSB0aGluayBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGFuZCBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIGFyZSBnb29kIGNhbmRpZGF0ZXMgdG8gcmVhbGx5IGZvY3VzIGluIG9uLiBZdXAsIGJvdGggYXJlIGRlZmluaXRlbHkgc29saWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIga2V5IGZ1bmN0aW9ucz8gSSBzaG91bGQgYWRkIGBvdnBuX2RlY3J5cHRfcG9zdGAgYW5kIGBvdnBuX2VuY3J5cHRfcG9zdGAgdG8gdGhlIGxpc3Q7IEkgY2FuIGRlZmluaXRlbHkgc2VlIHRob3NlIGJlaW5nIGltcG9ydGFudC4gT2theSwgYW5kIGZvciB0aGUgZW50cnkgcG9pbnRzLCBgb3Zwbl91ZHBfZW5jYXBfcmVjdmAgYW5kIGBvdnBuX3RjcF9yY3ZgIGxvb2sgbGlrZSB0aGUgY29ycmVjdCBzcG90cy4gQW5kLCBvYnZpb3VzbHksIGBvdnBuX25ldF94bWl0YCBoYW5kbGVzIHRoZSBzZW5kIG9wZXJhdGlvbnMuIFJpZ2h0LCBJJ2xsIGFkZCB0aG9zZSB0byBteSBmb2N1cyBzeW1ib2xzLCBtYWtpbmcgc3VyZSBJIGxvb2sgYXQgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucy5cblxuV2FpdCBhIHNlY29uZCwgYG92cG5fdWRwX2VuY2FwX3JlY3ZgIGlzIHN0YXRpYy4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0J3MgaW5saW5lZC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNToyNC41OTExNTc4OTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTUxNzA1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnBuX3VkcF9lbmNhcF9yZWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L292cG4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vdWRwLmM9MzM9c3RhdGljIHN0cnVjdCBvdnBuX3NvY2tldCAqb3Zwbl9zb2NrZXRfZnJvbV91ZHBfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTUxLS8qKlxcbmRyaXZlcnMvbmV0L292cG4vdWRwLmM6NTI6ICogb3Zwbl91ZHBfZW5jYXBfcmVjdiAtIFN0YXJ0IHByb2Nlc3NpbmcgYSByZWNlaXZlZCBVRFAgcGFja2V0LlxcbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtNTMtICogQHNrOiBzb2NrZXQgb3ZlciB3aGljaCB0aGUgcGFja2V0IHdhcyByZWNlaXZlZFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy02Ni0gKi9cXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jOjY3OnN0YXRpYyBpbnQgb3Zwbl91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy02OC17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jPTM4ND1pbnQgb3Zwbl91ZHBfc29ja2V0X2F0dGFjaChzdHJ1Y3Qgb3Zwbl9zb2NrZXQgKm92cG5fc29jaywgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtMzg5LVxcdFxcdC5lbmNhcF90eXBlID0gVURQX0VOQ0FQX09WUE5JTlVEUCxcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jOjM5MDpcXHRcXHQuZW5jYXBfcmN2ID0gb3Zwbl91ZHBfZW5jYXBfcmVjdixcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTM5MS1cXHRcXHQuZW5jYXBfZGVzdHJveSA9IG92cG5fdWRwX2VuY2FwX2Rlc3Ryb3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA1OjI1LjAzNjY4MjEzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3ODM2NDU5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBQZXJmb3JtYW5jZSBCb3R0bGVuZWNrcyBpbiB0aGUgT3BlblZQTiBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgcGFzc2VkIGFzIGEgcG9pbnRlci4gVGhhdCBtZWFucyBpdCdzIGhpZ2hseSB1bmxpa2VseSB0aGF0IHRoZSBjb21waWxlciB3aWxsIGJlIGFibGUgdG8gaW5saW5lIGl0LCB3aGljaCBpcyBzb21ldGhpbmcgSSBhbHdheXMga2VlcCBhbiBleWUgb3V0IGZvciB3aGVuIHBlcmZvcm1hbmNlIHR1bmluZy4gSSB3YW50IHRvIGlkZW50aWZ5IGFyZWFzIHJpcGUgZm9yIG9wdGltaXphdGlvbi5cblxuUmlnaHQgbm93LCBteSBndXQgc2F5cyB0aGF0IEkgc2hvdWxkIHN0YXJ0IGxvb2tpbmcgYXQgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9ydGVkIG9yLCBhdCBsZWFzdCwgbm90IHN0YXRpYy4gYG92cG5fZGVjcnlwdF9wb3N0YCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCBmaXQgdGhhdCBiaWxsLiBTbyBJJ2xsIHN0YXJ0IHRoZXJlLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGEgZmV3IG90aGVycywgc3VjaCBhcyBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIGFyZSBhbHNvIGluIHRoaXMgY2F0ZWdvcnksIGFzIGlzIGBvdnBuX2NyeXB0b19raWxsX2tleWAuXG5cblRoZXJlZm9yZSwgdGhlIG1haW4gZnVuY3Rpb24gc3ltYm9scyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYXJlOlxuXG4qICAgYG92cG5fY3J5cHRvX2tpbGxfa2V5YFxuKiAgIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWBcbiogICBgb3Zwbl9kZWNyeXB0X3Bvc3RgXG4qICAgYG92cG5fZW5jcnlwdF9wb3N0YFxuXG5OZXh0LCBJJ2xsIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiBJJ20gc2VlaW5nIGlzIGBPVlBOYC4gSSBzaG91bGQgZW5zdXJlIG5vIG90aGVyIG9wdGlvbnMgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIGZ1bmN0aW9ucywgc3VjaCBhcyBpZiBzdGF0ZW1lbnRzIHRoYXQgZG8gbm90IHJlbHkgb24gYE9WUE5gLiBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyB1bmRlciBgZHJpdmVycy9uZXQvb3Zwbi9LY29uZmlnYCBhbmQgYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3NzaWJsZSBidWlsZCBjb25maWd1cmF0aW9uIGNvbnNpZGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQxMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNTozMS44MjAzMzA2OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MzA1Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPVlBOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTkyPWNvbmZpZyBXSVJFR1VBUkRfREVCVUdcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMTAyLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTAzOmNvbmZpZyBPVlBOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMDQtXFx0dHJpc3RhdGUgXFxcIk9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA1OjMxLjk1NDY0MTMzNloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzEzNDEyOTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE9wZW5WUE4gRHJpdmVyIFZ1bG5lcmFiaWxpdHkgRml4KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIFRoaXMgZml4IGlzIHRhcmdldGVkIGF0IHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agc2VjdGlvbiwgc28gaXQncyBjbGVhcmx5IGZvY3VzaW5nIG9uIHRoZSBPcGVuVlBOIGRyaXZlciwgYE9WUE5gLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGNhbiBxdWlja2x5IGRpc3RpbGwgdGhlIGtleSBlbGVtZW50czogdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0YWdnZWQgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGF0IGZ1enppbmcgd291bGQgYmUgYSB2YWx1YWJsZSBhcHByb2FjaCB0byB2YWxpZGF0ZSB0aGUgZml4LlxuXG5UaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMuIEkgc2VlIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAsIGBvdnBuX2RlY3J5cHRfcG9zdGAsIGFuZCBgb3Zwbl9lbmNyeXB0X3Bvc3RgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBPcGVuVlBOIGFyY2hpdGVjdHVyZSwgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgaW52b2x2ZWQgaW4ga2V5IG1hbmFnZW1lbnQsIGVuZHBvaW50IGhhbmRsaW5nIChjcnVjaWFsIGZvciBjb25uZWN0aW9ucyksIGFuZCBwb3N0LXByb2Nlc3Npbmcgb2YgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLiBUaGUgZml4IGlzIGVuYWJsaW5nIHRoZSBgT1ZQTmAgY29uZmlnIGl0c2VsZi5cblxuVGhlIHJlYXNvbmluZyBwcm92aWRlZCBzdGF0ZXMgdGhhdCB0aGUgcGF0Y2ggYWRkcmVzc2VzIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIHdpdGhpbiB0aGUgYG92cG5gIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBjb3JlIGxvZ2ljIHJlbGF0ZWQgdG8gY3J5cHRvIGtleXMgYW5kIHBlZXIgZW5kcG9pbnQgdXBkYXRlcy4gVGhhdCdzIGEgY2xhc3NpYyBjb21iaW5hdGlvbiBvZiB2dWxuZXJhYmlsaXRpZXMsIGFuZCB0aGUgc3BlY2lmaWMgbG9jYXRpb25zIGFyZSBjb25jZXJuaW5nLiBUaGVzZSBpc3N1ZXMgb2Z0ZW4gc3RlbSBmcm9tIHJhY2UgY29uZGl0aW9ucywgaW1wcm9wZXIgZXJyb3IgaGFuZGxpbmcsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGZsYXdzLiBHaXZlbiB0aGUgaW1wYWN0IG9uIHRoZSBkYXRhIGNoYW5uZWwsIHRoaXMgZml4IGlzIGNsZWFybHkgaGlnaC1wcmlvcml0eSBhbmQgcmVxdWlyZXMgdGhvcm91Z2ggc2NydXRpbnkuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgcGF0Y2ggaXRzZWxmIHRvIHNlZSBob3cgdGhlc2UgdnVsbmVyYWJpbGl0aWVzIHdlcmUgbWFuaWZlc3RlZCBhbmQgaG93IHRoZSBmaXggYWRkcmVzc2VzIHRoZW0sIGJ1dCB0aGlzIGluaXRpYWwgYW5hbHlzaXMgaXMgcHJvbWlzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA0MCwiT3V0cHV0VG9rZW5zIjoxMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6MDU6MzguMjY4MDU2ODhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTYyOTQ5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1ZQTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92cG5fY3J5cHRvX2tpbGxfa2V5XCIsXG4gICAgXCJvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZVwiLFxuICAgIFwib3Zwbl9kZWNyeXB0X3Bvc3RcIixcbiAgICBcIm92cG5fZW5jcnlwdF9wb3N0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgaW4gdGhlIE9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWQgZHJpdmVyIChvdnBuKS4gVGhlIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyBoYW5kbGluZyBjcnlwdG9ncmFwaGljIGtleXMgYW5kIHBlZXIgZW5kcG9pbnQgdXBkYXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPVlBOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3Zwbl9jcnlwdG9fa2lsbF9rZXlcIixcbiAgICBcIm92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlXCIsXG4gICAgXCJvdnBuX2RlY3J5cHRfcG9zdFwiLFxuICAgIFwib3Zwbl9lbmNyeXB0X3Bvc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBpbiB0aGUgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZCBkcml2ZXIgKG92cG4pLiBUaGUgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIGhhbmRsaW5nIGNyeXB0b2dyYXBoaWMga2V5cyBhbmQgcGVlciBlbmRwb2ludCB1cGRhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowqwhfr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 16:01:55 +0000 UTC FinishedAt: 2026-08-05 16:05:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OVPN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OVPN" ], "series_id": "3dae8b26-6e0d-4d90-91db-8b34ccf5ea49" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovpn_crypto_kill_key", "ovpn_peer_endpoints_update", "ovpn_decrypt_post", "ovpn_encrypt_post" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09WUE4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdnBuX2NyeXB0b19raWxsX2tleSYjMzQ7LAogICAgJiMzNDtvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtvdnBuX2RlY3J5cHRfcG9zdCYjMzQ7LAogICAgJiMzNDtvdnBuX2VuY3J5cHRfcG9zdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBpbiB0aGUgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZCBkcml2ZXIgKG92cG4pLiBUaGUgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIGhhbmRsaW5nIGNyeXB0b2dyYXBoaWMga2V5cyBhbmQgcGVlciBlbmRwb2ludCB1cGRhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTljYTczOTFhMjM5ZThlYmJkZDhiOTg4MTQ3Y2E2NjVkN2JmMDA0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTY6MDQ6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmNcbmluZGV4IDkwNTgwZTMyMDUyZmIuLjJjNTZmYjE4MGVkOGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jXG5AQCAtNjAsMTAgJiM0Mzs2MCwxMiBAQCBib29sIG92cG5fY3J5cHRvX2tpbGxfa2V5KHN0cnVjdCBvdnBuX2NyeXB0b19zdGF0ZSAqY3MsIHU4IGtleV9pZClcbiBcdHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MgPSBOVUxMO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNzLVx1MDAzZWxvY2spO1xuLVx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cdTAwM2VzbG90c1swXSktXHUwMDNla2V5X2lkID09IGtleV9pZCkge1xuJiM0MztcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMF0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICByY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMF0pLVx1MDAzZWtleV9pZCA9PSBrZXlfaWQpIHtcbiBcdFx0a3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzBdLCBOVUxMLFxuIFx0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmNzLVx1MDAzZWxvY2spKTtcbi1cdH0gZWxzZSBpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzFdKS1cdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XG4mIzQzO1x0fSBlbHNlIGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMV0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgcmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzFdKS1cdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XG4gXHRcdGtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy1cdTAwM2VzbG90c1sxXSwgTlVMTCxcbiBcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZjcy1cdTAwM2Vsb2NrKSk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMgYi9kcml2ZXJzL25ldC9vdnBuL3BlZXIuY1xuaW5kZXggYTIxZDAyYWM3MTVlMC4uMDM4ODZjNDZlYzg1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL3BlZXIuY1xuQEAgLTMwMiw3ICYjNDM7MzAyLDEyIEBAIHZvaWQgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBlZXItXHUwMDNlbG9jayk7XG4gXHRcdGJpbmQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBlZXItXHUwMDNlYmluZCxcbiBcdFx0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnBlZXItXHUwMDNlbG9jaykpO1xuLVx0XHRpZiAodW5saWtlbHkoIWJpbmQpKSB7XG4mIzQzO1x0XHQvKiBwZWVyLVx1MDAzZWxvY2sgd2FzIHJlbGVhc2VkIGFib3ZlLCB0aGVyZWZvcmUgdGhlIHBlZXIgbWF5IGhhdmVcbiYjNDM7XHRcdCAqIGJlZW4gcmVtb3ZlZCBpbiB0aGUgbWVhbnRpbWU6IG92cG5fcGVlcl9yZW1vdmUoKSB1bmhhc2hlc1xuJiM0MztcdFx0ICogaGFzaF9lbnRyeV9pZCB1bmRlciBvdnBuLVx1MDAzZWxvY2suIFJlLWxpbmtpbmcgYSByZW1vdmVkIHBlZXJcbiYjNDM7XHRcdCAqIHdvdWxkIGxlYXZlIGl0IHJlYWNoYWJsZSBhZnRlciBpdCBoYXMgYmVlbiBmcmVlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KCFiaW5kIHx8IGhsaXN0X3VuaGFzaGVkKFx1MDAyNnBlZXItXHUwMDNlaGFzaF9lbnRyeV9pZCkpKSB7XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwZWVyLVx1MDAzZW92cG4tXHUwMDNlbG9jayk7XG4gXHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPVlBOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3Zwbl9jcnlwdG9fa2lsbF9rZXkmIzM0OywKICAgICYjMzQ7b3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGUmIzM0OywKICAgICYjMzQ7b3Zwbl9kZWNyeXB0X3Bvc3QmIzM0OywKICAgICYjMzQ7b3Zwbl9lbmNyeXB0X3Bvc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgaW4gdGhlIE9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWQgZHJpdmVyIChvdnBuKS4gVGhlIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyBoYW5kbGluZyBjcnlwdG9ncmFwaGljIGtleXMgYW5kIHBlZXIgZW5kcG9pbnQgdXBkYXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU5Y2E3MzkxYTIzOWU4ZWJiZGQ4Yjk4ODE0N2NhNjY1ZDdiZjAwNGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDE2OjA0OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmMKaW5kZXggOTA1ODBlMzIwNTJmYi4uMmM1NmZiMTgwZWQ4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jCkBAIC02MCwxMCAmIzQzOzYwLDEyIEBAIGJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKQogCXN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MgPSBOVUxMOwogCiAJc3Bpbl9sb2NrX2JoKCZhbXA7Y3MtJmd0O2xvY2spOwotCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3MtJmd0O3Nsb3RzWzBdKS0mZ3Q7a2V5X2lkID09IGtleV9pZCkgewomIzQzOwlpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLSZndDtzbG90c1swXSkgJmFtcDsmYW1wOwomIzQzOwkgICAgcmN1X2FjY2Vzc19wb2ludGVyKGNzLSZndDtzbG90c1swXSktJmd0O2tleV9pZCA9PSBrZXlfaWQpIHsKIAkJa3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLSZndDtzbG90c1swXSwgTlVMTCwKIAkJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2NzLSZndDtsb2NrKSk7Ci0JfSBlbHNlIGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3MtJmd0O3Nsb3RzWzFdKS0mZ3Q7a2V5X2lkID09IGtleV9pZCkgewomIzQzOwl9IGVsc2UgaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy0mZ3Q7c2xvdHNbMV0pICZhbXA7JmFtcDsKJiM0MzsJCSAgIHJjdV9hY2Nlc3NfcG9pbnRlcihjcy0mZ3Q7c2xvdHNbMV0pLSZndDtrZXlfaWQgPT0ga2V5X2lkKSB7CiAJCWtzID0gcmN1X3JlcGxhY2VfcG9pbnRlcihjcy0mZ3Q7c2xvdHNbMV0sIE5VTEwsCiAJCQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtjcy0mZ3Q7bG9jaykpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vcGVlci5jIGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMKaW5kZXggYTIxZDAyYWM3MTVlMC4uMDM4ODZjNDZlYzg1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMKQEAgLTMwMiw3ICYjNDM7MzAyLDEyIEBAIHZvaWQgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7cGVlci0mZ3Q7bG9jayk7CiAJCWJpbmQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBlZXItJmd0O2JpbmQsCiAJCQkJCQkgbG9ja2RlcF9pc19oZWxkKCZhbXA7cGVlci0mZ3Q7bG9jaykpOwotCQlpZiAodW5saWtlbHkoIWJpbmQpKSB7CiYjNDM7CQkvKiBwZWVyLSZndDtsb2NrIHdhcyByZWxlYXNlZCBhYm92ZSwgdGhlcmVmb3JlIHRoZSBwZWVyIG1heSBoYXZlCiYjNDM7CQkgKiBiZWVuIHJlbW92ZWQgaW4gdGhlIG1lYW50aW1lOiBvdnBuX3BlZXJfcmVtb3ZlKCkgdW5oYXNoZXMKJiM0MzsJCSAqIGhhc2hfZW50cnlfaWQgdW5kZXIgb3Zwbi0mZ3Q7bG9jay4gUmUtbGlua2luZyBhIHJlbW92ZWQgcGVlcgomIzQzOwkJICogd291bGQgbGVhdmUgaXQgcmVhY2hhYmxlIGFmdGVyIGl0IGhhcyBiZWVuIGZyZWVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAodW5saWtlbHkoIWJpbmQgfHwgaGxpc3RfdW5oYXNoZWQoJmFtcDtwZWVyLSZndDtoYXNoX2VudHJ5X2lkKSkpIHsKIAkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7cGVlci0mZ3Q7bG9jayk7CiAJCQlzcGluX3VubG9ja19iaCgmYW1wO3BlZXItJmd0O292cG4tJmd0O2xvY2spOwogCQkJcmV0dXJuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQ5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT3BlblZQTiBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jYCBhbmQgYGRyaXZlcnMvbmV0L292cG4vcGVlci5jYC4gVGhlIGNoYW5nZXMgc2VlbSBzdHJhaWdodGZvcndhcmQ7IHRoZXkmIzM5O3JlIHB1dHRpbmcgaW4gc29tZSBOVUxMIGNoZWNrcyBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGFuZCwgbW9yZSBpbnRlcmVzdGluZ2x5LCBhIGNoZWNrIGZvciBgaGxpc3RfdW5oYXNoZWQoJmFtcDtwZWVyLSZndDtoYXNoX2VudHJ5X2lkKWAgd2l0aGluIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAuIE15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBmdW5jdGlvbmFsLCBhZGRyZXNzaW5nIHNvbWUgY3JpdGljYWwgdnVsbmVyYWJpbGl0aWVzLiBTcGVjaWZpY2FsbHksIHdlJiMzOTtyZSBsb29raW5nIGF0IHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBsaWtlbHkgYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gY2F0Y2ggYmVmb3JlIHRoZXkgYmVjb21lIGlzc3Vlcy4KClRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgdGhlIGBvdnBuYCBkcml2ZXIsIHdoaWNoIGZyb20gbWVtb3J5IGhhbmRsZXMgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZGluZy4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIEtjb25maWcgdG8gc2VlIGhvdyB0aGlzIGRyaXZlciBpcyBjb25maWd1cmVkIGFuZCBpZiBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBUaGVzZSBraW5kcyBvZiBsb3ctbGV2ZWwgbWVtb3J5IHNhZmV0eSBmaXhlcyBhcmUgYWx3YXlzIGltcG9ydGFudCB0byBjYXRjaCwgc28gSSYjMzk7bGwgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIG5vdyB0byBiZXR0ZXIgdW5kZXJzdGFuZCB3aGF0IHRoZSB0ZWFtIGlzIHRyeWluZyB0byBwcmV2ZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPVlBOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9OTI9Y29uZmlnIFdJUkVHVUFSRF9ERUJVR1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMTAyLVxuZHJpdmVycy9uZXQvS2NvbmZpZzoxMDM6Y29uZmlnIE9WUE5cbmRyaXZlcnMvbmV0L0tjb25maWctMTA0LVx0dHJpc3RhdGUgXCYjMzQ7T3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgT1ZQTiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBPVlBOYCB0aGluZy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBiZWZvcmUgSSBldmVuIHN0YXJ0IHRoaW5raW5nIGFib3V0IGNvbmZpZ3VyYXRpb24gb3IgdHJvdWJsZXNob290aW5nLCBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBtYXAgb3V0IHRoZSBlbnRpcmUgZWNvc3lzdGVtIHRoYXQgdGhpcyByZWxpZXMgb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgb3BlcmF0aW5nIHN5c3RlbSwgYW55IGNvcmUgbGlicmFyaWVzLCBhbmQgYW55IG5ldHdvcmsgc2VydmljZXMgb3Igc29mdHdhcmUgaXQgbGV2ZXJhZ2VzLiBJcyBpdCBzdGF0aWNhbGx5IGxpbmtlZCBhZ2FpbnN0IGFueXRoaW5nIHVudXN1YWw/IFdoYXQgYWJvdXQgaXRzIGNyeXB0byBsaWJyYXJpZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgdmVyc2lvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IG9yIGF2b2lkIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXM/IFJlYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gdmlzdWFsaXplIHRoZSBlbnRpcmUgZGVwZW5kZW5jeSB0cmVlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIHByb3BlciBkZXBsb3ltZW50LCBzZWN1cml0eSBhbmFseXNpcywgYW5kIGVmZmljaWVudCB0cm91Ymxlc2hvb3RpbmcgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcbiAxMDE6XHRcdCAgU2F5IE4gaGVyZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UmIzM5O3JlIGRvaW5nLlxuIDEwMjpcdFxuIDEwMzpcdGNvbmZpZyBPVlBOXG4gMTA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkXCYjMzQ7XG4gMTA1Olx0XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgSU5FVFxuIDEwNjpcdFx0c2VsZWN0IERTVF9DQUNIRVxuIDEwNzpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gMTA4Olx0XHRzZWxlY3QgQ1JZUFRPXG4gMTA5Olx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuIDExMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAxMTE6XHRcdHNlbGVjdCBDUllQVE9fQ0hBQ0hBMjBQT0xZMTMwNVxuIDExMjpcdFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbiAxMTM6XHRcdGhlbHBcbiAxMTQ6XHRcdCAgVGhpcyBtb2R1bGUgZW5oYW5jZXMgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBPcGVuVlBOIHVzZXJzcGFjZSBzb2Z0d2FyZVxuIDExNTpcdFx0ICBieSBvZmZsb2FkaW5nIHRoZSBkYXRhIGNoYW5uZWwgcHJvY2Vzc2luZyB0byBrZXJuZWxzcGFjZS5cbiAxMTY6XHRcbiAxMTc6XHRjb25maWcgRVFVQUxJWkVSXG4gMTE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtFUUwgKHNlcmlhbCBsaW5lIGxvYWQgYmFsYW5jaW5nKSBzdXBwb3J0XCYjMzQ7XG4gMTE5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgT1ZQTiBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBNb2RpZmljYXRpb25zKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgYE9WUE5gIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIHdpdGhpbiB0aGF0IGNvbnRleHQ6IGBvdnBuX2NyeXB0b19raWxsX2tleWAgYW5kIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAuIFRoZSBrZXkgcXVlc3Rpb24gaGVyZSwgdGhlIGltbWVkaWF0ZSBjb25jZXJuLCBpcyB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgb3Igc3RhdGljLiBUaGlzIGlzIGdvaW5nIHRvIGRyYXN0aWNhbGx5IGltcGFjdCBob3cgd2UgbmVlZCB0byBhcHByb2FjaCBhbnkgYW5hbHlzaXMgb3IgcG90ZW50aWFsIGRlYnVnZ2luZy4gVW5kZXJzdGFuZGluZyB0aGVpciBzY29wZSBhbmQgdmlzaWJpbGl0eSBpcyBlc3NlbnRpYWwgdG8gZnVydGhlciB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292cG5fY3J5cHRvX2tpbGxfa2V5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYz00MD12b2lkIG92cG5fY3J5cHRvX3N0YXRlX3JlbGVhc2Uoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcylcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jLTU3LS8qIHJlbW92ZXMgdGhlIGtleSBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIGlkIGZyb20gdGhlIGNyeXB0byBjb250ZXh0ICovXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jOjU4OmJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy01OS17XG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaD0xMzk9aW50IG92cG5fY3J5cHRvX2NvbmZpZ19nZXQoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcyxcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oLTE0Mi1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmg6MTQzOmJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKTtcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgtMTQ0LVxuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYz0yMzg9dm9pZCBvdnBuX2VuY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYy0yNjQtXHRcdFx0ICAgIHBlZXItXHUwMDNlaWQpO1xuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjI2NTpcdFx0aWYgKG92cG5fY3J5cHRvX2tpbGxfa2V5KFx1MDAyNnBlZXItXHUwMDNlY3J5cHRvLCBrcy1cdTAwM2VrZXlfaWQpKVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTI2Ni1cdFx0XHQvKiBsZXQgdXNlcnNwYWNlIGtub3cgc28gdGhhdCBhIG5ldyBrZXkgbXVzdCBiZSBuZWdvdGlhdGVkICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBPcGVuVlBOJiMzOTtzIENyeXB0b2dyYXBoeSoqCgpPa2F5LCBzbyBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgb3Zwbl9lbmNyeXB0X3Bvc3RgLCB3aGljaCwganVkZ2luZyBieSB0aGUgbmFtZSwgbG9va3MgbGlrZSBpdCYjMzk7cyBjb25uZWN0ZWQgdG8gYXN5bmNocm9ub3VzIGNyeXB0byBvcGVyYXRpb25zLiBQcm9iYWJseSBhIGNhbGxiYWNrIG9yIGEgcG9zdC1wcm9jZXNzaW5nIGZ1bmN0aW9uIGFmdGVyIGVuY3J5cHRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGZsb3cuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgga2V5cyBhbmQgZW5jcnlwdGlvbiBwcm9jZXNzZXMsIGxldCYjMzk7cyBzZWUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBwZWVyIGVuZHBvaW50IHVwZGF0ZXMuIEkmIzM5O2xsIGNoZWNrIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhIGxpbmsgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9pby5jPTEwOD12b2lkIG92cG5fZGVjcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTE1MC1cdFx0LyogY2hlY2sgaWYgdGhpcyBwZWVyIGNoYW5nZWQgbG9jYWwgb3IgcmVtb3RlIGVuZHBvaW50ICovXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MTUxOlx0XHRvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZShwZWVyLCBza2IpO1xuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTE1Mi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L292cG4vcGVlci5jPTE0Mz1pbnQgb3Zwbl9wZWVyX3Jlc2V0X3NvY2thZGRyKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMtMTkyLS8qKlxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmM6MTkzOiAqIG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlIC0gdXBkYXRlIHJlbW90ZSBvciBsb2NhbCBlbmRwb2ludCBmb3IgcGVlclxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMtMTk0LSAqIEBwZWVyOiBwZWVyIHRvIHVwZGF0ZSB0aGUgcmVtb3RlIGVuZHBvaW50IGZvclxuLS1cbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTE5Ni0gKi9cbmRyaXZlcnMvbmV0L292cG4vcGVlci5jOjE5Nzp2b2lkIG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuYy0xOTgte1xuLS1cbmRyaXZlcnMvbmV0L292cG4vcGVlci5oPTE1Nz12b2lkIG92cG5fcGVlcl9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmgtMTU4LVxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmg6MTU5OnZvaWQgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuaC0xNjAtaW50IG92cG5fcGVlcl9yZXNldF9zb2NrYWRkcihzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzk0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuCgoqKkluaXRpYWwgQXNzZXNzbWVudDogRnV6emluZyBDYW5kaWRhdGVzKioKCkFscmlnaHQsIGxvb2tpbmcgYXQgYG92cG5fZGVjcnlwdF9wb3N0YCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1llcywgdGhlc2UgbG9vayBsaWtlIHByb21pc2luZyB0YXJnZXRzIGZvciBmdXp6aW5nLiYjMzQ7IEVuY3J5cHRpb24vZGVjcnlwdGlvbiByb3V0aW5lcyBhcmUgb2Z0ZW4gcHJpbWUgc3BvdHMgdG8gdW5jb3ZlciB2dWxuZXJhYmlsaXRpZXMuIEhvd2V2ZXIsIGEgcG90ZW50aWFsIGNhdmVhdCBwb3BzIHVwIOKAkyB0aGV5ICptaWdodCogYmUgaW50ZXJuYWwgZnVuY3Rpb25zLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlaXIgc2NvcGUgYW5kIGlmIHRoZXkmIzM5O3JlIGV4cG9zZWQgdG8gdW50cnVzdGVkIGlucHV0LiBMZXQmIzM5O3MgdHJhY2UgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKnVzZWQqIHRvIHVuZGVyc3RhbmQgdGhlaXIgY2FsbCBjb250ZXh0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3Zwbl9kZWNyeXB0X3Bvc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmM9MjQwPWludCBvdnBuX2FlYWRfZGVjcnlwdChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYy0zMTctXHRhZWFkX3JlcXVlc3Rfc2V0X3RmbShyZXEsIGtzLVx1MDAzZWRlY3J5cHQpO1xuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5jOjMxODpcdGFlYWRfcmVxdWVzdF9zZXRfY2FsbGJhY2socmVxLCAwLCBvdnBuX2RlY3J5cHRfcG9zdCwgc2tiKTtcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYy0zMTktXHRhZWFkX3JlcXVlc3Rfc2V0X2NyeXB0KHJlcSwgc2csIHNnLCBwYXlsb2FkX2xlbiAmIzQzOyB0YWdfc2l6ZSwgaXYpO1xuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYz02MD1zdGF0aWMgdm9pZCBvdnBuX25ldGRldl93cml0ZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYy04Ni1cbmRyaXZlcnMvbmV0L292cG4vaW8uYzo4NzpcdC8qIG5ldHdvcmsgaGVhZGVyIHJlc2V0IGluIG92cG5fZGVjcnlwdF9wb3N0KCkgKi9cbmRyaXZlcnMvbmV0L292cG4vaW8uYy04OC1cdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTEwNy1cbmRyaXZlcnMvbmV0L292cG4vaW8uYzoxMDg6dm9pZCBvdnBuX2RlY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTEwOS17XG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jPTIxND12b2lkIG92cG5fcmVjdihzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYy0yMzQtXHRtZW1zZXQob3Zwbl9za2JfY2Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBvdnBuX2NiKSk7XG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MjM1Olx0b3Zwbl9kZWNyeXB0X3Bvc3Qoc2tiLCBvdnBuX2FlYWRfZGVjcnlwdChwZWVyLCBrcywgc2tiKSk7XG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjM2LX1cbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmg9MzE9dm9pZCBvdnBuX2VuY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KTtcbmRyaXZlcnMvbmV0L292cG4vaW8uaDozMjp2b2lkIG92cG5fZGVjcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpO1xuZHJpdmVycy9uZXQvb3Zwbi9pby5oLTMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTc5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipQYWNrZXQgUmVjZXB0aW9uIGluIE9wZW5WUE46IGBvdnBuX3JlY3ZgKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHBhY2tldCByZWNlcHRpb24gaW4gT3BlblZQTiwgYXMgeW91JiMzOTtkIGV4cGVjdCwgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBgb3Zwbl9yZWN2YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBwbGFjZSB0aGUgcmVjZWl2ZWQgZGF0YSBoaXRzLiBJdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciwgdGhlIGluaXRpYWwgcG9pbnQgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgbmV0d29yayB0cmFmZmljLiBVbmRlcnN0YW5kaW5nIHdoYXQgaGFwcGVucyAqYWZ0ZXIqIHRoYXQsIHdpdGhpbiBgb3Zwbl9yZWN2YCBhbmQgdGhlIHN1YnNlcXVlbnQgcHJvY2Vzc2luZyBzdGFnZXMsIGlzIGNydWNpYWwuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGRlY3J5cHRpb24sIGF1dGhlbnRpY2F0aW9uIGNoZWNrcywgcG90ZW50aWFsIHJlYXNzZW1ibHksIGFuZCB0aGVuIG9ud2FyZCB0byB0aGUgdHVubmVsIGludGVyZmFjZS4gQnV0LCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBpbmNvbWluZyBkYXRhLCBgb3Zwbl9yZWN2YCAqaXMqIHRoZSBzdGFydGluZyBsaW5lLiBJIGltbWVkaWF0ZWx5IGJlZ2luIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGlzIGFyY2hpdGVjdGVkIHRvIGhhbmRsZSBtdWx0aXBsZSBjb25uZWN0aW9ucyBvciBhbnkgb3RoZXIgc3BlY2lmaWMgb3B0aW1pemF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3Zwbl9yZWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9pby5jPTEwOD12b2lkIG92cG5fZGVjcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTIxMy0vKiBSWCBwYXRoIGVudHJ5IHBvaW50OiBkZWNyeXB0IHBhY2tldCBhbmQgZm9yd2FyZCBpdCB0byB0aGUgZGV2aWNlICovXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MjE0OnZvaWQgb3Zwbl9yZWN2KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjE1LXtcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmg9MjU9bmV0ZGV2X3R4X3Qgb3Zwbl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L292cG4vaW8uaC0yNi1cbmRyaXZlcnMvbmV0L292cG4vaW8uaDoyNzp2b2lkIG92cG5fcmVjdihzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L292cG4vaW8uaC0yOC12b2lkIG92cG5feG1pdF9zcGVjaWFsKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIGNvbnN0IHZvaWQgKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi90Y3AuYz0xMDI9c3RhdGljIHZvaWQgb3Zwbl90Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi90Y3AuYy0xMzktXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jOjE0MDpcdC8qIGhvbGQgcmVmZXJlbmNlIHRvIHBlZXIgYXMgcmVxdWlyZWQgYnkgb3Zwbl9yZWN2KCkuXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jLTE0MS1cdCAqXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi90Y3AuYy0xNDctXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jOjE0ODpcdG92cG5fcmVjdihwZWVyLCBza2IpO1xuZHJpdmVycy9uZXQvb3Zwbi90Y3AuYy0xNDktXHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYz02Nz1zdGF0aWMgaW50IG92cG5fdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtMTIzLVx0X19za2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jOjEyNDpcdG92cG5fcmVjdihwZWVyLCBza2IpO1xuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy0xMjUtXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqTmV0d29yayBQYWNrZXQgSGFuZGxpbmcgLSBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgT3BlblZQTiBhY3R1YWxseSBpbnRlcmZhY2VzIHdpdGggdGhlIG5ldHdvcmsuIEkga25vdyB0aGF0IGBvdnBuX3VkcF9lbmNhcF9yZWN2YCBhbmQgYG92cG5fdGNwX3JjdmAgYXJlIHRoZSByZWFsIGVudHJ5IHBvaW50cyBmb3IgcmVjZWl2aW5nIHBhY2tldHMsIHRoZSBpbml0aWFsIGhvb2tzIGZyb20gdGhlIG5ldHdvcmsgc3RhY2sgaW50byB0aGUgT3BlblZQTiBjb2RlLiAgT24gdGhlIG90aGVyIHNpZGUgb2YgdGhpbmdzLCBpdCBzZWVtcyBsaWtlIGBvdnBuX25ldF94bWl0YCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIHNlbmRpbmcgcGFja2V0cyBvdXQsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRhdGEgZ29lcyB0byBiZSBwdXQgb24gdGhlIHdpcmUuIEdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG9uIGBvdnBuX25ldF94bWl0YCBzaW5jZSB0aGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292cG5fbmV0X3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuL2lvLmM9MzM2PXN0YXRpYyB2b2lkIG92cG5fc2VuZChzdHJ1Y3Qgb3Zwbl9wcml2ICpvdnBuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYy0zNTUtICovXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MzU2Om5ldGRldl90eF90IG92cG5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0zNTcte1xuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uaD0yMz1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBvdnBuX2tlZXBhbGl2ZV9tZXNzYWdlW09WUE5fS0VFUEFMSVZFX1NJWkVdO1xuZHJpdmVycy9uZXQvb3Zwbi9pby5oLTI0LVxuZHJpdmVycy9uZXQvb3Zwbi9pby5oOjI1Om5ldGRldl90eF90IG92cG5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9vdnBuL2lvLmgtMjYtXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9tYWluLmM9MTAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgb3Zwbl9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jLTEwMi1cdC5uZG9fdW5pbml0XHRcdD0gb3Zwbl9uZXRfdW5pbml0LFxuZHJpdmVycy9uZXQvb3Zwbi9tYWluLmM6MTAzOlx0Lm5kb19zdGFydF94bWl0XHRcdD0gb3Zwbl9uZXRfeG1pdCxcbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jLTEwNC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgT3BlblZQTiBzZWN1cml0eToKCioqRGVidWdnaW5nIE9wZW5WUE4gQ3J5cHRvIEtleSBIYW5kbGluZyoqCgpBbHJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgd2l0aGluIGBvdnBuX2NyeXB0b19raWxsX2tleWAgYW5kIHRoZSBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0IG9mIGBvdnBuX2NyeXB0b19raWxsX2tleWAuIEl0IHNlZW1zIHRoZSBidWcgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBvdnBuX2NyeXB0b19raWxsX2tleWAgaXMgY2FsbGVkIHVuZGVyIGJvdGggc3VjY2VzcyBhbmQgZmFpbHVyZSBjb25kaXRpb25zIHdpdGhpbiBgb3Zwbl9lbmNyeXB0X3Bvc3RgLiBUaGlzIHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgaW5jb3JyZWN0IGNsZWFudXAgaWYgYG92cG5fZW5jcnlwdF9wb3N0YCBkb2VzbiYjMzk7dCBjb25zaXN0ZW50bHkgdHJpZ2dlciBpdCBpbiBvbmUgY29uZGl0aW9uIG9yIGFub3RoZXIuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgbG9naWMgb2YgYG92cG5fZW5jcnlwdF9wb3N0YCBpdHNlbGYgdG8gY2xhcmlmeSB0aGUgZXhhY3Qgc2NlbmFyaW9zIHRoYXQgbGVhZCB0byBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGJlaW5nIGludm9rZWQuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgbGlrZWx5IHJvb3QgY2F1c2Ugb2YgdGhlIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3Zwbl9lbmNyeXB0X3Bvc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmM9MTM3PWludCBvdnBuX2FlYWRfZW5jcnlwdChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYy0yMzAtXHRhZWFkX3JlcXVlc3Rfc2V0X3RmbShyZXEsIGtzLVx1MDAzZWVuY3J5cHQpO1xuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG9fYWVhZC5jOjIzMTpcdGFlYWRfcmVxdWVzdF9zZXRfY2FsbGJhY2socmVxLCAwLCBvdnBuX2VuY3J5cHRfcG9zdCwgc2tiKTtcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYy0yMzItXHRhZWFkX3JlcXVlc3Rfc2V0X2NyeXB0KHJlcSwgc2csIHNnLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYz0yMTQ9dm9pZCBvdnBuX3JlY3Yoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjM3LVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjIzODp2b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjM5LXtcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM9MzEyPXN0YXRpYyBib29sIG92cG5fZW5jcnlwdF9vbmUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMzIxLVx0LyogdGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgcGVlciBiZWNhdXNlIHRoZSBjcnlwdG8gY29kZSBtYXkgcnVuIGFzeW5jLlxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjMyMjpcdCAqIG92cG5fZW5jcnlwdF9wb3N0KCkgd2lsbCByZWxlYXNlIGl0IHVwb24gY29tcGxldGlvblxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTMyMy1cdCAqL1xuLS1cbmRyaXZlcnMvbmV0L292cG4vaW8uYy0zMzAtXHRtZW1zZXQob3Zwbl9za2JfY2Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBvdnBuX2NiKSk7XG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MzMxOlx0b3Zwbl9lbmNyeXB0X3Bvc3Qoc2tiLCBvdnBuX2FlYWRfZW5jcnlwdChwZWVyLCBrcywgc2tiKSk7XG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMzMyLVx0cmV0dXJuIHRydWU7XG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5oPTI4PXZvaWQgb3Zwbl94bWl0X3NwZWNpYWwoc3RydWN0IG92cG5fcGVlciAqcGVlciwgY29uc3Qgdm9pZCAqZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmgtMzAtXG5kcml2ZXJzL25ldC9vdnBuL2lvLmg6MzE6dm9pZCBvdnBuX2VuY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KTtcbmRyaXZlcnMvbmV0L292cG4vaW8uaC0zMi12b2lkIG92cG5fZGVjcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTU4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgUG9zdC1FbmNyeXB0aW9uIFByb2Nlc3MgaW4gT3BlblZQTioqCgpBbHJpZ2h0LCBzbyB0aGUgcG9zdC1lbmNyeXB0aW9uIHN0YWdlLCBzcGVjaWZpY2FsbHkgYG92cG5fZW5jcnlwdF9wb3N0YCwgaGFzIGdyYWJiZWQgbXkgYXR0ZW50aW9uLiBJIGtub3cgaXQmIzM5O3MgYSBjcnVjaWFsIHN0ZXAsIG9jY3VycmluZywgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIHJpZ2h0IGFmdGVyIHRoZSBkYXRhIGhhcyBiZWVuIGVuY3J5cHRlZCBpbiB0aGUgT3BlblZQTiBwcm9jZXNzLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O1doZXJlJiMzOTtzIHRoZSBpbXBsZW1lbnRhdGlvbj8gVGltZSB0byB0cmFjayB0aGlzIGRvd24gYW5kIHVuZGVyc3RhbmQgaXRzIGV4YWN0IHJvbGUuJiMzNDsKCk15IGluc3RpbmN0cyB0ZWxsIG1lIHRvIGp1bXAgaW50byB0aGUgYGRyaXZlcnMvbmV0L292cG4vaW8uY2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBnby10byBsb2NhdGlvbiBmb3IgY29yZSBJL08gb3BlcmF0aW9ucyBhbmQgbmV0d29yayBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBPcGVuVlBOIGtlcm5lbCBtb2R1bGVzLiBUaGUgYGlvLmNgIGZpbGUgaXMgbGlrZWx5IHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGxvZ2ljIGJlaGluZCB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgYWZ0ZXIgdGhlIGRhdGEgaXMgc2NyYW1ibGVkLCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCBpcyB0aGUga2V5IHRvIHRoYXQgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBhbnRpY2lwYXRlIGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgZmluYWwgcGFja2V0IGFzc2VtYmx5LCBwb3RlbnRpYWxseSBhZGRpbmcgaGVhZGVycywgcHJlcGFyaW5nIHRoZSBkYXRhIGZvciB0cmFuc21pc3Npb24gb3IgaGFuZGxpbmcgYW55IG5lY2Vzc2FyeSBwb3N0LWVuY3J5cHRpb24gdHJhbnNmb3JtYXRpb25zLCBvciBldmVuIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIHZlcmlmeSBteSBleHBlY3RhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9pby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzg6XHR2b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXG4gMjM5Olx0e1xuIDI0MDpcdFx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcztcbiAyNDE6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBkYXRhO1xuIDI0MjpcdFx0c3RydWN0IG92cG5fc29ja2V0ICpzb2NrO1xuIDI0MzpcdFx0c3RydWN0IG92cG5fcGVlciAqcGVlcjtcbiAyNDQ6XHRcdHVuc2lnbmVkIGludCBvcmlnX2xlbjtcbiAyNDU6XHRcbiAyNDY6XHRcdC8qIGVuY3J5cHRpb24gaXMgaGFwcGVuaW5nIGFzeW5jaHJvbm91c2x5LiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmVcbiAyNDc6XHRcdCAqIGNhbGxlZCBsYXRlciBieSB0aGUgY3J5cHRvIGNhbGxiYWNrIHdpdGggYSBwcm9wZXIgcmV0dXJuIHZhbHVlXG4gMjQ4Olx0XHQgKi9cbiAyNDk6XHRcdGlmICh1bmxpa2VseShyZXQgPT0gLUVJTlBST0dSRVNTKSlcbiAyNTA6XHRcdFx0cmV0dXJuO1xuIDI1MTpcdFxuIDI1MjpcdFx0a3MgPSBvdnBuX3NrYl9jYihza2IpLVx1MDAzZWtzO1xuIDI1MzpcdFx0cGVlciA9IG92cG5fc2tiX2NiKHNrYiktXHUwMDNlcGVlcjtcbiAyNTQ6XHRcbiAyNTU6XHRcdC8qIGNyeXB0byBpcyBkb25lLCBjbGVhbnVwIHNrYiBDQiBhbmQgaXRzIG1lbWJlcnMgKi9cbiAyNTY6XHRcdGtmcmVlKG92cG5fc2tiX2NiKHNrYiktXHUwMDNlY3J5cHRvX3RtcCk7XG4gMjU3Olx0XG4gMjU4Olx0XHRpZiAodW5saWtlbHkocmV0ID09IC1FUkFOR0UpKSB7XG4gMjU5Olx0XHRcdC8qIHdlIHJhbiBvdXQgb2YgSVZzIGFuZCB3ZSBtdXN0IGtpbGwgdGhlIGtleSBhcyBpdCBjYW4mIzM5O3QgYmVcbiAyNjA6XHRcdFx0ICogdXNlIGFueW1vcmVcbiAyNjE6XHRcdFx0ICovXG4gMjYyOlx0XHRcdG5ldGRldl93YXJuKHBlZXItXHUwMDNlb3Zwbi1cdTAwM2VkZXYsXG4gMjYzOlx0XHRcdFx0ICAgIFwmIzM0O2tpbGxpbmcga2V5ICV1IGZvciBwZWVyICV1XFxuXCYjMzQ7LCBrcy1cdTAwM2VrZXlfaWQsXG4gMjY0Olx0XHRcdFx0ICAgIHBlZXItXHUwMDNlaWQpO1xuIDI2NTpcdFx0XHRpZiAob3Zwbl9jcnlwdG9fa2lsbF9rZXkoXHUwMDI2cGVlci1cdTAwM2VjcnlwdG8sIGtzLVx1MDAzZWtleV9pZCkpXG4gMjY2Olx0XHRcdFx0LyogbGV0IHVzZXJzcGFjZSBrbm93IHNvIHRoYXQgYSBuZXcga2V5IG11c3QgYmUgbmVnb3RpYXRlZCAqL1xuIDI2NzpcdFx0XHRcdG92cG5fbmxfa2V5X3N3YXBfbm90aWZ5KHBlZXIsIGtzLVx1MDAzZWtleV9pZCk7XG4gMjY4Olx0XG4gMjY5Olx0XHRcdGdvdG8gZXJyO1xuIDI3MDpcdFx0fVxuIDI3MTpcdFxuIDI3MjpcdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpXG4gMjczOlx0XHRcdGdvdG8gZXJyO1xuIDI3NDpcdFxuIDI3NTpcdFx0c2tiX21hcmtfbm90X29uX2xpc3Qoc2tiKTtcbiAyNzY6XHRcdG9yaWdfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiAyNzc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkyMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgRXJyb3IgSGFuZGxpbmcgYW5kIEtleSBNYW5hZ2VtZW50IGluIE9wZW5WUE4qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBmdW5jdGlvbiBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgZXJyb3IgY29kZSBgLUVSQU5HRWAuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGlmIHdlIGdldCBhbiBgLUVSQU5HRWAgZXJyb3IsIGBvdnBuX2NyeXB0b19raWxsX2tleWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgY2FsbGVkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdzsgaXQgbWVhbnMgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBhY3Rpb24gYmVpbmcgdGFrZW4gdG8gaGFuZGxlIHRoYXQgcGFydGljdWxhciByYW5nZSBlcnJvciwgbGlrZWx5IHJlbGF0ZWQgdG8ga2V5IG1hbmFnZW1lbnQgb3IgZGVjcnlwdGlvbi4gSXQgd291bGQgYmUgZ29vZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGEgbGl0dGxlIGJpdCBiZXR0ZXIsIGp1c3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjYWxsLgoKTm93LCBteSBtaW5kIHNoaWZ0cyB0byBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgLiBJIHJlbWVtYmVyIHRoaXMgZnVuY3Rpb24uIEl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgdGhlIGRlY3J5cHRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGZyb20gYG92cG5fZGVjcnlwdF9wb3N0YC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBhbnkgZmFpbHVyZSBkdXJpbmcgZW5kcG9pbnQgdXBkYXRlIGNvdWxkIGNhdXNlIHByb2JsZW1zIGRvd24gdGhlIGxpbmUuIEnigJlkIHdhbnQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgbm90IHNvbWVob3cgcmVsYXRlZCB0byB0aGUgYC1FUkFOR0VgIHNpdHVhdGlvbiBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L292cG4vaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTA4Olx0dm9pZCBvdnBuX2RlY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxuIDEwOTpcdHtcbiAxMTA6XHRcdHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3M7XG4gMTExOlx0XHR1bnNpZ25lZCBpbnQgcGF5bG9hZF9vZmZzZXQgPSAwO1xuIDExMjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRhdGE7XG4gMTEzOlx0XHRzdHJ1Y3Qgb3Zwbl9zb2NrZXQgKnNvY2s7XG4gMTE0Olx0XHRzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyO1xuIDExNTpcdFx0X19iZTE2IHByb3RvO1xuIDExNjpcdFx0X19iZTMyICpwaWQ7XG4gMTE3Olx0XG4gMTE4Olx0XHQvKiBjcnlwdG8gaXMgaGFwcGVuaW5nIGFzeW5jaHJvbm91c2x5LiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkXG4gMTE5Olx0XHQgKiBhZ2FpbiBsYXRlciBieSB0aGUgY3J5cHRvIGNhbGxiYWNrIHdpdGggYSBwcm9wZXIgcmV0dXJuIGNvZGVcbiAxMjA6XHRcdCAqL1xuIDEyMTpcdFx0aWYgKHVubGlrZWx5KHJldCA9PSAtRUlOUFJPR1JFU1MpKVxuIDEyMjpcdFx0XHRyZXR1cm47XG4gMTIzOlx0XG4gMTI0Olx0XHRwYXlsb2FkX29mZnNldCA9IG92cG5fc2tiX2NiKHNrYiktXHUwMDNlcGF5bG9hZF9vZmZzZXQ7XG4gMTI1Olx0XHRrcyA9IG92cG5fc2tiX2NiKHNrYiktXHUwMDNla3M7XG4gMTI2Olx0XHRwZWVyID0gb3Zwbl9za2JfY2Ioc2tiKS1cdTAwM2VwZWVyO1xuIDEyNzpcdFxuIDEyODpcdFx0LyogY3J5cHRvIGlzIGRvbmUsIGNsZWFudXAgc2tiIENCIGFuZCBpdHMgbWVtYmVycyAqL1xuIDEyOTpcdFx0a2ZyZWUob3Zwbl9za2JfY2Ioc2tiKS1cdTAwM2VjcnlwdG9fdG1wKTtcbiAxMzA6XHRcbiAxMzE6XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKVxuIDEzMjpcdFx0XHRnb3RvIGRyb3A7XG4gMTMzOlx0XG4gMTM0Olx0XHQvKiBQSUQgc2l0cyBhZnRlciB0aGUgb3AgKi9cbiAxMzU6XHRcdHBpZCA9IChfX2ZvcmNlIF9fYmUzMiAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBPVlBOX09QQ09ERV9TSVpFKTtcbiAxMzY6XHRcdHJldCA9IG92cG5fcGt0aWRfcmVjdihcdTAwMjZrcy1cdTAwM2VwaWRfcmVjdiwgbnRvaGwoKnBpZCksIDApO1xuIDEzNzpcdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbiAxMzg6XHRcdFx0bmV0X2Vycl9yYXRlbGltaXRlZChcJiMzNDslczogUEtUIElEIFJYIGVycm9yIGZvciBwZWVyICV1OiAlZFxcblwmIzM0OyxcbiAxMzk6XHRcdFx0XHRcdCAgICBuZXRkZXZfbmFtZShwZWVyLVx1MDAzZW92cG4tXHUwMDNlZGV2KSwgcGVlci1cdTAwM2VpZCxcbiAxNDA6XHRcdFx0XHRcdCAgICByZXQpO1xuIDE0MTpcdFx0XHRnb3RvIGRyb3A7XG4gMTQyOlx0XHR9XG4gMTQzOlx0XG4gMTQ0Olx0XHQvKiBrZWVwIHRyYWNrIG9mIGxhc3QgcmVjZWl2ZWQgYXV0aGVudGljYXRlZCBwYWNrZXQgZm9yIGtlZXBhbGl2ZSAqL1xuIDE0NTpcdFx0V1JJVEVfT05DRShwZWVyLVx1MDAzZWxhc3RfcmVjdiwga3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKSk7XG4gMTQ2Olx0XG4gMTQ3Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMTQ4Olx0XHRzb2NrID0gcmN1X2RlcmVmZXJlbmNlKHBlZXItXHUwMDNlc29jayk7XG4gMTQ5Olx0XHRpZiAoc29jayBcdTAwMjZcdTAwMjYgc29jay1cdTAwM2Vzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUClcbiAxNTA6XHRcdFx0LyogY2hlY2sgaWYgdGhpcyBwZWVyIGNoYW5nZWQgbG9jYWwgb3IgcmVtb3RlIGVuZHBvaW50ICovXG4gMTUxOlx0XHRcdG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlKHBlZXIsIHNrYik7XG4gMTUyOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAxNTM6XHRcbiAxNTQ6XHRcdC8qIHBvaW50IHRvIGVuY2Fwc3VsYXRlZCBJUCBwYWNrZXQgKi9cbiAxNTU6XHRcdF9fc2tiX3B1bGwoc2tiLCBwYXlsb2FkX29mZnNldCk7XG4gMTU2Olx0XG4gMTU3Olx0XHQvKiBjaGVjayBpZiB0aGlzIGlzIGEgdmFsaWQgZGF0YXBhY2tldCB0aGF0IGhhcyB0byBiZSBkZWxpdmVyZWQgdG8gdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDU1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIEZ1bmN0aW9uIENhbGwqKgoKQWxyaWdodCwgdGhlIGZhY3QgdGhhdCBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIGlzIGJlaW5nIGNhbGxlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgVURQIHBhY2tldCBkZWNyeXB0aW9uIHRlbGxzIG1lIHNvbWV0aGluZyBjcml0aWNhbDogd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHdvcmtpbmcgcGF0aC4gVGhpcyBmdW5jdGlvbiBpcyBiZWluZyByZWFjaGVkIGFuZCBleGVjdXRlZCwgaW5kaWNhdGluZyBhIGZ1bmN0aW9uYWwgZW5kcG9pbnQgdXBkYXRlIHByb2Nlc3Mgd2l0aGluIHRoZSBPcGVuVlBOIGRyaXZlci4gSSBjYW4gY29uZmlybSB0aGlzIGlzIG5vdCBtZXJlbHkgdGhlb3JldGljYWwsIGJ1dCBoYXMgYmVlbiBvYnNlcnZlZC4gVGhpcyBpcyBnb29kLCBiZWNhdXNlIGl0IHZhbGlkYXRlcyBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcGF0aCBvZiBleGVjdXRpb24uCgpOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSYjMzk7bGwgbmVlZCB0byBkaXNzZWN0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBjb25zdWx0aW5nIGBkcml2ZXJzL25ldC9vdnBuL3BlZXIuY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgbG9naWMgaXMgYmVpbmcgdHJpZ2dlcmVkIGluIHRoaXMgc3VjY2Vzc2Z1bCBkZWNyeXB0aW9uIHNjZW5hcmlvLiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIHNpZ25pZmljYW50IGZvciBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBvdmVyYWxsIG5ldHdvcmsgYmVoYXZpb3VyLCBzbyBJIG5lZWQgYSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L292cG4vcGVlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk3Olx0dm9pZCBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDE5ODpcdHtcbiAxOTk6XHRcdHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpuaGVhZDtcbiAyMDA6XHRcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzO1xuIDIwMTpcdFx0c3RydWN0IHNvY2thZGRyX2luNiAqc2E2O1xuIDIwMjpcdFx0Ym9vbCByZXNldF9jYWNoZSA9IGZhbHNlO1xuIDIwMzpcdFx0c3RydWN0IHNvY2thZGRyX2luICpzYTtcbiAyMDQ6XHRcdHN0cnVjdCBvdnBuX2JpbmQgKmJpbmQ7XG4gMjA1Olx0XHRjb25zdCB2b2lkICpsb2NhbF9pcDtcbiAyMDY6XHRcdHNpemVfdCBzYWxlbiA9IDA7XG4gMjA3Olx0XG4gMjA4Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2Vsb2NrKTtcbiAyMDk6XHRcdGJpbmQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBlZXItXHUwMDNlYmluZCxcbiAyMTA6XHRcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZwZWVyLVx1MDAzZWxvY2spKTtcbiAyMTE6XHRcdGlmICh1bmxpa2VseSghYmluZCkpXG4gMjEyOlx0XHRcdGdvdG8gdW5sb2NrO1xuIDIxMzpcdFxuIDIxNDpcdFx0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbiAyMTU6XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuIDIxNjpcdFx0XHQvKiBmbG9hdCBjaGVjayAqL1xuIDIxNzpcdFx0XHRpZiAodW5saWtlbHkoIW92cG5fYmluZF9za2Jfc3JjX21hdGNoKGJpbmQsIHNrYikpKSB7XG4gMjE4Olx0XHRcdFx0LyogdW5jb25kaXRpb25hbGx5IHNhdmUgbG9jYWwgZW5kcG9pbnQgaW4gY2FzZVxuIDIxOTpcdFx0XHRcdCAqIG9mIGZsb2F0LCBhcyBpdCBtYXkgaGF2ZSBjaGFuZ2VkIGFzIHdlbGxcbiAyMjA6XHRcdFx0XHQgKi9cbiAyMjE6XHRcdFx0XHRsb2NhbF9pcCA9IFx1MDAyNmlwX2hkcihza2IpLVx1MDAzZWRhZGRyO1xuIDIyMjpcdFx0XHRcdHNhID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVx1MDAyNnNzO1xuIDIyMzpcdFx0XHRcdHNhLVx1MDAzZXNpbl9mYW1pbHkgPSBBRl9JTkVUO1xuIDIyNDpcdFx0XHRcdHNhLVx1MDAzZXNpbl9hZGRyLnNfYWRkciA9IGlwX2hkcihza2IpLVx1MDAzZXNhZGRyO1xuIDIyNTpcdFx0XHRcdHNhLVx1MDAzZXNpbl9wb3J0ID0gdWRwX2hkcihza2IpLVx1MDAzZXNvdXJjZTtcbiAyMjY6XHRcdFx0XHRzYWxlbiA9IHNpemVvZigqc2EpO1xuIDIyNzpcdFx0XHRcdHJlc2V0X2NhY2hlID0gdHJ1ZTtcbiAyMjg6XHRcdFx0XHRicmVhaztcbiAyMjk6XHRcdFx0fVxuIDIzMDpcdFxuIDIzMTpcdFx0XHQvKiBpZiBubyBmbG9hdCBoYXBwZW5lZCwgbGV0JiMzOTtzIGRvdWJsZSBjaGVjayBpZiB0aGUgbG9jYWwgZW5kcG9pbnRcbiAyMzI6XHRcdFx0ICogaGFzIGNoYW5nZWRcbiAyMzM6XHRcdFx0ICovXG4gMjM0Olx0XHRcdGlmICh1bmxpa2VseShiaW5kLVx1MDAzZWxvY2FsLmlwdjQuc19hZGRyICE9IGlwX2hkcihza2IpLVx1MDAzZWRhZGRyKSkge1xuIDIzNTpcdFx0XHRcdG5ldF9kYmdfcmF0ZWxpbWl0ZWQoXCYjMzQ7JXM6IGxlYXJuaW5nIGxvY2FsIElQdjQgZm9yIHBlZXIgJWQgKCVwSTQgLVx1MDAzZSAlcEk0KVxcblwmIzM0OyxcbiAyMzY6XHRcdFx0XHRcdFx0ICAgIG5ldGRldl9uYW1lKHBlZXItXHUwMDNlb3Zwbi1cdTAwM2VkZXYpLFxuIDIzNzpcdFx0XHRcdFx0XHQgICAgcGVlci1cdTAwM2VpZCwgXHUwMDI2YmluZC1cdTAwM2Vsb2NhbC5pcHY0LnNfYWRkcixcbiAyMzg6XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmlwX2hkcihza2IpLVx1MDAzZWRhZGRyKTtcbiAyMzk6XHRcdFx0XHRiaW5kLVx1MDAzZWxvY2FsLmlwdjQuc19hZGRyID0gaXBfaGRyKHNrYiktXHUwMDNlZGFkZHI7XG4gMjQwOlx0XHRcdFx0cmVzZXRfY2FjaGUgPSB0cnVlO1xuIDI0MTpcdFx0XHR9XG4gMjQyOlx0XHRcdGJyZWFrO1xuIDI0MzpcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbiAyNDQ6XHRcdFx0LyogZmxvYXQgY2hlY2sgKi9cbiAyNDU6XHRcdFx0aWYgKHVubGlrZWx5KCFvdnBuX2JpbmRfc2tiX3NyY19tYXRjaChiaW5kLCBza2IpKSkge1xuIDI0NjpcdFx0XHRcdC8qIHVuY29uZGl0aW9uYWxseSBzYXZlIGxvY2FsIGVuZHBvaW50IGluIGNhc2VcbiAyNDc6XHRcdFx0XHQgKiBvZiBmbG9hdCwgYXMgaXQgbWF5IGhhdmUgY2hhbmdlZCBhcyB3ZWxsXG4gMjQ4Olx0XHRcdFx0ICovXG4gMjQ5Olx0XHRcdFx0bG9jYWxfaXAgPSBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyO1xuIDI1MDpcdFx0XHRcdHNhNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopXHUwMDI2c3M7XG4gMjUxOlx0XHRcdFx0c2E2LVx1MDAzZXNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7XG4gMjUyOlx0XHRcdFx0c2E2LVx1MDAzZXNpbjZfYWRkciA9IGlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHI7XG4gMjUzOlx0XHRcdFx0c2E2LVx1MDAzZXNpbjZfcG9ydCA9IHVkcF9oZHIoc2tiKS1cdTAwM2Vzb3VyY2U7XG4gMjU0Olx0XHRcdFx0c2E2LVx1MDAzZXNpbjZfc2NvcGVfaWQgPSBpcHY2X2lmYWNlX3Njb3BlX2lkKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4gMjU1Olx0XHRcdFx0XHRcdFx0XHRcdCBza2ItXHUwMDNlc2tiX2lpZik7XG4gMjU2Olx0XHRcdFx0c2FsZW4gPSBzaXplb2YoKnNhNik7XG4gMjU3Olx0XHRcdFx0cmVzZXRfY2FjaGUgPSB0cnVlO1xuIDI1ODpcdFx0XHRcdGJyZWFrO1xuIDI1OTpcdFx0XHR9XG4gMjYwOlx0XG4gMjYxOlx0XHRcdC8qIGlmIG5vIGZsb2F0IGhhcHBlbmVkLCBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIGlmIHRoZSBsb2NhbCBlbmRwb2ludFxuIDI2MjpcdFx0XHQgKiBoYXMgY2hhbmdlZFxuIDI2MzpcdFx0XHQgKi9cbiAyNjQ6XHRcdFx0aWYgKHVubGlrZWx5KCFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2YmluZC1cdTAwM2Vsb2NhbC5pcHY2LFxuIDI2NTpcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyKSkpIHtcbiAyNjY6XHRcdFx0XHRuZXRfZGJnX3JhdGVsaW1pdGVkKFwmIzM0OyVzOiBsZWFybmluZyBsb2NhbCBJUHY2IGZvciBwZWVyICVkICglcEk2YyAtXHUwMDNlICVwSTZjKVxcblwmIzM0OyxcbiAyNjc6XHRcdFx0XHRcdFx0ICAgIG5ldGRldl9uYW1lKHBlZXItXHUwMDNlb3Zwbi1cdTAwM2VkZXYpLFxuIDI2ODpcdFx0XHRcdFx0XHQgICAgcGVlci1cdTAwM2VpZCwgXHUwMDI2YmluZC1cdTAwM2Vsb2NhbC5pcHY2LFxuIDI2OTpcdFx0XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcik7XG4gMjcwOlx0XHRcdFx0YmluZC1cdTAwM2Vsb2NhbC5pcHY2ID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcjtcbiAyNzE6XHRcdFx0XHRyZXNldF9jYWNoZSA9IHRydWU7XG4gMjcyOlx0XHRcdH1cbiAyNzM6XHRcdFx0YnJlYWs7XG4gMjc0Olx0XHRkZWZhdWx0OlxuIDI3NTpcdFx0XHRnb3RvIHVubG9jaztcbiAyNzY6XHRcdH1cbiAyNzc6XHRcbiAyNzg6XHRcdGlmICh1bmxpa2VseShyZXNldF9jYWNoZSkpXG4gMjc5Olx0XHRcdGRzdF9jYWNoZV9yZXNldChcdTAwMjZwZWVyLVx1MDAzZWRzdF9jYWNoZSk7XG4gMjgwOlx0XG4gMjgxOlx0XHQvKiBpZiB0aGUgcGVlciBkaWQgbm90IGZsb2F0LCB3ZSBjYW4gYmFpbCBvdXQgbm93ICovXG4gMjgyOlx0XHRpZiAobGlrZWx5KCFzYWxlbikpXG4gMjgzOlx0XHRcdGdvdG8gdW5sb2NrO1xuIDI4NDpcdFxuIDI4NTpcdFx0aWYgKHVubGlrZWx5KG92cG5fcGVlcl9yZXNldF9zb2NrYWRkcihwZWVyLFxuIDI4NjpcdFx0XHRcdFx0XHQgICAgICAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKilcdTAwMjZzcyxcbiAyODc6XHRcdFx0XHRcdFx0ICAgICAgbG9jYWxfaXApIFx1MDAzYyAwKSlcbiAyODg6XHRcdFx0Z290byB1bmxvY2s7XG4gMjg5Olx0XG4gMjkwOlx0XHRuZXRfZGJnX3JhdGVsaW1pdGVkKFwmIzM0OyVzOiBwZWVyICVkIGZsb2F0ZWQgdG8gJXBJU2NwXCYjMzQ7LFxuIDI5MTpcdFx0XHRcdCAgICBuZXRkZXZfbmFtZShwZWVyLVx1MDAzZW92cG4tXHUwMDNlZGV2KSwgcGVlci1cdTAwM2VpZCwgXHUwMDI2c3MpO1xuIDI5MjpcdFxuIDI5MzpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2Vsb2NrKTtcbiAyOTQ6XHRcbiAyOTU6XHRcdG92cG5fbmxfcGVlcl9mbG9hdF9ub3RpZnkocGVlciwgXHUwMDI2c3MpO1xuIDI5NjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjAwOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRpZmYgaW4gYG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlYCwgYW5kIGl0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGNoZWNrIGZvciBgaGxpc3RfdW5oYXNoZWQoJmFtcDtwZWVyLSZndDtoYXNoX2VudHJ5X2lkKWAgaW4gdGhlIGBpZiAodW5saWtlbHkoIWJpbmQpKWAgY29uZGl0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzPyBXaHkgYXJlIHdlIHN1ZGRlbmx5IGNvbmNlcm5lZCBhYm91dCB0aGUgcGVlciBiZWluZyB1bmhhc2hlZD8KCkkgcmVtZW1iZXIgdGhpcyBmdW5jdGlvbiwgaXQgdXBkYXRlcyB0aGUgcGVlciYjMzk7cyBlbmRwb2ludHMsIGFuZCB1c2VzIFJDVSBmb3IgYWNjZXNzaW5nIHRoZSBgYmluZGAgcG9pbnRlciB1bmRlciBgcGVlci0mZ3Q7bG9ja2AuIFRoZSBjcnVjaWFsIHBhcnQgaXMgdGhhdCB0aGUgYHBlZXItJmd0O2xvY2tgIGlzICpyZWxlYXNlZCogYmVmb3JlIGFjY2Vzc2luZyBgYmluZGAuIFRoaXMgbWVhbnMgYSB3aW5kb3cgZXhpc3RzIGJldHdlZW4gdGhlIGxvY2sgcmVsZWFzZSBhbmQgdGhlIGNoZWNrIGZvciBgIWJpbmRgLiBUaGF0IHdpbmRvdyBpcyB0aGUgdnVsbmVyYWJpbGl0eS4KClRoZSBjb21tZW50IG5haWxzIGl0OiAgYG92cG5fcGVlcl9yZW1vdmUoKWAgY2FuIHVuaGFzaCB0aGUgcGVlciYjMzk7cyBoYXNoIGVudHJ5IHVuZGVyIGBvdnBuLSZndDtsb2NrYC4gIElmIGBvdnBuX3BlZXJfcmVtb3ZlYCBpcyBjYWxsZWQgd2hpbGUgdGhpcyBmdW5jdGlvbiBpcyBydW5uaW5nIChzcGVjaWZpY2FsbHkgYmV0d2VlbiBgc3Bpbl91bmxvY2tfYmgoJmFtcDtwZWVyLSZndDtsb2NrKWAgYW5kIHRoZSBjaGVjayBmb3IgYGJpbmRgKSwgdGhlbiB0aGUgcGVlciBjb3VsZCBiZSBmcmVlZCwgYW5kIHJlLWxpbmtpbmcgdGhlIG5vdy1mcmVlZCBwZWVyIHdvdWxkIGJlIGJhZCBuZXdzIGJlYXJzLiBUaGUgbmV3IGNvZGUgaXMgY2F0Y2hpbmcgdGhpcyBieSBjaGVja2luZyBpZiB0aGUgcGVlciBoYXMgYmVlbiB1bmhhc2hlZC4gVGhpcyBuZXcgY2hlY2sgKGBobGlzdF91bmhhc2hlZGApIHNlZW1zIGxpa2UgYSBncmVhdCBhZGRpdGlvbiB0byBwcm92aWRlIHNhZmV0eSBpbiB0aGlzIHJhY2UtY29uZGl0aW9uLiBXZSYjMzk7cmUgZWZmZWN0aXZlbHkgZW5zdXJpbmcgdGhhdCB0aGUgcGVlciBpcyBzdGlsbCB2YWxpZCBiZWZvcmUgY29udGludWluZyB0aGUgdXBkYXRlIHByb2Nlc3MuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgcmVhZCB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIG1heWJlIGludmVzdGlnYXRlIG90aGVyIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFx0bmV0X2RiZ19yYXRlbGltaXRlZChcJiMzNDslczogcGVlciAlZCBmbG9hdGVkIHRvICVwSVNjcFwmIzM0OyxcbiAyOTE6XHRcdFx0XHQgICAgbmV0ZGV2X25hbWUocGVlci1cdTAwM2VvdnBuLVx1MDAzZWRldiksIHBlZXItXHUwMDNlaWQsIFx1MDAyNnNzKTtcbiAyOTI6XHRcbiAyOTM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBlZXItXHUwMDNlbG9jayk7XG4gMjk0Olx0XG4gMjk1Olx0XHRvdnBuX25sX3BlZXJfZmxvYXRfbm90aWZ5KHBlZXIsIFx1MDAyNnNzKTtcbiAyOTY6XHRcbiAyOTc6XHRcdC8qIHJlaGFzaGluZyBpcyByZXF1aXJlZCBvbmx5IGluIE1QIG1vZGUgYXMgUDJQIGhhcyBvbmUgcGVlclxuIDI5ODpcdFx0ICogb25seSBhbmQgdGh1cyB0aGVyZSBpcyBubyBoYXNodGFibGVcbiAyOTk6XHRcdCAqL1xuIDMwMDpcdFx0aWYgKHBlZXItXHUwMDNlb3Zwbi1cdTAwM2Vtb2RlID09IE9WUE5fTU9ERV9NUCkge1xuIDMwMTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2VvdnBuLVx1MDAzZWxvY2spO1xuIDMwMjpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2Vsb2NrKTtcbiAzMDM6XHRcdFx0YmluZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGVlci1cdTAwM2ViaW5kLFxuIDMwNDpcdFx0XHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2cGVlci1cdTAwM2Vsb2NrKSk7XG4gMzA1Olx0XHRcdC8qIHBlZXItXHUwMDNlbG9jayB3YXMgcmVsZWFzZWQgYWJvdmUsIHRoZXJlZm9yZSB0aGUgcGVlciBtYXkgaGF2ZVxuIDMwNjpcdFx0XHQgKiBiZWVuIHJlbW92ZWQgaW4gdGhlIG1lYW50aW1lOiBvdnBuX3BlZXJfcmVtb3ZlKCkgdW5oYXNoZXNcbiAzMDc6XHRcdFx0ICogaGFzaF9lbnRyeV9pZCB1bmRlciBvdnBuLVx1MDAzZWxvY2suIFJlLWxpbmtpbmcgYSByZW1vdmVkIHBlZXJcbiAzMDg6XHRcdFx0ICogd291bGQgbGVhdmUgaXQgcmVhY2hhYmxlIGFmdGVyIGl0IGhhcyBiZWVuIGZyZWVkLlxuIDMwOTpcdFx0XHQgKi9cbiAzMTA6XHRcdFx0aWYgKHVubGlrZWx5KCFiaW5kIHx8IGhsaXN0X3VuaGFzaGVkKFx1MDAyNnBlZXItXHUwMDNlaGFzaF9lbnRyeV9pZCkpKSB7XG4gMzExOlx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2Vsb2NrKTtcbiAzMTI6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwZWVyLVx1MDAzZW92cG4tXHUwMDNlbG9jayk7XG4gMzEzOlx0XHRcdFx0cmV0dXJuO1xuIDMxNDpcdFx0XHR9XG4gMzE1Olx0XG4gMzE2Olx0XHRcdC8qIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5LCB0aGVyZWZvcmUgYW5vdGhlclxuIDMxNzpcdFx0XHQgKiBmbG9hdCBtYXkgaGF2ZSBoYXBwZW5lZCBpbiBwYXJhbGxlbDogcGVyZm9ybSByZWhhc2hpbmdcbiAzMTg6XHRcdFx0ICogdXNpbmcgdGhlIHBlZXItXHUwMDNlYmluZC1cdTAwM2VyZW1vdGUgZGlyZWN0bHkgYXMga2V5XG4gMzE5Olx0XHRcdCAqL1xuIDMyMDpcdFxuIDMyMTpcdFx0XHRzd2l0Y2ggKGJpbmQtXHUwMDNlcmVtb3RlLmluNC5zaW5fZmFtaWx5KSB7XG4gMzIyOlx0XHRcdGNhc2UgQUZfSU5FVDpcbiAzMjM6XHRcdFx0XHRzYWxlbiA9IHNpemVvZigqc2EpO1xuIDMyNDpcdFx0XHRcdGJyZWFrO1xuIDMyNTpcdFx0XHRjYXNlIEFGX0lORVQ2OlxuIDMyNjpcdFx0XHRcdHNhbGVuID0gc2l6ZW9mKCpzYTYpO1xuIDMyNzpcdFx0XHRcdGJyZWFrO1xuIDMyODpcdFx0XHR9XG4gMzI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzAzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE9wZW5WUE4gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAgaXMgZGVmaW5pdGVseSB3b3JraW5nIGFzIGV4cGVjdGVkOyB0aGF0JiMzOTtzIGdvb2QuIE15IGZvY3VzIGlzIG9uIHRoZSBgT1ZQTmAgY29uZmlndXJhdGlvbnMuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3Mgc2V0LiBOb3csIGxldCYjMzk7cyBzZWUsIGBPVlBOYCBkZXBlbmRzIG9uIGBORVQgJmFtcDsmYW1wOyBJTkVUYCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eS4gSXQgYWxzbyBzZWxlY3RzIGBEU1RfQ0FDSEVgLCBgTkVUX1VEUF9UVU5ORUxgLCBgQ1JZUFRPYCwgYENSWVBUT19BRVNgLCBgQ1JZUFRPX0dDTWAsIGBDUllQVE9fQ0hBQ0hBMjBQT0xZMTMwNWAsIGFuZCBgU1RSRUFNX1BBUlNFUmAuIEdvb2QsIHNvIGNvbmZpcm1pbmcgYE9WUE5gIGlzIHRoZSBvbmx5IGNvbmZpZyBJIG5lZWQsIGF0IGxlYXN0IGZvciBub3cuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSSB0aGluayBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGFuZCBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIGFyZSBnb29kIGNhbmRpZGF0ZXMgdG8gcmVhbGx5IGZvY3VzIGluIG9uLiBZdXAsIGJvdGggYXJlIGRlZmluaXRlbHkgc29saWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIga2V5IGZ1bmN0aW9ucz8gSSBzaG91bGQgYWRkIGBvdnBuX2RlY3J5cHRfcG9zdGAgYW5kIGBvdnBuX2VuY3J5cHRfcG9zdGAgdG8gdGhlIGxpc3Q7IEkgY2FuIGRlZmluaXRlbHkgc2VlIHRob3NlIGJlaW5nIGltcG9ydGFudC4gT2theSwgYW5kIGZvciB0aGUgZW50cnkgcG9pbnRzLCBgb3Zwbl91ZHBfZW5jYXBfcmVjdmAgYW5kIGBvdnBuX3RjcF9yY3ZgIGxvb2sgbGlrZSB0aGUgY29ycmVjdCBzcG90cy4gQW5kLCBvYnZpb3VzbHksIGBvdnBuX25ldF94bWl0YCBoYW5kbGVzIHRoZSBzZW5kIG9wZXJhdGlvbnMuIFJpZ2h0LCBJJiMzOTtsbCBhZGQgdGhvc2UgdG8gbXkgZm9jdXMgc3ltYm9scywgbWFraW5nIHN1cmUgSSBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMuCgpXYWl0IGEgc2Vjb25kLCBgb3Zwbl91ZHBfZW5jYXBfcmVjdmAgaXMgc3RhdGljLiBUaGF0IHVzdWFsbHkgbWVhbnMgaXQmIzM5O3MgaW5saW5lZC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3Zwbl91ZHBfZW5jYXBfcmVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L292cG4vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L292cG4vdWRwLmM9MzM9c3RhdGljIHN0cnVjdCBvdnBuX3NvY2tldCAqb3Zwbl9zb2NrZXRfZnJvbV91ZHBfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy01MS0vKipcbmRyaXZlcnMvbmV0L292cG4vdWRwLmM6NTI6ICogb3Zwbl91ZHBfZW5jYXBfcmVjdiAtIFN0YXJ0IHByb2Nlc3NpbmcgYSByZWNlaXZlZCBVRFAgcGFja2V0LlxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy01My0gKiBAc2s6IHNvY2tldCBvdmVyIHdoaWNoIHRoZSBwYWNrZXQgd2FzIHJlY2VpdmVkXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy02Ni0gKi9cbmRyaXZlcnMvbmV0L292cG4vdWRwLmM6Njc6c3RhdGljIGludCBvdnBuX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtNjgte1xuLS1cbmRyaXZlcnMvbmV0L292cG4vdWRwLmM9Mzg0PWludCBvdnBuX3VkcF9zb2NrZXRfYXR0YWNoKHN0cnVjdCBvdnBuX3NvY2tldCAqb3Zwbl9zb2NrLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtMzg5LVx0XHQuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9PVlBOSU5VRFAsXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jOjM5MDpcdFx0LmVuY2FwX3JjdiA9IG92cG5fdWRwX2VuY2FwX3JlY3YsXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTM5MS1cdFx0LmVuY2FwX2Rlc3Ryb3kgPSBvdnBuX3VkcF9lbmNhcF9kZXN0cm95LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQxMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFBlcmZvcm1hbmNlIEJvdHRsZW5lY2tzIGluIHRoZSBPcGVuVlBOIENvZGViYXNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIHBhc3NlZCBhcyBhIHBvaW50ZXIuIFRoYXQgbWVhbnMgaXQmIzM5O3MgaGlnaGx5IHVubGlrZWx5IHRoYXQgdGhlIGNvbXBpbGVyIHdpbGwgYmUgYWJsZSB0byBpbmxpbmUgaXQsIHdoaWNoIGlzIHNvbWV0aGluZyBJIGFsd2F5cyBrZWVwIGFuIGV5ZSBvdXQgZm9yIHdoZW4gcGVyZm9ybWFuY2UgdHVuaW5nLiBJIHdhbnQgdG8gaWRlbnRpZnkgYXJlYXMgcmlwZSBmb3Igb3B0aW1pemF0aW9uLgoKUmlnaHQgbm93LCBteSBndXQgc2F5cyB0aGF0IEkgc2hvdWxkIHN0YXJ0IGxvb2tpbmcgYXQgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9ydGVkIG9yLCBhdCBsZWFzdCwgbm90IHN0YXRpYy4gYG92cG5fZGVjcnlwdF9wb3N0YCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCBmaXQgdGhhdCBiaWxsLiBTbyBJJiMzOTtsbCBzdGFydCB0aGVyZS4gSG93ZXZlciwgaXQgbG9va3MgbGlrZSBhIGZldyBvdGhlcnMsIHN1Y2ggYXMgYG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlYCBhcmUgYWxzbyBpbiB0aGlzIGNhdGVnb3J5LCBhcyBpcyBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLgoKVGhlcmVmb3JlLCB0aGUgbWFpbiBmdW5jdGlvbiBzeW1ib2xzIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBhcmU6CgoqICAgYG92cG5fY3J5cHRvX2tpbGxfa2V5YAoqICAgYG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlYAoqICAgYG92cG5fZGVjcnlwdF9wb3N0YAoqICAgYG92cG5fZW5jcnlwdF9wb3N0YAoKTmV4dCwgSSYjMzk7bGwgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gQmFzZWQgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkmIzM5O20gc2VlaW5nIGlzIGBPVlBOYC4gSSBzaG91bGQgZW5zdXJlIG5vIG90aGVyIG9wdGlvbnMgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIGZ1bmN0aW9ucywgc3VjaCBhcyBpZiBzdGF0ZW1lbnRzIHRoYXQgZG8gbm90IHJlbHkgb24gYE9WUE5gLiBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyB1bmRlciBgZHJpdmVycy9uZXQvb3Zwbi9LY29uZmlnYCBhbmQgYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3NzaWJsZSBidWlsZCBjb25maWd1cmF0aW9uIGNvbnNpZGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1ZQTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTkyPWNvbmZpZyBXSVJFR1VBUkRfREVCVUdcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTEwMi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MTAzOmNvbmZpZyBPVlBOXG5kcml2ZXJzL25ldC9LY29uZmlnLTEwNC1cdHRyaXN0YXRlIFwmIzM0O09wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNDAKCQkJCQkJCW91dHB1dDogMTE4CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE9wZW5WUE4gRHJpdmVyIFZ1bG5lcmFiaWxpdHkgRml4KioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QuIFRoaXMgZml4IGlzIHRhcmdldGVkIGF0IHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agc2VjdGlvbiwgc28gaXQmIzM5O3MgY2xlYXJseSBmb2N1c2luZyBvbiB0aGUgT3BlblZQTiBkcml2ZXIsIGBPVlBOYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIHF1aWNrbHkgZGlzdGlsbCB0aGUga2V5IGVsZW1lbnRzOiB0aGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHRhZ2dlZCBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIHRoYXQgZnV6emluZyB3b3VsZCBiZSBhIHZhbHVhYmxlIGFwcHJvYWNoIHRvIHZhbGlkYXRlIHRoZSBmaXguCgpUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMuIEkgc2VlIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAsIGBvdnBuX2RlY3J5cHRfcG9zdGAsIGFuZCBgb3Zwbl9lbmNyeXB0X3Bvc3RgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBPcGVuVlBOIGFyY2hpdGVjdHVyZSwgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgaW52b2x2ZWQgaW4ga2V5IG1hbmFnZW1lbnQsIGVuZHBvaW50IGhhbmRsaW5nIChjcnVjaWFsIGZvciBjb25uZWN0aW9ucyksIGFuZCBwb3N0LXByb2Nlc3Npbmcgb2YgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLiBUaGUgZml4IGlzIGVuYWJsaW5nIHRoZSBgT1ZQTmAgY29uZmlnIGl0c2VsZi4KClRoZSByZWFzb25pbmcgcHJvdmlkZWQgc3RhdGVzIHRoYXQgdGhlIHBhdGNoIGFkZHJlc3NlcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyB3aXRoaW4gdGhlIGBvdnBuYCBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gY29yZSBsb2dpYyByZWxhdGVkIHRvIGNyeXB0byBrZXlzIGFuZCBwZWVyIGVuZHBvaW50IHVwZGF0ZXMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGNvbWJpbmF0aW9uIG9mIHZ1bG5lcmFiaWxpdGllcywgYW5kIHRoZSBzcGVjaWZpYyBsb2NhdGlvbnMgYXJlIGNvbmNlcm5pbmcuIFRoZXNlIGlzc3VlcyBvZnRlbiBzdGVtIGZyb20gcmFjZSBjb25kaXRpb25zLCBpbXByb3BlciBlcnJvciBoYW5kbGluZywgb3IgbWVtb3J5IG1hbmFnZW1lbnQgZmxhd3MuIEdpdmVuIHRoZSBpbXBhY3Qgb24gdGhlIGRhdGEgY2hhbm5lbCwgdGhpcyBmaXggaXMgY2xlYXJseSBoaWdoLXByaW9yaXR5IGFuZCByZXF1aXJlcyB0aG9yb3VnaCBzY3J1dGlueS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBwYXRjaCBpdHNlbGYgdG8gc2VlIGhvdyB0aGVzZSB2dWxuZXJhYmlsaXRpZXMgd2VyZSBtYW5pZmVzdGVkIGFuZCBob3cgdGhlIGZpeCBhZGRyZXNzZXMgdGhlbSwgYnV0IHRoaXMgaW5pdGlhbCBhbmFseXNpcyBpcyBwcm9taXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPVlBOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3Zwbl9jcnlwdG9fa2lsbF9rZXkmIzM0OywKICAgICYjMzQ7b3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGUmIzM0OywKICAgICYjMzQ7b3Zwbl9kZWNyeXB0X3Bvc3QmIzM0OywKICAgICYjMzQ7b3Zwbl9lbmNyeXB0X3Bvc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgaW4gdGhlIE9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWQgZHJpdmVyIChvdnBuKS4gVGhlIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyBoYW5kbGluZyBjcnlwdG9ncmFwaGljIGtleXMgYW5kIHBlZXIgZW5kcG9pbnQgdXBkYXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1ZQTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292cG5fY3J5cHRvX2tpbGxfa2V5JiMzNDssCiAgICAmIzM0O292cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlJiMzNDssCiAgICAmIzM0O292cG5fZGVjcnlwdF9wb3N0JiMzNDssCiAgICAmIzM0O292cG5fZW5jcnlwdF9wb3N0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGluIHRoZSBPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkIGRyaXZlciAob3ZwbikuIFRoZSBjaGFuZ2VzIGFyZSBpbiByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgaGFuZGxpbmcgY3J5cHRvZ3JhcGhpYyBrZXlzIGFuZCBwZWVyIGVuZHBvaW50IHVwZGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDoxOS40NTY1ODE3ODhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODg5NzExNjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPVlBOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3Zwbl9jcnlwdG9fa2lsbF9rZXlcIixcbiAgICBcIm92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlXCIsXG4gICAgXCJvdnBuX2RlY3J5cHRfcG9zdFwiLFxuICAgIFwib3Zwbl9lbmNyeXB0X3Bvc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBpbiB0aGUgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZCBkcml2ZXIgKG92cG4pLiBUaGUgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIGhhbmRsaW5nIGNyeXB0b2dyYXBoaWMga2V5cyBhbmQgcGVlciBlbmRwb2ludCB1cGRhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDoxOS40NTY1ODk0MjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNjk1NTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU5Y2E3MzkxYTIzOWU4ZWJiZGQ4Yjk4ODE0N2NhNjY1ZDdiZjAwNGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAxNjowNDoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jIGIvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY1xcbmluZGV4IDkwNTgwZTMyMDUyZmIuLjJjNTZmYjE4MGVkOGYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmNcXG5AQCAtNjAsMTAgKzYwLDEyIEBAIGJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKVxcbiBcXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzID0gTlVMTDtcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2Y3MtXFx1MDAzZWxvY2spO1xcbi1cXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVxcdTAwM2VzbG90c1swXSktXFx1MDAzZWtleV9pZCA9PSBrZXlfaWQpIHtcXG4rXFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cXHUwMDNlc2xvdHNbMF0pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICByY3VfYWNjZXNzX3BvaW50ZXIoY3MtXFx1MDAzZXNsb3RzWzBdKS1cXHUwMDNla2V5X2lkID09IGtleV9pZCkge1xcbiBcXHRcXHRrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtXFx1MDAzZXNsb3RzWzBdLCBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHQgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZjcy1cXHUwMDNlbG9jaykpO1xcbi1cXHR9IGVsc2UgaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cXHUwMDNlc2xvdHNbMV0pLVxcdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XFxuK1xcdH0gZWxzZSBpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVxcdTAwM2VzbG90c1sxXSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgcmN1X2FjY2Vzc19wb2ludGVyKGNzLVxcdTAwM2VzbG90c1sxXSktXFx1MDAzZWtleV9pZCA9PSBrZXlfaWQpIHtcXG4gXFx0XFx0a3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLVxcdTAwM2VzbG90c1sxXSwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0XFx0IGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2Y3MtXFx1MDAzZWxvY2spKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuYyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXFxuaW5kZXggYTIxZDAyYWM3MTVlMC4uMDM4ODZjNDZlYzg1MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L292cG4vcGVlci5jXFxuQEAgLTMwMiw3ICszMDIsMTIgQEAgdm9pZCBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnBlZXItXFx1MDAzZWxvY2spO1xcbiBcXHRcXHRiaW5kID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwZWVyLVxcdTAwM2ViaW5kLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZwZWVyLVxcdTAwM2Vsb2NrKSk7XFxuLVxcdFxcdGlmICh1bmxpa2VseSghYmluZCkpIHtcXG4rXFx0XFx0LyogcGVlci1cXHUwMDNlbG9jayB3YXMgcmVsZWFzZWQgYWJvdmUsIHRoZXJlZm9yZSB0aGUgcGVlciBtYXkgaGF2ZVxcbitcXHRcXHQgKiBiZWVuIHJlbW92ZWQgaW4gdGhlIG1lYW50aW1lOiBvdnBuX3BlZXJfcmVtb3ZlKCkgdW5oYXNoZXNcXG4rXFx0XFx0ICogaGFzaF9lbnRyeV9pZCB1bmRlciBvdnBuLVxcdTAwM2Vsb2NrLiBSZS1saW5raW5nIGEgcmVtb3ZlZCBwZWVyXFxuK1xcdFxcdCAqIHdvdWxkIGxlYXZlIGl0IHJlYWNoYWJsZSBhZnRlciBpdCBoYXMgYmVlbiBmcmVlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh1bmxpa2VseSghYmluZCB8fCBobGlzdF91bmhhc2hlZChcXHUwMDI2cGVlci1cXHUwMDNlaGFzaF9lbnRyeV9pZCkpKSB7XFxuIFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwZWVyLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnBlZXItXFx1MDAzZW92cG4tXFx1MDAzZWxvY2spO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjIwLjA5NDM4NDc0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc4MjU5MzA0NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9WUE5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnBuX2NyeXB0b19raWxsX2tleVwiLFxuICAgIFwib3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVcIixcbiAgICBcIm92cG5fZGVjcnlwdF9wb3N0XCIsXG4gICAgXCJvdnBuX2VuY3J5cHRfcG9zdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGluIHRoZSBPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkIGRyaXZlciAob3ZwbikuIFRoZSBjaGFuZ2VzIGFyZSBpbiByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgaGFuZGxpbmcgY3J5cHRvZ3JhcGhpYyBrZXlzIGFuZCBwZWVyIGVuZHBvaW50IHVwZGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU5Y2E3MzkxYTIzOWU4ZWJiZGQ4Yjk4ODE0N2NhNjY1ZDdiZjAwNGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDE2OjA0OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYyBiL2RyaXZlcnMvbmV0L292cG4vY3J5cHRvLmNcbmluZGV4IDkwNTgwZTMyMDUyZmIuLjJjNTZmYjE4MGVkOGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jXG4rKysgYi9kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jXG5AQCAtNjAsMTAgKzYwLDEyIEBAIGJvb2wgb3Zwbl9jcnlwdG9fa2lsbF9rZXkoc3RydWN0IG92cG5fY3J5cHRvX3N0YXRlICpjcywgdTgga2V5X2lkKVxuIFx0c3RydWN0IG92cG5fY3J5cHRvX2tleV9zbG90ICprcyA9IE5VTEw7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2Y3MtXHUwMDNlbG9jayk7XG4tXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzBdKS1cdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XG4rXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzBdKSBcdTAwMjZcdTAwMjZcbitcdCAgICByY3VfYWNjZXNzX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMF0pLVx1MDAzZWtleV9pZCA9PSBrZXlfaWQpIHtcbiBcdFx0a3MgPSByY3VfcmVwbGFjZV9wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzBdLCBOVUxMLFxuIFx0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmNzLVx1MDAzZWxvY2spKTtcbi1cdH0gZWxzZSBpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNzLVx1MDAzZXNsb3RzWzFdKS1cdTAwM2VrZXlfaWQgPT0ga2V5X2lkKSB7XG4rXHR9IGVsc2UgaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cdTAwM2VzbG90c1sxXSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgIHJjdV9hY2Nlc3NfcG9pbnRlcihjcy1cdTAwM2VzbG90c1sxXSktXHUwMDNla2V5X2lkID09IGtleV9pZCkge1xuIFx0XHRrcyA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoY3MtXHUwMDNlc2xvdHNbMV0sIE5VTEwsXG4gXHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Y3MtXHUwMDNlbG9jaykpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L292cG4vcGVlci5jIGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNcbmluZGV4IGEyMWQwMmFjNzE1ZTAuLjAzODg2YzQ2ZWM4NTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9vdnBuL3BlZXIuY1xuKysrIGIvZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNcbkBAIC0zMDIsNyArMzAyLDEyIEBAIHZvaWQgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBlZXItXHUwMDNlbG9jayk7XG4gXHRcdGJpbmQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBlZXItXHUwMDNlYmluZCxcbiBcdFx0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnBlZXItXHUwMDNlbG9jaykpO1xuLVx0XHRpZiAodW5saWtlbHkoIWJpbmQpKSB7XG4rXHRcdC8qIHBlZXItXHUwMDNlbG9jayB3YXMgcmVsZWFzZWQgYWJvdmUsIHRoZXJlZm9yZSB0aGUgcGVlciBtYXkgaGF2ZVxuK1x0XHQgKiBiZWVuIHJlbW92ZWQgaW4gdGhlIG1lYW50aW1lOiBvdnBuX3BlZXJfcmVtb3ZlKCkgdW5oYXNoZXNcbitcdFx0ICogaGFzaF9lbnRyeV9pZCB1bmRlciBvdnBuLVx1MDAzZWxvY2suIFJlLWxpbmtpbmcgYSByZW1vdmVkIHBlZXJcbitcdFx0ICogd291bGQgbGVhdmUgaXQgcmVhY2hhYmxlIGFmdGVyIGl0IGhhcyBiZWVuIGZyZWVkLlxuK1x0XHQgKi9cbitcdFx0aWYgKHVubGlrZWx5KCFiaW5kIHx8IGhsaXN0X3VuaGFzaGVkKFx1MDAyNnBlZXItXHUwMDNlaGFzaF9lbnRyeV9pZCkpKSB7XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cGVlci1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZwZWVyLVx1MDAzZW92cG4tXHUwMDNlbG9jayk7XG4gXHRcdFx0cmV0dXJuO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6MDQ6MjAuMDk0Mzg2MTc5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4NjgxMTc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE9wZW5WUE4gRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uY2AgYW5kIGBkcml2ZXJzL25ldC9vdnBuL3BlZXIuY2AuIFRoZSBjaGFuZ2VzIHNlZW0gc3RyYWlnaHRmb3J3YXJkOyB0aGV5J3JlIHB1dHRpbmcgaW4gc29tZSBOVUxMIGNoZWNrcyBpbiBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGFuZCwgbW9yZSBpbnRlcmVzdGluZ2x5LCBhIGNoZWNrIGZvciBgaGxpc3RfdW5oYXNoZWQoXHUwMDI2cGVlci1cdTAwM2VoYXNoX2VudHJ5X2lkKWAgd2l0aGluIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAuIE15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBmdW5jdGlvbmFsLCBhZGRyZXNzaW5nIHNvbWUgY3JpdGljYWwgdnVsbmVyYWJpbGl0aWVzLiBTcGVjaWZpY2FsbHksIHdlJ3JlIGxvb2tpbmcgYXQgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIGxpa2VseSBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIGltcG9ydGFudCB0byBjYXRjaCBiZWZvcmUgdGhleSBiZWNvbWUgaXNzdWVzLlxuXG5UaGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIHRoZSBgb3ZwbmAgZHJpdmVyLCB3aGljaCBmcm9tIG1lbW9yeSBoYW5kbGVzIE9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRpbmcuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIEtjb25maWcgdG8gc2VlIGhvdyB0aGlzIGRyaXZlciBpcyBjb25maWd1cmVkIGFuZCBpZiBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIFRoZXNlIGtpbmRzIG9mIGxvdy1sZXZlbCBtZW1vcnkgc2FmZXR5IGZpeGVzIGFyZSBhbHdheXMgaW1wb3J0YW50IHRvIGNhdGNoLCBzbyBJJ2xsIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBub3cgdG8gYmV0dGVyIHVuZGVyc3RhbmQgd2hhdCB0aGUgdGVhbSBpcyB0cnlpbmcgdG8gcHJldmVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjI0Ljg4MTE5OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MDE1NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPVlBOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTkyPWNvbmZpZyBXSVJFR1VBUkRfREVCVUdcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMTAyLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTAzOmNvbmZpZyBPVlBOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMDQtXFx0dHJpc3RhdGUgXFxcIk9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjI1LjAxMDIyMTI2NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Nzc1MjA2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBPVlBOIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBPVlBOYCB0aGluZy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBiZWZvcmUgSSBldmVuIHN0YXJ0IHRoaW5raW5nIGFib3V0IGNvbmZpZ3VyYXRpb24gb3IgdHJvdWJsZXNob290aW5nLCBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBtYXAgb3V0IHRoZSBlbnRpcmUgZWNvc3lzdGVtIHRoYXQgdGhpcyByZWxpZXMgb24uIEknbSB0aGlua2luZyBhYm91dCBvcGVyYXRpbmcgc3lzdGVtLCBhbnkgY29yZSBsaWJyYXJpZXMsIGFuZCBhbnkgbmV0d29yayBzZXJ2aWNlcyBvciBzb2Z0d2FyZSBpdCBsZXZlcmFnZXMuIElzIGl0IHN0YXRpY2FsbHkgbGlua2VkIGFnYWluc3QgYW55dGhpbmcgdW51c3VhbD8gV2hhdCBhYm91dCBpdHMgY3J5cHRvIGxpYnJhcmllcz8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyB2ZXJzaW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgb3IgYXZvaWQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcz8gUmVhbGx5LCBJJ20gdHJ5aW5nIHRvIHZpc3VhbGl6ZSB0aGUgZW50aXJlIGRlcGVuZGVuY3kgdHJlZS4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGZvciBwcm9wZXIgZGVwbG95bWVudCwgc2VjdXJpdHkgYW5hbHlzaXMsIGFuZCBlZmZpY2llbnQgdHJvdWJsZXNob290aW5nIGRvd24gdGhlIGxpbmUuIEl0J3MgdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDoyOC42ODc3NDQxNTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXG4gMTAxOlxcdFxcdCAgU2F5IE4gaGVyZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuXFxuIDEwMjpcXHRcXG4gMTAzOlxcdGNvbmZpZyBPVlBOXFxuIDEwNDpcXHRcXHR0cmlzdGF0ZSBcXFwiT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZFxcXCJcXG4gMTA1OlxcdFxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gMTA2OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gMTA3OlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAxMDg6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAxMDk6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gMTEwOlxcdFxcdHNlbGVjdCBDUllQVE9fR0NNXFxuIDExMTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NIQUNIQTIwUE9MWTEzMDVcXG4gMTEyOlxcdFxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxuIDExMzpcXHRcXHRoZWxwXFxuIDExNDpcXHRcXHQgIFRoaXMgbW9kdWxlIGVuaGFuY2VzIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgT3BlblZQTiB1c2Vyc3BhY2Ugc29mdHdhcmVcXG4gMTE1OlxcdFxcdCAgYnkgb2ZmbG9hZGluZyB0aGUgZGF0YSBjaGFubmVsIHByb2Nlc3NpbmcgdG8ga2VybmVsc3BhY2UuXFxuIDExNjpcXHRcXG4gMTE3OlxcdGNvbmZpZyBFUVVBTElaRVJcXG4gMTE4OlxcdFxcdHRyaXN0YXRlIFxcXCJFUUwgKHNlcmlhbCBsaW5lIGxvYWQgYmFsYW5jaW5nKSBzdXBwb3J0XFxcIlxcbiAxMTk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDoyOC42ODc4MjYzNDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc4NzA4NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIE9WUE4gQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZSBgT1ZQTmAgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgd2l0aGluIHRoYXQgY29udGV4dDogYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBhbmQgYG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlYC4gVGhlIGtleSBxdWVzdGlvbiBoZXJlLCB0aGUgaW1tZWRpYXRlIGNvbmNlcm4sIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBvciBzdGF0aWMuIFRoaXMgaXMgZ29pbmcgdG8gZHJhc3RpY2FsbHkgaW1wYWN0IGhvdyB3ZSBuZWVkIHRvIGFwcHJvYWNoIGFueSBhbmFseXNpcyBvciBwb3RlbnRpYWwgZGVidWdnaW5nLiBVbmRlcnN0YW5kaW5nIHRoZWlyIHNjb3BlIGFuZCB2aXNpYmlsaXR5IGlzIGVzc2VudGlhbCB0byBmdXJ0aGVyIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjMyLjA2NjUzODExN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI4MTgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnBuX2NyeXB0b19raWxsX2tleVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9vdnBuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9vdnBuL2NyeXB0by5jPTQwPXZvaWQgb3Zwbl9jcnlwdG9fc3RhdGVfcmVsZWFzZShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzKVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy01Ny0vKiByZW1vdmVzIHRoZSBrZXkgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBpZCBmcm9tIHRoZSBjcnlwdG8gY29udGV4dCAqL1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmM6NTg6Ym9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uYy01OS17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0by5oPTEzOT1pbnQgb3Zwbl9jcnlwdG9fY29uZmlnX2dldChzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaC0xNDItXFxuZHJpdmVycy9uZXQvb3Zwbi9jcnlwdG8uaDoxNDM6Ym9vbCBvdnBuX2NyeXB0b19raWxsX2tleShzdHJ1Y3Qgb3Zwbl9jcnlwdG9fc3RhdGUgKmNzLCB1OCBrZXlfaWQpO1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvLmgtMTQ0LVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jPTIzOD12b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjY0LVxcdFxcdFxcdCAgICBwZWVyLVxcdTAwM2VpZCk7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjI2NTpcXHRcXHRpZiAob3Zwbl9jcnlwdG9fa2lsbF9rZXkoXFx1MDAyNnBlZXItXFx1MDAzZWNyeXB0bywga3MtXFx1MDAzZWtleV9pZCkpXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTI2Ni1cXHRcXHRcXHQvKiBsZXQgdXNlcnNwYWNlIGtub3cgc28gdGhhdCBhIG5ldyBrZXkgbXVzdCBiZSBuZWdvdGlhdGVkICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjMyLjExNTgyNjc0NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjIyMjYwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE9wZW5WUE4ncyBDcnlwdG9ncmFwaHkqKlxuXG5Pa2F5LCBzbyBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBJdCdzIGNhbGxlZCBmcm9tIGBvdnBuX2VuY3J5cHRfcG9zdGAsIHdoaWNoLCBqdWRnaW5nIGJ5IHRoZSBuYW1lLCBsb29rcyBsaWtlIGl0J3MgY29ubmVjdGVkIHRvIGFzeW5jaHJvbm91cyBjcnlwdG8gb3BlcmF0aW9ucy4gUHJvYmFibHkgYSBjYWxsYmFjayBvciBhIHBvc3QtcHJvY2Vzc2luZyBmdW5jdGlvbiBhZnRlciBlbmNyeXB0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBmbG93LiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGgga2V5cyBhbmQgZW5jcnlwdGlvbiBwcm9jZXNzZXMsIGxldCdzIHNlZSBob3cgdGhpcyB0aWVzIGludG8gdGhlIHBlZXIgZW5kcG9pbnQgdXBkYXRlcy4gSSdsbCBjaGVjayBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIGFuZCBzZWUgaWYgdGhlcmUncyBhIGxpbmsgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDozNi42MzgwNTQ5MjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTI1MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L292cG4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vaW8uYz0xMDg9dm9pZCBvdnBuX2RlY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTE1MC1cXHRcXHQvKiBjaGVjayBpZiB0aGlzIHBlZXIgY2hhbmdlZCBsb2NhbCBvciByZW1vdGUgZW5kcG9pbnQgKi9cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MTUxOlxcdFxcdG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlKHBlZXIsIHNrYik7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTE1Mi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vcGVlci5jPTE0Mz1pbnQgb3Zwbl9wZWVyX3Jlc2V0X3NvY2thZGRyKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuYy0xOTItLyoqXFxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmM6MTkzOiAqIG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlIC0gdXBkYXRlIHJlbW90ZSBvciBsb2NhbCBlbmRwb2ludCBmb3IgcGVlclxcbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTE5NC0gKiBAcGVlcjogcGVlciB0byB1cGRhdGUgdGhlIHJlbW90ZSBlbmRwb2ludCBmb3JcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTE5Ni0gKi9cXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuYzoxOTc6dm9pZCBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L292cG4vcGVlci5jLTE5OC17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuaD0xNTc9dm9pZCBvdnBuX3BlZXJfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5kcml2ZXJzL25ldC9vdnBuL3BlZXIuaC0xNTgtXFxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmg6MTU5OnZvaWQgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmgtMTYwLWludCBvdnBuX3BlZXJfcmVzZXRfc29ja2FkZHIoc3RydWN0IG92cG5fcGVlciAqcGVlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6MDQ6MzYuNjgyOTg2NzYzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTU2MjIxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEZ1enppbmcgQ2FuZGlkYXRlcyoqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgYG92cG5fZGVjcnlwdF9wb3N0YCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlllcywgdGhlc2UgbG9vayBsaWtlIHByb21pc2luZyB0YXJnZXRzIGZvciBmdXp6aW5nLlwiIEVuY3J5cHRpb24vZGVjcnlwdGlvbiByb3V0aW5lcyBhcmUgb2Z0ZW4gcHJpbWUgc3BvdHMgdG8gdW5jb3ZlciB2dWxuZXJhYmlsaXRpZXMuIEhvd2V2ZXIsIGEgcG90ZW50aWFsIGNhdmVhdCBwb3BzIHVwIOKAkyB0aGV5ICptaWdodCogYmUgaW50ZXJuYWwgZnVuY3Rpb25zLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlaXIgc2NvcGUgYW5kIGlmIHRoZXkncmUgZXhwb3NlZCB0byB1bnRydXN0ZWQgaW5wdXQuIExldCdzIHRyYWNlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICp1c2VkKiB0byB1bmRlcnN0YW5kIHRoZWlyIGNhbGwgY29udGV4dHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3OTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDo0MC40Nzg2MTEzNTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzI4Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92cG5fZGVjcnlwdF9wb3N0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L292cG4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYz0yNDA9aW50IG92cG5fYWVhZF9kZWNyeXB0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MsXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMtMzE3LVxcdGFlYWRfcmVxdWVzdF9zZXRfdGZtKHJlcSwga3MtXFx1MDAzZWRlY3J5cHQpO1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYzozMTg6XFx0YWVhZF9yZXF1ZXN0X3NldF9jYWxsYmFjayhyZXEsIDAsIG92cG5fZGVjcnlwdF9wb3N0LCBza2IpO1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYy0zMTktXFx0YWVhZF9yZXF1ZXN0X3NldF9jcnlwdChyZXEsIHNnLCBzZywgcGF5bG9hZF9sZW4gKyB0YWdfc2l6ZSwgaXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jPTYwPXN0YXRpYyB2b2lkIG92cG5fbmV0ZGV2X3dyaXRlKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtODYtXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjg3OlxcdC8qIG5ldHdvcmsgaGVhZGVyIHJlc2V0IGluIG92cG5fZGVjcnlwdF9wb3N0KCkgKi9cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtODgtXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0xMDctXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjEwODp2b2lkIG92cG5fZGVjcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTEwOS17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM9MjE0PXZvaWQgb3Zwbl9yZWN2KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjM0LVxcdG1lbXNldChvdnBuX3NrYl9jYihza2IpLCAwLCBzaXplb2Yoc3RydWN0IG92cG5fY2IpKTtcXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MjM1OlxcdG92cG5fZGVjcnlwdF9wb3N0KHNrYiwgb3Zwbl9hZWFkX2RlY3J5cHQocGVlciwga3MsIHNrYikpO1xcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0yMzYtfVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5oPTMxPXZvaWQgb3Zwbl9lbmNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldCk7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5oOjMyOnZvaWQgb3Zwbl9kZWNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldCk7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5oLTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDo0MC41MjMzNDUyOTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2Njk5ODIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKlBhY2tldCBSZWNlcHRpb24gaW4gT3BlblZQTjogYG92cG5fcmVjdmAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiBwYWNrZXQgcmVjZXB0aW9uIGluIE9wZW5WUE4sIGFzIHlvdSdkIGV4cGVjdCwgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBgb3Zwbl9yZWN2YCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHBsYWNlIHRoZSByZWNlaXZlZCBkYXRhIGhpdHMuIEl0J3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBpbml0aWFsIHBvaW50IG9mIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmsgdHJhZmZpYy4gVW5kZXJzdGFuZGluZyB3aGF0IGhhcHBlbnMgKmFmdGVyKiB0aGF0LCB3aXRoaW4gYG92cG5fcmVjdmAgYW5kIHRoZSBzdWJzZXF1ZW50IHByb2Nlc3Npbmcgc3RhZ2VzLCBpcyBjcnVjaWFsLiBXZSdyZSB0YWxraW5nIGFib3V0IGRlY3J5cHRpb24sIGF1dGhlbnRpY2F0aW9uIGNoZWNrcywgcG90ZW50aWFsIHJlYXNzZW1ibHksIGFuZCB0aGVuIG9ud2FyZCB0byB0aGUgdHVubmVsIGludGVyZmFjZS4gQnV0LCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBpbmNvbWluZyBkYXRhLCBgb3Zwbl9yZWN2YCAqaXMqIHRoZSBzdGFydGluZyBsaW5lLiBJIGltbWVkaWF0ZWx5IGJlZ2luIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGlzIGFyY2hpdGVjdGVkIHRvIGhhbmRsZSBtdWx0aXBsZSBjb25uZWN0aW9ucyBvciBhbnkgb3RoZXIgc3BlY2lmaWMgb3B0aW1pemF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU3OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjQ0LjA5MDM0NzkyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NDI3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3Zwbl9yZWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L292cG4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vaW8uYz0xMDg9dm9pZCBvdnBuX2RlY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTIxMy0vKiBSWCBwYXRoIGVudHJ5IHBvaW50OiBkZWNyeXB0IHBhY2tldCBhbmQgZm9yd2FyZCBpdCB0byB0aGUgZGV2aWNlICovXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjIxNDp2b2lkIG92cG5fcmVjdihzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0yMTUte1xcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5oPTI1PW5ldGRldl90eF90IG92cG5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5oLTI2LVxcbmRyaXZlcnMvbmV0L292cG4vaW8uaDoyNzp2b2lkIG92cG5fcmVjdihzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC9vdnBuL2lvLmgtMjgtdm9pZCBvdnBuX3htaXRfc3BlY2lhbChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBjb25zdCB2b2lkICpkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi90Y3AuYz0xMDI9c3RhdGljIHZvaWQgb3Zwbl90Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jLTEzOS1cXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jOjE0MDpcXHQvKiBob2xkIHJlZmVyZW5jZSB0byBwZWVyIGFzIHJlcXVpcmVkIGJ5IG92cG5fcmVjdigpLlxcbmRyaXZlcnMvbmV0L292cG4vdGNwLmMtMTQxLVxcdCAqXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jLTE0Ny1cXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jOjE0ODpcXHRvdnBuX3JlY3YocGVlciwgc2tiKTtcXG5kcml2ZXJzL25ldC9vdnBuL3RjcC5jLTE0OS1cXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jPTY3PXN0YXRpYyBpbnQgb3Zwbl91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTEyMy1cXHRfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jOjEyNDpcXHRvdnBuX3JlY3YocGVlciwgc2tiKTtcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTEyNS1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6MDQ6NDQuMTM3MTk4MDgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjE2NTA4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqTmV0d29yayBQYWNrZXQgSGFuZGxpbmcgLSBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IE9wZW5WUE4gYWN0dWFsbHkgaW50ZXJmYWNlcyB3aXRoIHRoZSBuZXR3b3JrLiBJIGtub3cgdGhhdCBgb3Zwbl91ZHBfZW5jYXBfcmVjdmAgYW5kIGBvdnBuX3RjcF9yY3ZgIGFyZSB0aGUgcmVhbCBlbnRyeSBwb2ludHMgZm9yIHJlY2VpdmluZyBwYWNrZXRzLCB0aGUgaW5pdGlhbCBob29rcyBmcm9tIHRoZSBuZXR3b3JrIHN0YWNrIGludG8gdGhlIE9wZW5WUE4gY29kZS4gIE9uIHRoZSBvdGhlciBzaWRlIG9mIHRoaW5ncywgaXQgc2VlbXMgbGlrZSBgb3Zwbl9uZXRfeG1pdGAgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBzZW5kaW5nIHBhY2tldHMgb3V0LCB0aGF0J3Mgd2hlcmUgdGhlIGRhdGEgZ29lcyB0byBiZSBwdXQgb24gdGhlIHdpcmUuIEdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG9uIGBvdnBuX25ldF94bWl0YCBzaW5jZSB0aGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbi4gTGV0J3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM3OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjQ3LjY5ODg1MTUyMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNDk3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3Zwbl9uZXRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9vdnBuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9vdnBuL2lvLmM9MzM2PXN0YXRpYyB2b2lkIG92cG5fc2VuZChzdHJ1Y3Qgb3Zwbl9wcml2ICpvdnBuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTM1NS0gKi9cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM6MzU2Om5ldGRldl90eF90IG92cG5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMzU3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uaD0yMz1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBvdnBuX2tlZXBhbGl2ZV9tZXNzYWdlW09WUE5fS0VFUEFMSVZFX1NJWkVdO1xcbmRyaXZlcnMvbmV0L292cG4vaW8uaC0yNC1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmg6MjU6bmV0ZGV2X3R4X3Qgb3Zwbl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9vdnBuL2lvLmgtMjYtXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL21haW4uYz0xMDA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBvdnBuX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL21haW4uYy0xMDItXFx0Lm5kb191bmluaXRcXHRcXHQ9IG92cG5fbmV0X3VuaW5pdCxcXG5kcml2ZXJzL25ldC9vdnBuL21haW4uYzoxMDM6XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBvdnBuX25ldF94bWl0LFxcbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jLTEwNC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDo0Ny43NDMwMDUxNzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg5NDcyNjE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBjb250ZXh0IGlzIE9wZW5WUE4gc2VjdXJpdHk6XG5cbioqRGVidWdnaW5nIE9wZW5WUE4gQ3J5cHRvIEtleSBIYW5kbGluZyoqXG5cbkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyB3aXRoaW4gYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBhbmQgdGhlIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYG92cG5fY3J5cHRvX2tpbGxfa2V5YC4gSXQgc2VlbXMgdGhlIGJ1ZyBpcyBsaWtlbHkgcmVsYXRlZCB0byB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBpcyBjYWxsZWQgdW5kZXIgYm90aCBzdWNjZXNzIGFuZCBmYWlsdXJlIGNvbmRpdGlvbnMgd2l0aGluIGBvdnBuX2VuY3J5cHRfcG9zdGAuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBpbmNvcnJlY3QgY2xlYW51cCBpZiBgb3Zwbl9lbmNyeXB0X3Bvc3RgIGRvZXNuJ3QgY29uc2lzdGVudGx5IHRyaWdnZXIgaXQgaW4gb25lIGNvbmRpdGlvbiBvciBhbm90aGVyLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGxvZ2ljIG9mIGBvdnBuX2VuY3J5cHRfcG9zdGAgaXRzZWxmIHRvIGNsYXJpZnkgdGhlIGV4YWN0IHNjZW5hcmlvcyB0aGF0IGxlYWQgdG8gYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBiZWluZyBpbnZva2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGxpa2VseSByb290IGNhdXNlIG9mIHRoZSBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDo1NS42Mzc3MzQ2MTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjE2MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92cG5fZW5jcnlwdF9wb3N0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L292cG4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYz0xMzc9aW50IG92cG5fYWVhZF9lbmNyeXB0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBvdnBuX2NyeXB0b19rZXlfc2xvdCAqa3MsXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2NyeXB0b19hZWFkLmMtMjMwLVxcdGFlYWRfcmVxdWVzdF9zZXRfdGZtKHJlcSwga3MtXFx1MDAzZWVuY3J5cHQpO1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYzoyMzE6XFx0YWVhZF9yZXF1ZXN0X3NldF9jYWxsYmFjayhyZXEsIDAsIG92cG5fZW5jcnlwdF9wb3N0LCBza2IpO1xcbmRyaXZlcnMvbmV0L292cG4vY3J5cHRvX2FlYWQuYy0yMzItXFx0YWVhZF9yZXF1ZXN0X3NldF9jcnlwdChyZXEsIHNnLCBzZyxcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYz0yMTQ9dm9pZCBvdnBuX3JlY3Yoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0yMzctXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjIzODp2b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTIzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM9MzEyPXN0YXRpYyBib29sIG92cG5fZW5jcnlwdF9vbmUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0zMjEtXFx0LyogdGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgcGVlciBiZWNhdXNlIHRoZSBjcnlwdG8gY29kZSBtYXkgcnVuIGFzeW5jLlxcbmRyaXZlcnMvbmV0L292cG4vaW8uYzozMjI6XFx0ICogb3Zwbl9lbmNyeXB0X3Bvc3QoKSB3aWxsIHJlbGVhc2UgaXQgdXBvbiBjb21wbGV0aW9uXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTMyMy1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0zMzAtXFx0bWVtc2V0KG92cG5fc2tiX2NiKHNrYiksIDAsIHNpemVvZihzdHJ1Y3Qgb3Zwbl9jYikpO1xcbmRyaXZlcnMvbmV0L292cG4vaW8uYzozMzE6XFx0b3Zwbl9lbmNyeXB0X3Bvc3Qoc2tiLCBvdnBuX2FlYWRfZW5jcnlwdChwZWVyLCBrcywgc2tiKSk7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTMzMi1cXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uaD0yOD12b2lkIG92cG5feG1pdF9zcGVjaWFsKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIGNvbnN0IHZvaWQgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmgtMzAtXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5oOjMxOnZvaWQgb3Zwbl9lbmNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldCk7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5oLTMyLXZvaWQgb3Zwbl9kZWNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA0OjU1LjY4Mzk5MjIwMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYxNTYyMDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQb3N0LUVuY3J5cHRpb24gUHJvY2VzcyBpbiBPcGVuVlBOKipcblxuQWxyaWdodCwgc28gdGhlIHBvc3QtZW5jcnlwdGlvbiBzdGFnZSwgc3BlY2lmaWNhbGx5IGBvdnBuX2VuY3J5cHRfcG9zdGAsIGhhcyBncmFiYmVkIG15IGF0dGVudGlvbi4gSSBrbm93IGl0J3MgYSBjcnVjaWFsIHN0ZXAsIG9jY3VycmluZywgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIHJpZ2h0IGFmdGVyIHRoZSBkYXRhIGhhcyBiZWVuIGVuY3J5cHRlZCBpbiB0aGUgT3BlblZQTiBwcm9jZXNzLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiV2hlcmUncyB0aGUgaW1wbGVtZW50YXRpb24/IFRpbWUgdG8gdHJhY2sgdGhpcyBkb3duIGFuZCB1bmRlcnN0YW5kIGl0cyBleGFjdCByb2xlLlwiXG5cbk15IGluc3RpbmN0cyB0ZWxsIG1lIHRvIGp1bXAgaW50byB0aGUgYGRyaXZlcnMvbmV0L292cG4vaW8uY2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgdGhlIGdvLXRvIGxvY2F0aW9uIGZvciBjb3JlIEkvTyBvcGVyYXRpb25zIGFuZCBuZXR3b3JrIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIE9wZW5WUE4ga2VybmVsIG1vZHVsZXMuIFRoZSBgaW8uY2AgZmlsZSBpcyBsaWtlbHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGxvZ2ljIGJlaGluZCB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgYWZ0ZXIgdGhlIGRhdGEgaXMgc2NyYW1ibGVkLCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCBpcyB0aGUga2V5IHRvIHRoYXQgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBhbnRpY2lwYXRlIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBmaW5hbCBwYWNrZXQgYXNzZW1ibHksIHBvdGVudGlhbGx5IGFkZGluZyBoZWFkZXJzLCBwcmVwYXJpbmcgdGhlIGRhdGEgZm9yIHRyYW5zbWlzc2lvbiBvciBoYW5kbGluZyBhbnkgbmVjZXNzYXJ5IHBvc3QtZW5jcnlwdGlvbiB0cmFuc2Zvcm1hdGlvbnMsIG9yIGV2ZW4gZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyB0byB2ZXJpZnkgbXkgZXhwZWN0YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTU4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6MDQ6NTkuOTQ1NTU2OTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvb3Zwbi9pby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzOCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzODpcXHR2b2lkIG92cG5fZW5jcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXFxuIDIzOTpcXHR7XFxuIDI0MDpcXHRcXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xcbiAyNDE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRhdGE7XFxuIDI0MjpcXHRcXHRzdHJ1Y3Qgb3Zwbl9zb2NrZXQgKnNvY2s7XFxuIDI0MzpcXHRcXHRzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyO1xcbiAyNDQ6XFx0XFx0dW5zaWduZWQgaW50IG9yaWdfbGVuO1xcbiAyNDU6XFx0XFxuIDI0NjpcXHRcXHQvKiBlbmNyeXB0aW9uIGlzIGhhcHBlbmluZyBhc3luY2hyb25vdXNseS4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlXFxuIDI0NzpcXHRcXHQgKiBjYWxsZWQgbGF0ZXIgYnkgdGhlIGNyeXB0byBjYWxsYmFjayB3aXRoIGEgcHJvcGVyIHJldHVybiB2YWx1ZVxcbiAyNDg6XFx0XFx0ICovXFxuIDI0OTpcXHRcXHRpZiAodW5saWtlbHkocmV0ID09IC1FSU5QUk9HUkVTUykpXFxuIDI1MDpcXHRcXHRcXHRyZXR1cm47XFxuIDI1MTpcXHRcXG4gMjUyOlxcdFxcdGtzID0gb3Zwbl9za2JfY2Ioc2tiKS1cXHUwMDNla3M7XFxuIDI1MzpcXHRcXHRwZWVyID0gb3Zwbl9za2JfY2Ioc2tiKS1cXHUwMDNlcGVlcjtcXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0LyogY3J5cHRvIGlzIGRvbmUsIGNsZWFudXAgc2tiIENCIGFuZCBpdHMgbWVtYmVycyAqL1xcbiAyNTY6XFx0XFx0a2ZyZWUob3Zwbl9za2JfY2Ioc2tiKS1cXHUwMDNlY3J5cHRvX3RtcCk7XFxuIDI1NzpcXHRcXG4gMjU4OlxcdFxcdGlmICh1bmxpa2VseShyZXQgPT0gLUVSQU5HRSkpIHtcXG4gMjU5OlxcdFxcdFxcdC8qIHdlIHJhbiBvdXQgb2YgSVZzIGFuZCB3ZSBtdXN0IGtpbGwgdGhlIGtleSBhcyBpdCBjYW4ndCBiZVxcbiAyNjA6XFx0XFx0XFx0ICogdXNlIGFueW1vcmVcXG4gMjYxOlxcdFxcdFxcdCAqL1xcbiAyNjI6XFx0XFx0XFx0bmV0ZGV2X3dhcm4ocGVlci1cXHUwMDNlb3Zwbi1cXHUwMDNlZGV2LFxcbiAyNjM6XFx0XFx0XFx0XFx0ICAgIFxcXCJraWxsaW5nIGtleSAldSBmb3IgcGVlciAldVxcXFxuXFxcIiwga3MtXFx1MDAzZWtleV9pZCxcXG4gMjY0OlxcdFxcdFxcdFxcdCAgICBwZWVyLVxcdTAwM2VpZCk7XFxuIDI2NTpcXHRcXHRcXHRpZiAob3Zwbl9jcnlwdG9fa2lsbF9rZXkoXFx1MDAyNnBlZXItXFx1MDAzZWNyeXB0bywga3MtXFx1MDAzZWtleV9pZCkpXFxuIDI2NjpcXHRcXHRcXHRcXHQvKiBsZXQgdXNlcnNwYWNlIGtub3cgc28gdGhhdCBhIG5ldyBrZXkgbXVzdCBiZSBuZWdvdGlhdGVkICovXFxuIDI2NzpcXHRcXHRcXHRcXHRvdnBuX25sX2tleV9zd2FwX25vdGlmeShwZWVyLCBrcy1cXHUwMDNla2V5X2lkKTtcXG4gMjY4OlxcdFxcbiAyNjk6XFx0XFx0XFx0Z290byBlcnI7XFxuIDI3MDpcXHRcXHR9XFxuIDI3MTpcXHRcXG4gMjcyOlxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYyAwKSlcXG4gMjczOlxcdFxcdFxcdGdvdG8gZXJyO1xcbiAyNzQ6XFx0XFxuIDI3NTpcXHRcXHRza2JfbWFya19ub3Rfb25fbGlzdChza2IpO1xcbiAyNzY6XFx0XFx0b3JpZ19sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gMjc3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNDo1OS45NDU2Mzc4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIyNjIwMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIEVycm9yIEhhbmRsaW5nIGFuZCBLZXkgTWFuYWdlbWVudCBpbiBPcGVuVlBOKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGZ1bmN0aW9uIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBlcnJvciBjb2RlIGAtRVJBTkdFYC4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgaWYgd2UgZ2V0IGFuIGAtRVJBTkdFYCBlcnJvciwgYG92cG5fY3J5cHRvX2tpbGxfa2V5YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIGNhbGxlZC4gVGhhdCdzIGdvb2QgdG8ga25vdzsgaXQgbWVhbnMgdGhlcmUncyBhIHNwZWNpZmljIGFjdGlvbiBiZWluZyB0YWtlbiB0byBoYW5kbGUgdGhhdCBwYXJ0aWN1bGFyIHJhbmdlIGVycm9yLCBsaWtlbHkgcmVsYXRlZCB0byBrZXkgbWFuYWdlbWVudCBvciBkZWNyeXB0aW9uLiBJdCB3b3VsZCBiZSBnb29kIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYSBsaXR0bGUgYml0IGJldHRlciwganVzdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNhbGwuXG5cbk5vdywgbXkgbWluZCBzaGlmdHMgdG8gYG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlYC4gSSByZW1lbWJlciB0aGlzIGZ1bmN0aW9uLiBJdCdzIGNhbGxlZCBkdXJpbmcgdGhlIGRlY3J5cHRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGZyb20gYG92cG5fZGVjcnlwdF9wb3N0YC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBhbnkgZmFpbHVyZSBkdXJpbmcgZW5kcG9pbnQgdXBkYXRlIGNvdWxkIGNhdXNlIHByb2JsZW1zIGRvd24gdGhlIGxpbmUuIEnigJlkIHdhbnQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgbm90IHNvbWVob3cgcmVsYXRlZCB0byB0aGUgYC1FUkFOR0VgIHNpdHVhdGlvbiBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTIzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNTowMy44NjgyNjAzNzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvb3Zwbi9pby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwODpcXHR2b2lkIG92cG5fZGVjcnlwdF9wb3N0KHZvaWQgKmRhdGEsIGludCByZXQpXFxuIDEwOTpcXHR7XFxuIDExMDpcXHRcXHRzdHJ1Y3Qgb3Zwbl9jcnlwdG9fa2V5X3Nsb3QgKmtzO1xcbiAxMTE6XFx0XFx0dW5zaWduZWQgaW50IHBheWxvYWRfb2Zmc2V0ID0gMDtcXG4gMTEyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBkYXRhO1xcbiAxMTM6XFx0XFx0c3RydWN0IG92cG5fc29ja2V0ICpzb2NrO1xcbiAxMTQ6XFx0XFx0c3RydWN0IG92cG5fcGVlciAqcGVlcjtcXG4gMTE1OlxcdFxcdF9fYmUxNiBwcm90bztcXG4gMTE2OlxcdFxcdF9fYmUzMiAqcGlkO1xcbiAxMTc6XFx0XFxuIDExODpcXHRcXHQvKiBjcnlwdG8gaXMgaGFwcGVuaW5nIGFzeW5jaHJvbm91c2x5LiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkXFxuIDExOTpcXHRcXHQgKiBhZ2FpbiBsYXRlciBieSB0aGUgY3J5cHRvIGNhbGxiYWNrIHdpdGggYSBwcm9wZXIgcmV0dXJuIGNvZGVcXG4gMTIwOlxcdFxcdCAqL1xcbiAxMjE6XFx0XFx0aWYgKHVubGlrZWx5KHJldCA9PSAtRUlOUFJPR1JFU1MpKVxcbiAxMjI6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHRwYXlsb2FkX29mZnNldCA9IG92cG5fc2tiX2NiKHNrYiktXFx1MDAzZXBheWxvYWRfb2Zmc2V0O1xcbiAxMjU6XFx0XFx0a3MgPSBvdnBuX3NrYl9jYihza2IpLVxcdTAwM2VrcztcXG4gMTI2OlxcdFxcdHBlZXIgPSBvdnBuX3NrYl9jYihza2IpLVxcdTAwM2VwZWVyO1xcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHQvKiBjcnlwdG8gaXMgZG9uZSwgY2xlYW51cCBza2IgQ0IgYW5kIGl0cyBtZW1iZXJzICovXFxuIDEyOTpcXHRcXHRrZnJlZShvdnBuX3NrYl9jYihza2IpLVxcdTAwM2VjcnlwdG9fdG1wKTtcXG4gMTMwOlxcdFxcbiAxMzE6XFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKVxcbiAxMzI6XFx0XFx0XFx0Z290byBkcm9wO1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHQvKiBQSUQgc2l0cyBhZnRlciB0aGUgb3AgKi9cXG4gMTM1OlxcdFxcdHBpZCA9IChfX2ZvcmNlIF9fYmUzMiAqKShza2ItXFx1MDAzZWRhdGEgKyBPVlBOX09QQ09ERV9TSVpFKTtcXG4gMTM2OlxcdFxcdHJldCA9IG92cG5fcGt0aWRfcmVjdihcXHUwMDI2a3MtXFx1MDAzZXBpZF9yZWN2LCBudG9obCgqcGlkKSwgMCk7XFxuIDEzNzpcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG4gMTM4OlxcdFxcdFxcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXFxcIiVzOiBQS1QgSUQgUlggZXJyb3IgZm9yIHBlZXIgJXU6ICVkXFxcXG5cXFwiLFxcbiAxMzk6XFx0XFx0XFx0XFx0XFx0ICAgIG5ldGRldl9uYW1lKHBlZXItXFx1MDAzZW92cG4tXFx1MDAzZWRldiksIHBlZXItXFx1MDAzZWlkLFxcbiAxNDA6XFx0XFx0XFx0XFx0XFx0ICAgIHJldCk7XFxuIDE0MTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDE0MjpcXHRcXHR9XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdC8qIGtlZXAgdHJhY2sgb2YgbGFzdCByZWNlaXZlZCBhdXRoZW50aWNhdGVkIHBhY2tldCBmb3Iga2VlcGFsaXZlICovXFxuIDE0NTpcXHRcXHRXUklURV9PTkNFKHBlZXItXFx1MDAzZWxhc3RfcmVjdiwga3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKSk7XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMTQ4OlxcdFxcdHNvY2sgPSByY3VfZGVyZWZlcmVuY2UocGVlci1cXHUwMDNlc29jayk7XFxuIDE0OTpcXHRcXHRpZiAoc29jayBcXHUwMDI2XFx1MDAyNiBzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApXFxuIDE1MDpcXHRcXHRcXHQvKiBjaGVjayBpZiB0aGlzIHBlZXIgY2hhbmdlZCBsb2NhbCBvciByZW1vdGUgZW5kcG9pbnQgKi9cXG4gMTUxOlxcdFxcdFxcdG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlKHBlZXIsIHNrYik7XFxuIDE1MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0LyogcG9pbnQgdG8gZW5jYXBzdWxhdGVkIElQIHBhY2tldCAqL1xcbiAxNTU6XFx0XFx0X19za2JfcHVsbChza2IsIHBheWxvYWRfb2Zmc2V0KTtcXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFx0LyogY2hlY2sgaWYgdGhpcyBpcyBhIHZhbGlkIGRhdGFwYWNrZXQgdGhhdCBoYXMgdG8gYmUgZGVsaXZlcmVkIHRvIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNTowMy44NjgzNDE1NDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4NTkyMjc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCB0aGUgZmFjdCB0aGF0IGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAgaXMgYmVpbmcgY2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBVRFAgcGFja2V0IGRlY3J5cHRpb24gdGVsbHMgbWUgc29tZXRoaW5nIGNyaXRpY2FsOiB3ZSdyZSBkZWFsaW5nIHdpdGggYSB3b3JraW5nIHBhdGguIFRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgcmVhY2hlZCBhbmQgZXhlY3V0ZWQsIGluZGljYXRpbmcgYSBmdW5jdGlvbmFsIGVuZHBvaW50IHVwZGF0ZSBwcm9jZXNzIHdpdGhpbiB0aGUgT3BlblZQTiBkcml2ZXIuIEkgY2FuIGNvbmZpcm0gdGhpcyBpcyBub3QgbWVyZWx5IHRoZW9yZXRpY2FsLCBidXQgaGFzIGJlZW4gb2JzZXJ2ZWQuIFRoaXMgaXMgZ29vZCwgYmVjYXVzZSBpdCB2YWxpZGF0ZXMgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHBhdGggb2YgZXhlY3V0aW9uLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAgaXRzZWxmLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgY29uc3VsdGluZyBgZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNgIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGxvZ2ljIGlzIGJlaW5nIHRyaWdnZXJlZCBpbiB0aGlzIHN1Y2Nlc3NmdWwgZGVjcnlwdGlvbiBzY2VuYXJpby4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBzaWduaWZpY2FudCBmb3IgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgb3ZlcmFsbCBuZXR3b3JrIGJlaGF2aW91ciwgc28gSSBuZWVkIGEgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA1OjA4LjQ1NDI2NjQwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvb3Zwbi9wZWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NzpcXHR2b2lkIG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDE5ODpcXHR7XFxuIDE5OTpcXHRcXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqbmhlYWQ7XFxuIDIwMDpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcztcXG4gMjAxOlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNhNjtcXG4gMjAyOlxcdFxcdGJvb2wgcmVzZXRfY2FjaGUgPSBmYWxzZTtcXG4gMjAzOlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9pbiAqc2E7XFxuIDIwNDpcXHRcXHRzdHJ1Y3Qgb3Zwbl9iaW5kICpiaW5kO1xcbiAyMDU6XFx0XFx0Y29uc3Qgdm9pZCAqbG9jYWxfaXA7XFxuIDIwNjpcXHRcXHRzaXplX3Qgc2FsZW4gPSAwO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnBlZXItXFx1MDAzZWxvY2spO1xcbiAyMDk6XFx0XFx0YmluZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGVlci1cXHUwMDNlYmluZCxcXG4gMjEwOlxcdFxcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnBlZXItXFx1MDAzZWxvY2spKTtcXG4gMjExOlxcdFxcdGlmICh1bmxpa2VseSghYmluZCkpXFxuIDIxMjpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuIDIxNTpcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4gMjE2OlxcdFxcdFxcdC8qIGZsb2F0IGNoZWNrICovXFxuIDIxNzpcXHRcXHRcXHRpZiAodW5saWtlbHkoIW92cG5fYmluZF9za2Jfc3JjX21hdGNoKGJpbmQsIHNrYikpKSB7XFxuIDIxODpcXHRcXHRcXHRcXHQvKiB1bmNvbmRpdGlvbmFsbHkgc2F2ZSBsb2NhbCBlbmRwb2ludCBpbiBjYXNlXFxuIDIxOTpcXHRcXHRcXHRcXHQgKiBvZiBmbG9hdCwgYXMgaXQgbWF5IGhhdmUgY2hhbmdlZCBhcyB3ZWxsXFxuIDIyMDpcXHRcXHRcXHRcXHQgKi9cXG4gMjIxOlxcdFxcdFxcdFxcdGxvY2FsX2lwID0gXFx1MDAyNmlwX2hkcihza2IpLVxcdTAwM2VkYWRkcjtcXG4gMjIyOlxcdFxcdFxcdFxcdHNhID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVxcdTAwMjZzcztcXG4gMjIzOlxcdFxcdFxcdFxcdHNhLVxcdTAwM2VzaW5fZmFtaWx5ID0gQUZfSU5FVDtcXG4gMjI0OlxcdFxcdFxcdFxcdHNhLVxcdTAwM2VzaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHI7XFxuIDIyNTpcXHRcXHRcXHRcXHRzYS1cXHUwMDNlc2luX3BvcnQgPSB1ZHBfaGRyKHNrYiktXFx1MDAzZXNvdXJjZTtcXG4gMjI2OlxcdFxcdFxcdFxcdHNhbGVuID0gc2l6ZW9mKCpzYSk7XFxuIDIyNzpcXHRcXHRcXHRcXHRyZXNldF9jYWNoZSA9IHRydWU7XFxuIDIyODpcXHRcXHRcXHRcXHRicmVhaztcXG4gMjI5OlxcdFxcdFxcdH1cXG4gMjMwOlxcdFxcbiAyMzE6XFx0XFx0XFx0LyogaWYgbm8gZmxvYXQgaGFwcGVuZWQsIGxldCdzIGRvdWJsZSBjaGVjayBpZiB0aGUgbG9jYWwgZW5kcG9pbnRcXG4gMjMyOlxcdFxcdFxcdCAqIGhhcyBjaGFuZ2VkXFxuIDIzMzpcXHRcXHRcXHQgKi9cXG4gMjM0OlxcdFxcdFxcdGlmICh1bmxpa2VseShiaW5kLVxcdTAwM2Vsb2NhbC5pcHY0LnNfYWRkciAhPSBpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpKSB7XFxuIDIzNTpcXHRcXHRcXHRcXHRuZXRfZGJnX3JhdGVsaW1pdGVkKFxcXCIlczogbGVhcm5pbmcgbG9jYWwgSVB2NCBmb3IgcGVlciAlZCAoJXBJNCAtXFx1MDAzZSAlcEk0KVxcXFxuXFxcIixcXG4gMjM2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBuZXRkZXZfbmFtZShwZWVyLVxcdTAwM2VvdnBuLVxcdTAwM2VkZXYpLFxcbiAyMzc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBlZXItXFx1MDAzZWlkLCBcXHUwMDI2YmluZC1cXHUwMDNlbG9jYWwuaXB2NC5zX2FkZHIsXFxuIDIzODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwX2hkcihza2IpLVxcdTAwM2VkYWRkcik7XFxuIDIzOTpcXHRcXHRcXHRcXHRiaW5kLVxcdTAwM2Vsb2NhbC5pcHY0LnNfYWRkciA9IGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcjtcXG4gMjQwOlxcdFxcdFxcdFxcdHJlc2V0X2NhY2hlID0gdHJ1ZTtcXG4gMjQxOlxcdFxcdFxcdH1cXG4gMjQyOlxcdFxcdFxcdGJyZWFrO1xcbiAyNDM6XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4gMjQ0OlxcdFxcdFxcdC8qIGZsb2F0IGNoZWNrICovXFxuIDI0NTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIW92cG5fYmluZF9za2Jfc3JjX21hdGNoKGJpbmQsIHNrYikpKSB7XFxuIDI0NjpcXHRcXHRcXHRcXHQvKiB1bmNvbmRpdGlvbmFsbHkgc2F2ZSBsb2NhbCBlbmRwb2ludCBpbiBjYXNlXFxuIDI0NzpcXHRcXHRcXHRcXHQgKiBvZiBmbG9hdCwgYXMgaXQgbWF5IGhhdmUgY2hhbmdlZCBhcyB3ZWxsXFxuIDI0ODpcXHRcXHRcXHRcXHQgKi9cXG4gMjQ5OlxcdFxcdFxcdFxcdGxvY2FsX2lwID0gXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyO1xcbiAyNTA6XFx0XFx0XFx0XFx0c2E2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilcXHUwMDI2c3M7XFxuIDI1MTpcXHRcXHRcXHRcXHRzYTYtXFx1MDAzZXNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7XFxuIDI1MjpcXHRcXHRcXHRcXHRzYTYtXFx1MDAzZXNpbjZfYWRkciA9IGlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyO1xcbiAyNTM6XFx0XFx0XFx0XFx0c2E2LVxcdTAwM2VzaW42X3BvcnQgPSB1ZHBfaGRyKHNrYiktXFx1MDAzZXNvdXJjZTtcXG4gMjU0OlxcdFxcdFxcdFxcdHNhNi1cXHUwMDNlc2luNl9zY29wZV9pZCA9IGlwdjZfaWZhY2Vfc2NvcGVfaWQoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbiAyNTU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlc2tiX2lpZik7XFxuIDI1NjpcXHRcXHRcXHRcXHRzYWxlbiA9IHNpemVvZigqc2E2KTtcXG4gMjU3OlxcdFxcdFxcdFxcdHJlc2V0X2NhY2hlID0gdHJ1ZTtcXG4gMjU4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyNTk6XFx0XFx0XFx0fVxcbiAyNjA6XFx0XFxuIDI2MTpcXHRcXHRcXHQvKiBpZiBubyBmbG9hdCBoYXBwZW5lZCwgbGV0J3MgZG91YmxlIGNoZWNrIGlmIHRoZSBsb2NhbCBlbmRwb2ludFxcbiAyNjI6XFx0XFx0XFx0ICogaGFzIGNoYW5nZWRcXG4gMjYzOlxcdFxcdFxcdCAqL1xcbiAyNjQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmJpbmQtXFx1MDAzZWxvY2FsLmlwdjYsXFxuIDI2NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpKSkge1xcbiAyNjY6XFx0XFx0XFx0XFx0bmV0X2RiZ19yYXRlbGltaXRlZChcXFwiJXM6IGxlYXJuaW5nIGxvY2FsIElQdjYgZm9yIHBlZXIgJWQgKCVwSTZjIC1cXHUwMDNlICVwSTZjKVxcXFxuXFxcIixcXG4gMjY3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBuZXRkZXZfbmFtZShwZWVyLVxcdTAwM2VvdnBuLVxcdTAwM2VkZXYpLFxcbiAyNjg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBlZXItXFx1MDAzZWlkLCBcXHUwMDI2YmluZC1cXHUwMDNlbG9jYWwuaXB2NixcXG4gMjY5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2aXB2Nl9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpO1xcbiAyNzA6XFx0XFx0XFx0XFx0YmluZC1cXHUwMDNlbG9jYWwuaXB2NiA9IGlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyO1xcbiAyNzE6XFx0XFx0XFx0XFx0cmVzZXRfY2FjaGUgPSB0cnVlO1xcbiAyNzI6XFx0XFx0XFx0fVxcbiAyNzM6XFx0XFx0XFx0YnJlYWs7XFxuIDI3NDpcXHRcXHRkZWZhdWx0OlxcbiAyNzU6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIDI3NjpcXHRcXHR9XFxuIDI3NzpcXHRcXG4gMjc4OlxcdFxcdGlmICh1bmxpa2VseShyZXNldF9jYWNoZSkpXFxuIDI3OTpcXHRcXHRcXHRkc3RfY2FjaGVfcmVzZXQoXFx1MDAyNnBlZXItXFx1MDAzZWRzdF9jYWNoZSk7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdC8qIGlmIHRoZSBwZWVyIGRpZCBub3QgZmxvYXQsIHdlIGNhbiBiYWlsIG91dCBub3cgKi9cXG4gMjgyOlxcdFxcdGlmIChsaWtlbHkoIXNhbGVuKSlcXG4gMjgzOlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiAyODQ6XFx0XFxuIDI4NTpcXHRcXHRpZiAodW5saWtlbHkob3Zwbl9wZWVyX3Jlc2V0X3NvY2thZGRyKHBlZXIsXFxuIDI4NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKilcXHUwMDI2c3MsXFxuIDI4NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBsb2NhbF9pcCkgXFx1MDAzYyAwKSlcXG4gMjg4OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiAyODk6XFx0XFxuIDI5MDpcXHRcXHRuZXRfZGJnX3JhdGVsaW1pdGVkKFxcXCIlczogcGVlciAlZCBmbG9hdGVkIHRvICVwSVNjcFxcXCIsXFxuIDI5MTpcXHRcXHRcXHRcXHQgICAgbmV0ZGV2X25hbWUocGVlci1cXHUwMDNlb3Zwbi1cXHUwMDNlZGV2KSwgcGVlci1cXHUwMDNlaWQsIFxcdTAwMjZzcyk7XFxuIDI5MjpcXHRcXG4gMjkzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwZWVyLVxcdTAwM2Vsb2NrKTtcXG4gMjk0OlxcdFxcbiAyOTU6XFx0XFx0b3Zwbl9ubF9wZWVyX2Zsb2F0X25vdGlmeShwZWVyLCBcXHUwMDI2c3MpO1xcbiAyOTY6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA1OjA4LjQ1NDQyNzU1NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Nzg3NDIwMTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uIGluIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRpZmYgaW4gYG92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlYCwgYW5kIGl0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGNoZWNrIGZvciBgaGxpc3RfdW5oYXNoZWQoXHUwMDI2cGVlci1cdTAwM2VoYXNoX2VudHJ5X2lkKWAgaW4gdGhlIGBpZiAodW5saWtlbHkoIWJpbmQpKWAgY29uZGl0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IHdoYXQncyBkcml2aW5nIHRoaXM/IFdoeSBhcmUgd2Ugc3VkZGVubHkgY29uY2VybmVkIGFib3V0IHRoZSBwZWVyIGJlaW5nIHVuaGFzaGVkP1xuXG5JIHJlbWVtYmVyIHRoaXMgZnVuY3Rpb24sIGl0IHVwZGF0ZXMgdGhlIHBlZXIncyBlbmRwb2ludHMsIGFuZCB1c2VzIFJDVSBmb3IgYWNjZXNzaW5nIHRoZSBgYmluZGAgcG9pbnRlciB1bmRlciBgcGVlci1cdTAwM2Vsb2NrYC4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IHRoZSBgcGVlci1cdTAwM2Vsb2NrYCBpcyAqcmVsZWFzZWQqIGJlZm9yZSBhY2Nlc3NpbmcgYGJpbmRgLiBUaGlzIG1lYW5zIGEgd2luZG93IGV4aXN0cyBiZXR3ZWVuIHRoZSBsb2NrIHJlbGVhc2UgYW5kIHRoZSBjaGVjayBmb3IgYCFiaW5kYC4gVGhhdCB3aW5kb3cgaXMgdGhlIHZ1bG5lcmFiaWxpdHkuXG5cblRoZSBjb21tZW50IG5haWxzIGl0OiAgYG92cG5fcGVlcl9yZW1vdmUoKWAgY2FuIHVuaGFzaCB0aGUgcGVlcidzIGhhc2ggZW50cnkgdW5kZXIgYG92cG4tXHUwMDNlbG9ja2AuICBJZiBgb3Zwbl9wZWVyX3JlbW92ZWAgaXMgY2FsbGVkIHdoaWxlIHRoaXMgZnVuY3Rpb24gaXMgcnVubmluZyAoc3BlY2lmaWNhbGx5IGJldHdlZW4gYHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBlZXItXHUwMDNlbG9jaylgIGFuZCB0aGUgY2hlY2sgZm9yIGBiaW5kYCksIHRoZW4gdGhlIHBlZXIgY291bGQgYmUgZnJlZWQsIGFuZCByZS1saW5raW5nIHRoZSBub3ctZnJlZWQgcGVlciB3b3VsZCBiZSBiYWQgbmV3cyBiZWFycy4gVGhlIG5ldyBjb2RlIGlzIGNhdGNoaW5nIHRoaXMgYnkgY2hlY2tpbmcgaWYgdGhlIHBlZXIgaGFzIGJlZW4gdW5oYXNoZWQuIFRoaXMgbmV3IGNoZWNrIChgaGxpc3RfdW5oYXNoZWRgKSBzZWVtcyBsaWtlIGEgZ3JlYXQgYWRkaXRpb24gdG8gcHJvdmlkZSBzYWZldHkgaW4gdGhpcyByYWNlLWNvbmRpdGlvbi4gV2UncmUgZWZmZWN0aXZlbHkgZW5zdXJpbmcgdGhhdCB0aGUgcGVlciBpcyBzdGlsbCB2YWxpZCBiZWZvcmUgY29udGludWluZyB0aGUgdXBkYXRlIHByb2Nlc3MuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgcmVhZCB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIG1heWJlIGludmVzdGlnYXRlIG90aGVyIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6MDU6MTcuMjQxODUwOTcyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9vdnBuL3BlZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTA6XFx0XFx0bmV0X2RiZ19yYXRlbGltaXRlZChcXFwiJXM6IHBlZXIgJWQgZmxvYXRlZCB0byAlcElTY3BcXFwiLFxcbiAyOTE6XFx0XFx0XFx0XFx0ICAgIG5ldGRldl9uYW1lKHBlZXItXFx1MDAzZW92cG4tXFx1MDAzZWRldiksIHBlZXItXFx1MDAzZWlkLCBcXHUwMDI2c3MpO1xcbiAyOTI6XFx0XFxuIDI5MzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cGVlci1cXHUwMDNlbG9jayk7XFxuIDI5NDpcXHRcXG4gMjk1OlxcdFxcdG92cG5fbmxfcGVlcl9mbG9hdF9ub3RpZnkocGVlciwgXFx1MDAyNnNzKTtcXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0LyogcmVoYXNoaW5nIGlzIHJlcXVpcmVkIG9ubHkgaW4gTVAgbW9kZSBhcyBQMlAgaGFzIG9uZSBwZWVyXFxuIDI5ODpcXHRcXHQgKiBvbmx5IGFuZCB0aHVzIHRoZXJlIGlzIG5vIGhhc2h0YWJsZVxcbiAyOTk6XFx0XFx0ICovXFxuIDMwMDpcXHRcXHRpZiAocGVlci1cXHUwMDNlb3Zwbi1cXHUwMDNlbW9kZSA9PSBPVlBOX01PREVfTVApIHtcXG4gMzAxOlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cGVlci1cXHUwMDNlb3Zwbi1cXHUwMDNlbG9jayk7XFxuIDMwMjpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnBlZXItXFx1MDAzZWxvY2spO1xcbiAzMDM6XFx0XFx0XFx0YmluZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGVlci1cXHUwMDNlYmluZCxcXG4gMzA0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnBlZXItXFx1MDAzZWxvY2spKTtcXG4gMzA1OlxcdFxcdFxcdC8qIHBlZXItXFx1MDAzZWxvY2sgd2FzIHJlbGVhc2VkIGFib3ZlLCB0aGVyZWZvcmUgdGhlIHBlZXIgbWF5IGhhdmVcXG4gMzA2OlxcdFxcdFxcdCAqIGJlZW4gcmVtb3ZlZCBpbiB0aGUgbWVhbnRpbWU6IG92cG5fcGVlcl9yZW1vdmUoKSB1bmhhc2hlc1xcbiAzMDc6XFx0XFx0XFx0ICogaGFzaF9lbnRyeV9pZCB1bmRlciBvdnBuLVxcdTAwM2Vsb2NrLiBSZS1saW5raW5nIGEgcmVtb3ZlZCBwZWVyXFxuIDMwODpcXHRcXHRcXHQgKiB3b3VsZCBsZWF2ZSBpdCByZWFjaGFibGUgYWZ0ZXIgaXQgaGFzIGJlZW4gZnJlZWQuXFxuIDMwOTpcXHRcXHRcXHQgKi9cXG4gMzEwOlxcdFxcdFxcdGlmICh1bmxpa2VseSghYmluZCB8fCBobGlzdF91bmhhc2hlZChcXHUwMDI2cGVlci1cXHUwMDNlaGFzaF9lbnRyeV9pZCkpKSB7XFxuIDMxMTpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cGVlci1cXHUwMDNlbG9jayk7XFxuIDMxMjpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cGVlci1cXHUwMDNlb3Zwbi1cXHUwMDNlbG9jayk7XFxuIDMxMzpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDMxNDpcXHRcXHRcXHR9XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdFxcdC8qIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5LCB0aGVyZWZvcmUgYW5vdGhlclxcbiAzMTc6XFx0XFx0XFx0ICogZmxvYXQgbWF5IGhhdmUgaGFwcGVuZWQgaW4gcGFyYWxsZWw6IHBlcmZvcm0gcmVoYXNoaW5nXFxuIDMxODpcXHRcXHRcXHQgKiB1c2luZyB0aGUgcGVlci1cXHUwMDNlYmluZC1cXHUwMDNlcmVtb3RlIGRpcmVjdGx5IGFzIGtleVxcbiAzMTk6XFx0XFx0XFx0ICovXFxuIDMyMDpcXHRcXG4gMzIxOlxcdFxcdFxcdHN3aXRjaCAoYmluZC1cXHUwMDNlcmVtb3RlLmluNC5zaW5fZmFtaWx5KSB7XFxuIDMyMjpcXHRcXHRcXHRjYXNlIEFGX0lORVQ6XFxuIDMyMzpcXHRcXHRcXHRcXHRzYWxlbiA9IHNpemVvZigqc2EpO1xcbiAzMjQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDMyNTpcXHRcXHRcXHRjYXNlIEFGX0lORVQ2OlxcbiAzMjY6XFx0XFx0XFx0XFx0c2FsZW4gPSBzaXplb2YoKnNhNik7XFxuIDMyNzpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzI4OlxcdFxcdFxcdH1cXG4gMzI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNToxNy4yNDIwMjYyMTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM0OTEyOTEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBPcGVuVlBOIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAgaXMgZGVmaW5pdGVseSB3b3JraW5nIGFzIGV4cGVjdGVkOyB0aGF0J3MgZ29vZC4gTXkgZm9jdXMgaXMgb24gdGhlIGBPVlBOYCBjb25maWd1cmF0aW9ucy4gUmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIHNldC4gTm93LCBsZXQncyBzZWUsIGBPVlBOYCBkZXBlbmRzIG9uIGBORVQgXHUwMDI2XHUwMDI2IElORVRgIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB0aGUgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LiBJdCBhbHNvIHNlbGVjdHMgYERTVF9DQUNIRWAsIGBORVRfVURQX1RVTk5FTGAsIGBDUllQVE9gLCBgQ1JZUFRPX0FFU2AsIGBDUllQVE9fR0NNYCwgYENSWVBUT19DSEFDSEEyMFBPTFkxMzA1YCwgYW5kIGBTVFJFQU1fUEFSU0VSYC4gR29vZCwgc28gY29uZmlybWluZyBgT1ZQTmAgaXMgdGhlIG9ubHkgY29uZmlnIEkgbmVlZCwgYXQgbGVhc3QgZm9yIG5vdy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSSB0aGluayBgb3Zwbl9jcnlwdG9fa2lsbF9rZXlgIGFuZCBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIGFyZSBnb29kIGNhbmRpZGF0ZXMgdG8gcmVhbGx5IGZvY3VzIGluIG9uLiBZdXAsIGJvdGggYXJlIGRlZmluaXRlbHkgc29saWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIga2V5IGZ1bmN0aW9ucz8gSSBzaG91bGQgYWRkIGBvdnBuX2RlY3J5cHRfcG9zdGAgYW5kIGBvdnBuX2VuY3J5cHRfcG9zdGAgdG8gdGhlIGxpc3Q7IEkgY2FuIGRlZmluaXRlbHkgc2VlIHRob3NlIGJlaW5nIGltcG9ydGFudC4gT2theSwgYW5kIGZvciB0aGUgZW50cnkgcG9pbnRzLCBgb3Zwbl91ZHBfZW5jYXBfcmVjdmAgYW5kIGBvdnBuX3RjcF9yY3ZgIGxvb2sgbGlrZSB0aGUgY29ycmVjdCBzcG90cy4gQW5kLCBvYnZpb3VzbHksIGBvdnBuX25ldF94bWl0YCBoYW5kbGVzIHRoZSBzZW5kIG9wZXJhdGlvbnMuIFJpZ2h0LCBJJ2xsIGFkZCB0aG9zZSB0byBteSBmb2N1cyBzeW1ib2xzLCBtYWtpbmcgc3VyZSBJIGxvb2sgYXQgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucy5cblxuV2FpdCBhIHNlY29uZCwgYG92cG5fdWRwX2VuY2FwX3JlY3ZgIGlzIHN0YXRpYy4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0J3MgaW5saW5lZC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNToyNC41OTExNTc4OTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTUxNzA1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnBuX3VkcF9lbmNhcF9yZWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L292cG4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vdWRwLmM9MzM9c3RhdGljIHN0cnVjdCBvdnBuX3NvY2tldCAqb3Zwbl9zb2NrZXRfZnJvbV91ZHBfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTUxLS8qKlxcbmRyaXZlcnMvbmV0L292cG4vdWRwLmM6NTI6ICogb3Zwbl91ZHBfZW5jYXBfcmVjdiAtIFN0YXJ0IHByb2Nlc3NpbmcgYSByZWNlaXZlZCBVRFAgcGFja2V0LlxcbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtNTMtICogQHNrOiBzb2NrZXQgb3ZlciB3aGljaCB0aGUgcGFja2V0IHdhcyByZWNlaXZlZFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy02Ni0gKi9cXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jOjY3OnN0YXRpYyBpbnQgb3Zwbl91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy02OC17XFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jPTM4ND1pbnQgb3Zwbl91ZHBfc29ja2V0X2F0dGFjaChzdHJ1Y3Qgb3Zwbl9zb2NrZXQgKm92cG5fc29jaywgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtMzg5LVxcdFxcdC5lbmNhcF90eXBlID0gVURQX0VOQ0FQX09WUE5JTlVEUCxcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jOjM5MDpcXHRcXHQuZW5jYXBfcmN2ID0gb3Zwbl91ZHBfZW5jYXBfcmVjdixcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTM5MS1cXHRcXHQuZW5jYXBfZGVzdHJveSA9IG92cG5fdWRwX2VuY2FwX2Rlc3Ryb3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA1OjI1LjAzNjY4MjEzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3ODM2NDU5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBQZXJmb3JtYW5jZSBCb3R0bGVuZWNrcyBpbiB0aGUgT3BlblZQTiBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgcGFzc2VkIGFzIGEgcG9pbnRlci4gVGhhdCBtZWFucyBpdCdzIGhpZ2hseSB1bmxpa2VseSB0aGF0IHRoZSBjb21waWxlciB3aWxsIGJlIGFibGUgdG8gaW5saW5lIGl0LCB3aGljaCBpcyBzb21ldGhpbmcgSSBhbHdheXMga2VlcCBhbiBleWUgb3V0IGZvciB3aGVuIHBlcmZvcm1hbmNlIHR1bmluZy4gSSB3YW50IHRvIGlkZW50aWZ5IGFyZWFzIHJpcGUgZm9yIG9wdGltaXphdGlvbi5cblxuUmlnaHQgbm93LCBteSBndXQgc2F5cyB0aGF0IEkgc2hvdWxkIHN0YXJ0IGxvb2tpbmcgYXQgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9ydGVkIG9yLCBhdCBsZWFzdCwgbm90IHN0YXRpYy4gYG92cG5fZGVjcnlwdF9wb3N0YCBhbmQgYG92cG5fZW5jcnlwdF9wb3N0YCBmaXQgdGhhdCBiaWxsLiBTbyBJJ2xsIHN0YXJ0IHRoZXJlLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGEgZmV3IG90aGVycywgc3VjaCBhcyBgb3Zwbl9wZWVyX2VuZHBvaW50c191cGRhdGVgIGFyZSBhbHNvIGluIHRoaXMgY2F0ZWdvcnksIGFzIGlzIGBvdnBuX2NyeXB0b19raWxsX2tleWAuXG5cblRoZXJlZm9yZSwgdGhlIG1haW4gZnVuY3Rpb24gc3ltYm9scyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYXJlOlxuXG4qICAgYG92cG5fY3J5cHRvX2tpbGxfa2V5YFxuKiAgIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWBcbiogICBgb3Zwbl9kZWNyeXB0X3Bvc3RgXG4qICAgYG92cG5fZW5jcnlwdF9wb3N0YFxuXG5OZXh0LCBJJ2xsIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiBJJ20gc2VlaW5nIGlzIGBPVlBOYC4gSSBzaG91bGQgZW5zdXJlIG5vIG90aGVyIG9wdGlvbnMgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIGZ1bmN0aW9ucywgc3VjaCBhcyBpZiBzdGF0ZW1lbnRzIHRoYXQgZG8gbm90IHJlbHkgb24gYE9WUE5gLiBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyB1bmRlciBgZHJpdmVycy9uZXQvb3Zwbi9LY29uZmlnYCBhbmQgYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3NzaWJsZSBidWlsZCBjb25maWd1cmF0aW9uIGNvbnNpZGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQxMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjowNTozMS44MjAzMzA2OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MzA1Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPVlBOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTkyPWNvbmZpZyBXSVJFR1VBUkRfREVCVUdcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMTAyLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTAzOmNvbmZpZyBPVlBOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMDQtXFx0dHJpc3RhdGUgXFxcIk9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjA1OjMxLjk1NDY0MTMzNloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzEzNDEyOTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE9wZW5WUE4gRHJpdmVyIFZ1bG5lcmFiaWxpdHkgRml4KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIFRoaXMgZml4IGlzIHRhcmdldGVkIGF0IHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agc2VjdGlvbiwgc28gaXQncyBjbGVhcmx5IGZvY3VzaW5nIG9uIHRoZSBPcGVuVlBOIGRyaXZlciwgYE9WUE5gLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGNhbiBxdWlja2x5IGRpc3RpbGwgdGhlIGtleSBlbGVtZW50czogdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0YWdnZWQgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGF0IGZ1enppbmcgd291bGQgYmUgYSB2YWx1YWJsZSBhcHByb2FjaCB0byB2YWxpZGF0ZSB0aGUgZml4LlxuXG5UaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMuIEkgc2VlIGBvdnBuX2NyeXB0b19raWxsX2tleWAsIGBvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZWAsIGBvdnBuX2RlY3J5cHRfcG9zdGAsIGFuZCBgb3Zwbl9lbmNyeXB0X3Bvc3RgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBPcGVuVlBOIGFyY2hpdGVjdHVyZSwgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgaW52b2x2ZWQgaW4ga2V5IG1hbmFnZW1lbnQsIGVuZHBvaW50IGhhbmRsaW5nIChjcnVjaWFsIGZvciBjb25uZWN0aW9ucyksIGFuZCBwb3N0LXByb2Nlc3Npbmcgb2YgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLiBUaGUgZml4IGlzIGVuYWJsaW5nIHRoZSBgT1ZQTmAgY29uZmlnIGl0c2VsZi5cblxuVGhlIHJlYXNvbmluZyBwcm92aWRlZCBzdGF0ZXMgdGhhdCB0aGUgcGF0Y2ggYWRkcmVzc2VzIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIHdpdGhpbiB0aGUgYG92cG5gIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBjb3JlIGxvZ2ljIHJlbGF0ZWQgdG8gY3J5cHRvIGtleXMgYW5kIHBlZXIgZW5kcG9pbnQgdXBkYXRlcy4gVGhhdCdzIGEgY2xhc3NpYyBjb21iaW5hdGlvbiBvZiB2dWxuZXJhYmlsaXRpZXMsIGFuZCB0aGUgc3BlY2lmaWMgbG9jYXRpb25zIGFyZSBjb25jZXJuaW5nLiBUaGVzZSBpc3N1ZXMgb2Z0ZW4gc3RlbSBmcm9tIHJhY2UgY29uZGl0aW9ucywgaW1wcm9wZXIgZXJyb3IgaGFuZGxpbmcsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGZsYXdzLiBHaXZlbiB0aGUgaW1wYWN0IG9uIHRoZSBkYXRhIGNoYW5uZWwsIHRoaXMgZml4IGlzIGNsZWFybHkgaGlnaC1wcmlvcml0eSBhbmQgcmVxdWlyZXMgdGhvcm91Z2ggc2NydXRpbnkuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgcGF0Y2ggaXRzZWxmIHRvIHNlZSBob3cgdGhlc2UgdnVsbmVyYWJpbGl0aWVzIHdlcmUgbWFuaWZlc3RlZCBhbmQgaG93IHRoZSBmaXggYWRkcmVzc2VzIHRoZW0sIGJ1dCB0aGlzIGluaXRpYWwgYW5hbHlzaXMgaXMgcHJvbWlzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA0MCwiT3V0cHV0VG9rZW5zIjoxMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6MDU6MzguMjY4MDU2ODhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTYyOTQ5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1ZQTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92cG5fY3J5cHRvX2tpbGxfa2V5XCIsXG4gICAgXCJvdnBuX3BlZXJfZW5kcG9pbnRzX3VwZGF0ZVwiLFxuICAgIFwib3Zwbl9kZWNyeXB0X3Bvc3RcIixcbiAgICBcIm92cG5fZW5jcnlwdF9wb3N0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgaW4gdGhlIE9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWQgZHJpdmVyIChvdnBuKS4gVGhlIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyBoYW5kbGluZyBjcnlwdG9ncmFwaGljIGtleXMgYW5kIHBlZXIgZW5kcG9pbnQgdXBkYXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPVlBOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3Zwbl9jcnlwdG9fa2lsbF9rZXlcIixcbiAgICBcIm92cG5fcGVlcl9lbmRwb2ludHNfdXBkYXRlXCIsXG4gICAgXCJvdnBuX2RlY3J5cHRfcG9zdFwiLFxuICAgIFwib3Zwbl9lbmNyeXB0X3Bvc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBpbiB0aGUgT3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZCBkcml2ZXIgKG92cG4pLiBUaGUgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIGhhbmRsaW5nIGNyeXB0b2dyYXBoaWMga2V5cyBhbmQgcGVlciBlbmRwb2ludCB1cGRhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowqwhfr[1] Phase: Succeeded StartedAt: 2026-08-05 16:05:50 +0000 UTC FinishedAt: 2026-08-05 16:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 16:05:50 +0000 UTC FinishedAt: 2026-08-05 16:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2] Phase: Succeeded StartedAt: 2026-08-05 16:05:50 +0000 UTC FinishedAt: 2026-08-05 17:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 16:05:50 +0000 UTC FinishedAt: 2026-08-05 17:43:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 16:05:50 +0000 UTC FinishedAt: 2026-08-05 16:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 16:05:50 +0000 UTC FinishedAt: 2026-08-05 16:05:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflowqwhfr/series-workflowqwhfr-convert-artifact-258808544/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 16:06:00 +0000 UTC FinishedAt: 2026-08-05 16:23:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 16:06:00 +0000 UTC FinishedAt: 2026-08-05 16:23:21 +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:*08a786b5-22a1-45ac-aea6-ffaee5298b34,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-workflowqwhfr/series-workflowqwhfr-convert-artifact-258808544/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": "889ba264-d7c9-40f6-a49b-68d7d8b09a90", "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-workflowqwhfr/series-workflowqwhfr-build-action-324372902/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 16:06:00 +0000 UTC FinishedAt: 2026-08-05 16:23:11 +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:*08a786b5-22a1-45ac-aea6-ffaee5298b34,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-workflowqwhfr/series-workflowqwhfr-convert-artifact-258808544/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": "889ba264-d7c9-40f6-a49b-68d7d8b09a90", "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-workflowqwhfr/series-workflowqwhfr-build-action-324372902/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 16:23:21 +0000 UTC FinishedAt: 2026-08-05 16:23:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 16:23:21 +0000 UTC FinishedAt: 2026-08-05 16:23:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 16:23:21 +0000 UTC FinishedAt: 2026-08-05 16:23:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 16:23:21 +0000 UTC FinishedAt: 2026-08-05 16:23:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflowqwhfr/series-workflowqwhfr-convert-artifact-683852807/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 16:23:31 +0000 UTC FinishedAt: 2026-08-05 16:25:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 16:23:31 +0000 UTC FinishedAt: 2026-08-05 16:25:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*889ba264-d7c9-40f6-a49b-68d7d8b09a90,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-workflowqwhfr/series-workflowqwhfr-build-action-324372902/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-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 16:25:19 +0000 UTC FinishedAt: 2026-08-05 16:25:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 16:25:19 +0000 UTC FinishedAt: 2026-08-05 16:25:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 16:25:19 +0000 UTC FinishedAt: 2026-08-05 16:45:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 16:25:19 +0000 UTC FinishedAt: 2026-08-05 16:45:38 +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:*08a786b5-22a1-45ac-aea6-ffaee5298b34,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-workflowqwhfr/series-workflowqwhfr-convert-artifact-683852807/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": "ee6d16a0-ee65-4f84-89aa-154653c6defa", "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-workflowqwhfr/series-workflowqwhfr-build-action-3076306315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 16:25:19 +0000 UTC FinishedAt: 2026-08-05 16:45:27 +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:*08a786b5-22a1-45ac-aea6-ffaee5298b34,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-workflowqwhfr/series-workflowqwhfr-convert-artifact-683852807/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": "ee6d16a0-ee65-4f84-89aa-154653c6defa", "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-workflowqwhfr/series-workflowqwhfr-build-action-3076306315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 16:45:38 +0000 UTC FinishedAt: 2026-08-05 16:45:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 16:45:38 +0000 UTC FinishedAt: 2026-08-05 16:45:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 16:45:38 +0000 UTC FinishedAt: 2026-08-05 16:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 16:45:39 +0000 UTC FinishedAt: 2026-08-05 16:47:33 +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:*ee6d16a0-ee65-4f84-89aa-154653c6defa,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-workflowqwhfr/series-workflowqwhfr-build-action-3076306315/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-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 16:47:43 +0000 UTC FinishedAt: 2026-08-05 17:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 16:47:43 +0000 UTC FinishedAt: 2026-08-05 17:43:16 +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":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"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:*889ba264-d7c9-40f6-a49b-68d7d8b09a90,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ee6d16a0-ee65-4f84-89aa-154653c6defa,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-workflowqwhfr/series-workflowqwhfr-build-action-324372902/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-workflowqwhfr/series-workflowqwhfr-build-action-3076306315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 16:47:43 +0000 UTC FinishedAt: 2026-08-05 16:47:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 16:47:43 +0000 UTC FinishedAt: 2026-08-05 16:47:48 +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":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"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-workflowqwhfr/series-workflowqwhfr-convert-artifact-3225350624/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 16:47:43 +0000 UTC FinishedAt: 2026-08-05 16:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 16:47:43 +0000 UTC FinishedAt: 2026-08-05 16:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 16:47:43 +0000 UTC FinishedAt: 2026-08-05 16:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 16:47:54 +0000 UTC FinishedAt: 2026-08-05 17:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwhfr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovpn_crypto_kill_key","ovpn_peer_endpoints_update","ovpn_decrypt_post","ovpn_encrypt_post"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["OVPN"],"series_id":"3dae8b26-6e0d-4d90-91db-8b34ccf5ea49","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 16:47:54 +0000 UTC FinishedAt: 2026-08-05 17:43:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*889ba264-d7c9-40f6-a49b-68d7d8b09a90,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ee6d16a0-ee65-4f84-89aa-154653c6defa,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-workflowqwhfr/series-workflowqwhfr-build-action-324372902/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-workflowqwhfr/series-workflowqwhfr-build-action-3076306315/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-workflowqwhfr/series-workflowqwhfr-convert-artifact-3225350624/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,}