Name: series-workflowg5xg2 Phase: Succeeded StartedAt: 2026-08-07 11:51:06 +0000 UTC FinishedAt: 2026-08-07 15:35:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[0] Phase: Succeeded StartedAt: 2026-08-07 11:51:06 +0000 UTC FinishedAt: 2026-08-07 11:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 11:51:06 +0000 UTC FinishedAt: 2026-08-07 11:54:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS" ], "series_id": "14df7662-ab9e-43df-88bb-057f50fcdaf3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "compound_send_recv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb21wb3VuZF9zZW5kX3JlY3YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgY29tcG91bmRfc2VuZF9yZWN2KClgIHRvIGRlbGV0ZSBgbWlkYCBlbnRyaWVzIGFuZCBtYXJrIHRoZW0gYXMgY2FuY2VsbGVkIGJlZm9yZSByZWxlYXNpbmcgdGhlIHNlcnZlciBsb2NrIChgY2lmc19zZXJ2ZXJfdW5sb2NrKHNlcnZlcilgKSB3aGVuIGBzbWJfc2VuZF9ycXN0KClgIGZhaWxzIChgcmMgXHUwMDNjIDBgKSBvciB3aGVuIG5vIHNlcnZlciByZXNwb25zZSBpcyBleHBlY3RlZC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVhayByZWxhdGVkIHRvIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBtaWRfcV9lbnRyeWAgc3RydWN0dXJlcy5cblxuVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UpLiBCdWdzIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmFjZSBjb25kaXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29tcG91bmRfc2VuZF9yZWN2YCB3aGVyZSBtaWQgYXJyYXlzIGFyZSBub3QgZGVsZXRlZCB3aGVuIGByYyBcdTAwM2MgMGAgb3IgYGZsYWdzIFx1MDAyNiBDSUZTX05PX1NSVl9SU1BgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNNQiBjbGllbnQmIzM5O3MgdHJhbnNwb3J0IGxheWVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFNNQiBjbGllbnQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY4NDk1Yjg2MjUwMjE0NjQyMzRjN2E1NTA1ZWRlNGVkNzA4NjdmNDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDExOjUyOjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMgYi9mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jXG5pbmRleCBmZGY0ZTUwYzI3Y2ViLi44ZDE0MjI1ZTk0OGIxIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1xuQEAgLTk2OCw2ICYjNDM7OTY4LDEzIEBAIGNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcbiBcdFx0c2VydmVyLVx1MDAzZXNlcXVlbmNlX251bWJlciAtPSAyO1xuIFx0fVxuIFxuJiM0MztcdGlmIChyYyBcdTAwM2MgMCB8fCAoZmxhZ3MgXHUwMDI2IENJRlNfTk9fU1JWX1JTUCkpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9ycXN0OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRkZWxldGVfbWlkKHNlcnZlciwgbWlkW2ldKTtcbiYjNDM7XHRcdFx0Y2FuY2VsbGVkX21pZFtpXSA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpO1xuIFxuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0lGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbXBvdW5kX3NlbmRfcmVjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29tcG91bmRfc2VuZF9yZWN2YCB3aGVyZSBtaWQgYXJyYXlzIGFyZSBub3QgZGVsZXRlZCB3aGVuIGByYyBcdTAwM2MgMGAgb3IgYGZsYWdzIFx1MDAyNiBDSUZTX05PX1NSVl9SU1BgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNNQiBjbGllbnQmIzM5O3MgdHJhbnNwb3J0IGxheWVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFNNQiBjbGllbnQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4NDk1Yjg2MjUwMjE0NjQyMzRjN2E1NTA1ZWRlNGVkNzA4NjdmNDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDExOjUyOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYyBiL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMKaW5kZXggZmRmNGU1MGMyN2NlYi4uOGQxNDIyNWU5NDhiMSAxMDA2NDQKLS0tIGEvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jCkBAIC05NjgsNiAmIzQzOzk2OCwxMyBAQCBjb21wb3VuZF9zZW5kX3JlY3YoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsCiAJCXNlcnZlci0mZ3Q7c2VxdWVuY2VfbnVtYmVyIC09IDI7CiAJfQogCiYjNDM7CWlmIChyYyAmbHQ7IDAgfHwgKGZsYWdzICZhbXA7IENJRlNfTk9fU1JWX1JTUCkpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fcnFzdDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlkZWxldGVfbWlkKHNlcnZlciwgbWlkW2ldKTsKJiM0MzsJCQljYW5jZWxsZWRfbWlkW2ldID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpOwogCiAJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU01CIENsaWVudCBUcmFuc3BvcnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNoYW5nZXMgd2l0aGluIGBjb21wb3VuZF9zZW5kX3JlY3ZgLCBzcGVjaWZpY2FsbHkgdGhpcyBuZXcgbG9vcC4gSXQgc2VlbXMgdGhlIHB1cnBvc2UgaXMgdG8gY2xlYXIgb3V0IG1pZCBhcnJheXMgdW5kZXIgY2VydGFpbiBlcnJvciBjb25kaXRpb25zIG9yIGZsYWdzLCBsaWtlbHkgdG8gbWFuYWdlIG1lbW9yeSBlZmZlY3RpdmVseSBvciBoYW5kbGUgZmFpbGVkIHNlcnZlciByZXNwb25zZXMuIFRoaXMgaXMgaW1wb3J0YW50OiBJZiBgcmNgIGlzIG5lZ2F0aXZlIG9yIGlmIHRoZSBgQ0lGU19OT19TUlZfUlNQYCBmbGFnIGlzIHNldCwgdGhpcyBsb29wIHRyaWdnZXJzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYWN0aW9uLiBJcyB0aGlzIGEgbmV3IGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5PyBJcyBpdCBhaW1lZCBhdCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcz8gUGVyaGFwcyBpdCYjMzk7cyBhIGNyaXRpY2FsIGFkanVzdG1lbnQgdG8gaG93IHdlIG1hbmFnZSBvdXRzdGFuZGluZyByZXF1ZXN0cyBpbiB0aGUgZmFjZSBvZiBuZXR3b3JrIGlzc3Vlcy4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGRldGFpbHMgb2YgYGNvbXBvdW5kX3NlbmRfcmVjdmAgaXRzZWxmIHdpdGhpbiBgZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byBpZGVudGlmeSB3aGF0IHRoZSBtaWQgYXJyYXlzIGFyZSwgaG93IHRoZXkgYXJlIHVzZWQsIGFuZCB3aHkgdGhlaXIgY2xlYW51cCBpcyBjb25kaXRpb25hbCBvbiB0aGVzZSBzcGVjaWZpYyBmbGFncyBvciByZXR1cm4gY29kZXMuIFRoaXMgaXMgYWxsIGFib3V0IGVuc3VyaW5nIHJvYnVzdCBhbmQgcmVsaWFibGUgU01CIGNsaWVudCBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29tcG91bmRfc2VuZF9yZWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jPTg2Mj1pbnRcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6ODYzOmNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtODY0LVx0XHQgICBzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsXG4tLVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz0xMTA4PWNpZnNfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxuLS1cbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtMTExMi17XG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjExMTM6XHRyZXR1cm4gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsIGZsYWdzLCAxLFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMTE0LVx0XHRcdFx0ICBycXN0LCByZXNwX2J1Zl90eXBlLCByZXNwX2lvdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNNQiBDbGllbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGNvbXBvdW5kX3NlbmRfcmVjdmAgd2l0aGluIGBmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jYC4gUmlnaHQsIHRoYXQmIzM5O3MgaW4gdGhlIFNNQiBjbGllbnQgY29kZSwgd2hpY2ggaXMgQ0lGUy4gSXQmIzM5O3MgYWx3YXlzIGltcG9ydGFudCB0byBrbm93ICp3aGVyZSogdGhlIGZpeCBpcyBoYXBwZW5pbmcuIEFuZCBTTUIgY2xpZW50cz8gVGhleSYjMzk7cmUgb2Z0ZW4gbHVya2luZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIHRoaW5rIFZNcywgY29udGFpbmVycywgYW5kIHN1Y2guIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhlIFNNQiBjbGllbnQgb24gdGhpcyBzeXN0ZW0uIEl0IHdpbGwgcHJvdmlkZSBjb250ZXh0IGlmIHRoZXJlIGlzIGFueSBjdXN0b20gY29uZmlndXJhdGlvbiB0aGF0IG1heSBiZSByZWxldmFudCB0byB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENJRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9zbWIvY2xpZW50L0tjb25maWc6Mjpjb25maWcgQ0lGU1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUIzIGFuZCBDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSlcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTMtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6NTQ6Y29uZmlnIENJRlNfU1RBVFMyXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTUtXHRib29sIFwmIzM0O0V4dGVuZGVkIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjctXG5mcy9zbWIvY2xpZW50L0tjb25maWc6Njg6Y29uZmlnIENJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjktXHRib29sIFwmIzM0O1N1cHBvcnQgbGVnYWN5IHNlcnZlcnMgd2hpY2ggdXNlIGxlc3Mgc2VjdXJlIGRpYWxlY3RzXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTgyLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjgzOmNvbmZpZyBDSUZTX1VQQ0FMTFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05MS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo5Mjpjb25maWcgQ0lGU19YQVRUUlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA2LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEwNzpjb25maWcgQ0lGU19QT1NJWFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7Q0lGUyBQT1NJWCBFeHRlbnNpb25zXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTExOC1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMTk6Y29uZmlnIENJRlNfREVCVUdcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjAtXHRib29sIFwmIzM0O0VuYWJsZSBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjctXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTI4OmNvbmZpZyBDSUZTX0RFQlVHMlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGFkZGl0aW9uYWwgQ0lGUyBkZWJ1Z2dpbmcgcm91dGluZXNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTM4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEzOTpjb25maWcgQ0lGU19ERUJVR19EVU1QX0tFWVNcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDAtXHRib29sIFwmIzM0O0R1bXAgZW5jcnlwdGlvbiBrZXlzIGZvciBvZmZsaW5lIGRlY3J5cHRpb24gKFVuc2FmZSlcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTQ4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE0OTpjb25maWcgQ0lGU19ERlNfVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTUwLVx0Ym9vbCBcJiMzNDtERlMgZmVhdHVyZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2MS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNjI6Y29uZmlnIENJRlNfU1dOX1VQQ0FMTFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2My1cdGJvb2wgXCYjMzQ7U1dOIGZlYXR1cmUgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzItXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTczOmNvbmZpZyBDSUZTX05GU0RfRVhQT1JUXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtBbGxvdyBuZnNkIHRvIGV4cG9ydCBDSUZTIGZpbGUgc3lzdGVtXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnPTE3OT1pZiBDSUZTXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgwLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE4MTpjb25maWcgQ0lGU19TTUJfRElSRUNUXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgyLVx0Ym9vbCBcJiMzNDtTTUIgRGlyZWN0IHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkwLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE5MTpjb25maWcgQ0lGU19GU0NBQ0hFXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkyLVx0Ym9vbCBcJiMzNDtQcm92aWRlIENJRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTk5OmNvbmZpZyBDSUZTX1JPT1RcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMDAtXHRib29sIFwmIzM0O1NNQiByb290IGZpbGUgc3lzdGVtIChFeHBlcmltZW50YWwpXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwNi1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyMDc6Y29uZmlnIENJRlNfQ09NUFJFU1NJT05cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O1NNQiBtZXNzYWdlIGNvbXByZXNzaW9uIChFeHBlcmltZW50YWwpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipDSUZTIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIEFuYWx5c2lzKioKClJpZ2h0LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBpcyBDSUZTLiBHb3QgaXQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgY29tcG91bmRfc2VuZF9yZWN2YCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiB0aGUgYGZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNgIGZpbGUuIFRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgU01CIGNsaWVudCYjMzk7cyB0cmFuc3BvcnQgbGF5ZXIuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLCB0aGUgb25lIEkgbmVlZCB0byBhbnN3ZXIgZmlyc3QsIGlzIHdoZXRoZXIgYGNvbXBvdW5kX3NlbmRfcmVjdmAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2Agb3IgaXMgZXhwb3J0ZWQuIEtub3dpbmcgdGhhdCBpbW1lZGlhdGVseSBkZXRlcm1pbmVzIGhvdyB3aWRlbHkgYWNjZXNzaWJsZSwgYW5kIHRodXMsIGhvdyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIG9yIGNyaXRpY2FsIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBtaWdodCBiZSBpbiB0aGUgbGFyZ2VyIFNNQiBjbGllbnQgaW5mcmFzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgSSBuZWVkIGJlZm9yZSBJIGNhbiBhc3Nlc3MgaXRzIHJvbGUgb3IgcG90ZW50aWFsIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wb3VuZF9zZW5kX3JlY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L2NhY2hlZF9kaXIuYz0xMzQ9aW50IG9wZW5fY2FjaGVkX2Rpcih1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxuLS1cbmZzL3NtYi9jbGllbnQvY2FjaGVkX2Rpci5jLTMyMi1cbmZzL3NtYi9jbGllbnQvY2FjaGVkX2Rpci5jOjMyMzpcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXG5mcy9zbWIvY2xpZW50L2NhY2hlZF9kaXIuYy0zMjQtXHRcdFx0XHRmbGFncywgMiwgcnFzdCxcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNwcm90by5oPTEwMT1pbnQgY2lmc19zZW5kX3JlY3YoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsXG4tLVxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaC0xMDMtXHRcdCAgIGludCAqcmVzcF9idWZfdHlwZSwgY29uc3QgaW50IGZsYWdzLCBzdHJ1Y3Qga3ZlYyAqcmVzcF9pb3YpO1xuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaDoxMDQ6aW50IGNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmgtMTA1LVx0XHQgICAgICAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBjb25zdCBpbnQgZmxhZ3MsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyaW5vZGUuYz0yMDA9c3RhdGljIGludCBzbWIyX2NvbXBvdW5kX29wKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyaW5vZGUuYy01MzctXG5mcy9zbWIvY2xpZW50L3NtYjJpbm9kZS5jOjUzODpcdFx0cmMgPSBjb21wb3VuZF9zZW5kX3JlY3YoeGlkLCBzZXMsIHNlcnZlcixcbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmMtNTM5LVx0XHRcdFx0XHRmbGFncywgbnVtX3Jxc3QgLSAyLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmMtNTUwLVxuZnMvc21iL2NsaWVudC9zbWIyaW5vZGUuYzo1NTE6XHRcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXG5mcy9zbWIvY2xpZW50L3NtYjJpbm9kZS5jLTU1Mi1cdFx0XHRcdFx0ZmxhZ3MsIG51bV9ycXN0LFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmM9MTA5Mj1zbWIyX3VubGluayhjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmMtMTE2Ny1cbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmM6MTE2ODpcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgdGNvbi1cdTAwM2VzZXMsIHNlcnZlciwgZmxhZ3MsXG5mcy9zbWIvY2xpZW50L3NtYjJpbm9kZS5jLTExNjktXHRcdFx0XHRBUlJBWV9TSVpFKHJxc3QpLCBycXN0LFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTExODE9c21iMl9zZXRfZWEoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xMzQyLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MTM0MzpcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xMzQ0LVx0XHRcdFx0ZmxhZ3MsIDMsIHJxc3QsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MTU3Nz1zbWIyX2lvY3RsX3F1ZXJ5X2luZm8oY29uc3QgdW5zaWduZWQgaW50IHhpZCxcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xNzYxLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MTc2MjpcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xNzYzLVx0XHRcdFx0ZmxhZ3MsIDMsIHJxc3QsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MjQ4ND1zbWIyX3F1ZXJ5X2Rpcl9maXJzdChjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTI1NjUtXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoyNTY2Olx0cmMgPSBjb21wb3VuZF9zZW5kX3JlY3YoeGlkLCB0Y29uLVx1MDAzZXNlcywgc2VydmVyLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjU2Ny1cdFx0XHRcdGZsYWdzLCAyLCBycXN0LFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTI4NjA9c21iMl9xdWVyeV9pbmZvX2NvbXBvdW5kKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjk3OS1cdGlmIChjZmlkKSB7XG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoyOTgwOlx0XHRyYyA9IGNvbXBvdW5kX3NlbmRfcmVjdih4aWQsIHNlcywgc2VydmVyLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjk4MS1cdFx0XHRcdFx0ZmxhZ3MsIDEsIFx1MDAyNnJxc3RbMV0sXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjk4My1cdH0gZWxzZSB7XG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoyOTg0Olx0XHRyYyA9IGNvbXBvdW5kX3NlbmRfcmVjdih4aWQsIHNlcywgc2VydmVyLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjk4NS1cdFx0XHRcdFx0ZmxhZ3MsIDMsIHJxc3QsXG4tLVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz04NjI9aW50XG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjg2Mzpjb21wb3VuZF9zZW5kX3JlY3YoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTg2NC1cdFx0ICAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLFxuLS1cbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9MTEwOD1jaWZzX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcbi0tXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMTIte1xuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzoxMTEzOlx0cmV0dXJuIGNvbXBvdW5kX3NlbmRfcmVjdih4aWQsIHNlcywgc2VydmVyLCBmbGFncywgMSxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtMTExNC1cdFx0XHRcdCAgcnFzdCwgcmVzcF9idWZfdHlwZSwgcmVzcF9pb3YpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGNvbXBvdW5kX3NlbmRfcmVjdmAgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gYGNvbXBvdW5kX3NlbmRfcmVjdmAgaXMgY3JpdGljYWwuIEl0JiMzOTtzICpleHBvcnRlZCogaW4gYGNpZnNwcm90by5oYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBjb3JlIGNvbXBvbmVudCwgdXNlZCB0aHJvdWdob3V0IHRoZSBDSUZTIGNsaWVudCBjb2RlLiBUaGF0IGFscmVhZHkgcmFpc2VzIGEgZmxhZyDigJMgd2lkZXNwcmVhZCB1c2UgbWVhbnMgd2lkZXNwcmVhZCBwb3RlbnRpYWwgaW1wYWN0IGlmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbS4KClRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIGEgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgd2l0aGluIGBjb21wb3VuZF9zZW5kX3JlY3ZgLiBTcGVjaWZpY2FsbHksIGl0IGRlYWxzIHdpdGggYSBzY2VuYXJpbyB3aGVyZSBgbWlkYCBhcnJheXMgYXJlbiYjMzk7dCBiZWluZyBjbGVhbmVkIHVwIHByb3Blcmx5IHdoZW4gYW4gZXJyb3Igb2NjdXJzIChgcmMgJmx0OyAwYCkgb3IgdW5kZXIgY2VydGFpbiBmbGFnIGNvbmRpdGlvbnMgKGBmbGFncyAmYW1wOyBDSUZTX05PX1NSVl9SU1BgKS4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgdG8gdGhlIFNNQiBjbGllbnQsIHdoaWNoIGlzIGEgYmlnIGRlYWwuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHR5cGljYWwgU01CIGNsaWVudCBvcGVyYXRpb25zLCBsaWtlIG1vdW50aW5nIGFuZCBpbnRlcmFjdGluZyB3aXRoIGEgQ0lGUyBzaGFyZSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGJlIHZlcnkgY29uY2VybmVkIGFib3V0LgoKU28sIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGxvb2tzIGxpa2UgYSBwcmltZSB0YXJnZXQuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byB0ZXN0IHRoZXNlIGNvZGUgcGF0aHMgdGhvcm91Z2hseS4gVGhlIGlkZW50aWZpZWQgZm9jdXMgc3ltYm9sIGhlcmUsIGBjb21wb3VuZF9zZW5kX3JlY3ZgLCBhbmQgdGhlIHJlbGF0ZWQgYGNpZnNfc2VuZF9yZWN2YCBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSBvdXIgZm9jdXMsIGJ1dCB3ZSBuZWVkIHRvIHZlcmlmeSB0aGVyZSBhcmUgbm90IG90aGVyIGNvbmZpZ3MgdGhhdCB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKV2UmIzM5O3JlIGFscmVhZHkgZW5hYmxpbmcgdGhlIGBDSUZTYCBjb25maWcsIHdoaWNoIGlzIGNvcnJlY3QuIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9yIGBjb21wb3VuZF9zZW5kX3JlY3ZgIGFuZCBsb29rIGZvciBhbnkgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkLCBvciB0aGF0IGNhbGwgaXQsIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb21wbGV0ZSBwaWN0dXJlIGJlZm9yZSB3ZSBkaXZlIGludG8gZnV6emluZy4gSXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXBvdW5kX3NlbmRfcmVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz04NjI9aW50XG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjg2Mzpjb21wb3VuZF9zZW5kX3JlY3YoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTg2NC1cdFx0ICAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLFxuLS1cbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9MTEwOD1jaWZzX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcbi0tXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMTIte1xuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzoxMTEzOlx0cmV0dXJuIGNvbXBvdW5kX3NlbmRfcmVjdih4aWQsIHNlcywgc2VydmVyLCBmbGFncywgMSxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtMTExNC1cdFx0XHRcdCAgcnFzdCwgcmVzcF9idWZfdHlwZSwgcmVzcF9pb3YpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDE0CgkJCQkJCQlvdXRwdXQ6IDEwOAoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDaGFuZ2UqKgoKT2theSwgc28gdGhlIHNwb3RsaWdodCBpcyBvbiBgY29tcG91bmRfc2VuZF9yZWN2YC4gVGhlIGZ1enppbmcgdmVyZGljdCBpcyBhIGRlZmluaXRlICYjMzQ7eWVzJiMzNDsg4oCTIFdvcnRoRnV6emluZz10cnVlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgY29tcG91bmRfc2VuZF9yZWN2YCwgYW5kIHRoZSBgQ0lGU2AgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlIHJlYXNvbmluZyBib2lscyBkb3duIHRvIGEgZml4IHdpdGhpbiBgY29tcG91bmRfc2VuZF9yZWN2YCB3aGVyZSBpdCB3YXNuJiMzOTt0IGhhbmRsaW5nIG1pZC1hcnJheXMgcHJvcGVybHkgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yIChgcmMgJmx0OyAwYCkgb3Igd2hlbiBgQ0lGU19OT19TUlZfUlNQYCBpcyBzZXQuIEVzc2VudGlhbGx5LCBhIGNsZWFudXAgaXNzdWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWVwIGluIHRoZSBTTUIgY2xpZW50JiMzOTtzIHRyYW5zcG9ydCBsYXllci4gVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoYXQgdGhpcyBsYXllciBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIFNNQiBjbGllbnQgb3BlcmF0aW9ucywgbWVhbmluZyBpdCYjMzk7cyByZWFjaGFibGUgYnkgYSBsb3Qgb2YgZGlmZmVyZW50IGNsaWVudHMuIEdpdmVuIHRoZSBjcml0aWNhbCBwb3NpdGlvbiBvZiB0aGUgdHJhbnNwb3J0IGxheWVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgcGF0Y2ggbWlnaHQgaW50cm9kdWNlIGFueSBvdGhlciBzdWJ0bGUgaXNzdWVzIG9yIGV4cG9zZXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSB3aWxsIGZvY3VzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIGFjcm9zcyB0aGUgU01CIGNsaWVudCYjMzk7cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGVycm9yIGhhbmRsaW5nIGFuZCByZXNwb25zZSBsb2dpYyB0byBiZSBzdXJlIHRoaXMgJiMzNDtmaXgmIzM0OyBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGF0dGFjayB2ZWN0b3JzLiBUaGlzIHdhcnJhbnRzIGEgdmVyeSBjbG9zZSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0lGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbXBvdW5kX3NlbmRfcmVjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29tcG91bmRfc2VuZF9yZWN2YCB3aGVyZSBtaWQgYXJyYXlzIGFyZSBub3QgZGVsZXRlZCB3aGVuIGByYyBcdTAwM2MgMGAgb3IgYGZsYWdzIFx1MDAyNiBDSUZTX05PX1NSVl9SU1BgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNNQiBjbGllbnQmIzM5O3MgdHJhbnNwb3J0IGxheWVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFNNQiBjbGllbnQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0lGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbXBvdW5kX3NlbmRfcmVjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29tcG91bmRfc2VuZF9yZWN2YCB3aGVyZSBtaWQgYXJyYXlzIGFyZSBub3QgZGVsZXRlZCB3aGVuIGByYyBcdTAwM2MgMGAgb3IgYGZsYWdzIFx1MDAyNiBDSUZTX05PX1NSVl9SU1BgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNNQiBjbGllbnQmIzM5O3MgdHJhbnNwb3J0IGxheWVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFNNQiBjbGllbnQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgY29tcG91bmRfc2VuZF9yZWN2KClgIHRvIGRlbGV0ZSBgbWlkYCBlbnRyaWVzIGFuZCBtYXJrIHRoZW0gYXMgY2FuY2VsbGVkIGJlZm9yZSByZWxlYXNpbmcgdGhlIHNlcnZlciBsb2NrIChgY2lmc19zZXJ2ZXJfdW5sb2NrKHNlcnZlcilgKSB3aGVuIGBzbWJfc2VuZF9ycXN0KClgIGZhaWxzIChgcmMgXHUwMDNjIDBgKSBvciB3aGVuIG5vIHNlcnZlciByZXNwb25zZSBpcyBleHBlY3RlZC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVhayByZWxhdGVkIHRvIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBtaWRfcV9lbnRyeWAgc3RydWN0dXJlcy5cblxuVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UpLiBCdWdzIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmFjZSBjb25kaXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmODQ5NWI4NjI1MDIxNDY0MjM0YzdhNTUwNWVkZTRlZDcwODY3ZjQ1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxMTo1Mjo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMgYi9mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jCmluZGV4IGZkZjRlNTBjMjdjZWIuLjhkMTQyMjVlOTQ4YjEgMTAwNjQ0Ci0tLSBhL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYwpAQCAtOTY4LDYgJiM0Mzs5NjgsMTMgQEAgY29tcG91bmRfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLAogCQlzZXJ2ZXItJmd0O3NlcXVlbmNlX251bWJlciAtPSAyOwogCX0KIAomIzQzOwlpZiAocmMgJmx0OyAwIHx8IChmbGFncyAmYW1wOyBDSUZTX05PX1NSVl9SU1ApKSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3Jxc3Q7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJZGVsZXRlX21pZChzZXJ2ZXIsIG1pZFtpXSk7CiYjNDM7CQkJY2FuY2VsbGVkX21pZFtpXSA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAljaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKTsKIAogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBTTUIgQ2xpZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHdpdGhpbiBgZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY2AsIHNwZWNpZmljYWxseS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIGBjb21wb3VuZF9zZW5kX3JlY3YoKWAgZnVuY3Rpb24uIFdoYXQgaXQmIzM5O3MgZG9pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgaW5jbHVkZXMgdGhpcyBjb25kaXRpb25hbCBibG9jayBvZiBjb2RlLiBFc3NlbnRpYWxseSwgaWYgYHJjYCBpcyBsZXNzIHRoYW4gemVybywgbWVhbmluZyB0aGVyZSYjMzk7cyBiZWVuIHNvbWUga2luZCBvZiBlcnJvciwgb3IgaWYgdGhlIGBDSUZTX05PX1NSVl9SU1BgIGZsYWcgaXMgc2V0LCB3aGljaCBwcm9iYWJseSBtZWFucyB3ZSBkaWRuJiMzOTt0IGdldCBhIHNlcnZlciByZXNwb25zZSwgdGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCBhbiBhcnJheSBvZiBgbWlkYCB2YWx1ZXMuCgpGb3IgZWFjaCBgbWlkYCwgaXQgY2FsbHMgYGRlbGV0ZV9taWQoKWAsIHByZXN1bWFibHkgdG8gY2xlYW4gdXAgYW55IHBhcnRpYWxseSBjb21wbGV0ZWQgcmVxdWVzdHMuICpUaGVuKiwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBpdCBzZXRzIGBjYW5jZWxsZWRfbWlkW2ldYCB0byBgdHJ1ZWAuIFRoaXMgbGlrZWx5IGZsYWdzIHRoYXQgcGFydGljdWxhciBNSUQgYXMgY2FuY2VsbGVkLCB3aGljaCBpcyBsaWtlbHkgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMgbGF0ZXIgb24gZG93biB0aGUgbGluZS4gSXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgZXJyb3ItaGFuZGxpbmcgYW5kIGNsZWFudXAgYXBwcm9hY2gsIGJ1dCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byBob3cgdGhpcyBpbXBhY3RzIHRoZSBvdmVyYWxsIGZsb3cgb2YgdGhlIGNvbXBvdW5kIG1lc3NhZ2UgaGFuZGxpbmcsIHNvIGxldCBtZSBnbyBoYXZlIGEgbG9vayBhdCB0aGUgYGNvbXBvdW5kX3NlbmRfcmVjdmAgZnVuY3Rpb24gaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wb3VuZF9zZW5kX3JlY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9ODYyPWludFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzo4NjM6Y29tcG91bmRfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy04NjQtXHRcdCAgIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcixcbi0tXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jPTExMDg9Y2lmc19zZW5kX3JlY3YoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsXG4tLVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMTEyLXtcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6MTExMzpcdHJldHVybiBjb21wb3VuZF9zZW5kX3JlY3YoeGlkLCBzZXMsIHNlcnZlciwgZmxhZ3MsIDEsXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMTQtXHRcdFx0XHQgIHJxc3QsIHJlc3BfYnVmX3R5cGUsIHJlc3BfaW92KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBTTUIgQ2xpZW50IFRyYW5zcG9ydCBMYXllcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgY29tcG91bmRfc2VuZF9yZWN2YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgaXQgd2l0aGluIGBmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBTTUIgY2xpZW50IHRyYW5zcG9ydCBsb2dpYyByZXNpZGVzLCBzbyBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGRhdGEgaXMgYWN0dWFsbHkgc2VudCBhbmQgcmVjZWl2ZWQgb3ZlciB0aGUgbmV0d29yay4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgaG93IHJlcXVlc3RzIGFyZSBjb25zdHJ1Y3RlZCwgcGFja2V0aXplZCwgYW5kIHNlbnQsIGFuZCBob3cgcmVzcG9uc2VzIGFyZSBwYXJzZWQgYW5kIGhhbmRsZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBkZWFscyB3aXRoIGNvbXBvdW5kIHJlcXVlc3RzLCBzaW5jZSB0aGF0JiMzOTtzIGEga2V5IG9wdGltaXphdGlvbiBpbiB0aGUgU01CIHByb3RvY29sLiBIb3BlZnVsbHksIHRoaXMgZnVuY3Rpb24gaXMgd2VsbC1zdHJ1Y3R1cmVkIGFuZCBkb2N1bWVudGVkLCBtYWtpbmcgaXQgZWFzaWVyIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg2MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg2MjpcdGludFxuIDg2MzpcdGNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcbiA4NjQ6XHRcdFx0ICAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLFxuIDg2NTpcdFx0XHQgICBjb25zdCBpbnQgZmxhZ3MsIGNvbnN0IGludCBudW1fcnFzdCwgc3RydWN0IHNtYl9ycXN0ICpycXN0LFxuIDg2NjpcdFx0XHQgICBpbnQgKnJlc3BfYnVmX3R5cGUsIHN0cnVjdCBrdmVjICpyZXNwX2lvdilcbiA4Njc6XHR7XG4gODY4Olx0XHRpbnQgaSwgaiwgb3B0eXBlLCByYyA9IDA7XG4gODY5Olx0XHRzdHJ1Y3QgbWlkX3FfZW50cnkgKm1pZFtNQVhfQ09NUE9VTkRdO1xuIDg3MDpcdFx0Ym9vbCBjYW5jZWxsZWRfbWlkW01BWF9DT01QT1VORF0gPSB7ZmFsc2V9O1xuIDg3MTpcdFx0c3RydWN0IGNpZnNfY3JlZGl0cyBjcmVkaXRzW01BWF9DT01QT1VORF0gPSB7XG4gODcyOlx0XHRcdHsgLnZhbHVlID0gMCwgLmluc3RhbmNlID0gMCB9XG4gODczOlx0XHR9O1xuIDg3NDpcdFx0dW5zaWduZWQgaW50IGluc3RhbmNlO1xuIDg3NTpcdFx0Y2hhciAqYnVmO1xuIDg3NjpcdFxuIDg3NzpcdFx0b3B0eXBlID0gZmxhZ3MgXHUwMDI2IENJRlNfT1BfTUFTSztcbiA4Nzg6XHRcbiA4Nzk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9ycXN0OyBpJiM0MzsmIzQzOylcbiA4ODA6XHRcdFx0cmVzcF9idWZfdHlwZVtpXSA9IENJRlNfTk9fQlVGRkVSOyAgLyogbm8gcmVzcG9uc2UgYnVmIHlldCAqL1xuIDg4MTpcdFxuIDg4MjpcdFx0aWYgKCFzZXMgfHwgIXNlcy1cdTAwM2VzZXJ2ZXIgfHwgIXNlcnZlcikge1xuIDg4MzpcdFx0XHRjaWZzX2RiZyhWRlMsIFwmIzM0O051bGwgc2Vzc2lvblxcblwmIzM0Oyk7XG4gODg0Olx0XHRcdHJldHVybiBzbWJfRUlPKHNtYl9laW9fdHJhY2VfbnVsbF9wb2ludGVycyk7XG4gODg1Olx0XHR9XG4gODg2Olx0XG4gODg3Olx0XHRzcGluX2xvY2soXHUwMDI2c2VydmVyLVx1MDAzZXNydl9sb2NrKTtcbiA4ODg6XHRcdGlmIChzZXJ2ZXItXHUwMDNldGNwU3RhdHVzID09IENpZnNFeGl0aW5nKSB7XG4gODg5Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNlcnZlci1cdTAwM2VzcnZfbG9jayk7XG4gODkwOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDg5MTpcdFx0fVxuIDg5MjpcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2VydmVyLVx1MDAzZXNydl9sb2NrKTtcbiA4OTM6XHRcbiA4OTQ6XHRcdC8qXG4gODk1Olx0XHQgKiBXYWl0IGZvciBhbGwgdGhlIHJlcXVlc3RzIHRvIGJlY29tZSBhdmFpbGFibGUuXG4gODk2Olx0XHQgKiBUaGlzIGFwcHJvYWNoIHN0aWxsIGxlYXZlcyB0aGUgcG9zc2liaWxpdHkgdG8gYmUgc3R1Y2sgd2FpdGluZyBmb3JcbiA4OTc6XHRcdCAqIGNyZWRpdHMgaWYgdGhlIHNlcnZlciBkb2VzbiYjMzk7dCBncmFudCBjcmVkaXRzIHRvIHRoZSBvdXRzdGFuZGluZ1xuIDg5ODpcdFx0ICogcmVxdWVzdHMgYW5kIGlmIHRoZSBjbGllbnQgaXMgY29tcGxldGVseSBpZGxlLCBub3QgZ2VuZXJhdGluZyBhbnlcbiA4OTk6XHRcdCAqIG90aGVyIHJlcXVlc3RzLlxuIDkwMDpcdFx0ICogVGhpcyBjYW4gYmUgaGFuZGxlZCBieSB0aGUgZXZlbnR1YWwgc2Vzc2lvbiByZWNvbm5lY3QuXG4gOTAxOlx0XHQgKi9cbiA5MDI6XHRcdHJjID0gd2FpdF9mb3JfY29tcG91bmRfcmVxdWVzdChzZXJ2ZXIsIG51bV9ycXN0LCBmbGFncyxcbiA5MDM6XHRcdFx0XHRcdCAgICAgICBcdTAwMjZpbnN0YW5jZSk7XG4gOTA0Olx0XHRpZiAocmMpXG4gOTA1Olx0XHRcdHJldHVybiByYztcbiA5MDY6XHRcbiA5MDc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9ycXN0OyBpJiM0MzsmIzQzOykge1xuIDkwODpcdFx0XHRjcmVkaXRzW2ldLnZhbHVlID0gMTtcbiA5MDk6XHRcdFx0Y3JlZGl0c1tpXS5pbnN0YW5jZSA9IGluc3RhbmNlO1xuIDkxMDpcdFx0fVxuIDkxMTpcdFxuIDkxMjpcdFx0LypcbiA5MTM6XHRcdCAqIE1ha2Ugc3VyZSB0aGF0IHdlIHNpZ24gaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB3ZSBzZW5kIG9uIHRoaXMgc29ja2V0XG4gOTE0Olx0XHQgKiBhbmQgYXZvaWQgcmFjZXMgaW5zaWRlIHRjcCBzZW5kbXNnIGNvZGUgdGhhdCBjb3VsZCBjYXVzZSBjb3JydXB0aW9uXG4gOTE1Olx0XHQgKiBvZiBzbWIgZGF0YS5cbiA5MTY6XHRcdCAqL1xuIDkxNzpcdFxuIDkxODpcdFx0Y2lmc19zZXJ2ZXJfbG9jayhzZXJ2ZXIpO1xuIDkxOTpcdFxuIDkyMDpcdFx0LypcbiA5MjE6XHRcdCAqIEFsbCB0aGUgcGFydHMgb2YgdGhlIGNvbXBvdW5kIGNoYWluIGJlbG9uZyBvYnRhaW5lZCBjcmVkaXRzIGZyb20gdGhlXG4gOTIyOlx0XHQgKiBzYW1lIHNlc3Npb24uIFdlIGNhbiBub3QgdXNlIGNyZWRpdHMgb2J0YWluZWQgZnJvbSB0aGUgcHJldmlvdXNcbiA5MjM6XHRcdCAqIHNlc3Npb24gdG8gc2VuZCB0aGlzIHJlcXVlc3QuIENoZWNrIGlmIHRoZXJlIHdlcmUgcmVjb25uZWN0cyBhZnRlclxuIDkyNDpcdFx0ICogd2Ugb2J0YWluZWQgY3JlZGl0cyBhbmQgcmV0dXJuIC1FQUdBSU4gaW4gc3VjaCBjYXNlcyB0byBsZXQgY2FsbGVyc1xuIDkyNTpcdFx0ICogaGFuZGxlIGl0LlxuIDkyNjpcdFx0ICovXG4gOTI3Olx0XHRpZiAoaW5zdGFuY2UgIT0gc2VydmVyLVx1MDAzZXJlY29ubmVjdF9pbnN0YW5jZSkge1xuIDkyODpcdFx0XHRjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKTtcbiA5Mjk6XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnVtX3Jxc3Q7IGomIzQzOyYjNDM7KVxuIDkzMDpcdFx0XHRcdGFkZF9jcmVkaXRzKHNlcnZlciwgXHUwMDI2Y3JlZGl0c1tqXSwgb3B0eXBlKTtcbiA5MzE6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gOTMyOlx0XHR9XG4gOTMzOlx0XG4gOTM0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcnFzdDsgaSYjNDM7JiM0MzspIHtcbiA5MzU6XHRcdFx0bWlkW2ldID0gc2VydmVyLVx1MDAzZW9wcy1cdTAwM2VzZXR1cF9yZXF1ZXN0KHNlcywgc2VydmVyLCBcdTAwMjZycXN0W2ldKTtcbiA5MzY6XHRcdFx0aWYgKElTX0VSUihtaWRbaV0pKSB7XG4gOTM3Olx0XHRcdFx0cmV2ZXJ0X2N1cnJlbnRfbWlkKHNlcnZlciwgaSk7XG4gOTM4Olx0XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaiYjNDM7JiM0MzspXG4gOTM5Olx0XHRcdFx0XHRkZWxldGVfbWlkKHNlcnZlciwgbWlkW2pdKTtcbiA5NDA6XHRcdFx0XHRjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKTtcbiA5NDE6XHRcbiA5NDI6XHRcdFx0XHQvKiBVcGRhdGUgIyBvZiByZXF1ZXN0cyBvbiB3aXJlIHRvIHNlcnZlciAqL1xuIDk0MzpcdFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG51bV9ycXN0OyBqJiM0MzsmIzQzOylcbiA5NDQ6XHRcdFx0XHRcdGFkZF9jcmVkaXRzKHNlcnZlciwgXHUwMDI2Y3JlZGl0c1tqXSwgb3B0eXBlKTtcbiA5NDU6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihtaWRbaV0pO1xuIDk0NjpcdFx0XHR9XG4gOTQ3Olx0XG4gOTQ4Olx0XHRcdG1pZFtpXS1cdTAwM2Vzcl9mbGFncyA9IGZsYWdzO1xuIDk0OTpcdFx0XHRtaWRbaV0tXHUwMDNlbWlkX3N0YXRlID0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEO1xuIDk1MDpcdFx0XHRtaWRbaV0tXHUwMDNlb3B0eXBlID0gb3B0eXBlO1xuIDk1MTpcdFx0XHQvKlxuIDk1MjpcdFx0XHQgKiBJbnZva2UgY2FsbGJhY2sgZm9yIGV2ZXJ5IHBhcnQgb2YgdGhlIGNvbXBvdW5kIGNoYWluXG4gOTUzOlx0XHRcdCAqIHRvIGNhbGN1bGF0ZSBjcmVkaXRzIHByb3Blcmx5LiBXYWtlIHVwIHRoaXMgdGhyZWFkIG9ubHkgd2hlblxuIDk1NDpcdFx0XHQgKiB0aGUgbGFzdCBlbGVtZW50IGlzIHJlY2VpdmVkLlxuIDk1NTpcdFx0XHQgKi9cbiA5NTY6XHRcdFx0aWYgKGkgXHUwMDNjIG51bV9ycXN0IC0gMSlcbiA5NTc6XHRcdFx0XHRtaWRbaV0tXHUwMDNlY2FsbGJhY2sgPSBjaWZzX2NvbXBvdW5kX2NhbGxiYWNrO1xuIDk1ODpcdFx0XHRlbHNlXG4gOTU5Olx0XHRcdFx0bWlkW2ldLVx1MDAzZWNhbGxiYWNrID0gY2lmc19jb21wb3VuZF9sYXN0X2NhbGxiYWNrO1xuIDk2MDpcdFx0fVxuIDk2MTpcdFx0cmMgPSBzbWJfc2VuZF9ycXN0KHNlcnZlciwgbnVtX3Jxc3QsIHJxc3QsIGZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU0NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYGNvbXBvdW5kX3NlbmRfcmVjdmAqKgoKQWxyaWdodCwgdGltZSB0byByZXZpc2l0IGBjb21wb3VuZF9zZW5kX3JlY3ZgLiBJIGtub3cgdGhlIGhpZ2gtbGV2ZWwgYXJjaGl0ZWN0dXJlLCBidXQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZ3JhbnVsYXIgZGV0YWlscy4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBhIGN1cnNvcnkgcmV2aWV3OyBJJiMzOTttIGxvb2tpbmcgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBzdWJ0bGUgaW1wbGVtZW50YXRpb24gbnVhbmNlcywgb3IgcGVyaGFwcyBhcmVhcyB3aGVyZSBvcHRpbWl6YXRpb24gY291bGQgYmUgYWNoaWV2ZWQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHVuZGVybHlpbmcgaGFyZHdhcmUsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhlIG92ZXJhbGwgZGF0YSBmbG93LiBJcyBpdCB0aHJlYWQtc2FmZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB2YXJpb3VzIGRhdGEgYnVmZmVyIHNpemVzIG9uIHBlcmZvcm1hbmNlPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgYW5kIHdoYXQgdGhlIHJlY292ZXJ5IG1lY2hhbmlzbXMgbG9vayBsaWtlLiBVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBzZWUgaWYgdGhlcmUgYXJlIG9wcG9ydHVuaXRpZXMgZm9yIHNxdWVlemluZyBvdXQgZXZlbiBtb3JlIGVmZmljaWVuY3ksIG9yIHBlcmhhcHMgdW5jb3ZlcmluZyBoaWRkZW4gY29tcGxleGl0aWVzIHRoYXQgSSBtaWdodCBub3QgaGF2ZSBpbml0aWFsbHkgY29uc2lkZXJlZC4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk2MjpcdFxuIDk2MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3Jxc3Q7IGkmIzQzOyYjNDM7KVxuIDk2NDpcdFx0XHRjaWZzX3NhdmVfd2hlbl9zZW50KG1pZFtpXSk7XG4gOTY1Olx0XG4gOTY2Olx0XHRpZiAocmMgXHUwMDNjIDApIHtcbiA5Njc6XHRcdFx0cmV2ZXJ0X2N1cnJlbnRfbWlkKHNlcnZlciwgbnVtX3Jxc3QpO1xuIDk2ODpcdFx0XHRzZXJ2ZXItXHUwMDNlc2VxdWVuY2VfbnVtYmVyIC09IDI7XG4gOTY5Olx0XHR9XG4gOTcwOlx0XG4gOTcxOlx0XHRpZiAocmMgXHUwMDNjIDAgfHwgKGZsYWdzIFx1MDAyNiBDSUZTX05PX1NSVl9SU1ApKSB7XG4gOTcyOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9ycXN0OyBpJiM0MzsmIzQzOykge1xuIDk3MzpcdFx0XHRcdGRlbGV0ZV9taWQoc2VydmVyLCBtaWRbaV0pO1xuIDk3NDpcdFx0XHRcdGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlO1xuIDk3NTpcdFx0XHR9XG4gOTc2Olx0XHR9XG4gOTc3Olx0XG4gOTc4Olx0XHRjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKTtcbiA5Nzk6XHRcbiA5ODA6XHRcdC8qXG4gOTgxOlx0XHQgKiBJZiBzZW5kaW5nIGZhaWxlZCBmb3Igc29tZSByZWFzb24gb3IgaXQgaXMgYW4gb3Bsb2NrIGJyZWFrIHRoYXQgd2VcbiA5ODI6XHRcdCAqIHdpbGwgbm90IHJlY2VpdmUgYSByZXNwb25zZSB0byAtIHJldHVybiBjcmVkaXRzIGJhY2tcbiA5ODM6XHRcdCAqL1xuIDk4NDpcdFx0aWYgKHJjIFx1MDAzYyAwIHx8IChmbGFncyBcdTAwMjYgQ0lGU19OT19TUlZfUlNQKSkge1xuIDk4NTpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcnFzdDsgaSYjNDM7JiM0MzspXG4gOTg2Olx0XHRcdFx0YWRkX2NyZWRpdHMoc2VydmVyLCBcdTAwMjZjcmVkaXRzW2ldLCBvcHR5cGUpO1xuIDk4NzpcdFx0XHRnb3RvIG91dDtcbiA5ODg6XHRcdH1cbiA5ODk6XHRcbiA5OTA6XHRcdC8qXG4gOTkxOlx0XHQgKiBBdCB0aGlzIHBvaW50IHRoZSByZXF1ZXN0IGlzIHBhc3NlZCB0byB0aGUgbmV0d29yayBzdGFjayAtIHdlIGFzc3VtZVxuIDk5MjpcdFx0ICogdGhhdCBhbnkgY3JlZGl0cyB0YWtlbiBmcm9tIHRoZSBzZXJ2ZXIgc3RydWN0dXJlIG9uIHRoZSBjbGllbnQgaGF2ZVxuIDk5MzpcdFx0ICogYmVlbiBzcGVudCBhbmQgd2UgY2FuJiMzOTt0IHJldHVybiB0aGVtIGJhY2suIE9uY2Ugd2UgcmVjZWl2ZSByZXNwb25zZXNcbiA5OTQ6XHRcdCAqIHdlIHdpbGwgY29sbGVjdCBjcmVkaXRzIGdyYW50ZWQgYnkgdGhlIHNlcnZlciBpbiB0aGUgbWlkIGNhbGxiYWNrc1xuIDk5NTpcdFx0ICogYW5kIGFkZCB0aG9zZSBjcmVkaXRzIHRvIHRoZSBzZXJ2ZXIgc3RydWN0dXJlLlxuIDk5NjpcdFx0ICovXG4gOTk3Olx0XG4gOTk4Olx0XHQvKlxuIDk5OTpcdFx0ICogQ29tcG91bmRpbmcgaXMgbmV2ZXIgdXNlZCBkdXJpbmcgc2Vzc2lvbiBlc3RhYmxpc2guXG4xMDAwOlx0XHQgKi9cbjEwMDE6XHRcdHNwaW5fbG9jayhcdTAwMjZzZXMtXHUwMDNlc2VzX2xvY2spO1xuMTAwMjpcdFx0aWYgKChzZXMtXHUwMDNlc2VzX3N0YXR1cyA9PSBTRVNfTkVXKSB8fCAob3B0eXBlIFx1MDAyNiBDSUZTX05FR19PUCkgfHwgKG9wdHlwZSBcdTAwMjYgQ0lGU19TRVNTX09QKSkge1xuMTAwMzpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZzZXMtXHUwMDNlc2VzX2xvY2spO1xuMTAwNDpcdFxuMTAwNTpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKG51bV9ycXN0ICE9IDEgfHwgIXJlc3BfaW92KSlcbjEwMDY6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEwMDc6XHRcbjEwMDg6XHRcdFx0Y2lmc19zZXJ2ZXJfbG9jayhzZXJ2ZXIpO1xuMTAwOTpcdFx0XHRzbWIzMTFfdXBkYXRlX3ByZWF1dGhfaGFzaChzZXMsIHNlcnZlciwgcnFzdFswXS5ycV9pb3YsIHJxc3RbMF0ucnFfbnZlYyk7XG4xMDEwOlx0XHRcdGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpO1xuMTAxMTpcdFxuMTAxMjpcdFx0XHRzcGluX2xvY2soXHUwMDI2c2VzLVx1MDAzZXNlc19sb2NrKTtcbjEwMTM6XHRcdH1cbjEwMTQ6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNlcy1cdTAwM2VzZXNfbG9jayk7XG4xMDE1Olx0XG4xMDE2Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcnFzdDsgaSYjNDM7JiM0MzspIHtcbjEwMTc6XHRcdFx0cmMgPSB3YWl0X2Zvcl9yZXNwb25zZShzZXJ2ZXIsIG1pZFtpXSk7XG4xMDE4Olx0XHRcdGlmIChyYyAhPSAwKVxuMTAxOTpcdFx0XHRcdGJyZWFrO1xuMTAyMDpcdFx0fVxuMTAyMTpcdFx0aWYgKHJjICE9IDApIHtcbjEwMjI6XHRcdFx0Zm9yICg7IGkgXHUwMDNjIG51bV9ycXN0OyBpJiM0MzsmIzQzOykge1xuMTAyMzpcdFx0XHRcdGNpZnNfc2VydmVyX2RiZyhGWUksIFwmIzM0O0NhbmNlbGxpbmcgd2FpdCBmb3IgbWlkICVsbHUgY21kOiAlZFxcblwmIzM0OyxcbjEwMjQ6XHRcdFx0XHRcdCBtaWRbaV0tXHUwMDNlbWlkLCBsZTE2X3RvX2NwdShtaWRbaV0tXHUwMDNlY29tbWFuZCkpO1xuMTAyNTpcdFx0XHRcdHNlbmRfY2FuY2VsKHNlcywgc2VydmVyLCBcdTAwMjZycXN0W2ldLCBtaWRbaV0sIHhpZCk7XG4xMDI2Olx0XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNm1pZFtpXS1cdTAwM2VtaWRfbG9jayk7XG4xMDI3Olx0XHRcdFx0bWlkW2ldLVx1MDAzZXdhaXRfY2FuY2VsbGVkID0gdHJ1ZTtcbjEwMjg6XHRcdFx0XHRpZiAobWlkW2ldLVx1MDAzZW1pZF9zdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQgfHxcbjEwMjk6XHRcdFx0XHQgICAgbWlkW2ldLVx1MDAzZW1pZF9zdGF0ZSA9PSBNSURfUkVTUE9OU0VfUkVDRUlWRUQpIHtcbjEwMzA6XHRcdFx0XHRcdG1pZFtpXS1cdTAwM2VjYWxsYmFjayA9IGNpZnNfY2FuY2VsbGVkX2NhbGxiYWNrO1xuMTAzMTpcdFx0XHRcdFx0Y2FuY2VsbGVkX21pZFtpXSA9IHRydWU7XG4xMDMyOlx0XHRcdFx0XHRjcmVkaXRzW2ldLnZhbHVlID0gMDtcbjEwMzM6XHRcdFx0XHR9XG4xMDM0Olx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2bWlkW2ldLVx1MDAzZW1pZF9sb2NrKTtcbjEwMzU6XHRcdFx0fVxuMTAzNjpcdFx0fVxuMTAzNzpcdFxuMTAzODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3Jxc3Q7IGkmIzQzOyYjNDM7KSB7XG4xMDM5Olx0XHRcdGlmIChyYyBcdTAwM2MgMClcbjEwNDA6XHRcdFx0XHRnb3RvIG91dDtcbjEwNDE6XHRcbjEwNDI6XHRcdFx0cmMgPSBjaWZzX3N5bmNfbWlkX3Jlc3VsdChtaWRbaV0sIHNlcnZlcik7XG4xMDQzOlx0XHRcdGlmIChyYyAhPSAwKSB7XG4xMDQ0Olx0XHRcdFx0LyogbWFyayB0aGlzIG1pZCBhcyBjYW5jZWxsZWQgdG8gbm90IGZyZWUgaXQgYmVsb3cgKi9cbjEwNDU6XHRcdFx0XHRjYW5jZWxsZWRfbWlkW2ldID0gdHJ1ZTtcbjEwNDY6XHRcdFx0XHRnb3RvIG91dDtcbjEwNDc6XHRcdFx0fVxuMTA0ODpcdFxuMTA0OTpcdFx0XHRpZiAoIW1pZFtpXS1cdTAwM2VyZXNwX2J1ZiB8fFxuMTA1MDpcdFx0XHQgICAgbWlkW2ldLVx1MDAzZW1pZF9zdGF0ZSAhPSBNSURfUkVTUE9OU0VfUkVBRFkpIHtcbjEwNTE6XHRcdFx0XHRyYyA9IHNtYl9FSU8xKHNtYl9laW9fdHJhY2VfcnhfbWlkX3VucmVhZHksIG1pZFtpXS1cdTAwM2VtaWRfc3RhdGUpO1xuMTA1MjpcdFx0XHRcdGNpZnNfZGJnKEZZSSwgXCYjMzQ7QmFkIE1JRCBzdGF0ZT9cXG5cJiMzNDspO1xuMTA1MzpcdFx0XHRcdGdvdG8gb3V0O1xuMTA1NDpcdFx0XHR9XG4xMDU1Olx0XG4xMDU2Olx0XHRcdHJjID0gc2VydmVyLVx1MDAzZW9wcy1cdTAwM2VjaGVja19yZWNlaXZlKG1pZFtpXSwgc2VydmVyLFxuMTA1NzpcdFx0XHRcdFx0XHRcdGZsYWdzIFx1MDAyNiBDSUZTX0xPR19FUlJPUik7XG4xMDU4Olx0XG4xMDU5Olx0XHRcdGlmIChyZXNwX2lvdikge1xuMTA2MDpcdFx0XHRcdGJ1ZiA9IChjaGFyICopbWlkW2ldLVx1MDAzZXJlc3BfYnVmO1xuMTA2MTpcdFx0XHRcdHJlc3BfaW92W2ldLmlvdl9iYXNlID0gYnVmO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgcGF0Y2guIEl0JiMzOTtzIGFkZGluZyB0aGlzIGNvZGUgYmxvY2s6CgpgYGBjCglpZiAocmMgJmx0OyAwIHx8IChmbGFncyAmYW1wOyBDSUZTX05PX1NSVl9SU1ApKSB7CgkJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9ycXN0OyBpJiM0MzsmIzQzOykgewoJCQlkZWxldGVfbWlkKHNlcnZlciwgbWlkW2ldKTsKCQkJY2FuY2VsbGVkX21pZFtpXSA9IHRydWU7CgkJfQoJfQpgYGAKClJpZ2h0IGF3YXksIEkgc2VlIHRoaXMgaXMgbGlrZWx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgYSBtZW1vcnkgbGVhay4gSWYgdGhlIHJldHVybiBjb2RlLCBgcmNgLCBpcyBuZWdhdGl2ZSwgb3IgdGhlIGBDSUZTX05PX1NSVl9SU1BgIGZsYWcgaXMgc2V0LCB3aGljaCBwcm9iYWJseSBtZWFucyB3ZSBkaWRuJiMzOTt0IGdldCBhIHNlcnZlciByZXNwb25zZSwgdGhlbiB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIHNvbWUgbWlkcywgd2hpY2ggSSYjMzk7bSBpbmZlcnJpbmcgYXJlIG1lc3NhZ2UgaWRlbnRpZmllcnMuIEluc2lkZSB0aGlzIGxvb3AsIGBkZWxldGVfbWlkYCBpcyBjYWxsZWQsIGFuZCB0aGVuIGEgYGNhbmNlbGxlZF9taWRgIGZsYWcgaXMgc2V0LiBUaGF0IHN1Z2dlc3RzIHdlIGFyZSBjbGVhbmluZyB1cCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIG1pZHMgYW5kIG1hcmtpbmcgdGhlbSBhcyBoYW5kbGVkLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGBkZWxldGVfbWlkYCBjYWxsLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlLiBXZSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhhdCB0aGUgbWlkJiMzOTtzIHJlc291cmNlcyBhcmUgY29ycmVjdGx5IGZyZWVkIHRvIHByZXZlbnQgYW55IGZvcm0gb2YgdXNlLWFmdGVyLWZyZWUgYW5kL29yIG1lbW9yeSBsZWFrcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaGFuZGxpbmcgYW4gZXJyb3IgY29uZGl0aW9uIG9yIGEgbGFjayBvZiByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIsIHdoaWNoIGNvdWxkIGVhc2lseSBsZWFkIHRvIGRhbmdsaW5nIHBvaW50ZXJzIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gVGhpcyBpcyBhIHJlYXNvbmFibGUgcGF0Y2ggYW5kIEkgd2lsbCBpbnZlc3RpZ2F0ZSB0aGUgYGRlbGV0ZV9taWRgIGZ1bmN0aW9uIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVsZXRlX21pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz0xMTg9dm9pZFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzoxMTk6ZGVsZXRlX21pZChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkKVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMjAte1xuLS1cbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9NjYzPWNpZnNfY2FsbF9hc3luYyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBzbWJfcnFzdCAqcnFzdCxcbi0tXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTcyNi1cdFx0c2VydmVyLVx1MDAzZXNlcXVlbmNlX251bWJlciAtPSAyO1xuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzo3Mjc6XHRcdGRlbGV0ZV9taWQoc2VydmVyLCBtaWQpO1xuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy03MjgtXHR9XG4tLVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz04NjM9Y29tcG91bmRfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxuLS1cbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtOTM4LVx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzo5Mzk6XHRcdFx0XHRkZWxldGVfbWlkKHNlcnZlciwgbWlkW2pdKTtcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtOTQwLVx0XHRcdGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpO1xuLS1cbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtOTcyLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcnFzdDsgaSYjNDM7JiM0MzspIHtcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6OTczOlx0XHRcdGRlbGV0ZV9taWQoc2VydmVyLCBtaWRbaV0pO1xuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy05NzQtXHRcdFx0Y2FuY2VsbGVkX21pZFtpXSA9IHRydWU7XG4tLVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMDY4LVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzoxMDY5Olx0XHRcdC8qIG1hcmsgaXQgc28gYnVmIHdpbGwgbm90IGJlIGZyZWVkIGJ5IGRlbGV0ZV9taWQgKi9cbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtMTA3MC1cdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDSUZTX05PX1JTUF9CVUYpID09IDApXG4tLVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMTAwLVx0XHRpZiAoIWNhbmNlbGxlZF9taWRbaV0pXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjExMDE6XHRcdFx0ZGVsZXRlX21pZChzZXJ2ZXIsIG1pZFtpXSk7XG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMDItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0OTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNaWQgRGVsZXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgcHJvcGVyIHJlc291cmNlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBhcm91bmQgZGVsZXRpbmcgYG1pZGAgZW50cmllcyBpbiB0aGUgQ0lGUyBjbGllbnQgY29kZS4gVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gYmUgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBidXQgYWZ0ZXIgbG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQmIzM5O3Mgbm90IHRoZSBwcm9ibGVtIGhlcmUuIGBtaWRgIGlzIGEgYHN0cnVjdCBtaWRfcV9lbnRyeWAsIHByb3Blcmx5IGFsbG9jYXRlZCBhbmQgbWFuYWdlZCBieSB0aGUgU01CIGNsaWVudCBpdHNlbGYuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9vcCB0aGF0IGNhbGxzIGBkZWxldGVfbWlkYCBpZiBgc21iX3NlbmRfcnFzdGAgZmFpbHMgKHJldHVybnMgYHJjICZsdDsgMGApIG9yIGlmIHRoZSBgQ0lGU19OT19TUlZfUlNQYCBmbGFnIGlzIHNldC4gSXQgYWxzbyBzZXRzIGBjYW5jZWxsZWRfbWlkW2ldID0gdHJ1ZWAgdG8gYXZvaWQgY2FsbGluZyBgZGVsZXRlX21pZGAgbGF0ZXIgb24uCgpNeSBpbml0aWFsIHJlYWN0aW9uIHdhcyB0aGF0IHRoZSBjb2RlIHdhcyByZWR1bmRhbnQsIGJlY2F1c2UgSSBjb3VsZCBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBhbHJlYWR5IGNhbGxzIGBkZWxldGVfbWlkYCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiBpbiBhbGwgY2FzZXMsIGV2ZW4gd2hlbiBgcmMgJmx0OyAwYCBvciBgQ0lGU19OT19TUlZfUlNQYCBpcyBzZXQuIEJ1dCBsb29raW5nIGF0IHRoZSBvcmlnaW5hbCBjb2RlLCBpZiBgcmMgJmx0OyAwYCwgaXQgZ29lcyB0byBgb3V0YCwgYW5kIHRoZW4gaXQgY2FsbHMgYGRlbGV0ZV9taWRgIHdpdGggYGNhbmNlbGxlZF9taWRbaV1gIGFzIGZhbHNlLCB3aGljaCBJIHRob3VnaHQgY291bGQgYmUgYSBwcm9ibGVtLiBTbywgSSBkdWcgYSBsaXR0bGUgZGVlcGVyLCBhbmQgcmVhbGl6ZWQgdGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhbmQgdGhlIHJvbGUgb2YgYGRlbGV0ZV9taWRgLiBgZGVsZXRlX21pZGAgbGlrZWx5IHJlbW92ZXMgdGhlIGBtaWRgIGVudHJ5IGZyb20gdGhlIHNlcnZlciYjMzk7cyBwZW5kaW5nIG1pZCBsaXN0LCB3aGljaCBpcyBwcm9iYWJseSBwcm90ZWN0ZWQgYnkgYSBsb2NrIChsaWtlIGBzZXJ2ZXItJmd0O3Nydl9sb2NrYCBvciBzb21ldGhpbmcgc2ltaWxhcikuIFRoYXQgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgYGRlbGV0ZV9taWRgIHByb2JhYmx5IG5lZWRzIHRoZSBsb2NrLCBzbyBpdCYjMzk7cyBiZXN0IHRvIGNhbGwgaXQgYmVmb3JlIGBjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKWAgb3IgYXQgbGVhc3QgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHRoYXQgcmVsZWFzZXMgdGhhdCBsb2NrLgoKU28sIGluIHRoZSBvcmlnaW5hbCBjb2RlLCBpZiBgc21iX3NlbmRfcnFzdGAgZmFpbHMsIHdlIGhpdCBgb3V0YC4gVGhlIGBkZWxldGVfbWlkYCBhdCB0aGUgZW5kIGlzIHVubmVjZXNzYXJ5IGlmIHRoZSBtaWQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIHBlbmRpbmcgbGlzdCBlYXJsaWVyIGluIHRoZSBmbG93LgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IGNvcnJlY3RpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgbWlkIGxpc3QgYnkgZGVsZXRpbmcgdGhlIGBtaWRgIHByaW9yIHRvIHJlbGVhc2luZyB0aGUgc2VydmVyIGxvY2suIFRoYXQgbWFrZXMgdGhpcyBhIGNydWNpYWwgZml4IGZvciBlbnN1cmluZyBkYXRhIGludGVncml0eSBhbmQgcHJldmVudGluZyB0aG9zZSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExODpcdHZvaWRcbiAxMTk6XHRkZWxldGVfbWlkKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwgc3RydWN0IG1pZF9xX2VudHJ5ICptaWQpXG4gMTIwOlx0e1xuIDEyMTpcdFx0c3Bpbl9sb2NrKFx1MDAyNnNlcnZlci1cdTAwM2VtaWRfcXVldWVfbG9jayk7XG4gMTIyOlx0XG4gMTIzOlx0XHRpZiAoIW1pZC1cdTAwM2VkZWxldGVkX2Zyb21fcSkge1xuIDEyNDpcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNm1pZC1cdTAwM2VxaGVhZCk7XG4gMTI1Olx0XHRcdG1pZC1cdTAwM2VkZWxldGVkX2Zyb21fcSA9IHRydWU7XG4gMTI2Olx0XHR9XG4gMTI3Olx0XHRzcGluX3VubG9jayhcdTAwMjZzZXJ2ZXItXHUwMDNlbWlkX3F1ZXVlX2xvY2spO1xuIDEyODpcdFxuIDEyOTpcdFx0cmVsZWFzZV9taWQoc2VydmVyLCBtaWQpO1xuIDEzMDpcdH1cbiAxMzE6XHRcbiAxMzI6XHQvKlxuIDEzMzpcdCAqIHNtYl9zZW5kX2t2ZWMgLSBzZW5kIGFuIGFycmF5IG9mIGt2ZWNzIHRvIHRoZSBzZXJ2ZXJcbiAxMzQ6XHQgKiBAc2VydmVyOlx0U2VydmVyIHRvIHNlbmQgdGhlIGRhdGEgdG9cbiAxMzU6XHQgKiBAc21iX21zZzpcdE1lc3NhZ2UgdG8gc2VuZFxuIDEzNjpcdCAqIEBzZW50Olx0YW1vdW50IG9mIGRhdGEgc2VudCBvbiBzb2NrZXQgaXMgc3RvcmVkIGhlcmVcbiAxMzc6XHQgKlxuIDEzODpcdCAqIE91ciBiYXNpYyBcJiMzNDtzZW5kIGRhdGEgdG8gc2VydmVyXCYjMzQ7IGZ1bmN0aW9uLiBTaG91bGQgYmUgY2FsbGVkIHdpdGggc3J2X211dGV4XG4gMTM5Olx0ICogaGVsZC4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIHJlc3VsdHMuXG4gMTQwOlx0ICovXG4gMTQxOlx0aW50XG4gMTQyOlx0c21iX3NlbmRfa3ZlYyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBtc2doZHIgKnNtYl9tc2csXG4gMTQzOlx0XHQgICAgICBzaXplX3QgKnNlbnQpXG4gMTQ0Olx0e1xuIDE0NTpcdFx0aW50IHJjID0gMDtcbiAxNDY6XHRcdGludCByZXRyaWVzID0gMDtcbiAxNDc6XHRcdHN0cnVjdCBzb2NrZXQgKnNzb2NrZXQgPSBzZXJ2ZXItXHUwMDNlc3NvY2tldDtcbiAxNDg6XHRcbiAxNDk6XHRcdCpzZW50ID0gMDtcbiAxNTA6XHRcbiAxNTE6XHRcdGlmIChzZXJ2ZXItXHUwMDNlbm9ibG9ja3NuZClcbiAxNTI6XHRcdFx0c21iX21zZy1cdTAwM2Vtc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQgJiM0MzsgTVNHX05PU0lHTkFMO1xuIDE1MzpcdFx0ZWxzZVxuIDE1NDpcdFx0XHRzbWJfbXNnLVx1MDAzZW1zZ19mbGFncyA9IE1TR19OT1NJR05BTDtcbiAxNTU6XHRcbiAxNTY6XHRcdHdoaWxlIChtc2dfZGF0YV9sZWZ0KHNtYl9tc2cpKSB7XG4gMTU3Olx0XHRcdC8qXG4gMTU4Olx0XHRcdCAqIElmIGJsb2NraW5nIHNlbmQsIHdlIHRyeSAzIHRpbWVzLCBzaW5jZSBlYWNoIGNhbiBibG9ja1xuIDE1OTpcdFx0XHQgKiBmb3IgNSBzZWNvbmRzLiBGb3Igbm9uYmxvY2tpbmcgIHdlIGhhdmUgdG8gdHJ5IG1vcmVcbiAxNjA6XHRcdFx0ICogYnV0IHdhaXQgaW5jcmVhc2luZyBhbW91bnRzIG9mIHRpbWUgYWxsb3dpbmcgdGltZSBmb3JcbiAxNjE6XHRcdFx0ICogc29ja2V0IHRvIGNsZWFyLiAgVGhlIG92ZXJhbGwgdGltZSB3ZSB3YWl0IGluIGVpdGhlclxuIDE2MjpcdFx0XHQgKiBjYXNlIHRvIHNlbmQgb24gdGhlIHNvY2tldCBpcyBhYm91dCAxNSBzZWNvbmRzLlxuIDE2MzpcdFx0XHQgKiBTaW1pbGFybHkgd2Ugd2FpdCBmb3IgMTUgc2Vjb25kcyBmb3IgYSByZXNwb25zZSBmcm9tXG4gMTY0Olx0XHRcdCAqIHRoZSBzZXJ2ZXIgaW4gU2VuZFJlY2VpdmVbMl0gZm9yIHRoZSBzZXJ2ZXIgdG8gc2VuZFxuIDE2NTpcdFx0XHQgKiBhIHJlc3BvbnNlIGJhY2sgZm9yIG1vc3QgdHlwZXMgb2YgcmVxdWVzdHMgKGV4Y2VwdFxuIDE2NjpcdFx0XHQgKiBTTUIgV3JpdGUgcGFzdCBlbmQgb2YgZmlsZSB3aGljaCBjYW4gYmUgc2xvdywgYW5kXG4gMTY3Olx0XHRcdCAqIGJsb2NraW5nIGxvY2sgb3BlcmF0aW9ucykuIE5GUyB3YWl0cyBzbGlnaHRseSBsb25nZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUyOQoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiA0NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBMb2NraW5nIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGRlbGV0ZV9taWRgIHRha2VzIGBzZXJ2ZXItJmd0O21pZF9xdWV1ZV9sb2NrYCBhbmQgY2FsbHMgYHJlbGVhc2VfbWlkYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIE5vdywgd2h5IGlzIHRoaXMgcGF0Y2ggY2FsbGluZyBgZGVsZXRlX21pZGAgKmJlZm9yZSogYGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpYD8gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpYCB1bmxvY2tzIGBzZXJ2ZXItJmd0O3Nydl9tdXRleGAuIFNvLCBpZiBgZGVsZXRlX21pZGAgaXMgY2FsbGVkICpiZWZvcmUqIHRoZSB1bmxvY2ssIGl0JiMzOTtzIHByb3RlY3RlZCBieSBgc3J2X211dGV4YC4gQnV0LCBpZiBgZGVsZXRlX21pZGAgaXMgY2FsbGVkIGFmdGVyIGBvdXQ6YCwgaXQmIzM5O3Mgbm90LiBJcyB0aGlzIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIHRoZW4/CgpJZiBgcmMgJmx0OyAwYCBtZWFucyB0aGUgcmVxdWVzdHMgZmFpbGVkIHRvIHNlbmQsIGFuZCB3ZSB1bmxvY2sgYHNydl9tdXRleGAgKmJlZm9yZSogZGVsZXRpbmcsIGFub3RoZXIgdGhyZWFkIGNvdWxkIHN0ZXAgaW4sIHByb2Nlc3MgYSByZXNwb25zZSAoZXZlbiB0aG91Z2ggdGhlcmUgKndhc24mIzM5O3QqIGEgcmVxdWVzdCBzZW50ISksIG9yLCB0aGUgcmVjb25uZWN0IHRocmVhZCBjb3VsZCBydW4gYW5kIHRyeSB0byBjbGVhbiB1cCB0aGUgbWlkcy4uLiBwb3RlbnRpYWxseSBjYXVzaW5nIGlzc3Vlcy4gT2theSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYWRkcmVzc2luZyBlaXRoZXIgYSByYWNlIGNvbmRpdGlvbiwgYSB1c2UtYWZ0ZXItZnJlZSwgb3IgYSBtZW1vcnkgbGVhay4gQW5kLCBpdCYjMzk7cyAqZGVmaW5pdGVseSogYSByYWNlIGlzc3VlLgoKTm93LCBkb2VzIHRoaXMgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoaXMgaXMgbm90IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQuIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBidWlsdCB0byBjYXRjaCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGFuZCBkZWFkbG9ja3MuIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgZGVhbHMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgaGVyZS4gSXQmIzM5O3MgY29udHJvbCBmbG93IGFuZCBvYmplY3QgbGlmZXRpbWUgbWFuYWdlbWVudC4gTGV0JiMzOTtzIGRvdWJsZSBjaGVjayB0byBiZSBzdXJlLi4uCgpgY2FuY2VsbGVkX21pZGAgaXMgYW4gYXJyYXkgb2YgYm9vbGVhbnMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYC4gYG1pZGAgaXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMsIGFuZCB0aGUgcGF0Y2ggaXMgc2ltcGx5IHNldHRpbmcgYGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlYCBhbmQgdGhlbiBjYWxsaW5nIGBkZWxldGVfbWlkYC4gUHVyZWx5IGNvbnRyb2wgZmxvdyBhbmQgb2JqZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludm9sdmVkLiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBmYWxzZS4gVGhhdCYjMzk7cyBteSByZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBjb21wb3VuZF9zZW5kX3JlY3YoKWAgdG8gZGVsZXRlIGBtaWRgIGVudHJpZXMgYW5kIG1hcmsgdGhlbSBhcyBjYW5jZWxsZWQgYmVmb3JlIHJlbGVhc2luZyB0aGUgc2VydmVyIGxvY2sgKGBjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKWApIHdoZW4gYHNtYl9zZW5kX3Jxc3QoKWAgZmFpbHMgKGByYyBcdTAwM2MgMGApIG9yIHdoZW4gbm8gc2VydmVyIHJlc3BvbnNlIGlzIGV4cGVjdGVkLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiwgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrIHJlbGF0ZWQgdG8gdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYG1pZF9xX2VudHJ5YCBzdHJ1Y3R1cmVzLlxuXG5UaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdyBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSkuIEJ1Z3MgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWUsIHVzZS1hZnRlci1mcmVlLCBvciByYWNlIGNvbmRpdGlvbnMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgY29tcG91bmRfc2VuZF9yZWN2KClgIHRvIGRlbGV0ZSBgbWlkYCBlbnRyaWVzIGFuZCBtYXJrIHRoZW0gYXMgY2FuY2VsbGVkIGJlZm9yZSByZWxlYXNpbmcgdGhlIHNlcnZlciBsb2NrIChgY2lmc19zZXJ2ZXJfdW5sb2NrKHNlcnZlcilgKSB3aGVuIGBzbWJfc2VuZF9ycXN0KClgIGZhaWxzIChgcmMgXHUwMDNjIDBgKSBvciB3aGVuIG5vIHNlcnZlciByZXNwb25zZSBpcyBleHBlY3RlZC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVhayByZWxhdGVkIHRvIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBtaWRfcV9lbnRyeWAgc3RydWN0dXJlcy5cblxuVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UpLiBCdWdzIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmFjZSBjb25kaXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1Mjo1Ny40NDg2NTY5NDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDEwMjQ3MTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29tcG91bmRfc2VuZF9yZWN2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgY29tcG91bmRfc2VuZF9yZWN2KClgIHRvIGRlbGV0ZSBgbWlkYCBlbnRyaWVzIGFuZCBtYXJrIHRoZW0gYXMgY2FuY2VsbGVkIGJlZm9yZSByZWxlYXNpbmcgdGhlIHNlcnZlciBsb2NrIChgY2lmc19zZXJ2ZXJfdW5sb2NrKHNlcnZlcilgKSB3aGVuIGBzbWJfc2VuZF9ycXN0KClgIGZhaWxzIChgcmMgXFx1MDAzYyAwYCkgb3Igd2hlbiBubyBzZXJ2ZXIgcmVzcG9uc2UgaXMgZXhwZWN0ZWQuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHJhY2UgY29uZGl0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWsgcmVsYXRlZCB0byB0aGUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiBgbWlkX3FfZW50cnlgIHN0cnVjdHVyZXMuXFxuXFxuVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UpLiBCdWdzIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmFjZSBjb25kaXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBjb21wb3VuZF9zZW5kX3JlY3ZgIHdoZXJlIG1pZCBhcnJheXMgYXJlIG5vdCBkZWxldGVkIHdoZW4gYHJjIFxcdTAwM2MgMGAgb3IgYGZsYWdzIFxcdTAwMjYgQ0lGU19OT19TUlZfUlNQYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBTTUIgY2xpZW50J3MgdHJhbnNwb3J0IGxheWVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFNNQiBjbGllbnQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTI6NTcuNDQ4NjY0MzEyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODUyODAyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmODQ5NWI4NjI1MDIxNDY0MjM0YzdhNTUwNWVkZTRlZDcwODY3ZjQ1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTE6NTI6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYyBiL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcXG5pbmRleCBmZGY0ZTUwYzI3Y2ViLi44ZDE0MjI1ZTk0OGIxIDEwMDY0NFxcbi0tLSBhL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcXG4rKysgYi9mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jXFxuQEAgLTk2OCw2ICs5NjgsMTMgQEAgY29tcG91bmRfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxcbiBcXHRcXHRzZXJ2ZXItXFx1MDAzZXNlcXVlbmNlX251bWJlciAtPSAyO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocmMgXFx1MDAzYyAwIHx8IChmbGFncyBcXHUwMDI2IENJRlNfTk9fU1JWX1JTUCkpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9ycXN0OyBpKyspIHtcXG4rXFx0XFx0XFx0ZGVsZXRlX21pZChzZXJ2ZXIsIG1pZFtpXSk7XFxuK1xcdFxcdFxcdGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpO1xcbiBcXG4gXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTI6NTcuODM0NjM3MDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDc3ODI4ODgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29tcG91bmRfc2VuZF9yZWN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGNvbXBvdW5kX3NlbmRfcmVjdmAgd2hlcmUgbWlkIGFycmF5cyBhcmUgbm90IGRlbGV0ZWQgd2hlbiBgcmMgXFx1MDAzYyAwYCBvciBgZmxhZ3MgXFx1MDAyNiBDSUZTX05PX1NSVl9SU1BgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNNQiBjbGllbnQncyB0cmFuc3BvcnQgbGF5ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgU01CIGNsaWVudCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmODQ5NWI4NjI1MDIxNDY0MjM0YzdhNTUwNWVkZTRlZDcwODY3ZjQ1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMTo1Mjo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMgYi9mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jXG5pbmRleCBmZGY0ZTUwYzI3Y2ViLi44ZDE0MjI1ZTk0OGIxIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1xuKysrIGIvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1xuQEAgLTk2OCw2ICs5NjgsMTMgQEAgY29tcG91bmRfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxuIFx0XHRzZXJ2ZXItXHUwMDNlc2VxdWVuY2VfbnVtYmVyIC09IDI7XG4gXHR9XG4gXG4rXHRpZiAocmMgXHUwMDNjIDAgfHwgKGZsYWdzIFx1MDAyNiBDSUZTX05PX1NSVl9SU1ApKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9ycXN0OyBpKyspIHtcbitcdFx0XHRkZWxldGVfbWlkKHNlcnZlciwgbWlkW2ldKTtcbitcdFx0XHRjYW5jZWxsZWRfbWlkW2ldID0gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0Y2lmc19zZXJ2ZXJfdW5sb2NrKHNlcnZlcik7XG4gXG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTI6NTcuODM0NjQyOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzU1MTA1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTUIgQ2xpZW50IFRyYW5zcG9ydCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNoYW5nZXMgd2l0aGluIGBjb21wb3VuZF9zZW5kX3JlY3ZgLCBzcGVjaWZpY2FsbHkgdGhpcyBuZXcgbG9vcC4gSXQgc2VlbXMgdGhlIHB1cnBvc2UgaXMgdG8gY2xlYXIgb3V0IG1pZCBhcnJheXMgdW5kZXIgY2VydGFpbiBlcnJvciBjb25kaXRpb25zIG9yIGZsYWdzLCBsaWtlbHkgdG8gbWFuYWdlIG1lbW9yeSBlZmZlY3RpdmVseSBvciBoYW5kbGUgZmFpbGVkIHNlcnZlciByZXNwb25zZXMuIFRoaXMgaXMgaW1wb3J0YW50OiBJZiBgcmNgIGlzIG5lZ2F0aXZlIG9yIGlmIHRoZSBgQ0lGU19OT19TUlZfUlNQYCBmbGFnIGlzIHNldCwgdGhpcyBsb29wIHRyaWdnZXJzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYWN0aW9uLiBJcyB0aGlzIGEgbmV3IGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5PyBJcyBpdCBhaW1lZCBhdCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcz8gUGVyaGFwcyBpdCdzIGEgY3JpdGljYWwgYWRqdXN0bWVudCB0byBob3cgd2UgbWFuYWdlIG91dHN0YW5kaW5nIHJlcXVlc3RzIGluIHRoZSBmYWNlIG9mIG5ldHdvcmsgaXNzdWVzLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIGBjb21wb3VuZF9zZW5kX3JlY3ZgIGl0c2VsZiB3aXRoaW4gYGZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSBjb250ZXh0IGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCB0aGUgbWlkIGFycmF5cyBhcmUsIGhvdyB0aGV5IGFyZSB1c2VkLCBhbmQgd2h5IHRoZWlyIGNsZWFudXAgaXMgY29uZGl0aW9uYWwgb24gdGhlc2Ugc3BlY2lmaWMgZmxhZ3Mgb3IgcmV0dXJuIGNvZGVzLiBUaGlzIGlzIGFsbCBhYm91dCBlbnN1cmluZyByb2J1c3QgYW5kIHJlbGlhYmxlIFNNQiBjbGllbnQgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzowMS41NzAxNTYyNjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMjc3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcG91bmRfc2VuZF9yZWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz04NjI9aW50XFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzo4NjM6Y29tcG91bmRfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtODY0LVxcdFxcdCAgIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcixcXG4tLVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9MTEwOD1jaWZzX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcXG4tLVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtMTExMi17XFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzoxMTEzOlxcdHJldHVybiBjb21wb3VuZF9zZW5kX3JlY3YoeGlkLCBzZXMsIHNlcnZlciwgZmxhZ3MsIDEsXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMTE0LVxcdFxcdFxcdFxcdCAgcnFzdCwgcmVzcF9idWZfdHlwZSwgcmVzcF9pb3YpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzowMS42MTgzODgyMTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ5MjM0MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNNQiBDbGllbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgY29tcG91bmRfc2VuZF9yZWN2YCB3aXRoaW4gYGZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNgLiBSaWdodCwgdGhhdCdzIGluIHRoZSBTTUIgY2xpZW50IGNvZGUsIHdoaWNoIGlzIENJRlMuIEl0J3MgYWx3YXlzIGltcG9ydGFudCB0byBrbm93ICp3aGVyZSogdGhlIGZpeCBpcyBoYXBwZW5pbmcuIEFuZCBTTUIgY2xpZW50cz8gVGhleSdyZSBvZnRlbiBsdXJraW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhpbmsgVk1zLCBjb250YWluZXJzLCBhbmQgc3VjaC4gTm93LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoZSBTTUIgY2xpZW50IG9uIHRoaXMgc3lzdGVtLiBJdCB3aWxsIHByb3ZpZGUgY29udGV4dCBpZiB0aGVyZSBpcyBhbnkgY3VzdG9tIGNvbmZpZ3VyYXRpb24gdGhhdCBtYXkgYmUgcmVsZXZhbnQgdG8gdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6MDQuNTY3NjI2MTk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTk4MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDSUZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9zbWIvY2xpZW50L0tjb25maWc6Mjpjb25maWcgQ0lGU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUIzIGFuZCBDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSlcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTMtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjU0OmNvbmZpZyBDSUZTX1NUQVRTMlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cXHRib29sIFxcXCJFeHRlbmRlZCBzdGF0aXN0aWNzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTY3LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjktXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjgzOmNvbmZpZyBDSUZTX1VQQ0FMTFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy04NC1cXHRib29sIFxcXCJLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cFxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6OTI6Y29uZmlnIENJRlNfWEFUVFJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiQ0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJDSUZTIFBPU0lYIEV4dGVuc2lvbnNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMTk6Y29uZmlnIENJRlNfREVCVUdcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTIwLVxcdGJvb2wgXFxcIkVuYWJsZSBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjctXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEyODpjb25maWcgQ0lGU19ERUJVRzJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVxcdGJvb2wgXFxcIkVuYWJsZSBhZGRpdGlvbmFsIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEzOC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDAtXFx0Ym9vbCBcXFwiRHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE0OTpjb25maWcgQ0lGU19ERlNfVVBDQUxMXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE1MC1cXHRib29sIFxcXCJERlMgZmVhdHVyZSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTYyOmNvbmZpZyBDSUZTX1NXTl9VUENBTExcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVxcdGJvb2wgXFxcIlNXTiBmZWF0dXJlIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTcyLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkFsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgwLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxODE6Y29uZmlnIENJRlNfU01CX0RJUkVDVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXFx0Ym9vbCBcXFwiU01CIERpcmVjdCBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5MC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkyLVxcdGJvb2wgXFxcIlByb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTk5OmNvbmZpZyBDSUZTX1JPT1RcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjAwLVxcdGJvb2wgXFxcIlNNQiByb290IGZpbGUgc3lzdGVtIChFeHBlcmltZW50YWwpXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MjA3OmNvbmZpZyBDSUZTX0NPTVBSRVNTSU9OXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTTUIgbWVzc2FnZSBjb21wcmVzc2lvbiAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6MDQuNjE2NjMwNDg1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3MTA4Mzg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkNJRlMgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gQW5hbHlzaXMqKlxuXG5SaWdodCwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgQ0lGUy4gR290IGl0LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGNvbXBvdW5kX3NlbmRfcmVjdmAgZnVuY3Rpb24sIHdoaWNoIHJlc2lkZXMgaW4gdGhlIGBmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jYCBmaWxlLiBUaGlzIHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgU01CIGNsaWVudCdzIHRyYW5zcG9ydCBsYXllci4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUsIHRoZSBvbmUgSSBuZWVkIHRvIGFuc3dlciBmaXJzdCwgaXMgd2hldGhlciBgY29tcG91bmRfc2VuZF9yZWN2YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCBvciBpcyBleHBvcnRlZC4gS25vd2luZyB0aGF0IGltbWVkaWF0ZWx5IGRldGVybWluZXMgaG93IHdpZGVseSBhY2Nlc3NpYmxlLCBhbmQgdGh1cywgaG93IHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgb3IgY3JpdGljYWwgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG1pZ2h0IGJlIGluIHRoZSBsYXJnZXIgU01CIGNsaWVudCBpbmZyYXN0cnVjdHVyZS4gVGhhdCdzIHRoZSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIEkgbmVlZCBiZWZvcmUgSSBjYW4gYXNzZXNzIGl0cyByb2xlIG9yIHBvdGVudGlhbCBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzowNy42ODc3MTY1NzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMTMwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcG91bmRfc2VuZF9yZWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvY2FjaGVkX2Rpci5jPTEzND1pbnQgb3Blbl9jYWNoZWRfZGlyKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NhY2hlZF9kaXIuYy0zMjItXFxuZnMvc21iL2NsaWVudC9jYWNoZWRfZGlyLmM6MzIzOlxcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXFxuZnMvc21iL2NsaWVudC9jYWNoZWRfZGlyLmMtMzI0LVxcdFxcdFxcdFxcdGZsYWdzLCAyLCBycXN0LFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaD0xMDE9aW50IGNpZnNfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaC0xMDMtXFx0XFx0ICAgaW50ICpyZXNwX2J1Zl90eXBlLCBjb25zdCBpbnQgZmxhZ3MsIHN0cnVjdCBrdmVjICpyZXNwX2lvdik7XFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaDoxMDQ6aW50IGNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcXG5mcy9zbWIvY2xpZW50L2NpZnNwcm90by5oLTEwNS1cXHRcXHQgICAgICAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBjb25zdCBpbnQgZmxhZ3MsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJpbm9kZS5jPTIwMD1zdGF0aWMgaW50IHNtYjJfY29tcG91bmRfb3AoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmMtNTM3LVxcbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmM6NTM4OlxcdFxcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXFxuZnMvc21iL2NsaWVudC9zbWIyaW5vZGUuYy01MzktXFx0XFx0XFx0XFx0XFx0ZmxhZ3MsIG51bV9ycXN0IC0gMixcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmMtNTUwLVxcbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmM6NTUxOlxcdFxcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXFxuZnMvc21iL2NsaWVudC9zbWIyaW5vZGUuYy01NTItXFx0XFx0XFx0XFx0XFx0ZmxhZ3MsIG51bV9ycXN0LFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyaW5vZGUuYz0xMDkyPXNtYjJfdW5saW5rKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJpbm9kZS5jLTExNjctXFxuZnMvc21iL2NsaWVudC9zbWIyaW5vZGUuYzoxMTY4OlxcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgdGNvbi1cXHUwMDNlc2VzLCBzZXJ2ZXIsIGZsYWdzLFxcbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmMtMTE2OS1cXHRcXHRcXHRcXHRBUlJBWV9TSVpFKHJxc3QpLCBycXN0LFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MTE4MT1zbWIyX3NldF9lYShjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMTM0Mi1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoxMzQzOlxcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMTM0NC1cXHRcXHRcXHRcXHRmbGFncywgMywgcnFzdCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTE1Nzc9c21iMl9pb2N0bF9xdWVyeV9pbmZvKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xNzYxLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jOjE3NjI6XFx0cmMgPSBjb21wb3VuZF9zZW5kX3JlY3YoeGlkLCBzZXMsIHNlcnZlcixcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xNzYzLVxcdFxcdFxcdFxcdGZsYWdzLCAzLCBycXN0LFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MjQ4ND1zbWIyX3F1ZXJ5X2Rpcl9maXJzdChjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjU2NS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoyNTY2OlxcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgdGNvbi1cXHUwMDNlc2VzLCBzZXJ2ZXIsXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjU2Ny1cXHRcXHRcXHRcXHRmbGFncywgMiwgcnFzdCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTI4NjA9c21iMl9xdWVyeV9pbmZvX2NvbXBvdW5kKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0yOTc5LVxcdGlmIChjZmlkKSB7XFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6Mjk4MDpcXHRcXHRyYyA9IGNvbXBvdW5kX3NlbmRfcmVjdih4aWQsIHNlcywgc2VydmVyLFxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTI5ODEtXFx0XFx0XFx0XFx0XFx0ZmxhZ3MsIDEsIFxcdTAwMjZycXN0WzFdLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjk4My1cXHR9IGVsc2Uge1xcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jOjI5ODQ6XFx0XFx0cmMgPSBjb21wb3VuZF9zZW5kX3JlY3YoeGlkLCBzZXMsIHNlcnZlcixcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0yOTg1LVxcdFxcdFxcdFxcdFxcdGZsYWdzLCAzLCBycXN0LFxcbi0tXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz04NjI9aW50XFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzo4NjM6Y29tcG91bmRfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtODY0LVxcdFxcdCAgIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcixcXG4tLVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9MTEwOD1jaWZzX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcXG4tLVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtMTExMi17XFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzoxMTEzOlxcdHJldHVybiBjb21wb3VuZF9zZW5kX3JlY3YoeGlkLCBzZXMsIHNlcnZlciwgZmxhZ3MsIDEsXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMTE0LVxcdFxcdFxcdFxcdCAgcnFzdCwgcmVzcF9idWZfdHlwZSwgcmVzcF9pb3YpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzowNy43MzQ4MzcxMDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQ3MTgzMDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBjb21wb3VuZF9zZW5kX3JlY3ZgIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgY29tcG91bmRfc2VuZF9yZWN2YCBpcyBjcml0aWNhbC4gSXQncyAqZXhwb3J0ZWQqIGluIGBjaWZzcHJvdG8uaGAsIHdoaWNoIG1lYW5zIGl0J3MgYSBjb3JlIGNvbXBvbmVudCwgdXNlZCB0aHJvdWdob3V0IHRoZSBDSUZTIGNsaWVudCBjb2RlLiBUaGF0IGFscmVhZHkgcmFpc2VzIGEgZmxhZyDigJMgd2lkZXNwcmVhZCB1c2UgbWVhbnMgd2lkZXNwcmVhZCBwb3RlbnRpYWwgaW1wYWN0IGlmIHRoZXJlJ3MgYSBwcm9ibGVtLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIHdpdGhpbiBgY29tcG91bmRfc2VuZF9yZWN2YC4gU3BlY2lmaWNhbGx5LCBpdCBkZWFscyB3aXRoIGEgc2NlbmFyaW8gd2hlcmUgYG1pZGAgYXJyYXlzIGFyZW4ndCBiZWluZyBjbGVhbmVkIHVwIHByb3Blcmx5IHdoZW4gYW4gZXJyb3Igb2NjdXJzIChgcmMgXHUwMDNjIDBgKSBvciB1bmRlciBjZXJ0YWluIGZsYWcgY29uZGl0aW9ucyAoYGZsYWdzIFx1MDAyNiBDSUZTX05PX1NSVl9SU1BgKS4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgdG8gdGhlIFNNQiBjbGllbnQsIHdoaWNoIGlzIGEgYmlnIGRlYWwuIEdpdmVuIHRoYXQgaXQncyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdHlwaWNhbCBTTUIgY2xpZW50IG9wZXJhdGlvbnMsIGxpa2UgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggYSBDSUZTIHNoYXJlLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gYmUgdmVyeSBjb25jZXJuZWQgYWJvdXQuXG5cblNvLCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBsb29rcyBsaWtlIGEgcHJpbWUgdGFyZ2V0LiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gdGVzdCB0aGVzZSBjb2RlIHBhdGhzIHRob3JvdWdobHkuIFRoZSBpZGVudGlmaWVkIGZvY3VzIHN5bWJvbCBoZXJlLCBgY29tcG91bmRfc2VuZF9yZWN2YCwgYW5kIHRoZSByZWxhdGVkIGBjaWZzX3NlbmRfcmVjdmAgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgb3VyIGZvY3VzLCBidXQgd2UgbmVlZCB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vdCBvdGhlciBjb25maWdzIHRoYXQgd2UgbmVlZCB0byBiZSBhd2FyZSBvZi5cblxuV2UncmUgYWxyZWFkeSBlbmFibGluZyB0aGUgYENJRlNgIGNvbmZpZywgd2hpY2ggaXMgY29ycmVjdC4gSSdtIGdvaW5nIHRvIGRvdWJsZSBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciBgY29tcG91bmRfc2VuZF9yZWN2YCBhbmQgbG9vayBmb3IgYW55IHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCwgb3IgdGhhdCBjYWxsIGl0LCB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29tcGxldGUgcGljdHVyZSBiZWZvcmUgd2UgZGl2ZSBpbnRvIGZ1enppbmcuIEl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6MTMuNDgyMDIyNjk2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMwNTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wb3VuZF9zZW5kX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jPTg2Mj1pbnRcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjg2Mzpjb21wb3VuZF9zZW5kX3JlY3YoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy04NjQtXFx0XFx0ICAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLFxcbi0tXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz0xMTA4PWNpZnNfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxcbi0tXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMTEyLXtcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjExMTM6XFx0cmV0dXJuIGNvbXBvdW5kX3NlbmRfcmVjdih4aWQsIHNlcywgc2VydmVyLCBmbGFncywgMSxcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMTQtXFx0XFx0XFx0XFx0ICBycXN0LCByZXNwX2J1Zl90eXBlLCByZXNwX2lvdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjEzLjUzMDMzMzMxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDAzNzY2ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBzcG90bGlnaHQgaXMgb24gYGNvbXBvdW5kX3NlbmRfcmVjdmAuIFRoZSBmdXp6aW5nIHZlcmRpY3QgaXMgYSBkZWZpbml0ZSBcInllc1wiIOKAkyBXb3J0aEZ1enppbmc9dHJ1ZS4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgY29tcG91bmRfc2VuZF9yZWN2YCwgYW5kIHRoZSBgQ0lGU2AgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlIHJlYXNvbmluZyBib2lscyBkb3duIHRvIGEgZml4IHdpdGhpbiBgY29tcG91bmRfc2VuZF9yZWN2YCB3aGVyZSBpdCB3YXNuJ3QgaGFuZGxpbmcgbWlkLWFycmF5cyBwcm9wZXJseSBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IgKGByYyBcdTAwM2MgMGApIG9yIHdoZW4gYENJRlNfTk9fU1JWX1JTUGAgaXMgc2V0LiBFc3NlbnRpYWxseSwgYSBjbGVhbnVwIGlzc3VlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCBpbiB0aGUgU01CIGNsaWVudCdzIHRyYW5zcG9ydCBsYXllci4gVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoYXQgdGhpcyBsYXllciBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIFNNQiBjbGllbnQgb3BlcmF0aW9ucywgbWVhbmluZyBpdCdzIHJlYWNoYWJsZSBieSBhIGxvdCBvZiBkaWZmZXJlbnQgY2xpZW50cy4gR2l2ZW4gdGhlIGNyaXRpY2FsIHBvc2l0aW9uIG9mIHRoZSB0cmFuc3BvcnQgbGF5ZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBwYXRjaCBtaWdodCBpbnRyb2R1Y2UgYW55IG90aGVyIHN1YnRsZSBpc3N1ZXMgb3IgZXhwb3NlcyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIHdpbGwgZm9jdXMgb24gdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UgYWNyb3NzIHRoZSBTTUIgY2xpZW50J3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGVycm9yIGhhbmRsaW5nIGFuZCByZXNwb25zZSBsb2dpYyB0byBiZSBzdXJlIHRoaXMgXCJmaXhcIiBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYXR0YWNrIHZlY3RvcnMuIFRoaXMgd2FycmFudHMgYSB2ZXJ5IGNsb3NlIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTQsIk91dHB1dFRva2VucyI6MTA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjE4LjUzNDEwMjI1M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODIwODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29tcG91bmRfc2VuZF9yZWN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGNvbXBvdW5kX3NlbmRfcmVjdmAgd2hlcmUgbWlkIGFycmF5cyBhcmUgbm90IGRlbGV0ZWQgd2hlbiBgcmMgXFx1MDAzYyAwYCBvciBgZmxhZ3MgXFx1MDAyNiBDSUZTX05PX1NSVl9SU1BgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNNQiBjbGllbnQncyB0cmFuc3BvcnQgbGF5ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgU01CIGNsaWVudCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb21wb3VuZF9zZW5kX3JlY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29tcG91bmRfc2VuZF9yZWN2YCB3aGVyZSBtaWQgYXJyYXlzIGFyZSBub3QgZGVsZXRlZCB3aGVuIGByYyBcXHUwMDNjIDBgIG9yIGBmbGFncyBcXHUwMDI2IENJRlNfTk9fU1JWX1JTUGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgU01CIGNsaWVudCdzIHRyYW5zcG9ydCBsYXllciwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBTTUIgY2xpZW50IG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjE4LjYxMjkzMDA2MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg5MzgxODg2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzoxOC42MTM5MDczNDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mzg5MzcyMDY3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBjb21wb3VuZF9zZW5kX3JlY3YoKWAgdG8gZGVsZXRlIGBtaWRgIGVudHJpZXMgYW5kIG1hcmsgdGhlbSBhcyBjYW5jZWxsZWQgYmVmb3JlIHJlbGVhc2luZyB0aGUgc2VydmVyIGxvY2sgKGBjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKWApIHdoZW4gYHNtYl9zZW5kX3Jxc3QoKWAgZmFpbHMgKGByYyBcXHUwMDNjIDBgKSBvciB3aGVuIG5vIHNlcnZlciByZXNwb25zZSBpcyBleHBlY3RlZC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVhayByZWxhdGVkIHRvIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBtaWRfcV9lbnRyeWAgc3RydWN0dXJlcy5cXG5cXG5UaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdyBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSkuIEJ1Z3MgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWUsIHVzZS1hZnRlci1mcmVlLCBvciByYWNlIGNvbmRpdGlvbnMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjg0OTViODYyNTAyMTQ2NDIzNGM3YTU1MDVlZGU0ZWQ3MDg2N2Y0NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTE6NTI6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jIGIvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1xuaW5kZXggZmRmNGU1MGMyN2NlYi4uOGQxNDIyNWU5NDhiMSAxMDA2NDRcbi0tLSBhL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcbisrKyBiL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcbkBAIC05NjgsNiArOTY4LDEzIEBAIGNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcbiBcdFx0c2VydmVyLVx1MDAzZXNlcXVlbmNlX251bWJlciAtPSAyO1xuIFx0fVxuIFxuK1x0aWYgKHJjIFx1MDAzYyAwIHx8IChmbGFncyBcdTAwMjYgQ0lGU19OT19TUlZfUlNQKSkge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcnFzdDsgaSsrKSB7XG4rXHRcdFx0ZGVsZXRlX21pZChzZXJ2ZXIsIG1pZFtpXSk7XG4rXHRcdFx0Y2FuY2VsbGVkX21pZFtpXSA9IHRydWU7XG4rXHRcdH1cbitcdH1cbitcbiBcdGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpO1xuIFxuIFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjE4LjYxMzkxMTQ3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjYxODExNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBTTUIgQ2xpZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB3aXRoaW4gYGZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBgY29tcG91bmRfc2VuZF9yZWN2KClgIGZ1bmN0aW9uLiBXaGF0IGl0J3MgZG9pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgaW5jbHVkZXMgdGhpcyBjb25kaXRpb25hbCBibG9jayBvZiBjb2RlLiBFc3NlbnRpYWxseSwgaWYgYHJjYCBpcyBsZXNzIHRoYW4gemVybywgbWVhbmluZyB0aGVyZSdzIGJlZW4gc29tZSBraW5kIG9mIGVycm9yLCBvciBpZiB0aGUgYENJRlNfTk9fU1JWX1JTUGAgZmxhZyBpcyBzZXQsIHdoaWNoIHByb2JhYmx5IG1lYW5zIHdlIGRpZG4ndCBnZXQgYSBzZXJ2ZXIgcmVzcG9uc2UsIHRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggYW4gYXJyYXkgb2YgYG1pZGAgdmFsdWVzLlxuXG5Gb3IgZWFjaCBgbWlkYCwgaXQgY2FsbHMgYGRlbGV0ZV9taWQoKWAsIHByZXN1bWFibHkgdG8gY2xlYW4gdXAgYW55IHBhcnRpYWxseSBjb21wbGV0ZWQgcmVxdWVzdHMuICpUaGVuKiwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBpdCBzZXRzIGBjYW5jZWxsZWRfbWlkW2ldYCB0byBgdHJ1ZWAuIFRoaXMgbGlrZWx5IGZsYWdzIHRoYXQgcGFydGljdWxhciBNSUQgYXMgY2FuY2VsbGVkLCB3aGljaCBpcyBsaWtlbHkgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMgbGF0ZXIgb24gZG93biB0aGUgbGluZS4gSXQncyBhIHByZXR0eSBzdGFuZGFyZCBlcnJvci1oYW5kbGluZyBhbmQgY2xlYW51cCBhcHByb2FjaCwgYnV0IEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIGhvdyB0aGlzIGltcGFjdHMgdGhlIG92ZXJhbGwgZmxvdyBvZiB0aGUgY29tcG91bmQgbWVzc2FnZSBoYW5kbGluZywgc28gbGV0IG1lIGdvIGhhdmUgYSBsb29rIGF0IHRoZSBgY29tcG91bmRfc2VuZF9yZWN2YCBmdW5jdGlvbiBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzoyMy44NzU3MjYwMjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjU0MTEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wb3VuZF9zZW5kX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jPTg2Mj1pbnRcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjg2Mzpjb21wb3VuZF9zZW5kX3JlY3YoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy04NjQtXFx0XFx0ICAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLFxcbi0tXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz0xMTA4PWNpZnNfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxcbi0tXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMTEyLXtcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjExMTM6XFx0cmV0dXJuIGNvbXBvdW5kX3NlbmRfcmVjdih4aWQsIHNlcywgc2VydmVyLCBmbGFncywgMSxcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMTQtXFx0XFx0XFx0XFx0ICBycXN0LCByZXNwX2J1Zl90eXBlLCByZXNwX2lvdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjI0LjE1ODI3NDM2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA2OTMxMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgU01CIENsaWVudCBUcmFuc3BvcnQgTGF5ZXIqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgY29tcG91bmRfc2VuZF9yZWN2YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBhdCBpdCB3aXRoaW4gYGZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIFNNQiBjbGllbnQgdHJhbnNwb3J0IGxvZ2ljIHJlc2lkZXMsIHNvIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBkYXRhIGlzIGFjdHVhbGx5IHNlbnQgYW5kIHJlY2VpdmVkIG92ZXIgdGhlIG5ldHdvcmsuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgaG93IHJlcXVlc3RzIGFyZSBjb25zdHJ1Y3RlZCwgcGFja2V0aXplZCwgYW5kIHNlbnQsIGFuZCBob3cgcmVzcG9uc2VzIGFyZSBwYXJzZWQgYW5kIGhhbmRsZWQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGRlYWxzIHdpdGggY29tcG91bmQgcmVxdWVzdHMsIHNpbmNlIHRoYXQncyBhIGtleSBvcHRpbWl6YXRpb24gaW4gdGhlIFNNQiBwcm90b2NvbC4gSG9wZWZ1bGx5LCB0aGlzIGZ1bmN0aW9uIGlzIHdlbGwtc3RydWN0dXJlZCBhbmQgZG9jdW1lbnRlZCwgbWFraW5nIGl0IGVhc2llciB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MDYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzoyNy43NjUyMDc2ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODYyLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MjpcXHRpbnRcXG4gODYzOlxcdGNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcXG4gODY0OlxcdFxcdFxcdCAgIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcixcXG4gODY1OlxcdFxcdFxcdCAgIGNvbnN0IGludCBmbGFncywgY29uc3QgaW50IG51bV9ycXN0LCBzdHJ1Y3Qgc21iX3Jxc3QgKnJxc3QsXFxuIDg2NjpcXHRcXHRcXHQgICBpbnQgKnJlc3BfYnVmX3R5cGUsIHN0cnVjdCBrdmVjICpyZXNwX2lvdilcXG4gODY3OlxcdHtcXG4gODY4OlxcdFxcdGludCBpLCBqLCBvcHR5cGUsIHJjID0gMDtcXG4gODY5OlxcdFxcdHN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkW01BWF9DT01QT1VORF07XFxuIDg3MDpcXHRcXHRib29sIGNhbmNlbGxlZF9taWRbTUFYX0NPTVBPVU5EXSA9IHtmYWxzZX07XFxuIDg3MTpcXHRcXHRzdHJ1Y3QgY2lmc19jcmVkaXRzIGNyZWRpdHNbTUFYX0NPTVBPVU5EXSA9IHtcXG4gODcyOlxcdFxcdFxcdHsgLnZhbHVlID0gMCwgLmluc3RhbmNlID0gMCB9XFxuIDg3MzpcXHRcXHR9O1xcbiA4NzQ6XFx0XFx0dW5zaWduZWQgaW50IGluc3RhbmNlO1xcbiA4NzU6XFx0XFx0Y2hhciAqYnVmO1xcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHRvcHR5cGUgPSBmbGFncyBcXHUwMDI2IENJRlNfT1BfTUFTSztcXG4gODc4OlxcdFxcbiA4Nzk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9ycXN0OyBpKyspXFxuIDg4MDpcXHRcXHRcXHRyZXNwX2J1Zl90eXBlW2ldID0gQ0lGU19OT19CVUZGRVI7ICAvKiBubyByZXNwb25zZSBidWYgeWV0ICovXFxuIDg4MTpcXHRcXG4gODgyOlxcdFxcdGlmICghc2VzIHx8ICFzZXMtXFx1MDAzZXNlcnZlciB8fCAhc2VydmVyKSB7XFxuIDg4MzpcXHRcXHRcXHRjaWZzX2RiZyhWRlMsIFxcXCJOdWxsIHNlc3Npb25cXFxcblxcXCIpO1xcbiA4ODQ6XFx0XFx0XFx0cmV0dXJuIHNtYl9FSU8oc21iX2Vpb190cmFjZV9udWxsX3BvaW50ZXJzKTtcXG4gODg1OlxcdFxcdH1cXG4gODg2OlxcdFxcbiA4ODc6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZXNydl9sb2NrKTtcXG4gODg4OlxcdFxcdGlmIChzZXJ2ZXItXFx1MDAzZXRjcFN0YXR1cyA9PSBDaWZzRXhpdGluZykge1xcbiA4ODk6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNlcnZlci1cXHUwMDNlc3J2X2xvY2spO1xcbiA4OTA6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDg5MTpcXHRcXHR9XFxuIDg5MjpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2VydmVyLVxcdTAwM2VzcnZfbG9jayk7XFxuIDg5MzpcXHRcXG4gODk0OlxcdFxcdC8qXFxuIDg5NTpcXHRcXHQgKiBXYWl0IGZvciBhbGwgdGhlIHJlcXVlc3RzIHRvIGJlY29tZSBhdmFpbGFibGUuXFxuIDg5NjpcXHRcXHQgKiBUaGlzIGFwcHJvYWNoIHN0aWxsIGxlYXZlcyB0aGUgcG9zc2liaWxpdHkgdG8gYmUgc3R1Y2sgd2FpdGluZyBmb3JcXG4gODk3OlxcdFxcdCAqIGNyZWRpdHMgaWYgdGhlIHNlcnZlciBkb2Vzbid0IGdyYW50IGNyZWRpdHMgdG8gdGhlIG91dHN0YW5kaW5nXFxuIDg5ODpcXHRcXHQgKiByZXF1ZXN0cyBhbmQgaWYgdGhlIGNsaWVudCBpcyBjb21wbGV0ZWx5IGlkbGUsIG5vdCBnZW5lcmF0aW5nIGFueVxcbiA4OTk6XFx0XFx0ICogb3RoZXIgcmVxdWVzdHMuXFxuIDkwMDpcXHRcXHQgKiBUaGlzIGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBldmVudHVhbCBzZXNzaW9uIHJlY29ubmVjdC5cXG4gOTAxOlxcdFxcdCAqL1xcbiA5MDI6XFx0XFx0cmMgPSB3YWl0X2Zvcl9jb21wb3VuZF9yZXF1ZXN0KHNlcnZlciwgbnVtX3Jxc3QsIGZsYWdzLFxcbiA5MDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpbnN0YW5jZSk7XFxuIDkwNDpcXHRcXHRpZiAocmMpXFxuIDkwNTpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIDkwNjpcXHRcXG4gOTA3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcnFzdDsgaSsrKSB7XFxuIDkwODpcXHRcXHRcXHRjcmVkaXRzW2ldLnZhbHVlID0gMTtcXG4gOTA5OlxcdFxcdFxcdGNyZWRpdHNbaV0uaW5zdGFuY2UgPSBpbnN0YW5jZTtcXG4gOTEwOlxcdFxcdH1cXG4gOTExOlxcdFxcbiA5MTI6XFx0XFx0LypcXG4gOTEzOlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGF0IHdlIHNpZ24gaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB3ZSBzZW5kIG9uIHRoaXMgc29ja2V0XFxuIDkxNDpcXHRcXHQgKiBhbmQgYXZvaWQgcmFjZXMgaW5zaWRlIHRjcCBzZW5kbXNnIGNvZGUgdGhhdCBjb3VsZCBjYXVzZSBjb3JydXB0aW9uXFxuIDkxNTpcXHRcXHQgKiBvZiBzbWIgZGF0YS5cXG4gOTE2OlxcdFxcdCAqL1xcbiA5MTc6XFx0XFxuIDkxODpcXHRcXHRjaWZzX3NlcnZlcl9sb2NrKHNlcnZlcik7XFxuIDkxOTpcXHRcXG4gOTIwOlxcdFxcdC8qXFxuIDkyMTpcXHRcXHQgKiBBbGwgdGhlIHBhcnRzIG9mIHRoZSBjb21wb3VuZCBjaGFpbiBiZWxvbmcgb2J0YWluZWQgY3JlZGl0cyBmcm9tIHRoZVxcbiA5MjI6XFx0XFx0ICogc2FtZSBzZXNzaW9uLiBXZSBjYW4gbm90IHVzZSBjcmVkaXRzIG9idGFpbmVkIGZyb20gdGhlIHByZXZpb3VzXFxuIDkyMzpcXHRcXHQgKiBzZXNzaW9uIHRvIHNlbmQgdGhpcyByZXF1ZXN0LiBDaGVjayBpZiB0aGVyZSB3ZXJlIHJlY29ubmVjdHMgYWZ0ZXJcXG4gOTI0OlxcdFxcdCAqIHdlIG9idGFpbmVkIGNyZWRpdHMgYW5kIHJldHVybiAtRUFHQUlOIGluIHN1Y2ggY2FzZXMgdG8gbGV0IGNhbGxlcnNcXG4gOTI1OlxcdFxcdCAqIGhhbmRsZSBpdC5cXG4gOTI2OlxcdFxcdCAqL1xcbiA5Mjc6XFx0XFx0aWYgKGluc3RhbmNlICE9IHNlcnZlci1cXHUwMDNlcmVjb25uZWN0X2luc3RhbmNlKSB7XFxuIDkyODpcXHRcXHRcXHRjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKTtcXG4gOTI5OlxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBudW1fcnFzdDsgaisrKVxcbiA5MzA6XFx0XFx0XFx0XFx0YWRkX2NyZWRpdHMoc2VydmVyLCBcXHUwMDI2Y3JlZGl0c1tqXSwgb3B0eXBlKTtcXG4gOTMxOlxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiA5MzI6XFx0XFx0fVxcbiA5MzM6XFx0XFxuIDkzNDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3Jxc3Q7IGkrKykge1xcbiA5MzU6XFx0XFx0XFx0bWlkW2ldID0gc2VydmVyLVxcdTAwM2VvcHMtXFx1MDAzZXNldHVwX3JlcXVlc3Qoc2VzLCBzZXJ2ZXIsIFxcdTAwMjZycXN0W2ldKTtcXG4gOTM2OlxcdFxcdFxcdGlmIChJU19FUlIobWlkW2ldKSkge1xcbiA5Mzc6XFx0XFx0XFx0XFx0cmV2ZXJ0X2N1cnJlbnRfbWlkKHNlcnZlciwgaSk7XFxuIDkzODpcXHRcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaTsgaisrKVxcbiA5Mzk6XFx0XFx0XFx0XFx0XFx0ZGVsZXRlX21pZChzZXJ2ZXIsIG1pZFtqXSk7XFxuIDk0MDpcXHRcXHRcXHRcXHRjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKTtcXG4gOTQxOlxcdFxcbiA5NDI6XFx0XFx0XFx0XFx0LyogVXBkYXRlICMgb2YgcmVxdWVzdHMgb24gd2lyZSB0byBzZXJ2ZXIgKi9cXG4gOTQzOlxcdFxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBudW1fcnFzdDsgaisrKVxcbiA5NDQ6XFx0XFx0XFx0XFx0XFx0YWRkX2NyZWRpdHMoc2VydmVyLCBcXHUwMDI2Y3JlZGl0c1tqXSwgb3B0eXBlKTtcXG4gOTQ1OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKG1pZFtpXSk7XFxuIDk0NjpcXHRcXHRcXHR9XFxuIDk0NzpcXHRcXG4gOTQ4OlxcdFxcdFxcdG1pZFtpXS1cXHUwMDNlc3JfZmxhZ3MgPSBmbGFncztcXG4gOTQ5OlxcdFxcdFxcdG1pZFtpXS1cXHUwMDNlbWlkX3N0YXRlID0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEO1xcbiA5NTA6XFx0XFx0XFx0bWlkW2ldLVxcdTAwM2VvcHR5cGUgPSBvcHR5cGU7XFxuIDk1MTpcXHRcXHRcXHQvKlxcbiA5NTI6XFx0XFx0XFx0ICogSW52b2tlIGNhbGxiYWNrIGZvciBldmVyeSBwYXJ0IG9mIHRoZSBjb21wb3VuZCBjaGFpblxcbiA5NTM6XFx0XFx0XFx0ICogdG8gY2FsY3VsYXRlIGNyZWRpdHMgcHJvcGVybHkuIFdha2UgdXAgdGhpcyB0aHJlYWQgb25seSB3aGVuXFxuIDk1NDpcXHRcXHRcXHQgKiB0aGUgbGFzdCBlbGVtZW50IGlzIHJlY2VpdmVkLlxcbiA5NTU6XFx0XFx0XFx0ICovXFxuIDk1NjpcXHRcXHRcXHRpZiAoaSBcXHUwMDNjIG51bV9ycXN0IC0gMSlcXG4gOTU3OlxcdFxcdFxcdFxcdG1pZFtpXS1cXHUwMDNlY2FsbGJhY2sgPSBjaWZzX2NvbXBvdW5kX2NhbGxiYWNrO1xcbiA5NTg6XFx0XFx0XFx0ZWxzZVxcbiA5NTk6XFx0XFx0XFx0XFx0bWlkW2ldLVxcdTAwM2VjYWxsYmFjayA9IGNpZnNfY29tcG91bmRfbGFzdF9jYWxsYmFjaztcXG4gOTYwOlxcdFxcdH1cXG4gOTYxOlxcdFxcdHJjID0gc21iX3NlbmRfcnFzdChzZXJ2ZXIsIG51bV9ycXN0LCBycXN0LCBmbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjI3Ljc2NTMxODMwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQzOTI3NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBjb21wb3VuZF9zZW5kX3JlY3ZgKipcblxuQWxyaWdodCwgdGltZSB0byByZXZpc2l0IGBjb21wb3VuZF9zZW5kX3JlY3ZgLiBJIGtub3cgdGhlIGhpZ2gtbGV2ZWwgYXJjaGl0ZWN0dXJlLCBidXQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZ3JhbnVsYXIgZGV0YWlscy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGEgY3Vyc29yeSByZXZpZXc7IEknbSBsb29raW5nIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBib3R0bGVuZWNrcywgc3VidGxlIGltcGxlbWVudGF0aW9uIG51YW5jZXMsIG9yIHBlcmhhcHMgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9uIGNvdWxkIGJlIGFjaGlldmVkLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHVuZGVybHlpbmcgaGFyZHdhcmUsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhlIG92ZXJhbGwgZGF0YSBmbG93LiBJcyBpdCB0aHJlYWQtc2FmZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB2YXJpb3VzIGRhdGEgYnVmZmVyIHNpemVzIG9uIHBlcmZvcm1hbmNlPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgYW5kIHdoYXQgdGhlIHJlY292ZXJ5IG1lY2hhbmlzbXMgbG9vayBsaWtlLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3Bwb3J0dW5pdGllcyBmb3Igc3F1ZWV6aW5nIG91dCBldmVuIG1vcmUgZWZmaWNpZW5jeSwgb3IgcGVyaGFwcyB1bmNvdmVyaW5nIGhpZGRlbiBjb21wbGV4aXRpZXMgdGhhdCBJIG1pZ2h0IG5vdCBoYXZlIGluaXRpYWxseSBjb25zaWRlcmVkLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTQ2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzozMS4xMDkyNDgyNzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTYyLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk2MjpcXHRcXG4gOTYzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcnFzdDsgaSsrKVxcbiA5NjQ6XFx0XFx0XFx0Y2lmc19zYXZlX3doZW5fc2VudChtaWRbaV0pO1xcbiA5NjU6XFx0XFxuIDk2NjpcXHRcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuIDk2NzpcXHRcXHRcXHRyZXZlcnRfY3VycmVudF9taWQoc2VydmVyLCBudW1fcnFzdCk7XFxuIDk2ODpcXHRcXHRcXHRzZXJ2ZXItXFx1MDAzZXNlcXVlbmNlX251bWJlciAtPSAyO1xcbiA5Njk6XFx0XFx0fVxcbiA5NzA6XFx0XFxuIDk3MTpcXHRcXHRpZiAocmMgXFx1MDAzYyAwIHx8IChmbGFncyBcXHUwMDI2IENJRlNfTk9fU1JWX1JTUCkpIHtcXG4gOTcyOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcnFzdDsgaSsrKSB7XFxuIDk3MzpcXHRcXHRcXHRcXHRkZWxldGVfbWlkKHNlcnZlciwgbWlkW2ldKTtcXG4gOTc0OlxcdFxcdFxcdFxcdGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlO1xcbiA5NzU6XFx0XFx0XFx0fVxcbiA5NzY6XFx0XFx0fVxcbiA5Nzc6XFx0XFxuIDk3ODpcXHRcXHRjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKTtcXG4gOTc5OlxcdFxcbiA5ODA6XFx0XFx0LypcXG4gOTgxOlxcdFxcdCAqIElmIHNlbmRpbmcgZmFpbGVkIGZvciBzb21lIHJlYXNvbiBvciBpdCBpcyBhbiBvcGxvY2sgYnJlYWsgdGhhdCB3ZVxcbiA5ODI6XFx0XFx0ICogd2lsbCBub3QgcmVjZWl2ZSBhIHJlc3BvbnNlIHRvIC0gcmV0dXJuIGNyZWRpdHMgYmFja1xcbiA5ODM6XFx0XFx0ICovXFxuIDk4NDpcXHRcXHRpZiAocmMgXFx1MDAzYyAwIHx8IChmbGFncyBcXHUwMDI2IENJRlNfTk9fU1JWX1JTUCkpIHtcXG4gOTg1OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcnFzdDsgaSsrKVxcbiA5ODY6XFx0XFx0XFx0XFx0YWRkX2NyZWRpdHMoc2VydmVyLCBcXHUwMDI2Y3JlZGl0c1tpXSwgb3B0eXBlKTtcXG4gOTg3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA5ODg6XFx0XFx0fVxcbiA5ODk6XFx0XFxuIDk5MDpcXHRcXHQvKlxcbiA5OTE6XFx0XFx0ICogQXQgdGhpcyBwb2ludCB0aGUgcmVxdWVzdCBpcyBwYXNzZWQgdG8gdGhlIG5ldHdvcmsgc3RhY2sgLSB3ZSBhc3N1bWVcXG4gOTkyOlxcdFxcdCAqIHRoYXQgYW55IGNyZWRpdHMgdGFrZW4gZnJvbSB0aGUgc2VydmVyIHN0cnVjdHVyZSBvbiB0aGUgY2xpZW50IGhhdmVcXG4gOTkzOlxcdFxcdCAqIGJlZW4gc3BlbnQgYW5kIHdlIGNhbid0IHJldHVybiB0aGVtIGJhY2suIE9uY2Ugd2UgcmVjZWl2ZSByZXNwb25zZXNcXG4gOTk0OlxcdFxcdCAqIHdlIHdpbGwgY29sbGVjdCBjcmVkaXRzIGdyYW50ZWQgYnkgdGhlIHNlcnZlciBpbiB0aGUgbWlkIGNhbGxiYWNrc1xcbiA5OTU6XFx0XFx0ICogYW5kIGFkZCB0aG9zZSBjcmVkaXRzIHRvIHRoZSBzZXJ2ZXIgc3RydWN0dXJlLlxcbiA5OTY6XFx0XFx0ICovXFxuIDk5NzpcXHRcXG4gOTk4OlxcdFxcdC8qXFxuIDk5OTpcXHRcXHQgKiBDb21wb3VuZGluZyBpcyBuZXZlciB1c2VkIGR1cmluZyBzZXNzaW9uIGVzdGFibGlzaC5cXG4xMDAwOlxcdFxcdCAqL1xcbjEwMDE6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZXMtXFx1MDAzZXNlc19sb2NrKTtcXG4xMDAyOlxcdFxcdGlmICgoc2VzLVxcdTAwM2VzZXNfc3RhdHVzID09IFNFU19ORVcpIHx8IChvcHR5cGUgXFx1MDAyNiBDSUZTX05FR19PUCkgfHwgKG9wdHlwZSBcXHUwMDI2IENJRlNfU0VTU19PUCkpIHtcXG4xMDAzOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzZXMtXFx1MDAzZXNlc19sb2NrKTtcXG4xMDA0OlxcdFxcbjEwMDU6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShudW1fcnFzdCAhPSAxIHx8ICFyZXNwX2lvdikpXFxuMTAwNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDA3OlxcdFxcbjEwMDg6XFx0XFx0XFx0Y2lmc19zZXJ2ZXJfbG9jayhzZXJ2ZXIpO1xcbjEwMDk6XFx0XFx0XFx0c21iMzExX3VwZGF0ZV9wcmVhdXRoX2hhc2goc2VzLCBzZXJ2ZXIsIHJxc3RbMF0ucnFfaW92LCBycXN0WzBdLnJxX252ZWMpO1xcbjEwMTA6XFx0XFx0XFx0Y2lmc19zZXJ2ZXJfdW5sb2NrKHNlcnZlcik7XFxuMTAxMTpcXHRcXG4xMDEyOlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2VzLVxcdTAwM2VzZXNfbG9jayk7XFxuMTAxMzpcXHRcXHR9XFxuMTAxNDpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2VzLVxcdTAwM2VzZXNfbG9jayk7XFxuMTAxNTpcXHRcXG4xMDE2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcnFzdDsgaSsrKSB7XFxuMTAxNzpcXHRcXHRcXHRyYyA9IHdhaXRfZm9yX3Jlc3BvbnNlKHNlcnZlciwgbWlkW2ldKTtcXG4xMDE4OlxcdFxcdFxcdGlmIChyYyAhPSAwKVxcbjEwMTk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTAyMDpcXHRcXHR9XFxuMTAyMTpcXHRcXHRpZiAocmMgIT0gMCkge1xcbjEwMjI6XFx0XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBudW1fcnFzdDsgaSsrKSB7XFxuMTAyMzpcXHRcXHRcXHRcXHRjaWZzX3NlcnZlcl9kYmcoRllJLCBcXFwiQ2FuY2VsbGluZyB3YWl0IGZvciBtaWQgJWxsdSBjbWQ6ICVkXFxcXG5cXFwiLFxcbjEwMjQ6XFx0XFx0XFx0XFx0XFx0IG1pZFtpXS1cXHUwMDNlbWlkLCBsZTE2X3RvX2NwdShtaWRbaV0tXFx1MDAzZWNvbW1hbmQpKTtcXG4xMDI1OlxcdFxcdFxcdFxcdHNlbmRfY2FuY2VsKHNlcywgc2VydmVyLCBcXHUwMDI2cnFzdFtpXSwgbWlkW2ldLCB4aWQpO1xcbjEwMjY6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZtaWRbaV0tXFx1MDAzZW1pZF9sb2NrKTtcXG4xMDI3OlxcdFxcdFxcdFxcdG1pZFtpXS1cXHUwMDNld2FpdF9jYW5jZWxsZWQgPSB0cnVlO1xcbjEwMjg6XFx0XFx0XFx0XFx0aWYgKG1pZFtpXS1cXHUwMDNlbWlkX3N0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCB8fFxcbjEwMjk6XFx0XFx0XFx0XFx0ICAgIG1pZFtpXS1cXHUwMDNlbWlkX3N0YXRlID09IE1JRF9SRVNQT05TRV9SRUNFSVZFRCkge1xcbjEwMzA6XFx0XFx0XFx0XFx0XFx0bWlkW2ldLVxcdTAwM2VjYWxsYmFjayA9IGNpZnNfY2FuY2VsbGVkX2NhbGxiYWNrO1xcbjEwMzE6XFx0XFx0XFx0XFx0XFx0Y2FuY2VsbGVkX21pZFtpXSA9IHRydWU7XFxuMTAzMjpcXHRcXHRcXHRcXHRcXHRjcmVkaXRzW2ldLnZhbHVlID0gMDtcXG4xMDMzOlxcdFxcdFxcdFxcdH1cXG4xMDM0OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtaWRbaV0tXFx1MDAzZW1pZF9sb2NrKTtcXG4xMDM1OlxcdFxcdFxcdH1cXG4xMDM2OlxcdFxcdH1cXG4xMDM3OlxcdFxcbjEwMzg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9ycXN0OyBpKyspIHtcXG4xMDM5OlxcdFxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuMTA0MDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDQxOlxcdFxcbjEwNDI6XFx0XFx0XFx0cmMgPSBjaWZzX3N5bmNfbWlkX3Jlc3VsdChtaWRbaV0sIHNlcnZlcik7XFxuMTA0MzpcXHRcXHRcXHRpZiAocmMgIT0gMCkge1xcbjEwNDQ6XFx0XFx0XFx0XFx0LyogbWFyayB0aGlzIG1pZCBhcyBjYW5jZWxsZWQgdG8gbm90IGZyZWUgaXQgYmVsb3cgKi9cXG4xMDQ1OlxcdFxcdFxcdFxcdGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlO1xcbjEwNDY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTA0NzpcXHRcXHRcXHR9XFxuMTA0ODpcXHRcXG4xMDQ5OlxcdFxcdFxcdGlmICghbWlkW2ldLVxcdTAwM2VyZXNwX2J1ZiB8fFxcbjEwNTA6XFx0XFx0XFx0ICAgIG1pZFtpXS1cXHUwMDNlbWlkX3N0YXRlICE9IE1JRF9SRVNQT05TRV9SRUFEWSkge1xcbjEwNTE6XFx0XFx0XFx0XFx0cmMgPSBzbWJfRUlPMShzbWJfZWlvX3RyYWNlX3J4X21pZF91bnJlYWR5LCBtaWRbaV0tXFx1MDAzZW1pZF9zdGF0ZSk7XFxuMTA1MjpcXHRcXHRcXHRcXHRjaWZzX2RiZyhGWUksIFxcXCJCYWQgTUlEIHN0YXRlP1xcXFxuXFxcIik7XFxuMTA1MzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDU0OlxcdFxcdFxcdH1cXG4xMDU1OlxcdFxcbjEwNTY6XFx0XFx0XFx0cmMgPSBzZXJ2ZXItXFx1MDAzZW9wcy1cXHUwMDNlY2hlY2tfcmVjZWl2ZShtaWRbaV0sIHNlcnZlcixcXG4xMDU3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjYgQ0lGU19MT0dfRVJST1IpO1xcbjEwNTg6XFx0XFxuMTA1OTpcXHRcXHRcXHRpZiAocmVzcF9pb3YpIHtcXG4xMDYwOlxcdFxcdFxcdFxcdGJ1ZiA9IChjaGFyICopbWlkW2ldLVxcdTAwM2VyZXNwX2J1ZjtcXG4xMDYxOlxcdFxcdFxcdFxcdHJlc3BfaW92W2ldLmlvdl9iYXNlID0gYnVmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzozMS4xMDkzNTg4NzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2NDQ3OTAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBwYXRjaC4gSXQncyBhZGRpbmcgdGhpcyBjb2RlIGJsb2NrOlxuXG5gYGBjXG5cdGlmIChyYyBcdTAwM2MgMCB8fCAoZmxhZ3MgXHUwMDI2IENJRlNfTk9fU1JWX1JTUCkpIHtcblx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcnFzdDsgaSsrKSB7XG5cdFx0XHRkZWxldGVfbWlkKHNlcnZlciwgbWlkW2ldKTtcblx0XHRcdGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlO1xuXHRcdH1cblx0fVxuYGBgXG5cblJpZ2h0IGF3YXksIEkgc2VlIHRoaXMgaXMgbGlrZWx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgYSBtZW1vcnkgbGVhay4gSWYgdGhlIHJldHVybiBjb2RlLCBgcmNgLCBpcyBuZWdhdGl2ZSwgb3IgdGhlIGBDSUZTX05PX1NSVl9SU1BgIGZsYWcgaXMgc2V0LCB3aGljaCBwcm9iYWJseSBtZWFucyB3ZSBkaWRuJ3QgZ2V0IGEgc2VydmVyIHJlc3BvbnNlLCB0aGVuIHRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggc29tZSBtaWRzLCB3aGljaCBJJ20gaW5mZXJyaW5nIGFyZSBtZXNzYWdlIGlkZW50aWZpZXJzLiBJbnNpZGUgdGhpcyBsb29wLCBgZGVsZXRlX21pZGAgaXMgY2FsbGVkLCBhbmQgdGhlbiBhIGBjYW5jZWxsZWRfbWlkYCBmbGFnIGlzIHNldC4gVGhhdCBzdWdnZXN0cyB3ZSBhcmUgY2xlYW5pbmcgdXAgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBtaWRzIGFuZCBtYXJraW5nIHRoZW0gYXMgaGFuZGxlZC5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoYXQgYGRlbGV0ZV9taWRgIGNhbGwuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHdoYXQncyBnb2luZyBvbiBpbiB0aGVyZS4gV2UgbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgdGhlIG1pZCdzIHJlc291cmNlcyBhcmUgY29ycmVjdGx5IGZyZWVkIHRvIHByZXZlbnQgYW55IGZvcm0gb2YgdXNlLWFmdGVyLWZyZWUgYW5kL29yIG1lbW9yeSBsZWFrcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBoYW5kbGluZyBhbiBlcnJvciBjb25kaXRpb24gb3IgYSBsYWNrIG9mIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciwgd2hpY2ggY291bGQgZWFzaWx5IGxlYWQgdG8gZGFuZ2xpbmcgcG9pbnRlcnMgaWYgbm90IGhhbmRsZWQgY2FyZWZ1bGx5LiBUaGlzIGlzIGEgcmVhc29uYWJsZSBwYXRjaCBhbmQgSSB3aWxsIGludmVzdGlnYXRlIHRoZSBgZGVsZXRlX21pZGAgZnVuY3Rpb24gdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6MzYuMTczODQwNjI5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU3NzczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWxldGVfbWlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz0xMTg9dm9pZFxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6MTE5OmRlbGV0ZV9taWQoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBzdHJ1Y3QgbWlkX3FfZW50cnkgKm1pZClcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTEyMC17XFxuLS1cXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jPTY2Mz1jaWZzX2NhbGxfYXN5bmMoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBzdHJ1Y3Qgc21iX3Jxc3QgKnJxc3QsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTcyNi1cXHRcXHRzZXJ2ZXItXFx1MDAzZXNlcXVlbmNlX251bWJlciAtPSAyO1xcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6NzI3OlxcdFxcdGRlbGV0ZV9taWQoc2VydmVyLCBtaWQpO1xcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtNzI4LVxcdH1cXG4tLVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9ODYzPWNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcXG4tLVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtOTM4LVxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBpOyBqKyspXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzo5Mzk6XFx0XFx0XFx0XFx0ZGVsZXRlX21pZChzZXJ2ZXIsIG1pZFtqXSk7XFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy05NDAtXFx0XFx0XFx0Y2lmc19zZXJ2ZXJfdW5sb2NrKHNlcnZlcik7XFxuLS1cXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTk3Mi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3Jxc3Q7IGkrKykge1xcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6OTczOlxcdFxcdFxcdGRlbGV0ZV9taWQoc2VydmVyLCBtaWRbaV0pO1xcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtOTc0LVxcdFxcdFxcdGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlO1xcbi0tXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMDY4LVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6MTA2OTpcXHRcXHRcXHQvKiBtYXJrIGl0IHNvIGJ1ZiB3aWxsIG5vdCBiZSBmcmVlZCBieSBkZWxldGVfbWlkICovXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMDcwLVxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDSUZTX05PX1JTUF9CVUYpID09IDApXFxuLS1cXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMDAtXFx0XFx0aWYgKCFjYW5jZWxsZWRfbWlkW2ldKVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6MTEwMTpcXHRcXHRcXHRkZWxldGVfbWlkKHNlcnZlciwgbWlkW2ldKTtcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMDItXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzozNi4yMjU0MjU4MDdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0NzI2MDg5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNaWQgRGVsZXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBwcm9wZXIgcmVzb3VyY2UgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBkZWxldGluZyBgbWlkYCBlbnRyaWVzIGluIHRoZSBDSUZTIGNsaWVudCBjb2RlLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGJ1dCBhZnRlciBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0J3Mgbm90IHRoZSBwcm9ibGVtIGhlcmUuIGBtaWRgIGlzIGEgYHN0cnVjdCBtaWRfcV9lbnRyeWAsIHByb3Blcmx5IGFsbG9jYXRlZCBhbmQgbWFuYWdlZCBieSB0aGUgU01CIGNsaWVudCBpdHNlbGYuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9vcCB0aGF0IGNhbGxzIGBkZWxldGVfbWlkYCBpZiBgc21iX3NlbmRfcnFzdGAgZmFpbHMgKHJldHVybnMgYHJjIFx1MDAzYyAwYCkgb3IgaWYgdGhlIGBDSUZTX05PX1NSVl9SU1BgIGZsYWcgaXMgc2V0LiBJdCBhbHNvIHNldHMgYGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlYCB0byBhdm9pZCBjYWxsaW5nIGBkZWxldGVfbWlkYCBsYXRlciBvbi5cblxuTXkgaW5pdGlhbCByZWFjdGlvbiB3YXMgdGhhdCB0aGUgY29kZSB3YXMgcmVkdW5kYW50LCBiZWNhdXNlIEkgY291bGQgc2VlIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgYWxyZWFkeSBjYWxscyBgZGVsZXRlX21pZGAgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gaW4gYWxsIGNhc2VzLCBldmVuIHdoZW4gYHJjIFx1MDAzYyAwYCBvciBgQ0lGU19OT19TUlZfUlNQYCBpcyBzZXQuIEJ1dCBsb29raW5nIGF0IHRoZSBvcmlnaW5hbCBjb2RlLCBpZiBgcmMgXHUwMDNjIDBgLCBpdCBnb2VzIHRvIGBvdXRgLCBhbmQgdGhlbiBpdCBjYWxscyBgZGVsZXRlX21pZGAgd2l0aCBgY2FuY2VsbGVkX21pZFtpXWAgYXMgZmFsc2UsIHdoaWNoIEkgdGhvdWdodCBjb3VsZCBiZSBhIHByb2JsZW0uIFNvLCBJIGR1ZyBhIGxpdHRsZSBkZWVwZXIsIGFuZCByZWFsaXplZCB0aGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGFuZCB0aGUgcm9sZSBvZiBgZGVsZXRlX21pZGAuIGBkZWxldGVfbWlkYCBsaWtlbHkgcmVtb3ZlcyB0aGUgYG1pZGAgZW50cnkgZnJvbSB0aGUgc2VydmVyJ3MgcGVuZGluZyBtaWQgbGlzdCwgd2hpY2ggaXMgcHJvYmFibHkgcHJvdGVjdGVkIGJ5IGEgbG9jayAobGlrZSBgc2VydmVyLVx1MDAzZXNydl9sb2NrYCBvciBzb21ldGhpbmcgc2ltaWxhcikuIFRoYXQgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgYGRlbGV0ZV9taWRgIHByb2JhYmx5IG5lZWRzIHRoZSBsb2NrLCBzbyBpdCdzIGJlc3QgdG8gY2FsbCBpdCBiZWZvcmUgYGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpYCBvciBhdCBsZWFzdCBiZWZvcmUgd2UgZG8gYW55dGhpbmcgdGhhdCByZWxlYXNlcyB0aGF0IGxvY2suXG5cblNvLCBpbiB0aGUgb3JpZ2luYWwgY29kZSwgaWYgYHNtYl9zZW5kX3Jxc3RgIGZhaWxzLCB3ZSBoaXQgYG91dGAuIFRoZSBgZGVsZXRlX21pZGAgYXQgdGhlIGVuZCBpcyB1bm5lY2Vzc2FyeSBpZiB0aGUgbWlkIGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwZW5kaW5nIGxpc3QgZWFybGllciBpbiB0aGUgZmxvdy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IGNvcnJlY3RpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgbWlkIGxpc3QgYnkgZGVsZXRpbmcgdGhlIGBtaWRgIHByaW9yIHRvIHJlbGVhc2luZyB0aGUgc2VydmVyIGxvY2suIFRoYXQgbWFrZXMgdGhpcyBhIGNydWNpYWwgZml4IGZvciBlbnN1cmluZyBkYXRhIGludGVncml0eSBhbmQgcHJldmVudGluZyB0aG9zZSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDkzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjQ3LjY5ODAzNzYyMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTg6XFx0dm9pZFxcbiAxMTk6XFx0ZGVsZXRlX21pZChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkKVxcbiAxMjA6XFx0e1xcbiAxMjE6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZW1pZF9xdWV1ZV9sb2NrKTtcXG4gMTIyOlxcdFxcbiAxMjM6XFx0XFx0aWYgKCFtaWQtXFx1MDAzZWRlbGV0ZWRfZnJvbV9xKSB7XFxuIDEyNDpcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZtaWQtXFx1MDAzZXFoZWFkKTtcXG4gMTI1OlxcdFxcdFxcdG1pZC1cXHUwMDNlZGVsZXRlZF9mcm9tX3EgPSB0cnVlO1xcbiAxMjY6XFx0XFx0fVxcbiAxMjc6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNlcnZlci1cXHUwMDNlbWlkX3F1ZXVlX2xvY2spO1xcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHRyZWxlYXNlX21pZChzZXJ2ZXIsIG1pZCk7XFxuIDEzMDpcXHR9XFxuIDEzMTpcXHRcXG4gMTMyOlxcdC8qXFxuIDEzMzpcXHQgKiBzbWJfc2VuZF9rdmVjIC0gc2VuZCBhbiBhcnJheSBvZiBrdmVjcyB0byB0aGUgc2VydmVyXFxuIDEzNDpcXHQgKiBAc2VydmVyOlxcdFNlcnZlciB0byBzZW5kIHRoZSBkYXRhIHRvXFxuIDEzNTpcXHQgKiBAc21iX21zZzpcXHRNZXNzYWdlIHRvIHNlbmRcXG4gMTM2OlxcdCAqIEBzZW50OlxcdGFtb3VudCBvZiBkYXRhIHNlbnQgb24gc29ja2V0IGlzIHN0b3JlZCBoZXJlXFxuIDEzNzpcXHQgKlxcbiAxMzg6XFx0ICogT3VyIGJhc2ljIFxcXCJzZW5kIGRhdGEgdG8gc2VydmVyXFxcIiBmdW5jdGlvbi4gU2hvdWxkIGJlIGNhbGxlZCB3aXRoIHNydl9tdXRleFxcbiAxMzk6XFx0ICogaGVsZC4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIHJlc3VsdHMuXFxuIDE0MDpcXHQgKi9cXG4gMTQxOlxcdGludFxcbiAxNDI6XFx0c21iX3NlbmRfa3ZlYyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBtc2doZHIgKnNtYl9tc2csXFxuIDE0MzpcXHRcXHQgICAgICBzaXplX3QgKnNlbnQpXFxuIDE0NDpcXHR7XFxuIDE0NTpcXHRcXHRpbnQgcmMgPSAwO1xcbiAxNDY6XFx0XFx0aW50IHJldHJpZXMgPSAwO1xcbiAxNDc6XFx0XFx0c3RydWN0IHNvY2tldCAqc3NvY2tldCA9IHNlcnZlci1cXHUwMDNlc3NvY2tldDtcXG4gMTQ4OlxcdFxcbiAxNDk6XFx0XFx0KnNlbnQgPSAwO1xcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRpZiAoc2VydmVyLVxcdTAwM2Vub2Jsb2Nrc25kKVxcbiAxNTI6XFx0XFx0XFx0c21iX21zZy1cXHUwMDNlbXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlUICsgTVNHX05PU0lHTkFMO1xcbiAxNTM6XFx0XFx0ZWxzZVxcbiAxNTQ6XFx0XFx0XFx0c21iX21zZy1cXHUwMDNlbXNnX2ZsYWdzID0gTVNHX05PU0lHTkFMO1xcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXHR3aGlsZSAobXNnX2RhdGFfbGVmdChzbWJfbXNnKSkge1xcbiAxNTc6XFx0XFx0XFx0LypcXG4gMTU4OlxcdFxcdFxcdCAqIElmIGJsb2NraW5nIHNlbmQsIHdlIHRyeSAzIHRpbWVzLCBzaW5jZSBlYWNoIGNhbiBibG9ja1xcbiAxNTk6XFx0XFx0XFx0ICogZm9yIDUgc2Vjb25kcy4gRm9yIG5vbmJsb2NraW5nICB3ZSBoYXZlIHRvIHRyeSBtb3JlXFxuIDE2MDpcXHRcXHRcXHQgKiBidXQgd2FpdCBpbmNyZWFzaW5nIGFtb3VudHMgb2YgdGltZSBhbGxvd2luZyB0aW1lIGZvclxcbiAxNjE6XFx0XFx0XFx0ICogc29ja2V0IHRvIGNsZWFyLiAgVGhlIG92ZXJhbGwgdGltZSB3ZSB3YWl0IGluIGVpdGhlclxcbiAxNjI6XFx0XFx0XFx0ICogY2FzZSB0byBzZW5kIG9uIHRoZSBzb2NrZXQgaXMgYWJvdXQgMTUgc2Vjb25kcy5cXG4gMTYzOlxcdFxcdFxcdCAqIFNpbWlsYXJseSB3ZSB3YWl0IGZvciAxNSBzZWNvbmRzIGZvciBhIHJlc3BvbnNlIGZyb21cXG4gMTY0OlxcdFxcdFxcdCAqIHRoZSBzZXJ2ZXIgaW4gU2VuZFJlY2VpdmVbMl0gZm9yIHRoZSBzZXJ2ZXIgdG8gc2VuZFxcbiAxNjU6XFx0XFx0XFx0ICogYSByZXNwb25zZSBiYWNrIGZvciBtb3N0IHR5cGVzIG9mIHJlcXVlc3RzIChleGNlcHRcXG4gMTY2OlxcdFxcdFxcdCAqIFNNQiBXcml0ZSBwYXN0IGVuZCBvZiBmaWxlIHdoaWNoIGNhbiBiZSBzbG93LCBhbmRcXG4gMTY3OlxcdFxcdFxcdCAqIGJsb2NraW5nIGxvY2sgb3BlcmF0aW9ucykuIE5GUyB3YWl0cyBzbGlnaHRseSBsb25nZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6NDcuNjk4MTQyNTMxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NTI5NDk3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIExvY2tpbmcgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGRlbGV0ZV9taWRgIHRha2VzIGBzZXJ2ZXItXHUwMDNlbWlkX3F1ZXVlX2xvY2tgIGFuZCBjYWxscyBgcmVsZWFzZV9taWRgLiBUaGF0J3MgaW1wb3J0YW50LiBOb3csIHdoeSBpcyB0aGlzIHBhdGNoIGNhbGxpbmcgYGRlbGV0ZV9taWRgICpiZWZvcmUqIGBjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKWA/IFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGBjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKWAgdW5sb2NrcyBgc2VydmVyLVx1MDAzZXNydl9tdXRleGAuIFNvLCBpZiBgZGVsZXRlX21pZGAgaXMgY2FsbGVkICpiZWZvcmUqIHRoZSB1bmxvY2ssIGl0J3MgcHJvdGVjdGVkIGJ5IGBzcnZfbXV0ZXhgLiBCdXQsIGlmIGBkZWxldGVfbWlkYCBpcyBjYWxsZWQgYWZ0ZXIgYG91dDpgLCBpdCdzIG5vdC4gSXMgdGhpcyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiB0aGVuP1xuXG5JZiBgcmMgXHUwMDNjIDBgIG1lYW5zIHRoZSByZXF1ZXN0cyBmYWlsZWQgdG8gc2VuZCwgYW5kIHdlIHVubG9jayBgc3J2X211dGV4YCAqYmVmb3JlKiBkZWxldGluZywgYW5vdGhlciB0aHJlYWQgY291bGQgc3RlcCBpbiwgcHJvY2VzcyBhIHJlc3BvbnNlIChldmVuIHRob3VnaCB0aGVyZSAqd2Fzbid0KiBhIHJlcXVlc3Qgc2VudCEpLCBvciwgdGhlIHJlY29ubmVjdCB0aHJlYWQgY291bGQgcnVuIGFuZCB0cnkgdG8gY2xlYW4gdXAgdGhlIG1pZHMuLi4gcG90ZW50aWFsbHkgY2F1c2luZyBpc3N1ZXMuIE9rYXksIGl0J3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYWRkcmVzc2luZyBlaXRoZXIgYSByYWNlIGNvbmRpdGlvbiwgYSB1c2UtYWZ0ZXItZnJlZSwgb3IgYSBtZW1vcnkgbGVhay4gQW5kLCBpdCdzICpkZWZpbml0ZWx5KiBhIHJhY2UgaXNzdWUuXG5cbk5vdywgZG9lcyB0aGlzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGlzIGlzIG5vdCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLiBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgYnVpbHQgdG8gY2F0Y2ggdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBhbmQgZGVhZGxvY2tzLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGRlYWxzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgaGVyZS4gSXQncyBjb250cm9sIGZsb3cgYW5kIG9iamVjdCBsaWZldGltZSBtYW5hZ2VtZW50LiBMZXQncyBkb3VibGUgY2hlY2sgdG8gYmUgc3VyZS4uLlxuXG5gY2FuY2VsbGVkX21pZGAgaXMgYW4gYXJyYXkgb2YgYm9vbGVhbnMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYC4gYG1pZGAgaXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMsIGFuZCB0aGUgcGF0Y2ggaXMgc2ltcGx5IHNldHRpbmcgYGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlYCBhbmQgdGhlbiBjYWxsaW5nIGBkZWxldGVfbWlkYC4gUHVyZWx5IGNvbnRyb2wgZmxvdyBhbmQgb2JqZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludm9sdmVkLiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBmYWxzZS4gVGhhdCdzIG15IHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUyOSwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1Mzo1Ny41NTEwOTQ1ODFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBjb21wb3VuZF9zZW5kX3JlY3YoKWAgdG8gZGVsZXRlIGBtaWRgIGVudHJpZXMgYW5kIG1hcmsgdGhlbSBhcyBjYW5jZWxsZWQgYmVmb3JlIHJlbGVhc2luZyB0aGUgc2VydmVyIGxvY2sgKGBjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKWApIHdoZW4gYHNtYl9zZW5kX3Jxc3QoKWAgZmFpbHMgKGByYyBcXHUwMDNjIDBgKSBvciB3aGVuIG5vIHNlcnZlciByZXNwb25zZSBpcyBleHBlY3RlZC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVhayByZWxhdGVkIHRvIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBtaWRfcV9lbnRyeWAgc3RydWN0dXJlcy5cXG5cXG5UaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdyBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSkuIEJ1Z3MgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWUsIHVzZS1hZnRlci1mcmVlLCBvciByYWNlIGNvbmRpdGlvbnMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGNvbXBvdW5kX3NlbmRfcmVjdigpYCB0byBkZWxldGUgYG1pZGAgZW50cmllcyBhbmQgbWFyayB0aGVtIGFzIGNhbmNlbGxlZCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBzZXJ2ZXIgbG9jayAoYGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpYCkgd2hlbiBgc21iX3NlbmRfcnFzdCgpYCBmYWlscyAoYHJjIFxcdTAwM2MgMGApIG9yIHdoZW4gbm8gc2VydmVyIHJlc3BvbnNlIGlzIGV4cGVjdGVkLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiwgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrIHJlbGF0ZWQgdG8gdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYG1pZF9xX2VudHJ5YCBzdHJ1Y3R1cmVzLlxcblxcblRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlKS4gQnVncyByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZSwgdXNlLWFmdGVyLWZyZWUsIG9yIHJhY2UgY29uZGl0aW9ucyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowg5xg2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 11:51:06 +0000 UTC FinishedAt: 2026-08-07 11:53:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS" ], "series_id": "14df7662-ab9e-43df-88bb-057f50fcdaf3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "compound_send_recv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb21wb3VuZF9zZW5kX3JlY3YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgY29tcG91bmRfc2VuZF9yZWN2KClgIHRvIGRlbGV0ZSBgbWlkYCBlbnRyaWVzIGFuZCBtYXJrIHRoZW0gYXMgY2FuY2VsbGVkIGJlZm9yZSByZWxlYXNpbmcgdGhlIHNlcnZlciBsb2NrIChgY2lmc19zZXJ2ZXJfdW5sb2NrKHNlcnZlcilgKSB3aGVuIGBzbWJfc2VuZF9ycXN0KClgIGZhaWxzIChgcmMgXHUwMDNjIDBgKSBvciB3aGVuIG5vIHNlcnZlciByZXNwb25zZSBpcyBleHBlY3RlZC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVhayByZWxhdGVkIHRvIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBtaWRfcV9lbnRyeWAgc3RydWN0dXJlcy5cblxuVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UpLiBCdWdzIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmFjZSBjb25kaXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29tcG91bmRfc2VuZF9yZWN2YCB3aGVyZSBtaWQgYXJyYXlzIGFyZSBub3QgZGVsZXRlZCB3aGVuIGByYyBcdTAwM2MgMGAgb3IgYGZsYWdzIFx1MDAyNiBDSUZTX05PX1NSVl9SU1BgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNNQiBjbGllbnQmIzM5O3MgdHJhbnNwb3J0IGxheWVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFNNQiBjbGllbnQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY4NDk1Yjg2MjUwMjE0NjQyMzRjN2E1NTA1ZWRlNGVkNzA4NjdmNDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDExOjUyOjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMgYi9mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jXG5pbmRleCBmZGY0ZTUwYzI3Y2ViLi44ZDE0MjI1ZTk0OGIxIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1xuQEAgLTk2OCw2ICYjNDM7OTY4LDEzIEBAIGNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcbiBcdFx0c2VydmVyLVx1MDAzZXNlcXVlbmNlX251bWJlciAtPSAyO1xuIFx0fVxuIFxuJiM0MztcdGlmIChyYyBcdTAwM2MgMCB8fCAoZmxhZ3MgXHUwMDI2IENJRlNfTk9fU1JWX1JTUCkpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9ycXN0OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRkZWxldGVfbWlkKHNlcnZlciwgbWlkW2ldKTtcbiYjNDM7XHRcdFx0Y2FuY2VsbGVkX21pZFtpXSA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpO1xuIFxuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0lGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbXBvdW5kX3NlbmRfcmVjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29tcG91bmRfc2VuZF9yZWN2YCB3aGVyZSBtaWQgYXJyYXlzIGFyZSBub3QgZGVsZXRlZCB3aGVuIGByYyBcdTAwM2MgMGAgb3IgYGZsYWdzIFx1MDAyNiBDSUZTX05PX1NSVl9SU1BgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNNQiBjbGllbnQmIzM5O3MgdHJhbnNwb3J0IGxheWVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFNNQiBjbGllbnQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4NDk1Yjg2MjUwMjE0NjQyMzRjN2E1NTA1ZWRlNGVkNzA4NjdmNDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDExOjUyOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYyBiL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMKaW5kZXggZmRmNGU1MGMyN2NlYi4uOGQxNDIyNWU5NDhiMSAxMDA2NDQKLS0tIGEvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jCkBAIC05NjgsNiAmIzQzOzk2OCwxMyBAQCBjb21wb3VuZF9zZW5kX3JlY3YoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsCiAJCXNlcnZlci0mZ3Q7c2VxdWVuY2VfbnVtYmVyIC09IDI7CiAJfQogCiYjNDM7CWlmIChyYyAmbHQ7IDAgfHwgKGZsYWdzICZhbXA7IENJRlNfTk9fU1JWX1JTUCkpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fcnFzdDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlkZWxldGVfbWlkKHNlcnZlciwgbWlkW2ldKTsKJiM0MzsJCQljYW5jZWxsZWRfbWlkW2ldID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpOwogCiAJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU01CIENsaWVudCBUcmFuc3BvcnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNoYW5nZXMgd2l0aGluIGBjb21wb3VuZF9zZW5kX3JlY3ZgLCBzcGVjaWZpY2FsbHkgdGhpcyBuZXcgbG9vcC4gSXQgc2VlbXMgdGhlIHB1cnBvc2UgaXMgdG8gY2xlYXIgb3V0IG1pZCBhcnJheXMgdW5kZXIgY2VydGFpbiBlcnJvciBjb25kaXRpb25zIG9yIGZsYWdzLCBsaWtlbHkgdG8gbWFuYWdlIG1lbW9yeSBlZmZlY3RpdmVseSBvciBoYW5kbGUgZmFpbGVkIHNlcnZlciByZXNwb25zZXMuIFRoaXMgaXMgaW1wb3J0YW50OiBJZiBgcmNgIGlzIG5lZ2F0aXZlIG9yIGlmIHRoZSBgQ0lGU19OT19TUlZfUlNQYCBmbGFnIGlzIHNldCwgdGhpcyBsb29wIHRyaWdnZXJzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYWN0aW9uLiBJcyB0aGlzIGEgbmV3IGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5PyBJcyBpdCBhaW1lZCBhdCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcz8gUGVyaGFwcyBpdCYjMzk7cyBhIGNyaXRpY2FsIGFkanVzdG1lbnQgdG8gaG93IHdlIG1hbmFnZSBvdXRzdGFuZGluZyByZXF1ZXN0cyBpbiB0aGUgZmFjZSBvZiBuZXR3b3JrIGlzc3Vlcy4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGRldGFpbHMgb2YgYGNvbXBvdW5kX3NlbmRfcmVjdmAgaXRzZWxmIHdpdGhpbiBgZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byBpZGVudGlmeSB3aGF0IHRoZSBtaWQgYXJyYXlzIGFyZSwgaG93IHRoZXkgYXJlIHVzZWQsIGFuZCB3aHkgdGhlaXIgY2xlYW51cCBpcyBjb25kaXRpb25hbCBvbiB0aGVzZSBzcGVjaWZpYyBmbGFncyBvciByZXR1cm4gY29kZXMuIFRoaXMgaXMgYWxsIGFib3V0IGVuc3VyaW5nIHJvYnVzdCBhbmQgcmVsaWFibGUgU01CIGNsaWVudCBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29tcG91bmRfc2VuZF9yZWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jPTg2Mj1pbnRcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6ODYzOmNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtODY0LVx0XHQgICBzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsXG4tLVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz0xMTA4PWNpZnNfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxuLS1cbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtMTExMi17XG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjExMTM6XHRyZXR1cm4gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsIGZsYWdzLCAxLFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMTE0LVx0XHRcdFx0ICBycXN0LCByZXNwX2J1Zl90eXBlLCByZXNwX2lvdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNNQiBDbGllbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGNvbXBvdW5kX3NlbmRfcmVjdmAgd2l0aGluIGBmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jYC4gUmlnaHQsIHRoYXQmIzM5O3MgaW4gdGhlIFNNQiBjbGllbnQgY29kZSwgd2hpY2ggaXMgQ0lGUy4gSXQmIzM5O3MgYWx3YXlzIGltcG9ydGFudCB0byBrbm93ICp3aGVyZSogdGhlIGZpeCBpcyBoYXBwZW5pbmcuIEFuZCBTTUIgY2xpZW50cz8gVGhleSYjMzk7cmUgb2Z0ZW4gbHVya2luZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIHRoaW5rIFZNcywgY29udGFpbmVycywgYW5kIHN1Y2guIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhlIFNNQiBjbGllbnQgb24gdGhpcyBzeXN0ZW0uIEl0IHdpbGwgcHJvdmlkZSBjb250ZXh0IGlmIHRoZXJlIGlzIGFueSBjdXN0b20gY29uZmlndXJhdGlvbiB0aGF0IG1heSBiZSByZWxldmFudCB0byB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENJRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9zbWIvY2xpZW50L0tjb25maWc6Mjpjb25maWcgQ0lGU1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUIzIGFuZCBDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSlcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTMtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6NTQ6Y29uZmlnIENJRlNfU1RBVFMyXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTUtXHRib29sIFwmIzM0O0V4dGVuZGVkIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjctXG5mcy9zbWIvY2xpZW50L0tjb25maWc6Njg6Y29uZmlnIENJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjktXHRib29sIFwmIzM0O1N1cHBvcnQgbGVnYWN5IHNlcnZlcnMgd2hpY2ggdXNlIGxlc3Mgc2VjdXJlIGRpYWxlY3RzXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTgyLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjgzOmNvbmZpZyBDSUZTX1VQQ0FMTFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05MS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo5Mjpjb25maWcgQ0lGU19YQVRUUlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA2LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEwNzpjb25maWcgQ0lGU19QT1NJWFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7Q0lGUyBQT1NJWCBFeHRlbnNpb25zXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTExOC1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMTk6Y29uZmlnIENJRlNfREVCVUdcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjAtXHRib29sIFwmIzM0O0VuYWJsZSBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjctXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTI4OmNvbmZpZyBDSUZTX0RFQlVHMlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGFkZGl0aW9uYWwgQ0lGUyBkZWJ1Z2dpbmcgcm91dGluZXNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTM4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEzOTpjb25maWcgQ0lGU19ERUJVR19EVU1QX0tFWVNcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDAtXHRib29sIFwmIzM0O0R1bXAgZW5jcnlwdGlvbiBrZXlzIGZvciBvZmZsaW5lIGRlY3J5cHRpb24gKFVuc2FmZSlcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTQ4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE0OTpjb25maWcgQ0lGU19ERlNfVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTUwLVx0Ym9vbCBcJiMzNDtERlMgZmVhdHVyZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2MS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNjI6Y29uZmlnIENJRlNfU1dOX1VQQ0FMTFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2My1cdGJvb2wgXCYjMzQ7U1dOIGZlYXR1cmUgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzItXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTczOmNvbmZpZyBDSUZTX05GU0RfRVhQT1JUXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtBbGxvdyBuZnNkIHRvIGV4cG9ydCBDSUZTIGZpbGUgc3lzdGVtXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnPTE3OT1pZiBDSUZTXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgwLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE4MTpjb25maWcgQ0lGU19TTUJfRElSRUNUXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgyLVx0Ym9vbCBcJiMzNDtTTUIgRGlyZWN0IHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkwLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE5MTpjb25maWcgQ0lGU19GU0NBQ0hFXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkyLVx0Ym9vbCBcJiMzNDtQcm92aWRlIENJRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTk5OmNvbmZpZyBDSUZTX1JPT1RcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMDAtXHRib29sIFwmIzM0O1NNQiByb290IGZpbGUgc3lzdGVtIChFeHBlcmltZW50YWwpXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwNi1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyMDc6Y29uZmlnIENJRlNfQ09NUFJFU1NJT05cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O1NNQiBtZXNzYWdlIGNvbXByZXNzaW9uIChFeHBlcmltZW50YWwpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipDSUZTIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIEFuYWx5c2lzKioKClJpZ2h0LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBpcyBDSUZTLiBHb3QgaXQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgY29tcG91bmRfc2VuZF9yZWN2YCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiB0aGUgYGZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNgIGZpbGUuIFRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgU01CIGNsaWVudCYjMzk7cyB0cmFuc3BvcnQgbGF5ZXIuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLCB0aGUgb25lIEkgbmVlZCB0byBhbnN3ZXIgZmlyc3QsIGlzIHdoZXRoZXIgYGNvbXBvdW5kX3NlbmRfcmVjdmAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2Agb3IgaXMgZXhwb3J0ZWQuIEtub3dpbmcgdGhhdCBpbW1lZGlhdGVseSBkZXRlcm1pbmVzIGhvdyB3aWRlbHkgYWNjZXNzaWJsZSwgYW5kIHRodXMsIGhvdyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIG9yIGNyaXRpY2FsIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBtaWdodCBiZSBpbiB0aGUgbGFyZ2VyIFNNQiBjbGllbnQgaW5mcmFzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgSSBuZWVkIGJlZm9yZSBJIGNhbiBhc3Nlc3MgaXRzIHJvbGUgb3IgcG90ZW50aWFsIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wb3VuZF9zZW5kX3JlY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L2NhY2hlZF9kaXIuYz0xMzQ9aW50IG9wZW5fY2FjaGVkX2Rpcih1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxuLS1cbmZzL3NtYi9jbGllbnQvY2FjaGVkX2Rpci5jLTMyMi1cbmZzL3NtYi9jbGllbnQvY2FjaGVkX2Rpci5jOjMyMzpcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXG5mcy9zbWIvY2xpZW50L2NhY2hlZF9kaXIuYy0zMjQtXHRcdFx0XHRmbGFncywgMiwgcnFzdCxcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNwcm90by5oPTEwMT1pbnQgY2lmc19zZW5kX3JlY3YoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsXG4tLVxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaC0xMDMtXHRcdCAgIGludCAqcmVzcF9idWZfdHlwZSwgY29uc3QgaW50IGZsYWdzLCBzdHJ1Y3Qga3ZlYyAqcmVzcF9pb3YpO1xuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaDoxMDQ6aW50IGNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmgtMTA1LVx0XHQgICAgICAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBjb25zdCBpbnQgZmxhZ3MsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyaW5vZGUuYz0yMDA9c3RhdGljIGludCBzbWIyX2NvbXBvdW5kX29wKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyaW5vZGUuYy01MzctXG5mcy9zbWIvY2xpZW50L3NtYjJpbm9kZS5jOjUzODpcdFx0cmMgPSBjb21wb3VuZF9zZW5kX3JlY3YoeGlkLCBzZXMsIHNlcnZlcixcbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmMtNTM5LVx0XHRcdFx0XHRmbGFncywgbnVtX3Jxc3QgLSAyLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmMtNTUwLVxuZnMvc21iL2NsaWVudC9zbWIyaW5vZGUuYzo1NTE6XHRcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXG5mcy9zbWIvY2xpZW50L3NtYjJpbm9kZS5jLTU1Mi1cdFx0XHRcdFx0ZmxhZ3MsIG51bV9ycXN0LFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmM9MTA5Mj1zbWIyX3VubGluayhjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmMtMTE2Ny1cbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmM6MTE2ODpcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgdGNvbi1cdTAwM2VzZXMsIHNlcnZlciwgZmxhZ3MsXG5mcy9zbWIvY2xpZW50L3NtYjJpbm9kZS5jLTExNjktXHRcdFx0XHRBUlJBWV9TSVpFKHJxc3QpLCBycXN0LFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTExODE9c21iMl9zZXRfZWEoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xMzQyLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MTM0MzpcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xMzQ0LVx0XHRcdFx0ZmxhZ3MsIDMsIHJxc3QsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MTU3Nz1zbWIyX2lvY3RsX3F1ZXJ5X2luZm8oY29uc3QgdW5zaWduZWQgaW50IHhpZCxcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xNzYxLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MTc2MjpcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xNzYzLVx0XHRcdFx0ZmxhZ3MsIDMsIHJxc3QsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MjQ4ND1zbWIyX3F1ZXJ5X2Rpcl9maXJzdChjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTI1NjUtXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoyNTY2Olx0cmMgPSBjb21wb3VuZF9zZW5kX3JlY3YoeGlkLCB0Y29uLVx1MDAzZXNlcywgc2VydmVyLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjU2Ny1cdFx0XHRcdGZsYWdzLCAyLCBycXN0LFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTI4NjA9c21iMl9xdWVyeV9pbmZvX2NvbXBvdW5kKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjk3OS1cdGlmIChjZmlkKSB7XG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoyOTgwOlx0XHRyYyA9IGNvbXBvdW5kX3NlbmRfcmVjdih4aWQsIHNlcywgc2VydmVyLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjk4MS1cdFx0XHRcdFx0ZmxhZ3MsIDEsIFx1MDAyNnJxc3RbMV0sXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjk4My1cdH0gZWxzZSB7XG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoyOTg0Olx0XHRyYyA9IGNvbXBvdW5kX3NlbmRfcmVjdih4aWQsIHNlcywgc2VydmVyLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjk4NS1cdFx0XHRcdFx0ZmxhZ3MsIDMsIHJxc3QsXG4tLVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz04NjI9aW50XG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjg2Mzpjb21wb3VuZF9zZW5kX3JlY3YoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTg2NC1cdFx0ICAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLFxuLS1cbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9MTEwOD1jaWZzX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcbi0tXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMTIte1xuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzoxMTEzOlx0cmV0dXJuIGNvbXBvdW5kX3NlbmRfcmVjdih4aWQsIHNlcywgc2VydmVyLCBmbGFncywgMSxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtMTExNC1cdFx0XHRcdCAgcnFzdCwgcmVzcF9idWZfdHlwZSwgcmVzcF9pb3YpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGNvbXBvdW5kX3NlbmRfcmVjdmAgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gYGNvbXBvdW5kX3NlbmRfcmVjdmAgaXMgY3JpdGljYWwuIEl0JiMzOTtzICpleHBvcnRlZCogaW4gYGNpZnNwcm90by5oYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBjb3JlIGNvbXBvbmVudCwgdXNlZCB0aHJvdWdob3V0IHRoZSBDSUZTIGNsaWVudCBjb2RlLiBUaGF0IGFscmVhZHkgcmFpc2VzIGEgZmxhZyDigJMgd2lkZXNwcmVhZCB1c2UgbWVhbnMgd2lkZXNwcmVhZCBwb3RlbnRpYWwgaW1wYWN0IGlmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbS4KClRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIGEgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgd2l0aGluIGBjb21wb3VuZF9zZW5kX3JlY3ZgLiBTcGVjaWZpY2FsbHksIGl0IGRlYWxzIHdpdGggYSBzY2VuYXJpbyB3aGVyZSBgbWlkYCBhcnJheXMgYXJlbiYjMzk7dCBiZWluZyBjbGVhbmVkIHVwIHByb3Blcmx5IHdoZW4gYW4gZXJyb3Igb2NjdXJzIChgcmMgJmx0OyAwYCkgb3IgdW5kZXIgY2VydGFpbiBmbGFnIGNvbmRpdGlvbnMgKGBmbGFncyAmYW1wOyBDSUZTX05PX1NSVl9SU1BgKS4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgdG8gdGhlIFNNQiBjbGllbnQsIHdoaWNoIGlzIGEgYmlnIGRlYWwuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHR5cGljYWwgU01CIGNsaWVudCBvcGVyYXRpb25zLCBsaWtlIG1vdW50aW5nIGFuZCBpbnRlcmFjdGluZyB3aXRoIGEgQ0lGUyBzaGFyZSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGJlIHZlcnkgY29uY2VybmVkIGFib3V0LgoKU28sIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGxvb2tzIGxpa2UgYSBwcmltZSB0YXJnZXQuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byB0ZXN0IHRoZXNlIGNvZGUgcGF0aHMgdGhvcm91Z2hseS4gVGhlIGlkZW50aWZpZWQgZm9jdXMgc3ltYm9sIGhlcmUsIGBjb21wb3VuZF9zZW5kX3JlY3ZgLCBhbmQgdGhlIHJlbGF0ZWQgYGNpZnNfc2VuZF9yZWN2YCBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSBvdXIgZm9jdXMsIGJ1dCB3ZSBuZWVkIHRvIHZlcmlmeSB0aGVyZSBhcmUgbm90IG90aGVyIGNvbmZpZ3MgdGhhdCB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKV2UmIzM5O3JlIGFscmVhZHkgZW5hYmxpbmcgdGhlIGBDSUZTYCBjb25maWcsIHdoaWNoIGlzIGNvcnJlY3QuIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9yIGBjb21wb3VuZF9zZW5kX3JlY3ZgIGFuZCBsb29rIGZvciBhbnkgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkLCBvciB0aGF0IGNhbGwgaXQsIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb21wbGV0ZSBwaWN0dXJlIGJlZm9yZSB3ZSBkaXZlIGludG8gZnV6emluZy4gSXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXBvdW5kX3NlbmRfcmVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz04NjI9aW50XG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjg2Mzpjb21wb3VuZF9zZW5kX3JlY3YoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTg2NC1cdFx0ICAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLFxuLS1cbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9MTEwOD1jaWZzX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcbi0tXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMTIte1xuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzoxMTEzOlx0cmV0dXJuIGNvbXBvdW5kX3NlbmRfcmVjdih4aWQsIHNlcywgc2VydmVyLCBmbGFncywgMSxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtMTExNC1cdFx0XHRcdCAgcnFzdCwgcmVzcF9idWZfdHlwZSwgcmVzcF9pb3YpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDE0CgkJCQkJCQlvdXRwdXQ6IDEwOAoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDaGFuZ2UqKgoKT2theSwgc28gdGhlIHNwb3RsaWdodCBpcyBvbiBgY29tcG91bmRfc2VuZF9yZWN2YC4gVGhlIGZ1enppbmcgdmVyZGljdCBpcyBhIGRlZmluaXRlICYjMzQ7eWVzJiMzNDsg4oCTIFdvcnRoRnV6emluZz10cnVlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgY29tcG91bmRfc2VuZF9yZWN2YCwgYW5kIHRoZSBgQ0lGU2AgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlIHJlYXNvbmluZyBib2lscyBkb3duIHRvIGEgZml4IHdpdGhpbiBgY29tcG91bmRfc2VuZF9yZWN2YCB3aGVyZSBpdCB3YXNuJiMzOTt0IGhhbmRsaW5nIG1pZC1hcnJheXMgcHJvcGVybHkgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yIChgcmMgJmx0OyAwYCkgb3Igd2hlbiBgQ0lGU19OT19TUlZfUlNQYCBpcyBzZXQuIEVzc2VudGlhbGx5LCBhIGNsZWFudXAgaXNzdWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWVwIGluIHRoZSBTTUIgY2xpZW50JiMzOTtzIHRyYW5zcG9ydCBsYXllci4gVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoYXQgdGhpcyBsYXllciBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIFNNQiBjbGllbnQgb3BlcmF0aW9ucywgbWVhbmluZyBpdCYjMzk7cyByZWFjaGFibGUgYnkgYSBsb3Qgb2YgZGlmZmVyZW50IGNsaWVudHMuIEdpdmVuIHRoZSBjcml0aWNhbCBwb3NpdGlvbiBvZiB0aGUgdHJhbnNwb3J0IGxheWVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgcGF0Y2ggbWlnaHQgaW50cm9kdWNlIGFueSBvdGhlciBzdWJ0bGUgaXNzdWVzIG9yIGV4cG9zZXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSB3aWxsIGZvY3VzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIGFjcm9zcyB0aGUgU01CIGNsaWVudCYjMzk7cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGVycm9yIGhhbmRsaW5nIGFuZCByZXNwb25zZSBsb2dpYyB0byBiZSBzdXJlIHRoaXMgJiMzNDtmaXgmIzM0OyBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGF0dGFjayB2ZWN0b3JzLiBUaGlzIHdhcnJhbnRzIGEgdmVyeSBjbG9zZSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0lGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbXBvdW5kX3NlbmRfcmVjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29tcG91bmRfc2VuZF9yZWN2YCB3aGVyZSBtaWQgYXJyYXlzIGFyZSBub3QgZGVsZXRlZCB3aGVuIGByYyBcdTAwM2MgMGAgb3IgYGZsYWdzIFx1MDAyNiBDSUZTX05PX1NSVl9SU1BgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNNQiBjbGllbnQmIzM5O3MgdHJhbnNwb3J0IGxheWVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFNNQiBjbGllbnQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0lGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbXBvdW5kX3NlbmRfcmVjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29tcG91bmRfc2VuZF9yZWN2YCB3aGVyZSBtaWQgYXJyYXlzIGFyZSBub3QgZGVsZXRlZCB3aGVuIGByYyBcdTAwM2MgMGAgb3IgYGZsYWdzIFx1MDAyNiBDSUZTX05PX1NSVl9SU1BgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNNQiBjbGllbnQmIzM5O3MgdHJhbnNwb3J0IGxheWVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFNNQiBjbGllbnQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgY29tcG91bmRfc2VuZF9yZWN2KClgIHRvIGRlbGV0ZSBgbWlkYCBlbnRyaWVzIGFuZCBtYXJrIHRoZW0gYXMgY2FuY2VsbGVkIGJlZm9yZSByZWxlYXNpbmcgdGhlIHNlcnZlciBsb2NrIChgY2lmc19zZXJ2ZXJfdW5sb2NrKHNlcnZlcilgKSB3aGVuIGBzbWJfc2VuZF9ycXN0KClgIGZhaWxzIChgcmMgXHUwMDNjIDBgKSBvciB3aGVuIG5vIHNlcnZlciByZXNwb25zZSBpcyBleHBlY3RlZC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVhayByZWxhdGVkIHRvIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBtaWRfcV9lbnRyeWAgc3RydWN0dXJlcy5cblxuVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UpLiBCdWdzIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmFjZSBjb25kaXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmODQ5NWI4NjI1MDIxNDY0MjM0YzdhNTUwNWVkZTRlZDcwODY3ZjQ1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxMTo1Mjo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMgYi9mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jCmluZGV4IGZkZjRlNTBjMjdjZWIuLjhkMTQyMjVlOTQ4YjEgMTAwNjQ0Ci0tLSBhL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYwpAQCAtOTY4LDYgJiM0Mzs5NjgsMTMgQEAgY29tcG91bmRfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLAogCQlzZXJ2ZXItJmd0O3NlcXVlbmNlX251bWJlciAtPSAyOwogCX0KIAomIzQzOwlpZiAocmMgJmx0OyAwIHx8IChmbGFncyAmYW1wOyBDSUZTX05PX1NSVl9SU1ApKSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3Jxc3Q7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJZGVsZXRlX21pZChzZXJ2ZXIsIG1pZFtpXSk7CiYjNDM7CQkJY2FuY2VsbGVkX21pZFtpXSA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAljaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKTsKIAogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBTTUIgQ2xpZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHdpdGhpbiBgZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY2AsIHNwZWNpZmljYWxseS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIGBjb21wb3VuZF9zZW5kX3JlY3YoKWAgZnVuY3Rpb24uIFdoYXQgaXQmIzM5O3MgZG9pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgaW5jbHVkZXMgdGhpcyBjb25kaXRpb25hbCBibG9jayBvZiBjb2RlLiBFc3NlbnRpYWxseSwgaWYgYHJjYCBpcyBsZXNzIHRoYW4gemVybywgbWVhbmluZyB0aGVyZSYjMzk7cyBiZWVuIHNvbWUga2luZCBvZiBlcnJvciwgb3IgaWYgdGhlIGBDSUZTX05PX1NSVl9SU1BgIGZsYWcgaXMgc2V0LCB3aGljaCBwcm9iYWJseSBtZWFucyB3ZSBkaWRuJiMzOTt0IGdldCBhIHNlcnZlciByZXNwb25zZSwgdGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCBhbiBhcnJheSBvZiBgbWlkYCB2YWx1ZXMuCgpGb3IgZWFjaCBgbWlkYCwgaXQgY2FsbHMgYGRlbGV0ZV9taWQoKWAsIHByZXN1bWFibHkgdG8gY2xlYW4gdXAgYW55IHBhcnRpYWxseSBjb21wbGV0ZWQgcmVxdWVzdHMuICpUaGVuKiwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBpdCBzZXRzIGBjYW5jZWxsZWRfbWlkW2ldYCB0byBgdHJ1ZWAuIFRoaXMgbGlrZWx5IGZsYWdzIHRoYXQgcGFydGljdWxhciBNSUQgYXMgY2FuY2VsbGVkLCB3aGljaCBpcyBsaWtlbHkgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMgbGF0ZXIgb24gZG93biB0aGUgbGluZS4gSXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgZXJyb3ItaGFuZGxpbmcgYW5kIGNsZWFudXAgYXBwcm9hY2gsIGJ1dCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byBob3cgdGhpcyBpbXBhY3RzIHRoZSBvdmVyYWxsIGZsb3cgb2YgdGhlIGNvbXBvdW5kIG1lc3NhZ2UgaGFuZGxpbmcsIHNvIGxldCBtZSBnbyBoYXZlIGEgbG9vayBhdCB0aGUgYGNvbXBvdW5kX3NlbmRfcmVjdmAgZnVuY3Rpb24gaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wb3VuZF9zZW5kX3JlY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9ODYyPWludFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzo4NjM6Y29tcG91bmRfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy04NjQtXHRcdCAgIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcixcbi0tXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jPTExMDg9Y2lmc19zZW5kX3JlY3YoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsXG4tLVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMTEyLXtcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6MTExMzpcdHJldHVybiBjb21wb3VuZF9zZW5kX3JlY3YoeGlkLCBzZXMsIHNlcnZlciwgZmxhZ3MsIDEsXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMTQtXHRcdFx0XHQgIHJxc3QsIHJlc3BfYnVmX3R5cGUsIHJlc3BfaW92KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBTTUIgQ2xpZW50IFRyYW5zcG9ydCBMYXllcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgY29tcG91bmRfc2VuZF9yZWN2YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgaXQgd2l0aGluIGBmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBTTUIgY2xpZW50IHRyYW5zcG9ydCBsb2dpYyByZXNpZGVzLCBzbyBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGRhdGEgaXMgYWN0dWFsbHkgc2VudCBhbmQgcmVjZWl2ZWQgb3ZlciB0aGUgbmV0d29yay4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgaG93IHJlcXVlc3RzIGFyZSBjb25zdHJ1Y3RlZCwgcGFja2V0aXplZCwgYW5kIHNlbnQsIGFuZCBob3cgcmVzcG9uc2VzIGFyZSBwYXJzZWQgYW5kIGhhbmRsZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBkZWFscyB3aXRoIGNvbXBvdW5kIHJlcXVlc3RzLCBzaW5jZSB0aGF0JiMzOTtzIGEga2V5IG9wdGltaXphdGlvbiBpbiB0aGUgU01CIHByb3RvY29sLiBIb3BlZnVsbHksIHRoaXMgZnVuY3Rpb24gaXMgd2VsbC1zdHJ1Y3R1cmVkIGFuZCBkb2N1bWVudGVkLCBtYWtpbmcgaXQgZWFzaWVyIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg2MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg2MjpcdGludFxuIDg2MzpcdGNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcbiA4NjQ6XHRcdFx0ICAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLFxuIDg2NTpcdFx0XHQgICBjb25zdCBpbnQgZmxhZ3MsIGNvbnN0IGludCBudW1fcnFzdCwgc3RydWN0IHNtYl9ycXN0ICpycXN0LFxuIDg2NjpcdFx0XHQgICBpbnQgKnJlc3BfYnVmX3R5cGUsIHN0cnVjdCBrdmVjICpyZXNwX2lvdilcbiA4Njc6XHR7XG4gODY4Olx0XHRpbnQgaSwgaiwgb3B0eXBlLCByYyA9IDA7XG4gODY5Olx0XHRzdHJ1Y3QgbWlkX3FfZW50cnkgKm1pZFtNQVhfQ09NUE9VTkRdO1xuIDg3MDpcdFx0Ym9vbCBjYW5jZWxsZWRfbWlkW01BWF9DT01QT1VORF0gPSB7ZmFsc2V9O1xuIDg3MTpcdFx0c3RydWN0IGNpZnNfY3JlZGl0cyBjcmVkaXRzW01BWF9DT01QT1VORF0gPSB7XG4gODcyOlx0XHRcdHsgLnZhbHVlID0gMCwgLmluc3RhbmNlID0gMCB9XG4gODczOlx0XHR9O1xuIDg3NDpcdFx0dW5zaWduZWQgaW50IGluc3RhbmNlO1xuIDg3NTpcdFx0Y2hhciAqYnVmO1xuIDg3NjpcdFxuIDg3NzpcdFx0b3B0eXBlID0gZmxhZ3MgXHUwMDI2IENJRlNfT1BfTUFTSztcbiA4Nzg6XHRcbiA4Nzk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9ycXN0OyBpJiM0MzsmIzQzOylcbiA4ODA6XHRcdFx0cmVzcF9idWZfdHlwZVtpXSA9IENJRlNfTk9fQlVGRkVSOyAgLyogbm8gcmVzcG9uc2UgYnVmIHlldCAqL1xuIDg4MTpcdFxuIDg4MjpcdFx0aWYgKCFzZXMgfHwgIXNlcy1cdTAwM2VzZXJ2ZXIgfHwgIXNlcnZlcikge1xuIDg4MzpcdFx0XHRjaWZzX2RiZyhWRlMsIFwmIzM0O051bGwgc2Vzc2lvblxcblwmIzM0Oyk7XG4gODg0Olx0XHRcdHJldHVybiBzbWJfRUlPKHNtYl9laW9fdHJhY2VfbnVsbF9wb2ludGVycyk7XG4gODg1Olx0XHR9XG4gODg2Olx0XG4gODg3Olx0XHRzcGluX2xvY2soXHUwMDI2c2VydmVyLVx1MDAzZXNydl9sb2NrKTtcbiA4ODg6XHRcdGlmIChzZXJ2ZXItXHUwMDNldGNwU3RhdHVzID09IENpZnNFeGl0aW5nKSB7XG4gODg5Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNlcnZlci1cdTAwM2VzcnZfbG9jayk7XG4gODkwOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDg5MTpcdFx0fVxuIDg5MjpcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2VydmVyLVx1MDAzZXNydl9sb2NrKTtcbiA4OTM6XHRcbiA4OTQ6XHRcdC8qXG4gODk1Olx0XHQgKiBXYWl0IGZvciBhbGwgdGhlIHJlcXVlc3RzIHRvIGJlY29tZSBhdmFpbGFibGUuXG4gODk2Olx0XHQgKiBUaGlzIGFwcHJvYWNoIHN0aWxsIGxlYXZlcyB0aGUgcG9zc2liaWxpdHkgdG8gYmUgc3R1Y2sgd2FpdGluZyBmb3JcbiA4OTc6XHRcdCAqIGNyZWRpdHMgaWYgdGhlIHNlcnZlciBkb2VzbiYjMzk7dCBncmFudCBjcmVkaXRzIHRvIHRoZSBvdXRzdGFuZGluZ1xuIDg5ODpcdFx0ICogcmVxdWVzdHMgYW5kIGlmIHRoZSBjbGllbnQgaXMgY29tcGxldGVseSBpZGxlLCBub3QgZ2VuZXJhdGluZyBhbnlcbiA4OTk6XHRcdCAqIG90aGVyIHJlcXVlc3RzLlxuIDkwMDpcdFx0ICogVGhpcyBjYW4gYmUgaGFuZGxlZCBieSB0aGUgZXZlbnR1YWwgc2Vzc2lvbiByZWNvbm5lY3QuXG4gOTAxOlx0XHQgKi9cbiA5MDI6XHRcdHJjID0gd2FpdF9mb3JfY29tcG91bmRfcmVxdWVzdChzZXJ2ZXIsIG51bV9ycXN0LCBmbGFncyxcbiA5MDM6XHRcdFx0XHRcdCAgICAgICBcdTAwMjZpbnN0YW5jZSk7XG4gOTA0Olx0XHRpZiAocmMpXG4gOTA1Olx0XHRcdHJldHVybiByYztcbiA5MDY6XHRcbiA5MDc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9ycXN0OyBpJiM0MzsmIzQzOykge1xuIDkwODpcdFx0XHRjcmVkaXRzW2ldLnZhbHVlID0gMTtcbiA5MDk6XHRcdFx0Y3JlZGl0c1tpXS5pbnN0YW5jZSA9IGluc3RhbmNlO1xuIDkxMDpcdFx0fVxuIDkxMTpcdFxuIDkxMjpcdFx0LypcbiA5MTM6XHRcdCAqIE1ha2Ugc3VyZSB0aGF0IHdlIHNpZ24gaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB3ZSBzZW5kIG9uIHRoaXMgc29ja2V0XG4gOTE0Olx0XHQgKiBhbmQgYXZvaWQgcmFjZXMgaW5zaWRlIHRjcCBzZW5kbXNnIGNvZGUgdGhhdCBjb3VsZCBjYXVzZSBjb3JydXB0aW9uXG4gOTE1Olx0XHQgKiBvZiBzbWIgZGF0YS5cbiA5MTY6XHRcdCAqL1xuIDkxNzpcdFxuIDkxODpcdFx0Y2lmc19zZXJ2ZXJfbG9jayhzZXJ2ZXIpO1xuIDkxOTpcdFxuIDkyMDpcdFx0LypcbiA5MjE6XHRcdCAqIEFsbCB0aGUgcGFydHMgb2YgdGhlIGNvbXBvdW5kIGNoYWluIGJlbG9uZyBvYnRhaW5lZCBjcmVkaXRzIGZyb20gdGhlXG4gOTIyOlx0XHQgKiBzYW1lIHNlc3Npb24uIFdlIGNhbiBub3QgdXNlIGNyZWRpdHMgb2J0YWluZWQgZnJvbSB0aGUgcHJldmlvdXNcbiA5MjM6XHRcdCAqIHNlc3Npb24gdG8gc2VuZCB0aGlzIHJlcXVlc3QuIENoZWNrIGlmIHRoZXJlIHdlcmUgcmVjb25uZWN0cyBhZnRlclxuIDkyNDpcdFx0ICogd2Ugb2J0YWluZWQgY3JlZGl0cyBhbmQgcmV0dXJuIC1FQUdBSU4gaW4gc3VjaCBjYXNlcyB0byBsZXQgY2FsbGVyc1xuIDkyNTpcdFx0ICogaGFuZGxlIGl0LlxuIDkyNjpcdFx0ICovXG4gOTI3Olx0XHRpZiAoaW5zdGFuY2UgIT0gc2VydmVyLVx1MDAzZXJlY29ubmVjdF9pbnN0YW5jZSkge1xuIDkyODpcdFx0XHRjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKTtcbiA5Mjk6XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnVtX3Jxc3Q7IGomIzQzOyYjNDM7KVxuIDkzMDpcdFx0XHRcdGFkZF9jcmVkaXRzKHNlcnZlciwgXHUwMDI2Y3JlZGl0c1tqXSwgb3B0eXBlKTtcbiA5MzE6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gOTMyOlx0XHR9XG4gOTMzOlx0XG4gOTM0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcnFzdDsgaSYjNDM7JiM0MzspIHtcbiA5MzU6XHRcdFx0bWlkW2ldID0gc2VydmVyLVx1MDAzZW9wcy1cdTAwM2VzZXR1cF9yZXF1ZXN0KHNlcywgc2VydmVyLCBcdTAwMjZycXN0W2ldKTtcbiA5MzY6XHRcdFx0aWYgKElTX0VSUihtaWRbaV0pKSB7XG4gOTM3Olx0XHRcdFx0cmV2ZXJ0X2N1cnJlbnRfbWlkKHNlcnZlciwgaSk7XG4gOTM4Olx0XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaiYjNDM7JiM0MzspXG4gOTM5Olx0XHRcdFx0XHRkZWxldGVfbWlkKHNlcnZlciwgbWlkW2pdKTtcbiA5NDA6XHRcdFx0XHRjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKTtcbiA5NDE6XHRcbiA5NDI6XHRcdFx0XHQvKiBVcGRhdGUgIyBvZiByZXF1ZXN0cyBvbiB3aXJlIHRvIHNlcnZlciAqL1xuIDk0MzpcdFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG51bV9ycXN0OyBqJiM0MzsmIzQzOylcbiA5NDQ6XHRcdFx0XHRcdGFkZF9jcmVkaXRzKHNlcnZlciwgXHUwMDI2Y3JlZGl0c1tqXSwgb3B0eXBlKTtcbiA5NDU6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihtaWRbaV0pO1xuIDk0NjpcdFx0XHR9XG4gOTQ3Olx0XG4gOTQ4Olx0XHRcdG1pZFtpXS1cdTAwM2Vzcl9mbGFncyA9IGZsYWdzO1xuIDk0OTpcdFx0XHRtaWRbaV0tXHUwMDNlbWlkX3N0YXRlID0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEO1xuIDk1MDpcdFx0XHRtaWRbaV0tXHUwMDNlb3B0eXBlID0gb3B0eXBlO1xuIDk1MTpcdFx0XHQvKlxuIDk1MjpcdFx0XHQgKiBJbnZva2UgY2FsbGJhY2sgZm9yIGV2ZXJ5IHBhcnQgb2YgdGhlIGNvbXBvdW5kIGNoYWluXG4gOTUzOlx0XHRcdCAqIHRvIGNhbGN1bGF0ZSBjcmVkaXRzIHByb3Blcmx5LiBXYWtlIHVwIHRoaXMgdGhyZWFkIG9ubHkgd2hlblxuIDk1NDpcdFx0XHQgKiB0aGUgbGFzdCBlbGVtZW50IGlzIHJlY2VpdmVkLlxuIDk1NTpcdFx0XHQgKi9cbiA5NTY6XHRcdFx0aWYgKGkgXHUwMDNjIG51bV9ycXN0IC0gMSlcbiA5NTc6XHRcdFx0XHRtaWRbaV0tXHUwMDNlY2FsbGJhY2sgPSBjaWZzX2NvbXBvdW5kX2NhbGxiYWNrO1xuIDk1ODpcdFx0XHRlbHNlXG4gOTU5Olx0XHRcdFx0bWlkW2ldLVx1MDAzZWNhbGxiYWNrID0gY2lmc19jb21wb3VuZF9sYXN0X2NhbGxiYWNrO1xuIDk2MDpcdFx0fVxuIDk2MTpcdFx0cmMgPSBzbWJfc2VuZF9ycXN0KHNlcnZlciwgbnVtX3Jxc3QsIHJxc3QsIGZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU0NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYGNvbXBvdW5kX3NlbmRfcmVjdmAqKgoKQWxyaWdodCwgdGltZSB0byByZXZpc2l0IGBjb21wb3VuZF9zZW5kX3JlY3ZgLiBJIGtub3cgdGhlIGhpZ2gtbGV2ZWwgYXJjaGl0ZWN0dXJlLCBidXQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZ3JhbnVsYXIgZGV0YWlscy4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBhIGN1cnNvcnkgcmV2aWV3OyBJJiMzOTttIGxvb2tpbmcgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBzdWJ0bGUgaW1wbGVtZW50YXRpb24gbnVhbmNlcywgb3IgcGVyaGFwcyBhcmVhcyB3aGVyZSBvcHRpbWl6YXRpb24gY291bGQgYmUgYWNoaWV2ZWQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHVuZGVybHlpbmcgaGFyZHdhcmUsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhlIG92ZXJhbGwgZGF0YSBmbG93LiBJcyBpdCB0aHJlYWQtc2FmZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB2YXJpb3VzIGRhdGEgYnVmZmVyIHNpemVzIG9uIHBlcmZvcm1hbmNlPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgYW5kIHdoYXQgdGhlIHJlY292ZXJ5IG1lY2hhbmlzbXMgbG9vayBsaWtlLiBVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBzZWUgaWYgdGhlcmUgYXJlIG9wcG9ydHVuaXRpZXMgZm9yIHNxdWVlemluZyBvdXQgZXZlbiBtb3JlIGVmZmljaWVuY3ksIG9yIHBlcmhhcHMgdW5jb3ZlcmluZyBoaWRkZW4gY29tcGxleGl0aWVzIHRoYXQgSSBtaWdodCBub3QgaGF2ZSBpbml0aWFsbHkgY29uc2lkZXJlZC4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk2MjpcdFxuIDk2MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3Jxc3Q7IGkmIzQzOyYjNDM7KVxuIDk2NDpcdFx0XHRjaWZzX3NhdmVfd2hlbl9zZW50KG1pZFtpXSk7XG4gOTY1Olx0XG4gOTY2Olx0XHRpZiAocmMgXHUwMDNjIDApIHtcbiA5Njc6XHRcdFx0cmV2ZXJ0X2N1cnJlbnRfbWlkKHNlcnZlciwgbnVtX3Jxc3QpO1xuIDk2ODpcdFx0XHRzZXJ2ZXItXHUwMDNlc2VxdWVuY2VfbnVtYmVyIC09IDI7XG4gOTY5Olx0XHR9XG4gOTcwOlx0XG4gOTcxOlx0XHRpZiAocmMgXHUwMDNjIDAgfHwgKGZsYWdzIFx1MDAyNiBDSUZTX05PX1NSVl9SU1ApKSB7XG4gOTcyOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9ycXN0OyBpJiM0MzsmIzQzOykge1xuIDk3MzpcdFx0XHRcdGRlbGV0ZV9taWQoc2VydmVyLCBtaWRbaV0pO1xuIDk3NDpcdFx0XHRcdGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlO1xuIDk3NTpcdFx0XHR9XG4gOTc2Olx0XHR9XG4gOTc3Olx0XG4gOTc4Olx0XHRjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKTtcbiA5Nzk6XHRcbiA5ODA6XHRcdC8qXG4gOTgxOlx0XHQgKiBJZiBzZW5kaW5nIGZhaWxlZCBmb3Igc29tZSByZWFzb24gb3IgaXQgaXMgYW4gb3Bsb2NrIGJyZWFrIHRoYXQgd2VcbiA5ODI6XHRcdCAqIHdpbGwgbm90IHJlY2VpdmUgYSByZXNwb25zZSB0byAtIHJldHVybiBjcmVkaXRzIGJhY2tcbiA5ODM6XHRcdCAqL1xuIDk4NDpcdFx0aWYgKHJjIFx1MDAzYyAwIHx8IChmbGFncyBcdTAwMjYgQ0lGU19OT19TUlZfUlNQKSkge1xuIDk4NTpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcnFzdDsgaSYjNDM7JiM0MzspXG4gOTg2Olx0XHRcdFx0YWRkX2NyZWRpdHMoc2VydmVyLCBcdTAwMjZjcmVkaXRzW2ldLCBvcHR5cGUpO1xuIDk4NzpcdFx0XHRnb3RvIG91dDtcbiA5ODg6XHRcdH1cbiA5ODk6XHRcbiA5OTA6XHRcdC8qXG4gOTkxOlx0XHQgKiBBdCB0aGlzIHBvaW50IHRoZSByZXF1ZXN0IGlzIHBhc3NlZCB0byB0aGUgbmV0d29yayBzdGFjayAtIHdlIGFzc3VtZVxuIDk5MjpcdFx0ICogdGhhdCBhbnkgY3JlZGl0cyB0YWtlbiBmcm9tIHRoZSBzZXJ2ZXIgc3RydWN0dXJlIG9uIHRoZSBjbGllbnQgaGF2ZVxuIDk5MzpcdFx0ICogYmVlbiBzcGVudCBhbmQgd2UgY2FuJiMzOTt0IHJldHVybiB0aGVtIGJhY2suIE9uY2Ugd2UgcmVjZWl2ZSByZXNwb25zZXNcbiA5OTQ6XHRcdCAqIHdlIHdpbGwgY29sbGVjdCBjcmVkaXRzIGdyYW50ZWQgYnkgdGhlIHNlcnZlciBpbiB0aGUgbWlkIGNhbGxiYWNrc1xuIDk5NTpcdFx0ICogYW5kIGFkZCB0aG9zZSBjcmVkaXRzIHRvIHRoZSBzZXJ2ZXIgc3RydWN0dXJlLlxuIDk5NjpcdFx0ICovXG4gOTk3Olx0XG4gOTk4Olx0XHQvKlxuIDk5OTpcdFx0ICogQ29tcG91bmRpbmcgaXMgbmV2ZXIgdXNlZCBkdXJpbmcgc2Vzc2lvbiBlc3RhYmxpc2guXG4xMDAwOlx0XHQgKi9cbjEwMDE6XHRcdHNwaW5fbG9jayhcdTAwMjZzZXMtXHUwMDNlc2VzX2xvY2spO1xuMTAwMjpcdFx0aWYgKChzZXMtXHUwMDNlc2VzX3N0YXR1cyA9PSBTRVNfTkVXKSB8fCAob3B0eXBlIFx1MDAyNiBDSUZTX05FR19PUCkgfHwgKG9wdHlwZSBcdTAwMjYgQ0lGU19TRVNTX09QKSkge1xuMTAwMzpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZzZXMtXHUwMDNlc2VzX2xvY2spO1xuMTAwNDpcdFxuMTAwNTpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKG51bV9ycXN0ICE9IDEgfHwgIXJlc3BfaW92KSlcbjEwMDY6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEwMDc6XHRcbjEwMDg6XHRcdFx0Y2lmc19zZXJ2ZXJfbG9jayhzZXJ2ZXIpO1xuMTAwOTpcdFx0XHRzbWIzMTFfdXBkYXRlX3ByZWF1dGhfaGFzaChzZXMsIHNlcnZlciwgcnFzdFswXS5ycV9pb3YsIHJxc3RbMF0ucnFfbnZlYyk7XG4xMDEwOlx0XHRcdGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpO1xuMTAxMTpcdFxuMTAxMjpcdFx0XHRzcGluX2xvY2soXHUwMDI2c2VzLVx1MDAzZXNlc19sb2NrKTtcbjEwMTM6XHRcdH1cbjEwMTQ6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNlcy1cdTAwM2VzZXNfbG9jayk7XG4xMDE1Olx0XG4xMDE2Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcnFzdDsgaSYjNDM7JiM0MzspIHtcbjEwMTc6XHRcdFx0cmMgPSB3YWl0X2Zvcl9yZXNwb25zZShzZXJ2ZXIsIG1pZFtpXSk7XG4xMDE4Olx0XHRcdGlmIChyYyAhPSAwKVxuMTAxOTpcdFx0XHRcdGJyZWFrO1xuMTAyMDpcdFx0fVxuMTAyMTpcdFx0aWYgKHJjICE9IDApIHtcbjEwMjI6XHRcdFx0Zm9yICg7IGkgXHUwMDNjIG51bV9ycXN0OyBpJiM0MzsmIzQzOykge1xuMTAyMzpcdFx0XHRcdGNpZnNfc2VydmVyX2RiZyhGWUksIFwmIzM0O0NhbmNlbGxpbmcgd2FpdCBmb3IgbWlkICVsbHUgY21kOiAlZFxcblwmIzM0OyxcbjEwMjQ6XHRcdFx0XHRcdCBtaWRbaV0tXHUwMDNlbWlkLCBsZTE2X3RvX2NwdShtaWRbaV0tXHUwMDNlY29tbWFuZCkpO1xuMTAyNTpcdFx0XHRcdHNlbmRfY2FuY2VsKHNlcywgc2VydmVyLCBcdTAwMjZycXN0W2ldLCBtaWRbaV0sIHhpZCk7XG4xMDI2Olx0XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNm1pZFtpXS1cdTAwM2VtaWRfbG9jayk7XG4xMDI3Olx0XHRcdFx0bWlkW2ldLVx1MDAzZXdhaXRfY2FuY2VsbGVkID0gdHJ1ZTtcbjEwMjg6XHRcdFx0XHRpZiAobWlkW2ldLVx1MDAzZW1pZF9zdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQgfHxcbjEwMjk6XHRcdFx0XHQgICAgbWlkW2ldLVx1MDAzZW1pZF9zdGF0ZSA9PSBNSURfUkVTUE9OU0VfUkVDRUlWRUQpIHtcbjEwMzA6XHRcdFx0XHRcdG1pZFtpXS1cdTAwM2VjYWxsYmFjayA9IGNpZnNfY2FuY2VsbGVkX2NhbGxiYWNrO1xuMTAzMTpcdFx0XHRcdFx0Y2FuY2VsbGVkX21pZFtpXSA9IHRydWU7XG4xMDMyOlx0XHRcdFx0XHRjcmVkaXRzW2ldLnZhbHVlID0gMDtcbjEwMzM6XHRcdFx0XHR9XG4xMDM0Olx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2bWlkW2ldLVx1MDAzZW1pZF9sb2NrKTtcbjEwMzU6XHRcdFx0fVxuMTAzNjpcdFx0fVxuMTAzNzpcdFxuMTAzODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3Jxc3Q7IGkmIzQzOyYjNDM7KSB7XG4xMDM5Olx0XHRcdGlmIChyYyBcdTAwM2MgMClcbjEwNDA6XHRcdFx0XHRnb3RvIG91dDtcbjEwNDE6XHRcbjEwNDI6XHRcdFx0cmMgPSBjaWZzX3N5bmNfbWlkX3Jlc3VsdChtaWRbaV0sIHNlcnZlcik7XG4xMDQzOlx0XHRcdGlmIChyYyAhPSAwKSB7XG4xMDQ0Olx0XHRcdFx0LyogbWFyayB0aGlzIG1pZCBhcyBjYW5jZWxsZWQgdG8gbm90IGZyZWUgaXQgYmVsb3cgKi9cbjEwNDU6XHRcdFx0XHRjYW5jZWxsZWRfbWlkW2ldID0gdHJ1ZTtcbjEwNDY6XHRcdFx0XHRnb3RvIG91dDtcbjEwNDc6XHRcdFx0fVxuMTA0ODpcdFxuMTA0OTpcdFx0XHRpZiAoIW1pZFtpXS1cdTAwM2VyZXNwX2J1ZiB8fFxuMTA1MDpcdFx0XHQgICAgbWlkW2ldLVx1MDAzZW1pZF9zdGF0ZSAhPSBNSURfUkVTUE9OU0VfUkVBRFkpIHtcbjEwNTE6XHRcdFx0XHRyYyA9IHNtYl9FSU8xKHNtYl9laW9fdHJhY2VfcnhfbWlkX3VucmVhZHksIG1pZFtpXS1cdTAwM2VtaWRfc3RhdGUpO1xuMTA1MjpcdFx0XHRcdGNpZnNfZGJnKEZZSSwgXCYjMzQ7QmFkIE1JRCBzdGF0ZT9cXG5cJiMzNDspO1xuMTA1MzpcdFx0XHRcdGdvdG8gb3V0O1xuMTA1NDpcdFx0XHR9XG4xMDU1Olx0XG4xMDU2Olx0XHRcdHJjID0gc2VydmVyLVx1MDAzZW9wcy1cdTAwM2VjaGVja19yZWNlaXZlKG1pZFtpXSwgc2VydmVyLFxuMTA1NzpcdFx0XHRcdFx0XHRcdGZsYWdzIFx1MDAyNiBDSUZTX0xPR19FUlJPUik7XG4xMDU4Olx0XG4xMDU5Olx0XHRcdGlmIChyZXNwX2lvdikge1xuMTA2MDpcdFx0XHRcdGJ1ZiA9IChjaGFyICopbWlkW2ldLVx1MDAzZXJlc3BfYnVmO1xuMTA2MTpcdFx0XHRcdHJlc3BfaW92W2ldLmlvdl9iYXNlID0gYnVmO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgcGF0Y2guIEl0JiMzOTtzIGFkZGluZyB0aGlzIGNvZGUgYmxvY2s6CgpgYGBjCglpZiAocmMgJmx0OyAwIHx8IChmbGFncyAmYW1wOyBDSUZTX05PX1NSVl9SU1ApKSB7CgkJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9ycXN0OyBpJiM0MzsmIzQzOykgewoJCQlkZWxldGVfbWlkKHNlcnZlciwgbWlkW2ldKTsKCQkJY2FuY2VsbGVkX21pZFtpXSA9IHRydWU7CgkJfQoJfQpgYGAKClJpZ2h0IGF3YXksIEkgc2VlIHRoaXMgaXMgbGlrZWx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgYSBtZW1vcnkgbGVhay4gSWYgdGhlIHJldHVybiBjb2RlLCBgcmNgLCBpcyBuZWdhdGl2ZSwgb3IgdGhlIGBDSUZTX05PX1NSVl9SU1BgIGZsYWcgaXMgc2V0LCB3aGljaCBwcm9iYWJseSBtZWFucyB3ZSBkaWRuJiMzOTt0IGdldCBhIHNlcnZlciByZXNwb25zZSwgdGhlbiB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIHNvbWUgbWlkcywgd2hpY2ggSSYjMzk7bSBpbmZlcnJpbmcgYXJlIG1lc3NhZ2UgaWRlbnRpZmllcnMuIEluc2lkZSB0aGlzIGxvb3AsIGBkZWxldGVfbWlkYCBpcyBjYWxsZWQsIGFuZCB0aGVuIGEgYGNhbmNlbGxlZF9taWRgIGZsYWcgaXMgc2V0LiBUaGF0IHN1Z2dlc3RzIHdlIGFyZSBjbGVhbmluZyB1cCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIG1pZHMgYW5kIG1hcmtpbmcgdGhlbSBhcyBoYW5kbGVkLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGBkZWxldGVfbWlkYCBjYWxsLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlLiBXZSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhhdCB0aGUgbWlkJiMzOTtzIHJlc291cmNlcyBhcmUgY29ycmVjdGx5IGZyZWVkIHRvIHByZXZlbnQgYW55IGZvcm0gb2YgdXNlLWFmdGVyLWZyZWUgYW5kL29yIG1lbW9yeSBsZWFrcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaGFuZGxpbmcgYW4gZXJyb3IgY29uZGl0aW9uIG9yIGEgbGFjayBvZiByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIsIHdoaWNoIGNvdWxkIGVhc2lseSBsZWFkIHRvIGRhbmdsaW5nIHBvaW50ZXJzIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gVGhpcyBpcyBhIHJlYXNvbmFibGUgcGF0Y2ggYW5kIEkgd2lsbCBpbnZlc3RpZ2F0ZSB0aGUgYGRlbGV0ZV9taWRgIGZ1bmN0aW9uIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVsZXRlX21pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz0xMTg9dm9pZFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzoxMTk6ZGVsZXRlX21pZChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkKVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMjAte1xuLS1cbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9NjYzPWNpZnNfY2FsbF9hc3luYyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBzbWJfcnFzdCAqcnFzdCxcbi0tXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTcyNi1cdFx0c2VydmVyLVx1MDAzZXNlcXVlbmNlX251bWJlciAtPSAyO1xuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzo3Mjc6XHRcdGRlbGV0ZV9taWQoc2VydmVyLCBtaWQpO1xuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy03MjgtXHR9XG4tLVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz04NjM9Y29tcG91bmRfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxuLS1cbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtOTM4LVx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzo5Mzk6XHRcdFx0XHRkZWxldGVfbWlkKHNlcnZlciwgbWlkW2pdKTtcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtOTQwLVx0XHRcdGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpO1xuLS1cbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtOTcyLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcnFzdDsgaSYjNDM7JiM0MzspIHtcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6OTczOlx0XHRcdGRlbGV0ZV9taWQoc2VydmVyLCBtaWRbaV0pO1xuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy05NzQtXHRcdFx0Y2FuY2VsbGVkX21pZFtpXSA9IHRydWU7XG4tLVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMDY4LVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzoxMDY5Olx0XHRcdC8qIG1hcmsgaXQgc28gYnVmIHdpbGwgbm90IGJlIGZyZWVkIGJ5IGRlbGV0ZV9taWQgKi9cbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtMTA3MC1cdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBDSUZTX05PX1JTUF9CVUYpID09IDApXG4tLVxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMTAwLVx0XHRpZiAoIWNhbmNlbGxlZF9taWRbaV0pXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjExMDE6XHRcdFx0ZGVsZXRlX21pZChzZXJ2ZXIsIG1pZFtpXSk7XG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMDItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0OTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNaWQgRGVsZXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgcHJvcGVyIHJlc291cmNlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBhcm91bmQgZGVsZXRpbmcgYG1pZGAgZW50cmllcyBpbiB0aGUgQ0lGUyBjbGllbnQgY29kZS4gVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gYmUgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBidXQgYWZ0ZXIgbG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQmIzM5O3Mgbm90IHRoZSBwcm9ibGVtIGhlcmUuIGBtaWRgIGlzIGEgYHN0cnVjdCBtaWRfcV9lbnRyeWAsIHByb3Blcmx5IGFsbG9jYXRlZCBhbmQgbWFuYWdlZCBieSB0aGUgU01CIGNsaWVudCBpdHNlbGYuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9vcCB0aGF0IGNhbGxzIGBkZWxldGVfbWlkYCBpZiBgc21iX3NlbmRfcnFzdGAgZmFpbHMgKHJldHVybnMgYHJjICZsdDsgMGApIG9yIGlmIHRoZSBgQ0lGU19OT19TUlZfUlNQYCBmbGFnIGlzIHNldC4gSXQgYWxzbyBzZXRzIGBjYW5jZWxsZWRfbWlkW2ldID0gdHJ1ZWAgdG8gYXZvaWQgY2FsbGluZyBgZGVsZXRlX21pZGAgbGF0ZXIgb24uCgpNeSBpbml0aWFsIHJlYWN0aW9uIHdhcyB0aGF0IHRoZSBjb2RlIHdhcyByZWR1bmRhbnQsIGJlY2F1c2UgSSBjb3VsZCBzZWUgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBhbHJlYWR5IGNhbGxzIGBkZWxldGVfbWlkYCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiBpbiBhbGwgY2FzZXMsIGV2ZW4gd2hlbiBgcmMgJmx0OyAwYCBvciBgQ0lGU19OT19TUlZfUlNQYCBpcyBzZXQuIEJ1dCBsb29raW5nIGF0IHRoZSBvcmlnaW5hbCBjb2RlLCBpZiBgcmMgJmx0OyAwYCwgaXQgZ29lcyB0byBgb3V0YCwgYW5kIHRoZW4gaXQgY2FsbHMgYGRlbGV0ZV9taWRgIHdpdGggYGNhbmNlbGxlZF9taWRbaV1gIGFzIGZhbHNlLCB3aGljaCBJIHRob3VnaHQgY291bGQgYmUgYSBwcm9ibGVtLiBTbywgSSBkdWcgYSBsaXR0bGUgZGVlcGVyLCBhbmQgcmVhbGl6ZWQgdGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhbmQgdGhlIHJvbGUgb2YgYGRlbGV0ZV9taWRgLiBgZGVsZXRlX21pZGAgbGlrZWx5IHJlbW92ZXMgdGhlIGBtaWRgIGVudHJ5IGZyb20gdGhlIHNlcnZlciYjMzk7cyBwZW5kaW5nIG1pZCBsaXN0LCB3aGljaCBpcyBwcm9iYWJseSBwcm90ZWN0ZWQgYnkgYSBsb2NrIChsaWtlIGBzZXJ2ZXItJmd0O3Nydl9sb2NrYCBvciBzb21ldGhpbmcgc2ltaWxhcikuIFRoYXQgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgYGRlbGV0ZV9taWRgIHByb2JhYmx5IG5lZWRzIHRoZSBsb2NrLCBzbyBpdCYjMzk7cyBiZXN0IHRvIGNhbGwgaXQgYmVmb3JlIGBjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKWAgb3IgYXQgbGVhc3QgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHRoYXQgcmVsZWFzZXMgdGhhdCBsb2NrLgoKU28sIGluIHRoZSBvcmlnaW5hbCBjb2RlLCBpZiBgc21iX3NlbmRfcnFzdGAgZmFpbHMsIHdlIGhpdCBgb3V0YC4gVGhlIGBkZWxldGVfbWlkYCBhdCB0aGUgZW5kIGlzIHVubmVjZXNzYXJ5IGlmIHRoZSBtaWQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIHBlbmRpbmcgbGlzdCBlYXJsaWVyIGluIHRoZSBmbG93LgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IGNvcnJlY3RpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgbWlkIGxpc3QgYnkgZGVsZXRpbmcgdGhlIGBtaWRgIHByaW9yIHRvIHJlbGVhc2luZyB0aGUgc2VydmVyIGxvY2suIFRoYXQgbWFrZXMgdGhpcyBhIGNydWNpYWwgZml4IGZvciBlbnN1cmluZyBkYXRhIGludGVncml0eSBhbmQgcHJldmVudGluZyB0aG9zZSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExODpcdHZvaWRcbiAxMTk6XHRkZWxldGVfbWlkKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwgc3RydWN0IG1pZF9xX2VudHJ5ICptaWQpXG4gMTIwOlx0e1xuIDEyMTpcdFx0c3Bpbl9sb2NrKFx1MDAyNnNlcnZlci1cdTAwM2VtaWRfcXVldWVfbG9jayk7XG4gMTIyOlx0XG4gMTIzOlx0XHRpZiAoIW1pZC1cdTAwM2VkZWxldGVkX2Zyb21fcSkge1xuIDEyNDpcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNm1pZC1cdTAwM2VxaGVhZCk7XG4gMTI1Olx0XHRcdG1pZC1cdTAwM2VkZWxldGVkX2Zyb21fcSA9IHRydWU7XG4gMTI2Olx0XHR9XG4gMTI3Olx0XHRzcGluX3VubG9jayhcdTAwMjZzZXJ2ZXItXHUwMDNlbWlkX3F1ZXVlX2xvY2spO1xuIDEyODpcdFxuIDEyOTpcdFx0cmVsZWFzZV9taWQoc2VydmVyLCBtaWQpO1xuIDEzMDpcdH1cbiAxMzE6XHRcbiAxMzI6XHQvKlxuIDEzMzpcdCAqIHNtYl9zZW5kX2t2ZWMgLSBzZW5kIGFuIGFycmF5IG9mIGt2ZWNzIHRvIHRoZSBzZXJ2ZXJcbiAxMzQ6XHQgKiBAc2VydmVyOlx0U2VydmVyIHRvIHNlbmQgdGhlIGRhdGEgdG9cbiAxMzU6XHQgKiBAc21iX21zZzpcdE1lc3NhZ2UgdG8gc2VuZFxuIDEzNjpcdCAqIEBzZW50Olx0YW1vdW50IG9mIGRhdGEgc2VudCBvbiBzb2NrZXQgaXMgc3RvcmVkIGhlcmVcbiAxMzc6XHQgKlxuIDEzODpcdCAqIE91ciBiYXNpYyBcJiMzNDtzZW5kIGRhdGEgdG8gc2VydmVyXCYjMzQ7IGZ1bmN0aW9uLiBTaG91bGQgYmUgY2FsbGVkIHdpdGggc3J2X211dGV4XG4gMTM5Olx0ICogaGVsZC4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIHJlc3VsdHMuXG4gMTQwOlx0ICovXG4gMTQxOlx0aW50XG4gMTQyOlx0c21iX3NlbmRfa3ZlYyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBtc2doZHIgKnNtYl9tc2csXG4gMTQzOlx0XHQgICAgICBzaXplX3QgKnNlbnQpXG4gMTQ0Olx0e1xuIDE0NTpcdFx0aW50IHJjID0gMDtcbiAxNDY6XHRcdGludCByZXRyaWVzID0gMDtcbiAxNDc6XHRcdHN0cnVjdCBzb2NrZXQgKnNzb2NrZXQgPSBzZXJ2ZXItXHUwMDNlc3NvY2tldDtcbiAxNDg6XHRcbiAxNDk6XHRcdCpzZW50ID0gMDtcbiAxNTA6XHRcbiAxNTE6XHRcdGlmIChzZXJ2ZXItXHUwMDNlbm9ibG9ja3NuZClcbiAxNTI6XHRcdFx0c21iX21zZy1cdTAwM2Vtc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQgJiM0MzsgTVNHX05PU0lHTkFMO1xuIDE1MzpcdFx0ZWxzZVxuIDE1NDpcdFx0XHRzbWJfbXNnLVx1MDAzZW1zZ19mbGFncyA9IE1TR19OT1NJR05BTDtcbiAxNTU6XHRcbiAxNTY6XHRcdHdoaWxlIChtc2dfZGF0YV9sZWZ0KHNtYl9tc2cpKSB7XG4gMTU3Olx0XHRcdC8qXG4gMTU4Olx0XHRcdCAqIElmIGJsb2NraW5nIHNlbmQsIHdlIHRyeSAzIHRpbWVzLCBzaW5jZSBlYWNoIGNhbiBibG9ja1xuIDE1OTpcdFx0XHQgKiBmb3IgNSBzZWNvbmRzLiBGb3Igbm9uYmxvY2tpbmcgIHdlIGhhdmUgdG8gdHJ5IG1vcmVcbiAxNjA6XHRcdFx0ICogYnV0IHdhaXQgaW5jcmVhc2luZyBhbW91bnRzIG9mIHRpbWUgYWxsb3dpbmcgdGltZSBmb3JcbiAxNjE6XHRcdFx0ICogc29ja2V0IHRvIGNsZWFyLiAgVGhlIG92ZXJhbGwgdGltZSB3ZSB3YWl0IGluIGVpdGhlclxuIDE2MjpcdFx0XHQgKiBjYXNlIHRvIHNlbmQgb24gdGhlIHNvY2tldCBpcyBhYm91dCAxNSBzZWNvbmRzLlxuIDE2MzpcdFx0XHQgKiBTaW1pbGFybHkgd2Ugd2FpdCBmb3IgMTUgc2Vjb25kcyBmb3IgYSByZXNwb25zZSBmcm9tXG4gMTY0Olx0XHRcdCAqIHRoZSBzZXJ2ZXIgaW4gU2VuZFJlY2VpdmVbMl0gZm9yIHRoZSBzZXJ2ZXIgdG8gc2VuZFxuIDE2NTpcdFx0XHQgKiBhIHJlc3BvbnNlIGJhY2sgZm9yIG1vc3QgdHlwZXMgb2YgcmVxdWVzdHMgKGV4Y2VwdFxuIDE2NjpcdFx0XHQgKiBTTUIgV3JpdGUgcGFzdCBlbmQgb2YgZmlsZSB3aGljaCBjYW4gYmUgc2xvdywgYW5kXG4gMTY3Olx0XHRcdCAqIGJsb2NraW5nIGxvY2sgb3BlcmF0aW9ucykuIE5GUyB3YWl0cyBzbGlnaHRseSBsb25nZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUyOQoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiA0NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBMb2NraW5nIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGRlbGV0ZV9taWRgIHRha2VzIGBzZXJ2ZXItJmd0O21pZF9xdWV1ZV9sb2NrYCBhbmQgY2FsbHMgYHJlbGVhc2VfbWlkYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIE5vdywgd2h5IGlzIHRoaXMgcGF0Y2ggY2FsbGluZyBgZGVsZXRlX21pZGAgKmJlZm9yZSogYGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpYD8gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpYCB1bmxvY2tzIGBzZXJ2ZXItJmd0O3Nydl9tdXRleGAuIFNvLCBpZiBgZGVsZXRlX21pZGAgaXMgY2FsbGVkICpiZWZvcmUqIHRoZSB1bmxvY2ssIGl0JiMzOTtzIHByb3RlY3RlZCBieSBgc3J2X211dGV4YC4gQnV0LCBpZiBgZGVsZXRlX21pZGAgaXMgY2FsbGVkIGFmdGVyIGBvdXQ6YCwgaXQmIzM5O3Mgbm90LiBJcyB0aGlzIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIHRoZW4/CgpJZiBgcmMgJmx0OyAwYCBtZWFucyB0aGUgcmVxdWVzdHMgZmFpbGVkIHRvIHNlbmQsIGFuZCB3ZSB1bmxvY2sgYHNydl9tdXRleGAgKmJlZm9yZSogZGVsZXRpbmcsIGFub3RoZXIgdGhyZWFkIGNvdWxkIHN0ZXAgaW4sIHByb2Nlc3MgYSByZXNwb25zZSAoZXZlbiB0aG91Z2ggdGhlcmUgKndhc24mIzM5O3QqIGEgcmVxdWVzdCBzZW50ISksIG9yLCB0aGUgcmVjb25uZWN0IHRocmVhZCBjb3VsZCBydW4gYW5kIHRyeSB0byBjbGVhbiB1cCB0aGUgbWlkcy4uLiBwb3RlbnRpYWxseSBjYXVzaW5nIGlzc3Vlcy4gT2theSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYWRkcmVzc2luZyBlaXRoZXIgYSByYWNlIGNvbmRpdGlvbiwgYSB1c2UtYWZ0ZXItZnJlZSwgb3IgYSBtZW1vcnkgbGVhay4gQW5kLCBpdCYjMzk7cyAqZGVmaW5pdGVseSogYSByYWNlIGlzc3VlLgoKTm93LCBkb2VzIHRoaXMgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoaXMgaXMgbm90IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQuIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBidWlsdCB0byBjYXRjaCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGFuZCBkZWFkbG9ja3MuIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgZGVhbHMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgaGVyZS4gSXQmIzM5O3MgY29udHJvbCBmbG93IGFuZCBvYmplY3QgbGlmZXRpbWUgbWFuYWdlbWVudC4gTGV0JiMzOTtzIGRvdWJsZSBjaGVjayB0byBiZSBzdXJlLi4uCgpgY2FuY2VsbGVkX21pZGAgaXMgYW4gYXJyYXkgb2YgYm9vbGVhbnMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYC4gYG1pZGAgaXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMsIGFuZCB0aGUgcGF0Y2ggaXMgc2ltcGx5IHNldHRpbmcgYGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlYCBhbmQgdGhlbiBjYWxsaW5nIGBkZWxldGVfbWlkYC4gUHVyZWx5IGNvbnRyb2wgZmxvdyBhbmQgb2JqZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludm9sdmVkLiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBmYWxzZS4gVGhhdCYjMzk7cyBteSByZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBjb21wb3VuZF9zZW5kX3JlY3YoKWAgdG8gZGVsZXRlIGBtaWRgIGVudHJpZXMgYW5kIG1hcmsgdGhlbSBhcyBjYW5jZWxsZWQgYmVmb3JlIHJlbGVhc2luZyB0aGUgc2VydmVyIGxvY2sgKGBjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKWApIHdoZW4gYHNtYl9zZW5kX3Jxc3QoKWAgZmFpbHMgKGByYyBcdTAwM2MgMGApIG9yIHdoZW4gbm8gc2VydmVyIHJlc3BvbnNlIGlzIGV4cGVjdGVkLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiwgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrIHJlbGF0ZWQgdG8gdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYG1pZF9xX2VudHJ5YCBzdHJ1Y3R1cmVzLlxuXG5UaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdyBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSkuIEJ1Z3MgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWUsIHVzZS1hZnRlci1mcmVlLCBvciByYWNlIGNvbmRpdGlvbnMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgY29tcG91bmRfc2VuZF9yZWN2KClgIHRvIGRlbGV0ZSBgbWlkYCBlbnRyaWVzIGFuZCBtYXJrIHRoZW0gYXMgY2FuY2VsbGVkIGJlZm9yZSByZWxlYXNpbmcgdGhlIHNlcnZlciBsb2NrIChgY2lmc19zZXJ2ZXJfdW5sb2NrKHNlcnZlcilgKSB3aGVuIGBzbWJfc2VuZF9ycXN0KClgIGZhaWxzIChgcmMgXHUwMDNjIDBgKSBvciB3aGVuIG5vIHNlcnZlciByZXNwb25zZSBpcyBleHBlY3RlZC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVhayByZWxhdGVkIHRvIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBtaWRfcV9lbnRyeWAgc3RydWN0dXJlcy5cblxuVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UpLiBCdWdzIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmFjZSBjb25kaXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1Mjo1Ny40NDg2NTY5NDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDEwMjQ3MTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29tcG91bmRfc2VuZF9yZWN2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgY29tcG91bmRfc2VuZF9yZWN2KClgIHRvIGRlbGV0ZSBgbWlkYCBlbnRyaWVzIGFuZCBtYXJrIHRoZW0gYXMgY2FuY2VsbGVkIGJlZm9yZSByZWxlYXNpbmcgdGhlIHNlcnZlciBsb2NrIChgY2lmc19zZXJ2ZXJfdW5sb2NrKHNlcnZlcilgKSB3aGVuIGBzbWJfc2VuZF9ycXN0KClgIGZhaWxzIChgcmMgXFx1MDAzYyAwYCkgb3Igd2hlbiBubyBzZXJ2ZXIgcmVzcG9uc2UgaXMgZXhwZWN0ZWQuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHJhY2UgY29uZGl0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWsgcmVsYXRlZCB0byB0aGUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiBgbWlkX3FfZW50cnlgIHN0cnVjdHVyZXMuXFxuXFxuVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UpLiBCdWdzIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmFjZSBjb25kaXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBjb21wb3VuZF9zZW5kX3JlY3ZgIHdoZXJlIG1pZCBhcnJheXMgYXJlIG5vdCBkZWxldGVkIHdoZW4gYHJjIFxcdTAwM2MgMGAgb3IgYGZsYWdzIFxcdTAwMjYgQ0lGU19OT19TUlZfUlNQYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBTTUIgY2xpZW50J3MgdHJhbnNwb3J0IGxheWVyLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFNNQiBjbGllbnQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTI6NTcuNDQ4NjY0MzEyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODUyODAyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmODQ5NWI4NjI1MDIxNDY0MjM0YzdhNTUwNWVkZTRlZDcwODY3ZjQ1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTE6NTI6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYyBiL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcXG5pbmRleCBmZGY0ZTUwYzI3Y2ViLi44ZDE0MjI1ZTk0OGIxIDEwMDY0NFxcbi0tLSBhL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcXG4rKysgYi9mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jXFxuQEAgLTk2OCw2ICs5NjgsMTMgQEAgY29tcG91bmRfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxcbiBcXHRcXHRzZXJ2ZXItXFx1MDAzZXNlcXVlbmNlX251bWJlciAtPSAyO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocmMgXFx1MDAzYyAwIHx8IChmbGFncyBcXHUwMDI2IENJRlNfTk9fU1JWX1JTUCkpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9ycXN0OyBpKyspIHtcXG4rXFx0XFx0XFx0ZGVsZXRlX21pZChzZXJ2ZXIsIG1pZFtpXSk7XFxuK1xcdFxcdFxcdGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpO1xcbiBcXG4gXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTI6NTcuODM0NjM3MDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDc3ODI4ODgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29tcG91bmRfc2VuZF9yZWN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGNvbXBvdW5kX3NlbmRfcmVjdmAgd2hlcmUgbWlkIGFycmF5cyBhcmUgbm90IGRlbGV0ZWQgd2hlbiBgcmMgXFx1MDAzYyAwYCBvciBgZmxhZ3MgXFx1MDAyNiBDSUZTX05PX1NSVl9SU1BgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNNQiBjbGllbnQncyB0cmFuc3BvcnQgbGF5ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgU01CIGNsaWVudCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmODQ5NWI4NjI1MDIxNDY0MjM0YzdhNTUwNWVkZTRlZDcwODY3ZjQ1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMTo1Mjo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMgYi9mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jXG5pbmRleCBmZGY0ZTUwYzI3Y2ViLi44ZDE0MjI1ZTk0OGIxIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1xuKysrIGIvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1xuQEAgLTk2OCw2ICs5NjgsMTMgQEAgY29tcG91bmRfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxuIFx0XHRzZXJ2ZXItXHUwMDNlc2VxdWVuY2VfbnVtYmVyIC09IDI7XG4gXHR9XG4gXG4rXHRpZiAocmMgXHUwMDNjIDAgfHwgKGZsYWdzIFx1MDAyNiBDSUZTX05PX1NSVl9SU1ApKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9ycXN0OyBpKyspIHtcbitcdFx0XHRkZWxldGVfbWlkKHNlcnZlciwgbWlkW2ldKTtcbitcdFx0XHRjYW5jZWxsZWRfbWlkW2ldID0gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0Y2lmc19zZXJ2ZXJfdW5sb2NrKHNlcnZlcik7XG4gXG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTI6NTcuODM0NjQyOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzU1MTA1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTUIgQ2xpZW50IFRyYW5zcG9ydCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNoYW5nZXMgd2l0aGluIGBjb21wb3VuZF9zZW5kX3JlY3ZgLCBzcGVjaWZpY2FsbHkgdGhpcyBuZXcgbG9vcC4gSXQgc2VlbXMgdGhlIHB1cnBvc2UgaXMgdG8gY2xlYXIgb3V0IG1pZCBhcnJheXMgdW5kZXIgY2VydGFpbiBlcnJvciBjb25kaXRpb25zIG9yIGZsYWdzLCBsaWtlbHkgdG8gbWFuYWdlIG1lbW9yeSBlZmZlY3RpdmVseSBvciBoYW5kbGUgZmFpbGVkIHNlcnZlciByZXNwb25zZXMuIFRoaXMgaXMgaW1wb3J0YW50OiBJZiBgcmNgIGlzIG5lZ2F0aXZlIG9yIGlmIHRoZSBgQ0lGU19OT19TUlZfUlNQYCBmbGFnIGlzIHNldCwgdGhpcyBsb29wIHRyaWdnZXJzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYWN0aW9uLiBJcyB0aGlzIGEgbmV3IGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5PyBJcyBpdCBhaW1lZCBhdCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcz8gUGVyaGFwcyBpdCdzIGEgY3JpdGljYWwgYWRqdXN0bWVudCB0byBob3cgd2UgbWFuYWdlIG91dHN0YW5kaW5nIHJlcXVlc3RzIGluIHRoZSBmYWNlIG9mIG5ldHdvcmsgaXNzdWVzLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIGBjb21wb3VuZF9zZW5kX3JlY3ZgIGl0c2VsZiB3aXRoaW4gYGZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSBjb250ZXh0IGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCB0aGUgbWlkIGFycmF5cyBhcmUsIGhvdyB0aGV5IGFyZSB1c2VkLCBhbmQgd2h5IHRoZWlyIGNsZWFudXAgaXMgY29uZGl0aW9uYWwgb24gdGhlc2Ugc3BlY2lmaWMgZmxhZ3Mgb3IgcmV0dXJuIGNvZGVzLiBUaGlzIGlzIGFsbCBhYm91dCBlbnN1cmluZyByb2J1c3QgYW5kIHJlbGlhYmxlIFNNQiBjbGllbnQgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzowMS41NzAxNTYyNjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMjc3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcG91bmRfc2VuZF9yZWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz04NjI9aW50XFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzo4NjM6Y29tcG91bmRfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtODY0LVxcdFxcdCAgIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcixcXG4tLVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9MTEwOD1jaWZzX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcXG4tLVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtMTExMi17XFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzoxMTEzOlxcdHJldHVybiBjb21wb3VuZF9zZW5kX3JlY3YoeGlkLCBzZXMsIHNlcnZlciwgZmxhZ3MsIDEsXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMTE0LVxcdFxcdFxcdFxcdCAgcnFzdCwgcmVzcF9idWZfdHlwZSwgcmVzcF9pb3YpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzowMS42MTgzODgyMTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ5MjM0MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNNQiBDbGllbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgY29tcG91bmRfc2VuZF9yZWN2YCB3aXRoaW4gYGZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNgLiBSaWdodCwgdGhhdCdzIGluIHRoZSBTTUIgY2xpZW50IGNvZGUsIHdoaWNoIGlzIENJRlMuIEl0J3MgYWx3YXlzIGltcG9ydGFudCB0byBrbm93ICp3aGVyZSogdGhlIGZpeCBpcyBoYXBwZW5pbmcuIEFuZCBTTUIgY2xpZW50cz8gVGhleSdyZSBvZnRlbiBsdXJraW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhpbmsgVk1zLCBjb250YWluZXJzLCBhbmQgc3VjaC4gTm93LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoZSBTTUIgY2xpZW50IG9uIHRoaXMgc3lzdGVtLiBJdCB3aWxsIHByb3ZpZGUgY29udGV4dCBpZiB0aGVyZSBpcyBhbnkgY3VzdG9tIGNvbmZpZ3VyYXRpb24gdGhhdCBtYXkgYmUgcmVsZXZhbnQgdG8gdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6MDQuNTY3NjI2MTk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTk4MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDSUZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9zbWIvY2xpZW50L0tjb25maWc6Mjpjb25maWcgQ0lGU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUIzIGFuZCBDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSlcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTMtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjU0OmNvbmZpZyBDSUZTX1NUQVRTMlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cXHRib29sIFxcXCJFeHRlbmRlZCBzdGF0aXN0aWNzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTY3LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjktXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjgzOmNvbmZpZyBDSUZTX1VQQ0FMTFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy04NC1cXHRib29sIFxcXCJLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cFxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6OTI6Y29uZmlnIENJRlNfWEFUVFJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiQ0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJDSUZTIFBPU0lYIEV4dGVuc2lvbnNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMTk6Y29uZmlnIENJRlNfREVCVUdcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTIwLVxcdGJvb2wgXFxcIkVuYWJsZSBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjctXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEyODpjb25maWcgQ0lGU19ERUJVRzJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVxcdGJvb2wgXFxcIkVuYWJsZSBhZGRpdGlvbmFsIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEzOC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDAtXFx0Ym9vbCBcXFwiRHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE0OTpjb25maWcgQ0lGU19ERlNfVVBDQUxMXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE1MC1cXHRib29sIFxcXCJERlMgZmVhdHVyZSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTYyOmNvbmZpZyBDSUZTX1NXTl9VUENBTExcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVxcdGJvb2wgXFxcIlNXTiBmZWF0dXJlIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTcyLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkFsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgwLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxODE6Y29uZmlnIENJRlNfU01CX0RJUkVDVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXFx0Ym9vbCBcXFwiU01CIERpcmVjdCBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5MC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkyLVxcdGJvb2wgXFxcIlByb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTk5OmNvbmZpZyBDSUZTX1JPT1RcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjAwLVxcdGJvb2wgXFxcIlNNQiByb290IGZpbGUgc3lzdGVtIChFeHBlcmltZW50YWwpXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MjA3OmNvbmZpZyBDSUZTX0NPTVBSRVNTSU9OXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTTUIgbWVzc2FnZSBjb21wcmVzc2lvbiAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6MDQuNjE2NjMwNDg1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3MTA4Mzg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkNJRlMgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gQW5hbHlzaXMqKlxuXG5SaWdodCwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgQ0lGUy4gR290IGl0LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGNvbXBvdW5kX3NlbmRfcmVjdmAgZnVuY3Rpb24sIHdoaWNoIHJlc2lkZXMgaW4gdGhlIGBmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jYCBmaWxlLiBUaGlzIHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgU01CIGNsaWVudCdzIHRyYW5zcG9ydCBsYXllci4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUsIHRoZSBvbmUgSSBuZWVkIHRvIGFuc3dlciBmaXJzdCwgaXMgd2hldGhlciBgY29tcG91bmRfc2VuZF9yZWN2YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCBvciBpcyBleHBvcnRlZC4gS25vd2luZyB0aGF0IGltbWVkaWF0ZWx5IGRldGVybWluZXMgaG93IHdpZGVseSBhY2Nlc3NpYmxlLCBhbmQgdGh1cywgaG93IHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgb3IgY3JpdGljYWwgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG1pZ2h0IGJlIGluIHRoZSBsYXJnZXIgU01CIGNsaWVudCBpbmZyYXN0cnVjdHVyZS4gVGhhdCdzIHRoZSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIEkgbmVlZCBiZWZvcmUgSSBjYW4gYXNzZXNzIGl0cyByb2xlIG9yIHBvdGVudGlhbCBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzowNy42ODc3MTY1NzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMTMwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcG91bmRfc2VuZF9yZWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvY2FjaGVkX2Rpci5jPTEzND1pbnQgb3Blbl9jYWNoZWRfZGlyKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NhY2hlZF9kaXIuYy0zMjItXFxuZnMvc21iL2NsaWVudC9jYWNoZWRfZGlyLmM6MzIzOlxcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXFxuZnMvc21iL2NsaWVudC9jYWNoZWRfZGlyLmMtMzI0LVxcdFxcdFxcdFxcdGZsYWdzLCAyLCBycXN0LFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaD0xMDE9aW50IGNpZnNfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaC0xMDMtXFx0XFx0ICAgaW50ICpyZXNwX2J1Zl90eXBlLCBjb25zdCBpbnQgZmxhZ3MsIHN0cnVjdCBrdmVjICpyZXNwX2lvdik7XFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaDoxMDQ6aW50IGNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcXG5mcy9zbWIvY2xpZW50L2NpZnNwcm90by5oLTEwNS1cXHRcXHQgICAgICAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBjb25zdCBpbnQgZmxhZ3MsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJpbm9kZS5jPTIwMD1zdGF0aWMgaW50IHNtYjJfY29tcG91bmRfb3AoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmMtNTM3LVxcbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmM6NTM4OlxcdFxcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXFxuZnMvc21iL2NsaWVudC9zbWIyaW5vZGUuYy01MzktXFx0XFx0XFx0XFx0XFx0ZmxhZ3MsIG51bV9ycXN0IC0gMixcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmMtNTUwLVxcbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmM6NTUxOlxcdFxcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXFxuZnMvc21iL2NsaWVudC9zbWIyaW5vZGUuYy01NTItXFx0XFx0XFx0XFx0XFx0ZmxhZ3MsIG51bV9ycXN0LFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyaW5vZGUuYz0xMDkyPXNtYjJfdW5saW5rKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJpbm9kZS5jLTExNjctXFxuZnMvc21iL2NsaWVudC9zbWIyaW5vZGUuYzoxMTY4OlxcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgdGNvbi1cXHUwMDNlc2VzLCBzZXJ2ZXIsIGZsYWdzLFxcbmZzL3NtYi9jbGllbnQvc21iMmlub2RlLmMtMTE2OS1cXHRcXHRcXHRcXHRBUlJBWV9TSVpFKHJxc3QpLCBycXN0LFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MTE4MT1zbWIyX3NldF9lYShjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMTM0Mi1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoxMzQzOlxcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgc2VzLCBzZXJ2ZXIsXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMTM0NC1cXHRcXHRcXHRcXHRmbGFncywgMywgcnFzdCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTE1Nzc9c21iMl9pb2N0bF9xdWVyeV9pbmZvKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xNzYxLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jOjE3NjI6XFx0cmMgPSBjb21wb3VuZF9zZW5kX3JlY3YoeGlkLCBzZXMsIHNlcnZlcixcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xNzYzLVxcdFxcdFxcdFxcdGZsYWdzLCAzLCBycXN0LFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MjQ4ND1zbWIyX3F1ZXJ5X2Rpcl9maXJzdChjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjU2NS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoyNTY2OlxcdHJjID0gY29tcG91bmRfc2VuZF9yZWN2KHhpZCwgdGNvbi1cXHUwMDNlc2VzLCBzZXJ2ZXIsXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjU2Ny1cXHRcXHRcXHRcXHRmbGFncywgMiwgcnFzdCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTI4NjA9c21iMl9xdWVyeV9pbmZvX2NvbXBvdW5kKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0yOTc5LVxcdGlmIChjZmlkKSB7XFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6Mjk4MDpcXHRcXHRyYyA9IGNvbXBvdW5kX3NlbmRfcmVjdih4aWQsIHNlcywgc2VydmVyLFxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTI5ODEtXFx0XFx0XFx0XFx0XFx0ZmxhZ3MsIDEsIFxcdTAwMjZycXN0WzFdLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjk4My1cXHR9IGVsc2Uge1xcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jOjI5ODQ6XFx0XFx0cmMgPSBjb21wb3VuZF9zZW5kX3JlY3YoeGlkLCBzZXMsIHNlcnZlcixcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0yOTg1LVxcdFxcdFxcdFxcdFxcdGZsYWdzLCAzLCBycXN0LFxcbi0tXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz04NjI9aW50XFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzo4NjM6Y29tcG91bmRfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtODY0LVxcdFxcdCAgIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcixcXG4tLVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9MTEwOD1jaWZzX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcXG4tLVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtMTExMi17XFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzoxMTEzOlxcdHJldHVybiBjb21wb3VuZF9zZW5kX3JlY3YoeGlkLCBzZXMsIHNlcnZlciwgZmxhZ3MsIDEsXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMTE0LVxcdFxcdFxcdFxcdCAgcnFzdCwgcmVzcF9idWZfdHlwZSwgcmVzcF9pb3YpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzowNy43MzQ4MzcxMDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQ3MTgzMDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBjb21wb3VuZF9zZW5kX3JlY3ZgIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgY29tcG91bmRfc2VuZF9yZWN2YCBpcyBjcml0aWNhbC4gSXQncyAqZXhwb3J0ZWQqIGluIGBjaWZzcHJvdG8uaGAsIHdoaWNoIG1lYW5zIGl0J3MgYSBjb3JlIGNvbXBvbmVudCwgdXNlZCB0aHJvdWdob3V0IHRoZSBDSUZTIGNsaWVudCBjb2RlLiBUaGF0IGFscmVhZHkgcmFpc2VzIGEgZmxhZyDigJMgd2lkZXNwcmVhZCB1c2UgbWVhbnMgd2lkZXNwcmVhZCBwb3RlbnRpYWwgaW1wYWN0IGlmIHRoZXJlJ3MgYSBwcm9ibGVtLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIHdpdGhpbiBgY29tcG91bmRfc2VuZF9yZWN2YC4gU3BlY2lmaWNhbGx5LCBpdCBkZWFscyB3aXRoIGEgc2NlbmFyaW8gd2hlcmUgYG1pZGAgYXJyYXlzIGFyZW4ndCBiZWluZyBjbGVhbmVkIHVwIHByb3Blcmx5IHdoZW4gYW4gZXJyb3Igb2NjdXJzIChgcmMgXHUwMDNjIDBgKSBvciB1bmRlciBjZXJ0YWluIGZsYWcgY29uZGl0aW9ucyAoYGZsYWdzIFx1MDAyNiBDSUZTX05PX1NSVl9SU1BgKS4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgdG8gdGhlIFNNQiBjbGllbnQsIHdoaWNoIGlzIGEgYmlnIGRlYWwuIEdpdmVuIHRoYXQgaXQncyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdHlwaWNhbCBTTUIgY2xpZW50IG9wZXJhdGlvbnMsIGxpa2UgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggYSBDSUZTIHNoYXJlLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gYmUgdmVyeSBjb25jZXJuZWQgYWJvdXQuXG5cblNvLCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBsb29rcyBsaWtlIGEgcHJpbWUgdGFyZ2V0LiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gdGVzdCB0aGVzZSBjb2RlIHBhdGhzIHRob3JvdWdobHkuIFRoZSBpZGVudGlmaWVkIGZvY3VzIHN5bWJvbCBoZXJlLCBgY29tcG91bmRfc2VuZF9yZWN2YCwgYW5kIHRoZSByZWxhdGVkIGBjaWZzX3NlbmRfcmVjdmAgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgb3VyIGZvY3VzLCBidXQgd2UgbmVlZCB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vdCBvdGhlciBjb25maWdzIHRoYXQgd2UgbmVlZCB0byBiZSBhd2FyZSBvZi5cblxuV2UncmUgYWxyZWFkeSBlbmFibGluZyB0aGUgYENJRlNgIGNvbmZpZywgd2hpY2ggaXMgY29ycmVjdC4gSSdtIGdvaW5nIHRvIGRvdWJsZSBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciBgY29tcG91bmRfc2VuZF9yZWN2YCBhbmQgbG9vayBmb3IgYW55IHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCwgb3IgdGhhdCBjYWxsIGl0LCB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29tcGxldGUgcGljdHVyZSBiZWZvcmUgd2UgZGl2ZSBpbnRvIGZ1enppbmcuIEl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6MTMuNDgyMDIyNjk2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMwNTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wb3VuZF9zZW5kX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jPTg2Mj1pbnRcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjg2Mzpjb21wb3VuZF9zZW5kX3JlY3YoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy04NjQtXFx0XFx0ICAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLFxcbi0tXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz0xMTA4PWNpZnNfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxcbi0tXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMTEyLXtcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjExMTM6XFx0cmV0dXJuIGNvbXBvdW5kX3NlbmRfcmVjdih4aWQsIHNlcywgc2VydmVyLCBmbGFncywgMSxcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMTQtXFx0XFx0XFx0XFx0ICBycXN0LCByZXNwX2J1Zl90eXBlLCByZXNwX2lvdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjEzLjUzMDMzMzMxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDAzNzY2ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBzcG90bGlnaHQgaXMgb24gYGNvbXBvdW5kX3NlbmRfcmVjdmAuIFRoZSBmdXp6aW5nIHZlcmRpY3QgaXMgYSBkZWZpbml0ZSBcInllc1wiIOKAkyBXb3J0aEZ1enppbmc9dHJ1ZS4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgY29tcG91bmRfc2VuZF9yZWN2YCwgYW5kIHRoZSBgQ0lGU2AgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlIHJlYXNvbmluZyBib2lscyBkb3duIHRvIGEgZml4IHdpdGhpbiBgY29tcG91bmRfc2VuZF9yZWN2YCB3aGVyZSBpdCB3YXNuJ3QgaGFuZGxpbmcgbWlkLWFycmF5cyBwcm9wZXJseSBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IgKGByYyBcdTAwM2MgMGApIG9yIHdoZW4gYENJRlNfTk9fU1JWX1JTUGAgaXMgc2V0LiBFc3NlbnRpYWxseSwgYSBjbGVhbnVwIGlzc3VlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCBpbiB0aGUgU01CIGNsaWVudCdzIHRyYW5zcG9ydCBsYXllci4gVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoYXQgdGhpcyBsYXllciBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIFNNQiBjbGllbnQgb3BlcmF0aW9ucywgbWVhbmluZyBpdCdzIHJlYWNoYWJsZSBieSBhIGxvdCBvZiBkaWZmZXJlbnQgY2xpZW50cy4gR2l2ZW4gdGhlIGNyaXRpY2FsIHBvc2l0aW9uIG9mIHRoZSB0cmFuc3BvcnQgbGF5ZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBwYXRjaCBtaWdodCBpbnRyb2R1Y2UgYW55IG90aGVyIHN1YnRsZSBpc3N1ZXMgb3IgZXhwb3NlcyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIHdpbGwgZm9jdXMgb24gdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UgYWNyb3NzIHRoZSBTTUIgY2xpZW50J3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGVycm9yIGhhbmRsaW5nIGFuZCByZXNwb25zZSBsb2dpYyB0byBiZSBzdXJlIHRoaXMgXCJmaXhcIiBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYXR0YWNrIHZlY3RvcnMuIFRoaXMgd2FycmFudHMgYSB2ZXJ5IGNsb3NlIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTQsIk91dHB1dFRva2VucyI6MTA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjE4LjUzNDEwMjI1M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODIwODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29tcG91bmRfc2VuZF9yZWN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGNvbXBvdW5kX3NlbmRfcmVjdmAgd2hlcmUgbWlkIGFycmF5cyBhcmUgbm90IGRlbGV0ZWQgd2hlbiBgcmMgXFx1MDAzYyAwYCBvciBgZmxhZ3MgXFx1MDAyNiBDSUZTX05PX1NSVl9SU1BgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNNQiBjbGllbnQncyB0cmFuc3BvcnQgbGF5ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgU01CIGNsaWVudCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb21wb3VuZF9zZW5kX3JlY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29tcG91bmRfc2VuZF9yZWN2YCB3aGVyZSBtaWQgYXJyYXlzIGFyZSBub3QgZGVsZXRlZCB3aGVuIGByYyBcXHUwMDNjIDBgIG9yIGBmbGFncyBcXHUwMDI2IENJRlNfTk9fU1JWX1JTUGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgU01CIGNsaWVudCdzIHRyYW5zcG9ydCBsYXllciwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBTTUIgY2xpZW50IG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjE4LjYxMjkzMDA2MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg5MzgxODg2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzoxOC42MTM5MDczNDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mzg5MzcyMDY3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBjb21wb3VuZF9zZW5kX3JlY3YoKWAgdG8gZGVsZXRlIGBtaWRgIGVudHJpZXMgYW5kIG1hcmsgdGhlbSBhcyBjYW5jZWxsZWQgYmVmb3JlIHJlbGVhc2luZyB0aGUgc2VydmVyIGxvY2sgKGBjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKWApIHdoZW4gYHNtYl9zZW5kX3Jxc3QoKWAgZmFpbHMgKGByYyBcXHUwMDNjIDBgKSBvciB3aGVuIG5vIHNlcnZlciByZXNwb25zZSBpcyBleHBlY3RlZC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVhayByZWxhdGVkIHRvIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBtaWRfcV9lbnRyeWAgc3RydWN0dXJlcy5cXG5cXG5UaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdyBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSkuIEJ1Z3MgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWUsIHVzZS1hZnRlci1mcmVlLCBvciByYWNlIGNvbmRpdGlvbnMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjg0OTViODYyNTAyMTQ2NDIzNGM3YTU1MDVlZGU0ZWQ3MDg2N2Y0NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTE6NTI6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jIGIvZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1xuaW5kZXggZmRmNGU1MGMyN2NlYi4uOGQxNDIyNWU5NDhiMSAxMDA2NDRcbi0tLSBhL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcbisrKyBiL2ZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcbkBAIC05NjgsNiArOTY4LDEzIEBAIGNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcbiBcdFx0c2VydmVyLVx1MDAzZXNlcXVlbmNlX251bWJlciAtPSAyO1xuIFx0fVxuIFxuK1x0aWYgKHJjIFx1MDAzYyAwIHx8IChmbGFncyBcdTAwMjYgQ0lGU19OT19TUlZfUlNQKSkge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcnFzdDsgaSsrKSB7XG4rXHRcdFx0ZGVsZXRlX21pZChzZXJ2ZXIsIG1pZFtpXSk7XG4rXHRcdFx0Y2FuY2VsbGVkX21pZFtpXSA9IHRydWU7XG4rXHRcdH1cbitcdH1cbitcbiBcdGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpO1xuIFxuIFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjE4LjYxMzkxMTQ3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjYxODExNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBTTUIgQ2xpZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB3aXRoaW4gYGZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBgY29tcG91bmRfc2VuZF9yZWN2KClgIGZ1bmN0aW9uLiBXaGF0IGl0J3MgZG9pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQgaW5jbHVkZXMgdGhpcyBjb25kaXRpb25hbCBibG9jayBvZiBjb2RlLiBFc3NlbnRpYWxseSwgaWYgYHJjYCBpcyBsZXNzIHRoYW4gemVybywgbWVhbmluZyB0aGVyZSdzIGJlZW4gc29tZSBraW5kIG9mIGVycm9yLCBvciBpZiB0aGUgYENJRlNfTk9fU1JWX1JTUGAgZmxhZyBpcyBzZXQsIHdoaWNoIHByb2JhYmx5IG1lYW5zIHdlIGRpZG4ndCBnZXQgYSBzZXJ2ZXIgcmVzcG9uc2UsIHRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggYW4gYXJyYXkgb2YgYG1pZGAgdmFsdWVzLlxuXG5Gb3IgZWFjaCBgbWlkYCwgaXQgY2FsbHMgYGRlbGV0ZV9taWQoKWAsIHByZXN1bWFibHkgdG8gY2xlYW4gdXAgYW55IHBhcnRpYWxseSBjb21wbGV0ZWQgcmVxdWVzdHMuICpUaGVuKiwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBpdCBzZXRzIGBjYW5jZWxsZWRfbWlkW2ldYCB0byBgdHJ1ZWAuIFRoaXMgbGlrZWx5IGZsYWdzIHRoYXQgcGFydGljdWxhciBNSUQgYXMgY2FuY2VsbGVkLCB3aGljaCBpcyBsaWtlbHkgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMgbGF0ZXIgb24gZG93biB0aGUgbGluZS4gSXQncyBhIHByZXR0eSBzdGFuZGFyZCBlcnJvci1oYW5kbGluZyBhbmQgY2xlYW51cCBhcHByb2FjaCwgYnV0IEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIGhvdyB0aGlzIGltcGFjdHMgdGhlIG92ZXJhbGwgZmxvdyBvZiB0aGUgY29tcG91bmQgbWVzc2FnZSBoYW5kbGluZywgc28gbGV0IG1lIGdvIGhhdmUgYSBsb29rIGF0IHRoZSBgY29tcG91bmRfc2VuZF9yZWN2YCBmdW5jdGlvbiBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzoyMy44NzU3MjYwMjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjU0MTEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wb3VuZF9zZW5kX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jPTg2Mj1pbnRcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjg2Mzpjb21wb3VuZF9zZW5kX3JlY3YoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy04NjQtXFx0XFx0ICAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLFxcbi0tXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz0xMTA4PWNpZnNfc2VuZF9yZWN2KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3NlcyAqc2VzLFxcbi0tXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMTEyLXtcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjExMTM6XFx0cmV0dXJuIGNvbXBvdW5kX3NlbmRfcmVjdih4aWQsIHNlcywgc2VydmVyLCBmbGFncywgMSxcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMTQtXFx0XFx0XFx0XFx0ICBycXN0LCByZXNwX2J1Zl90eXBlLCByZXNwX2lvdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjI0LjE1ODI3NDM2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA2OTMxMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgU01CIENsaWVudCBUcmFuc3BvcnQgTGF5ZXIqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgY29tcG91bmRfc2VuZF9yZWN2YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBhdCBpdCB3aXRoaW4gYGZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIFNNQiBjbGllbnQgdHJhbnNwb3J0IGxvZ2ljIHJlc2lkZXMsIHNvIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBkYXRhIGlzIGFjdHVhbGx5IHNlbnQgYW5kIHJlY2VpdmVkIG92ZXIgdGhlIG5ldHdvcmsuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgaG93IHJlcXVlc3RzIGFyZSBjb25zdHJ1Y3RlZCwgcGFja2V0aXplZCwgYW5kIHNlbnQsIGFuZCBob3cgcmVzcG9uc2VzIGFyZSBwYXJzZWQgYW5kIGhhbmRsZWQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGRlYWxzIHdpdGggY29tcG91bmQgcmVxdWVzdHMsIHNpbmNlIHRoYXQncyBhIGtleSBvcHRpbWl6YXRpb24gaW4gdGhlIFNNQiBwcm90b2NvbC4gSG9wZWZ1bGx5LCB0aGlzIGZ1bmN0aW9uIGlzIHdlbGwtc3RydWN0dXJlZCBhbmQgZG9jdW1lbnRlZCwgbWFraW5nIGl0IGVhc2llciB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBpbXByb3ZlbWVudC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MDYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzoyNy43NjUyMDc2ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODYyLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MjpcXHRpbnRcXG4gODYzOlxcdGNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcXG4gODY0OlxcdFxcdFxcdCAgIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcixcXG4gODY1OlxcdFxcdFxcdCAgIGNvbnN0IGludCBmbGFncywgY29uc3QgaW50IG51bV9ycXN0LCBzdHJ1Y3Qgc21iX3Jxc3QgKnJxc3QsXFxuIDg2NjpcXHRcXHRcXHQgICBpbnQgKnJlc3BfYnVmX3R5cGUsIHN0cnVjdCBrdmVjICpyZXNwX2lvdilcXG4gODY3OlxcdHtcXG4gODY4OlxcdFxcdGludCBpLCBqLCBvcHR5cGUsIHJjID0gMDtcXG4gODY5OlxcdFxcdHN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkW01BWF9DT01QT1VORF07XFxuIDg3MDpcXHRcXHRib29sIGNhbmNlbGxlZF9taWRbTUFYX0NPTVBPVU5EXSA9IHtmYWxzZX07XFxuIDg3MTpcXHRcXHRzdHJ1Y3QgY2lmc19jcmVkaXRzIGNyZWRpdHNbTUFYX0NPTVBPVU5EXSA9IHtcXG4gODcyOlxcdFxcdFxcdHsgLnZhbHVlID0gMCwgLmluc3RhbmNlID0gMCB9XFxuIDg3MzpcXHRcXHR9O1xcbiA4NzQ6XFx0XFx0dW5zaWduZWQgaW50IGluc3RhbmNlO1xcbiA4NzU6XFx0XFx0Y2hhciAqYnVmO1xcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHRvcHR5cGUgPSBmbGFncyBcXHUwMDI2IENJRlNfT1BfTUFTSztcXG4gODc4OlxcdFxcbiA4Nzk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9ycXN0OyBpKyspXFxuIDg4MDpcXHRcXHRcXHRyZXNwX2J1Zl90eXBlW2ldID0gQ0lGU19OT19CVUZGRVI7ICAvKiBubyByZXNwb25zZSBidWYgeWV0ICovXFxuIDg4MTpcXHRcXG4gODgyOlxcdFxcdGlmICghc2VzIHx8ICFzZXMtXFx1MDAzZXNlcnZlciB8fCAhc2VydmVyKSB7XFxuIDg4MzpcXHRcXHRcXHRjaWZzX2RiZyhWRlMsIFxcXCJOdWxsIHNlc3Npb25cXFxcblxcXCIpO1xcbiA4ODQ6XFx0XFx0XFx0cmV0dXJuIHNtYl9FSU8oc21iX2Vpb190cmFjZV9udWxsX3BvaW50ZXJzKTtcXG4gODg1OlxcdFxcdH1cXG4gODg2OlxcdFxcbiA4ODc6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZXNydl9sb2NrKTtcXG4gODg4OlxcdFxcdGlmIChzZXJ2ZXItXFx1MDAzZXRjcFN0YXR1cyA9PSBDaWZzRXhpdGluZykge1xcbiA4ODk6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNlcnZlci1cXHUwMDNlc3J2X2xvY2spO1xcbiA4OTA6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDg5MTpcXHRcXHR9XFxuIDg5MjpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2VydmVyLVxcdTAwM2VzcnZfbG9jayk7XFxuIDg5MzpcXHRcXG4gODk0OlxcdFxcdC8qXFxuIDg5NTpcXHRcXHQgKiBXYWl0IGZvciBhbGwgdGhlIHJlcXVlc3RzIHRvIGJlY29tZSBhdmFpbGFibGUuXFxuIDg5NjpcXHRcXHQgKiBUaGlzIGFwcHJvYWNoIHN0aWxsIGxlYXZlcyB0aGUgcG9zc2liaWxpdHkgdG8gYmUgc3R1Y2sgd2FpdGluZyBmb3JcXG4gODk3OlxcdFxcdCAqIGNyZWRpdHMgaWYgdGhlIHNlcnZlciBkb2Vzbid0IGdyYW50IGNyZWRpdHMgdG8gdGhlIG91dHN0YW5kaW5nXFxuIDg5ODpcXHRcXHQgKiByZXF1ZXN0cyBhbmQgaWYgdGhlIGNsaWVudCBpcyBjb21wbGV0ZWx5IGlkbGUsIG5vdCBnZW5lcmF0aW5nIGFueVxcbiA4OTk6XFx0XFx0ICogb3RoZXIgcmVxdWVzdHMuXFxuIDkwMDpcXHRcXHQgKiBUaGlzIGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBldmVudHVhbCBzZXNzaW9uIHJlY29ubmVjdC5cXG4gOTAxOlxcdFxcdCAqL1xcbiA5MDI6XFx0XFx0cmMgPSB3YWl0X2Zvcl9jb21wb3VuZF9yZXF1ZXN0KHNlcnZlciwgbnVtX3Jxc3QsIGZsYWdzLFxcbiA5MDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpbnN0YW5jZSk7XFxuIDkwNDpcXHRcXHRpZiAocmMpXFxuIDkwNTpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIDkwNjpcXHRcXG4gOTA3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcnFzdDsgaSsrKSB7XFxuIDkwODpcXHRcXHRcXHRjcmVkaXRzW2ldLnZhbHVlID0gMTtcXG4gOTA5OlxcdFxcdFxcdGNyZWRpdHNbaV0uaW5zdGFuY2UgPSBpbnN0YW5jZTtcXG4gOTEwOlxcdFxcdH1cXG4gOTExOlxcdFxcbiA5MTI6XFx0XFx0LypcXG4gOTEzOlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGF0IHdlIHNpZ24gaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB3ZSBzZW5kIG9uIHRoaXMgc29ja2V0XFxuIDkxNDpcXHRcXHQgKiBhbmQgYXZvaWQgcmFjZXMgaW5zaWRlIHRjcCBzZW5kbXNnIGNvZGUgdGhhdCBjb3VsZCBjYXVzZSBjb3JydXB0aW9uXFxuIDkxNTpcXHRcXHQgKiBvZiBzbWIgZGF0YS5cXG4gOTE2OlxcdFxcdCAqL1xcbiA5MTc6XFx0XFxuIDkxODpcXHRcXHRjaWZzX3NlcnZlcl9sb2NrKHNlcnZlcik7XFxuIDkxOTpcXHRcXG4gOTIwOlxcdFxcdC8qXFxuIDkyMTpcXHRcXHQgKiBBbGwgdGhlIHBhcnRzIG9mIHRoZSBjb21wb3VuZCBjaGFpbiBiZWxvbmcgb2J0YWluZWQgY3JlZGl0cyBmcm9tIHRoZVxcbiA5MjI6XFx0XFx0ICogc2FtZSBzZXNzaW9uLiBXZSBjYW4gbm90IHVzZSBjcmVkaXRzIG9idGFpbmVkIGZyb20gdGhlIHByZXZpb3VzXFxuIDkyMzpcXHRcXHQgKiBzZXNzaW9uIHRvIHNlbmQgdGhpcyByZXF1ZXN0LiBDaGVjayBpZiB0aGVyZSB3ZXJlIHJlY29ubmVjdHMgYWZ0ZXJcXG4gOTI0OlxcdFxcdCAqIHdlIG9idGFpbmVkIGNyZWRpdHMgYW5kIHJldHVybiAtRUFHQUlOIGluIHN1Y2ggY2FzZXMgdG8gbGV0IGNhbGxlcnNcXG4gOTI1OlxcdFxcdCAqIGhhbmRsZSBpdC5cXG4gOTI2OlxcdFxcdCAqL1xcbiA5Mjc6XFx0XFx0aWYgKGluc3RhbmNlICE9IHNlcnZlci1cXHUwMDNlcmVjb25uZWN0X2luc3RhbmNlKSB7XFxuIDkyODpcXHRcXHRcXHRjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKTtcXG4gOTI5OlxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBudW1fcnFzdDsgaisrKVxcbiA5MzA6XFx0XFx0XFx0XFx0YWRkX2NyZWRpdHMoc2VydmVyLCBcXHUwMDI2Y3JlZGl0c1tqXSwgb3B0eXBlKTtcXG4gOTMxOlxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiA5MzI6XFx0XFx0fVxcbiA5MzM6XFx0XFxuIDkzNDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3Jxc3Q7IGkrKykge1xcbiA5MzU6XFx0XFx0XFx0bWlkW2ldID0gc2VydmVyLVxcdTAwM2VvcHMtXFx1MDAzZXNldHVwX3JlcXVlc3Qoc2VzLCBzZXJ2ZXIsIFxcdTAwMjZycXN0W2ldKTtcXG4gOTM2OlxcdFxcdFxcdGlmIChJU19FUlIobWlkW2ldKSkge1xcbiA5Mzc6XFx0XFx0XFx0XFx0cmV2ZXJ0X2N1cnJlbnRfbWlkKHNlcnZlciwgaSk7XFxuIDkzODpcXHRcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaTsgaisrKVxcbiA5Mzk6XFx0XFx0XFx0XFx0XFx0ZGVsZXRlX21pZChzZXJ2ZXIsIG1pZFtqXSk7XFxuIDk0MDpcXHRcXHRcXHRcXHRjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKTtcXG4gOTQxOlxcdFxcbiA5NDI6XFx0XFx0XFx0XFx0LyogVXBkYXRlICMgb2YgcmVxdWVzdHMgb24gd2lyZSB0byBzZXJ2ZXIgKi9cXG4gOTQzOlxcdFxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBudW1fcnFzdDsgaisrKVxcbiA5NDQ6XFx0XFx0XFx0XFx0XFx0YWRkX2NyZWRpdHMoc2VydmVyLCBcXHUwMDI2Y3JlZGl0c1tqXSwgb3B0eXBlKTtcXG4gOTQ1OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKG1pZFtpXSk7XFxuIDk0NjpcXHRcXHRcXHR9XFxuIDk0NzpcXHRcXG4gOTQ4OlxcdFxcdFxcdG1pZFtpXS1cXHUwMDNlc3JfZmxhZ3MgPSBmbGFncztcXG4gOTQ5OlxcdFxcdFxcdG1pZFtpXS1cXHUwMDNlbWlkX3N0YXRlID0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEO1xcbiA5NTA6XFx0XFx0XFx0bWlkW2ldLVxcdTAwM2VvcHR5cGUgPSBvcHR5cGU7XFxuIDk1MTpcXHRcXHRcXHQvKlxcbiA5NTI6XFx0XFx0XFx0ICogSW52b2tlIGNhbGxiYWNrIGZvciBldmVyeSBwYXJ0IG9mIHRoZSBjb21wb3VuZCBjaGFpblxcbiA5NTM6XFx0XFx0XFx0ICogdG8gY2FsY3VsYXRlIGNyZWRpdHMgcHJvcGVybHkuIFdha2UgdXAgdGhpcyB0aHJlYWQgb25seSB3aGVuXFxuIDk1NDpcXHRcXHRcXHQgKiB0aGUgbGFzdCBlbGVtZW50IGlzIHJlY2VpdmVkLlxcbiA5NTU6XFx0XFx0XFx0ICovXFxuIDk1NjpcXHRcXHRcXHRpZiAoaSBcXHUwMDNjIG51bV9ycXN0IC0gMSlcXG4gOTU3OlxcdFxcdFxcdFxcdG1pZFtpXS1cXHUwMDNlY2FsbGJhY2sgPSBjaWZzX2NvbXBvdW5kX2NhbGxiYWNrO1xcbiA5NTg6XFx0XFx0XFx0ZWxzZVxcbiA5NTk6XFx0XFx0XFx0XFx0bWlkW2ldLVxcdTAwM2VjYWxsYmFjayA9IGNpZnNfY29tcG91bmRfbGFzdF9jYWxsYmFjaztcXG4gOTYwOlxcdFxcdH1cXG4gOTYxOlxcdFxcdHJjID0gc21iX3NlbmRfcnFzdChzZXJ2ZXIsIG51bV9ycXN0LCBycXN0LCBmbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjI3Ljc2NTMxODMwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQzOTI3NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBjb21wb3VuZF9zZW5kX3JlY3ZgKipcblxuQWxyaWdodCwgdGltZSB0byByZXZpc2l0IGBjb21wb3VuZF9zZW5kX3JlY3ZgLiBJIGtub3cgdGhlIGhpZ2gtbGV2ZWwgYXJjaGl0ZWN0dXJlLCBidXQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZ3JhbnVsYXIgZGV0YWlscy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGEgY3Vyc29yeSByZXZpZXc7IEknbSBsb29raW5nIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBib3R0bGVuZWNrcywgc3VidGxlIGltcGxlbWVudGF0aW9uIG51YW5jZXMsIG9yIHBlcmhhcHMgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9uIGNvdWxkIGJlIGFjaGlldmVkLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9ucyB3aXRoIHVuZGVybHlpbmcgaGFyZHdhcmUsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhlIG92ZXJhbGwgZGF0YSBmbG93LiBJcyBpdCB0aHJlYWQtc2FmZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB2YXJpb3VzIGRhdGEgYnVmZmVyIHNpemVzIG9uIHBlcmZvcm1hbmNlPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgYW5kIHdoYXQgdGhlIHJlY292ZXJ5IG1lY2hhbmlzbXMgbG9vayBsaWtlLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3Bwb3J0dW5pdGllcyBmb3Igc3F1ZWV6aW5nIG91dCBldmVuIG1vcmUgZWZmaWNpZW5jeSwgb3IgcGVyaGFwcyB1bmNvdmVyaW5nIGhpZGRlbiBjb21wbGV4aXRpZXMgdGhhdCBJIG1pZ2h0IG5vdCBoYXZlIGluaXRpYWxseSBjb25zaWRlcmVkLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTQ2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzozMS4xMDkyNDgyNzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTYyLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk2MjpcXHRcXG4gOTYzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcnFzdDsgaSsrKVxcbiA5NjQ6XFx0XFx0XFx0Y2lmc19zYXZlX3doZW5fc2VudChtaWRbaV0pO1xcbiA5NjU6XFx0XFxuIDk2NjpcXHRcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuIDk2NzpcXHRcXHRcXHRyZXZlcnRfY3VycmVudF9taWQoc2VydmVyLCBudW1fcnFzdCk7XFxuIDk2ODpcXHRcXHRcXHRzZXJ2ZXItXFx1MDAzZXNlcXVlbmNlX251bWJlciAtPSAyO1xcbiA5Njk6XFx0XFx0fVxcbiA5NzA6XFx0XFxuIDk3MTpcXHRcXHRpZiAocmMgXFx1MDAzYyAwIHx8IChmbGFncyBcXHUwMDI2IENJRlNfTk9fU1JWX1JTUCkpIHtcXG4gOTcyOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcnFzdDsgaSsrKSB7XFxuIDk3MzpcXHRcXHRcXHRcXHRkZWxldGVfbWlkKHNlcnZlciwgbWlkW2ldKTtcXG4gOTc0OlxcdFxcdFxcdFxcdGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlO1xcbiA5NzU6XFx0XFx0XFx0fVxcbiA5NzY6XFx0XFx0fVxcbiA5Nzc6XFx0XFxuIDk3ODpcXHRcXHRjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKTtcXG4gOTc5OlxcdFxcbiA5ODA6XFx0XFx0LypcXG4gOTgxOlxcdFxcdCAqIElmIHNlbmRpbmcgZmFpbGVkIGZvciBzb21lIHJlYXNvbiBvciBpdCBpcyBhbiBvcGxvY2sgYnJlYWsgdGhhdCB3ZVxcbiA5ODI6XFx0XFx0ICogd2lsbCBub3QgcmVjZWl2ZSBhIHJlc3BvbnNlIHRvIC0gcmV0dXJuIGNyZWRpdHMgYmFja1xcbiA5ODM6XFx0XFx0ICovXFxuIDk4NDpcXHRcXHRpZiAocmMgXFx1MDAzYyAwIHx8IChmbGFncyBcXHUwMDI2IENJRlNfTk9fU1JWX1JTUCkpIHtcXG4gOTg1OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcnFzdDsgaSsrKVxcbiA5ODY6XFx0XFx0XFx0XFx0YWRkX2NyZWRpdHMoc2VydmVyLCBcXHUwMDI2Y3JlZGl0c1tpXSwgb3B0eXBlKTtcXG4gOTg3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA5ODg6XFx0XFx0fVxcbiA5ODk6XFx0XFxuIDk5MDpcXHRcXHQvKlxcbiA5OTE6XFx0XFx0ICogQXQgdGhpcyBwb2ludCB0aGUgcmVxdWVzdCBpcyBwYXNzZWQgdG8gdGhlIG5ldHdvcmsgc3RhY2sgLSB3ZSBhc3N1bWVcXG4gOTkyOlxcdFxcdCAqIHRoYXQgYW55IGNyZWRpdHMgdGFrZW4gZnJvbSB0aGUgc2VydmVyIHN0cnVjdHVyZSBvbiB0aGUgY2xpZW50IGhhdmVcXG4gOTkzOlxcdFxcdCAqIGJlZW4gc3BlbnQgYW5kIHdlIGNhbid0IHJldHVybiB0aGVtIGJhY2suIE9uY2Ugd2UgcmVjZWl2ZSByZXNwb25zZXNcXG4gOTk0OlxcdFxcdCAqIHdlIHdpbGwgY29sbGVjdCBjcmVkaXRzIGdyYW50ZWQgYnkgdGhlIHNlcnZlciBpbiB0aGUgbWlkIGNhbGxiYWNrc1xcbiA5OTU6XFx0XFx0ICogYW5kIGFkZCB0aG9zZSBjcmVkaXRzIHRvIHRoZSBzZXJ2ZXIgc3RydWN0dXJlLlxcbiA5OTY6XFx0XFx0ICovXFxuIDk5NzpcXHRcXG4gOTk4OlxcdFxcdC8qXFxuIDk5OTpcXHRcXHQgKiBDb21wb3VuZGluZyBpcyBuZXZlciB1c2VkIGR1cmluZyBzZXNzaW9uIGVzdGFibGlzaC5cXG4xMDAwOlxcdFxcdCAqL1xcbjEwMDE6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZXMtXFx1MDAzZXNlc19sb2NrKTtcXG4xMDAyOlxcdFxcdGlmICgoc2VzLVxcdTAwM2VzZXNfc3RhdHVzID09IFNFU19ORVcpIHx8IChvcHR5cGUgXFx1MDAyNiBDSUZTX05FR19PUCkgfHwgKG9wdHlwZSBcXHUwMDI2IENJRlNfU0VTU19PUCkpIHtcXG4xMDAzOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzZXMtXFx1MDAzZXNlc19sb2NrKTtcXG4xMDA0OlxcdFxcbjEwMDU6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShudW1fcnFzdCAhPSAxIHx8ICFyZXNwX2lvdikpXFxuMTAwNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDA3OlxcdFxcbjEwMDg6XFx0XFx0XFx0Y2lmc19zZXJ2ZXJfbG9jayhzZXJ2ZXIpO1xcbjEwMDk6XFx0XFx0XFx0c21iMzExX3VwZGF0ZV9wcmVhdXRoX2hhc2goc2VzLCBzZXJ2ZXIsIHJxc3RbMF0ucnFfaW92LCBycXN0WzBdLnJxX252ZWMpO1xcbjEwMTA6XFx0XFx0XFx0Y2lmc19zZXJ2ZXJfdW5sb2NrKHNlcnZlcik7XFxuMTAxMTpcXHRcXG4xMDEyOlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2VzLVxcdTAwM2VzZXNfbG9jayk7XFxuMTAxMzpcXHRcXHR9XFxuMTAxNDpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2VzLVxcdTAwM2VzZXNfbG9jayk7XFxuMTAxNTpcXHRcXG4xMDE2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcnFzdDsgaSsrKSB7XFxuMTAxNzpcXHRcXHRcXHRyYyA9IHdhaXRfZm9yX3Jlc3BvbnNlKHNlcnZlciwgbWlkW2ldKTtcXG4xMDE4OlxcdFxcdFxcdGlmIChyYyAhPSAwKVxcbjEwMTk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTAyMDpcXHRcXHR9XFxuMTAyMTpcXHRcXHRpZiAocmMgIT0gMCkge1xcbjEwMjI6XFx0XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBudW1fcnFzdDsgaSsrKSB7XFxuMTAyMzpcXHRcXHRcXHRcXHRjaWZzX3NlcnZlcl9kYmcoRllJLCBcXFwiQ2FuY2VsbGluZyB3YWl0IGZvciBtaWQgJWxsdSBjbWQ6ICVkXFxcXG5cXFwiLFxcbjEwMjQ6XFx0XFx0XFx0XFx0XFx0IG1pZFtpXS1cXHUwMDNlbWlkLCBsZTE2X3RvX2NwdShtaWRbaV0tXFx1MDAzZWNvbW1hbmQpKTtcXG4xMDI1OlxcdFxcdFxcdFxcdHNlbmRfY2FuY2VsKHNlcywgc2VydmVyLCBcXHUwMDI2cnFzdFtpXSwgbWlkW2ldLCB4aWQpO1xcbjEwMjY6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZtaWRbaV0tXFx1MDAzZW1pZF9sb2NrKTtcXG4xMDI3OlxcdFxcdFxcdFxcdG1pZFtpXS1cXHUwMDNld2FpdF9jYW5jZWxsZWQgPSB0cnVlO1xcbjEwMjg6XFx0XFx0XFx0XFx0aWYgKG1pZFtpXS1cXHUwMDNlbWlkX3N0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCB8fFxcbjEwMjk6XFx0XFx0XFx0XFx0ICAgIG1pZFtpXS1cXHUwMDNlbWlkX3N0YXRlID09IE1JRF9SRVNQT05TRV9SRUNFSVZFRCkge1xcbjEwMzA6XFx0XFx0XFx0XFx0XFx0bWlkW2ldLVxcdTAwM2VjYWxsYmFjayA9IGNpZnNfY2FuY2VsbGVkX2NhbGxiYWNrO1xcbjEwMzE6XFx0XFx0XFx0XFx0XFx0Y2FuY2VsbGVkX21pZFtpXSA9IHRydWU7XFxuMTAzMjpcXHRcXHRcXHRcXHRcXHRjcmVkaXRzW2ldLnZhbHVlID0gMDtcXG4xMDMzOlxcdFxcdFxcdFxcdH1cXG4xMDM0OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtaWRbaV0tXFx1MDAzZW1pZF9sb2NrKTtcXG4xMDM1OlxcdFxcdFxcdH1cXG4xMDM2OlxcdFxcdH1cXG4xMDM3OlxcdFxcbjEwMzg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9ycXN0OyBpKyspIHtcXG4xMDM5OlxcdFxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuMTA0MDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDQxOlxcdFxcbjEwNDI6XFx0XFx0XFx0cmMgPSBjaWZzX3N5bmNfbWlkX3Jlc3VsdChtaWRbaV0sIHNlcnZlcik7XFxuMTA0MzpcXHRcXHRcXHRpZiAocmMgIT0gMCkge1xcbjEwNDQ6XFx0XFx0XFx0XFx0LyogbWFyayB0aGlzIG1pZCBhcyBjYW5jZWxsZWQgdG8gbm90IGZyZWUgaXQgYmVsb3cgKi9cXG4xMDQ1OlxcdFxcdFxcdFxcdGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlO1xcbjEwNDY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTA0NzpcXHRcXHRcXHR9XFxuMTA0ODpcXHRcXG4xMDQ5OlxcdFxcdFxcdGlmICghbWlkW2ldLVxcdTAwM2VyZXNwX2J1ZiB8fFxcbjEwNTA6XFx0XFx0XFx0ICAgIG1pZFtpXS1cXHUwMDNlbWlkX3N0YXRlICE9IE1JRF9SRVNQT05TRV9SRUFEWSkge1xcbjEwNTE6XFx0XFx0XFx0XFx0cmMgPSBzbWJfRUlPMShzbWJfZWlvX3RyYWNlX3J4X21pZF91bnJlYWR5LCBtaWRbaV0tXFx1MDAzZW1pZF9zdGF0ZSk7XFxuMTA1MjpcXHRcXHRcXHRcXHRjaWZzX2RiZyhGWUksIFxcXCJCYWQgTUlEIHN0YXRlP1xcXFxuXFxcIik7XFxuMTA1MzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDU0OlxcdFxcdFxcdH1cXG4xMDU1OlxcdFxcbjEwNTY6XFx0XFx0XFx0cmMgPSBzZXJ2ZXItXFx1MDAzZW9wcy1cXHUwMDNlY2hlY2tfcmVjZWl2ZShtaWRbaV0sIHNlcnZlcixcXG4xMDU3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjYgQ0lGU19MT0dfRVJST1IpO1xcbjEwNTg6XFx0XFxuMTA1OTpcXHRcXHRcXHRpZiAocmVzcF9pb3YpIHtcXG4xMDYwOlxcdFxcdFxcdFxcdGJ1ZiA9IChjaGFyICopbWlkW2ldLVxcdTAwM2VyZXNwX2J1ZjtcXG4xMDYxOlxcdFxcdFxcdFxcdHJlc3BfaW92W2ldLmlvdl9iYXNlID0gYnVmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzozMS4xMDkzNTg4NzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2NDQ3OTAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBwYXRjaC4gSXQncyBhZGRpbmcgdGhpcyBjb2RlIGJsb2NrOlxuXG5gYGBjXG5cdGlmIChyYyBcdTAwM2MgMCB8fCAoZmxhZ3MgXHUwMDI2IENJRlNfTk9fU1JWX1JTUCkpIHtcblx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcnFzdDsgaSsrKSB7XG5cdFx0XHRkZWxldGVfbWlkKHNlcnZlciwgbWlkW2ldKTtcblx0XHRcdGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlO1xuXHRcdH1cblx0fVxuYGBgXG5cblJpZ2h0IGF3YXksIEkgc2VlIHRoaXMgaXMgbGlrZWx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgYSBtZW1vcnkgbGVhay4gSWYgdGhlIHJldHVybiBjb2RlLCBgcmNgLCBpcyBuZWdhdGl2ZSwgb3IgdGhlIGBDSUZTX05PX1NSVl9SU1BgIGZsYWcgaXMgc2V0LCB3aGljaCBwcm9iYWJseSBtZWFucyB3ZSBkaWRuJ3QgZ2V0IGEgc2VydmVyIHJlc3BvbnNlLCB0aGVuIHRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggc29tZSBtaWRzLCB3aGljaCBJJ20gaW5mZXJyaW5nIGFyZSBtZXNzYWdlIGlkZW50aWZpZXJzLiBJbnNpZGUgdGhpcyBsb29wLCBgZGVsZXRlX21pZGAgaXMgY2FsbGVkLCBhbmQgdGhlbiBhIGBjYW5jZWxsZWRfbWlkYCBmbGFnIGlzIHNldC4gVGhhdCBzdWdnZXN0cyB3ZSBhcmUgY2xlYW5pbmcgdXAgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBtaWRzIGFuZCBtYXJraW5nIHRoZW0gYXMgaGFuZGxlZC5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoYXQgYGRlbGV0ZV9taWRgIGNhbGwuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHdoYXQncyBnb2luZyBvbiBpbiB0aGVyZS4gV2UgbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgdGhlIG1pZCdzIHJlc291cmNlcyBhcmUgY29ycmVjdGx5IGZyZWVkIHRvIHByZXZlbnQgYW55IGZvcm0gb2YgdXNlLWFmdGVyLWZyZWUgYW5kL29yIG1lbW9yeSBsZWFrcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBoYW5kbGluZyBhbiBlcnJvciBjb25kaXRpb24gb3IgYSBsYWNrIG9mIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciwgd2hpY2ggY291bGQgZWFzaWx5IGxlYWQgdG8gZGFuZ2xpbmcgcG9pbnRlcnMgaWYgbm90IGhhbmRsZWQgY2FyZWZ1bGx5LiBUaGlzIGlzIGEgcmVhc29uYWJsZSBwYXRjaCBhbmQgSSB3aWxsIGludmVzdGlnYXRlIHRoZSBgZGVsZXRlX21pZGAgZnVuY3Rpb24gdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6MzYuMTczODQwNjI5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU3NzczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWxldGVfbWlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYz0xMTg9dm9pZFxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6MTE5OmRlbGV0ZV9taWQoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBzdHJ1Y3QgbWlkX3FfZW50cnkgKm1pZClcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTEyMC17XFxuLS1cXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jPTY2Mz1jaWZzX2NhbGxfYXN5bmMoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBzdHJ1Y3Qgc21iX3Jxc3QgKnJxc3QsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTcyNi1cXHRcXHRzZXJ2ZXItXFx1MDAzZXNlcXVlbmNlX251bWJlciAtPSAyO1xcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6NzI3OlxcdFxcdGRlbGV0ZV9taWQoc2VydmVyLCBtaWQpO1xcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtNzI4LVxcdH1cXG4tLVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9ODYzPWNvbXBvdW5kX3NlbmRfcmVjdihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc19zZXMgKnNlcyxcXG4tLVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtOTM4LVxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBpOyBqKyspXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYzo5Mzk6XFx0XFx0XFx0XFx0ZGVsZXRlX21pZChzZXJ2ZXIsIG1pZFtqXSk7XFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy05NDAtXFx0XFx0XFx0Y2lmc19zZXJ2ZXJfdW5sb2NrKHNlcnZlcik7XFxuLS1cXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTk3Mi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3Jxc3Q7IGkrKykge1xcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6OTczOlxcdFxcdFxcdGRlbGV0ZV9taWQoc2VydmVyLCBtaWRbaV0pO1xcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmMtOTc0LVxcdFxcdFxcdGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlO1xcbi0tXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMDY4LVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6MTA2OTpcXHRcXHRcXHQvKiBtYXJrIGl0IHNvIGJ1ZiB3aWxsIG5vdCBiZSBmcmVlZCBieSBkZWxldGVfbWlkICovXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xMDcwLVxcdFxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDSUZTX05PX1JTUF9CVUYpID09IDApXFxuLS1cXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMDAtXFx0XFx0aWYgKCFjYW5jZWxsZWRfbWlkW2ldKVxcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6MTEwMTpcXHRcXHRcXHRkZWxldGVfbWlkKHNlcnZlciwgbWlkW2ldKTtcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTExMDItXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1MzozNi4yMjU0MjU4MDdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0NzI2MDg5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNaWQgRGVsZXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBwcm9wZXIgcmVzb3VyY2UgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBkZWxldGluZyBgbWlkYCBlbnRyaWVzIGluIHRoZSBDSUZTIGNsaWVudCBjb2RlLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGJ1dCBhZnRlciBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0J3Mgbm90IHRoZSBwcm9ibGVtIGhlcmUuIGBtaWRgIGlzIGEgYHN0cnVjdCBtaWRfcV9lbnRyeWAsIHByb3Blcmx5IGFsbG9jYXRlZCBhbmQgbWFuYWdlZCBieSB0aGUgU01CIGNsaWVudCBpdHNlbGYuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9vcCB0aGF0IGNhbGxzIGBkZWxldGVfbWlkYCBpZiBgc21iX3NlbmRfcnFzdGAgZmFpbHMgKHJldHVybnMgYHJjIFx1MDAzYyAwYCkgb3IgaWYgdGhlIGBDSUZTX05PX1NSVl9SU1BgIGZsYWcgaXMgc2V0LiBJdCBhbHNvIHNldHMgYGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlYCB0byBhdm9pZCBjYWxsaW5nIGBkZWxldGVfbWlkYCBsYXRlciBvbi5cblxuTXkgaW5pdGlhbCByZWFjdGlvbiB3YXMgdGhhdCB0aGUgY29kZSB3YXMgcmVkdW5kYW50LCBiZWNhdXNlIEkgY291bGQgc2VlIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgYWxyZWFkeSBjYWxscyBgZGVsZXRlX21pZGAgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gaW4gYWxsIGNhc2VzLCBldmVuIHdoZW4gYHJjIFx1MDAzYyAwYCBvciBgQ0lGU19OT19TUlZfUlNQYCBpcyBzZXQuIEJ1dCBsb29raW5nIGF0IHRoZSBvcmlnaW5hbCBjb2RlLCBpZiBgcmMgXHUwMDNjIDBgLCBpdCBnb2VzIHRvIGBvdXRgLCBhbmQgdGhlbiBpdCBjYWxscyBgZGVsZXRlX21pZGAgd2l0aCBgY2FuY2VsbGVkX21pZFtpXWAgYXMgZmFsc2UsIHdoaWNoIEkgdGhvdWdodCBjb3VsZCBiZSBhIHByb2JsZW0uIFNvLCBJIGR1ZyBhIGxpdHRsZSBkZWVwZXIsIGFuZCByZWFsaXplZCB0aGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGFuZCB0aGUgcm9sZSBvZiBgZGVsZXRlX21pZGAuIGBkZWxldGVfbWlkYCBsaWtlbHkgcmVtb3ZlcyB0aGUgYG1pZGAgZW50cnkgZnJvbSB0aGUgc2VydmVyJ3MgcGVuZGluZyBtaWQgbGlzdCwgd2hpY2ggaXMgcHJvYmFibHkgcHJvdGVjdGVkIGJ5IGEgbG9jayAobGlrZSBgc2VydmVyLVx1MDAzZXNydl9sb2NrYCBvciBzb21ldGhpbmcgc2ltaWxhcikuIFRoYXQgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgYGRlbGV0ZV9taWRgIHByb2JhYmx5IG5lZWRzIHRoZSBsb2NrLCBzbyBpdCdzIGJlc3QgdG8gY2FsbCBpdCBiZWZvcmUgYGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpYCBvciBhdCBsZWFzdCBiZWZvcmUgd2UgZG8gYW55dGhpbmcgdGhhdCByZWxlYXNlcyB0aGF0IGxvY2suXG5cblNvLCBpbiB0aGUgb3JpZ2luYWwgY29kZSwgaWYgYHNtYl9zZW5kX3Jxc3RgIGZhaWxzLCB3ZSBoaXQgYG91dGAuIFRoZSBgZGVsZXRlX21pZGAgYXQgdGhlIGVuZCBpcyB1bm5lY2Vzc2FyeSBpZiB0aGUgbWlkIGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwZW5kaW5nIGxpc3QgZWFybGllciBpbiB0aGUgZmxvdy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IGNvcnJlY3RpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgbWlkIGxpc3QgYnkgZGVsZXRpbmcgdGhlIGBtaWRgIHByaW9yIHRvIHJlbGVhc2luZyB0aGUgc2VydmVyIGxvY2suIFRoYXQgbWFrZXMgdGhpcyBhIGNydWNpYWwgZml4IGZvciBlbnN1cmluZyBkYXRhIGludGVncml0eSBhbmQgcHJldmVudGluZyB0aG9zZSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDkzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjUzOjQ3LjY5ODAzNzYyMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc21iL2NsaWVudC90cmFuc3BvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTg6XFx0dm9pZFxcbiAxMTk6XFx0ZGVsZXRlX21pZChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkKVxcbiAxMjA6XFx0e1xcbiAxMjE6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZW1pZF9xdWV1ZV9sb2NrKTtcXG4gMTIyOlxcdFxcbiAxMjM6XFx0XFx0aWYgKCFtaWQtXFx1MDAzZWRlbGV0ZWRfZnJvbV9xKSB7XFxuIDEyNDpcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZtaWQtXFx1MDAzZXFoZWFkKTtcXG4gMTI1OlxcdFxcdFxcdG1pZC1cXHUwMDNlZGVsZXRlZF9mcm9tX3EgPSB0cnVlO1xcbiAxMjY6XFx0XFx0fVxcbiAxMjc6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNlcnZlci1cXHUwMDNlbWlkX3F1ZXVlX2xvY2spO1xcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHRyZWxlYXNlX21pZChzZXJ2ZXIsIG1pZCk7XFxuIDEzMDpcXHR9XFxuIDEzMTpcXHRcXG4gMTMyOlxcdC8qXFxuIDEzMzpcXHQgKiBzbWJfc2VuZF9rdmVjIC0gc2VuZCBhbiBhcnJheSBvZiBrdmVjcyB0byB0aGUgc2VydmVyXFxuIDEzNDpcXHQgKiBAc2VydmVyOlxcdFNlcnZlciB0byBzZW5kIHRoZSBkYXRhIHRvXFxuIDEzNTpcXHQgKiBAc21iX21zZzpcXHRNZXNzYWdlIHRvIHNlbmRcXG4gMTM2OlxcdCAqIEBzZW50OlxcdGFtb3VudCBvZiBkYXRhIHNlbnQgb24gc29ja2V0IGlzIHN0b3JlZCBoZXJlXFxuIDEzNzpcXHQgKlxcbiAxMzg6XFx0ICogT3VyIGJhc2ljIFxcXCJzZW5kIGRhdGEgdG8gc2VydmVyXFxcIiBmdW5jdGlvbi4gU2hvdWxkIGJlIGNhbGxlZCB3aXRoIHNydl9tdXRleFxcbiAxMzk6XFx0ICogaGVsZC4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIHJlc3VsdHMuXFxuIDE0MDpcXHQgKi9cXG4gMTQxOlxcdGludFxcbiAxNDI6XFx0c21iX3NlbmRfa3ZlYyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBtc2doZHIgKnNtYl9tc2csXFxuIDE0MzpcXHRcXHQgICAgICBzaXplX3QgKnNlbnQpXFxuIDE0NDpcXHR7XFxuIDE0NTpcXHRcXHRpbnQgcmMgPSAwO1xcbiAxNDY6XFx0XFx0aW50IHJldHJpZXMgPSAwO1xcbiAxNDc6XFx0XFx0c3RydWN0IHNvY2tldCAqc3NvY2tldCA9IHNlcnZlci1cXHUwMDNlc3NvY2tldDtcXG4gMTQ4OlxcdFxcbiAxNDk6XFx0XFx0KnNlbnQgPSAwO1xcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRpZiAoc2VydmVyLVxcdTAwM2Vub2Jsb2Nrc25kKVxcbiAxNTI6XFx0XFx0XFx0c21iX21zZy1cXHUwMDNlbXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlUICsgTVNHX05PU0lHTkFMO1xcbiAxNTM6XFx0XFx0ZWxzZVxcbiAxNTQ6XFx0XFx0XFx0c21iX21zZy1cXHUwMDNlbXNnX2ZsYWdzID0gTVNHX05PU0lHTkFMO1xcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXHR3aGlsZSAobXNnX2RhdGFfbGVmdChzbWJfbXNnKSkge1xcbiAxNTc6XFx0XFx0XFx0LypcXG4gMTU4OlxcdFxcdFxcdCAqIElmIGJsb2NraW5nIHNlbmQsIHdlIHRyeSAzIHRpbWVzLCBzaW5jZSBlYWNoIGNhbiBibG9ja1xcbiAxNTk6XFx0XFx0XFx0ICogZm9yIDUgc2Vjb25kcy4gRm9yIG5vbmJsb2NraW5nICB3ZSBoYXZlIHRvIHRyeSBtb3JlXFxuIDE2MDpcXHRcXHRcXHQgKiBidXQgd2FpdCBpbmNyZWFzaW5nIGFtb3VudHMgb2YgdGltZSBhbGxvd2luZyB0aW1lIGZvclxcbiAxNjE6XFx0XFx0XFx0ICogc29ja2V0IHRvIGNsZWFyLiAgVGhlIG92ZXJhbGwgdGltZSB3ZSB3YWl0IGluIGVpdGhlclxcbiAxNjI6XFx0XFx0XFx0ICogY2FzZSB0byBzZW5kIG9uIHRoZSBzb2NrZXQgaXMgYWJvdXQgMTUgc2Vjb25kcy5cXG4gMTYzOlxcdFxcdFxcdCAqIFNpbWlsYXJseSB3ZSB3YWl0IGZvciAxNSBzZWNvbmRzIGZvciBhIHJlc3BvbnNlIGZyb21cXG4gMTY0OlxcdFxcdFxcdCAqIHRoZSBzZXJ2ZXIgaW4gU2VuZFJlY2VpdmVbMl0gZm9yIHRoZSBzZXJ2ZXIgdG8gc2VuZFxcbiAxNjU6XFx0XFx0XFx0ICogYSByZXNwb25zZSBiYWNrIGZvciBtb3N0IHR5cGVzIG9mIHJlcXVlc3RzIChleGNlcHRcXG4gMTY2OlxcdFxcdFxcdCAqIFNNQiBXcml0ZSBwYXN0IGVuZCBvZiBmaWxlIHdoaWNoIGNhbiBiZSBzbG93LCBhbmRcXG4gMTY3OlxcdFxcdFxcdCAqIGJsb2NraW5nIGxvY2sgb3BlcmF0aW9ucykuIE5GUyB3YWl0cyBzbGlnaHRseSBsb25nZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6NTM6NDcuNjk4MTQyNTMxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NTI5NDk3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIExvY2tpbmcgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGRlbGV0ZV9taWRgIHRha2VzIGBzZXJ2ZXItXHUwMDNlbWlkX3F1ZXVlX2xvY2tgIGFuZCBjYWxscyBgcmVsZWFzZV9taWRgLiBUaGF0J3MgaW1wb3J0YW50LiBOb3csIHdoeSBpcyB0aGlzIHBhdGNoIGNhbGxpbmcgYGRlbGV0ZV9taWRgICpiZWZvcmUqIGBjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKWA/IFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGBjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKWAgdW5sb2NrcyBgc2VydmVyLVx1MDAzZXNydl9tdXRleGAuIFNvLCBpZiBgZGVsZXRlX21pZGAgaXMgY2FsbGVkICpiZWZvcmUqIHRoZSB1bmxvY2ssIGl0J3MgcHJvdGVjdGVkIGJ5IGBzcnZfbXV0ZXhgLiBCdXQsIGlmIGBkZWxldGVfbWlkYCBpcyBjYWxsZWQgYWZ0ZXIgYG91dDpgLCBpdCdzIG5vdC4gSXMgdGhpcyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiB0aGVuP1xuXG5JZiBgcmMgXHUwMDNjIDBgIG1lYW5zIHRoZSByZXF1ZXN0cyBmYWlsZWQgdG8gc2VuZCwgYW5kIHdlIHVubG9jayBgc3J2X211dGV4YCAqYmVmb3JlKiBkZWxldGluZywgYW5vdGhlciB0aHJlYWQgY291bGQgc3RlcCBpbiwgcHJvY2VzcyBhIHJlc3BvbnNlIChldmVuIHRob3VnaCB0aGVyZSAqd2Fzbid0KiBhIHJlcXVlc3Qgc2VudCEpLCBvciwgdGhlIHJlY29ubmVjdCB0aHJlYWQgY291bGQgcnVuIGFuZCB0cnkgdG8gY2xlYW4gdXAgdGhlIG1pZHMuLi4gcG90ZW50aWFsbHkgY2F1c2luZyBpc3N1ZXMuIE9rYXksIGl0J3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYWRkcmVzc2luZyBlaXRoZXIgYSByYWNlIGNvbmRpdGlvbiwgYSB1c2UtYWZ0ZXItZnJlZSwgb3IgYSBtZW1vcnkgbGVhay4gQW5kLCBpdCdzICpkZWZpbml0ZWx5KiBhIHJhY2UgaXNzdWUuXG5cbk5vdywgZG9lcyB0aGlzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGlzIGlzIG5vdCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLiBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgYnVpbHQgdG8gY2F0Y2ggdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBhbmQgZGVhZGxvY2tzLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGRlYWxzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgaGVyZS4gSXQncyBjb250cm9sIGZsb3cgYW5kIG9iamVjdCBsaWZldGltZSBtYW5hZ2VtZW50LiBMZXQncyBkb3VibGUgY2hlY2sgdG8gYmUgc3VyZS4uLlxuXG5gY2FuY2VsbGVkX21pZGAgaXMgYW4gYXJyYXkgb2YgYm9vbGVhbnMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYC4gYG1pZGAgaXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMsIGFuZCB0aGUgcGF0Y2ggaXMgc2ltcGx5IHNldHRpbmcgYGNhbmNlbGxlZF9taWRbaV0gPSB0cnVlYCBhbmQgdGhlbiBjYWxsaW5nIGBkZWxldGVfbWlkYC4gUHVyZWx5IGNvbnRyb2wgZmxvdyBhbmQgb2JqZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludm9sdmVkLiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBmYWxzZS4gVGhhdCdzIG15IHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUyOSwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMTo1Mzo1Ny41NTEwOTQ1ODFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBjb21wb3VuZF9zZW5kX3JlY3YoKWAgdG8gZGVsZXRlIGBtaWRgIGVudHJpZXMgYW5kIG1hcmsgdGhlbSBhcyBjYW5jZWxsZWQgYmVmb3JlIHJlbGVhc2luZyB0aGUgc2VydmVyIGxvY2sgKGBjaWZzX3NlcnZlcl91bmxvY2soc2VydmVyKWApIHdoZW4gYHNtYl9zZW5kX3Jxc3QoKWAgZmFpbHMgKGByYyBcXHUwMDNjIDBgKSBvciB3aGVuIG5vIHNlcnZlciByZXNwb25zZSBpcyBleHBlY3RlZC4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVhayByZWxhdGVkIHRvIHRoZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIGBtaWRfcV9lbnRyeWAgc3RydWN0dXJlcy5cXG5cXG5UaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdyBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSkuIEJ1Z3MgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWUsIHVzZS1hZnRlci1mcmVlLCBvciByYWNlIGNvbmRpdGlvbnMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGNvbXBvdW5kX3NlbmRfcmVjdigpYCB0byBkZWxldGUgYG1pZGAgZW50cmllcyBhbmQgbWFyayB0aGVtIGFzIGNhbmNlbGxlZCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBzZXJ2ZXIgbG9jayAoYGNpZnNfc2VydmVyX3VubG9jayhzZXJ2ZXIpYCkgd2hlbiBgc21iX3NlbmRfcnFzdCgpYCBmYWlscyAoYHJjIFxcdTAwM2MgMGApIG9yIHdoZW4gbm8gc2VydmVyIHJlc3BvbnNlIGlzIGV4cGVjdGVkLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiwgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrIHJlbGF0ZWQgdG8gdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYG1pZF9xX2VudHJ5YCBzdHJ1Y3R1cmVzLlxcblxcblRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlKS4gQnVncyByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZSwgdXNlLWFmdGVyLWZyZWUsIG9yIHJhY2UgY29uZGl0aW9ucyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowg5xg2[1] Phase: Succeeded StartedAt: 2026-08-07 11:54:08 +0000 UTC FinishedAt: 2026-08-07 11:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 11:54:08 +0000 UTC FinishedAt: 2026-08-07 11:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2] Phase: Succeeded StartedAt: 2026-08-07 11:54:08 +0000 UTC FinishedAt: 2026-08-07 15:35:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 11:54:08 +0000 UTC FinishedAt: 2026-08-07 15:35:31 +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":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 11:54:08 +0000 UTC FinishedAt: 2026-08-07 11:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 11:54:08 +0000 UTC FinishedAt: 2026-08-07 11:54:13 +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":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowg5xg2/series-workflowg5xg2-convert-artifact-3304003996/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 11:54:18 +0000 UTC FinishedAt: 2026-08-07 12:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 11:54:18 +0000 UTC FinishedAt: 2026-08-07 12:10:50 +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:*eb05e960-01eb-4877-a999-1e0062324462,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-workflowg5xg2/series-workflowg5xg2-convert-artifact-3304003996/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": "b9cb0cc6-279c-408e-89e8-8fc379b4d9bb", "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-workflowg5xg2/series-workflowg5xg2-build-action-1134149578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 11:54:18 +0000 UTC FinishedAt: 2026-08-07 12:10:40 +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:*eb05e960-01eb-4877-a999-1e0062324462,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-workflowg5xg2/series-workflowg5xg2-convert-artifact-3304003996/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": "b9cb0cc6-279c-408e-89e8-8fc379b4d9bb", "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-workflowg5xg2/series-workflowg5xg2-build-action-1134149578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 12:10:50 +0000 UTC FinishedAt: 2026-08-07 12:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 12:10:50 +0000 UTC FinishedAt: 2026-08-07 12:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 12:10:50 +0000 UTC FinishedAt: 2026-08-07 12:11:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 12:10:50 +0000 UTC FinishedAt: 2026-08-07 12:10: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":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowg5xg2/series-workflowg5xg2-convert-artifact-2983759835/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 12:11:00 +0000 UTC FinishedAt: 2026-08-07 12:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 12:11:00 +0000 UTC FinishedAt: 2026-08-07 12:12:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b9cb0cc6-279c-408e-89e8-8fc379b4d9bb,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-workflowg5xg2/series-workflowg5xg2-build-action-1134149578/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-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 12:13:08 +0000 UTC FinishedAt: 2026-08-07 12:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 12:13:08 +0000 UTC FinishedAt: 2026-08-07 12:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 12:13:08 +0000 UTC FinishedAt: 2026-08-07 12:29:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 12:13:08 +0000 UTC FinishedAt: 2026-08-07 12:29:57 +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:*eb05e960-01eb-4877-a999-1e0062324462,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-workflowg5xg2/series-workflowg5xg2-convert-artifact-2983759835/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": "b67b9a01-5f01-432f-ba92-edaca42bb407", "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-workflowg5xg2/series-workflowg5xg2-build-action-3020699263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 12:13:08 +0000 UTC FinishedAt: 2026-08-07 12:29:47 +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:*eb05e960-01eb-4877-a999-1e0062324462,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-workflowg5xg2/series-workflowg5xg2-convert-artifact-2983759835/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": "b67b9a01-5f01-432f-ba92-edaca42bb407", "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-workflowg5xg2/series-workflowg5xg2-build-action-3020699263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 12:29:57 +0000 UTC FinishedAt: 2026-08-07 12:29:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 12:29:57 +0000 UTC FinishedAt: 2026-08-07 12:29:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 12:29:57 +0000 UTC FinishedAt: 2026-08-07 12:32:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 12:29:57 +0000 UTC FinishedAt: 2026-08-07 12:31:53 +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:*b67b9a01-5f01-432f-ba92-edaca42bb407,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-workflowg5xg2/series-workflowg5xg2-build-action-3020699263/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-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 12:32:03 +0000 UTC FinishedAt: 2026-08-07 15:35:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 12:32:03 +0000 UTC FinishedAt: 2026-08-07 15:35:31 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"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:*b9cb0cc6-279c-408e-89e8-8fc379b4d9bb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b67b9a01-5f01-432f-ba92-edaca42bb407,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-workflowg5xg2/series-workflowg5xg2-build-action-1134149578/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-workflowg5xg2/series-workflowg5xg2-build-action-3020699263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 12:32:03 +0000 UTC FinishedAt: 2026-08-07 12:32:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 12:32:03 +0000 UTC FinishedAt: 2026-08-07 12:32:09 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"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-workflowg5xg2/series-workflowg5xg2-convert-artifact-2698762708/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 12:32:03 +0000 UTC FinishedAt: 2026-08-07 12:32:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 12:32:03 +0000 UTC FinishedAt: 2026-08-07 12:32:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 12:32:03 +0000 UTC FinishedAt: 2026-08-07 12:32:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 12:32:13 +0000 UTC FinishedAt: 2026-08-07 15:35:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5xg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["compound_send_recv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"14df7662-ab9e-43df-88bb-057f50fcdaf3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 12:32:13 +0000 UTC FinishedAt: 2026-08-07 15:35:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b9cb0cc6-279c-408e-89e8-8fc379b4d9bb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b67b9a01-5f01-432f-ba92-edaca42bb407,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-workflowg5xg2/series-workflowg5xg2-build-action-1134149578/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-workflowg5xg2/series-workflowg5xg2-build-action-3020699263/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-workflowg5xg2/series-workflowg5xg2-convert-artifact-2698762708/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,}