Name: series-workflowvqtwr Phase: Succeeded StartedAt: 2026-09-02 14:21:50 +0000 UTC FinishedAt: 2026-09-02 18:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[0] Phase: Succeeded StartedAt: 2026-09-02 14:21:50 +0000 UTC FinishedAt: 2026-09-02 14:44:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 14:21:50 +0000 UTC FinishedAt: 2026-09-02 14:44:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET" ], "series_id": "d51173ad-23c6-4dd5-a763-2cc20cc1e94a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_assoc_update_retran_path", "sctp_assoc_choose_alter_transport", "sctp_retransmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoJiMzNDssCiAgICAmIzM0O3NjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydCYjMzQ7LAogICAgJiMzNDtzY3RwX3JldHJhbnNtaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvb3AgdGVybWluYXRpb24gYW5kIE5VTEwgcG9pbnRlciBhc3NpZ25tZW50IGlzc3VlIGluIGBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aCgpYCBieSBlbnN1cmluZyB0aGUgbG9vcCB0ZXJtaW5hdGlvbiBjaGVjayAoYHRyYW5zID09IGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aGApIGlzIGV4ZWN1dGVkIGV2ZW4gd2hlbiBhIHRyYW5zcG9ydCBpcyBpbiB0aGUgYFNDVFBfVU5DT05GSVJNRURgIHN0YXRlLCBhbmQgZ3VhcmRpbmcgdGhlIGFzc2lnbm1lbnQgdG8gYGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aGAgd2l0aCBhIG51bGwgY2hlY2suXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcG9pbnRlciB2YWxpZGF0aW9uIGZpeC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBsb2dpYyAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb29wIHRlcm1pbmF0aW9uIGFuZCBOVUxMIGRlcmVmZXJlbmNlIGJ1ZyBpbiBTQ1RQIHRyYW5zcG9ydCByZXRyYW5zbWlzc2lvbiBwYXRoIHNlbGVjdGlvbiAoc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgpLiBUaGUgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbCBsb2dpYyBpbiBuZXQvc2N0cCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4OGNjODA0ZDdkMmIyYjlmZGFlMTMzZjVkZmMwYjM3YTU4MGY2MDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNDo0MTozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hc3NvY2lvbGEuYyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jXG5pbmRleCBjMDUxMmM4MjdkMGY1Li40NTIxYmUzYmQ4NWFhIDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvYXNzb2Npb2xhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jXG5AQCAtMTI4OSwxOCAmIzQzOzEyODksMTkgQEAgdm9pZCBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbiBcdFx0LyogTWFudWFsbHkgc2tpcCB0aGUgaGVhZCBlbGVtZW50LiAqL1xuIFx0XHRpZiAoXHUwMDI2dHJhbnMtXHUwMDNldHJhbnNwb3J0cyA9PSBcdTAwMjZhc29jLVx1MDAzZXBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdClcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKHRyYW5zLVx1MDAzZXN0YXRlID09IFNDVFBfVU5DT05GSVJNRUQpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdHRyYW5zX25leHQgPSBzY3RwX3RyYW5zX2VsZWN0X2Jlc3QodHJhbnMsIHRyYW5zX25leHQpO1xuLVx0XHQvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovXG4tXHRcdGlmICh0cmFuc19uZXh0LVx1MDAzZXN0YXRlID09IFNDVFBfQUNUSVZFKVxuLVx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKHRyYW5zLVx1MDAzZXN0YXRlICE9IFNDVFBfVU5DT05GSVJNRUQpIHtcbiYjNDM7XHRcdFx0dHJhbnNfbmV4dCA9IHNjdHBfdHJhbnNfZWxlY3RfYmVzdCh0cmFucywgdHJhbnNfbmV4dCk7XG4mIzQzO1x0XHRcdC8qIEFjdGl2ZSBpcyBnb29kIGVub3VnaCBmb3IgaW1tZWRpYXRlIHJldHVybi4gKi9cbiYjNDM7XHRcdFx0aWYgKHRyYW5zX25leHQtXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXHRcdC8qIFdlJiMzOTt2ZSByZWFjaGVkIHRoZSBlbmQsIHRpbWUgdG8gdXBkYXRlIHBhdGguICovXG4gXHRcdGlmICh0cmFucyA9PSBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGgpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGggPSB0cmFuc19uZXh0O1xuJiM0MztcdGlmICh0cmFuc19uZXh0KVxuJiM0MztcdFx0YXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoID0gdHJhbnNfbmV4dDtcbiBcbiBcdHByX2RlYnVnKFwmIzM0OyVzOiBhc3NvY2lhdGlvbjolcCB1cGRhdGVkIG5ldyBwYXRoIHRvIGFkZHI6JXBJU3BjXFxuXCYjMzQ7LFxuIFx0XHQgX19mdW5jX18sIGFzb2MsIFx1MDAyNmFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aC1cdTAwM2VpcGFkZHIuc2EpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoJiMzNDssCiAgICAmIzM0O3NjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydCYjMzQ7LAogICAgJiMzNDtzY3RwX3JldHJhbnNtaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb29wIHRlcm1pbmF0aW9uIGFuZCBOVUxMIGRlcmVmZXJlbmNlIGJ1ZyBpbiBTQ1RQIHRyYW5zcG9ydCByZXRyYW5zbWlzc2lvbiBwYXRoIHNlbGVjdGlvbiAoc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgpLiBUaGUgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbCBsb2dpYyBpbiBuZXQvc2N0cCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OGNjODA0ZDdkMmIyYjlmZGFlMTMzZjVkZmMwYjM3YTU4MGY2MDIyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxNDo0MTozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2Fzc29jaW9sYS5jIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKaW5kZXggYzA1MTJjODI3ZDBmNS4uNDUyMWJlM2JkODVhYSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKQEAgLTEyODksMTggJiM0MzsxMjg5LDE5IEBAIHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiAJCS8qIE1hbnVhbGx5IHNraXAgdGhlIGhlYWQgZWxlbWVudC4gKi8KIAkJaWYgKCZhbXA7dHJhbnMtJmd0O3RyYW5zcG9ydHMgPT0gJmFtcDthc29jLSZndDtwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpCiAJCQljb250aW51ZTsKLQkJaWYgKHRyYW5zLSZndDtzdGF0ZSA9PSBTQ1RQX1VOQ09ORklSTUVEKQotCQkJY29udGludWU7Ci0JCXRyYW5zX25leHQgPSBzY3RwX3RyYW5zX2VsZWN0X2Jlc3QodHJhbnMsIHRyYW5zX25leHQpOwotCQkvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovCi0JCWlmICh0cmFuc19uZXh0LSZndDtzdGF0ZSA9PSBTQ1RQX0FDVElWRSkKLQkJCWJyZWFrOwomIzQzOwkJaWYgKHRyYW5zLSZndDtzdGF0ZSAhPSBTQ1RQX1VOQ09ORklSTUVEKSB7CiYjNDM7CQkJdHJhbnNfbmV4dCA9IHNjdHBfdHJhbnNfZWxlY3RfYmVzdCh0cmFucywgdHJhbnNfbmV4dCk7CiYjNDM7CQkJLyogQWN0aXZlIGlzIGdvb2QgZW5vdWdoIGZvciBpbW1lZGlhdGUgcmV0dXJuLiAqLwomIzQzOwkJCWlmICh0cmFuc19uZXh0LSZndDtzdGF0ZSA9PSBTQ1RQX0FDVElWRSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQl9CiAJCS8qIFdlJiMzOTt2ZSByZWFjaGVkIHRoZSBlbmQsIHRpbWUgdG8gdXBkYXRlIHBhdGguICovCiAJCWlmICh0cmFucyA9PSBhc29jLSZndDtwZWVyLnJldHJhbl9wYXRoKQogCQkJYnJlYWs7CiAJfQogCi0JYXNvYy0mZ3Q7cGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7CiYjNDM7CWlmICh0cmFuc19uZXh0KQomIzQzOwkJYXNvYy0mZ3Q7cGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7CiAKIAlwcl9kZWJ1ZygmIzM0OyVzOiBhc3NvY2lhdGlvbjolcCB1cGRhdGVkIG5ldyBwYXRoIHRvIGFkZHI6JXBJU3BjXG4mIzM0OywKIAkJIF9fZnVuY19fLCBhc29jLCAmYW1wO2Fzb2MtJmd0O3BlZXIucmV0cmFuX3BhdGgtJmd0O2lwYWRkci5zYSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTQ1RQIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYG5ldC9zY3RwL2Fzc29jaW9sYS5jYCwgcGFydGljdWxhcmx5IHRoZSBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoKWAgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgY2hhbmdpbmcgdGhlcmUuIEFuZCBzaW5jZSB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IGNvbmZpZ3VyYXRpb24sIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBuZXQvc2N0cC9LY29uZmlnYCBhcyB3ZWxsLCBqdXN0IGluIGNhc2UgdGhlcmUgYXJlIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLgoKVG8gZ2V0IHRoZSBtb3N0IHJlbGV2YW50IGNvbnRleHQgYXJvdW5kIHRoZSBjb2RlIGNoYW5nZXMsIEkmIzM5O2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHplcm8gaW4gb24gbGluZSAxMjg5IGluIGBuZXQvc2N0cC9hc3NvY2lvbGEuY2AuIEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gVGhpcyBhcHByb2FjaCB3aWxsIGFsbG93IG1lIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcGF0Y2ggd2l0aGluIHRoZSBicm9hZGVyIGZ1bmN0aW9uIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjdHAvYXNzb2Npb2xhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNzA6XHRcbjEyNzE6XHR2b2lkIHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuMTI3MjpcdHtcbjEyNzM6XHRcdHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnMgPSBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGg7XG4xMjc0Olx0XHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zX25leHQgPSBOVUxMO1xuMTI3NTpcdFxuMTI3NjpcdFx0LyogV2UmIzM5O3JlIGRvbmUgYXMgd2Ugb25seSBoYXZlIHRoZSBvbmUgYW5kIG9ubHkgcGF0aC4gKi9cbjEyNzc6XHRcdGlmIChhc29jLVx1MDAzZXBlZXIudHJhbnNwb3J0X2NvdW50ID09IDEpXG4xMjc4Olx0XHRcdHJldHVybjtcbjEyNzk6XHRcdC8qIElmIGFjdGl2ZV9wYXRoIGFuZCByZXRyYW5fcGF0aCBhcmUgdGhlIHNhbWUgYW5kIGFjdGl2ZSxcbjEyODA6XHRcdCAqIHRoZW4gdGhpcyBpcyB0aGUgb25seSBhY3RpdmUgcGF0aC4gVXNlIGl0LlxuMTI4MTpcdFx0ICovXG4xMjgyOlx0XHRpZiAoYXNvYy1cdTAwM2VwZWVyLmFjdGl2ZV9wYXRoID09IGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aCBcdTAwMjZcdTAwMjZcbjEyODM6XHRcdCAgICBhc29jLVx1MDAzZXBlZXIuYWN0aXZlX3BhdGgtXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXG4xMjg0Olx0XHRcdHJldHVybjtcbjEyODU6XHRcbjEyODY6XHRcdC8qIEl0ZXJhdGUgZnJvbSByZXRyYW5fcGF0aCYjMzk7cyBzdWNjZXNzb3IgYmFjayB0byByZXRyYW5fcGF0aC4gKi9cbjEyODc6XHRcdGZvciAodHJhbnMgPSBsaXN0X25leHRfZW50cnkodHJhbnMsIHRyYW5zcG9ydHMpOyAxO1xuMTI4ODpcdFx0ICAgICB0cmFucyA9IGxpc3RfbmV4dF9lbnRyeSh0cmFucywgdHJhbnNwb3J0cykpIHtcbjEyODk6XHRcdFx0LyogTWFudWFsbHkgc2tpcCB0aGUgaGVhZCBlbGVtZW50LiAqL1xuMTI5MDpcdFx0XHRpZiAoXHUwMDI2dHJhbnMtXHUwMDNldHJhbnNwb3J0cyA9PSBcdTAwMjZhc29jLVx1MDAzZXBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdClcbjEyOTE6XHRcdFx0XHRjb250aW51ZTtcbjEyOTI6XHRcdFx0aWYgKHRyYW5zLVx1MDAzZXN0YXRlICE9IFNDVFBfVU5DT05GSVJNRUQpIHtcbjEyOTM6XHRcdFx0XHR0cmFuc19uZXh0ID0gc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFuc19uZXh0KTtcbjEyOTQ6XHRcdFx0XHQvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovXG4xMjk1Olx0XHRcdFx0aWYgKHRyYW5zX25leHQtXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXG4xMjk2Olx0XHRcdFx0XHRicmVhaztcbjEyOTc6XHRcdFx0fVxuMTI5ODpcdFx0XHQvKiBXZSYjMzk7dmUgcmVhY2hlZCB0aGUgZW5kLCB0aW1lIHRvIHVwZGF0ZSBwYXRoLiAqL1xuMTI5OTpcdFx0XHRpZiAodHJhbnMgPT0gYXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoKVxuMTMwMDpcdFx0XHRcdGJyZWFrO1xuMTMwMTpcdFx0fVxuMTMwMjpcdFxuMTMwMzpcdFx0aWYgKHRyYW5zX25leHQpXG4xMzA0Olx0XHRcdGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7XG4xMzA1Olx0XG4xMzA2Olx0XHRwcl9kZWJ1ZyhcJiMzNDslczogYXNzb2NpYXRpb246JXAgdXBkYXRlZCBuZXcgcGF0aCB0byBhZGRyOiVwSVNwY1xcblwmIzM0OyxcbjEzMDc6XHRcdFx0IF9fZnVuY19fLCBhc29jLCBcdTAwMjZhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGgtXHUwMDNlaXBhZGRyLnNhKTtcbjEzMDg6XHR9XG4xMzA5Olx0XG4xMzEwOlx0c3RhdGljIHZvaWQgc2N0cF9zZWxlY3RfYWN0aXZlX2FuZF9yZXRyYW5fcGF0aChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbjEzMTE6XHR7XG4xMzEyOlx0XHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zLCAqdHJhbnNfcHJpID0gTlVMTCwgKnRyYW5zX3NlYyA9IE5VTEw7XG4xMzEzOlx0XHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zX3BmID0gTlVMTDtcbjEzMTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDY1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJldHJhbnNtaXNzaW9uIFBhdGggQnVnIGluIFNDVFAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGhgIGFkZHJlc3NlcyBhIG5hc3R5IGZsYXcuIEFwcGFyZW50bHksIHRoZXJlJiMzOTtzIGEgc2NlbmFyaW8gd2hlcmUgYGFzb2MtJmd0O3BlZXIucmV0cmFuX3BhdGhgIOKAkyB3aGljaCBJIHJlY29nbml6ZSBhcyB0aGUgcmV0cmFuc21pc3Npb24gcGF0aCBmb3IgYW4gU0NUUCBhc3NvY2lhdGlvbiDigJMgY291bGQgZW5kIHVwIHBvaW50aW5nIHRvIGBOVUxMYC4gT3IsIGV2ZW4gd29yc2UsIGlmIGFsbCB0aGUgdHJhbnNwb3J0cyBhcmUgaW4gYW4gYFNDVFBfVU5DT05GSVJNRURgIHN0YXRlLCBgdHJhbnNfbmV4dGAgY291bGQgYmUgYE5VTExgLgoKVGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgYSBzdWJ0bGUgbG9naWMgZXJyb3IgaW4gdGhlIG9yaWdpbmFsIGNvZGUuIEkgc2VlIGl0IG5vdzogdGhlIGNvbmRpdGlvbmFsIGBpZiAodHJhbnMtJmd0O3N0YXRlID09IFNDVFBfVU5DT05GSVJNRUQpIGNvbnRpbnVlO2AgZm9sbG93ZWQgYnkgYGlmICh0cmFucyA9PSBhc29jLSZndDtwZWVyLnJldHJhbl9wYXRoKSBicmVhaztgIC0gd2FpdCBhIG1pbnV0ZSEgSWYgYHRyYW5zYCAqaXMqIHRoZSByZXRyYW5zbWlzc2lvbiBwYXRoICphbmQqIGl0JiMzOTtzIGBTQ1RQX1VOQ09ORklSTUVEYCwgdGhhdCBgY29udGludWVgIHN0YXRlbWVudCB3b3VsZCBza2lwIHRoZSBgYnJlYWtgIGNvbmRpdGlvbiwgbGVhZGluZyB0byBhbiBpbmZpbml0ZSBsb29wISBBbmQgZXZlbiB3b3JzZSwgaWYgYHRyYW5zX25leHRgIGlzIGBOVUxMYCBpdCBjb3VsZCBjYXVzZSBhIG5hc3R5IE5VTEwgZGVyZWZlcmVuY2UgbGF0ZXIgb24gYXQgYGFzb2MtJmd0O3BlZXIucmV0cmFuX3BhdGggPSB0cmFuc19uZXh0YCEgVGhhdCYjMzk7cyBhIGNsYXNzaWMgbWlzdGFrZS4gSSYjMzk7dmUgYmVlbiB0aGVyZSBteXNlbGYuIEFuZCBpdCBjb3VsZCB0aGVuIGNhdXNlIGFub3RoZXIgTlVMTCBkZXJlZmVyZW5jZSBieSB0cnlpbmcgdG8gYWNjZXNzIHNvbWV0aGluZyBsaWtlIGBhc29jLSZndDtwZWVyLnJldHJhbl9wYXRoLSZndDtpcGFkZHIuc2FgIGluIHNvbWV0aGluZyBsaWtlIGEgYHByX2RlYnVnYC4gVWdoLgoKTm93LCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QsIEkgbmVlZCB0byB0cmFjZSB3aGVyZSBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGhgIGlzIGFjdHVhbGx5IGNhbGxlZC4gR290dGEgY2hlY2sgdGhlIGNhbGwgc2l0ZXMgdGhyb3VnaG91dCB0aGUgU0NUUCBjb2RlYmFzZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlYWwtd29ybGQgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmg9MjExNz1zdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydChcbmluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oLTIxMTgtXHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKik7XG5pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaDoyMTE5OnZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7XG5pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaC0yMTIwLXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqc2N0cF9hc3NvY19sb29rdXBfcGFkZHIoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKixcbi0tXG5uZXQvc2N0cC9hc3NvY2lvbGEuYz00ODI9dm9pZCBzY3RwX2Fzc29jX3JtX3BlZXIoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4tLVxubmV0L3NjdHAvYXNzb2Npb2xhLmMtNDk1LVx0aWYgKGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aCA9PSBwZWVyKVxubmV0L3NjdHAvYXNzb2Npb2xhLmM6NDk2Olx0XHRzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aChhc29jKTtcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTQ5Ny1cbi0tXG5uZXQvc2N0cC9hc3NvY2lvbGEuYz0xMjQ4PXN0YXRpYyBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnNjdHBfdHJhbnNfZWxlY3RfYmVzdChzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKmN1cnIsXG4tLVxubmV0L3NjdHAvYXNzb2Npb2xhLmMtMTI3MC1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjEyNzE6dm9pZCBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTEyNzIte1xuLS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jPTEzNzg9c2N0cF9hc3NvY19jaG9vc2VfYWx0ZXJfdHJhbnNwb3J0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTEzODgtXHRcdGlmIChsYXN0X3NlbnRfdG8gPT0gYXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoKVxubmV0L3NjdHAvYXNzb2Npb2xhLmM6MTM4OTpcdFx0XHRzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aChhc29jKTtcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTEzOTAtXG4tLVxubmV0L3NjdHAvb3V0cXVldWUuYz01Mzc9dm9pZCBzY3RwX3JldHJhbnNtaXQoc3RydWN0IHNjdHBfb3V0cSAqcSwgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQsXG4tLVxubmV0L3NjdHAvb3V0cXVldWUuYy01NDktXHRcdGlmICh0cmFuc3BvcnQgPT0gdHJhbnNwb3J0LVx1MDAzZWFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aClcbm5ldC9zY3RwL291dHF1ZXVlLmM6NTUwOlx0XHRcdHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKHRyYW5zcG9ydC1cdTAwM2Vhc29jKTtcbm5ldC9zY3RwL291dHF1ZXVlLmMtNTUxLVx0XHR0cmFuc3BvcnQtXHUwMDNlYXNvYy1cdTAwM2VydHhfZGF0YV9jaHVua3MgJiM0Mzs9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBTQ1RQIExhbmRzY2FwZTogQSBLY29uZmlnIENoZWNrKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgbmVlZCB0byBtYWtlIHN1cmUgU0NUUCBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBmaWxlcy4gSXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgaW4gZW5zdXJpbmcgYSByZWxpYWJsZSBTQ1RQIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSByZWxldmFudCBvcHRpb25zIGFyZSBlbmFibGVkLCBjb25zaWRlcmluZyBhbnkgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbmV0d29ya2luZyBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB1c2VyLXNwYWNlIHZzLiBrZXJuZWwtc3BhY2UgYXNwZWN0cy4gQXJlIHRoZSBuZWNlc3NhcnkgU0NUUCBtb2R1bGVzIGJlaW5nIGJ1aWx0PyBJcyB0aGUgc3RhY2sgaW50ZWdyYXRlZCBwcm9wZXJseT8gQSB0aG9yb3VnaCBzY2FuIG9mIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgd2lsbCBxdWlja2x5IGNsYXJpZnkgdGhlIHN5c3RlbSYjMzk7cyBjdXJyZW50IHN0YW5jZSBvbiBTQ1RQIHN1cHBvcnQgYW5kIHVuY292ZXIgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGlzc3VlcywgYmVmb3JlIEkgc3RhcnQgaW50ZWdyYXRpbmcgYW55dGhpbmcgbmV3LiBUaGlzIHByZWxpbWluYXJ5IGNoZWNrIHNob3VsZCBwcm92aWRlIGEgcmVsaWFibGUgYmFzaXMgZm9yIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NDVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnLTUtXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXG5uZXQvc2N0cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgU0NUUCBQcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBuZXQvc2N0cC9LY29uZmlnYCBmaWxlOgoKKipBbmFseXppbmcgdGhlIFNDVFAgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG5ldC9zY3RwL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgU0NUUCAoU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sKSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBhcmUgZGVmaW5lZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBLY29uZmlnIGNvbnZlbnRpb25zIGhlcmUg4oCTIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSwgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzLiBUaGUgZ29hbCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvcHRpb25zIGNvbnRyb2wgU0NUUCYjMzk7cyBmZWF0dXJlcywgYW5kIGhvdyB0aGV5IGltcGFjdCB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqQ29yZSBFbmFibGVtZW50OioqIFRoZSB0b3AtbGV2ZWwgb3B0aW9uIHRvIGVuYWJsZSBvciBkaXNhYmxlIFNDVFAgZW50aXJlbHkuCiogICAqKkZlYXR1cmUgRmxhZ3M6KiogSW5kaXZpZHVhbCBvcHRpb25zIGNvbnRyb2xsaW5nIHNwZWNpZmljIFNDVFAgZmVhdHVyZXMgbGlrZSBtdWx0aS1ob21pbmcsIGR5bmFtaWMgYWRkcmVzcyBjb25maWd1cmF0aW9uLCBzdHJlYW0gc2VxdWVuY2luZywgYW5kIGFueSBleHRlbnNpb25zIGxpa2UgRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24gKEVDTikgc3VwcG9ydCwgb3IgVXNlciBEYXRhZ3JhbSBQcm90b2NvbCAoVURQKSBlbmNhcHN1bGF0aW9uLgoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcyBkb2VzIFNDVFAgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGhhcmQgZGVwZW5kZW5jaWVzIG9uLCBzYXksIG5ldHdvcmtpbmcgc3RhY2sgY29tcG9uZW50cyBvciBzZWN1cml0eSBmZWF0dXJlcz8gQW5kIHdoYXQgYWJvdXQgYnVpbGQgZGVwZW5kZW5jaWVzLCBtYWtpbmcgc3VyZSBhbGwgdGhlIG5lZWRlZCBtb2R1bGVzIGFyZSBidWlsdC4KKiAgICoqRGVmYXVsdCBWYWx1ZXM6KiogVW5kZXJzdGFuZGluZyB0aGUgZGVmYXVsdCBzZXR0aW5ncyBpcyBjcnVjaWFsLiBBcmUgdGhleSBzZW5zaWJsZSBmb3IgZ2VuZXJhbCB1c2UsIG9yIGFyZSB0aGVyZSBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgSSBtaWdodCBuZWVkIHRvIGFkanVzdCB0aGVtPyBPZnRlbiB0aGUgZGVmYXVsdCBmb3IgbW9kdWxlcyBpcyBgbWAsIHNvIHRoZXkmIzM5O3JlIGJ1aWx0IGFzIGxvYWRhYmxlIG1vZHVsZXMuCiogICAqKkhlbHAgVGV4dDoqKiBUaGlzIHNob3VsZCBwcm92aWRlIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgZWFjaCBvcHRpb24uIFRoZSBoZWxwIHRleHQmIzM5O3MgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBhcmUga2V5IGluZGljYXRvcnMgb2YgdGhlIHF1YWxpdHkgb2YgdGhlIEtjb25maWcgZmlsZSBpdHNlbGYuIEkmIzM5O2xsIGJlIGNvbXBhcmluZyBpdCB0byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLgoqICAgKipDb25kaXRpb25hbCBDb21waWxhdGlvbjoqKiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgb3B0aW9ucyB0aGF0IGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUsIENQVSwgb3Igb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBUaGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgaW1wYWN0IG9uIHBvd2VyLgoqICAgKipTZWN1cml0eSBDb25zaWRlcmF0aW9uczoqKiBIYXMgdGhlIEtjb25maWcgZmlsZSBhZGRyZXNzZWQgc2VjdXJpdHktcmVsYXRlZCBhc3BlY3RzPyBBcmUgdGhlcmUgb3B0aW9ucyByZWxhdGVkIHRvIElQc2VjLCBUTFMsIG9yIGFueSBoYXJkZW5pbmcgZmVhdHVyZXM/IEFyZSB0aGVyZSBhbnkgb3B0aW9ucyB0byBzdXBwb3J0IGhhcmRlbmluZywgb3IgZGlzYWJsaW5nIGZ1bmN0aW9ucyB0byByZWR1Y2UgdGhlIGF0dGFjayBzdXJmYWNlLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGZvcm0gYSBjb21wbGV0ZSBtZW50YWwgcGljdHVyZSBvZiBob3cgU0NUUCBpcyBjb25maWd1cmVkIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgTGludXgga2VybmVsIG5ldHdvcmtpbmcgZnJhbWV3b3JrLiBJJiMzOTtsbCBiZSBub3RpbmcgYW55IGFyZWFzIHRoYXQgYXJlIHVuY2xlYXIsIG9yIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGltcHJvdmVtZW50cyB0aGF0IEkgY2FuIGlkZW50aWZ5IGFzIEkgZ28gdGhyb3VnaCB0aGUgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgU0NUUCBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgSVBfU0NUUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIFNDVFAgUHJvdG9jb2xcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gIDExOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAxMjpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTM6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2xcbiAgMTY6XHRcbiAgMTc6XHRcdCAgRnJvbSBSRkMgMjk2MCBcdTAwM2NodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTYwLnR4dFx1MDAzZS5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgXCYjMzQ7U0NUUCBpcyBhIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2NvbCBvcGVyYXRpbmcgb24gdG9wIG9mIGFcbiAgMjA6XHRcdCAgY29ubmVjdGlvbmxlc3MgcGFja2V0IG5ldHdvcmsgc3VjaCBhcyBJUC4gIEl0IG9mZmVycyB0aGUgZm9sbG93aW5nXG4gIDIxOlx0XHQgIHNlcnZpY2VzIHRvIGl0cyB1c2VyczpcbiAgMjI6XHRcbiAgMjM6XHRcdCAgLS0gYWNrbm93bGVkZ2VkIGVycm9yLWZyZWUgbm9uLWR1cGxpY2F0ZWQgdHJhbnNmZXIgb2YgdXNlciBkYXRhLFxuICAyNDpcdFx0ICAtLSBkYXRhIGZyYWdtZW50YXRpb24gdG8gY29uZm9ybSB0byBkaXNjb3ZlcmVkIHBhdGggTVRVIHNpemUsXG4gIDI1Olx0XHQgIC0tIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiB1c2VyIG1lc3NhZ2VzIHdpdGhpbiBtdWx0aXBsZSBzdHJlYW1zLFxuICAyNjpcdFx0ICB3aXRoIGFuIG9wdGlvbiBmb3Igb3JkZXItb2YtYXJyaXZhbCBkZWxpdmVyeSBvZiBpbmRpdmlkdWFsIHVzZXJcbiAgMjc6XHRcdCAgbWVzc2FnZXMsXG4gIDI4Olx0XHQgIC0tIG9wdGlvbmFsIGJ1bmRsaW5nIG9mIG11bHRpcGxlIHVzZXIgbWVzc2FnZXMgaW50byBhIHNpbmdsZSBTQ1RQXG4gIDI5Olx0XHQgIHBhY2tldCwgYW5kXG4gIDMwOlx0XHQgIC0tIG5ldHdvcmstbGV2ZWwgZmF1bHQgdG9sZXJhbmNlIHRocm91Z2ggc3VwcG9ydGluZyBvZiBtdWx0aS1cbiAgMzE6XHRcdCAgaG9taW5nIGF0IGVpdGhlciBvciBib3RoIGVuZHMgb2YgYW4gYXNzb2NpYXRpb24uXCYjMzQ7XG4gIDMyOlx0XG4gIDMzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBwcm90b2NvbCBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjdHAuIERlYnVnIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGJ5IHRoZVxuICAzNTpcdFx0ICBrZXJuZWwmIzM5O3MgZHluYW1pYyBkZWJ1Z2dpbmcgZnJhbWV3b3JrLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gIDM4Olx0XG4gIDM5Olx0aWYgSVBfU0NUUFxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjE5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIGBuZXQvc2N0cC9NYWtlZmlsZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgYXNzb2Npb2xhLmNgIGdldHMgcHJvcGVybHkgY29tcGlsZWQgd2hlbmV2ZXIgYENPTkZJR19JUF9TQ1RQYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAsIGFuZCBpZiB0aGF0IGRvZXNuJiMzOTt0IGhhcHBlbiwgd2UmIzM5O3JlIGdvaW5nIHRvIGhhdmUgc29tZSByZWFsIHByb2JsZW1zLiBUaGlzIGlzIGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IGFuZCBuZWVkcyB0byBiZSB2ZXJpZmllZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGFsbCBzcXVhcmVkIGF3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fzc29jaW9sYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL01ha2VmaWxlPTk9c2N0cC15IDo9IHNtX3N0YXRldGFibGUubyBzbV9zdGF0ZWZ1bnMubyBzbV9zaWRlZWZmZWN0Lm8gXFxcbm5ldC9zY3RwL01ha2VmaWxlOjEwOlx0ICBwcm90b2NvbC5vIGVuZHBvaW50b2xhLm8gYXNzb2Npb2xhLm8gXFxcbm5ldC9zY3RwL01ha2VmaWxlLTExLVx0ICB0cmFuc3BvcnQubyBjaHVuay5vIHNtX21ha2VfY2h1bmsubyB1bHBldmVudC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0OTIKCQkJCQkJCW91dHB1dDogMTMyCgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIElQX1NDVFAqKgoKT2theSwgbGV0JiMzOTtzIGFzc2VzcyB0aGUgZnV6emluZyBwb3RlbnRpYWwgaGVyZS4gYElQX1NDVFBgIGRlcGVuZHMgb24gYElORVRgLCBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBzYXlzIHllcywgdGhpcyBpcyBhIHRhcmdldCB3b3J0aCBwdXJzdWluZy4gU0NUUCBpcyBhIGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgcHJvdG9jb2wsIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHNvY2tldHMgdXNpbmcgYEFGX0lORVRgLCBgU09DS19TRVFQQUNLRVRgLCBvciBgU09DS19TVFJFQU1gLCBhbmQgYElQUFJPVE9fU0NUUGAuIEltcG9ydGFudGx5LCBzeXprYWxsZXIgaGVhdmlseSB1dGlsaXplcyBpdCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBpbmRpY2F0b3IuCgpUaGlzIHBhcnRpY3VsYXIgcGF0Y2ggYWRkcmVzc2VzIGFuIGluZmluaXRlIGxvb3AvTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdpdGhpbiBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoKWAuIFRpbWUgdG8gZXhhbWluZSB0aGF0IGZ1bmN0aW9uIG1vcmUgY2xvc2VseS4gSXQmIzM5O3MgYSBub24tc3RhdGljLCBleHBvcnRlZCBmdW5jdGlvbjogYHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpYC4gSSBzaG91bGQgYWxzbyBsb29rIGF0IG90aGVyIHJlbGV2YW50IGVudHJ5cG9pbnRzOyB0aGUgY2FsbGVycyBhcmUgYHNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydGAsIGBzY3RwX3JldHJhbnNtaXRgLCBhbmQgYHNjdHBfYXNzb2Nfcm1fcGVlcmAuCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoYCBpbiBgRm9jdXNTeW1ib2xzYCwgYW5kIHRoZW4gSSYjMzk7bGwgbWFrZSBzdXJlIHRob3NlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBhcmUgYWxzbyBvbiB0aGUgbGlzdDogYHNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydGAgYW5kIGBzY3RwX3JldHJhbnNtaXRgLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYElQX1NDVFBgICh3aGljaCwgYXMgZXhwZWN0ZWQsIGRlcGVuZHMgb24gYElORVRgKS4gTGV0JiMzOTtzIGVuc3VyZSB0aG9zZSBjb25maWdzIGFyZSBlbmFibGVkLgoKT2theSwgbGV0JiMzOTtzIHJ1biBhIGZpbmFsIGRvdWJsZS1jaGVjayBvZiBldmVyeXRoaW5nIGFuZCBmaWxsIGluIHRoZSBzZXQtcmVzdWx0cyB0b29sLgoKKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlIOKAkyBUaGlzIGZpeGVzIGEgY3JpdGljYWwgdnVsbmVyYWJpbGl0eSwgYW4gaW5maW5pdGUgbG9vcC9OVUxMIGRlcmVmZXJlbmNlLCB3aXRoaW4gYW4gU0NUUCBhc3NvY2lhdGlvbiB0cmFuc3BvcnQgaXRlcmF0aW9uLiBTQ1RQIGlzIGEgdmlhYmxlIHRhcmdldCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcy4KKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhbiBpbmZpbml0ZSBsb29wL05VTEwgZGVyZWZlcmVuY2UgaW4gYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoYCB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIGFzc29jaWF0aW9uIHRyYW5zcG9ydHMuIFNDVFAgaXMgZnVsbHkgc3VwcG9ydGVkIGFuZCBjYW4gYmUgdGFyZ2V0ZWQgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7SVBfU0NUUCYjMzQ7LCAmIzM0O0lORVQmIzM0O11gIOKAkyBUaGVzZSBhcmUgdGhlIG5lY2Vzc2FyeSBwcmVyZXF1aXNpdGVzLgoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aCYjMzQ7LCAmIzM0O3NjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydCYjMzQ7LCAmIzM0O3NjdHBfcmV0cmFuc21pdCYjMzQ7XWAg4oCTIGNvdmVyaW5nIHRoZSB2dWxuZXJhYmxlIGZ1bmN0aW9uIGFuZCBwb3RlbnRpYWxseSByZWxldmFudCBlbnRyeXBvaW50cy4KCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aCYjMzQ7LAogICAgJiMzNDtzY3RwX2Fzc29jX2Nob29zZV9hbHRlcl90cmFuc3BvcnQmIzM0OywKICAgICYjMzQ7c2N0cF9yZXRyYW5zbWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBkZXJlZmVyZW5jZSBidWcgaW4gU0NUUCB0cmFuc3BvcnQgcmV0cmFuc21pc3Npb24gcGF0aCBzZWxlY3Rpb24gKHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKS4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gbmV0L3NjdHAgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aCYjMzQ7LAogICAgJiMzNDtzY3RwX2Fzc29jX2Nob29zZV9hbHRlcl90cmFuc3BvcnQmIzM0OywKICAgICYjMzQ7c2N0cF9yZXRyYW5zbWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBkZXJlZmVyZW5jZSBidWcgaW4gU0NUUCB0cmFuc3BvcnQgcmV0cmFuc21pc3Npb24gcGF0aCBzZWxlY3Rpb24gKHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKS4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gbmV0L3NjdHAgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb29wIHRlcm1pbmF0aW9uIGFuZCBOVUxMIHBvaW50ZXIgYXNzaWdubWVudCBpc3N1ZSBpbiBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoKWAgYnkgZW5zdXJpbmcgdGhlIGxvb3AgdGVybWluYXRpb24gY2hlY2sgKGB0cmFucyA9PSBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGhgKSBpcyBleGVjdXRlZCBldmVuIHdoZW4gYSB0cmFuc3BvcnQgaXMgaW4gdGhlIGBTQ1RQX1VOQ09ORklSTUVEYCBzdGF0ZSwgYW5kIGd1YXJkaW5nIHRoZSBhc3NpZ25tZW50IHRvIGBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGhgIHdpdGggYSBudWxsIGNoZWNrLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgaXMgYSBjb250cm9sIGZsb3cgYW5kIHBvaW50ZXIgdmFsaWRhdGlvbiBmaXguIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgbG9naWMgKHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGxpc3QgdHJhdmVyc2FsIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg4Y2M4MDRkN2QyYjJiOWZkYWUxMzNmNWRmYzBiMzdhNTgwZjYwMjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDE0OjQxOjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwppbmRleCBjMDUxMmM4MjdkMGY1Li40NTIxYmUzYmQ4NWFhIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwpAQCAtMTI4OSwxOCAmIzQzOzEyODksMTkgQEAgdm9pZCBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKIAkJLyogTWFudWFsbHkgc2tpcCB0aGUgaGVhZCBlbGVtZW50LiAqLwogCQlpZiAoJmFtcDt0cmFucy0mZ3Q7dHJhbnNwb3J0cyA9PSAmYW1wO2Fzb2MtJmd0O3BlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCkKIAkJCWNvbnRpbnVlOwotCQlpZiAodHJhbnMtJmd0O3N0YXRlID09IFNDVFBfVU5DT05GSVJNRUQpCi0JCQljb250aW51ZTsKLQkJdHJhbnNfbmV4dCA9IHNjdHBfdHJhbnNfZWxlY3RfYmVzdCh0cmFucywgdHJhbnNfbmV4dCk7Ci0JCS8qIEFjdGl2ZSBpcyBnb29kIGVub3VnaCBmb3IgaW1tZWRpYXRlIHJldHVybi4gKi8KLQkJaWYgKHRyYW5zX25leHQtJmd0O3N0YXRlID09IFNDVFBfQUNUSVZFKQotCQkJYnJlYWs7CiYjNDM7CQlpZiAodHJhbnMtJmd0O3N0YXRlICE9IFNDVFBfVU5DT05GSVJNRUQpIHsKJiM0MzsJCQl0cmFuc19uZXh0ID0gc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFuc19uZXh0KTsKJiM0MzsJCQkvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovCiYjNDM7CQkJaWYgKHRyYW5zX25leHQtJmd0O3N0YXRlID09IFNDVFBfQUNUSVZFKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCX0KIAkJLyogV2UmIzM5O3ZlIHJlYWNoZWQgdGhlIGVuZCwgdGltZSB0byB1cGRhdGUgcGF0aC4gKi8KIAkJaWYgKHRyYW5zID09IGFzb2MtJmd0O3BlZXIucmV0cmFuX3BhdGgpCiAJCQlicmVhazsKIAl9CiAKLQlhc29jLSZndDtwZWVyLnJldHJhbl9wYXRoID0gdHJhbnNfbmV4dDsKJiM0MzsJaWYgKHRyYW5zX25leHQpCiYjNDM7CQlhc29jLSZndDtwZWVyLnJldHJhbl9wYXRoID0gdHJhbnNfbmV4dDsKIAogCXByX2RlYnVnKCYjMzQ7JXM6IGFzc29jaWF0aW9uOiVwIHVwZGF0ZWQgbmV3IHBhdGggdG8gYWRkcjolcElTcGNcbiYjMzQ7LAogCQkgX19mdW5jX18sIGFzb2MsICZhbXA7YXNvYy0mZ3Q7cGVlci5yZXRyYW5fcGF0aC0mZ3Q7aXBhZGRyLnNhKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNDVFAgUmV0cmFuc21pc3Npb24gUGF0aCBVcGRhdGUqKgoKT2theSwgc28gdGhlIHBhdGNoIGlzIG5lc3RsZWQgd2l0aGluIHRoZSBgbmV0L3NjdHAvYXNzb2Npb2xhLmNgIGZpbGUsIHNwZWNpZmljYWxseSBpbXBhY3RpbmcgdGhlIGBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aGAgZnVuY3Rpb24uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBmaXJzdCBtb3ZlIGlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGFuZCAqaG93KiBiZWhpbmQgdGhpcyBmdW5jdGlvbiBjYWxsLiBJJiMzOTtsbCBuZWVkIHRvIGdhaW4gYSBzb2xpZCBncmFzcCBvZiBpdHMgcHVycG9zZSBpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIFNDVFAgYXNzb2NpYXRpb24gbWFuYWdlbWVudC4KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgdXNlIGBncmVwcGVyYCAob3IgbWF5YmUgZXZlbiBqdXN0IGEgZ29vZCBvbGQgYHJlYWQtZmlsZWAgYW5kIGNhcmVmdWwgbmF2aWdhdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5KSB0byBxdWlja2x5IHB1bGwgdXAgYWxsIHRoZSBjYWxsIHNpdGVzIG9mIGBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aGAuIFRoYXQmIzM5O2xsIGJlIGNydWNpYWwuIFNlZWluZyB3aGVyZSBhbmQgd2hlbiB0aGlzIGZ1bmN0aW9uIGdldHMgaW52b2tlZCB3aWxsIGltbWVkaWF0ZWx5IGlsbHVtaW5hdGUgaXRzIHJvbGUgaW4gdGhlIHJldHJhbnNtaXNzaW9uIHBhdGggdXBkYXRlIHByb2Nlc3MuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHBhdGggZmFpbHVyZXM/IENvbmdlc3Rpb24gY29udHJvbCBhZGp1c3RtZW50cz8gQXNzb2NpYXRpb24gbGlmZXRpbWUgbWFpbnRlbmFuY2U/IEdyYXNwaW5nIHRoZSBjYWxsIGNvbnRleHQgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBpdCBoYXMgb24gdGhlIHdob2xlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9hc3NvY2lvbGEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI3MDpcdFxuMTI3MTpcdHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4xMjcyOlx0e1xuMTI3MzpcdFx0c3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFucyA9IGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aDtcbjEyNzQ6XHRcdHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNfbmV4dCA9IE5VTEw7XG4xMjc1Olx0XG4xMjc2Olx0XHQvKiBXZSYjMzk7cmUgZG9uZSBhcyB3ZSBvbmx5IGhhdmUgdGhlIG9uZSBhbmQgb25seSBwYXRoLiAqL1xuMTI3NzpcdFx0aWYgKGFzb2MtXHUwMDNlcGVlci50cmFuc3BvcnRfY291bnQgPT0gMSlcbjEyNzg6XHRcdFx0cmV0dXJuO1xuMTI3OTpcdFx0LyogSWYgYWN0aXZlX3BhdGggYW5kIHJldHJhbl9wYXRoIGFyZSB0aGUgc2FtZSBhbmQgYWN0aXZlLFxuMTI4MDpcdFx0ICogdGhlbiB0aGlzIGlzIHRoZSBvbmx5IGFjdGl2ZSBwYXRoLiBVc2UgaXQuXG4xMjgxOlx0XHQgKi9cbjEyODI6XHRcdGlmIChhc29jLVx1MDAzZXBlZXIuYWN0aXZlX3BhdGggPT0gYXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoIFx1MDAyNlx1MDAyNlxuMTI4MzpcdFx0ICAgIGFzb2MtXHUwMDNlcGVlci5hY3RpdmVfcGF0aC1cdTAwM2VzdGF0ZSA9PSBTQ1RQX0FDVElWRSlcbjEyODQ6XHRcdFx0cmV0dXJuO1xuMTI4NTpcdFxuMTI4NjpcdFx0LyogSXRlcmF0ZSBmcm9tIHJldHJhbl9wYXRoJiMzOTtzIHN1Y2Nlc3NvciBiYWNrIHRvIHJldHJhbl9wYXRoLiAqL1xuMTI4NzpcdFx0Zm9yICh0cmFucyA9IGxpc3RfbmV4dF9lbnRyeSh0cmFucywgdHJhbnNwb3J0cyk7IDE7XG4xMjg4Olx0XHQgICAgIHRyYW5zID0gbGlzdF9uZXh0X2VudHJ5KHRyYW5zLCB0cmFuc3BvcnRzKSkge1xuMTI4OTpcdFx0XHQvKiBNYW51YWxseSBza2lwIHRoZSBoZWFkIGVsZW1lbnQuICovXG4xMjkwOlx0XHRcdGlmIChcdTAwMjZ0cmFucy1cdTAwM2V0cmFuc3BvcnRzID09IFx1MDAyNmFzb2MtXHUwMDNlcGVlci50cmFuc3BvcnRfYWRkcl9saXN0KVxuMTI5MTpcdFx0XHRcdGNvbnRpbnVlO1xuMTI5MjpcdFx0XHRpZiAodHJhbnMtXHUwMDNlc3RhdGUgIT0gU0NUUF9VTkNPTkZJUk1FRCkge1xuMTI5MzpcdFx0XHRcdHRyYW5zX25leHQgPSBzY3RwX3RyYW5zX2VsZWN0X2Jlc3QodHJhbnMsIHRyYW5zX25leHQpO1xuMTI5NDpcdFx0XHRcdC8qIEFjdGl2ZSBpcyBnb29kIGVub3VnaCBmb3IgaW1tZWRpYXRlIHJldHVybi4gKi9cbjEyOTU6XHRcdFx0XHRpZiAodHJhbnNfbmV4dC1cdTAwM2VzdGF0ZSA9PSBTQ1RQX0FDVElWRSlcbjEyOTY6XHRcdFx0XHRcdGJyZWFrO1xuMTI5NzpcdFx0XHR9XG4xMjk4Olx0XHRcdC8qIFdlJiMzOTt2ZSByZWFjaGVkIHRoZSBlbmQsIHRpbWUgdG8gdXBkYXRlIHBhdGguICovXG4xMjk5Olx0XHRcdGlmICh0cmFucyA9PSBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGgpXG4xMzAwOlx0XHRcdFx0YnJlYWs7XG4xMzAxOlx0XHR9XG4xMzAyOlx0XG4xMzAzOlx0XHRpZiAodHJhbnNfbmV4dClcbjEzMDQ6XHRcdFx0YXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoID0gdHJhbnNfbmV4dDtcbjEzMDU6XHRcbjEzMDY6XHRcdHByX2RlYnVnKFwmIzM0OyVzOiBhc3NvY2lhdGlvbjolcCB1cGRhdGVkIG5ldyBwYXRoIHRvIGFkZHI6JXBJU3BjXFxuXCYjMzQ7LFxuMTMwNzpcdFx0XHQgX19mdW5jX18sIGFzb2MsIFx1MDAyNmFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aC1cdTAwM2VpcGFkZHIuc2EpO1xuMTMwODpcdH1cbjEzMDk6XHRcbjEzMTA6XHRzdGF0aWMgdm9pZCBzY3RwX3NlbGVjdF9hY3RpdmVfYW5kX3JldHJhbl9wYXRoKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuMTMxMTpcdHtcbjEzMTI6XHRcdHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnMsICp0cmFuc19wcmkgPSBOVUxMLCAqdHJhbnNfc2VjID0gTlVMTDtcbjEzMTM6XHRcdHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNfcGYgPSBOVUxMO1xuMTMxNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDcyCgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDc3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSZWFzb25pbmc6IFNDVFAgUmV0cmFuc21pc3Npb24gUGF0aCBTZWxlY3Rpb24gRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIGxvZ2ljIGZsYXcgaW4gdGhlIFNDVFAgcmV0cmFuc21pc3Npb24gcGF0aCBzZWxlY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHN1YnRsZSBpc3N1ZTogaWYgYWxsIHRyYW5zcG9ydHMgd2VyZSBpbiB0aGUgYFNDVFBfVU5DT05GSVJNRURgIHN0YXRlLCBvciBpZiB3ZSB3ZXJlIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kIHRoZSBjdXJyZW50IHJldHJhbnNtaXNzaW9uIHBhdGggd2FzIGFsc28gdW5jb25maXJtZWQsIHRoZSBvcmlnaW5hbCBsb29wJiMzOTtzIHN0cnVjdHVyZSBjb3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AuIFNwZWNpZmljYWxseSwgdGhlIGBjb250aW51ZWAgc3RhdGVtZW50IGluc2lkZSB0aGUgYFNDVFBfVU5DT05GSVJNRURgIGNoZWNrIHNraXBwZWQgdGhlIGVuZC1vZi1saXN0IGNoZWNrLiBJZiBhbGwgdHJhbnNwb3J0cyBvciB0aGUgY3VycmVudCB0cmFuc3BvcnQgd2FzIGBVTkNPTkZJUk1FRGAsIGl0IGNvdWxkIHJlc3VsdCBpbiBhbiBpbmZpbml0ZSBsb29wIG9yIGEgYE5VTExgIHBvaW50ZXIgZGVyZWZlcmVuY2UgbGF0ZXIuCgpUaGUgcGF0Y2gmIzM5O3Mgc29sdXRpb24gaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCBpbnZlcnRzIHRoZSBjb25kaXRpb25hbCBjaGVjayB0byAqb25seSogZXhlY3V0ZSB0aGUgYHNjdHBfdHJhbnNfZWxlY3RfYmVzdGAgc2VsZWN0aW9uIGFuZCBhY3RpdmUgc3RhdGUgY2hlY2sgKmlmKiB0aGUgdHJhbnNwb3J0IGlzICpub3QqIGBTQ1RQX1VOQ09ORklSTUVEYC4gVGhpcyBlbnN1cmVzIHRoYXQgd2UgcHJvY2VlZCB0byB1cGRhdGUgYHRyYW5zX25leHRgLCB0aGUgY2FuZGlkYXRlIGZvciB0aGUgcmV0cmFuc21pc3Npb24gcGF0aCwgb25seSB3aXRoIHZhbGlkIHRyYW5zcG9ydHMsIGFuZCBhbHNvIHRoYXQgd2UgaGl0IHRoZSBlbmQtb2YtbGlzdCBjaGVjayBhbmQgdXBkYXRlIHRoZSByZXRyYW5zbWlzc2lvbiBwYXRoIGNvcnJlY3RseS4gSXQgYWxzbyBub3cgbWFrZXMgc3VyZSB0aGF0IHdlIGRvbiYjMzk7dCBhc3NpZ24gYE5VTExgIHRvIHRoZSBgcmV0cmFuX3BhdGhgLCB3aGljaCBjb3VsZCByZXN1bHQgaW4gYSBzdWJzZXF1ZW50IGRlcmVmZXJlbmNlLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEtNU0FOLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZSAqbm8qIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSSYjMzk7dmUgZ29uZSBvdmVyIHRoZSBjb2RlIGNhcmVmdWxseS4KCiogICAqKk5vIG5ldyBhbGxvY2F0aW9ucyBvciBzdGFjayB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQuKiogV2UmIzM5O3JlIGp1c3QgbW9kaWZ5aW5nIGV4aXN0aW5nIHBvaW50ZXJzIGFuZCBzdGF0ZS4KKiAgICoqYHRyYW5zX25leHRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5VTExgLioqIFZlcnkgaW1wb3J0YW50LiBUaGlzIHJlbW92ZXMgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCByZWFkcy4KKiAgIGB0cmFuc2AgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgYGFzb2MtJmd0O3BlZXIudHJhbnNwb3J0X2FkZHJfbGlzdGAuIFRoYXQgbGlzdCBpcyBpbml0aWFsaXplZCwgYW5kIGB0cmFuc2AgaXMgYWx3YXlzIHZhbGlkLgoqICAgYHNjdHBfdHJhbnNfZWxlY3RfYmVzdGAgY29tcGFyZXMgZXhpc3RpbmcgdHJhbnNwb3J0IHN0cnVjdHVyZXMuIFRoaXMgaXMgYSBrbm93biBmdW5jdGlvbiwgYW5kIGlzIHNhZmUgZnJvbSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgYGFzb2MtJmd0O3BlZXIucmV0cmFuX3BhdGhgIGlzIG5vdyBvbmx5IHVwZGF0ZWQgaWYgYHRyYW5zX25leHRgIGlzIG5vbi1OVUxMLgoqICAgQ3JpdGljYWxseSwgdGhlcmUgaXMgKipubyoqIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIE5vIGRhdGEgY29waWVkIG9yIGxlYWtlZC4KKiAgIFRoaXMgaXMgYSBwdXJlIGxvZ2ljIGZpeC4KClNvLCBpbiBzaG9ydCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLiBUaGlzIHBhdGNoIHNpbXBseSBmaXhlcyBhIGNvbnRyb2wgZmxvdyBwcm9ibGVtLiBUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgdGhhdCBjb3VsZCByZXN1bHQgaW4gYW4gaW5maW5pdGUgbG9vcCBvciBgTlVMTGAgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgYW4gaW1wb3J0YW50IGNvcnJlY3RuZXNzIGZpeC4gSSYjMzk7bSBjZXJ0YWluIHRoYXQgdGhlIGxvZ2ljIGNoYW5nZSBwcmV2ZW50cyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBTdGFuZGFyZCBzYW5pdGl6ZXJzL0tBU0FOIHdvdWxkIGNhdGNoIGFueSBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsaXN0IGNvcnJ1cHRpb24gYnVncyB0aGF0IG1pZ2h0IGV4aXN0IGVsc2V3aGVyZSwgYnV0IHRoZXkgYXJlIG5vdCByZWxldmFudCB0byB0aGlzIGxvZ2ljIGNoYW5nZSwgYW5kIEkgc2VlIG5vIG5lZWQgdG8gcnVuIEtNU0FOLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvb3AgdGVybWluYXRpb24gYW5kIE5VTEwgcG9pbnRlciBhc3NpZ25tZW50IGlzc3VlIGluIGBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aCgpYCBieSBlbnN1cmluZyB0aGUgbG9vcCB0ZXJtaW5hdGlvbiBjaGVjayAoYHRyYW5zID09IGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aGApIGlzIGV4ZWN1dGVkIGV2ZW4gd2hlbiBhIHRyYW5zcG9ydCBpcyBpbiB0aGUgYFNDVFBfVU5DT05GSVJNRURgIHN0YXRlLCBhbmQgZ3VhcmRpbmcgdGhlIGFzc2lnbm1lbnQgdG8gYGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aGAgd2l0aCBhIG51bGwgY2hlY2suXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcG9pbnRlciB2YWxpZGF0aW9uIGZpeC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBsb2dpYyAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBwb2ludGVyIGFzc2lnbm1lbnQgaXNzdWUgaW4gYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKClgIGJ5IGVuc3VyaW5nIHRoZSBsb29wIHRlcm1pbmF0aW9uIGNoZWNrIChgdHJhbnMgPT0gYXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoYCkgaXMgZXhlY3V0ZWQgZXZlbiB3aGVuIGEgdHJhbnNwb3J0IGlzIGluIHRoZSBgU0NUUF9VTkNPTkZJUk1FRGAgc3RhdGUsIGFuZCBndWFyZGluZyB0aGUgYXNzaWdubWVudCB0byBgYXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoYCB3aXRoIGEgbnVsbCBjaGVjay5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGlzIGEgY29udHJvbCBmbG93IGFuZCBwb2ludGVyIHZhbGlkYXRpb24gZml4LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGxvZ2ljIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBsaXN0IHRyYXZlcnNhbCBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MTozMS4wNTE3MTY0MzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE3NjczMzYzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoXCIsXG4gICAgXCJzY3RwX2Fzc29jX2Nob29zZV9hbHRlcl90cmFuc3BvcnRcIixcbiAgICBcInNjdHBfcmV0cmFuc21pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb29wIHRlcm1pbmF0aW9uIGFuZCBOVUxMIHBvaW50ZXIgYXNzaWdubWVudCBpc3N1ZSBpbiBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoKWAgYnkgZW5zdXJpbmcgdGhlIGxvb3AgdGVybWluYXRpb24gY2hlY2sgKGB0cmFucyA9PSBhc29jLVxcdTAwM2VwZWVyLnJldHJhbl9wYXRoYCkgaXMgZXhlY3V0ZWQgZXZlbiB3aGVuIGEgdHJhbnNwb3J0IGlzIGluIHRoZSBgU0NUUF9VTkNPTkZJUk1FRGAgc3RhdGUsIGFuZCBndWFyZGluZyB0aGUgYXNzaWdubWVudCB0byBgYXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aGAgd2l0aCBhIG51bGwgY2hlY2suXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGlzIGEgY29udHJvbCBmbG93IGFuZCBwb2ludGVyIHZhbGlkYXRpb24gZml4LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGxvZ2ljIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBsaXN0IHRyYXZlcnNhbCBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBkZXJlZmVyZW5jZSBidWcgaW4gU0NUUCB0cmFuc3BvcnQgcmV0cmFuc21pc3Npb24gcGF0aCBzZWxlY3Rpb24gKHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKS4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gbmV0L3NjdHAgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MTozMS4wNTE3MjE5OTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Njc5MTEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg4Y2M4MDRkN2QyYjJiOWZkYWUxMzNmNWRmYzBiMzdhNTgwZjYwMjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAxNDo0MTozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hc3NvY2lvbGEuYyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jXFxuaW5kZXggYzA1MTJjODI3ZDBmNS4uNDUyMWJlM2JkODVhYSAxMDA2NDRcXG4tLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuY1xcbisrKyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jXFxuQEAgLTEyODksMTggKzEyODksMTkgQEAgdm9pZCBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcXG4gXFx0XFx0LyogTWFudWFsbHkgc2tpcCB0aGUgaGVhZCBlbGVtZW50LiAqL1xcbiBcXHRcXHRpZiAoXFx1MDAyNnRyYW5zLVxcdTAwM2V0cmFuc3BvcnRzID09IFxcdTAwMjZhc29jLVxcdTAwM2VwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAodHJhbnMtXFx1MDAzZXN0YXRlID09IFNDVFBfVU5DT05GSVJNRUQpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR0cmFuc19uZXh0ID0gc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFuc19uZXh0KTtcXG4tXFx0XFx0LyogQWN0aXZlIGlzIGdvb2QgZW5vdWdoIGZvciBpbW1lZGlhdGUgcmV0dXJuLiAqL1xcbi1cXHRcXHRpZiAodHJhbnNfbmV4dC1cXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAodHJhbnMtXFx1MDAzZXN0YXRlICE9IFNDVFBfVU5DT05GSVJNRUQpIHtcXG4rXFx0XFx0XFx0dHJhbnNfbmV4dCA9IHNjdHBfdHJhbnNfZWxlY3RfYmVzdCh0cmFucywgdHJhbnNfbmV4dCk7XFxuK1xcdFxcdFxcdC8qIEFjdGl2ZSBpcyBnb29kIGVub3VnaCBmb3IgaW1tZWRpYXRlIHJldHVybi4gKi9cXG4rXFx0XFx0XFx0aWYgKHRyYW5zX25leHQtXFx1MDAzZXN0YXRlID09IFNDVFBfQUNUSVZFKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbiBcXHRcXHQvKiBXZSd2ZSByZWFjaGVkIHRoZSBlbmQsIHRpbWUgdG8gdXBkYXRlIHBhdGguICovXFxuIFxcdFxcdGlmICh0cmFucyA9PSBhc29jLVxcdTAwM2VwZWVyLnJldHJhbl9wYXRoKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4tXFx0YXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7XFxuK1xcdGlmICh0cmFuc19uZXh0KVxcbitcXHRcXHRhc29jLVxcdTAwM2VwZWVyLnJldHJhbl9wYXRoID0gdHJhbnNfbmV4dDtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCIlczogYXNzb2NpYXRpb246JXAgdXBkYXRlZCBuZXcgcGF0aCB0byBhZGRyOiVwSVNwY1xcXFxuXFxcIixcXG4gXFx0XFx0IF9fZnVuY19fLCBhc29jLCBcXHUwMDI2YXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aC1cXHUwMDNlaXBhZGRyLnNhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6NDE6MzEuNDk5Mjc3NDU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMDYyMDQxNzc2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoXCIsXG4gICAgXCJzY3RwX2Fzc29jX2Nob29zZV9hbHRlcl90cmFuc3BvcnRcIixcbiAgICBcInNjdHBfcmV0cmFuc21pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBkZXJlZmVyZW5jZSBidWcgaW4gU0NUUCB0cmFuc3BvcnQgcmV0cmFuc21pc3Npb24gcGF0aCBzZWxlY3Rpb24gKHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKS4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gbmV0L3NjdHAgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OGNjODA0ZDdkMmIyYjlmZGFlMTMzZjVkZmMwYjM3YTU4MGY2MDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNDo0MTozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2Fzc29jaW9sYS5jIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmNcbmluZGV4IGMwNTEyYzgyN2QwZjUuLjQ1MjFiZTNiZDg1YWEgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuY1xuKysrIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmNcbkBAIC0xMjg5LDE4ICsxMjg5LDE5IEBAIHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4gXHRcdC8qIE1hbnVhbGx5IHNraXAgdGhlIGhlYWQgZWxlbWVudC4gKi9cbiBcdFx0aWYgKFx1MDAyNnRyYW5zLVx1MDAzZXRyYW5zcG9ydHMgPT0gXHUwMDI2YXNvYy1cdTAwM2VwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICh0cmFucy1cdTAwM2VzdGF0ZSA9PSBTQ1RQX1VOQ09ORklSTUVEKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR0cmFuc19uZXh0ID0gc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFuc19uZXh0KTtcbi1cdFx0LyogQWN0aXZlIGlzIGdvb2QgZW5vdWdoIGZvciBpbW1lZGlhdGUgcmV0dXJuLiAqL1xuLVx0XHRpZiAodHJhbnNfbmV4dC1cdTAwM2VzdGF0ZSA9PSBTQ1RQX0FDVElWRSlcbi1cdFx0XHRicmVhaztcbitcdFx0aWYgKHRyYW5zLVx1MDAzZXN0YXRlICE9IFNDVFBfVU5DT05GSVJNRUQpIHtcbitcdFx0XHR0cmFuc19uZXh0ID0gc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFuc19uZXh0KTtcbitcdFx0XHQvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovXG4rXHRcdFx0aWYgKHRyYW5zX25leHQtXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0XHQvKiBXZSd2ZSByZWFjaGVkIHRoZSBlbmQsIHRpbWUgdG8gdXBkYXRlIHBhdGguICovXG4gXHRcdGlmICh0cmFucyA9PSBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGgpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGggPSB0cmFuc19uZXh0O1xuK1x0aWYgKHRyYW5zX25leHQpXG4rXHRcdGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7XG4gXG4gXHRwcl9kZWJ1ZyhcIiVzOiBhc3NvY2lhdGlvbjolcCB1cGRhdGVkIG5ldyBwYXRoIHRvIGFkZHI6JXBJU3BjXFxuXCIsXG4gXHRcdCBfX2Z1bmNfXywgYXNvYywgXHUwMDI2YXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoLVx1MDAzZWlwYWRkci5zYSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MTozMS40OTkyNzg4NDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzIyODI0NTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNDVFAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYG5ldC9zY3RwL2Fzc29jaW9sYS5jYCwgcGFydGljdWxhcmx5IHRoZSBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoKWAgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBjaGFuZ2luZyB0aGVyZS4gQW5kIHNpbmNlIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgY29uZmlndXJhdGlvbiwgSSdsbCB0YWtlIGEgbG9vayBhdCBgbmV0L3NjdHAvS2NvbmZpZ2AgYXMgd2VsbCwganVzdCBpbiBjYXNlIHRoZXJlIGFyZSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi5cblxuVG8gZ2V0IHRoZSBtb3N0IHJlbGV2YW50IGNvbnRleHQgYXJvdW5kIHRoZSBjb2RlIGNoYW5nZXMsIEknbGwgdXNlIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gemVybyBpbiBvbiBsaW5lIDEyODkgaW4gYG5ldC9zY3RwL2Fzc29jaW9sYS5jYC4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY29kZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIHRoaXMgbW9kaWZpY2F0aW9uLiBUaGlzIGFwcHJvYWNoIHdpbGwgYWxsb3cgbWUgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaCB3aXRoaW4gdGhlIGJyb2FkZXIgZnVuY3Rpb24gbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MjozNC43Mjc1Mjg1NzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvYXNzb2Npb2xhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI3MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI3MDpcXHRcXG4xMjcxOlxcdHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuMTI3MjpcXHR7XFxuMTI3MzpcXHRcXHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zID0gYXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aDtcXG4xMjc0OlxcdFxcdHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNfbmV4dCA9IE5VTEw7XFxuMTI3NTpcXHRcXG4xMjc2OlxcdFxcdC8qIFdlJ3JlIGRvbmUgYXMgd2Ugb25seSBoYXZlIHRoZSBvbmUgYW5kIG9ubHkgcGF0aC4gKi9cXG4xMjc3OlxcdFxcdGlmIChhc29jLVxcdTAwM2VwZWVyLnRyYW5zcG9ydF9jb3VudCA9PSAxKVxcbjEyNzg6XFx0XFx0XFx0cmV0dXJuO1xcbjEyNzk6XFx0XFx0LyogSWYgYWN0aXZlX3BhdGggYW5kIHJldHJhbl9wYXRoIGFyZSB0aGUgc2FtZSBhbmQgYWN0aXZlLFxcbjEyODA6XFx0XFx0ICogdGhlbiB0aGlzIGlzIHRoZSBvbmx5IGFjdGl2ZSBwYXRoLiBVc2UgaXQuXFxuMTI4MTpcXHRcXHQgKi9cXG4xMjgyOlxcdFxcdGlmIChhc29jLVxcdTAwM2VwZWVyLmFjdGl2ZV9wYXRoID09IGFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGggXFx1MDAyNlxcdTAwMjZcXG4xMjgzOlxcdFxcdCAgICBhc29jLVxcdTAwM2VwZWVyLmFjdGl2ZV9wYXRoLVxcdTAwM2VzdGF0ZSA9PSBTQ1RQX0FDVElWRSlcXG4xMjg0OlxcdFxcdFxcdHJldHVybjtcXG4xMjg1OlxcdFxcbjEyODY6XFx0XFx0LyogSXRlcmF0ZSBmcm9tIHJldHJhbl9wYXRoJ3Mgc3VjY2Vzc29yIGJhY2sgdG8gcmV0cmFuX3BhdGguICovXFxuMTI4NzpcXHRcXHRmb3IgKHRyYW5zID0gbGlzdF9uZXh0X2VudHJ5KHRyYW5zLCB0cmFuc3BvcnRzKTsgMTtcXG4xMjg4OlxcdFxcdCAgICAgdHJhbnMgPSBsaXN0X25leHRfZW50cnkodHJhbnMsIHRyYW5zcG9ydHMpKSB7XFxuMTI4OTpcXHRcXHRcXHQvKiBNYW51YWxseSBza2lwIHRoZSBoZWFkIGVsZW1lbnQuICovXFxuMTI5MDpcXHRcXHRcXHRpZiAoXFx1MDAyNnRyYW5zLVxcdTAwM2V0cmFuc3BvcnRzID09IFxcdTAwMjZhc29jLVxcdTAwM2VwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpXFxuMTI5MTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjkyOlxcdFxcdFxcdGlmICh0cmFucy1cXHUwMDNlc3RhdGUgIT0gU0NUUF9VTkNPTkZJUk1FRCkge1xcbjEyOTM6XFx0XFx0XFx0XFx0dHJhbnNfbmV4dCA9IHNjdHBfdHJhbnNfZWxlY3RfYmVzdCh0cmFucywgdHJhbnNfbmV4dCk7XFxuMTI5NDpcXHRcXHRcXHRcXHQvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovXFxuMTI5NTpcXHRcXHRcXHRcXHRpZiAodHJhbnNfbmV4dC1cXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXFxuMTI5NjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMjk3OlxcdFxcdFxcdH1cXG4xMjk4OlxcdFxcdFxcdC8qIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCwgdGltZSB0byB1cGRhdGUgcGF0aC4gKi9cXG4xMjk5OlxcdFxcdFxcdGlmICh0cmFucyA9PSBhc29jLVxcdTAwM2VwZWVyLnJldHJhbl9wYXRoKVxcbjEzMDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTMwMTpcXHRcXHR9XFxuMTMwMjpcXHRcXG4xMzAzOlxcdFxcdGlmICh0cmFuc19uZXh0KVxcbjEzMDQ6XFx0XFx0XFx0YXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7XFxuMTMwNTpcXHRcXG4xMzA2OlxcdFxcdHByX2RlYnVnKFxcXCIlczogYXNzb2NpYXRpb246JXAgdXBkYXRlZCBuZXcgcGF0aCB0byBhZGRyOiVwSVNwY1xcXFxuXFxcIixcXG4xMzA3OlxcdFxcdFxcdCBfX2Z1bmNfXywgYXNvYywgXFx1MDAyNmFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGgtXFx1MDAzZWlwYWRkci5zYSk7XFxuMTMwODpcXHR9XFxuMTMwOTpcXHRcXG4xMzEwOlxcdHN0YXRpYyB2b2lkIHNjdHBfc2VsZWN0X2FjdGl2ZV9hbmRfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuMTMxMTpcXHR7XFxuMTMxMjpcXHRcXHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zLCAqdHJhbnNfcHJpID0gTlVMTCwgKnRyYW5zX3NlYyA9IE5VTEw7XFxuMTMxMzpcXHRcXHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zX3BmID0gTlVMTDtcXG4xMzE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MjozNC43Mjc2NDc1MDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDUwMDE2Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJldHJhbnNtaXNzaW9uIFBhdGggQnVnIGluIFNDVFAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoYCBhZGRyZXNzZXMgYSBuYXN0eSBmbGF3LiBBcHBhcmVudGx5LCB0aGVyZSdzIGEgc2NlbmFyaW8gd2hlcmUgYGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aGAg4oCTIHdoaWNoIEkgcmVjb2duaXplIGFzIHRoZSByZXRyYW5zbWlzc2lvbiBwYXRoIGZvciBhbiBTQ1RQIGFzc29jaWF0aW9uIOKAkyBjb3VsZCBlbmQgdXAgcG9pbnRpbmcgdG8gYE5VTExgLiBPciwgZXZlbiB3b3JzZSwgaWYgYWxsIHRoZSB0cmFuc3BvcnRzIGFyZSBpbiBhbiBgU0NUUF9VTkNPTkZJUk1FRGAgc3RhdGUsIGB0cmFuc19uZXh0YCBjb3VsZCBiZSBgTlVMTGAuXG5cblRoZSByb290IG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIGEgc3VidGxlIGxvZ2ljIGVycm9yIGluIHRoZSBvcmlnaW5hbCBjb2RlLiBJIHNlZSBpdCBub3c6IHRoZSBjb25kaXRpb25hbCBgaWYgKHRyYW5zLVx1MDAzZXN0YXRlID09IFNDVFBfVU5DT05GSVJNRUQpIGNvbnRpbnVlO2AgZm9sbG93ZWQgYnkgYGlmICh0cmFucyA9PSBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGgpIGJyZWFrO2AgLSB3YWl0IGEgbWludXRlISBJZiBgdHJhbnNgICppcyogdGhlIHJldHJhbnNtaXNzaW9uIHBhdGggKmFuZCogaXQncyBgU0NUUF9VTkNPTkZJUk1FRGAsIHRoYXQgYGNvbnRpbnVlYCBzdGF0ZW1lbnQgd291bGQgc2tpcCB0aGUgYGJyZWFrYCBjb25kaXRpb24sIGxlYWRpbmcgdG8gYW4gaW5maW5pdGUgbG9vcCEgQW5kIGV2ZW4gd29yc2UsIGlmIGB0cmFuc19uZXh0YCBpcyBgTlVMTGAgaXQgY291bGQgY2F1c2UgYSBuYXN0eSBOVUxMIGRlcmVmZXJlbmNlIGxhdGVyIG9uIGF0IGBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGggPSB0cmFuc19uZXh0YCEgVGhhdCdzIGEgY2xhc3NpYyBtaXN0YWtlLiBJJ3ZlIGJlZW4gdGhlcmUgbXlzZWxmLiBBbmQgaXQgY291bGQgdGhlbiBjYXVzZSBhbm90aGVyIE5VTEwgZGVyZWZlcmVuY2UgYnkgdHJ5aW5nIHRvIGFjY2VzcyBzb21ldGhpbmcgbGlrZSBgYXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoLVx1MDAzZWlwYWRkci5zYWAgaW4gc29tZXRoaW5nIGxpa2UgYSBgcHJfZGVidWdgLiBVZ2guXG5cbk5vdywgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LCBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoYCBpcyBhY3R1YWxseSBjYWxsZWQuIEdvdHRhIGNoZWNrIHRoZSBjYWxsIHNpdGVzIHRocm91Z2hvdXQgdGhlIFNDVFAgY29kZWJhc2UgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZWFsLXdvcmxkIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDY1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6NDI6MzguMTc3NjY4Mjc0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODc4NTE5NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmg9MjExNz1zdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydChcXG5pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaC0yMTE4LVxcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqKTtcXG5pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaDoyMTE5OnZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7XFxuaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgtMjEyMC1zdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnNjdHBfYXNzb2NfbG9va3VwX3BhZGRyKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosXFxuLS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYz00ODI9dm9pZCBzY3RwX2Fzc29jX3JtX3BlZXIoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYy00OTUtXFx0aWYgKGFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGggPT0gcGVlcilcXG5uZXQvc2N0cC9hc3NvY2lvbGEuYzo0OTY6XFx0XFx0c2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoYXNvYyk7XFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtNDk3LVxcbi0tXFxubmV0L3NjdHAvYXNzb2Npb2xhLmM9MTI0OD1zdGF0aWMgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpzY3RwX3RyYW5zX2VsZWN0X2Jlc3Qoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpjdXJyLFxcbi0tXFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtMTI3MC1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYzoxMjcxOnZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtMTI3Mi17XFxuLS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYz0xMzc4PXNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTEzODgtXFx0XFx0aWYgKGxhc3Rfc2VudF90byA9PSBhc29jLVxcdTAwM2VwZWVyLnJldHJhbl9wYXRoKVxcbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjEzODk6XFx0XFx0XFx0c2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoYXNvYyk7XFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtMTM5MC1cXG4tLVxcbm5ldC9zY3RwL291dHF1ZXVlLmM9NTM3PXZvaWQgc2N0cF9yZXRyYW5zbWl0KHN0cnVjdCBzY3RwX291dHEgKnEsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxcbi0tXFxubmV0L3NjdHAvb3V0cXVldWUuYy01NDktXFx0XFx0aWYgKHRyYW5zcG9ydCA9PSB0cmFuc3BvcnQtXFx1MDAzZWFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGgpXFxubmV0L3NjdHAvb3V0cXVldWUuYzo1NTA6XFx0XFx0XFx0c2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgodHJhbnNwb3J0LVxcdTAwM2Vhc29jKTtcXG5uZXQvc2N0cC9vdXRxdWV1ZS5jLTU1MS1cXHRcXHR0cmFuc3BvcnQtXFx1MDAzZWFzb2MtXFx1MDAzZXJ0eF9kYXRhX2NodW5rcyArPVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0Mjo0MC4zNjU1MjcxOTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjk2MzkxNjMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFNDVFAgTGFuZHNjYXBlOiBBIEtjb25maWcgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gbWFrZSBzdXJlIFNDVFAgaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBmaWxlcy4gSXQncyB0aGUgZmlyc3Qgc3RlcCBpbiBlbnN1cmluZyBhIHJlbGlhYmxlIFNDVFAgaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgZW5hYmxlZCwgY29uc2lkZXJpbmcgYW55IGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgZmVhdHVyZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSB1c2VyLXNwYWNlIHZzLiBrZXJuZWwtc3BhY2UgYXNwZWN0cy4gQXJlIHRoZSBuZWNlc3NhcnkgU0NUUCBtb2R1bGVzIGJlaW5nIGJ1aWx0PyBJcyB0aGUgc3RhY2sgaW50ZWdyYXRlZCBwcm9wZXJseT8gQSB0aG9yb3VnaCBzY2FuIG9mIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgd2lsbCBxdWlja2x5IGNsYXJpZnkgdGhlIHN5c3RlbSdzIGN1cnJlbnQgc3RhbmNlIG9uIFNDVFAgc3VwcG9ydCBhbmQgdW5jb3ZlciBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gaXNzdWVzLCBiZWZvcmUgSSBzdGFydCBpbnRlZ3JhdGluZyBhbnl0aGluZyBuZXcuIFRoaXMgcHJlbGltaW5hcnkgY2hlY2sgc2hvdWxkIHByb3ZpZGUgYSByZWxpYWJsZSBiYXNpcyBmb3IgcHJvY2VlZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgxOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjQyOjUzLjMyOTQ0NjA3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODAzNDEwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfU0NUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9LY29uZmlnLTUtXFxubmV0L3NjdHAvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBfU0NUUFxcbm5ldC9zY3RwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVGhlIFNDVFAgUHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjQyOjUzLjM3NzQ5MTE2NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1MzA0MTMwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBuZXQvc2N0cC9LY29uZmlnYCBmaWxlOlxuXG4qKkFuYWx5emluZyB0aGUgU0NUUCBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvc2N0cC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFNDVFAgKFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgYXJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBLY29uZmlnIGNvbnZlbnRpb25zIGhlcmUg4oCTIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSwgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzLiBUaGUgZ29hbCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvcHRpb25zIGNvbnRyb2wgU0NUUCdzIGZlYXR1cmVzLCBhbmQgaG93IHRoZXkgaW1wYWN0IHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqQ29yZSBFbmFibGVtZW50OioqIFRoZSB0b3AtbGV2ZWwgb3B0aW9uIHRvIGVuYWJsZSBvciBkaXNhYmxlIFNDVFAgZW50aXJlbHkuXG4qICAgKipGZWF0dXJlIEZsYWdzOioqIEluZGl2aWR1YWwgb3B0aW9ucyBjb250cm9sbGluZyBzcGVjaWZpYyBTQ1RQIGZlYXR1cmVzIGxpa2UgbXVsdGktaG9taW5nLCBkeW5hbWljIGFkZHJlc3MgY29uZmlndXJhdGlvbiwgc3RyZWFtIHNlcXVlbmNpbmcsIGFuZCBhbnkgZXh0ZW5zaW9ucyBsaWtlIEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uIChFQ04pIHN1cHBvcnQsIG9yIFVzZXIgRGF0YWdyYW0gUHJvdG9jb2wgKFVEUCkgZW5jYXBzdWxhdGlvbi5cbiogICAqKkRlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIGZlYXR1cmVzIGRvZXMgU0NUUCBkZXBlbmQgb24/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMgb24sIHNheSwgbmV0d29ya2luZyBzdGFjayBjb21wb25lbnRzIG9yIHNlY3VyaXR5IGZlYXR1cmVzPyBBbmQgd2hhdCBhYm91dCBidWlsZCBkZXBlbmRlbmNpZXMsIG1ha2luZyBzdXJlIGFsbCB0aGUgbmVlZGVkIG1vZHVsZXMgYXJlIGJ1aWx0LlxuKiAgICoqRGVmYXVsdCBWYWx1ZXM6KiogVW5kZXJzdGFuZGluZyB0aGUgZGVmYXVsdCBzZXR0aW5ncyBpcyBjcnVjaWFsLiBBcmUgdGhleSBzZW5zaWJsZSBmb3IgZ2VuZXJhbCB1c2UsIG9yIGFyZSB0aGVyZSBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgSSBtaWdodCBuZWVkIHRvIGFkanVzdCB0aGVtPyBPZnRlbiB0aGUgZGVmYXVsdCBmb3IgbW9kdWxlcyBpcyBgbWAsIHNvIHRoZXkncmUgYnVpbHQgYXMgbG9hZGFibGUgbW9kdWxlcy5cbiogICAqKkhlbHAgVGV4dDoqKiBUaGlzIHNob3VsZCBwcm92aWRlIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgZWFjaCBvcHRpb24uIFRoZSBoZWxwIHRleHQncyBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIGFyZSBrZXkgaW5kaWNhdG9ycyBvZiB0aGUgcXVhbGl0eSBvZiB0aGUgS2NvbmZpZyBmaWxlIGl0c2VsZi4gSSdsbCBiZSBjb21wYXJpbmcgaXQgdG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi5cbiogICAqKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uOioqIEknbGwgYmUgbG9va2luZyBmb3IgYW55IG9wdGlvbnMgdGhhdCBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBDUFUsIG9yIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhhdCBtaWdodCBpbmZsdWVuY2UgaXRzIGltcGFjdCBvbiBwb3dlci5cbiogICAqKlNlY3VyaXR5IENvbnNpZGVyYXRpb25zOioqIEhhcyB0aGUgS2NvbmZpZyBmaWxlIGFkZHJlc3NlZCBzZWN1cml0eS1yZWxhdGVkIGFzcGVjdHM/IEFyZSB0aGVyZSBvcHRpb25zIHJlbGF0ZWQgdG8gSVBzZWMsIFRMUywgb3IgYW55IGhhcmRlbmluZyBmZWF0dXJlcz8gQXJlIHRoZXJlIGFueSBvcHRpb25zIHRvIHN1cHBvcnQgaGFyZGVuaW5nLCBvciBkaXNhYmxpbmcgZnVuY3Rpb25zIHRvIHJlZHVjZSB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cblVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgbWVudGFsIHBpY3R1cmUgb2YgaG93IFNDVFAgaXMgY29uZmlndXJlZCBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgTGludXgga2VybmVsIG5ldHdvcmtpbmcgZnJhbWV3b3JrLiBJJ2xsIGJlIG5vdGluZyBhbnkgYXJlYXMgdGhhdCBhcmUgdW5jbGVhciwgb3IgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgaW1wcm92ZW1lbnRzIHRoYXQgSSBjYW4gaWRlbnRpZnkgYXMgSSBnbyB0aHJvdWdoIHRoZSBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTE4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6NDI6NTguOTA3OTA2NDk2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczOTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY3RwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgU0NUUCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgSVBfU0NUUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBTQ1RQIFByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4gIDExOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXFxuICAxMjpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTM6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIEZyb20gUkZDIDI5NjAgXFx1MDAzY2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI5NjAudHh0XFx1MDAzZS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBcXFwiU0NUUCBpcyBhIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2NvbCBvcGVyYXRpbmcgb24gdG9wIG9mIGFcXG4gIDIwOlxcdFxcdCAgY29ubmVjdGlvbmxlc3MgcGFja2V0IG5ldHdvcmsgc3VjaCBhcyBJUC4gIEl0IG9mZmVycyB0aGUgZm9sbG93aW5nXFxuICAyMTpcXHRcXHQgIHNlcnZpY2VzIHRvIGl0cyB1c2VyczpcXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0ICAtLSBhY2tub3dsZWRnZWQgZXJyb3ItZnJlZSBub24tZHVwbGljYXRlZCB0cmFuc2ZlciBvZiB1c2VyIGRhdGEsXFxuICAyNDpcXHRcXHQgIC0tIGRhdGEgZnJhZ21lbnRhdGlvbiB0byBjb25mb3JtIHRvIGRpc2NvdmVyZWQgcGF0aCBNVFUgc2l6ZSxcXG4gIDI1OlxcdFxcdCAgLS0gc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIHVzZXIgbWVzc2FnZXMgd2l0aGluIG11bHRpcGxlIHN0cmVhbXMsXFxuICAyNjpcXHRcXHQgIHdpdGggYW4gb3B0aW9uIGZvciBvcmRlci1vZi1hcnJpdmFsIGRlbGl2ZXJ5IG9mIGluZGl2aWR1YWwgdXNlclxcbiAgMjc6XFx0XFx0ICBtZXNzYWdlcyxcXG4gIDI4OlxcdFxcdCAgLS0gb3B0aW9uYWwgYnVuZGxpbmcgb2YgbXVsdGlwbGUgdXNlciBtZXNzYWdlcyBpbnRvIGEgc2luZ2xlIFNDVFBcXG4gIDI5OlxcdFxcdCAgcGFja2V0LCBhbmRcXG4gIDMwOlxcdFxcdCAgLS0gbmV0d29yay1sZXZlbCBmYXVsdCB0b2xlcmFuY2UgdGhyb3VnaCBzdXBwb3J0aW5nIG9mIG11bHRpLVxcbiAgMzE6XFx0XFx0ICBob21pbmcgYXQgZWl0aGVyIG9yIGJvdGggZW5kcyBvZiBhbiBhc3NvY2lhdGlvbi5cXFwiXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIHByb3RvY29sIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMzQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2N0cC4gRGVidWcgbWVzc2FnZXMgYXJlIGhhbmRsZWQgYnkgdGhlXFxuICAzNTpcXHRcXHQgIGtlcm5lbCdzIGR5bmFtaWMgZGVidWdnaW5nIGZyYW1ld29yay5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXFxuICAzODpcXHRcXG4gIDM5OlxcdGlmIElQX1NDVFBcXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0Mjo1OC45MDc5ODI4ODVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEyMzU1NTI3NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgYG5ldC9zY3RwL01ha2VmaWxlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBhc3NvY2lvbGEuY2AgZ2V0cyBwcm9wZXJseSBjb21waWxlZCB3aGVuZXZlciBgQ09ORklHX0lQX1NDVFBgIGlzIGVuYWJsZWQuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwLCBhbmQgaWYgdGhhdCBkb2Vzbid0IGhhcHBlbiwgd2UncmUgZ29pbmcgdG8gaGF2ZSBzb21lIHJlYWwgcHJvYmxlbXMuIFRoaXMgaXMgYSBjcml0aWNhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgYW5kIG5lZWRzIHRvIGJlIHZlcmlmaWVkLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIGFsbCBzcXVhcmVkIGF3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjQzOjEwLjE0MzUzODI0OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MTI2MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXNzb2Npb2xhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL01ha2VmaWxlPTk9c2N0cC15IDo9IHNtX3N0YXRldGFibGUubyBzbV9zdGF0ZWZ1bnMubyBzbV9zaWRlZWZmZWN0Lm8gXFxcXFxcbm5ldC9zY3RwL01ha2VmaWxlOjEwOlxcdCAgcHJvdG9jb2wubyBlbmRwb2ludG9sYS5vIGFzc29jaW9sYS5vIFxcXFxcXG5uZXQvc2N0cC9NYWtlZmlsZS0xMS1cXHQgIHRyYW5zcG9ydC5vIGNodW5rLm8gc21fbWFrZV9jaHVuay5vIHVscGV2ZW50Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MzoxMC4xODk0NTc0NDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQyNzg0NzE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBJUF9TQ1RQKipcblxuT2theSwgbGV0J3MgYXNzZXNzIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBoZXJlLiBgSVBfU0NUUGAgZGVwZW5kcyBvbiBgSU5FVGAsIGFuZCBteSBpbml0aWFsIGluc3RpbmN0IHNheXMgeWVzLCB0aGlzIGlzIGEgdGFyZ2V0IHdvcnRoIHB1cnN1aW5nLiBTQ1RQIGlzIGEgZnVuZGFtZW50YWwgbmV0d29ya2luZyBwcm90b2NvbCwgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc29ja2V0cyB1c2luZyBgQUZfSU5FVGAsIGBTT0NLX1NFUVBBQ0tFVGAsIG9yIGBTT0NLX1NUUkVBTWAsIGFuZCBgSVBQUk9UT19TQ1RQYC4gSW1wb3J0YW50bHksIHN5emthbGxlciBoZWF2aWx5IHV0aWxpemVzIGl0LCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGluZGljYXRvci5cblxuVGhpcyBwYXJ0aWN1bGFyIHBhdGNoIGFkZHJlc3NlcyBhbiBpbmZpbml0ZSBsb29wL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aXRoaW4gYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKClgLiBUaW1lIHRvIGV4YW1pbmUgdGhhdCBmdW5jdGlvbiBtb3JlIGNsb3NlbHkuIEl0J3MgYSBub24tc3RhdGljLCBleHBvcnRlZCBmdW5jdGlvbjogYHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpYC4gSSBzaG91bGQgYWxzbyBsb29rIGF0IG90aGVyIHJlbGV2YW50IGVudHJ5cG9pbnRzOyB0aGUgY2FsbGVycyBhcmUgYHNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydGAsIGBzY3RwX3JldHJhbnNtaXRgLCBhbmQgYHNjdHBfYXNzb2Nfcm1fcGVlcmAuXG5cbk5vdywgSSdsbCBxdWlja2x5IGNoZWNrIGBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aGAgaW4gYEZvY3VzU3ltYm9sc2AsIGFuZCB0aGVuIEknbGwgbWFrZSBzdXJlIHRob3NlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBhcmUgYWxzbyBvbiB0aGUgbGlzdDogYHNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydGAgYW5kIGBzY3RwX3JldHJhbnNtaXRgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEl0IGxvb2tzIGxpa2Ugd2UgbmVlZCBgSVBfU0NUUGAgKHdoaWNoLCBhcyBleHBlY3RlZCwgZGVwZW5kcyBvbiBgSU5FVGApLiBMZXQncyBlbnN1cmUgdGhvc2UgY29uZmlncyBhcmUgZW5hYmxlZC5cblxuT2theSwgbGV0J3MgcnVuIGEgZmluYWwgZG91YmxlLWNoZWNrIG9mIGV2ZXJ5dGhpbmcgYW5kIGZpbGwgaW4gdGhlIHNldC1yZXN1bHRzIHRvb2wuXG5cbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZSDigJMgVGhpcyBmaXhlcyBhIGNyaXRpY2FsIHZ1bG5lcmFiaWxpdHksIGFuIGluZmluaXRlIGxvb3AvTlVMTCBkZXJlZmVyZW5jZSwgd2l0aGluIGFuIFNDVFAgYXNzb2NpYXRpb24gdHJhbnNwb3J0IGl0ZXJhdGlvbi4gU0NUUCBpcyBhIHZpYWJsZSB0YXJnZXQgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cHMuXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGFuIGluZmluaXRlIGxvb3AvTlVMTCBkZXJlZmVyZW5jZSBpbiBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGhgIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggYXNzb2NpYXRpb24gdHJhbnNwb3J0cy4gU0NUUCBpcyBmdWxseSBzdXBwb3J0ZWQgYW5kIGNhbiBiZSB0YXJnZXRlZCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiSVBfU0NUUFwiLCBcIklORVRcIl1gIOKAkyBUaGVzZSBhcmUgdGhlIG5lY2Vzc2FyeSBwcmVyZXF1aXNpdGVzLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wic2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGhcIiwgXCJzY3RwX2Fzc29jX2Nob29zZV9hbHRlcl90cmFuc3BvcnRcIiwgXCJzY3RwX3JldHJhbnNtaXRcIl1gIOKAkyBjb3ZlcmluZyB0aGUgdnVsbmVyYWJsZSBmdW5jdGlvbiBhbmQgcG90ZW50aWFsbHkgcmVsZXZhbnQgZW50cnlwb2ludHMuXG5cbkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTIsIk91dHB1dFRva2VucyI6MTMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjQzOjE3LjYxNzMwNzA3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTQzNTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGhcIixcbiAgICBcInNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydFwiLFxuICAgIFwic2N0cF9yZXRyYW5zbWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb29wIHRlcm1pbmF0aW9uIGFuZCBOVUxMIGRlcmVmZXJlbmNlIGJ1ZyBpbiBTQ1RQIHRyYW5zcG9ydCByZXRyYW5zbWlzc2lvbiBwYXRoIHNlbGVjdGlvbiAoc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgpLiBUaGUgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbCBsb2dpYyBpbiBuZXQvc2N0cCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoXCIsXG4gICAgXCJzY3RwX2Fzc29jX2Nob29zZV9hbHRlcl90cmFuc3BvcnRcIixcbiAgICBcInNjdHBfcmV0cmFuc21pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBkZXJlZmVyZW5jZSBidWcgaW4gU0NUUCB0cmFuc3BvcnQgcmV0cmFuc21pc3Npb24gcGF0aCBzZWxlY3Rpb24gKHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKS4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gbmV0L3NjdHAgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MzoxNy43MDM0NjIxNzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MTE1NTc4NTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6NDM6MTcuNzA0MDY0NDUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzUxMTQ5NzI2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBwb2ludGVyIGFzc2lnbm1lbnQgaXNzdWUgaW4gYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKClgIGJ5IGVuc3VyaW5nIHRoZSBsb29wIHRlcm1pbmF0aW9uIGNoZWNrIChgdHJhbnMgPT0gYXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aGApIGlzIGV4ZWN1dGVkIGV2ZW4gd2hlbiBhIHRyYW5zcG9ydCBpcyBpbiB0aGUgYFNDVFBfVU5DT05GSVJNRURgIHN0YXRlLCBhbmQgZ3VhcmRpbmcgdGhlIGFzc2lnbm1lbnQgdG8gYGFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGhgIHdpdGggYSBudWxsIGNoZWNrLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcG9pbnRlciB2YWxpZGF0aW9uIGZpeC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBsb2dpYyAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OGNjODA0ZDdkMmIyYjlmZGFlMTMzZjVkZmMwYjM3YTU4MGY2MDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNDo0MTozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2Fzc29jaW9sYS5jIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmNcbmluZGV4IGMwNTEyYzgyN2QwZjUuLjQ1MjFiZTNiZDg1YWEgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuY1xuKysrIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmNcbkBAIC0xMjg5LDE4ICsxMjg5LDE5IEBAIHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4gXHRcdC8qIE1hbnVhbGx5IHNraXAgdGhlIGhlYWQgZWxlbWVudC4gKi9cbiBcdFx0aWYgKFx1MDAyNnRyYW5zLVx1MDAzZXRyYW5zcG9ydHMgPT0gXHUwMDI2YXNvYy1cdTAwM2VwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICh0cmFucy1cdTAwM2VzdGF0ZSA9PSBTQ1RQX1VOQ09ORklSTUVEKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR0cmFuc19uZXh0ID0gc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFuc19uZXh0KTtcbi1cdFx0LyogQWN0aXZlIGlzIGdvb2QgZW5vdWdoIGZvciBpbW1lZGlhdGUgcmV0dXJuLiAqL1xuLVx0XHRpZiAodHJhbnNfbmV4dC1cdTAwM2VzdGF0ZSA9PSBTQ1RQX0FDVElWRSlcbi1cdFx0XHRicmVhaztcbitcdFx0aWYgKHRyYW5zLVx1MDAzZXN0YXRlICE9IFNDVFBfVU5DT05GSVJNRUQpIHtcbitcdFx0XHR0cmFuc19uZXh0ID0gc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFuc19uZXh0KTtcbitcdFx0XHQvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovXG4rXHRcdFx0aWYgKHRyYW5zX25leHQtXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0XHQvKiBXZSd2ZSByZWFjaGVkIHRoZSBlbmQsIHRpbWUgdG8gdXBkYXRlIHBhdGguICovXG4gXHRcdGlmICh0cmFucyA9PSBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGgpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGggPSB0cmFuc19uZXh0O1xuK1x0aWYgKHRyYW5zX25leHQpXG4rXHRcdGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7XG4gXG4gXHRwcl9kZWJ1ZyhcIiVzOiBhc3NvY2lhdGlvbjolcCB1cGRhdGVkIG5ldyBwYXRoIHRvIGFkZHI6JXBJU3BjXFxuXCIsXG4gXHRcdCBfX2Z1bmNfXywgYXNvYywgXHUwMDI2YXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoLVx1MDAzZWlwYWRkci5zYSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MzoxNy43MDQwNjY1MDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEwMDk2OTQzMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTQ1RQIFJldHJhbnNtaXNzaW9uIFBhdGggVXBkYXRlKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIG5lc3RsZWQgd2l0aGluIHRoZSBgbmV0L3NjdHAvYXNzb2Npb2xhLmNgIGZpbGUsIHNwZWNpZmljYWxseSBpbXBhY3RpbmcgdGhlIGBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aGAgZnVuY3Rpb24uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBmaXJzdCBtb3ZlIGlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGFuZCAqaG93KiBiZWhpbmQgdGhpcyBmdW5jdGlvbiBjYWxsLiBJJ2xsIG5lZWQgdG8gZ2FpbiBhIHNvbGlkIGdyYXNwIG9mIGl0cyBwdXJwb3NlIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgU0NUUCBhc3NvY2lhdGlvbiBtYW5hZ2VtZW50LlxuXG5JJ20gdGhpbmtpbmcgSSdsbCB1c2UgYGdyZXBwZXJgIChvciBtYXliZSBldmVuIGp1c3QgYSBnb29kIG9sZCBgcmVhZC1maWxlYCBhbmQgY2FyZWZ1bCBuYXZpZ2F0aW9uLCBkZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkpIHRvIHF1aWNrbHkgcHVsbCB1cCBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoYC4gVGhhdCdsbCBiZSBjcnVjaWFsLiBTZWVpbmcgd2hlcmUgYW5kIHdoZW4gdGhpcyBmdW5jdGlvbiBnZXRzIGludm9rZWQgd2lsbCBpbW1lZGlhdGVseSBpbGx1bWluYXRlIGl0cyByb2xlIGluIHRoZSByZXRyYW5zbWlzc2lvbiBwYXRoIHVwZGF0ZSBwcm9jZXNzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBwYXRoIGZhaWx1cmVzPyBDb25nZXN0aW9uIGNvbnRyb2wgYWRqdXN0bWVudHM/IEFzc29jaWF0aW9uIGxpZmV0aW1lIG1haW50ZW5hbmNlPyBHcmFzcGluZyB0aGUgY2FsbCBjb250ZXh0IGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QgaXQgaGFzIG9uIHRoZSB3aG9sZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjQ0OjE4LjcxMzc2MzMyOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvYXNzb2Npb2xhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI3MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI3MDpcXHRcXG4xMjcxOlxcdHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuMTI3MjpcXHR7XFxuMTI3MzpcXHRcXHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zID0gYXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aDtcXG4xMjc0OlxcdFxcdHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNfbmV4dCA9IE5VTEw7XFxuMTI3NTpcXHRcXG4xMjc2OlxcdFxcdC8qIFdlJ3JlIGRvbmUgYXMgd2Ugb25seSBoYXZlIHRoZSBvbmUgYW5kIG9ubHkgcGF0aC4gKi9cXG4xMjc3OlxcdFxcdGlmIChhc29jLVxcdTAwM2VwZWVyLnRyYW5zcG9ydF9jb3VudCA9PSAxKVxcbjEyNzg6XFx0XFx0XFx0cmV0dXJuO1xcbjEyNzk6XFx0XFx0LyogSWYgYWN0aXZlX3BhdGggYW5kIHJldHJhbl9wYXRoIGFyZSB0aGUgc2FtZSBhbmQgYWN0aXZlLFxcbjEyODA6XFx0XFx0ICogdGhlbiB0aGlzIGlzIHRoZSBvbmx5IGFjdGl2ZSBwYXRoLiBVc2UgaXQuXFxuMTI4MTpcXHRcXHQgKi9cXG4xMjgyOlxcdFxcdGlmIChhc29jLVxcdTAwM2VwZWVyLmFjdGl2ZV9wYXRoID09IGFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGggXFx1MDAyNlxcdTAwMjZcXG4xMjgzOlxcdFxcdCAgICBhc29jLVxcdTAwM2VwZWVyLmFjdGl2ZV9wYXRoLVxcdTAwM2VzdGF0ZSA9PSBTQ1RQX0FDVElWRSlcXG4xMjg0OlxcdFxcdFxcdHJldHVybjtcXG4xMjg1OlxcdFxcbjEyODY6XFx0XFx0LyogSXRlcmF0ZSBmcm9tIHJldHJhbl9wYXRoJ3Mgc3VjY2Vzc29yIGJhY2sgdG8gcmV0cmFuX3BhdGguICovXFxuMTI4NzpcXHRcXHRmb3IgKHRyYW5zID0gbGlzdF9uZXh0X2VudHJ5KHRyYW5zLCB0cmFuc3BvcnRzKTsgMTtcXG4xMjg4OlxcdFxcdCAgICAgdHJhbnMgPSBsaXN0X25leHRfZW50cnkodHJhbnMsIHRyYW5zcG9ydHMpKSB7XFxuMTI4OTpcXHRcXHRcXHQvKiBNYW51YWxseSBza2lwIHRoZSBoZWFkIGVsZW1lbnQuICovXFxuMTI5MDpcXHRcXHRcXHRpZiAoXFx1MDAyNnRyYW5zLVxcdTAwM2V0cmFuc3BvcnRzID09IFxcdTAwMjZhc29jLVxcdTAwM2VwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpXFxuMTI5MTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjkyOlxcdFxcdFxcdGlmICh0cmFucy1cXHUwMDNlc3RhdGUgIT0gU0NUUF9VTkNPTkZJUk1FRCkge1xcbjEyOTM6XFx0XFx0XFx0XFx0dHJhbnNfbmV4dCA9IHNjdHBfdHJhbnNfZWxlY3RfYmVzdCh0cmFucywgdHJhbnNfbmV4dCk7XFxuMTI5NDpcXHRcXHRcXHRcXHQvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovXFxuMTI5NTpcXHRcXHRcXHRcXHRpZiAodHJhbnNfbmV4dC1cXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXFxuMTI5NjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMjk3OlxcdFxcdFxcdH1cXG4xMjk4OlxcdFxcdFxcdC8qIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCwgdGltZSB0byB1cGRhdGUgcGF0aC4gKi9cXG4xMjk5OlxcdFxcdFxcdGlmICh0cmFucyA9PSBhc29jLVxcdTAwM2VwZWVyLnJldHJhbl9wYXRoKVxcbjEzMDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTMwMTpcXHRcXHR9XFxuMTMwMjpcXHRcXG4xMzAzOlxcdFxcdGlmICh0cmFuc19uZXh0KVxcbjEzMDQ6XFx0XFx0XFx0YXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7XFxuMTMwNTpcXHRcXG4xMzA2OlxcdFxcdHByX2RlYnVnKFxcXCIlczogYXNzb2NpYXRpb246JXAgdXBkYXRlZCBuZXcgcGF0aCB0byBhZGRyOiVwSVNwY1xcXFxuXFxcIixcXG4xMzA3OlxcdFxcdFxcdCBfX2Z1bmNfXywgYXNvYywgXFx1MDAyNmFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGgtXFx1MDAzZWlwYWRkci5zYSk7XFxuMTMwODpcXHR9XFxuMTMwOTpcXHRcXG4xMzEwOlxcdHN0YXRpYyB2b2lkIHNjdHBfc2VsZWN0X2FjdGl2ZV9hbmRfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuMTMxMTpcXHR7XFxuMTMxMjpcXHRcXHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zLCAqdHJhbnNfcHJpID0gTlVMTCwgKnRyYW5zX3NlYyA9IE5VTEw7XFxuMTMxMzpcXHRcXHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zX3BmID0gTlVMTDtcXG4xMzE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0NDoxOC43MTM4OTAyODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQxMDUxMjM2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gUmVhc29uaW5nOiBTQ1RQIFJldHJhbnNtaXNzaW9uIFBhdGggU2VsZWN0aW9uIEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbG9naWMgZmxhdyBpbiB0aGUgU0NUUCByZXRyYW5zbWlzc2lvbiBwYXRoIHNlbGVjdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgc3VidGxlIGlzc3VlOiBpZiBhbGwgdHJhbnNwb3J0cyB3ZXJlIGluIHRoZSBgU0NUUF9VTkNPTkZJUk1FRGAgc3RhdGUsIG9yIGlmIHdlIHdlcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCBhbmQgdGhlIGN1cnJlbnQgcmV0cmFuc21pc3Npb24gcGF0aCB3YXMgYWxzbyB1bmNvbmZpcm1lZCwgdGhlIG9yaWdpbmFsIGxvb3AncyBzdHJ1Y3R1cmUgY291bGQgbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wLiBTcGVjaWZpY2FsbHksIHRoZSBgY29udGludWVgIHN0YXRlbWVudCBpbnNpZGUgdGhlIGBTQ1RQX1VOQ09ORklSTUVEYCBjaGVjayBza2lwcGVkIHRoZSBlbmQtb2YtbGlzdCBjaGVjay4gSWYgYWxsIHRyYW5zcG9ydHMgb3IgdGhlIGN1cnJlbnQgdHJhbnNwb3J0IHdhcyBgVU5DT05GSVJNRURgLCBpdCBjb3VsZCByZXN1bHQgaW4gYW4gaW5maW5pdGUgbG9vcCBvciBhIGBOVUxMYCBwb2ludGVyIGRlcmVmZXJlbmNlIGxhdGVyLlxuXG5UaGUgcGF0Y2gncyBzb2x1dGlvbiBpcyBzdHJhaWdodGZvcndhcmQuIEl0IGludmVydHMgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIHRvICpvbmx5KiBleGVjdXRlIHRoZSBgc2N0cF90cmFuc19lbGVjdF9iZXN0YCBzZWxlY3Rpb24gYW5kIGFjdGl2ZSBzdGF0ZSBjaGVjayAqaWYqIHRoZSB0cmFuc3BvcnQgaXMgKm5vdCogYFNDVFBfVU5DT05GSVJNRURgLiBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBwcm9jZWVkIHRvIHVwZGF0ZSBgdHJhbnNfbmV4dGAsIHRoZSBjYW5kaWRhdGUgZm9yIHRoZSByZXRyYW5zbWlzc2lvbiBwYXRoLCBvbmx5IHdpdGggdmFsaWQgdHJhbnNwb3J0cywgYW5kIGFsc28gdGhhdCB3ZSBoaXQgdGhlIGVuZC1vZi1saXN0IGNoZWNrIGFuZCB1cGRhdGUgdGhlIHJldHJhbnNtaXNzaW9uIHBhdGggY29ycmVjdGx5LiBJdCBhbHNvIG5vdyBtYWtlcyBzdXJlIHRoYXQgd2UgZG9uJ3QgYXNzaWduIGBOVUxMYCB0byB0aGUgYHJldHJhbl9wYXRoYCwgd2hpY2ggY291bGQgcmVzdWx0IGluIGEgc3Vic2VxdWVudCBkZXJlZmVyZW5jZS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEtNU0FOLiBMZXQncyBtYWtlIHN1cmUgdGhlcmUgYXJlICpubyogdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBJJ3ZlIGdvbmUgb3ZlciB0aGUgY29kZSBjYXJlZnVsbHkuXG5cbiogICAqKk5vIG5ldyBhbGxvY2F0aW9ucyBvciBzdGFjayB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQuKiogV2UncmUganVzdCBtb2RpZnlpbmcgZXhpc3RpbmcgcG9pbnRlcnMgYW5kIHN0YXRlLlxuKiAgICoqYHRyYW5zX25leHRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5VTExgLioqIFZlcnkgaW1wb3J0YW50LiBUaGlzIHJlbW92ZXMgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCByZWFkcy5cbiogICBgdHJhbnNgIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGBhc29jLVx1MDAzZXBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdGAuIFRoYXQgbGlzdCBpcyBpbml0aWFsaXplZCwgYW5kIGB0cmFuc2AgaXMgYWx3YXlzIHZhbGlkLlxuKiAgIGBzY3RwX3RyYW5zX2VsZWN0X2Jlc3RgIGNvbXBhcmVzIGV4aXN0aW5nIHRyYW5zcG9ydCBzdHJ1Y3R1cmVzLiBUaGlzIGlzIGEga25vd24gZnVuY3Rpb24sIGFuZCBpcyBzYWZlIGZyb20gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cbiogICBgYXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoYCBpcyBub3cgb25seSB1cGRhdGVkIGlmIGB0cmFuc19uZXh0YCBpcyBub24tTlVMTC5cbiogICBDcml0aWNhbGx5LCB0aGVyZSBpcyAqKm5vKiogdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4gTm8gZGF0YSBjb3BpZWQgb3IgbGVha2VkLlxuKiAgIFRoaXMgaXMgYSBwdXJlIGxvZ2ljIGZpeC5cblxuU28sIGluIHNob3J0LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuIFRoaXMgcGF0Y2ggc2ltcGx5IGZpeGVzIGEgY29udHJvbCBmbG93IHByb2JsZW0uIFRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB0aGF0IGNvdWxkIHJlc3VsdCBpbiBhbiBpbmZpbml0ZSBsb29wIG9yIGBOVUxMYCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgY29ycmVjdG5lc3MgZml4LiBJJ20gY2VydGFpbiB0aGF0IHRoZSBsb2dpYyBjaGFuZ2UgcHJldmVudHMgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBTdGFuZGFyZCBzYW5pdGl6ZXJzL0tBU0FOIHdvdWxkIGNhdGNoIGFueSBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsaXN0IGNvcnJ1cHRpb24gYnVncyB0aGF0IG1pZ2h0IGV4aXN0IGVsc2V3aGVyZSwgYnV0IHRoZXkgYXJlIG5vdCByZWxldmFudCB0byB0aGlzIGxvZ2ljIGNoYW5nZSwgYW5kIEkgc2VlIG5vIG5lZWQgdG8gcnVuIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDcyLCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjQ0OjMyLjgxOTAxNjgwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb29wIHRlcm1pbmF0aW9uIGFuZCBOVUxMIHBvaW50ZXIgYXNzaWdubWVudCBpc3N1ZSBpbiBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoKWAgYnkgZW5zdXJpbmcgdGhlIGxvb3AgdGVybWluYXRpb24gY2hlY2sgKGB0cmFucyA9PSBhc29jLVxcdTAwM2VwZWVyLnJldHJhbl9wYXRoYCkgaXMgZXhlY3V0ZWQgZXZlbiB3aGVuIGEgdHJhbnNwb3J0IGlzIGluIHRoZSBgU0NUUF9VTkNPTkZJUk1FRGAgc3RhdGUsIGFuZCBndWFyZGluZyB0aGUgYXNzaWdubWVudCB0byBgYXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aGAgd2l0aCBhIG51bGwgY2hlY2suXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGlzIGEgY29udHJvbCBmbG93IGFuZCBwb2ludGVyIHZhbGlkYXRpb24gZml4LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGxvZ2ljIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBsaXN0IHRyYXZlcnNhbCBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBwb2ludGVyIGFzc2lnbm1lbnQgaXNzdWUgaW4gYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKClgIGJ5IGVuc3VyaW5nIHRoZSBsb29wIHRlcm1pbmF0aW9uIGNoZWNrIChgdHJhbnMgPT0gYXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aGApIGlzIGV4ZWN1dGVkIGV2ZW4gd2hlbiBhIHRyYW5zcG9ydCBpcyBpbiB0aGUgYFNDVFBfVU5DT05GSVJNRURgIHN0YXRlLCBhbmQgZ3VhcmRpbmcgdGhlIGFzc2lnbm1lbnQgdG8gYGFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGhgIHdpdGggYSBudWxsIGNoZWNrLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcG9pbnRlciB2YWxpZGF0aW9uIGZpeC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBsb2dpYyAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowvqtwr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 14:21:50 +0000 UTC FinishedAt: 2026-09-02 14:44:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET" ], "series_id": "d51173ad-23c6-4dd5-a763-2cc20cc1e94a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_assoc_update_retran_path", "sctp_assoc_choose_alter_transport", "sctp_retransmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoJiMzNDssCiAgICAmIzM0O3NjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydCYjMzQ7LAogICAgJiMzNDtzY3RwX3JldHJhbnNtaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvb3AgdGVybWluYXRpb24gYW5kIE5VTEwgcG9pbnRlciBhc3NpZ25tZW50IGlzc3VlIGluIGBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aCgpYCBieSBlbnN1cmluZyB0aGUgbG9vcCB0ZXJtaW5hdGlvbiBjaGVjayAoYHRyYW5zID09IGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aGApIGlzIGV4ZWN1dGVkIGV2ZW4gd2hlbiBhIHRyYW5zcG9ydCBpcyBpbiB0aGUgYFNDVFBfVU5DT05GSVJNRURgIHN0YXRlLCBhbmQgZ3VhcmRpbmcgdGhlIGFzc2lnbm1lbnQgdG8gYGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aGAgd2l0aCBhIG51bGwgY2hlY2suXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcG9pbnRlciB2YWxpZGF0aW9uIGZpeC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBsb2dpYyAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb29wIHRlcm1pbmF0aW9uIGFuZCBOVUxMIGRlcmVmZXJlbmNlIGJ1ZyBpbiBTQ1RQIHRyYW5zcG9ydCByZXRyYW5zbWlzc2lvbiBwYXRoIHNlbGVjdGlvbiAoc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgpLiBUaGUgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbCBsb2dpYyBpbiBuZXQvc2N0cCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4OGNjODA0ZDdkMmIyYjlmZGFlMTMzZjVkZmMwYjM3YTU4MGY2MDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNDo0MTozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hc3NvY2lvbGEuYyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jXG5pbmRleCBjMDUxMmM4MjdkMGY1Li40NTIxYmUzYmQ4NWFhIDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvYXNzb2Npb2xhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jXG5AQCAtMTI4OSwxOCAmIzQzOzEyODksMTkgQEAgdm9pZCBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbiBcdFx0LyogTWFudWFsbHkgc2tpcCB0aGUgaGVhZCBlbGVtZW50LiAqL1xuIFx0XHRpZiAoXHUwMDI2dHJhbnMtXHUwMDNldHJhbnNwb3J0cyA9PSBcdTAwMjZhc29jLVx1MDAzZXBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdClcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKHRyYW5zLVx1MDAzZXN0YXRlID09IFNDVFBfVU5DT05GSVJNRUQpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdHRyYW5zX25leHQgPSBzY3RwX3RyYW5zX2VsZWN0X2Jlc3QodHJhbnMsIHRyYW5zX25leHQpO1xuLVx0XHQvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovXG4tXHRcdGlmICh0cmFuc19uZXh0LVx1MDAzZXN0YXRlID09IFNDVFBfQUNUSVZFKVxuLVx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKHRyYW5zLVx1MDAzZXN0YXRlICE9IFNDVFBfVU5DT05GSVJNRUQpIHtcbiYjNDM7XHRcdFx0dHJhbnNfbmV4dCA9IHNjdHBfdHJhbnNfZWxlY3RfYmVzdCh0cmFucywgdHJhbnNfbmV4dCk7XG4mIzQzO1x0XHRcdC8qIEFjdGl2ZSBpcyBnb29kIGVub3VnaCBmb3IgaW1tZWRpYXRlIHJldHVybi4gKi9cbiYjNDM7XHRcdFx0aWYgKHRyYW5zX25leHQtXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXHRcdC8qIFdlJiMzOTt2ZSByZWFjaGVkIHRoZSBlbmQsIHRpbWUgdG8gdXBkYXRlIHBhdGguICovXG4gXHRcdGlmICh0cmFucyA9PSBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGgpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGggPSB0cmFuc19uZXh0O1xuJiM0MztcdGlmICh0cmFuc19uZXh0KVxuJiM0MztcdFx0YXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoID0gdHJhbnNfbmV4dDtcbiBcbiBcdHByX2RlYnVnKFwmIzM0OyVzOiBhc3NvY2lhdGlvbjolcCB1cGRhdGVkIG5ldyBwYXRoIHRvIGFkZHI6JXBJU3BjXFxuXCYjMzQ7LFxuIFx0XHQgX19mdW5jX18sIGFzb2MsIFx1MDAyNmFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aC1cdTAwM2VpcGFkZHIuc2EpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoJiMzNDssCiAgICAmIzM0O3NjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydCYjMzQ7LAogICAgJiMzNDtzY3RwX3JldHJhbnNtaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb29wIHRlcm1pbmF0aW9uIGFuZCBOVUxMIGRlcmVmZXJlbmNlIGJ1ZyBpbiBTQ1RQIHRyYW5zcG9ydCByZXRyYW5zbWlzc2lvbiBwYXRoIHNlbGVjdGlvbiAoc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgpLiBUaGUgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbCBsb2dpYyBpbiBuZXQvc2N0cCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OGNjODA0ZDdkMmIyYjlmZGFlMTMzZjVkZmMwYjM3YTU4MGY2MDIyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxNDo0MTozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2Fzc29jaW9sYS5jIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKaW5kZXggYzA1MTJjODI3ZDBmNS4uNDUyMWJlM2JkODVhYSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKQEAgLTEyODksMTggJiM0MzsxMjg5LDE5IEBAIHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiAJCS8qIE1hbnVhbGx5IHNraXAgdGhlIGhlYWQgZWxlbWVudC4gKi8KIAkJaWYgKCZhbXA7dHJhbnMtJmd0O3RyYW5zcG9ydHMgPT0gJmFtcDthc29jLSZndDtwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpCiAJCQljb250aW51ZTsKLQkJaWYgKHRyYW5zLSZndDtzdGF0ZSA9PSBTQ1RQX1VOQ09ORklSTUVEKQotCQkJY29udGludWU7Ci0JCXRyYW5zX25leHQgPSBzY3RwX3RyYW5zX2VsZWN0X2Jlc3QodHJhbnMsIHRyYW5zX25leHQpOwotCQkvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovCi0JCWlmICh0cmFuc19uZXh0LSZndDtzdGF0ZSA9PSBTQ1RQX0FDVElWRSkKLQkJCWJyZWFrOwomIzQzOwkJaWYgKHRyYW5zLSZndDtzdGF0ZSAhPSBTQ1RQX1VOQ09ORklSTUVEKSB7CiYjNDM7CQkJdHJhbnNfbmV4dCA9IHNjdHBfdHJhbnNfZWxlY3RfYmVzdCh0cmFucywgdHJhbnNfbmV4dCk7CiYjNDM7CQkJLyogQWN0aXZlIGlzIGdvb2QgZW5vdWdoIGZvciBpbW1lZGlhdGUgcmV0dXJuLiAqLwomIzQzOwkJCWlmICh0cmFuc19uZXh0LSZndDtzdGF0ZSA9PSBTQ1RQX0FDVElWRSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQl9CiAJCS8qIFdlJiMzOTt2ZSByZWFjaGVkIHRoZSBlbmQsIHRpbWUgdG8gdXBkYXRlIHBhdGguICovCiAJCWlmICh0cmFucyA9PSBhc29jLSZndDtwZWVyLnJldHJhbl9wYXRoKQogCQkJYnJlYWs7CiAJfQogCi0JYXNvYy0mZ3Q7cGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7CiYjNDM7CWlmICh0cmFuc19uZXh0KQomIzQzOwkJYXNvYy0mZ3Q7cGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7CiAKIAlwcl9kZWJ1ZygmIzM0OyVzOiBhc3NvY2lhdGlvbjolcCB1cGRhdGVkIG5ldyBwYXRoIHRvIGFkZHI6JXBJU3BjXG4mIzM0OywKIAkJIF9fZnVuY19fLCBhc29jLCAmYW1wO2Fzb2MtJmd0O3BlZXIucmV0cmFuX3BhdGgtJmd0O2lwYWRkci5zYSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTQ1RQIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYG5ldC9zY3RwL2Fzc29jaW9sYS5jYCwgcGFydGljdWxhcmx5IHRoZSBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoKWAgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgY2hhbmdpbmcgdGhlcmUuIEFuZCBzaW5jZSB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IGNvbmZpZ3VyYXRpb24sIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBuZXQvc2N0cC9LY29uZmlnYCBhcyB3ZWxsLCBqdXN0IGluIGNhc2UgdGhlcmUgYXJlIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLgoKVG8gZ2V0IHRoZSBtb3N0IHJlbGV2YW50IGNvbnRleHQgYXJvdW5kIHRoZSBjb2RlIGNoYW5nZXMsIEkmIzM5O2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHplcm8gaW4gb24gbGluZSAxMjg5IGluIGBuZXQvc2N0cC9hc3NvY2lvbGEuY2AuIEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gVGhpcyBhcHByb2FjaCB3aWxsIGFsbG93IG1lIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcGF0Y2ggd2l0aGluIHRoZSBicm9hZGVyIGZ1bmN0aW9uIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjdHAvYXNzb2Npb2xhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNzA6XHRcbjEyNzE6XHR2b2lkIHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuMTI3MjpcdHtcbjEyNzM6XHRcdHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnMgPSBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGg7XG4xMjc0Olx0XHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zX25leHQgPSBOVUxMO1xuMTI3NTpcdFxuMTI3NjpcdFx0LyogV2UmIzM5O3JlIGRvbmUgYXMgd2Ugb25seSBoYXZlIHRoZSBvbmUgYW5kIG9ubHkgcGF0aC4gKi9cbjEyNzc6XHRcdGlmIChhc29jLVx1MDAzZXBlZXIudHJhbnNwb3J0X2NvdW50ID09IDEpXG4xMjc4Olx0XHRcdHJldHVybjtcbjEyNzk6XHRcdC8qIElmIGFjdGl2ZV9wYXRoIGFuZCByZXRyYW5fcGF0aCBhcmUgdGhlIHNhbWUgYW5kIGFjdGl2ZSxcbjEyODA6XHRcdCAqIHRoZW4gdGhpcyBpcyB0aGUgb25seSBhY3RpdmUgcGF0aC4gVXNlIGl0LlxuMTI4MTpcdFx0ICovXG4xMjgyOlx0XHRpZiAoYXNvYy1cdTAwM2VwZWVyLmFjdGl2ZV9wYXRoID09IGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aCBcdTAwMjZcdTAwMjZcbjEyODM6XHRcdCAgICBhc29jLVx1MDAzZXBlZXIuYWN0aXZlX3BhdGgtXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXG4xMjg0Olx0XHRcdHJldHVybjtcbjEyODU6XHRcbjEyODY6XHRcdC8qIEl0ZXJhdGUgZnJvbSByZXRyYW5fcGF0aCYjMzk7cyBzdWNjZXNzb3IgYmFjayB0byByZXRyYW5fcGF0aC4gKi9cbjEyODc6XHRcdGZvciAodHJhbnMgPSBsaXN0X25leHRfZW50cnkodHJhbnMsIHRyYW5zcG9ydHMpOyAxO1xuMTI4ODpcdFx0ICAgICB0cmFucyA9IGxpc3RfbmV4dF9lbnRyeSh0cmFucywgdHJhbnNwb3J0cykpIHtcbjEyODk6XHRcdFx0LyogTWFudWFsbHkgc2tpcCB0aGUgaGVhZCBlbGVtZW50LiAqL1xuMTI5MDpcdFx0XHRpZiAoXHUwMDI2dHJhbnMtXHUwMDNldHJhbnNwb3J0cyA9PSBcdTAwMjZhc29jLVx1MDAzZXBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdClcbjEyOTE6XHRcdFx0XHRjb250aW51ZTtcbjEyOTI6XHRcdFx0aWYgKHRyYW5zLVx1MDAzZXN0YXRlICE9IFNDVFBfVU5DT05GSVJNRUQpIHtcbjEyOTM6XHRcdFx0XHR0cmFuc19uZXh0ID0gc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFuc19uZXh0KTtcbjEyOTQ6XHRcdFx0XHQvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovXG4xMjk1Olx0XHRcdFx0aWYgKHRyYW5zX25leHQtXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXG4xMjk2Olx0XHRcdFx0XHRicmVhaztcbjEyOTc6XHRcdFx0fVxuMTI5ODpcdFx0XHQvKiBXZSYjMzk7dmUgcmVhY2hlZCB0aGUgZW5kLCB0aW1lIHRvIHVwZGF0ZSBwYXRoLiAqL1xuMTI5OTpcdFx0XHRpZiAodHJhbnMgPT0gYXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoKVxuMTMwMDpcdFx0XHRcdGJyZWFrO1xuMTMwMTpcdFx0fVxuMTMwMjpcdFxuMTMwMzpcdFx0aWYgKHRyYW5zX25leHQpXG4xMzA0Olx0XHRcdGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7XG4xMzA1Olx0XG4xMzA2Olx0XHRwcl9kZWJ1ZyhcJiMzNDslczogYXNzb2NpYXRpb246JXAgdXBkYXRlZCBuZXcgcGF0aCB0byBhZGRyOiVwSVNwY1xcblwmIzM0OyxcbjEzMDc6XHRcdFx0IF9fZnVuY19fLCBhc29jLCBcdTAwMjZhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGgtXHUwMDNlaXBhZGRyLnNhKTtcbjEzMDg6XHR9XG4xMzA5Olx0XG4xMzEwOlx0c3RhdGljIHZvaWQgc2N0cF9zZWxlY3RfYWN0aXZlX2FuZF9yZXRyYW5fcGF0aChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbjEzMTE6XHR7XG4xMzEyOlx0XHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zLCAqdHJhbnNfcHJpID0gTlVMTCwgKnRyYW5zX3NlYyA9IE5VTEw7XG4xMzEzOlx0XHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zX3BmID0gTlVMTDtcbjEzMTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDY1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJldHJhbnNtaXNzaW9uIFBhdGggQnVnIGluIFNDVFAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGhgIGFkZHJlc3NlcyBhIG5hc3R5IGZsYXcuIEFwcGFyZW50bHksIHRoZXJlJiMzOTtzIGEgc2NlbmFyaW8gd2hlcmUgYGFzb2MtJmd0O3BlZXIucmV0cmFuX3BhdGhgIOKAkyB3aGljaCBJIHJlY29nbml6ZSBhcyB0aGUgcmV0cmFuc21pc3Npb24gcGF0aCBmb3IgYW4gU0NUUCBhc3NvY2lhdGlvbiDigJMgY291bGQgZW5kIHVwIHBvaW50aW5nIHRvIGBOVUxMYC4gT3IsIGV2ZW4gd29yc2UsIGlmIGFsbCB0aGUgdHJhbnNwb3J0cyBhcmUgaW4gYW4gYFNDVFBfVU5DT05GSVJNRURgIHN0YXRlLCBgdHJhbnNfbmV4dGAgY291bGQgYmUgYE5VTExgLgoKVGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgYSBzdWJ0bGUgbG9naWMgZXJyb3IgaW4gdGhlIG9yaWdpbmFsIGNvZGUuIEkgc2VlIGl0IG5vdzogdGhlIGNvbmRpdGlvbmFsIGBpZiAodHJhbnMtJmd0O3N0YXRlID09IFNDVFBfVU5DT05GSVJNRUQpIGNvbnRpbnVlO2AgZm9sbG93ZWQgYnkgYGlmICh0cmFucyA9PSBhc29jLSZndDtwZWVyLnJldHJhbl9wYXRoKSBicmVhaztgIC0gd2FpdCBhIG1pbnV0ZSEgSWYgYHRyYW5zYCAqaXMqIHRoZSByZXRyYW5zbWlzc2lvbiBwYXRoICphbmQqIGl0JiMzOTtzIGBTQ1RQX1VOQ09ORklSTUVEYCwgdGhhdCBgY29udGludWVgIHN0YXRlbWVudCB3b3VsZCBza2lwIHRoZSBgYnJlYWtgIGNvbmRpdGlvbiwgbGVhZGluZyB0byBhbiBpbmZpbml0ZSBsb29wISBBbmQgZXZlbiB3b3JzZSwgaWYgYHRyYW5zX25leHRgIGlzIGBOVUxMYCBpdCBjb3VsZCBjYXVzZSBhIG5hc3R5IE5VTEwgZGVyZWZlcmVuY2UgbGF0ZXIgb24gYXQgYGFzb2MtJmd0O3BlZXIucmV0cmFuX3BhdGggPSB0cmFuc19uZXh0YCEgVGhhdCYjMzk7cyBhIGNsYXNzaWMgbWlzdGFrZS4gSSYjMzk7dmUgYmVlbiB0aGVyZSBteXNlbGYuIEFuZCBpdCBjb3VsZCB0aGVuIGNhdXNlIGFub3RoZXIgTlVMTCBkZXJlZmVyZW5jZSBieSB0cnlpbmcgdG8gYWNjZXNzIHNvbWV0aGluZyBsaWtlIGBhc29jLSZndDtwZWVyLnJldHJhbl9wYXRoLSZndDtpcGFkZHIuc2FgIGluIHNvbWV0aGluZyBsaWtlIGEgYHByX2RlYnVnYC4gVWdoLgoKTm93LCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QsIEkgbmVlZCB0byB0cmFjZSB3aGVyZSBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGhgIGlzIGFjdHVhbGx5IGNhbGxlZC4gR290dGEgY2hlY2sgdGhlIGNhbGwgc2l0ZXMgdGhyb3VnaG91dCB0aGUgU0NUUCBjb2RlYmFzZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlYWwtd29ybGQgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmg9MjExNz1zdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydChcbmluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oLTIxMTgtXHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKik7XG5pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaDoyMTE5OnZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7XG5pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaC0yMTIwLXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqc2N0cF9hc3NvY19sb29rdXBfcGFkZHIoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKixcbi0tXG5uZXQvc2N0cC9hc3NvY2lvbGEuYz00ODI9dm9pZCBzY3RwX2Fzc29jX3JtX3BlZXIoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4tLVxubmV0L3NjdHAvYXNzb2Npb2xhLmMtNDk1LVx0aWYgKGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aCA9PSBwZWVyKVxubmV0L3NjdHAvYXNzb2Npb2xhLmM6NDk2Olx0XHRzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aChhc29jKTtcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTQ5Ny1cbi0tXG5uZXQvc2N0cC9hc3NvY2lvbGEuYz0xMjQ4PXN0YXRpYyBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnNjdHBfdHJhbnNfZWxlY3RfYmVzdChzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKmN1cnIsXG4tLVxubmV0L3NjdHAvYXNzb2Npb2xhLmMtMTI3MC1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjEyNzE6dm9pZCBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTEyNzIte1xuLS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jPTEzNzg9c2N0cF9hc3NvY19jaG9vc2VfYWx0ZXJfdHJhbnNwb3J0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTEzODgtXHRcdGlmIChsYXN0X3NlbnRfdG8gPT0gYXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoKVxubmV0L3NjdHAvYXNzb2Npb2xhLmM6MTM4OTpcdFx0XHRzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aChhc29jKTtcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTEzOTAtXG4tLVxubmV0L3NjdHAvb3V0cXVldWUuYz01Mzc9dm9pZCBzY3RwX3JldHJhbnNtaXQoc3RydWN0IHNjdHBfb3V0cSAqcSwgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQsXG4tLVxubmV0L3NjdHAvb3V0cXVldWUuYy01NDktXHRcdGlmICh0cmFuc3BvcnQgPT0gdHJhbnNwb3J0LVx1MDAzZWFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aClcbm5ldC9zY3RwL291dHF1ZXVlLmM6NTUwOlx0XHRcdHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKHRyYW5zcG9ydC1cdTAwM2Vhc29jKTtcbm5ldC9zY3RwL291dHF1ZXVlLmMtNTUxLVx0XHR0cmFuc3BvcnQtXHUwMDNlYXNvYy1cdTAwM2VydHhfZGF0YV9jaHVua3MgJiM0Mzs9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBTQ1RQIExhbmRzY2FwZTogQSBLY29uZmlnIENoZWNrKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgbmVlZCB0byBtYWtlIHN1cmUgU0NUUCBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBmaWxlcy4gSXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgaW4gZW5zdXJpbmcgYSByZWxpYWJsZSBTQ1RQIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSByZWxldmFudCBvcHRpb25zIGFyZSBlbmFibGVkLCBjb25zaWRlcmluZyBhbnkgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbmV0d29ya2luZyBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB1c2VyLXNwYWNlIHZzLiBrZXJuZWwtc3BhY2UgYXNwZWN0cy4gQXJlIHRoZSBuZWNlc3NhcnkgU0NUUCBtb2R1bGVzIGJlaW5nIGJ1aWx0PyBJcyB0aGUgc3RhY2sgaW50ZWdyYXRlZCBwcm9wZXJseT8gQSB0aG9yb3VnaCBzY2FuIG9mIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgd2lsbCBxdWlja2x5IGNsYXJpZnkgdGhlIHN5c3RlbSYjMzk7cyBjdXJyZW50IHN0YW5jZSBvbiBTQ1RQIHN1cHBvcnQgYW5kIHVuY292ZXIgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGlzc3VlcywgYmVmb3JlIEkgc3RhcnQgaW50ZWdyYXRpbmcgYW55dGhpbmcgbmV3LiBUaGlzIHByZWxpbWluYXJ5IGNoZWNrIHNob3VsZCBwcm92aWRlIGEgcmVsaWFibGUgYmFzaXMgZm9yIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1NDVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnLTUtXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXG5uZXQvc2N0cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgU0NUUCBQcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBuZXQvc2N0cC9LY29uZmlnYCBmaWxlOgoKKipBbmFseXppbmcgdGhlIFNDVFAgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG5ldC9zY3RwL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgU0NUUCAoU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sKSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBhcmUgZGVmaW5lZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBLY29uZmlnIGNvbnZlbnRpb25zIGhlcmUg4oCTIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSwgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzLiBUaGUgZ29hbCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvcHRpb25zIGNvbnRyb2wgU0NUUCYjMzk7cyBmZWF0dXJlcywgYW5kIGhvdyB0aGV5IGltcGFjdCB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqQ29yZSBFbmFibGVtZW50OioqIFRoZSB0b3AtbGV2ZWwgb3B0aW9uIHRvIGVuYWJsZSBvciBkaXNhYmxlIFNDVFAgZW50aXJlbHkuCiogICAqKkZlYXR1cmUgRmxhZ3M6KiogSW5kaXZpZHVhbCBvcHRpb25zIGNvbnRyb2xsaW5nIHNwZWNpZmljIFNDVFAgZmVhdHVyZXMgbGlrZSBtdWx0aS1ob21pbmcsIGR5bmFtaWMgYWRkcmVzcyBjb25maWd1cmF0aW9uLCBzdHJlYW0gc2VxdWVuY2luZywgYW5kIGFueSBleHRlbnNpb25zIGxpa2UgRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24gKEVDTikgc3VwcG9ydCwgb3IgVXNlciBEYXRhZ3JhbSBQcm90b2NvbCAoVURQKSBlbmNhcHN1bGF0aW9uLgoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcyBkb2VzIFNDVFAgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGhhcmQgZGVwZW5kZW5jaWVzIG9uLCBzYXksIG5ldHdvcmtpbmcgc3RhY2sgY29tcG9uZW50cyBvciBzZWN1cml0eSBmZWF0dXJlcz8gQW5kIHdoYXQgYWJvdXQgYnVpbGQgZGVwZW5kZW5jaWVzLCBtYWtpbmcgc3VyZSBhbGwgdGhlIG5lZWRlZCBtb2R1bGVzIGFyZSBidWlsdC4KKiAgICoqRGVmYXVsdCBWYWx1ZXM6KiogVW5kZXJzdGFuZGluZyB0aGUgZGVmYXVsdCBzZXR0aW5ncyBpcyBjcnVjaWFsLiBBcmUgdGhleSBzZW5zaWJsZSBmb3IgZ2VuZXJhbCB1c2UsIG9yIGFyZSB0aGVyZSBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgSSBtaWdodCBuZWVkIHRvIGFkanVzdCB0aGVtPyBPZnRlbiB0aGUgZGVmYXVsdCBmb3IgbW9kdWxlcyBpcyBgbWAsIHNvIHRoZXkmIzM5O3JlIGJ1aWx0IGFzIGxvYWRhYmxlIG1vZHVsZXMuCiogICAqKkhlbHAgVGV4dDoqKiBUaGlzIHNob3VsZCBwcm92aWRlIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgZWFjaCBvcHRpb24uIFRoZSBoZWxwIHRleHQmIzM5O3MgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBhcmUga2V5IGluZGljYXRvcnMgb2YgdGhlIHF1YWxpdHkgb2YgdGhlIEtjb25maWcgZmlsZSBpdHNlbGYuIEkmIzM5O2xsIGJlIGNvbXBhcmluZyBpdCB0byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLgoqICAgKipDb25kaXRpb25hbCBDb21waWxhdGlvbjoqKiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgb3B0aW9ucyB0aGF0IGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUsIENQVSwgb3Igb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBUaGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgaW1wYWN0IG9uIHBvd2VyLgoqICAgKipTZWN1cml0eSBDb25zaWRlcmF0aW9uczoqKiBIYXMgdGhlIEtjb25maWcgZmlsZSBhZGRyZXNzZWQgc2VjdXJpdHktcmVsYXRlZCBhc3BlY3RzPyBBcmUgdGhlcmUgb3B0aW9ucyByZWxhdGVkIHRvIElQc2VjLCBUTFMsIG9yIGFueSBoYXJkZW5pbmcgZmVhdHVyZXM/IEFyZSB0aGVyZSBhbnkgb3B0aW9ucyB0byBzdXBwb3J0IGhhcmRlbmluZywgb3IgZGlzYWJsaW5nIGZ1bmN0aW9ucyB0byByZWR1Y2UgdGhlIGF0dGFjayBzdXJmYWNlLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGZvcm0gYSBjb21wbGV0ZSBtZW50YWwgcGljdHVyZSBvZiBob3cgU0NUUCBpcyBjb25maWd1cmVkIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgTGludXgga2VybmVsIG5ldHdvcmtpbmcgZnJhbWV3b3JrLiBJJiMzOTtsbCBiZSBub3RpbmcgYW55IGFyZWFzIHRoYXQgYXJlIHVuY2xlYXIsIG9yIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGltcHJvdmVtZW50cyB0aGF0IEkgY2FuIGlkZW50aWZ5IGFzIEkgZ28gdGhyb3VnaCB0aGUgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgU0NUUCBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgSVBfU0NUUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIFNDVFAgUHJvdG9jb2xcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gIDExOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAxMjpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTM6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2xcbiAgMTY6XHRcbiAgMTc6XHRcdCAgRnJvbSBSRkMgMjk2MCBcdTAwM2NodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTYwLnR4dFx1MDAzZS5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgXCYjMzQ7U0NUUCBpcyBhIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2NvbCBvcGVyYXRpbmcgb24gdG9wIG9mIGFcbiAgMjA6XHRcdCAgY29ubmVjdGlvbmxlc3MgcGFja2V0IG5ldHdvcmsgc3VjaCBhcyBJUC4gIEl0IG9mZmVycyB0aGUgZm9sbG93aW5nXG4gIDIxOlx0XHQgIHNlcnZpY2VzIHRvIGl0cyB1c2VyczpcbiAgMjI6XHRcbiAgMjM6XHRcdCAgLS0gYWNrbm93bGVkZ2VkIGVycm9yLWZyZWUgbm9uLWR1cGxpY2F0ZWQgdHJhbnNmZXIgb2YgdXNlciBkYXRhLFxuICAyNDpcdFx0ICAtLSBkYXRhIGZyYWdtZW50YXRpb24gdG8gY29uZm9ybSB0byBkaXNjb3ZlcmVkIHBhdGggTVRVIHNpemUsXG4gIDI1Olx0XHQgIC0tIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiB1c2VyIG1lc3NhZ2VzIHdpdGhpbiBtdWx0aXBsZSBzdHJlYW1zLFxuICAyNjpcdFx0ICB3aXRoIGFuIG9wdGlvbiBmb3Igb3JkZXItb2YtYXJyaXZhbCBkZWxpdmVyeSBvZiBpbmRpdmlkdWFsIHVzZXJcbiAgMjc6XHRcdCAgbWVzc2FnZXMsXG4gIDI4Olx0XHQgIC0tIG9wdGlvbmFsIGJ1bmRsaW5nIG9mIG11bHRpcGxlIHVzZXIgbWVzc2FnZXMgaW50byBhIHNpbmdsZSBTQ1RQXG4gIDI5Olx0XHQgIHBhY2tldCwgYW5kXG4gIDMwOlx0XHQgIC0tIG5ldHdvcmstbGV2ZWwgZmF1bHQgdG9sZXJhbmNlIHRocm91Z2ggc3VwcG9ydGluZyBvZiBtdWx0aS1cbiAgMzE6XHRcdCAgaG9taW5nIGF0IGVpdGhlciBvciBib3RoIGVuZHMgb2YgYW4gYXNzb2NpYXRpb24uXCYjMzQ7XG4gIDMyOlx0XG4gIDMzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBwcm90b2NvbCBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjdHAuIERlYnVnIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGJ5IHRoZVxuICAzNTpcdFx0ICBrZXJuZWwmIzM5O3MgZHluYW1pYyBkZWJ1Z2dpbmcgZnJhbWV3b3JrLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gIDM4Olx0XG4gIDM5Olx0aWYgSVBfU0NUUFxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjE5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIGBuZXQvc2N0cC9NYWtlZmlsZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgYXNzb2Npb2xhLmNgIGdldHMgcHJvcGVybHkgY29tcGlsZWQgd2hlbmV2ZXIgYENPTkZJR19JUF9TQ1RQYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAsIGFuZCBpZiB0aGF0IGRvZXNuJiMzOTt0IGhhcHBlbiwgd2UmIzM5O3JlIGdvaW5nIHRvIGhhdmUgc29tZSByZWFsIHByb2JsZW1zLiBUaGlzIGlzIGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IGFuZCBuZWVkcyB0byBiZSB2ZXJpZmllZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGFsbCBzcXVhcmVkIGF3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fzc29jaW9sYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL01ha2VmaWxlPTk9c2N0cC15IDo9IHNtX3N0YXRldGFibGUubyBzbV9zdGF0ZWZ1bnMubyBzbV9zaWRlZWZmZWN0Lm8gXFxcbm5ldC9zY3RwL01ha2VmaWxlOjEwOlx0ICBwcm90b2NvbC5vIGVuZHBvaW50b2xhLm8gYXNzb2Npb2xhLm8gXFxcbm5ldC9zY3RwL01ha2VmaWxlLTExLVx0ICB0cmFuc3BvcnQubyBjaHVuay5vIHNtX21ha2VfY2h1bmsubyB1bHBldmVudC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0OTIKCQkJCQkJCW91dHB1dDogMTMyCgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIElQX1NDVFAqKgoKT2theSwgbGV0JiMzOTtzIGFzc2VzcyB0aGUgZnV6emluZyBwb3RlbnRpYWwgaGVyZS4gYElQX1NDVFBgIGRlcGVuZHMgb24gYElORVRgLCBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBzYXlzIHllcywgdGhpcyBpcyBhIHRhcmdldCB3b3J0aCBwdXJzdWluZy4gU0NUUCBpcyBhIGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgcHJvdG9jb2wsIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHNvY2tldHMgdXNpbmcgYEFGX0lORVRgLCBgU09DS19TRVFQQUNLRVRgLCBvciBgU09DS19TVFJFQU1gLCBhbmQgYElQUFJPVE9fU0NUUGAuIEltcG9ydGFudGx5LCBzeXprYWxsZXIgaGVhdmlseSB1dGlsaXplcyBpdCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBpbmRpY2F0b3IuCgpUaGlzIHBhcnRpY3VsYXIgcGF0Y2ggYWRkcmVzc2VzIGFuIGluZmluaXRlIGxvb3AvTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdpdGhpbiBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoKWAuIFRpbWUgdG8gZXhhbWluZSB0aGF0IGZ1bmN0aW9uIG1vcmUgY2xvc2VseS4gSXQmIzM5O3MgYSBub24tc3RhdGljLCBleHBvcnRlZCBmdW5jdGlvbjogYHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpYC4gSSBzaG91bGQgYWxzbyBsb29rIGF0IG90aGVyIHJlbGV2YW50IGVudHJ5cG9pbnRzOyB0aGUgY2FsbGVycyBhcmUgYHNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydGAsIGBzY3RwX3JldHJhbnNtaXRgLCBhbmQgYHNjdHBfYXNzb2Nfcm1fcGVlcmAuCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoYCBpbiBgRm9jdXNTeW1ib2xzYCwgYW5kIHRoZW4gSSYjMzk7bGwgbWFrZSBzdXJlIHRob3NlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBhcmUgYWxzbyBvbiB0aGUgbGlzdDogYHNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydGAgYW5kIGBzY3RwX3JldHJhbnNtaXRgLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYElQX1NDVFBgICh3aGljaCwgYXMgZXhwZWN0ZWQsIGRlcGVuZHMgb24gYElORVRgKS4gTGV0JiMzOTtzIGVuc3VyZSB0aG9zZSBjb25maWdzIGFyZSBlbmFibGVkLgoKT2theSwgbGV0JiMzOTtzIHJ1biBhIGZpbmFsIGRvdWJsZS1jaGVjayBvZiBldmVyeXRoaW5nIGFuZCBmaWxsIGluIHRoZSBzZXQtcmVzdWx0cyB0b29sLgoKKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlIOKAkyBUaGlzIGZpeGVzIGEgY3JpdGljYWwgdnVsbmVyYWJpbGl0eSwgYW4gaW5maW5pdGUgbG9vcC9OVUxMIGRlcmVmZXJlbmNlLCB3aXRoaW4gYW4gU0NUUCBhc3NvY2lhdGlvbiB0cmFuc3BvcnQgaXRlcmF0aW9uLiBTQ1RQIGlzIGEgdmlhYmxlIHRhcmdldCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcy4KKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhbiBpbmZpbml0ZSBsb29wL05VTEwgZGVyZWZlcmVuY2UgaW4gYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoYCB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIGFzc29jaWF0aW9uIHRyYW5zcG9ydHMuIFNDVFAgaXMgZnVsbHkgc3VwcG9ydGVkIGFuZCBjYW4gYmUgdGFyZ2V0ZWQgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7SVBfU0NUUCYjMzQ7LCAmIzM0O0lORVQmIzM0O11gIOKAkyBUaGVzZSBhcmUgdGhlIG5lY2Vzc2FyeSBwcmVyZXF1aXNpdGVzLgoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aCYjMzQ7LCAmIzM0O3NjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydCYjMzQ7LCAmIzM0O3NjdHBfcmV0cmFuc21pdCYjMzQ7XWAg4oCTIGNvdmVyaW5nIHRoZSB2dWxuZXJhYmxlIGZ1bmN0aW9uIGFuZCBwb3RlbnRpYWxseSByZWxldmFudCBlbnRyeXBvaW50cy4KCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aCYjMzQ7LAogICAgJiMzNDtzY3RwX2Fzc29jX2Nob29zZV9hbHRlcl90cmFuc3BvcnQmIzM0OywKICAgICYjMzQ7c2N0cF9yZXRyYW5zbWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBkZXJlZmVyZW5jZSBidWcgaW4gU0NUUCB0cmFuc3BvcnQgcmV0cmFuc21pc3Npb24gcGF0aCBzZWxlY3Rpb24gKHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKS4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gbmV0L3NjdHAgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aCYjMzQ7LAogICAgJiMzNDtzY3RwX2Fzc29jX2Nob29zZV9hbHRlcl90cmFuc3BvcnQmIzM0OywKICAgICYjMzQ7c2N0cF9yZXRyYW5zbWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBkZXJlZmVyZW5jZSBidWcgaW4gU0NUUCB0cmFuc3BvcnQgcmV0cmFuc21pc3Npb24gcGF0aCBzZWxlY3Rpb24gKHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKS4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gbmV0L3NjdHAgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb29wIHRlcm1pbmF0aW9uIGFuZCBOVUxMIHBvaW50ZXIgYXNzaWdubWVudCBpc3N1ZSBpbiBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoKWAgYnkgZW5zdXJpbmcgdGhlIGxvb3AgdGVybWluYXRpb24gY2hlY2sgKGB0cmFucyA9PSBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGhgKSBpcyBleGVjdXRlZCBldmVuIHdoZW4gYSB0cmFuc3BvcnQgaXMgaW4gdGhlIGBTQ1RQX1VOQ09ORklSTUVEYCBzdGF0ZSwgYW5kIGd1YXJkaW5nIHRoZSBhc3NpZ25tZW50IHRvIGBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGhgIHdpdGggYSBudWxsIGNoZWNrLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgaXMgYSBjb250cm9sIGZsb3cgYW5kIHBvaW50ZXIgdmFsaWRhdGlvbiBmaXguIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgbG9naWMgKHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGxpc3QgdHJhdmVyc2FsIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg4Y2M4MDRkN2QyYjJiOWZkYWUxMzNmNWRmYzBiMzdhNTgwZjYwMjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDE0OjQxOjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwppbmRleCBjMDUxMmM4MjdkMGY1Li40NTIxYmUzYmQ4NWFhIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwpAQCAtMTI4OSwxOCAmIzQzOzEyODksMTkgQEAgdm9pZCBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKIAkJLyogTWFudWFsbHkgc2tpcCB0aGUgaGVhZCBlbGVtZW50LiAqLwogCQlpZiAoJmFtcDt0cmFucy0mZ3Q7dHJhbnNwb3J0cyA9PSAmYW1wO2Fzb2MtJmd0O3BlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCkKIAkJCWNvbnRpbnVlOwotCQlpZiAodHJhbnMtJmd0O3N0YXRlID09IFNDVFBfVU5DT05GSVJNRUQpCi0JCQljb250aW51ZTsKLQkJdHJhbnNfbmV4dCA9IHNjdHBfdHJhbnNfZWxlY3RfYmVzdCh0cmFucywgdHJhbnNfbmV4dCk7Ci0JCS8qIEFjdGl2ZSBpcyBnb29kIGVub3VnaCBmb3IgaW1tZWRpYXRlIHJldHVybi4gKi8KLQkJaWYgKHRyYW5zX25leHQtJmd0O3N0YXRlID09IFNDVFBfQUNUSVZFKQotCQkJYnJlYWs7CiYjNDM7CQlpZiAodHJhbnMtJmd0O3N0YXRlICE9IFNDVFBfVU5DT05GSVJNRUQpIHsKJiM0MzsJCQl0cmFuc19uZXh0ID0gc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFuc19uZXh0KTsKJiM0MzsJCQkvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovCiYjNDM7CQkJaWYgKHRyYW5zX25leHQtJmd0O3N0YXRlID09IFNDVFBfQUNUSVZFKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCX0KIAkJLyogV2UmIzM5O3ZlIHJlYWNoZWQgdGhlIGVuZCwgdGltZSB0byB1cGRhdGUgcGF0aC4gKi8KIAkJaWYgKHRyYW5zID09IGFzb2MtJmd0O3BlZXIucmV0cmFuX3BhdGgpCiAJCQlicmVhazsKIAl9CiAKLQlhc29jLSZndDtwZWVyLnJldHJhbl9wYXRoID0gdHJhbnNfbmV4dDsKJiM0MzsJaWYgKHRyYW5zX25leHQpCiYjNDM7CQlhc29jLSZndDtwZWVyLnJldHJhbl9wYXRoID0gdHJhbnNfbmV4dDsKIAogCXByX2RlYnVnKCYjMzQ7JXM6IGFzc29jaWF0aW9uOiVwIHVwZGF0ZWQgbmV3IHBhdGggdG8gYWRkcjolcElTcGNcbiYjMzQ7LAogCQkgX19mdW5jX18sIGFzb2MsICZhbXA7YXNvYy0mZ3Q7cGVlci5yZXRyYW5fcGF0aC0mZ3Q7aXBhZGRyLnNhKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNDVFAgUmV0cmFuc21pc3Npb24gUGF0aCBVcGRhdGUqKgoKT2theSwgc28gdGhlIHBhdGNoIGlzIG5lc3RsZWQgd2l0aGluIHRoZSBgbmV0L3NjdHAvYXNzb2Npb2xhLmNgIGZpbGUsIHNwZWNpZmljYWxseSBpbXBhY3RpbmcgdGhlIGBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aGAgZnVuY3Rpb24uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBmaXJzdCBtb3ZlIGlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGFuZCAqaG93KiBiZWhpbmQgdGhpcyBmdW5jdGlvbiBjYWxsLiBJJiMzOTtsbCBuZWVkIHRvIGdhaW4gYSBzb2xpZCBncmFzcCBvZiBpdHMgcHVycG9zZSBpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIFNDVFAgYXNzb2NpYXRpb24gbWFuYWdlbWVudC4KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgdXNlIGBncmVwcGVyYCAob3IgbWF5YmUgZXZlbiBqdXN0IGEgZ29vZCBvbGQgYHJlYWQtZmlsZWAgYW5kIGNhcmVmdWwgbmF2aWdhdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5KSB0byBxdWlja2x5IHB1bGwgdXAgYWxsIHRoZSBjYWxsIHNpdGVzIG9mIGBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aGAuIFRoYXQmIzM5O2xsIGJlIGNydWNpYWwuIFNlZWluZyB3aGVyZSBhbmQgd2hlbiB0aGlzIGZ1bmN0aW9uIGdldHMgaW52b2tlZCB3aWxsIGltbWVkaWF0ZWx5IGlsbHVtaW5hdGUgaXRzIHJvbGUgaW4gdGhlIHJldHJhbnNtaXNzaW9uIHBhdGggdXBkYXRlIHByb2Nlc3MuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHBhdGggZmFpbHVyZXM/IENvbmdlc3Rpb24gY29udHJvbCBhZGp1c3RtZW50cz8gQXNzb2NpYXRpb24gbGlmZXRpbWUgbWFpbnRlbmFuY2U/IEdyYXNwaW5nIHRoZSBjYWxsIGNvbnRleHQgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBpdCBoYXMgb24gdGhlIHdob2xlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9hc3NvY2lvbGEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI3MDpcdFxuMTI3MTpcdHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4xMjcyOlx0e1xuMTI3MzpcdFx0c3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFucyA9IGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aDtcbjEyNzQ6XHRcdHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNfbmV4dCA9IE5VTEw7XG4xMjc1Olx0XG4xMjc2Olx0XHQvKiBXZSYjMzk7cmUgZG9uZSBhcyB3ZSBvbmx5IGhhdmUgdGhlIG9uZSBhbmQgb25seSBwYXRoLiAqL1xuMTI3NzpcdFx0aWYgKGFzb2MtXHUwMDNlcGVlci50cmFuc3BvcnRfY291bnQgPT0gMSlcbjEyNzg6XHRcdFx0cmV0dXJuO1xuMTI3OTpcdFx0LyogSWYgYWN0aXZlX3BhdGggYW5kIHJldHJhbl9wYXRoIGFyZSB0aGUgc2FtZSBhbmQgYWN0aXZlLFxuMTI4MDpcdFx0ICogdGhlbiB0aGlzIGlzIHRoZSBvbmx5IGFjdGl2ZSBwYXRoLiBVc2UgaXQuXG4xMjgxOlx0XHQgKi9cbjEyODI6XHRcdGlmIChhc29jLVx1MDAzZXBlZXIuYWN0aXZlX3BhdGggPT0gYXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoIFx1MDAyNlx1MDAyNlxuMTI4MzpcdFx0ICAgIGFzb2MtXHUwMDNlcGVlci5hY3RpdmVfcGF0aC1cdTAwM2VzdGF0ZSA9PSBTQ1RQX0FDVElWRSlcbjEyODQ6XHRcdFx0cmV0dXJuO1xuMTI4NTpcdFxuMTI4NjpcdFx0LyogSXRlcmF0ZSBmcm9tIHJldHJhbl9wYXRoJiMzOTtzIHN1Y2Nlc3NvciBiYWNrIHRvIHJldHJhbl9wYXRoLiAqL1xuMTI4NzpcdFx0Zm9yICh0cmFucyA9IGxpc3RfbmV4dF9lbnRyeSh0cmFucywgdHJhbnNwb3J0cyk7IDE7XG4xMjg4Olx0XHQgICAgIHRyYW5zID0gbGlzdF9uZXh0X2VudHJ5KHRyYW5zLCB0cmFuc3BvcnRzKSkge1xuMTI4OTpcdFx0XHQvKiBNYW51YWxseSBza2lwIHRoZSBoZWFkIGVsZW1lbnQuICovXG4xMjkwOlx0XHRcdGlmIChcdTAwMjZ0cmFucy1cdTAwM2V0cmFuc3BvcnRzID09IFx1MDAyNmFzb2MtXHUwMDNlcGVlci50cmFuc3BvcnRfYWRkcl9saXN0KVxuMTI5MTpcdFx0XHRcdGNvbnRpbnVlO1xuMTI5MjpcdFx0XHRpZiAodHJhbnMtXHUwMDNlc3RhdGUgIT0gU0NUUF9VTkNPTkZJUk1FRCkge1xuMTI5MzpcdFx0XHRcdHRyYW5zX25leHQgPSBzY3RwX3RyYW5zX2VsZWN0X2Jlc3QodHJhbnMsIHRyYW5zX25leHQpO1xuMTI5NDpcdFx0XHRcdC8qIEFjdGl2ZSBpcyBnb29kIGVub3VnaCBmb3IgaW1tZWRpYXRlIHJldHVybi4gKi9cbjEyOTU6XHRcdFx0XHRpZiAodHJhbnNfbmV4dC1cdTAwM2VzdGF0ZSA9PSBTQ1RQX0FDVElWRSlcbjEyOTY6XHRcdFx0XHRcdGJyZWFrO1xuMTI5NzpcdFx0XHR9XG4xMjk4Olx0XHRcdC8qIFdlJiMzOTt2ZSByZWFjaGVkIHRoZSBlbmQsIHRpbWUgdG8gdXBkYXRlIHBhdGguICovXG4xMjk5Olx0XHRcdGlmICh0cmFucyA9PSBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGgpXG4xMzAwOlx0XHRcdFx0YnJlYWs7XG4xMzAxOlx0XHR9XG4xMzAyOlx0XG4xMzAzOlx0XHRpZiAodHJhbnNfbmV4dClcbjEzMDQ6XHRcdFx0YXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoID0gdHJhbnNfbmV4dDtcbjEzMDU6XHRcbjEzMDY6XHRcdHByX2RlYnVnKFwmIzM0OyVzOiBhc3NvY2lhdGlvbjolcCB1cGRhdGVkIG5ldyBwYXRoIHRvIGFkZHI6JXBJU3BjXFxuXCYjMzQ7LFxuMTMwNzpcdFx0XHQgX19mdW5jX18sIGFzb2MsIFx1MDAyNmFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aC1cdTAwM2VpcGFkZHIuc2EpO1xuMTMwODpcdH1cbjEzMDk6XHRcbjEzMTA6XHRzdGF0aWMgdm9pZCBzY3RwX3NlbGVjdF9hY3RpdmVfYW5kX3JldHJhbl9wYXRoKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuMTMxMTpcdHtcbjEzMTI6XHRcdHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnMsICp0cmFuc19wcmkgPSBOVUxMLCAqdHJhbnNfc2VjID0gTlVMTDtcbjEzMTM6XHRcdHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNfcGYgPSBOVUxMO1xuMTMxNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDcyCgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDc3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSZWFzb25pbmc6IFNDVFAgUmV0cmFuc21pc3Npb24gUGF0aCBTZWxlY3Rpb24gRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIGxvZ2ljIGZsYXcgaW4gdGhlIFNDVFAgcmV0cmFuc21pc3Npb24gcGF0aCBzZWxlY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHN1YnRsZSBpc3N1ZTogaWYgYWxsIHRyYW5zcG9ydHMgd2VyZSBpbiB0aGUgYFNDVFBfVU5DT05GSVJNRURgIHN0YXRlLCBvciBpZiB3ZSB3ZXJlIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kIHRoZSBjdXJyZW50IHJldHJhbnNtaXNzaW9uIHBhdGggd2FzIGFsc28gdW5jb25maXJtZWQsIHRoZSBvcmlnaW5hbCBsb29wJiMzOTtzIHN0cnVjdHVyZSBjb3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AuIFNwZWNpZmljYWxseSwgdGhlIGBjb250aW51ZWAgc3RhdGVtZW50IGluc2lkZSB0aGUgYFNDVFBfVU5DT05GSVJNRURgIGNoZWNrIHNraXBwZWQgdGhlIGVuZC1vZi1saXN0IGNoZWNrLiBJZiBhbGwgdHJhbnNwb3J0cyBvciB0aGUgY3VycmVudCB0cmFuc3BvcnQgd2FzIGBVTkNPTkZJUk1FRGAsIGl0IGNvdWxkIHJlc3VsdCBpbiBhbiBpbmZpbml0ZSBsb29wIG9yIGEgYE5VTExgIHBvaW50ZXIgZGVyZWZlcmVuY2UgbGF0ZXIuCgpUaGUgcGF0Y2gmIzM5O3Mgc29sdXRpb24gaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCBpbnZlcnRzIHRoZSBjb25kaXRpb25hbCBjaGVjayB0byAqb25seSogZXhlY3V0ZSB0aGUgYHNjdHBfdHJhbnNfZWxlY3RfYmVzdGAgc2VsZWN0aW9uIGFuZCBhY3RpdmUgc3RhdGUgY2hlY2sgKmlmKiB0aGUgdHJhbnNwb3J0IGlzICpub3QqIGBTQ1RQX1VOQ09ORklSTUVEYC4gVGhpcyBlbnN1cmVzIHRoYXQgd2UgcHJvY2VlZCB0byB1cGRhdGUgYHRyYW5zX25leHRgLCB0aGUgY2FuZGlkYXRlIGZvciB0aGUgcmV0cmFuc21pc3Npb24gcGF0aCwgb25seSB3aXRoIHZhbGlkIHRyYW5zcG9ydHMsIGFuZCBhbHNvIHRoYXQgd2UgaGl0IHRoZSBlbmQtb2YtbGlzdCBjaGVjayBhbmQgdXBkYXRlIHRoZSByZXRyYW5zbWlzc2lvbiBwYXRoIGNvcnJlY3RseS4gSXQgYWxzbyBub3cgbWFrZXMgc3VyZSB0aGF0IHdlIGRvbiYjMzk7dCBhc3NpZ24gYE5VTExgIHRvIHRoZSBgcmV0cmFuX3BhdGhgLCB3aGljaCBjb3VsZCByZXN1bHQgaW4gYSBzdWJzZXF1ZW50IGRlcmVmZXJlbmNlLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEtNU0FOLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZSAqbm8qIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSSYjMzk7dmUgZ29uZSBvdmVyIHRoZSBjb2RlIGNhcmVmdWxseS4KCiogICAqKk5vIG5ldyBhbGxvY2F0aW9ucyBvciBzdGFjayB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQuKiogV2UmIzM5O3JlIGp1c3QgbW9kaWZ5aW5nIGV4aXN0aW5nIHBvaW50ZXJzIGFuZCBzdGF0ZS4KKiAgICoqYHRyYW5zX25leHRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5VTExgLioqIFZlcnkgaW1wb3J0YW50LiBUaGlzIHJlbW92ZXMgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCByZWFkcy4KKiAgIGB0cmFuc2AgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgYGFzb2MtJmd0O3BlZXIudHJhbnNwb3J0X2FkZHJfbGlzdGAuIFRoYXQgbGlzdCBpcyBpbml0aWFsaXplZCwgYW5kIGB0cmFuc2AgaXMgYWx3YXlzIHZhbGlkLgoqICAgYHNjdHBfdHJhbnNfZWxlY3RfYmVzdGAgY29tcGFyZXMgZXhpc3RpbmcgdHJhbnNwb3J0IHN0cnVjdHVyZXMuIFRoaXMgaXMgYSBrbm93biBmdW5jdGlvbiwgYW5kIGlzIHNhZmUgZnJvbSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgYGFzb2MtJmd0O3BlZXIucmV0cmFuX3BhdGhgIGlzIG5vdyBvbmx5IHVwZGF0ZWQgaWYgYHRyYW5zX25leHRgIGlzIG5vbi1OVUxMLgoqICAgQ3JpdGljYWxseSwgdGhlcmUgaXMgKipubyoqIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIE5vIGRhdGEgY29waWVkIG9yIGxlYWtlZC4KKiAgIFRoaXMgaXMgYSBwdXJlIGxvZ2ljIGZpeC4KClNvLCBpbiBzaG9ydCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLiBUaGlzIHBhdGNoIHNpbXBseSBmaXhlcyBhIGNvbnRyb2wgZmxvdyBwcm9ibGVtLiBUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgdGhhdCBjb3VsZCByZXN1bHQgaW4gYW4gaW5maW5pdGUgbG9vcCBvciBgTlVMTGAgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgYW4gaW1wb3J0YW50IGNvcnJlY3RuZXNzIGZpeC4gSSYjMzk7bSBjZXJ0YWluIHRoYXQgdGhlIGxvZ2ljIGNoYW5nZSBwcmV2ZW50cyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBTdGFuZGFyZCBzYW5pdGl6ZXJzL0tBU0FOIHdvdWxkIGNhdGNoIGFueSBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsaXN0IGNvcnJ1cHRpb24gYnVncyB0aGF0IG1pZ2h0IGV4aXN0IGVsc2V3aGVyZSwgYnV0IHRoZXkgYXJlIG5vdCByZWxldmFudCB0byB0aGlzIGxvZ2ljIGNoYW5nZSwgYW5kIEkgc2VlIG5vIG5lZWQgdG8gcnVuIEtNU0FOLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvb3AgdGVybWluYXRpb24gYW5kIE5VTEwgcG9pbnRlciBhc3NpZ25tZW50IGlzc3VlIGluIGBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aCgpYCBieSBlbnN1cmluZyB0aGUgbG9vcCB0ZXJtaW5hdGlvbiBjaGVjayAoYHRyYW5zID09IGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aGApIGlzIGV4ZWN1dGVkIGV2ZW4gd2hlbiBhIHRyYW5zcG9ydCBpcyBpbiB0aGUgYFNDVFBfVU5DT05GSVJNRURgIHN0YXRlLCBhbmQgZ3VhcmRpbmcgdGhlIGFzc2lnbm1lbnQgdG8gYGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aGAgd2l0aCBhIG51bGwgY2hlY2suXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcG9pbnRlciB2YWxpZGF0aW9uIGZpeC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBsb2dpYyAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBwb2ludGVyIGFzc2lnbm1lbnQgaXNzdWUgaW4gYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKClgIGJ5IGVuc3VyaW5nIHRoZSBsb29wIHRlcm1pbmF0aW9uIGNoZWNrIChgdHJhbnMgPT0gYXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoYCkgaXMgZXhlY3V0ZWQgZXZlbiB3aGVuIGEgdHJhbnNwb3J0IGlzIGluIHRoZSBgU0NUUF9VTkNPTkZJUk1FRGAgc3RhdGUsIGFuZCBndWFyZGluZyB0aGUgYXNzaWdubWVudCB0byBgYXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoYCB3aXRoIGEgbnVsbCBjaGVjay5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGlzIGEgY29udHJvbCBmbG93IGFuZCBwb2ludGVyIHZhbGlkYXRpb24gZml4LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGxvZ2ljIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBsaXN0IHRyYXZlcnNhbCBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MTozMS4wNTE3MTY0MzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE3NjczMzYzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoXCIsXG4gICAgXCJzY3RwX2Fzc29jX2Nob29zZV9hbHRlcl90cmFuc3BvcnRcIixcbiAgICBcInNjdHBfcmV0cmFuc21pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb29wIHRlcm1pbmF0aW9uIGFuZCBOVUxMIHBvaW50ZXIgYXNzaWdubWVudCBpc3N1ZSBpbiBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoKWAgYnkgZW5zdXJpbmcgdGhlIGxvb3AgdGVybWluYXRpb24gY2hlY2sgKGB0cmFucyA9PSBhc29jLVxcdTAwM2VwZWVyLnJldHJhbl9wYXRoYCkgaXMgZXhlY3V0ZWQgZXZlbiB3aGVuIGEgdHJhbnNwb3J0IGlzIGluIHRoZSBgU0NUUF9VTkNPTkZJUk1FRGAgc3RhdGUsIGFuZCBndWFyZGluZyB0aGUgYXNzaWdubWVudCB0byBgYXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aGAgd2l0aCBhIG51bGwgY2hlY2suXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGlzIGEgY29udHJvbCBmbG93IGFuZCBwb2ludGVyIHZhbGlkYXRpb24gZml4LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGxvZ2ljIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBsaXN0IHRyYXZlcnNhbCBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBkZXJlZmVyZW5jZSBidWcgaW4gU0NUUCB0cmFuc3BvcnQgcmV0cmFuc21pc3Npb24gcGF0aCBzZWxlY3Rpb24gKHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKS4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gbmV0L3NjdHAgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MTozMS4wNTE3MjE5OTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Njc5MTEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg4Y2M4MDRkN2QyYjJiOWZkYWUxMzNmNWRmYzBiMzdhNTgwZjYwMjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAxNDo0MTozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hc3NvY2lvbGEuYyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jXFxuaW5kZXggYzA1MTJjODI3ZDBmNS4uNDUyMWJlM2JkODVhYSAxMDA2NDRcXG4tLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuY1xcbisrKyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jXFxuQEAgLTEyODksMTggKzEyODksMTkgQEAgdm9pZCBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcXG4gXFx0XFx0LyogTWFudWFsbHkgc2tpcCB0aGUgaGVhZCBlbGVtZW50LiAqL1xcbiBcXHRcXHRpZiAoXFx1MDAyNnRyYW5zLVxcdTAwM2V0cmFuc3BvcnRzID09IFxcdTAwMjZhc29jLVxcdTAwM2VwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAodHJhbnMtXFx1MDAzZXN0YXRlID09IFNDVFBfVU5DT05GSVJNRUQpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR0cmFuc19uZXh0ID0gc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFuc19uZXh0KTtcXG4tXFx0XFx0LyogQWN0aXZlIGlzIGdvb2QgZW5vdWdoIGZvciBpbW1lZGlhdGUgcmV0dXJuLiAqL1xcbi1cXHRcXHRpZiAodHJhbnNfbmV4dC1cXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAodHJhbnMtXFx1MDAzZXN0YXRlICE9IFNDVFBfVU5DT05GSVJNRUQpIHtcXG4rXFx0XFx0XFx0dHJhbnNfbmV4dCA9IHNjdHBfdHJhbnNfZWxlY3RfYmVzdCh0cmFucywgdHJhbnNfbmV4dCk7XFxuK1xcdFxcdFxcdC8qIEFjdGl2ZSBpcyBnb29kIGVub3VnaCBmb3IgaW1tZWRpYXRlIHJldHVybi4gKi9cXG4rXFx0XFx0XFx0aWYgKHRyYW5zX25leHQtXFx1MDAzZXN0YXRlID09IFNDVFBfQUNUSVZFKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbiBcXHRcXHQvKiBXZSd2ZSByZWFjaGVkIHRoZSBlbmQsIHRpbWUgdG8gdXBkYXRlIHBhdGguICovXFxuIFxcdFxcdGlmICh0cmFucyA9PSBhc29jLVxcdTAwM2VwZWVyLnJldHJhbl9wYXRoKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4tXFx0YXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7XFxuK1xcdGlmICh0cmFuc19uZXh0KVxcbitcXHRcXHRhc29jLVxcdTAwM2VwZWVyLnJldHJhbl9wYXRoID0gdHJhbnNfbmV4dDtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCIlczogYXNzb2NpYXRpb246JXAgdXBkYXRlZCBuZXcgcGF0aCB0byBhZGRyOiVwSVNwY1xcXFxuXFxcIixcXG4gXFx0XFx0IF9fZnVuY19fLCBhc29jLCBcXHUwMDI2YXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aC1cXHUwMDNlaXBhZGRyLnNhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6NDE6MzEuNDk5Mjc3NDU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMDYyMDQxNzc2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoXCIsXG4gICAgXCJzY3RwX2Fzc29jX2Nob29zZV9hbHRlcl90cmFuc3BvcnRcIixcbiAgICBcInNjdHBfcmV0cmFuc21pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBkZXJlZmVyZW5jZSBidWcgaW4gU0NUUCB0cmFuc3BvcnQgcmV0cmFuc21pc3Npb24gcGF0aCBzZWxlY3Rpb24gKHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKS4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gbmV0L3NjdHAgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OGNjODA0ZDdkMmIyYjlmZGFlMTMzZjVkZmMwYjM3YTU4MGY2MDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNDo0MTozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2Fzc29jaW9sYS5jIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmNcbmluZGV4IGMwNTEyYzgyN2QwZjUuLjQ1MjFiZTNiZDg1YWEgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuY1xuKysrIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmNcbkBAIC0xMjg5LDE4ICsxMjg5LDE5IEBAIHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4gXHRcdC8qIE1hbnVhbGx5IHNraXAgdGhlIGhlYWQgZWxlbWVudC4gKi9cbiBcdFx0aWYgKFx1MDAyNnRyYW5zLVx1MDAzZXRyYW5zcG9ydHMgPT0gXHUwMDI2YXNvYy1cdTAwM2VwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICh0cmFucy1cdTAwM2VzdGF0ZSA9PSBTQ1RQX1VOQ09ORklSTUVEKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR0cmFuc19uZXh0ID0gc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFuc19uZXh0KTtcbi1cdFx0LyogQWN0aXZlIGlzIGdvb2QgZW5vdWdoIGZvciBpbW1lZGlhdGUgcmV0dXJuLiAqL1xuLVx0XHRpZiAodHJhbnNfbmV4dC1cdTAwM2VzdGF0ZSA9PSBTQ1RQX0FDVElWRSlcbi1cdFx0XHRicmVhaztcbitcdFx0aWYgKHRyYW5zLVx1MDAzZXN0YXRlICE9IFNDVFBfVU5DT05GSVJNRUQpIHtcbitcdFx0XHR0cmFuc19uZXh0ID0gc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFuc19uZXh0KTtcbitcdFx0XHQvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovXG4rXHRcdFx0aWYgKHRyYW5zX25leHQtXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0XHQvKiBXZSd2ZSByZWFjaGVkIHRoZSBlbmQsIHRpbWUgdG8gdXBkYXRlIHBhdGguICovXG4gXHRcdGlmICh0cmFucyA9PSBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGgpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGggPSB0cmFuc19uZXh0O1xuK1x0aWYgKHRyYW5zX25leHQpXG4rXHRcdGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7XG4gXG4gXHRwcl9kZWJ1ZyhcIiVzOiBhc3NvY2lhdGlvbjolcCB1cGRhdGVkIG5ldyBwYXRoIHRvIGFkZHI6JXBJU3BjXFxuXCIsXG4gXHRcdCBfX2Z1bmNfXywgYXNvYywgXHUwMDI2YXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoLVx1MDAzZWlwYWRkci5zYSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MTozMS40OTkyNzg4NDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzIyODI0NTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNDVFAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYG5ldC9zY3RwL2Fzc29jaW9sYS5jYCwgcGFydGljdWxhcmx5IHRoZSBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoKWAgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBjaGFuZ2luZyB0aGVyZS4gQW5kIHNpbmNlIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgY29uZmlndXJhdGlvbiwgSSdsbCB0YWtlIGEgbG9vayBhdCBgbmV0L3NjdHAvS2NvbmZpZ2AgYXMgd2VsbCwganVzdCBpbiBjYXNlIHRoZXJlIGFyZSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi5cblxuVG8gZ2V0IHRoZSBtb3N0IHJlbGV2YW50IGNvbnRleHQgYXJvdW5kIHRoZSBjb2RlIGNoYW5nZXMsIEknbGwgdXNlIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gemVybyBpbiBvbiBsaW5lIDEyODkgaW4gYG5ldC9zY3RwL2Fzc29jaW9sYS5jYC4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY29kZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIHRoaXMgbW9kaWZpY2F0aW9uLiBUaGlzIGFwcHJvYWNoIHdpbGwgYWxsb3cgbWUgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaCB3aXRoaW4gdGhlIGJyb2FkZXIgZnVuY3Rpb24gbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MjozNC43Mjc1Mjg1NzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvYXNzb2Npb2xhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI3MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI3MDpcXHRcXG4xMjcxOlxcdHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuMTI3MjpcXHR7XFxuMTI3MzpcXHRcXHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zID0gYXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aDtcXG4xMjc0OlxcdFxcdHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNfbmV4dCA9IE5VTEw7XFxuMTI3NTpcXHRcXG4xMjc2OlxcdFxcdC8qIFdlJ3JlIGRvbmUgYXMgd2Ugb25seSBoYXZlIHRoZSBvbmUgYW5kIG9ubHkgcGF0aC4gKi9cXG4xMjc3OlxcdFxcdGlmIChhc29jLVxcdTAwM2VwZWVyLnRyYW5zcG9ydF9jb3VudCA9PSAxKVxcbjEyNzg6XFx0XFx0XFx0cmV0dXJuO1xcbjEyNzk6XFx0XFx0LyogSWYgYWN0aXZlX3BhdGggYW5kIHJldHJhbl9wYXRoIGFyZSB0aGUgc2FtZSBhbmQgYWN0aXZlLFxcbjEyODA6XFx0XFx0ICogdGhlbiB0aGlzIGlzIHRoZSBvbmx5IGFjdGl2ZSBwYXRoLiBVc2UgaXQuXFxuMTI4MTpcXHRcXHQgKi9cXG4xMjgyOlxcdFxcdGlmIChhc29jLVxcdTAwM2VwZWVyLmFjdGl2ZV9wYXRoID09IGFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGggXFx1MDAyNlxcdTAwMjZcXG4xMjgzOlxcdFxcdCAgICBhc29jLVxcdTAwM2VwZWVyLmFjdGl2ZV9wYXRoLVxcdTAwM2VzdGF0ZSA9PSBTQ1RQX0FDVElWRSlcXG4xMjg0OlxcdFxcdFxcdHJldHVybjtcXG4xMjg1OlxcdFxcbjEyODY6XFx0XFx0LyogSXRlcmF0ZSBmcm9tIHJldHJhbl9wYXRoJ3Mgc3VjY2Vzc29yIGJhY2sgdG8gcmV0cmFuX3BhdGguICovXFxuMTI4NzpcXHRcXHRmb3IgKHRyYW5zID0gbGlzdF9uZXh0X2VudHJ5KHRyYW5zLCB0cmFuc3BvcnRzKTsgMTtcXG4xMjg4OlxcdFxcdCAgICAgdHJhbnMgPSBsaXN0X25leHRfZW50cnkodHJhbnMsIHRyYW5zcG9ydHMpKSB7XFxuMTI4OTpcXHRcXHRcXHQvKiBNYW51YWxseSBza2lwIHRoZSBoZWFkIGVsZW1lbnQuICovXFxuMTI5MDpcXHRcXHRcXHRpZiAoXFx1MDAyNnRyYW5zLVxcdTAwM2V0cmFuc3BvcnRzID09IFxcdTAwMjZhc29jLVxcdTAwM2VwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpXFxuMTI5MTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjkyOlxcdFxcdFxcdGlmICh0cmFucy1cXHUwMDNlc3RhdGUgIT0gU0NUUF9VTkNPTkZJUk1FRCkge1xcbjEyOTM6XFx0XFx0XFx0XFx0dHJhbnNfbmV4dCA9IHNjdHBfdHJhbnNfZWxlY3RfYmVzdCh0cmFucywgdHJhbnNfbmV4dCk7XFxuMTI5NDpcXHRcXHRcXHRcXHQvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovXFxuMTI5NTpcXHRcXHRcXHRcXHRpZiAodHJhbnNfbmV4dC1cXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXFxuMTI5NjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMjk3OlxcdFxcdFxcdH1cXG4xMjk4OlxcdFxcdFxcdC8qIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCwgdGltZSB0byB1cGRhdGUgcGF0aC4gKi9cXG4xMjk5OlxcdFxcdFxcdGlmICh0cmFucyA9PSBhc29jLVxcdTAwM2VwZWVyLnJldHJhbl9wYXRoKVxcbjEzMDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTMwMTpcXHRcXHR9XFxuMTMwMjpcXHRcXG4xMzAzOlxcdFxcdGlmICh0cmFuc19uZXh0KVxcbjEzMDQ6XFx0XFx0XFx0YXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7XFxuMTMwNTpcXHRcXG4xMzA2OlxcdFxcdHByX2RlYnVnKFxcXCIlczogYXNzb2NpYXRpb246JXAgdXBkYXRlZCBuZXcgcGF0aCB0byBhZGRyOiVwSVNwY1xcXFxuXFxcIixcXG4xMzA3OlxcdFxcdFxcdCBfX2Z1bmNfXywgYXNvYywgXFx1MDAyNmFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGgtXFx1MDAzZWlwYWRkci5zYSk7XFxuMTMwODpcXHR9XFxuMTMwOTpcXHRcXG4xMzEwOlxcdHN0YXRpYyB2b2lkIHNjdHBfc2VsZWN0X2FjdGl2ZV9hbmRfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuMTMxMTpcXHR7XFxuMTMxMjpcXHRcXHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zLCAqdHJhbnNfcHJpID0gTlVMTCwgKnRyYW5zX3NlYyA9IE5VTEw7XFxuMTMxMzpcXHRcXHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zX3BmID0gTlVMTDtcXG4xMzE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MjozNC43Mjc2NDc1MDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDUwMDE2Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJldHJhbnNtaXNzaW9uIFBhdGggQnVnIGluIFNDVFAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoYCBhZGRyZXNzZXMgYSBuYXN0eSBmbGF3LiBBcHBhcmVudGx5LCB0aGVyZSdzIGEgc2NlbmFyaW8gd2hlcmUgYGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aGAg4oCTIHdoaWNoIEkgcmVjb2duaXplIGFzIHRoZSByZXRyYW5zbWlzc2lvbiBwYXRoIGZvciBhbiBTQ1RQIGFzc29jaWF0aW9uIOKAkyBjb3VsZCBlbmQgdXAgcG9pbnRpbmcgdG8gYE5VTExgLiBPciwgZXZlbiB3b3JzZSwgaWYgYWxsIHRoZSB0cmFuc3BvcnRzIGFyZSBpbiBhbiBgU0NUUF9VTkNPTkZJUk1FRGAgc3RhdGUsIGB0cmFuc19uZXh0YCBjb3VsZCBiZSBgTlVMTGAuXG5cblRoZSByb290IG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIGEgc3VidGxlIGxvZ2ljIGVycm9yIGluIHRoZSBvcmlnaW5hbCBjb2RlLiBJIHNlZSBpdCBub3c6IHRoZSBjb25kaXRpb25hbCBgaWYgKHRyYW5zLVx1MDAzZXN0YXRlID09IFNDVFBfVU5DT05GSVJNRUQpIGNvbnRpbnVlO2AgZm9sbG93ZWQgYnkgYGlmICh0cmFucyA9PSBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGgpIGJyZWFrO2AgLSB3YWl0IGEgbWludXRlISBJZiBgdHJhbnNgICppcyogdGhlIHJldHJhbnNtaXNzaW9uIHBhdGggKmFuZCogaXQncyBgU0NUUF9VTkNPTkZJUk1FRGAsIHRoYXQgYGNvbnRpbnVlYCBzdGF0ZW1lbnQgd291bGQgc2tpcCB0aGUgYGJyZWFrYCBjb25kaXRpb24sIGxlYWRpbmcgdG8gYW4gaW5maW5pdGUgbG9vcCEgQW5kIGV2ZW4gd29yc2UsIGlmIGB0cmFuc19uZXh0YCBpcyBgTlVMTGAgaXQgY291bGQgY2F1c2UgYSBuYXN0eSBOVUxMIGRlcmVmZXJlbmNlIGxhdGVyIG9uIGF0IGBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGggPSB0cmFuc19uZXh0YCEgVGhhdCdzIGEgY2xhc3NpYyBtaXN0YWtlLiBJJ3ZlIGJlZW4gdGhlcmUgbXlzZWxmLiBBbmQgaXQgY291bGQgdGhlbiBjYXVzZSBhbm90aGVyIE5VTEwgZGVyZWZlcmVuY2UgYnkgdHJ5aW5nIHRvIGFjY2VzcyBzb21ldGhpbmcgbGlrZSBgYXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoLVx1MDAzZWlwYWRkci5zYWAgaW4gc29tZXRoaW5nIGxpa2UgYSBgcHJfZGVidWdgLiBVZ2guXG5cbk5vdywgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LCBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoYCBpcyBhY3R1YWxseSBjYWxsZWQuIEdvdHRhIGNoZWNrIHRoZSBjYWxsIHNpdGVzIHRocm91Z2hvdXQgdGhlIFNDVFAgY29kZWJhc2UgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZWFsLXdvcmxkIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDY1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6NDI6MzguMTc3NjY4Mjc0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODc4NTE5NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmg9MjExNz1zdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydChcXG5pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaC0yMTE4LVxcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqKTtcXG5pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaDoyMTE5OnZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7XFxuaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgtMjEyMC1zdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnNjdHBfYXNzb2NfbG9va3VwX3BhZGRyKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosXFxuLS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYz00ODI9dm9pZCBzY3RwX2Fzc29jX3JtX3BlZXIoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYy00OTUtXFx0aWYgKGFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGggPT0gcGVlcilcXG5uZXQvc2N0cC9hc3NvY2lvbGEuYzo0OTY6XFx0XFx0c2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoYXNvYyk7XFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtNDk3LVxcbi0tXFxubmV0L3NjdHAvYXNzb2Npb2xhLmM9MTI0OD1zdGF0aWMgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpzY3RwX3RyYW5zX2VsZWN0X2Jlc3Qoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpjdXJyLFxcbi0tXFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtMTI3MC1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYzoxMjcxOnZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtMTI3Mi17XFxuLS1cXG5uZXQvc2N0cC9hc3NvY2lvbGEuYz0xMzc4PXNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTEzODgtXFx0XFx0aWYgKGxhc3Rfc2VudF90byA9PSBhc29jLVxcdTAwM2VwZWVyLnJldHJhbl9wYXRoKVxcbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjEzODk6XFx0XFx0XFx0c2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoYXNvYyk7XFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtMTM5MC1cXG4tLVxcbm5ldC9zY3RwL291dHF1ZXVlLmM9NTM3PXZvaWQgc2N0cF9yZXRyYW5zbWl0KHN0cnVjdCBzY3RwX291dHEgKnEsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxcbi0tXFxubmV0L3NjdHAvb3V0cXVldWUuYy01NDktXFx0XFx0aWYgKHRyYW5zcG9ydCA9PSB0cmFuc3BvcnQtXFx1MDAzZWFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGgpXFxubmV0L3NjdHAvb3V0cXVldWUuYzo1NTA6XFx0XFx0XFx0c2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgodHJhbnNwb3J0LVxcdTAwM2Vhc29jKTtcXG5uZXQvc2N0cC9vdXRxdWV1ZS5jLTU1MS1cXHRcXHR0cmFuc3BvcnQtXFx1MDAzZWFzb2MtXFx1MDAzZXJ0eF9kYXRhX2NodW5rcyArPVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0Mjo0MC4zNjU1MjcxOTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjk2MzkxNjMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFNDVFAgTGFuZHNjYXBlOiBBIEtjb25maWcgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gbWFrZSBzdXJlIFNDVFAgaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBmaWxlcy4gSXQncyB0aGUgZmlyc3Qgc3RlcCBpbiBlbnN1cmluZyBhIHJlbGlhYmxlIFNDVFAgaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgZW5hYmxlZCwgY29uc2lkZXJpbmcgYW55IGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgZmVhdHVyZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSB1c2VyLXNwYWNlIHZzLiBrZXJuZWwtc3BhY2UgYXNwZWN0cy4gQXJlIHRoZSBuZWNlc3NhcnkgU0NUUCBtb2R1bGVzIGJlaW5nIGJ1aWx0PyBJcyB0aGUgc3RhY2sgaW50ZWdyYXRlZCBwcm9wZXJseT8gQSB0aG9yb3VnaCBzY2FuIG9mIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgd2lsbCBxdWlja2x5IGNsYXJpZnkgdGhlIHN5c3RlbSdzIGN1cnJlbnQgc3RhbmNlIG9uIFNDVFAgc3VwcG9ydCBhbmQgdW5jb3ZlciBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gaXNzdWVzLCBiZWZvcmUgSSBzdGFydCBpbnRlZ3JhdGluZyBhbnl0aGluZyBuZXcuIFRoaXMgcHJlbGltaW5hcnkgY2hlY2sgc2hvdWxkIHByb3ZpZGUgYSByZWxpYWJsZSBiYXNpcyBmb3IgcHJvY2VlZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgxOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjQyOjUzLjMyOTQ0NjA3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODAzNDEwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfU0NUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9LY29uZmlnLTUtXFxubmV0L3NjdHAvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBfU0NUUFxcbm5ldC9zY3RwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVGhlIFNDVFAgUHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjQyOjUzLjM3NzQ5MTE2NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1MzA0MTMwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBuZXQvc2N0cC9LY29uZmlnYCBmaWxlOlxuXG4qKkFuYWx5emluZyB0aGUgU0NUUCBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvc2N0cC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFNDVFAgKFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgYXJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBLY29uZmlnIGNvbnZlbnRpb25zIGhlcmUg4oCTIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSwgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzLiBUaGUgZ29hbCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvcHRpb25zIGNvbnRyb2wgU0NUUCdzIGZlYXR1cmVzLCBhbmQgaG93IHRoZXkgaW1wYWN0IHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqQ29yZSBFbmFibGVtZW50OioqIFRoZSB0b3AtbGV2ZWwgb3B0aW9uIHRvIGVuYWJsZSBvciBkaXNhYmxlIFNDVFAgZW50aXJlbHkuXG4qICAgKipGZWF0dXJlIEZsYWdzOioqIEluZGl2aWR1YWwgb3B0aW9ucyBjb250cm9sbGluZyBzcGVjaWZpYyBTQ1RQIGZlYXR1cmVzIGxpa2UgbXVsdGktaG9taW5nLCBkeW5hbWljIGFkZHJlc3MgY29uZmlndXJhdGlvbiwgc3RyZWFtIHNlcXVlbmNpbmcsIGFuZCBhbnkgZXh0ZW5zaW9ucyBsaWtlIEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uIChFQ04pIHN1cHBvcnQsIG9yIFVzZXIgRGF0YWdyYW0gUHJvdG9jb2wgKFVEUCkgZW5jYXBzdWxhdGlvbi5cbiogICAqKkRlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIGZlYXR1cmVzIGRvZXMgU0NUUCBkZXBlbmQgb24/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMgb24sIHNheSwgbmV0d29ya2luZyBzdGFjayBjb21wb25lbnRzIG9yIHNlY3VyaXR5IGZlYXR1cmVzPyBBbmQgd2hhdCBhYm91dCBidWlsZCBkZXBlbmRlbmNpZXMsIG1ha2luZyBzdXJlIGFsbCB0aGUgbmVlZGVkIG1vZHVsZXMgYXJlIGJ1aWx0LlxuKiAgICoqRGVmYXVsdCBWYWx1ZXM6KiogVW5kZXJzdGFuZGluZyB0aGUgZGVmYXVsdCBzZXR0aW5ncyBpcyBjcnVjaWFsLiBBcmUgdGhleSBzZW5zaWJsZSBmb3IgZ2VuZXJhbCB1c2UsIG9yIGFyZSB0aGVyZSBzcGVjaWZpYyBzY2VuYXJpb3Mgd2hlcmUgSSBtaWdodCBuZWVkIHRvIGFkanVzdCB0aGVtPyBPZnRlbiB0aGUgZGVmYXVsdCBmb3IgbW9kdWxlcyBpcyBgbWAsIHNvIHRoZXkncmUgYnVpbHQgYXMgbG9hZGFibGUgbW9kdWxlcy5cbiogICAqKkhlbHAgVGV4dDoqKiBUaGlzIHNob3VsZCBwcm92aWRlIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgZWFjaCBvcHRpb24uIFRoZSBoZWxwIHRleHQncyBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIGFyZSBrZXkgaW5kaWNhdG9ycyBvZiB0aGUgcXVhbGl0eSBvZiB0aGUgS2NvbmZpZyBmaWxlIGl0c2VsZi4gSSdsbCBiZSBjb21wYXJpbmcgaXQgdG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi5cbiogICAqKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uOioqIEknbGwgYmUgbG9va2luZyBmb3IgYW55IG9wdGlvbnMgdGhhdCBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBDUFUsIG9yIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhhdCBtaWdodCBpbmZsdWVuY2UgaXRzIGltcGFjdCBvbiBwb3dlci5cbiogICAqKlNlY3VyaXR5IENvbnNpZGVyYXRpb25zOioqIEhhcyB0aGUgS2NvbmZpZyBmaWxlIGFkZHJlc3NlZCBzZWN1cml0eS1yZWxhdGVkIGFzcGVjdHM/IEFyZSB0aGVyZSBvcHRpb25zIHJlbGF0ZWQgdG8gSVBzZWMsIFRMUywgb3IgYW55IGhhcmRlbmluZyBmZWF0dXJlcz8gQXJlIHRoZXJlIGFueSBvcHRpb25zIHRvIHN1cHBvcnQgaGFyZGVuaW5nLCBvciBkaXNhYmxpbmcgZnVuY3Rpb25zIHRvIHJlZHVjZSB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cblVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgbWVudGFsIHBpY3R1cmUgb2YgaG93IFNDVFAgaXMgY29uZmlndXJlZCBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgTGludXgga2VybmVsIG5ldHdvcmtpbmcgZnJhbWV3b3JrLiBJJ2xsIGJlIG5vdGluZyBhbnkgYXJlYXMgdGhhdCBhcmUgdW5jbGVhciwgb3IgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgaW1wcm92ZW1lbnRzIHRoYXQgSSBjYW4gaWRlbnRpZnkgYXMgSSBnbyB0aHJvdWdoIHRoZSBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTE4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6NDI6NTguOTA3OTA2NDk2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczOTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY3RwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgU0NUUCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgSVBfU0NUUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBTQ1RQIFByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4gIDExOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXFxuICAxMjpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTM6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIEZyb20gUkZDIDI5NjAgXFx1MDAzY2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI5NjAudHh0XFx1MDAzZS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBcXFwiU0NUUCBpcyBhIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2NvbCBvcGVyYXRpbmcgb24gdG9wIG9mIGFcXG4gIDIwOlxcdFxcdCAgY29ubmVjdGlvbmxlc3MgcGFja2V0IG5ldHdvcmsgc3VjaCBhcyBJUC4gIEl0IG9mZmVycyB0aGUgZm9sbG93aW5nXFxuICAyMTpcXHRcXHQgIHNlcnZpY2VzIHRvIGl0cyB1c2VyczpcXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0ICAtLSBhY2tub3dsZWRnZWQgZXJyb3ItZnJlZSBub24tZHVwbGljYXRlZCB0cmFuc2ZlciBvZiB1c2VyIGRhdGEsXFxuICAyNDpcXHRcXHQgIC0tIGRhdGEgZnJhZ21lbnRhdGlvbiB0byBjb25mb3JtIHRvIGRpc2NvdmVyZWQgcGF0aCBNVFUgc2l6ZSxcXG4gIDI1OlxcdFxcdCAgLS0gc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIHVzZXIgbWVzc2FnZXMgd2l0aGluIG11bHRpcGxlIHN0cmVhbXMsXFxuICAyNjpcXHRcXHQgIHdpdGggYW4gb3B0aW9uIGZvciBvcmRlci1vZi1hcnJpdmFsIGRlbGl2ZXJ5IG9mIGluZGl2aWR1YWwgdXNlclxcbiAgMjc6XFx0XFx0ICBtZXNzYWdlcyxcXG4gIDI4OlxcdFxcdCAgLS0gb3B0aW9uYWwgYnVuZGxpbmcgb2YgbXVsdGlwbGUgdXNlciBtZXNzYWdlcyBpbnRvIGEgc2luZ2xlIFNDVFBcXG4gIDI5OlxcdFxcdCAgcGFja2V0LCBhbmRcXG4gIDMwOlxcdFxcdCAgLS0gbmV0d29yay1sZXZlbCBmYXVsdCB0b2xlcmFuY2UgdGhyb3VnaCBzdXBwb3J0aW5nIG9mIG11bHRpLVxcbiAgMzE6XFx0XFx0ICBob21pbmcgYXQgZWl0aGVyIG9yIGJvdGggZW5kcyBvZiBhbiBhc3NvY2lhdGlvbi5cXFwiXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIHByb3RvY29sIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMzQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2N0cC4gRGVidWcgbWVzc2FnZXMgYXJlIGhhbmRsZWQgYnkgdGhlXFxuICAzNTpcXHRcXHQgIGtlcm5lbCdzIGR5bmFtaWMgZGVidWdnaW5nIGZyYW1ld29yay5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXFxuICAzODpcXHRcXG4gIDM5OlxcdGlmIElQX1NDVFBcXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0Mjo1OC45MDc5ODI4ODVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEyMzU1NTI3NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgYG5ldC9zY3RwL01ha2VmaWxlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBhc3NvY2lvbGEuY2AgZ2V0cyBwcm9wZXJseSBjb21waWxlZCB3aGVuZXZlciBgQ09ORklHX0lQX1NDVFBgIGlzIGVuYWJsZWQuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwLCBhbmQgaWYgdGhhdCBkb2Vzbid0IGhhcHBlbiwgd2UncmUgZ29pbmcgdG8gaGF2ZSBzb21lIHJlYWwgcHJvYmxlbXMuIFRoaXMgaXMgYSBjcml0aWNhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgYW5kIG5lZWRzIHRvIGJlIHZlcmlmaWVkLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIGFsbCBzcXVhcmVkIGF3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjQzOjEwLjE0MzUzODI0OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MTI2MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXNzb2Npb2xhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL01ha2VmaWxlPTk9c2N0cC15IDo9IHNtX3N0YXRldGFibGUubyBzbV9zdGF0ZWZ1bnMubyBzbV9zaWRlZWZmZWN0Lm8gXFxcXFxcbm5ldC9zY3RwL01ha2VmaWxlOjEwOlxcdCAgcHJvdG9jb2wubyBlbmRwb2ludG9sYS5vIGFzc29jaW9sYS5vIFxcXFxcXG5uZXQvc2N0cC9NYWtlZmlsZS0xMS1cXHQgIHRyYW5zcG9ydC5vIGNodW5rLm8gc21fbWFrZV9jaHVuay5vIHVscGV2ZW50Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MzoxMC4xODk0NTc0NDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQyNzg0NzE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBJUF9TQ1RQKipcblxuT2theSwgbGV0J3MgYXNzZXNzIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBoZXJlLiBgSVBfU0NUUGAgZGVwZW5kcyBvbiBgSU5FVGAsIGFuZCBteSBpbml0aWFsIGluc3RpbmN0IHNheXMgeWVzLCB0aGlzIGlzIGEgdGFyZ2V0IHdvcnRoIHB1cnN1aW5nLiBTQ1RQIGlzIGEgZnVuZGFtZW50YWwgbmV0d29ya2luZyBwcm90b2NvbCwgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc29ja2V0cyB1c2luZyBgQUZfSU5FVGAsIGBTT0NLX1NFUVBBQ0tFVGAsIG9yIGBTT0NLX1NUUkVBTWAsIGFuZCBgSVBQUk9UT19TQ1RQYC4gSW1wb3J0YW50bHksIHN5emthbGxlciBoZWF2aWx5IHV0aWxpemVzIGl0LCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGluZGljYXRvci5cblxuVGhpcyBwYXJ0aWN1bGFyIHBhdGNoIGFkZHJlc3NlcyBhbiBpbmZpbml0ZSBsb29wL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aXRoaW4gYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKClgLiBUaW1lIHRvIGV4YW1pbmUgdGhhdCBmdW5jdGlvbiBtb3JlIGNsb3NlbHkuIEl0J3MgYSBub24tc3RhdGljLCBleHBvcnRlZCBmdW5jdGlvbjogYHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpYC4gSSBzaG91bGQgYWxzbyBsb29rIGF0IG90aGVyIHJlbGV2YW50IGVudHJ5cG9pbnRzOyB0aGUgY2FsbGVycyBhcmUgYHNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydGAsIGBzY3RwX3JldHJhbnNtaXRgLCBhbmQgYHNjdHBfYXNzb2Nfcm1fcGVlcmAuXG5cbk5vdywgSSdsbCBxdWlja2x5IGNoZWNrIGBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aGAgaW4gYEZvY3VzU3ltYm9sc2AsIGFuZCB0aGVuIEknbGwgbWFrZSBzdXJlIHRob3NlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBhcmUgYWxzbyBvbiB0aGUgbGlzdDogYHNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydGAgYW5kIGBzY3RwX3JldHJhbnNtaXRgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEl0IGxvb2tzIGxpa2Ugd2UgbmVlZCBgSVBfU0NUUGAgKHdoaWNoLCBhcyBleHBlY3RlZCwgZGVwZW5kcyBvbiBgSU5FVGApLiBMZXQncyBlbnN1cmUgdGhvc2UgY29uZmlncyBhcmUgZW5hYmxlZC5cblxuT2theSwgbGV0J3MgcnVuIGEgZmluYWwgZG91YmxlLWNoZWNrIG9mIGV2ZXJ5dGhpbmcgYW5kIGZpbGwgaW4gdGhlIHNldC1yZXN1bHRzIHRvb2wuXG5cbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZSDigJMgVGhpcyBmaXhlcyBhIGNyaXRpY2FsIHZ1bG5lcmFiaWxpdHksIGFuIGluZmluaXRlIGxvb3AvTlVMTCBkZXJlZmVyZW5jZSwgd2l0aGluIGFuIFNDVFAgYXNzb2NpYXRpb24gdHJhbnNwb3J0IGl0ZXJhdGlvbi4gU0NUUCBpcyBhIHZpYWJsZSB0YXJnZXQgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cHMuXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGFuIGluZmluaXRlIGxvb3AvTlVMTCBkZXJlZmVyZW5jZSBpbiBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGhgIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggYXNzb2NpYXRpb24gdHJhbnNwb3J0cy4gU0NUUCBpcyBmdWxseSBzdXBwb3J0ZWQgYW5kIGNhbiBiZSB0YXJnZXRlZCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiSVBfU0NUUFwiLCBcIklORVRcIl1gIOKAkyBUaGVzZSBhcmUgdGhlIG5lY2Vzc2FyeSBwcmVyZXF1aXNpdGVzLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wic2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGhcIiwgXCJzY3RwX2Fzc29jX2Nob29zZV9hbHRlcl90cmFuc3BvcnRcIiwgXCJzY3RwX3JldHJhbnNtaXRcIl1gIOKAkyBjb3ZlcmluZyB0aGUgdnVsbmVyYWJsZSBmdW5jdGlvbiBhbmQgcG90ZW50aWFsbHkgcmVsZXZhbnQgZW50cnlwb2ludHMuXG5cbkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTIsIk91dHB1dFRva2VucyI6MTMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjQzOjE3LjYxNzMwNzA3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTQzNTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGhcIixcbiAgICBcInNjdHBfYXNzb2NfY2hvb3NlX2FsdGVyX3RyYW5zcG9ydFwiLFxuICAgIFwic2N0cF9yZXRyYW5zbWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb29wIHRlcm1pbmF0aW9uIGFuZCBOVUxMIGRlcmVmZXJlbmNlIGJ1ZyBpbiBTQ1RQIHRyYW5zcG9ydCByZXRyYW5zbWlzc2lvbiBwYXRoIHNlbGVjdGlvbiAoc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgpLiBUaGUgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwcm90b2NvbCBsb2dpYyBpbiBuZXQvc2N0cCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoXCIsXG4gICAgXCJzY3RwX2Fzc29jX2Nob29zZV9hbHRlcl90cmFuc3BvcnRcIixcbiAgICBcInNjdHBfcmV0cmFuc21pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBkZXJlZmVyZW5jZSBidWcgaW4gU0NUUCB0cmFuc3BvcnQgcmV0cmFuc21pc3Npb24gcGF0aCBzZWxlY3Rpb24gKHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKS4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcHJvdG9jb2wgbG9naWMgaW4gbmV0L3NjdHAgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MzoxNy43MDM0NjIxNzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MTE1NTc4NTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6NDM6MTcuNzA0MDY0NDUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzUxMTQ5NzI2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBwb2ludGVyIGFzc2lnbm1lbnQgaXNzdWUgaW4gYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKClgIGJ5IGVuc3VyaW5nIHRoZSBsb29wIHRlcm1pbmF0aW9uIGNoZWNrIChgdHJhbnMgPT0gYXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aGApIGlzIGV4ZWN1dGVkIGV2ZW4gd2hlbiBhIHRyYW5zcG9ydCBpcyBpbiB0aGUgYFNDVFBfVU5DT05GSVJNRURgIHN0YXRlLCBhbmQgZ3VhcmRpbmcgdGhlIGFzc2lnbm1lbnQgdG8gYGFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGhgIHdpdGggYSBudWxsIGNoZWNrLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcG9pbnRlciB2YWxpZGF0aW9uIGZpeC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBsb2dpYyAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OGNjODA0ZDdkMmIyYjlmZGFlMTMzZjVkZmMwYjM3YTU4MGY2MDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxNDo0MTozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2Fzc29jaW9sYS5jIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmNcbmluZGV4IGMwNTEyYzgyN2QwZjUuLjQ1MjFiZTNiZDg1YWEgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuY1xuKysrIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmNcbkBAIC0xMjg5LDE4ICsxMjg5LDE5IEBAIHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4gXHRcdC8qIE1hbnVhbGx5IHNraXAgdGhlIGhlYWQgZWxlbWVudC4gKi9cbiBcdFx0aWYgKFx1MDAyNnRyYW5zLVx1MDAzZXRyYW5zcG9ydHMgPT0gXHUwMDI2YXNvYy1cdTAwM2VwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICh0cmFucy1cdTAwM2VzdGF0ZSA9PSBTQ1RQX1VOQ09ORklSTUVEKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR0cmFuc19uZXh0ID0gc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFuc19uZXh0KTtcbi1cdFx0LyogQWN0aXZlIGlzIGdvb2QgZW5vdWdoIGZvciBpbW1lZGlhdGUgcmV0dXJuLiAqL1xuLVx0XHRpZiAodHJhbnNfbmV4dC1cdTAwM2VzdGF0ZSA9PSBTQ1RQX0FDVElWRSlcbi1cdFx0XHRicmVhaztcbitcdFx0aWYgKHRyYW5zLVx1MDAzZXN0YXRlICE9IFNDVFBfVU5DT05GSVJNRUQpIHtcbitcdFx0XHR0cmFuc19uZXh0ID0gc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFuc19uZXh0KTtcbitcdFx0XHQvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovXG4rXHRcdFx0aWYgKHRyYW5zX25leHQtXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0XHQvKiBXZSd2ZSByZWFjaGVkIHRoZSBlbmQsIHRpbWUgdG8gdXBkYXRlIHBhdGguICovXG4gXHRcdGlmICh0cmFucyA9PSBhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGgpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRhc29jLVx1MDAzZXBlZXIucmV0cmFuX3BhdGggPSB0cmFuc19uZXh0O1xuK1x0aWYgKHRyYW5zX25leHQpXG4rXHRcdGFzb2MtXHUwMDNlcGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7XG4gXG4gXHRwcl9kZWJ1ZyhcIiVzOiBhc3NvY2lhdGlvbjolcCB1cGRhdGVkIG5ldyBwYXRoIHRvIGFkZHI6JXBJU3BjXFxuXCIsXG4gXHRcdCBfX2Z1bmNfXywgYXNvYywgXHUwMDI2YXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoLVx1MDAzZWlwYWRkci5zYSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0MzoxNy43MDQwNjY1MDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEwMDk2OTQzMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTQ1RQIFJldHJhbnNtaXNzaW9uIFBhdGggVXBkYXRlKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIG5lc3RsZWQgd2l0aGluIHRoZSBgbmV0L3NjdHAvYXNzb2Npb2xhLmNgIGZpbGUsIHNwZWNpZmljYWxseSBpbXBhY3RpbmcgdGhlIGBzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aGAgZnVuY3Rpb24uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBmaXJzdCBtb3ZlIGlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGFuZCAqaG93KiBiZWhpbmQgdGhpcyBmdW5jdGlvbiBjYWxsLiBJJ2xsIG5lZWQgdG8gZ2FpbiBhIHNvbGlkIGdyYXNwIG9mIGl0cyBwdXJwb3NlIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgU0NUUCBhc3NvY2lhdGlvbiBtYW5hZ2VtZW50LlxuXG5JJ20gdGhpbmtpbmcgSSdsbCB1c2UgYGdyZXBwZXJgIChvciBtYXliZSBldmVuIGp1c3QgYSBnb29kIG9sZCBgcmVhZC1maWxlYCBhbmQgY2FyZWZ1bCBuYXZpZ2F0aW9uLCBkZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkpIHRvIHF1aWNrbHkgcHVsbCB1cCBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoYC4gVGhhdCdsbCBiZSBjcnVjaWFsLiBTZWVpbmcgd2hlcmUgYW5kIHdoZW4gdGhpcyBmdW5jdGlvbiBnZXRzIGludm9rZWQgd2lsbCBpbW1lZGlhdGVseSBpbGx1bWluYXRlIGl0cyByb2xlIGluIHRoZSByZXRyYW5zbWlzc2lvbiBwYXRoIHVwZGF0ZSBwcm9jZXNzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBwYXRoIGZhaWx1cmVzPyBDb25nZXN0aW9uIGNvbnRyb2wgYWRqdXN0bWVudHM/IEFzc29jaWF0aW9uIGxpZmV0aW1lIG1haW50ZW5hbmNlPyBHcmFzcGluZyB0aGUgY2FsbCBjb250ZXh0IGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QgaXQgaGFzIG9uIHRoZSB3aG9sZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjQ0OjE4LjcxMzc2MzMyOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvYXNzb2Npb2xhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI3MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI3MDpcXHRcXG4xMjcxOlxcdHZvaWQgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuMTI3MjpcXHR7XFxuMTI3MzpcXHRcXHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zID0gYXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aDtcXG4xMjc0OlxcdFxcdHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNfbmV4dCA9IE5VTEw7XFxuMTI3NTpcXHRcXG4xMjc2OlxcdFxcdC8qIFdlJ3JlIGRvbmUgYXMgd2Ugb25seSBoYXZlIHRoZSBvbmUgYW5kIG9ubHkgcGF0aC4gKi9cXG4xMjc3OlxcdFxcdGlmIChhc29jLVxcdTAwM2VwZWVyLnRyYW5zcG9ydF9jb3VudCA9PSAxKVxcbjEyNzg6XFx0XFx0XFx0cmV0dXJuO1xcbjEyNzk6XFx0XFx0LyogSWYgYWN0aXZlX3BhdGggYW5kIHJldHJhbl9wYXRoIGFyZSB0aGUgc2FtZSBhbmQgYWN0aXZlLFxcbjEyODA6XFx0XFx0ICogdGhlbiB0aGlzIGlzIHRoZSBvbmx5IGFjdGl2ZSBwYXRoLiBVc2UgaXQuXFxuMTI4MTpcXHRcXHQgKi9cXG4xMjgyOlxcdFxcdGlmIChhc29jLVxcdTAwM2VwZWVyLmFjdGl2ZV9wYXRoID09IGFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGggXFx1MDAyNlxcdTAwMjZcXG4xMjgzOlxcdFxcdCAgICBhc29jLVxcdTAwM2VwZWVyLmFjdGl2ZV9wYXRoLVxcdTAwM2VzdGF0ZSA9PSBTQ1RQX0FDVElWRSlcXG4xMjg0OlxcdFxcdFxcdHJldHVybjtcXG4xMjg1OlxcdFxcbjEyODY6XFx0XFx0LyogSXRlcmF0ZSBmcm9tIHJldHJhbl9wYXRoJ3Mgc3VjY2Vzc29yIGJhY2sgdG8gcmV0cmFuX3BhdGguICovXFxuMTI4NzpcXHRcXHRmb3IgKHRyYW5zID0gbGlzdF9uZXh0X2VudHJ5KHRyYW5zLCB0cmFuc3BvcnRzKTsgMTtcXG4xMjg4OlxcdFxcdCAgICAgdHJhbnMgPSBsaXN0X25leHRfZW50cnkodHJhbnMsIHRyYW5zcG9ydHMpKSB7XFxuMTI4OTpcXHRcXHRcXHQvKiBNYW51YWxseSBza2lwIHRoZSBoZWFkIGVsZW1lbnQuICovXFxuMTI5MDpcXHRcXHRcXHRpZiAoXFx1MDAyNnRyYW5zLVxcdTAwM2V0cmFuc3BvcnRzID09IFxcdTAwMjZhc29jLVxcdTAwM2VwZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpXFxuMTI5MTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjkyOlxcdFxcdFxcdGlmICh0cmFucy1cXHUwMDNlc3RhdGUgIT0gU0NUUF9VTkNPTkZJUk1FRCkge1xcbjEyOTM6XFx0XFx0XFx0XFx0dHJhbnNfbmV4dCA9IHNjdHBfdHJhbnNfZWxlY3RfYmVzdCh0cmFucywgdHJhbnNfbmV4dCk7XFxuMTI5NDpcXHRcXHRcXHRcXHQvKiBBY3RpdmUgaXMgZ29vZCBlbm91Z2ggZm9yIGltbWVkaWF0ZSByZXR1cm4uICovXFxuMTI5NTpcXHRcXHRcXHRcXHRpZiAodHJhbnNfbmV4dC1cXHUwMDNlc3RhdGUgPT0gU0NUUF9BQ1RJVkUpXFxuMTI5NjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMjk3OlxcdFxcdFxcdH1cXG4xMjk4OlxcdFxcdFxcdC8qIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCwgdGltZSB0byB1cGRhdGUgcGF0aC4gKi9cXG4xMjk5OlxcdFxcdFxcdGlmICh0cmFucyA9PSBhc29jLVxcdTAwM2VwZWVyLnJldHJhbl9wYXRoKVxcbjEzMDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTMwMTpcXHRcXHR9XFxuMTMwMjpcXHRcXG4xMzAzOlxcdFxcdGlmICh0cmFuc19uZXh0KVxcbjEzMDQ6XFx0XFx0XFx0YXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aCA9IHRyYW5zX25leHQ7XFxuMTMwNTpcXHRcXG4xMzA2OlxcdFxcdHByX2RlYnVnKFxcXCIlczogYXNzb2NpYXRpb246JXAgdXBkYXRlZCBuZXcgcGF0aCB0byBhZGRyOiVwSVNwY1xcXFxuXFxcIixcXG4xMzA3OlxcdFxcdFxcdCBfX2Z1bmNfXywgYXNvYywgXFx1MDAyNmFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGgtXFx1MDAzZWlwYWRkci5zYSk7XFxuMTMwODpcXHR9XFxuMTMwOTpcXHRcXG4xMzEwOlxcdHN0YXRpYyB2b2lkIHNjdHBfc2VsZWN0X2FjdGl2ZV9hbmRfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuMTMxMTpcXHR7XFxuMTMxMjpcXHRcXHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zLCAqdHJhbnNfcHJpID0gTlVMTCwgKnRyYW5zX3NlYyA9IE5VTEw7XFxuMTMxMzpcXHRcXHRzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zX3BmID0gTlVMTDtcXG4xMzE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDo0NDoxOC43MTM4OTAyODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQxMDUxMjM2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gUmVhc29uaW5nOiBTQ1RQIFJldHJhbnNtaXNzaW9uIFBhdGggU2VsZWN0aW9uIEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbG9naWMgZmxhdyBpbiB0aGUgU0NUUCByZXRyYW5zbWlzc2lvbiBwYXRoIHNlbGVjdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgc3VidGxlIGlzc3VlOiBpZiBhbGwgdHJhbnNwb3J0cyB3ZXJlIGluIHRoZSBgU0NUUF9VTkNPTkZJUk1FRGAgc3RhdGUsIG9yIGlmIHdlIHdlcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCBhbmQgdGhlIGN1cnJlbnQgcmV0cmFuc21pc3Npb24gcGF0aCB3YXMgYWxzbyB1bmNvbmZpcm1lZCwgdGhlIG9yaWdpbmFsIGxvb3AncyBzdHJ1Y3R1cmUgY291bGQgbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wLiBTcGVjaWZpY2FsbHksIHRoZSBgY29udGludWVgIHN0YXRlbWVudCBpbnNpZGUgdGhlIGBTQ1RQX1VOQ09ORklSTUVEYCBjaGVjayBza2lwcGVkIHRoZSBlbmQtb2YtbGlzdCBjaGVjay4gSWYgYWxsIHRyYW5zcG9ydHMgb3IgdGhlIGN1cnJlbnQgdHJhbnNwb3J0IHdhcyBgVU5DT05GSVJNRURgLCBpdCBjb3VsZCByZXN1bHQgaW4gYW4gaW5maW5pdGUgbG9vcCBvciBhIGBOVUxMYCBwb2ludGVyIGRlcmVmZXJlbmNlIGxhdGVyLlxuXG5UaGUgcGF0Y2gncyBzb2x1dGlvbiBpcyBzdHJhaWdodGZvcndhcmQuIEl0IGludmVydHMgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIHRvICpvbmx5KiBleGVjdXRlIHRoZSBgc2N0cF90cmFuc19lbGVjdF9iZXN0YCBzZWxlY3Rpb24gYW5kIGFjdGl2ZSBzdGF0ZSBjaGVjayAqaWYqIHRoZSB0cmFuc3BvcnQgaXMgKm5vdCogYFNDVFBfVU5DT05GSVJNRURgLiBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBwcm9jZWVkIHRvIHVwZGF0ZSBgdHJhbnNfbmV4dGAsIHRoZSBjYW5kaWRhdGUgZm9yIHRoZSByZXRyYW5zbWlzc2lvbiBwYXRoLCBvbmx5IHdpdGggdmFsaWQgdHJhbnNwb3J0cywgYW5kIGFsc28gdGhhdCB3ZSBoaXQgdGhlIGVuZC1vZi1saXN0IGNoZWNrIGFuZCB1cGRhdGUgdGhlIHJldHJhbnNtaXNzaW9uIHBhdGggY29ycmVjdGx5LiBJdCBhbHNvIG5vdyBtYWtlcyBzdXJlIHRoYXQgd2UgZG9uJ3QgYXNzaWduIGBOVUxMYCB0byB0aGUgYHJldHJhbl9wYXRoYCwgd2hpY2ggY291bGQgcmVzdWx0IGluIGEgc3Vic2VxdWVudCBkZXJlZmVyZW5jZS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEtNU0FOLiBMZXQncyBtYWtlIHN1cmUgdGhlcmUgYXJlICpubyogdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBJJ3ZlIGdvbmUgb3ZlciB0aGUgY29kZSBjYXJlZnVsbHkuXG5cbiogICAqKk5vIG5ldyBhbGxvY2F0aW9ucyBvciBzdGFjayB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQuKiogV2UncmUganVzdCBtb2RpZnlpbmcgZXhpc3RpbmcgcG9pbnRlcnMgYW5kIHN0YXRlLlxuKiAgICoqYHRyYW5zX25leHRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5VTExgLioqIFZlcnkgaW1wb3J0YW50LiBUaGlzIHJlbW92ZXMgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCByZWFkcy5cbiogICBgdHJhbnNgIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGBhc29jLVx1MDAzZXBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdGAuIFRoYXQgbGlzdCBpcyBpbml0aWFsaXplZCwgYW5kIGB0cmFuc2AgaXMgYWx3YXlzIHZhbGlkLlxuKiAgIGBzY3RwX3RyYW5zX2VsZWN0X2Jlc3RgIGNvbXBhcmVzIGV4aXN0aW5nIHRyYW5zcG9ydCBzdHJ1Y3R1cmVzLiBUaGlzIGlzIGEga25vd24gZnVuY3Rpb24sIGFuZCBpcyBzYWZlIGZyb20gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cbiogICBgYXNvYy1cdTAwM2VwZWVyLnJldHJhbl9wYXRoYCBpcyBub3cgb25seSB1cGRhdGVkIGlmIGB0cmFuc19uZXh0YCBpcyBub24tTlVMTC5cbiogICBDcml0aWNhbGx5LCB0aGVyZSBpcyAqKm5vKiogdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4gTm8gZGF0YSBjb3BpZWQgb3IgbGVha2VkLlxuKiAgIFRoaXMgaXMgYSBwdXJlIGxvZ2ljIGZpeC5cblxuU28sIGluIHNob3J0LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuIFRoaXMgcGF0Y2ggc2ltcGx5IGZpeGVzIGEgY29udHJvbCBmbG93IHByb2JsZW0uIFRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyB0aGF0IGNvdWxkIHJlc3VsdCBpbiBhbiBpbmZpbml0ZSBsb29wIG9yIGBOVUxMYCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgY29ycmVjdG5lc3MgZml4LiBJJ20gY2VydGFpbiB0aGF0IHRoZSBsb2dpYyBjaGFuZ2UgcHJldmVudHMgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBTdGFuZGFyZCBzYW5pdGl6ZXJzL0tBU0FOIHdvdWxkIGNhdGNoIGFueSBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsaXN0IGNvcnJ1cHRpb24gYnVncyB0aGF0IG1pZ2h0IGV4aXN0IGVsc2V3aGVyZSwgYnV0IHRoZXkgYXJlIG5vdCByZWxldmFudCB0byB0aGlzIGxvZ2ljIGNoYW5nZSwgYW5kIEkgc2VlIG5vIG5lZWQgdG8gcnVuIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDcyLCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjQ0OjMyLjgxOTAxNjgwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb29wIHRlcm1pbmF0aW9uIGFuZCBOVUxMIHBvaW50ZXIgYXNzaWdubWVudCBpc3N1ZSBpbiBgc2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoKWAgYnkgZW5zdXJpbmcgdGhlIGxvb3AgdGVybWluYXRpb24gY2hlY2sgKGB0cmFucyA9PSBhc29jLVxcdTAwM2VwZWVyLnJldHJhbl9wYXRoYCkgaXMgZXhlY3V0ZWQgZXZlbiB3aGVuIGEgdHJhbnNwb3J0IGlzIGluIHRoZSBgU0NUUF9VTkNPTkZJUk1FRGAgc3RhdGUsIGFuZCBndWFyZGluZyB0aGUgYXNzaWdubWVudCB0byBgYXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aGAgd2l0aCBhIG51bGwgY2hlY2suXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGlzIGEgY29udHJvbCBmbG93IGFuZCBwb2ludGVyIHZhbGlkYXRpb24gZml4LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGxvZ2ljIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBsaXN0IHRyYXZlcnNhbCBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9vcCB0ZXJtaW5hdGlvbiBhbmQgTlVMTCBwb2ludGVyIGFzc2lnbm1lbnQgaXNzdWUgaW4gYHNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKClgIGJ5IGVuc3VyaW5nIHRoZSBsb29wIHRlcm1pbmF0aW9uIGNoZWNrIChgdHJhbnMgPT0gYXNvYy1cXHUwMDNlcGVlci5yZXRyYW5fcGF0aGApIGlzIGV4ZWN1dGVkIGV2ZW4gd2hlbiBhIHRyYW5zcG9ydCBpcyBpbiB0aGUgYFNDVFBfVU5DT05GSVJNRURgIHN0YXRlLCBhbmQgZ3VhcmRpbmcgdGhlIGFzc2lnbm1lbnQgdG8gYGFzb2MtXFx1MDAzZXBlZXIucmV0cmFuX3BhdGhgIHdpdGggYSBudWxsIGNoZWNrLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBpcyBhIGNvbnRyb2wgZmxvdyBhbmQgcG9pbnRlciB2YWxpZGF0aW9uIGZpeC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBsb2dpYyAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbGlzdCB0cmF2ZXJzYWwgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowvqtwr[1] Phase: Succeeded StartedAt: 2026-09-02 14:44:44 +0000 UTC FinishedAt: 2026-09-02 14:44:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 14:44:44 +0000 UTC FinishedAt: 2026-09-02 14:44:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2] Phase: Succeeded StartedAt: 2026-09-02 14:44:44 +0000 UTC FinishedAt: 2026-09-02 18:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 14:44:44 +0000 UTC FinishedAt: 2026-09-02 18:24:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 14:44:44 +0000 UTC FinishedAt: 2026-09-02 14:44:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 14:44:44 +0000 UTC FinishedAt: 2026-09-02 14:44:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvqtwr/series-workflowvqtwr-convert-artifact-869525849/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 14:44:54 +0000 UTC FinishedAt: 2026-09-02 15:01:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 14:44:54 +0000 UTC FinishedAt: 2026-09-02 15:01:23 +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:*43a2ba8d-f585-4d60-8c6d-a1cdd2a3ce6a,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-workflowvqtwr/series-workflowvqtwr-convert-artifact-869525849/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": "324bd383-0f15-4c5f-927a-a9fbd441462c", "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-workflowvqtwr/series-workflowvqtwr-build-action-1866992119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 14:44:54 +0000 UTC FinishedAt: 2026-09-02 15:01:13 +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:*43a2ba8d-f585-4d60-8c6d-a1cdd2a3ce6a,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-workflowvqtwr/series-workflowvqtwr-convert-artifact-869525849/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": "324bd383-0f15-4c5f-927a-a9fbd441462c", "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-workflowvqtwr/series-workflowvqtwr-build-action-1866992119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 15:01:23 +0000 UTC FinishedAt: 2026-09-02 15:01:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 15:01:23 +0000 UTC FinishedAt: 2026-09-02 15:01:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 15:01:23 +0000 UTC FinishedAt: 2026-09-02 15:01:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 15:01:23 +0000 UTC FinishedAt: 2026-09-02 15:01:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvqtwr/series-workflowvqtwr-convert-artifact-3988656940/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 15:01:33 +0000 UTC FinishedAt: 2026-09-02 15:03:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 15:01:33 +0000 UTC FinishedAt: 2026-09-02 15:03:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*324bd383-0f15-4c5f-927a-a9fbd441462c,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-workflowvqtwr/series-workflowvqtwr-build-action-1866992119/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-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 15:03:25 +0000 UTC FinishedAt: 2026-09-02 15:03:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 15:03:25 +0000 UTC FinishedAt: 2026-09-02 15:03:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 15:03:25 +0000 UTC FinishedAt: 2026-09-02 15:19:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 15:03:25 +0000 UTC FinishedAt: 2026-09-02 15:19:39 +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:*43a2ba8d-f585-4d60-8c6d-a1cdd2a3ce6a,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-workflowvqtwr/series-workflowvqtwr-convert-artifact-3988656940/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": "61fc7c13-359e-43ac-b5dc-1bfdec92f9dd", "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-workflowvqtwr/series-workflowvqtwr-build-action-1524603336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 15:03:25 +0000 UTC FinishedAt: 2026-09-02 15:19:29 +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:*43a2ba8d-f585-4d60-8c6d-a1cdd2a3ce6a,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-workflowvqtwr/series-workflowvqtwr-convert-artifact-3988656940/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": "61fc7c13-359e-43ac-b5dc-1bfdec92f9dd", "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-workflowvqtwr/series-workflowvqtwr-build-action-1524603336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 15:19:39 +0000 UTC FinishedAt: 2026-09-02 15:19:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 15:19:39 +0000 UTC FinishedAt: 2026-09-02 15:19:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 15:19:39 +0000 UTC FinishedAt: 2026-09-02 15:21:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 15:19:39 +0000 UTC FinishedAt: 2026-09-02 15:21:27 +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:*61fc7c13-359e-43ac-b5dc-1bfdec92f9dd,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-workflowvqtwr/series-workflowvqtwr-build-action-1524603336/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-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 15:21:37 +0000 UTC FinishedAt: 2026-09-02 18:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 15:21:37 +0000 UTC FinishedAt: 2026-09-02 18:24:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"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:*324bd383-0f15-4c5f-927a-a9fbd441462c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*61fc7c13-359e-43ac-b5dc-1bfdec92f9dd,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-workflowvqtwr/series-workflowvqtwr-build-action-1866992119/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-workflowvqtwr/series-workflowvqtwr-build-action-1524603336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 15:21:37 +0000 UTC FinishedAt: 2026-09-02 15:21:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 15:21:37 +0000 UTC FinishedAt: 2026-09-02 15:21:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"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-workflowvqtwr/series-workflowvqtwr-convert-artifact-1171972629/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 15:21:37 +0000 UTC FinishedAt: 2026-09-02 15:21:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 15:21:37 +0000 UTC FinishedAt: 2026-09-02 15:21:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 15:21:37 +0000 UTC FinishedAt: 2026-09-02 15:21:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 15:21:47 +0000 UTC FinishedAt: 2026-09-02 18:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvqtwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_assoc_update_retran_path","sctp_assoc_choose_alter_transport","sctp_retransmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"d51173ad-23c6-4dd5-a763-2cc20cc1e94a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 15:21:47 +0000 UTC FinishedAt: 2026-09-02 18:24:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*324bd383-0f15-4c5f-927a-a9fbd441462c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*61fc7c13-359e-43ac-b5dc-1bfdec92f9dd,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-workflowvqtwr/series-workflowvqtwr-build-action-1866992119/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-workflowvqtwr/series-workflowvqtwr-build-action-1524603336/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-workflowvqtwr/series-workflowvqtwr-convert-artifact-1171972629/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,}