Name: series-workflow7bctf Phase: Succeeded StartedAt: 2026-08-04 07:35:32 +0000 UTC FinishedAt: 2026-08-04 11:37:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[0] Phase: Succeeded StartedAt: 2026-08-04 07:35:32 +0000 UTC FinishedAt: 2026-08-04 07:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 07:35:32 +0000 UTC FinishedAt: 2026-08-04 07:55:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d1000fd7995e51deec872d154e0a40d82f7a539f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d1000fd7995e51deec872d154e0a40d82f7a539f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "02176ce0-597e-4170-b82b-287db7ee902a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_auth_calculate_hmac", "sctp_packet_transmit", "sctp_sf_do_5_1D_ce", "sctp_sf_do_5_2_4_dupcook", "sctp_sf_eat_auth" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMmIzM0OywKICAgICYjMzQ7c2N0cF9wYWNrZXRfdHJhbnNtaXQmIzM0OywKICAgICYjMzQ7c2N0cF9zZl9kb181XzFEX2NlJiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2VhdF9hdXRoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT01FTSkuIEl0IHVwZGF0ZXMgdGhlIHJldHVybiB0eXBlIG9mIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyBhbmQgbW9kaWZpZXMgY2FsbGVycyBpbiBzY3RwX3BhY2tldF9wYWNrIGFuZCBzY3RwX3NmX2F1dGhlbnRpY2F0ZSB0byBoYW5kbGUgdGhlIGVycm9yLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHNpbGVudCBmYWlsdXJlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYmEwYzNmODI1NDA4ZjE4MTk5ZTdmM2ViMGY4MDIwNjc2ZjMzMWE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAwNzo1NDoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL2F1dGguaCBiL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oXG5pbmRleCA2ZjJjZDU2MmIxZGU2Li5lZWIzMjk3ZmU5N2QzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oXG5AQCAtODMsOSAmIzQzOzgzLDkgQEAgaW50IHNjdHBfYXV0aF9zZW5kX2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpO1xuIGludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuayxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTtcbi12b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbiYjNDM7aW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbiB2b2lkIHNjdHBfYXV0aF9zaGtleV9yZWxlYXNlKHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKnNoX2tleSk7XG4gdm9pZCBzY3RwX2F1dGhfc2hrZXlfaG9sZChzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2F1dGguYyBiL25ldC9zY3RwL2F1dGguY1xuaW5kZXggYzkwMWQzNzNhZjgwMy4uNmRlNjZmNTZjNDFjZSAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL2F1dGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvYXV0aC5jXG5AQCAtNjEzLDkgJiM0Mzs2MTMsOSBAQCBpbnQgc2N0cF9hdXRoX3JlY3ZfY2lkKGVudW0gc2N0cF9jaWQgY2h1bmssIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuICAqICAgIHplcm8gKGFzIHNob3duIGluIEZpZ3VyZSA2KSBmb2xsb3dlZCBieSBhbGwgY2h1bmtzIHRoYXQgYXJlIHBsYWNlZFxuICAqICAgIGFmdGVyIHRoZSBBVVRIIGNodW5rIGluIHRoZSBTQ1RQIHBhY2tldC5cbiAgKi9cbi12b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKVxuJiM0MztpbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApXG4ge1xuIFx0c3RydWN0IHNjdHBfYXV0aF9ieXRlcyAqYXNvY19rZXk7XG4gXHRfX3UxNiBrZXlfaWQsIGhtYWNfaWQ7XG5AQCAtNjM2LDcgJiM0Mzs2MzYsNyBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcdFx0LyogZXBfa2V5IGNhbiYjMzk7dCBiZSBOVUxMIGhlcmUgKi9cbiBcdFx0YXNvY19rZXkgPSBzY3RwX2F1dGhfYXNvY19jcmVhdGVfc2VjcmV0KGFzb2MsIGVwX2tleSwgZ2ZwKTtcbiBcdFx0aWYgKCFhc29jX2tleSlcbi1cdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0XHRmcmVlX2tleSA9IDE7XG4gXHR9XG5AQCAtNjU0LDYgJiM0Mzs2NTQsOCBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcbiBcdGlmIChmcmVlX2tleSlcbiBcdFx0c2N0cF9hdXRoX2tleV9wdXQoYXNvY19rZXkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyogQVBJIEhlbHBlcnMgKi9cbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRwdXQuYyBiL25ldC9zY3RwL291dHB1dC5jXG5pbmRleCAyM2U5NjMwNWNhZDdjLi4zZDdlYWQ5ZDQwZTE5IDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL291dHB1dC5jXG5AQCAtNTE3LDggJiM0Mzs1MTcsMTQgQEAgc3RhdGljIGludCBzY3RwX3BhY2tldF9wYWNrKHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LFxuIFx0XHR9XG4gXG4gXHRcdGlmIChhdXRoKSB7XG4tXHRcdFx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLVx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXG4tXHRcdFx0XHRcdFx0IHBhY2tldC1cdTAwM2VhdXRoLVx1MDAzZXNoa2V5LCBnZnApO1xuJiM0MztcdFx0XHRpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLVx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgcGFja2V0LVx1MDAzZWF1dGgtXHUwMDNlc2hrZXksIGdmcCkpIHtcbiYjNDM7XHRcdFx0XHRzY3RwX2NodW5rX2ZyZWUocGFja2V0LVx1MDAzZWF1dGgpO1xuJiM0MztcdFx0XHRcdHBhY2tldC1cdTAwM2VhdXRoID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRpZiAoZ3NvKVxuJiM0MztcdFx0XHRcdFx0a2ZyZWVfc2tiKG5za2IpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0LyogZnJlZSBhdXRoIGlmIG5vIG1vcmUgY2h1bmtzLCBvciBhZGQgaXQgYmFjayAqL1xuIFx0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnBhY2tldC1cdTAwM2VjaHVua19saXN0KSlcbiBcdFx0XHRcdHNjdHBfY2h1bmtfZnJlZShwYWNrZXQtXHUwMDNlYXV0aCk7XG5AQCAtNjE5LDcgJiM0Mzs2MjUsNyBAQCBpbnQgc2N0cF9wYWNrZXRfdHJhbnNtaXQoc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQsIGdmcF90IGdmcClcbiBcbiBcdC8qIHBhY2sgdXAgY2h1bmtzICovXG4gXHRwa3RfY291bnQgPSBzY3RwX3BhY2tldF9wYWNrKHBhY2tldCwgaGVhZCwgZ3NvLCBnZnApO1xuLVx0aWYgKCFwa3RfY291bnQpIHtcbiYjNDM7XHRpZiAocGt0X2NvdW50IFx1MDAzYz0gMCkge1xuIFx0XHRrZnJlZV9za2IoaGVhZCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbmluZGV4IDcwOGZhMDdkNWZmZmMuLmUxOTg4MWM5MGI0OTkgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbkBAIC02MzcsMTMgJiM0Mzs2MzcsMTcgQEAgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xQ19hY2soc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fQ09OU1VNRTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuJiM0MztzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4ge1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgYXV0aDtcbiBcbi1cdGlmICghY2h1bmstXHUwMDNlYXV0aF9jaHVuaylcbi1cdFx0cmV0dXJuICFzY3RwX2F1dGhfcmVjdl9jaWQoY2h1bmstXHUwMDNlY2h1bmtfaGRyLVx1MDAzZXR5cGUsIGFzb2MpO1xuJiM0MztcdGlmICghY2h1bmstXHUwMDNlYXV0aF9jaHVuaykge1xuJiM0MztcdFx0aWYgKHNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay1cdTAwM2VjaHVua19oZHItXHUwMDNldHlwZSwgYXNvYykpXG4mIzQzO1x0XHRcdHJldHVybiBTQ1RQX0lFUlJPUl9CQURfU0lHO1xuJiM0MztcdFx0cmV0dXJuIFNDVFBfSUVSUk9SX05PX0VSUk9SO1xuJiM0MztcdH1cbiBcbiBcdC8qIFNDVFAtQVVUSDogIGF1dGhfY2h1bmsgcG9pbnRlciBpcyBvbmx5IHNldCB3aGVuIHRoZSBjb29raWUtZWNob1xuIFx0ICogaXMgc3VwcG9zZWQgdG8gYmUgYXV0aGVudGljYXRlZCBhbmQgd2UgaGF2ZSB0byBkbyBkZWxheWVkXG5AQCAtNjU0LDcgJiM0Mzs2NTgsNyBAQCBzdGF0aWMgYm9vbCBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxuIFxuIFx0LyogTWFrZSBzdXJlIHRoYXQgd2UgYW5kIHRoZSBwZWVyIGFyZSBBVVRIIGNhcGFibGUgKi9cbiBcdGlmICghbmV0LVx1MDAzZXNjdHAuYXV0aF9lbmFibGUgfHwgIWFzb2MtXHUwMDNlcGVlci5hdXRoX2NhcGFibGUpXG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiBTQ1RQX0lFUlJPUl9CQURfU0lHO1xuIFxuIFx0Lyogc2V0LXVwIG91ciBmYWtlIGNodW5rIHNvIHRoYXQgd2UgY2FuIHByb2Nlc3MgaXQgKi9cbiBcdGF1dGguc2tiID0gY2h1bmstXHUwMDNlYXV0aF9jaHVuaztcbkBAIC02NjYsNyAmIzQzOzY3MCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4gXHRza2JfcHVsbChjaHVuay1cdTAwM2VhdXRoX2NodW5rLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTtcbiBcdGF1dGgudHJhbnNwb3J0ID0gY2h1bmstXHUwMDNldHJhbnNwb3J0O1xuIFxuLVx0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFx1MDAyNmF1dGgpID09IFNDVFBfSUVSUk9SX05PX0VSUk9SO1xuJiM0MztcdHJldHVybiBzY3RwX3NmX2F1dGhlbnRpY2F0ZShhc29jLCBcdTAwMjZhdXRoKTtcbiB9XG4gXG4gLypcbkBAIC04MjYsOCAmIzQzOzgzMCwxMSBAQCBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFEX2NlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBub21lbV9pbml0O1xuIFxuLVx0aWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSkge1xuJiM0MztcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYyk7XG4mIzQzO1x0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XG4gXHRcdHNjdHBfYXNzb2NpYXRpb25fZnJlZShuZXdfYXNvYyk7XG4mIzQzO1x0XHRpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pXG4mIzQzO1x0XHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNO1xuIFx0XHRyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChuZXQsIGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTtcbiBcdH1cbiBcbkBAIC0xODg5LDYgJiM0MzsxODk2LDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYShcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpwZWVyX2luaXQ7XG4gXHRlbnVtIHNjdHBfZGlzcG9zaXRpb24gZGlzcG9zaXRpb247XG4mIzQzO1x0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcbiBcdHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldjtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICpyZXBsO1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgKmVycjtcbkBAIC0xOTA0LDggJiM0MzsxOTEyLDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2EoXG4gXHRpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSlcbiBcdFx0Z290byBub21lbTtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpXG4mIzQzO1x0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcbiYjNDM7XHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiYjNDM7XHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogTWFrZSBzdXJlIG5vIG5ldyBhZGRyZXNzZXMgYXJlIGJlaW5nIGFkZGVkIGR1cmluZyB0aGVcbiBcdCAqIHJlc3RhcnQuICBUaG91Z2ggdGhpcyBpcyBhIHByZXR0eSBjb21wbGljYXRlZCBhdHRhY2tcbkBAIC0yMDExLDYgJiM0MzsyMDIzLDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYihcbiBcdFx0XHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKm5ld19hc29jKVxuIHtcbiBcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcbiYjNDM7XHRlbnVtIHNjdHBfaWVycm9yIGVycm9yO1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7XG4gXG4gXHQvKiBuZXdfYXNvYyBpcyBhIGJyYW5kLW5ldyBhc3NvY2lhdGlvbiwgc28gdGhlc2UgYXJlIG5vdCB5ZXRcbkBAIC0yMDI0LDggJiM0MzsyMDM3LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2IoXG4gXHRpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSlcbiBcdFx0Z290byBub21lbTtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpXG4mIzQzO1x0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcbiYjNDM7XHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiYjNDM7XHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4mIzQzO1x0fVxuIFxuIFx0c2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ORVdfU1RBVEUsXG4gXHRcdFx0U0NUUF9TVEFURShTQ1RQX1NUQVRFX0VTVEFCTElTSEVEKSk7XG5AQCAtMjExOCw2ICYjNDM7MjEzNSw3IEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXG4gXHRcdFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpuZXdfYXNvYylcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXYgPSBOVUxMLCAqYWlfZXYgPSBOVUxMLCAqYXV0aF9ldiA9IE5VTEw7XG4mIzQzO1x0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICpyZXBsO1xuIFxuIFx0LyogQ2xhcmlmaWNhdGlvbiBmcm9tIEltcGxlbWVudG9yJiMzOTtzIEd1aWRlOlxuQEAgLTIxMjcsOCAmIzQzOzIxNDUsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfZChcbiBcdCAqIGEgQ09PS0lFIEFDSy5cbiBcdCAqL1xuIFxuLVx0aWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIGFzb2MpKVxuJiM0MztcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKTtcbiYjNDM7XHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiYjNDM7XHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogRG9uJiMzOTt0IGFjY2lkZW50YWxseSBtb3ZlIGJhY2sgaW50byBlc3RhYmxpc2hlZCBzdGF0ZS4gKi9cbiBcdGlmIChhc29jLVx1MDAzZXN0YXRlIFx1MDAzYyBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEKSB7XG5AQCAtNDQ1NSw5ICYjNDM7NDQ3NywxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcbiBcbiBcdG1lbXNldChkaWdlc3QsIDAsIHNpZ19sZW4pO1xuIFxuLVx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGFzb2MsIGNodW5rLVx1MDAzZXNrYixcbi1cdFx0XHRcdCAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLVx1MDAzZWNodW5rX2hkcixcbi1cdFx0XHRcdCBzaF9rZXksIEdGUF9BVE9NSUMpO1xuJiM0MztcdGlmIChzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoYXNvYywgY2h1bmstXHUwMDNlc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKiljaHVuay1cdTAwM2VjaHVua19oZHIsXG4mIzQzO1x0XHRcdFx0ICAgICBzaF9rZXksIEdGUF9BVE9NSUMpKSB7XG4mIzQzO1x0XHRrZnJlZShzYXZlX2RpZ2VzdCk7XG4mIzQzO1x0XHRyZXR1cm4gU0NUUF9JRVJST1JfTk9NRU07XG4mIzQzO1x0fVxuIFxuIFx0LyogRGlzY2FyZCB0aGUgcGFja2V0IGlmIHRoZSBkaWdlc3RzIGRvIG5vdCBtYXRjaCAqL1xuIFx0aWYgKGNyeXB0b19tZW1uZXEoc2F2ZV9kaWdlc3QsIGRpZ2VzdCwgc2lnX2xlbikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyYjMzQ7LAogICAgJiMzNDtzY3RwX3BhY2tldF90cmFuc21pdCYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2RvXzVfMURfY2UmIzM0OywKICAgICYjMzQ7c2N0cF9zZl9kb181XzJfNF9kdXBjb29rJiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZWF0X2F1dGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gSXQgdXBkYXRlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjIGFuZCBtb2RpZmllcyBjYWxsZXJzIGluIHNjdHBfcGFja2V0X3BhY2sgYW5kIHNjdHBfc2ZfYXV0aGVudGljYXRlIHRvIGhhbmRsZSB0aGUgZXJyb3IsIHByZXZlbnRpbmcgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc2lsZW50IGZhaWx1cmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRiYTBjM2Y4MjU0MDhmMTgxOTllN2YzZWIwZjgwMjA2NzZmMzMxYTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDA3OjU0OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmggYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaAppbmRleCA2ZjJjZDU2MmIxZGU2Li5lZWIzMjk3ZmU5N2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL2F1dGguaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaApAQCAtODMsOSAmIzQzOzgzLDkgQEAgaW50IHNjdHBfYXV0aF9zZW5kX2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLAogCQkgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwogaW50IHNjdHBfYXV0aF9yZWN2X2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLAogCQkgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwotdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLAotCQkJICAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApOwomIzQzO2ludCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiYjNDM7CQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLAomIzQzOwkJCSAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApOwogdm9pZCBzY3RwX2F1dGhfc2hrZXlfcmVsZWFzZShzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpOwogdm9pZCBzY3RwX2F1dGhfc2hrZXlfaG9sZChzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpOwogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hdXRoLmMgYi9uZXQvc2N0cC9hdXRoLmMKaW5kZXggYzkwMWQzNzNhZjgwMy4uNmRlNjZmNTZjNDFjZSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYXV0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL2F1dGguYwpAQCAtNjEzLDkgJiM0Mzs2MTMsOSBAQCBpbnQgc2N0cF9hdXRoX3JlY3ZfY2lkKGVudW0gc2N0cF9jaWQgY2h1bmssIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogICogICAgemVybyAoYXMgc2hvd24gaW4gRmlndXJlIDYpIGZvbGxvd2VkIGJ5IGFsbCBjaHVua3MgdGhhdCBhcmUgcGxhY2VkCiAgKiAgICBhZnRlciB0aGUgQVVUSCBjaHVuayBpbiB0aGUgU0NUUCBwYWNrZXQuCiAgKi8KLXZvaWQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCwKLQkJCSAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKQomIzQzO2ludCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiYjNDM7CQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLAomIzQzOwkJCSAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHNjdHBfYXV0aF9ieXRlcyAqYXNvY19rZXk7CiAJX191MTYga2V5X2lkLCBobWFjX2lkOwpAQCAtNjM2LDcgJiM0Mzs2MzYsNyBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJLyogZXBfa2V5IGNhbiYjMzk7dCBiZSBOVUxMIGhlcmUgKi8KIAkJYXNvY19rZXkgPSBzY3RwX2F1dGhfYXNvY19jcmVhdGVfc2VjcmV0KGFzb2MsIGVwX2tleSwgZ2ZwKTsKIAkJaWYgKCFhc29jX2tleSkKLQkJCXJldHVybjsKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKIAogCQlmcmVlX2tleSA9IDE7CiAJfQpAQCAtNjU0LDYgJiM0Mzs2NTQsOCBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAogCWlmIChmcmVlX2tleSkKIAkJc2N0cF9hdXRoX2tleV9wdXQoYXNvY19rZXkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyogQVBJIEhlbHBlcnMgKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmMKaW5kZXggMjNlOTYzMDVjYWQ3Yy4uM2Q3ZWFkOWQ0MGUxOSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvb3V0cHV0LmMKQEAgLTUxNyw4ICYjNDM7NTE3LDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCwKIAkJfQogCiAJCWlmIChhdXRoKSB7Ci0JCQlzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWModHAtJmd0O2Fzb2MsIG5za2IsIGF1dGgsCi0JCQkJCQkgcGFja2V0LSZndDthdXRoLSZndDtzaGtleSwgZ2ZwKTsKJiM0MzsJCQlpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLSZndDthc29jLCBuc2tiLCBhdXRoLAomIzQzOwkJCQkJCSAgICAgcGFja2V0LSZndDthdXRoLSZndDtzaGtleSwgZ2ZwKSkgewomIzQzOwkJCQlzY3RwX2NodW5rX2ZyZWUocGFja2V0LSZndDthdXRoKTsKJiM0MzsJCQkJcGFja2V0LSZndDthdXRoID0gTlVMTDsKJiM0MzsJCQkJaWYgKGdzbykKJiM0MzsJCQkJCWtmcmVlX3NrYihuc2tiKTsKJiM0MzsJCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQkJfQogCQkJLyogZnJlZSBhdXRoIGlmIG5vIG1vcmUgY2h1bmtzLCBvciBhZGQgaXQgYmFjayAqLwogCQkJaWYgKGxpc3RfZW1wdHkoJmFtcDtwYWNrZXQtJmd0O2NodW5rX2xpc3QpKQogCQkJCXNjdHBfY2h1bmtfZnJlZShwYWNrZXQtJmd0O2F1dGgpOwpAQCAtNjE5LDcgJiM0Mzs2MjUsNyBAQCBpbnQgc2N0cF9wYWNrZXRfdHJhbnNtaXQoc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQsIGdmcF90IGdmcCkKIAogCS8qIHBhY2sgdXAgY2h1bmtzICovCiAJcGt0X2NvdW50ID0gc2N0cF9wYWNrZXRfcGFjayhwYWNrZXQsIGhlYWQsIGdzbywgZ2ZwKTsKLQlpZiAoIXBrdF9jb3VudCkgewomIzQzOwlpZiAocGt0X2NvdW50ICZsdDs9IDApIHsKIAkJa2ZyZWVfc2tiKGhlYWQpOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCmluZGV4IDcwOGZhMDdkNWZmZmMuLmUxOTg4MWM5MGI0OTkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCkBAIC02MzcsMTMgJiM0Mzs2MzcsMTcgQEAgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xQ19hY2soc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7CiB9CiAKLXN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCi0JCQkJICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiYjNDM7c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAomIzQzOwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogewogCXN0cnVjdCBzY3RwX2NodW5rIGF1dGg7CiAKLQlpZiAoIWNodW5rLSZndDthdXRoX2NodW5rKQotCQlyZXR1cm4gIXNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay0mZ3Q7Y2h1bmtfaGRyLSZndDt0eXBlLCBhc29jKTsKJiM0MzsJaWYgKCFjaHVuay0mZ3Q7YXV0aF9jaHVuaykgewomIzQzOwkJaWYgKHNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay0mZ3Q7Y2h1bmtfaGRyLSZndDt0eXBlLCBhc29jKSkKJiM0MzsJCQlyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NJRzsKJiM0MzsJCXJldHVybiBTQ1RQX0lFUlJPUl9OT19FUlJPUjsKJiM0MzsJfQogCiAJLyogU0NUUC1BVVRIOiAgYXV0aF9jaHVuayBwb2ludGVyIGlzIG9ubHkgc2V0IHdoZW4gdGhlIGNvb2tpZS1lY2hvCiAJICogaXMgc3VwcG9zZWQgdG8gYmUgYXV0aGVudGljYXRlZCBhbmQgd2UgaGF2ZSB0byBkbyBkZWxheWVkCkBAIC02NTQsNyAmIzQzOzY1OCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCiAKIAkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbmQgdGhlIHBlZXIgYXJlIEFVVEggY2FwYWJsZSAqLwogCWlmICghbmV0LSZndDtzY3RwLmF1dGhfZW5hYmxlIHx8ICFhc29jLSZndDtwZWVyLmF1dGhfY2FwYWJsZSkKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJcmV0dXJuIFNDVFBfSUVSUk9SX0JBRF9TSUc7CiAKIAkvKiBzZXQtdXAgb3VyIGZha2UgY2h1bmsgc28gdGhhdCB3ZSBjYW4gcHJvY2VzcyBpdCAqLwogCWF1dGguc2tiID0gY2h1bmstJmd0O2F1dGhfY2h1bms7CkBAIC02NjYsNyAmIzQzOzY3MCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCiAJc2tiX3B1bGwoY2h1bmstJmd0O2F1dGhfY2h1bmssIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpOwogCWF1dGgudHJhbnNwb3J0ID0gY2h1bmstJmd0O3RyYW5zcG9ydDsKIAotCXJldHVybiBzY3RwX3NmX2F1dGhlbnRpY2F0ZShhc29jLCAmYW1wO2F1dGgpID09IFNDVFBfSUVSUk9SX05PX0VSUk9SOwomIzQzOwlyZXR1cm4gc2N0cF9zZl9hdXRoZW50aWNhdGUoYXNvYywgJmFtcDthdXRoKTsKIH0KIAogLyoKQEAgLTgyNiw4ICYjNDM7ODMwLDExIEBAIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMURfY2Uoc3RydWN0IG5ldCAqbmV0LAogCWlmIChlcnJvcikKIAkJZ290byBub21lbV9pbml0OwogCi0JaWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSkgewomIzQzOwllcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpOwomIzQzOwlpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHsKIAkJc2N0cF9hc3NvY2lhdGlvbl9mcmVlKG5ld19hc29jKTsKJiM0MzsJCWlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSkKJiM0MzsJCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTsKIAkJcmV0dXJuIHNjdHBfc2ZfcGRpc2NhcmQobmV0LCBlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CiAJfQogCkBAIC0xODg5LDYgJiM0MzsxODk2LDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYSgKIHsKIAlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpwZWVyX2luaXQ7CiAJZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uOwomIzQzOwllbnVtIHNjdHBfaWVycm9yIGVycm9yOwogCXN0cnVjdCBzY3RwX3VscGV2ZW50ICpldjsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqZXJyOwpAQCAtMTkwNCw4ICYjNDM7MTkxMiwxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19hKAogCWlmIChzY3RwX2F1dGhfYXNvY19pbml0X2FjdGl2ZV9rZXkobmV3X2Fzb2MsIEdGUF9BVE9NSUMpKQogCQlnb3RvIG5vbWVtOwogCi0JaWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSkKJiM0MzsJZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTsKJiM0MzsJaWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7CiYjNDM7CQlpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pCiYjNDM7CQkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07CiAJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7CiYjNDM7CX0KIAogCS8qIE1ha2Ugc3VyZSBubyBuZXcgYWRkcmVzc2VzIGFyZSBiZWluZyBhZGRlZCBkdXJpbmcgdGhlCiAJICogcmVzdGFydC4gIFRob3VnaCB0aGlzIGlzIGEgcHJldHR5IGNvbXBsaWNhdGVkIGF0dGFjawpAQCAtMjAxMSw2ICYjNDM7MjAyMyw3IEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2IoCiAJCQkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpuZXdfYXNvYykKIHsKIAlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpwZWVyX2luaXQ7CiYjNDM7CWVudW0gc2N0cF9pZXJyb3IgZXJyb3I7CiAJc3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7CiAKIAkvKiBuZXdfYXNvYyBpcyBhIGJyYW5kLW5ldyBhc3NvY2lhdGlvbiwgc28gdGhlc2UgYXJlIG5vdCB5ZXQKQEAgLTIwMjQsOCAmIzQzOzIwMzcsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYigKIAlpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSkKIAkJZ290byBub21lbTsKIAotCWlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpCiYjNDM7CWVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYyk7CiYjNDM7CWlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikgewomIzQzOwkJaWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKQomIzQzOwkJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNOwogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ESVNDQVJEOwomIzQzOwl9CiAKIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX05FV19TVEFURSwKIAkJCVNDVFBfU1RBVEUoU0NUUF9TVEFURV9FU1RBQkxJU0hFRCkpOwpAQCAtMjExOCw2ICYjNDM7MjEzNSw3IEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoCiAJCQkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpuZXdfYXNvYykKIHsKIAlzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXYgPSBOVUxMLCAqYWlfZXYgPSBOVUxMLCAqYXV0aF9ldiA9IE5VTEw7CiYjNDM7CWVudW0gc2N0cF9pZXJyb3IgZXJyb3I7CiAJc3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7CiAKIAkvKiBDbGFyaWZpY2F0aW9uIGZyb20gSW1wbGVtZW50b3ImIzM5O3MgR3VpZGU6CkBAIC0yMTI3LDggJiM0MzsyMTQ1LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoCiAJICogYSBDT09LSUUgQUNLLgogCSAqLwogCi0JaWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIGFzb2MpKQomIzQzOwllcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgYXNvYyk7CiYjNDM7CWlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikgewomIzQzOwkJaWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKQomIzQzOwkJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNOwogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ESVNDQVJEOwomIzQzOwl9CiAKIAkvKiBEb24mIzM5O3QgYWNjaWRlbnRhbGx5IG1vdmUgYmFjayBpbnRvIGVzdGFibGlzaGVkIHN0YXRlLiAqLwogCWlmIChhc29jLSZndDtzdGF0ZSAmbHQ7IFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQpIHsKQEAgLTQ0NTUsOSAmIzQzOzQ0NzcsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9zZl9hdXRoZW50aWNhdGUoCiAKIAltZW1zZXQoZGlnZXN0LCAwLCBzaWdfbGVuKTsKIAotCXNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhhc29jLCBjaHVuay0mZ3Q7c2tiLAotCQkJCSAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLSZndDtjaHVua19oZHIsCi0JCQkJIHNoX2tleSwgR0ZQX0FUT01JQyk7CiYjNDM7CWlmIChzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoYXNvYywgY2h1bmstJmd0O3NrYiwKJiM0MzsJCQkJICAgICAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLSZndDtjaHVua19oZHIsCiYjNDM7CQkJCSAgICAgc2hfa2V5LCBHRlBfQVRPTUlDKSkgewomIzQzOwkJa2ZyZWUoc2F2ZV9kaWdlc3QpOwomIzQzOwkJcmV0dXJuIFNDVFBfSUVSUk9SX05PTUVNOwomIzQzOwl9CiAKIAkvKiBEaXNjYXJkIHRoZSBwYWNrZXQgaWYgdGhlIGRpZ2VzdHMgZG8gbm90IG1hdGNoICovCiAJaWYgKGNyeXB0b19tZW1uZXEoc2F2ZV9kaWdlc3QsIGRpZ2VzdCwgc2lnX2xlbikpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNDVFAgQXV0aGVudGljYXRpb24gSE1BQyBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGNoYW5naW5nIHRoZSB3YXkgdGhlIEhNQUMgY2FsY3VsYXRpb24gaXMgaGFuZGxlZCBpbiBTQ1RQIGF1dGhlbnRpY2F0aW9uLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIGdvbmUgZnJvbSBhIGB2b2lkYCByZXR1cm4gdHlwZSBpbiBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYCB0byBhbiBgaW50YCwgdG8gYWxsb3cgZm9yIHRoZSBoYW5kbGluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aXRoIHRoZSBgLUVOT01FTWAgZXJyb3IgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjaGFuZ2U7IHJvYnVzdCBlcnJvciBoYW5kbGluZyBpcyBjcnVjaWFsLCBlc3BlY2lhbGx5IGluIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uIGxpa2UgYXV0aGVudGljYXRpb24uIFRoZSBjYWxsZXJzIHNlZW0gdG8gYmUgcHJvcGVybHkgdXBkYXRlZCB0byBtYW5hZ2UgdGhlc2UgZXJyb3JzIGFuZCBwcm9wYWdhdGUgdGhlbSBhcHByb3ByaWF0ZWx5LCByZXR1cm5pbmcgYFNDVFBfSUVSUk9SX05PTUVNYCBvciBgU0NUUF9ESVNQT1NJVElPTl9OT01FTWAuCgpUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXM6IGlzIHRoaXMgZnVuY3Rpb25hbCBhbmQgZnV6ei13b3J0aHk/IEFic29sdXRlbHksIHllcy4gTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgaW4gYXV0aGVudGljYXRpb24gYXJlIGEgbGVnaXRpbWF0ZSBhbmQgaW1wb3J0YW50IGZhaWx1cmUgc2NlbmFyaW8gdG8gdGVzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBTQ1RQIGF1dGhlbnRpY2F0aW9uLCB3aGljaCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB3ZSBzaG91bGQgZm9jdXMgb24gZm9yIGZ1enppbmcuIFdlIGhhdmUgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AgaXRzZWxmLCB3aGljaCBpcyB0aGUgaW1tZWRpYXRlIHRhcmdldC4gVGhlbiB0aGVyZSYjMzk7cyBgc2N0cF9wYWNrZXRfcGFja2AgKHdoaWNoIGlzIHN0YXRpYywgc28gbGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBpbmxpbmVkIC0gb3RoZXJ3aXNlLCBtYXliZSBza2lwIGl0LCBmb2N1c2luZyBvbiBBUEkgZW50cnlwb2ludHMgb3Igc3RhdGUgbWFjaGluZSBmdW5jdGlvbnMpLiBXZSBoYXZlIGBzY3RwX3BhY2tldF90cmFuc21pdGAsIGBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5YCAod2hpY2ggaXMgYWxzbyBzdGF0aWMpLCBhbmQgdGhlbiBhIGJ1bmNoIG9mIHN0YXRlIG1hY2hpbmUgZnVuY3Rpb25zLCBgc2N0cF9zZl9kb181XzFEX2NlYCwgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYHNjdHBfc2ZfZG9fZHVwY29va19kYCwgYW5kIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAuCgpUaGUga2V5IGVudHJ5cG9pbnRzIHRvIGluY2x1ZGUgZm9yIGZ1enppbmcgc2hvdWxkIGJlOiBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYCwgYHNjdHBfcGFja2V0X3RyYW5zbWl0YCwgYW5kIHRoZW4gdGhvc2Ugc3RhdGUgbWFjaGluZSBmdW5jdGlvbnMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gYXV0aGVudGljYXRpb246IGBzY3RwX3NmX2RvXzVfMURfY2VgLCBgc2N0cF9zZl9kb19kdXBjb29rX2FgLCBgc2N0cF9zZl9kb19kdXBjb29rX2JgLCBgc2N0cF9zZl9kb19kdXBjb29rX2RgLCBhbmQgYHNjdHBfc2ZfYXV0aGVudGljYXRlYC4KCkp1c3QgYSBxdWljayBjaGVjayBub3csIG1ha2Ugc3VyZSBTQ1RQIGlzIGV2ZW4gZW5hYmxlZC4gYElQX1NDVFBgIGluIEtjb25maWcsIGdvdCBpdC4gTGV0JiMzOTtzIHZlcmlmeSB0aGF0JiMzOTtzIGFsbCBzZXQgdXAgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TQ1RQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL0tjb25maWctNS1cbm5ldC9zY3RwL0tjb25maWc6NjptZW51Y29uZmlnIElQX1NDVFBcbm5ldC9zY3RwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBTQ1RQIFByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQwOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBTQ1RQIEF1dGhlbnRpY2F0aW9uIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIFNDVFAgYXV0aGVudGljYXRpb24sIGFuZCBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0by4gVGhpcyBpc24mIzM5O3QganVzdCBhIGdlbmVyaWMgc2VjdXJpdHkgYXNzZXNzbWVudDsgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMuIEFyZSB0aGVyZSBhbnkgU0NUUC1zcGVjaWZpYyBzZXR0aW5ncyB0aGF0IHJlbGF0ZSB0byB0aGUgYXV0aGVudGljYXRpb24gcHJvY2VzcyBpdHNlbGY/IFRoaW5ncyB0aGF0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gYSBnZW5lcmFsIHNlY3VyaXR5IHBvc3R1cmUgcmV2aWV3LiBJIG5lZWQgdG8ga25vdyBpZiBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLCBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgSSBjYW4gZXhwbG9pdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTQ1RQX0FVVEgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1OTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkRlbHZpbmcgaW50byBTeXN0ZW0gUGFyYW1ldGVycyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyBqdXN0IGxvb2tpbmcgYXQgdGhhdCBgbmV0LSZndDtzY3RwLmF1dGhfZW5hYmxlYCBzZXR0aW5nLi4uIGFuZCBhIGxpZ2h0YnVsYiBqdXN0IHdlbnQgb2ZmLiBUaGF0JiMzOTtzIG5vdCBzb21lIG9ic2N1cmUga2VybmVsIHZhcmlhYmxlLCB0aGF0JiMzOTtzIGEgKnN5c2N0bCouIE1lYW5pbmcgSSBjYW4gdHVuZSBpdCBhdCBydW50aW1lIHdpdGhvdXQgbmVlZGluZyBhIGZ1bGwgcmVib290IG9yIGV2ZW4gYSBtb2R1bGUgcmVsb2FkLiBUaGF0IGNoYW5nZXMgZXZlcnl0aGluZywgb3IgYXQgbGVhc3QgaXQgY2hhbmdlcyBteSBhcHByb2FjaCEgSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdG9nZ2xpbmcgdGhhdC4gSXMgaXQgYSBwZXJzaXN0ZW50IGNoYW5nZSwgb3IgaXMgaXQgb25seSBlZmZlY3RpdmUgdW50aWwgdGhlIG5leHQgcmVib290PyBXaGF0JiMzOTtzIHRoZSByZWNvbW1lbmRlZCB3YXkgdG8gbW9kaWZ5IGl0PyBJIHNob3VsZCBjaGVjayB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gZm9yIGBzeXNjdGxgIGFuZCBTQ1RQIGF1dGhlbnRpY2F0aW9uIHRvIGdldCBhIHByZWNpc2UgdW5kZXJzdGFuZGluZyBiZWZvcmUgbWFraW5nIGFueSBkZWNpc2lvbnMuIE5vdyBJIG5lZWQgdG8gcmV2aWV3IHdoYXQgZWZmZWN0cyB0aGlzIGlzIGludGVuZGVkIHRvIGhhdmUuIEdvb2QgdGhpbmcgSSBqdXN0IGhhZCB0aGF0IHRob3VnaHQsIGJlZm9yZSBkaXZpbmcgaW50byBzb21ldGhpbmcgZmFyIG1vcmUgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXV0aF9lbmFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvYXV0aC5jPTcyMj1pbnQgc2N0cF9hdXRoX3NldF9rZXkoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL2F1dGguYy03MzgtXHR9IGVsc2Uge1xubmV0L3NjdHAvYXV0aC5jOjczOTpcdFx0aWYgKCFlcC1cdTAwM2VhdXRoX2VuYWJsZSlcbm5ldC9zY3RwL2F1dGguYy03NDAtXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxubmV0L3NjdHAvYXV0aC5jPTc4NT1pbnQgc2N0cF9hdXRoX3NldF9hY3RpdmVfa2V5KHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbi0tXG5uZXQvc2N0cC9hdXRoLmMtNzk4LVx0fSBlbHNlIHtcbm5ldC9zY3RwL2F1dGguYzo3OTk6XHRcdGlmICghZXAtXHUwMDNlYXV0aF9lbmFibGUpXG5uZXQvc2N0cC9hdXRoLmMtODAwLVx0XHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbm5ldC9zY3RwL2F1dGguYz04Mjg9aW50IHNjdHBfYXV0aF9kZWxfa2V5X2lkKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbi0tXG5uZXQvc2N0cC9hdXRoLmMtODQ2LVx0fSBlbHNlIHtcbm5ldC9zY3RwL2F1dGguYzo4NDc6XHRcdGlmICghZXAtXHUwMDNlYXV0aF9lbmFibGUpXG5uZXQvc2N0cC9hdXRoLmMtODQ4LVx0XHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbm5ldC9zY3RwL2F1dGguYz04NzI9aW50IHNjdHBfYXV0aF9kZWFjdF9rZXlfaWQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL2F1dGguYy04ODktXHR9IGVsc2Uge1xubmV0L3NjdHAvYXV0aC5jOjg5MDpcdFx0aWYgKCFlcC1cdTAwM2VhdXRoX2VuYWJsZSlcbm5ldC9zY3RwL2F1dGguYy04OTEtXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYz01MD1zdGF0aWMgc3RydWN0IHNjdHBfZW5kcG9pbnQgKnNjdHBfZW5kcG9pbnRfaW5pdChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYy01Ny1cdGVwLVx1MDAzZWFzY29uZl9lbmFibGUgPSBuZXQtXHUwMDNlc2N0cC5hZGRpcF9lbmFibGU7XG5uZXQvc2N0cC9lbmRwb2ludG9sYS5jOjU4Olx0ZXAtXHUwMDNlYXV0aF9lbmFibGUgPSBuZXQtXHUwMDNlc2N0cC5hdXRoX2VuYWJsZTtcbm5ldC9zY3RwL2VuZHBvaW50b2xhLmM6NTk6XHRpZiAoZXAtXHUwMDNlYXV0aF9lbmFibGUpIHtcbm5ldC9zY3RwL2VuZHBvaW50b2xhLmMtNjAtXHRcdGlmIChzY3RwX2F1dGhfaW5pdChlcCwgZ2ZwKSlcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jPTEyODk9c3RhdGljIGludCBfX25ldF9pbml0IHNjdHBfZGVmYXVsdHNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMzE0LVx0LyogV2hldGhlciBjb29raWUgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZCgxKSBvciBub3QoMCkgKi9cbm5ldC9zY3RwL3Byb3RvY29sLmM6MTMxNTpcdG5ldC1cdTAwM2VzY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSA9XG5uZXQvc2N0cC9wcm90b2NvbC5jLTEzMTYtXHRcdCFJU19FTkFCTEVEKENPTkZJR19TQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfTk9ORSk7XG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMzYxLVx0LyogRGlzYWJsZSBBVVRIIGJ5IGRlZmF1bHQuICovXG5uZXQvc2N0cC9wcm90b2NvbC5jOjEzNjI6XHRuZXQtXHUwMDNlc2N0cC5hdXRoX2VuYWJsZSA9IDA7XG5uZXQvc2N0cC9wcm90b2NvbC5jLTEzNjMtXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTE5OD1zdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2luaXQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI3Mi1cdC8qIEFjY291bnQgZm9yIEFVVEggcmVsYXRlZCBwYXJhbWV0ZXJzICovXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjczOlx0aWYgKGVwLVx1MDAzZWF1dGhfZW5hYmxlKSB7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjc0LVx0XHQvKiBBZGQgcmFuZG9tIHBhcmFtZXRlciBsZW5ndGgqL1xuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0zNTUtXHQvKiBBZGQgU0NUUC1BVVRIIGNodW5rcyB0byB0aGUgcGFyYW1ldGVyIGxpc3QgKi9cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzozNTY6XHRpZiAoZXAtXHUwMDNlYXV0aF9lbmFibGUpIHtcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0zNTctXHRcdHNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYXNvYy1cdTAwM2VjLmF1dGhfcmFuZG9tKSxcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MTY0NT1zdGF0aWMgc3RydWN0IHNjdHBfY29va2llX3BhcmFtICpzY3RwX3BhY2tfY29va2llKFxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0xNzExLVx0LyogU2lnbiB0aGUgY29va2llLCBpZiBjb29raWUgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZC4gKi9cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoxNzEyOlx0aWYgKHNjdHBfc2soZXAtXHUwMDNlYmFzZS5zayktXHUwMDNlY29va2llX2F1dGhfZW5hYmxlKSB7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMTcxMy1cdFx0c3RhdGljX2Fzc2VydChzaXplb2YoY29va2llLVx1MDAzZW1hYykgPT0gU0hBMjU2X0RJR0VTVF9TSVpFKTtcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MTcyMj1zdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF91bnBhY2tfY29va2llKFxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0xNzc0LVx0LyogVmVyaWZ5IHRoZSBjb29raWUmIzM5O3MgTUFDLCBpZiBjb29raWUgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZC4gKi9cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoxNzc1Olx0aWYgKHNjdHBfc2soZXAtXHUwMDNlYmFzZS5zayktXHUwMDNlY29va2llX2F1dGhfZW5hYmxlKSB7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMTc3Ni1cdFx0dTggbWFjW1NIQTI1Nl9ESUdFU1RfU0laRV07XG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTIwMzE9c3RhdGljIHZvaWQgc2N0cF9wcm9jZXNzX2V4dF9wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjA1MC1cdFx0XHQgKi9cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMDUxOlx0XHRcdGlmIChhc29jLVx1MDAzZWVwLVx1MDAzZWF1dGhfZW5hYmxlKVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIwNTItXHRcdFx0XHRhc29jLVx1MDAzZXBlZXIuYXV0aF9jYXBhYmxlID0gMTtcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MjE0Nz1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3ZlcmlmeV9wYXJhbShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIyMTEtXHRjYXNlIFNDVFBfUEFSQU1fUkFORE9NOlxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjIyMTI6XHRcdGlmICghZXAtXHUwMDNlYXV0aF9lbmFibGUpXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjIxMy1cdFx0XHRnb3RvIHVuaGFuZGxlZDtcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjIyOC1cdGNhc2UgU0NUUF9QQVJBTV9DSFVOS1M6XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjIyOTpcdFx0aWYgKCFlcC1cdTAwM2VhdXRoX2VuYWJsZSlcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMjMwLVx0XHRcdGdvdG8gdW5oYW5kbGVkO1xuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMjQ0LVx0Y2FzZSBTQ1RQX1BBUkFNX0hNQUNfQUxHTzpcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMjQ1Olx0XHRpZiAoIWVwLVx1MDAzZWF1dGhfZW5hYmxlKVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIyNDYtXHRcdFx0Z290byB1bmhhbmRsZWQ7XG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTI1MzI9c3RhdGljIGludCBzY3RwX3Byb2Nlc3NfcGFyYW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI2OTAtXHRjYXNlIFNDVFBfUEFSQU1fUkFORE9NOlxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjI2OTE6XHRcdGlmICghZXAtXHUwMDNlYXV0aF9lbmFibGUpXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjY5Mi1cdFx0XHRnb3RvIGZhbGxfdGhyb3VnaDtcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjcwNC1cdGNhc2UgU0NUUF9QQVJBTV9ITUFDX0FMR086XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjcwNTpcdFx0aWYgKCFlcC1cdTAwM2VhdXRoX2VuYWJsZSlcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yNzA2LVx0XHRcdGdvdG8gZmFsbF90aHJvdWdoO1xuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yNzIxLVx0Y2FzZSBTQ1RQX1BBUkFNX0NIVU5LUzpcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyNzIyOlx0XHRpZiAoIWVwLVx1MDAzZWF1dGhfZW5hYmxlKVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI3MjMtXHRcdFx0Z290byBmYWxsX3Rocm91Z2g7XG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NjQwPXN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTY1OS1cdC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFuZCB0aGUgcGVlciBhcmUgQVVUSCBjYXBhYmxlICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo2NjA6XHRpZiAoIW5ldC1cdTAwM2VzY3RwLmF1dGhfZW5hYmxlIHx8ICFhc29jLVx1MDAzZXBlZXIuYXV0aF9jYXBhYmxlKVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNjYxLVx0XHRyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NJRztcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz03MDc9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xRF9jZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNzk1LVx0Y2lkID0gcGVlcl9pbml0LVx1MDAzZWNodW5rX2hkci50eXBlO1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6Nzk2Olx0aWYgKCFzY3RwX3NrKHNrKS1cdTAwM2Vjb29raWVfYXV0aF9lbmFibGUgXHUwMDI2XHUwMDI2XG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy03OTctXHQgICAgIXNjdHBfdmVyaWZ5X2luaXQobmV0LCBlcCwgYXNvYywgY2lkLCBwZWVyX2luaXQsIGNodW5rLFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTIyNDY9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayhcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzMwLVx0XHRjaWQgPSBwZWVyX2luaXQtXHUwMDNlY2h1bmtfaGRyLnR5cGU7XG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMzMxOlx0XHRpZiAoIXNjdHBfc2soZXAtXHUwMDNlYmFzZS5zayktXHUwMDNlY29va2llX2F1dGhfZW5hYmxlIFx1MDAyNlx1MDAyNlxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjMzMi1cdFx0ICAgICFzY3RwX3ZlcmlmeV9pbml0KG5ldCwgZXAsIGFzb2MsIGNpZCwgcGVlcl9pbml0LCBjaHVuayxcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz0zNTc5PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2F1dGhfY2h1bmsoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTM1ODQtXG5uZXQvc2N0cC9zb2NrZXQuYzozNTg1Olx0aWYgKCFlcC1cdTAwM2VhdXRoX2VuYWJsZSlcbm5ldC9zY3RwL3NvY2tldC5jLTM1ODYtXHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTM2MDk9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtMzYxNS1cbm5ldC9zY3RwL3NvY2tldC5jOjM2MTY6XHRpZiAoIWVwLVx1MDAzZWF1dGhfZW5hYmxlKVxubmV0L3NjdHAvc29ja2V0LmMtMzYxNy1cdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxubmV0L3NjdHAvc29ja2V0LmM9NDM0MT1zdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hc2NvbmZfc3VwcG9ydGVkKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy00MzU5LVxubmV0L3NjdHAvc29ja2V0LmM6NDM2MDpcdGlmIChlcC1cdTAwM2Vhc2NvbmZfZW5hYmxlIFx1MDAyNlx1MDAyNiBlcC1cdTAwM2VhdXRoX2VuYWJsZSkge1xubmV0L3NjdHAvc29ja2V0LmMtNDM2MS1cdFx0c2N0cF9hdXRoX2VwX2FkZF9jaHVua2lkKGVwLCBTQ1RQX0NJRF9BU0NPTkYpO1xuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTQzNzE9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0aF9zdXBwb3J0ZWQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTQzOTctXG5uZXQvc2N0cC9zb2NrZXQuYzo0Mzk4Olx0ZXAtXHUwMDNlYXV0aF9lbmFibGUgPSAhIXBhcmFtcy1cdTAwM2Vhc3NvY192YWx1ZTtcbm5ldC9zY3RwL3NvY2tldC5jLTQzOTktXHRyZXR2YWwgPSAwO1xuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTUwMjE9c3RhdGljIGludCBzY3RwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNTA1NS1cbm5ldC9zY3RwL3NvY2tldC5jOjUwNTY6XHRzcC1cdTAwM2Vjb29raWVfYXV0aF9lbmFibGUgPSBuZXQtXHUwMDNlc2N0cC5jb29raWVfYXV0aF9lbmFibGU7XG5uZXQvc2N0cC9zb2NrZXQuYy01MDU3LVxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTY5NjA9c3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNjk2OS1cbm5ldC9zY3RwL3NvY2tldC5jOjY5NzA6XHRpZiAoIWVwLVx1MDAzZWF1dGhfZW5hYmxlKVxubmV0L3NjdHAvc29ja2V0LmMtNjk3MS1cdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxubmV0L3NjdHAvc29ja2V0LmM9Njk5Nj1zdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9hY3RpdmVfa2V5KHN0cnVjdCBzb2NrICpzaywgaW50IGxlbixcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy03MDE4LVx0fSBlbHNlIHtcbm5ldC9zY3RwL3NvY2tldC5jOjcwMTk6XHRcdGlmICghZXAtXHUwMDNlYXV0aF9lbmFibGUpXG5uZXQvc2N0cC9zb2NrZXQuYy03MDIwLVx0XHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTcwNzY9c3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfbG9jYWxfYXV0aF9jaHVua3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTcxMDMtXHR9IGVsc2Uge1xubmV0L3NjdHAvc29ja2V0LmM6NzEwNDpcdFx0aWYgKCFlcC1cdTAwM2VhdXRoX2VuYWJsZSlcbm5ldC9zY3RwL3NvY2tldC5jLTcxMDUtXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxubmV0L3NjdHAvc29ja2V0LmM9Nzg5NT1zdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9hdXRoX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNzkxOS1cdHBhcmFtcy5hc3NvY192YWx1ZSA9IGFzb2MgPyBhc29jLVx1MDAzZXBlZXIuYXV0aF9jYXBhYmxlXG5uZXQvc2N0cC9zb2NrZXQuYzo3OTIwOlx0XHRcdFx0ICA6IHNjdHBfc2soc2spLVx1MDAzZWVwLVx1MDAzZWF1dGhfZW5hYmxlO1xubmV0L3NjdHAvc29ja2V0LmMtNzkyMS1cbi0tXG5uZXQvc2N0cC9zeXNjdGwuYz05NT1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX25ldF90YWJsZVtdID0ge1xuLS1cbm5ldC9zY3RwL3N5c2N0bC5jLTE3Ni1cdFx0LnByb2NuYW1lXHQ9IFwmIzM0O2Nvb2tpZV9obWFjX2FsZ1wmIzM0Oyxcbm5ldC9zY3RwL3N5c2N0bC5jOjE3NzpcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5zY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSxcbm5ldC9zY3RwL3N5c2N0bC5jLTE3OC1cdFx0Lm1heGxlblx0XHQ9IDgsXG4tLVxubmV0L3NjdHAvc3lzY3RsLmMtMjY0LVx0e1xubmV0L3NjdHAvc3lzY3RsLmM6MjY1Olx0XHQucHJvY25hbWVcdD0gXCYjMzQ7YWRkaXBfbm9hdXRoX2VuYWJsZVwmIzM0Oyxcbm5ldC9zY3RwL3N5c2N0bC5jLTI2Ni1cdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5zY3RwLmFkZGlwX25vYXV0aCxcbi0tXG5uZXQvc2N0cC9zeXNjdGwuYy0yODUtXHR7XG5uZXQvc2N0cC9zeXNjdGwuYzoyODY6XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDthdXRoX2VuYWJsZVwmIzM0Oyxcbm5ldC9zY3RwL3N5c2N0bC5jOjI4NzpcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5zY3RwLmF1dGhfZW5hYmxlLFxubmV0L3NjdHAvc3lzY3RsLmMtMjg4LVx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG4tLVxubmV0L3NjdHAvc3lzY3RsLmM9Mzg3PXN0YXRpYyBpbnQgcHJvY19zY3RwX2RvX2htYWNfYWxnKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuLS1cbm5ldC9zY3RwL3N5c2N0bC5jLTM5MC1cdHN0cnVjdCBuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZihjdGwtXHUwMDNlZGF0YSwgc3RydWN0IG5ldCxcbm5ldC9zY3RwL3N5c2N0bC5jOjM5MTpcdFx0XHRcdCAgICAgICBzY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSk7XG5uZXQvc2N0cC9zeXNjdGwuYy0zOTItXHRzdHJ1Y3QgY3RsX3RhYmxlIHRibDtcbi0tXG5uZXQvc2N0cC9zeXNjdGwuYy00MDQtXHRcdGlmICghc3RyY21wKHRtcCwgXCYjMzQ7c2hhMjU2XCYjMzQ7KSkge1xubmV0L3NjdHAvc3lzY3RsLmM6NDA1Olx0XHRcdG5ldC1cdTAwM2VzY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSA9IDE7XG5uZXQvc2N0cC9zeXNjdGwuYy00MDYtXHRcdFx0cmV0dXJuIDA7XG4tLVxubmV0L3NjdHAvc3lzY3RsLmMtNDA4LVx0XHRpZiAoIXN0cmNtcCh0bXAsIFwmIzM0O25vbmVcJiMzNDspKSB7XG5uZXQvc2N0cC9zeXNjdGwuYzo0MDk6XHRcdFx0bmV0LVx1MDAzZXNjdHAuY29va2llX2F1dGhfZW5hYmxlID0gMDtcbm5ldC9zY3RwL3N5c2N0bC5jLTQxMC1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvc2N0cC9zeXNjdGwuYy00MTMtXHR9XG5uZXQvc2N0cC9zeXNjdGwuYzo0MTQ6XHRpZiAobmV0LVx1MDAzZXNjdHAuY29va2llX2F1dGhfZW5hYmxlKVxubmV0L3NjdHAvc3lzY3RsLmMtNDE1LVx0XHR0YmwuZGF0YSA9IChjaGFyICopXCYjMzQ7c2hhMjU2XCYjMzQ7O1xuLS1cbm5ldC9zY3RwL3N5c2N0bC5jPTQ4OD1zdGF0aWMgaW50IHByb2Nfc2N0cF9kb19hdXRoKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuLS1cbm5ldC9zY3RwL3N5c2N0bC5jLTQ5MC17XG5uZXQvc2N0cC9zeXNjdGwuYzo0OTE6XHRzdHJ1Y3QgbmV0ICpuZXQgPSBjb250YWluZXJfb2YoY3RsLVx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHNjdHAuYXV0aF9lbmFibGUpO1xubmV0L3NjdHAvc3lzY3RsLmMtNDkyLVx0c3RydWN0IGN0bF90YWJsZSB0Ymw7XG4tLVxubmV0L3NjdHAvc3lzY3RsLmMtNTAwLVx0ZWxzZVxubmV0L3NjdHAvc3lzY3RsLmM6NTAxOlx0XHR0YmwuZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2VzY3RwLmF1dGhfZW5hYmxlO1xubmV0L3NjdHAvc3lzY3RsLmMtNTAyLVxuLS1cbm5ldC9zY3RwL3N5c2N0bC5jLTUwNi1cbm5ldC9zY3RwL3N5c2N0bC5jOjUwNzpcdFx0bmV0LVx1MDAzZXNjdHAuYXV0aF9lbmFibGUgPSBuZXdfdmFsdWU7XG5uZXQvc2N0cC9zeXNjdGwuYy01MDgtXHRcdC8qIFVwZGF0ZSB0aGUgdmFsdWUgaW4gdGhlIGNvbnRyb2wgc29ja2V0ICovXG5uZXQvc2N0cC9zeXNjdGwuYy01MDktXHRcdGxvY2tfc29jayhzayk7XG5uZXQvc2N0cC9zeXNjdGwuYzo1MTA6XHRcdHNjdHBfc2soc2spLVx1MDAzZWVwLVx1MDAzZWF1dGhfZW5hYmxlID0gbmV3X3ZhbHVlO1xubmV0L3NjdHAvc3lzY3RsLmMtNTExLVx0XHRyZWxlYXNlX3NvY2soc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDY3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgU0NUUCBDb25maWd1cmF0aW9uIExhYnlyaW50aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYXV0aF9lbmFibGVgIHRoaW5nLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBhIGBzeXNjdGxgLCBub3QgYSBLY29uZmlnIG9wdGlvbi4gSW50ZXJlc3RpbmcuIEl0JiMzOTtzIG1ha2luZyBtZSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcGF0aHMuIFRoZSBtYWluIFNDVFAgZmxhZywgYElQX1NDVFBgLCB0aGF0JiMzOTtzIEtjb25maWcuIE5vdyBJJiMzOTttIHN0YXJ0aW5nIHRvIHdvbmRlciBpZiB0aGVyZSBhcmUgKm90aGVyKiBjb25maWd1cmF0aW9ucyBidXJpZWQgaW4gaGVyZS4gSXQgYWx3YXlzIHBheXMgdG8gYmUgdGhvcm91Z2guIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvc2N0cC9LY29uZmlnYCBzcGVjaWZpY2FsbHkgYW5kIHNlZSBpZiBJIGNhbiBmaW5kIGBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfTk9ORWAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSByZWxhdGVkLCBwb3RlbnRpYWxseSBpbXBhY3RmdWwsIHNldHRpbmcuIEdvdHRhIG1hcCBvdXQgdGhlIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19OT05FJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL0tjb25maWc9NjI9Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEEyNTZcbi0tXG5uZXQvc2N0cC9LY29uZmlnLTY0LVxubmV0L3NjdHAvS2NvbmZpZzo2NTpjb25maWcgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX05PTkVcbm5ldC9zY3RwL0tjb25maWctNjYtXHRib29sIFwmIzM0O05vbmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBTQ1RQIEtjb25maWcgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1RpbWUgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSBlbnRpcmUgYG5ldC9zY3RwL0tjb25maWdgIGZpbGUuJiMzNDsgR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBuZXR3b3JraW5nIGFuZCB0aGUgTGludXgga2VybmVsLCB0aGlzIGBLY29uZmlnYCBmaWxlIGlzIGdvaW5nIHRvIGJlIHRoZSBjZW50cmFsIGNvbnRyb2wgcG9pbnQgZm9yIGNvbmZpZ3VyaW5nIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUCkgZmVhdHVyZXMgYW5kIG1vZHVsZXMgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGZvciBzZXZlcmFsIGtleSB0aGluZ3MuIEkgd2FudCB0byBzZWUgaG93IHRoZSB2YXJpb3VzIFNDVFAgb3B0aW9ucyBhcmUgbGFpZCBvdXQgaGllcmFyY2hpY2FsbHksIHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVtLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIG90aGVyIG5ldHdvcmtpbmcgc3Vic3lzdGVtcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgaXQmIzM5O3Mgc3RydWN0dXJlZCwgaXRzIG9yZ2FuaXphdGlvbiwgdGhlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIHN5bWJvbHMsIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGFzc29jaWF0ZWQgaGVscCB0ZXh0LiBJIGFudGljaXBhdGUgZmluZGluZyBjb25kaXRpb25hbHMgYmFzZWQgb24gYXJjaGl0ZWN0dXJlLCBrZXJuZWwgdmVyc2lvbiwgb3Igb3RoZXIgZGVwZW5kZW5jaWVzIGxpa2Ugd2hldGhlciBvdGhlciBuZXR3b3JraW5nIHByb3RvY29scyBhcmUgZW5hYmxlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IGhvdyBvcHRpb25zIGZvciBidW5kbGVkIHN1cHBvcnQgc3VjaCBhcyBNM1VBIG9yIG92ZXIgSVBzZWMgYXJlIGhhbmRsZWQsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGZlYXR1cmVzIHN1Y2ggYXMgbXVsdGlwbGUgc3RyZWFtcywgYW5kIGhvdyB0aGVzZSBzZXR0aW5ncyBhcmUgZXhwb3NlZCBpbiB0aGUgYnVpbGQgc3lzdGVtLiBUaGlzIGBLY29uZmlnYCBmaWxlIHdpbGwgcHJvdmlkZSB0aGUgdWx0aW1hdGUgbWFwIG9mIGhvdyBTQ1RQIGlzIGVuYWJsZWQsIGN1c3RvbWl6ZWQsIGFuZCBpbnRlZ3JhdGVkIGludG8gYSBzcGVjaWZpYyBMaW51eCBrZXJuZWwgYnVpbGQuIFVuZGVyc3RhbmRpbmcgdGhpcyBmaWxlIGlzIHBhcmFtb3VudCB0byBhbnkgZWZmZWN0aXZlIGtlcm5lbC1sZXZlbCBTQ1RQIGRldmVsb3BtZW50IGFuZCB0dW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjdHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBTQ1RQIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBJUF9TQ1RQXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtUaGUgU0NUUCBQcm90b2NvbFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAgMTE6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gIDEyOlx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxMzpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbFxuICAxNjpcdFxuICAxNzpcdFx0ICBGcm9tIFJGQyAyOTYwIFx1MDAzY2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI5NjAudHh0XHUwMDNlLlxuICAxODpcdFxuICAxOTpcdFx0ICBcJiMzNDtTQ1RQIGlzIGEgcmVsaWFibGUgdHJhbnNwb3J0IHByb3RvY29sIG9wZXJhdGluZyBvbiB0b3Agb2YgYVxuICAyMDpcdFx0ICBjb25uZWN0aW9ubGVzcyBwYWNrZXQgbmV0d29yayBzdWNoIGFzIElQLiAgSXQgb2ZmZXJzIHRoZSBmb2xsb3dpbmdcbiAgMjE6XHRcdCAgc2VydmljZXMgdG8gaXRzIHVzZXJzOlxuICAyMjpcdFxuICAyMzpcdFx0ICAtLSBhY2tub3dsZWRnZWQgZXJyb3ItZnJlZSBub24tZHVwbGljYXRlZCB0cmFuc2ZlciBvZiB1c2VyIGRhdGEsXG4gIDI0Olx0XHQgIC0tIGRhdGEgZnJhZ21lbnRhdGlvbiB0byBjb25mb3JtIHRvIGRpc2NvdmVyZWQgcGF0aCBNVFUgc2l6ZSxcbiAgMjU6XHRcdCAgLS0gc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIHVzZXIgbWVzc2FnZXMgd2l0aGluIG11bHRpcGxlIHN0cmVhbXMsXG4gIDI2Olx0XHQgIHdpdGggYW4gb3B0aW9uIGZvciBvcmRlci1vZi1hcnJpdmFsIGRlbGl2ZXJ5IG9mIGluZGl2aWR1YWwgdXNlclxuICAyNzpcdFx0ICBtZXNzYWdlcyxcbiAgMjg6XHRcdCAgLS0gb3B0aW9uYWwgYnVuZGxpbmcgb2YgbXVsdGlwbGUgdXNlciBtZXNzYWdlcyBpbnRvIGEgc2luZ2xlIFNDVFBcbiAgMjk6XHRcdCAgcGFja2V0LCBhbmRcbiAgMzA6XHRcdCAgLS0gbmV0d29yay1sZXZlbCBmYXVsdCB0b2xlcmFuY2UgdGhyb3VnaCBzdXBwb3J0aW5nIG9mIG11bHRpLVxuICAzMTpcdFx0ICBob21pbmcgYXQgZWl0aGVyIG9yIGJvdGggZW5kcyBvZiBhbiBhc3NvY2lhdGlvbi5cJiMzNDtcbiAgMzI6XHRcbiAgMzM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIHByb3RvY29sIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAzNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2N0cC4gRGVidWcgbWVzc2FnZXMgYXJlIGhhbmRsZWQgYnkgdGhlXG4gIDM1Olx0XHQgIGtlcm5lbCYjMzk7cyBkeW5hbWljIGRlYnVnZ2luZyBmcmFtZXdvcmsuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cbiAgMzg6XHRcbiAgMzk6XHRpZiBJUF9TQ1RQXG4gIDQwOlx0XG4gIDQxOlx0Y29uZmlnIFNDVFBfREJHX09CSkNOVFxuICA0MjpcdFx0Ym9vbCBcJiMzNDtTQ1RQOiBEZWJ1ZyBvYmplY3QgY291bnRzXCYjMzQ7XG4gIDQzOlx0XHRkZXBlbmRzIG9uIFBST0NfRlNcbiAgNDQ6XHRcdGhlbHBcbiAgNDU6XHRcdCAgSWYgeW91IHNheSBZLCB0aGlzIHdpbGwgZW5hYmxlIGRlYnVnZ2luZyBzdXBwb3J0IGZvciBjb3VudGluZyB0aGVcbiAgNDY6XHRcdCAgdHlwZSBvZiBvYmplY3RzIHRoYXQgYXJlIGN1cnJlbnRseSBhbGxvY2F0ZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3JcbiAgNDc6XHRcdCAgaWRlbnRpZnlpbmcgbWVtb3J5IGxlYWtzLiBUaGlzIGRlYnVnIGluZm9ybWF0aW9uIGNhbiBiZSB2aWV3ZWQgYnlcbiAgNDg6XHRcdCAgJiMzOTtjYXQgL3Byb2MvbmV0L3NjdHAvc2N0cF9kYmdfb2JqY250JiMzOTtcbiAgNDk6XHRcbiAgNTA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTlxuICA1MTpcdFxuICA1MjpcdGNob2ljZVxuICA1MzpcdFx0cHJvbXB0IFwmIzM0O0RlZmF1bHQgU0NUUCBjb29raWUgYXV0aGVudGljYXRpb24gbWV0aG9kXCYjMzQ7XG4gIDU0Olx0XHRkZWZhdWx0IFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEEyNTZcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgZGVmYXVsdCBTQ1RQIGNvb2tpZSBhdXRoZW50aWNhdGlvbiBtZXRob2QsIGZvclxuICA1NzpcdFx0ICB3aGVuIGEgbWV0aG9kIGhhc24mIzM5O3QgYmVlbiBleHBsaWNpdGx5IHNlbGVjdGVkIHZpYSB0aGVcbiAgNTg6XHRcdCAgbmV0LnNjdHAuY29va2llX2htYWNfYWxnIHN5c2N0bC5cbiAgNTk6XHRcbiAgNjA6XHRcdCAgSWYgdW5zdXJlLCBjaG9vc2UgdGhlIGRlZmF1bHQgKEhNQUMtU0hBMjU2KS5cbiAgNjE6XHRcbiAgNjI6XHRjb25maWcgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX1NIQTI1NlxuICA2MzpcdFx0Ym9vbCBcJiMzNDtITUFDLVNIQTI1NlwmIzM0O1xuICA2NDpcdFxuICA2NTpcdGNvbmZpZyBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfTk9ORVxuICA2NjpcdFx0Ym9vbCBcJiMzNDtOb25lXCYjMzQ7XG4gIDY3Olx0XG4gIDY4Olx0ZW5kY2hvaWNlXG4gIDY5Olx0XG4gIDcwOlx0Y29uZmlnIElORVRfU0NUUF9ESUFHXG4gIDcxOlx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICA3MjpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICA3MzpcdFxuICA3NDpcdFxuICA3NTpcdGVuZGlmICMgSVBfU0NUUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE4MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTQ1RQIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGl0IGxvb2tzIGxpa2UgYElQX1NDVFBgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlIG5lZWQgdG8gY29uc2lkZXIgaGVyZS4gTm93LCBsZXQmIzM5O3MgY2FyZWZ1bGx5IHJldmlldyB0aGUgZm9jdXMgc3ltYm9scyBpZGVudGlmaWVkLiBJJiMzOTttIHNlZWluZzoKCiogICBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYAoqICAgYHNjdHBfcGFja2V0X3RyYW5zbWl0YAoqICAgYHNjdHBfc2ZfZG9fNV8xRF9jZWAKKiAgIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAKKiAgIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAKKiAgIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAKKiAgIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAKClRoZXNlIGFsbCBsb29rIHJlbGV2YW50LCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmUtZXZhbHVhdGUgYHNjdHBfcGFja2V0X3RyYW5zbWl0YC4gSXQgc2VlbWVkIGEgYml0IGJyb2FkIGF0IGZpcnN0LCBidXQgcmVtZW1iZXJpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGZsb3csIHRoZSBhY3R1YWwgZXJyb3IgaGFuZGxpbmcgcmVzaWRlcyB3aXRoaW4gYSBzdGF0aWMgZnVuY3Rpb24gYHNjdHBfcGFja2V0X3BhY2tgIGFuZCwgY3JpdGljYWxseSwgYHNjdHBfcGFja2V0X3RyYW5zbWl0YCBjYWxscyB0aGlzIGZ1bmN0aW9uLiBTbywgSSB3aWxsIGluY2x1ZGUgaXQuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGUgYXV0aGVudGljYXRpb24tcmVsYXRlZCBzeW1ib2xzIGFyZSBhY3R1YWxseSBzdGF0aWMgYXMgSSBpbml0aWFsbHkgdGhvdWdodC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBzb21ldGhpbmcuCgpPa2F5LCBjaGVja2luZyBgbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNgLCBgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeWAgKmlzKiBpbmRlZWQgc3RhdGljLiBJdHMgY2FsbGVycyBhcmUgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAsIGFuZCBgc2N0cF9zZl9kb19kdXBjb29rX2RgLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4KCk5vdyB0byByZS12ZXJpZnkgYHNjdHBfc2ZfYXV0aGVudGljYXRlYC4gWWVzLCBpdCYjMzk7cyBhbHNvIHN0YXRpYywgaW4gYG5ldC9zY3RwL3NtX3N0YXRlZnVucy5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjdHBfc2ZfYXV0aGVudGljYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTE0Mj1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfdmlvbGF0aW9uX2NodW5rKFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTE0OS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjE1MDpzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTE1MS1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NjQwPXN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTY3Mi1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjY3MzpcdHJldHVybiBzY3RwX3NmX2F1dGhlbnRpY2F0ZShhc29jLCBcdTAwMjZhdXRoKTtcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTY3NC19XG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDMzNT1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9lYXRfZndkX3Rzbl9mYXN0KFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ0MjItICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0NDIzOnN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfc2ZfYXV0aGVudGljYXRlKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDQyNC1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDUwMT1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9lYXRfYXV0aChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDUyNy1cdGF1dGhfaGRyID0gKHN0cnVjdCBzY3RwX2F1dGhoZHIgKiljaHVuay1cdTAwM2Vza2ItXHUwMDNlZGF0YTtcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQ1Mjg6XHRlcnJvciA9IHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIGNodW5rKTtcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ1MjktXHRzd2l0Y2ggKGVycm9yKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTYyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiAqKkFuYWx5emluZyB0aGUgYHNjdHBfc2ZfYXV0aGVudGljYXRlYCBGdW5jdGlvbioqCgpSaWdodCwgc28gYHNjdHBfc2ZfYXV0aGVudGljYXRlYCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8gaXMgY2FsbGluZyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgc2N0cF9zZl9lYXRfYXV0aGAsIGBzY3RwX3NmX2RvXzVfMURfY2VgLCBgc2N0cF9zZl9kb19kdXBjb29rX2FgLCBgc2N0cF9zZl9kb19kdXBjb29rX2JgLCBhbmQgYHNjdHBfc2ZfZG9fZHVwY29va19kYCBhcmUgYWxsIGNhbGxpbmcgaXQuCgpIYW5nIG9uIGEgc2Vjb25k4oCmIEkgY291bGQgaGF2ZSBzd29ybiB0aGF0IGBzY3RwX3NmX2VhdF9hdXRoYCB3YXMgc3RhdGljIHRvby4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYmVjYXVzZSBteSBtZW1vcnkgbWlnaHQgbm90IGJlIHRoZSBiZXN0IGFuZCB0aGlzIGlzIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9zZl9lYXRfYXV0aCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00NDIzPXN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfc2ZfYXV0aGVudGljYXRlKFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ1MDAtXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0NTAxOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2VhdF9hdXRoKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ1MDItXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRldGFibGUuYz00OTg9cmVjb25mX2NodW5rX2V2ZW50X3RhYmxlW1NDVFBfTlVNX1JFQ09ORl9DSFVOS19UWVBFU11bU0NUUF9TVEFURV9OVU1fU1RBVEVTXSA9IHtcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMtNTA3LVx0LyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmM6NTA4Olx0VFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lYXRfYXV0aCksIFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMtNTA5LVx0LyogU0NUUF9TVEFURV9FU1RBQkxJU0hFRCAqLyBcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jOjUxMDpcdFRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X2F1dGgpLCBcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jLTUxMS1cdC8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jOjUxMjpcdFRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X2F1dGgpLCBcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jLTUxMy1cdC8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jOjUxNDpcdFRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X2F1dGgpLCBcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jLTUxNS1cdC8qIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgKi8gXFxcbm5ldC9zY3RwL3NtX3N0YXRldGFibGUuYzo1MTY6XHRUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2VhdF9hdXRoKSwgXFxcbm5ldC9zY3RwL3NtX3N0YXRldGFibGUuYy01MTctXHQvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmM6NTE4Olx0VFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lYXRfYXV0aCksIFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMtNTE5LX0gLyogVFlQRV9TQ1RQX0FVVEggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0NUUCBGdW5jdGlvbiBBdHRyaWJ1dGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBvdmVyIHRoaXMgU0NUUCBjb2RlLCBzcGVjaWZpY2FsbHkgYXQgdGhlc2UgZnVuY3Rpb25zLiBJdCYjMzk7cyBnb29kIHRvIGNsYXJpZnkgdGhlc2UgZGV0YWlscy4gSSBjYW4gc2VlIHRoYXQgYHNjdHBfc2ZfZWF0X2F1dGhgIGlzIGRlZmluaXRlbHkgbm90IGRlY2xhcmVkIGFzIHN0YXRpYyDigJMgdGhhdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gQW5kIEkgY29uZmlybSB0aGF0IGBzY3RwX3NmX2RvXzVfMURfY2VgIGlzIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdGVkLiBOb3csIEkgaGF2ZSBhIGZlZWxpbmcgYWJvdXQgdGhlIGBzY3RwX3NmX2RvX2R1cGNvb2tfKmAgZmFtaWx5LiBMZXQmIzM5O3Mgc2VlLi4uIGFyZSBgc2N0cF9zZl9kb19kdXBjb29rX2FgLCBgc2N0cF9zZl9kb19kdXBjb29rX2JgLCBhbmQgYHNjdHBfc2ZfZG9fZHVwY29va19kYCBkZWNsYXJlZCBzdGF0aWM/IEdvdHRhIGRvdWJsZSBjaGVjayB0aG9zZSB0byBiZSBzdXJlLCBhbmQgSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCBpbiBteSB3b3JraW5nIGRvY3VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX3NmX2RvX2R1cGNvb2tfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTE4NjA9c3RhdGljIGludCBzY3RwX3NmX2RvX2Fzc29jX3VwZGF0ZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xODg4LSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MTg4OTpzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19hKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTg5MC1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIwMTYtLyogVGhpcyBjYXNlIHJlcHJlc2VudHMgYW4gaW5pdGlhbGl6YXRpb24gY29sbGlzaW9uLiAgKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIwMTc6c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYihcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIwMTgtXHRcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMTA1LS8qIFRoaXMgY2FzZSByZXByZXNlbnRzIGFuIGluaXRpYWxpemF0aW9uIGNvbGxpc2lvbi4gICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMTA2OnN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2MoXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMTA3LVx0XHRcdFx0XHRzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjEyOC0vKiBUaGlzIGNhc2UgcmVwcmVzZW50cyBhbiBpbml0aWFsaXphdGlvbiBjb2xsaXNpb24uICAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MjEyOTpzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19kKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjEzMC1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTIyNDY9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayhcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzU0LVx0Y2FzZSAmIzM5O0EmIzM5OzogLyogQXNzb2NpYXRpb24gcmVzdGFydC4gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIzNTU6XHRcdHJldHZhbCA9IHNjdHBfc2ZfZG9fZHVwY29va19hKG5ldCwgZXAsIGFzb2MsIGNodW5rLCBjb21tYW5kcyxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNTYtXHRcdFx0XHRcdCAgICAgIG5ld19hc29jKTtcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzU5LVx0Y2FzZSAmIzM5O0ImIzM5OzogLyogQ29sbGlzaW9uIGNhc2UgQi4gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIzNjA6XHRcdHJldHZhbCA9IHNjdHBfc2ZfZG9fZHVwY29va19iKG5ldCwgZXAsIGFzb2MsIGNodW5rLCBjb21tYW5kcyxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNjEtXHRcdFx0XHRcdCAgICAgIG5ld19hc29jKTtcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzY0LVx0Y2FzZSAmIzM5O0MmIzM5OzogLyogQ29sbGlzaW9uIGNhc2UgQy4gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIzNjU6XHRcdHJldHZhbCA9IHNjdHBfc2ZfZG9fZHVwY29va19jKG5ldCwgZXAsIGFzb2MsIGNodW5rLCBjb21tYW5kcyxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNjYtXHRcdFx0XHRcdCAgICAgIG5ld19hc29jKTtcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzY5LVx0Y2FzZSAmIzM5O0QmIzM5OzogLyogQ29sbGlzaW9uIGNhc2UgRC4gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIzNzA6XHRcdHJldHZhbCA9IHNjdHBfc2ZfZG9fZHVwY29va19kKG5ldCwgZXAsIGFzb2MsIGNodW5rLCBjb21tYW5kcyxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNzEtXHRcdFx0XHRcdCAgICAgIG5ld19hc29jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBTdGF0aWMgRnVuY3Rpb25zKioKCkFscmlnaHQsIHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBleGFtaW5pbmcgc2VlbSB0byBiZSBzdGF0aWNhbGx5IGRlY2xhcmVkLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCYjMzk7cyBjYWxsaW5nIHRoZW0sIHdoaWNoIGFwcGVhcnMgdG8gYmUgYHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va2AuIEJhc2VkIG9uIHRoaXMsIEkgbmVlZCB0byBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uIG9uIGEgc2VsZWN0IGdyb3VwIG9mIHN5bWJvbHMgcmVsYXRlZCB0byB0aGlzLgoKVGhlIGNydWNpYWwgb25lcyB0byBleGFtaW5lIGFyZToKLSAgIGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgCi0gICBgc2N0cF9wYWNrZXRfdHJhbnNtaXRgCi0gICBgc2N0cF9zZl9kb181XzFEX2NlYAotICAgYHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va2AKLSAgIGBzY3RwX3NmX2VhdF9hdXRoYAoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYCBpcywgaW4gZmFjdCwgbm9uLXN0YXRpYy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGRpZ2dpbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2F1dGguYz01OTU9aW50IHNjdHBfYXV0aF9yZWN2X2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLCBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbi0tXG5uZXQvc2N0cC9hdXRoLmMtNjE1LSAqL1xubmV0L3NjdHAvYXV0aC5jOjYxNjppbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxubmV0L3NjdHAvYXV0aC5jLTYxNy1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXG4tLVxubmV0L3NjdHAvb3V0cHV0LmM9NDM2PXN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCxcbi0tXG5uZXQvc2N0cC9vdXRwdXQuYy01MTktXHRcdGlmIChhdXRoKSB7XG5uZXQvc2N0cC9vdXRwdXQuYzo1MjA6XHRcdFx0aWYgKHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyh0cC1cdTAwM2Vhc29jLCBuc2tiLCBhdXRoLFxubmV0L3NjdHAvb3V0cHV0LmMtNTIxLVx0XHRcdFx0XHRcdCAgICAgcGFja2V0LVx1MDAzZWF1dGgtXHUwMDNlc2hrZXksIGdmcCkpIHtcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00NDIzPXN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfc2ZfYXV0aGVudGljYXRlKFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ0NzktXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0NDgwOlx0aWYgKHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhhc29jLCBjaHVuay1cdTAwM2Vza2IsXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NDgxLVx0XHRcdFx0ICAgICAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLVx1MDAzZWNodW5rX2hkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MTUKCQkJCQkJCW91dHB1dDogMTk2CgkJCQkJCQl0aG91Z2h0czogMzMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNDVFAgQXV0aGVudGljYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBpc24mIzM5O3Qgc3RhdGljIGNvZGUsIHRoYXQmIzM5O3MgY2xlYXIuIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgY29kZSBwb2ludHMgbWUgdG8gdGhlc2Uga2V5IHN5bWJvbHMgZm9yIGRlZXBlciBhbmFseXNpczogYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AsIGBzY3RwX3BhY2tldF90cmFuc21pdGAsIGBzY3RwX3NmX2RvXzVfMURfY2VgLCBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYCwgYW5kIGBzY3RwX3NmX2VhdF9hdXRoYC4gSSYjMzk7bSBzZWVpbmcgdGhlIGBJUF9TQ1RQYCBjb25maWcgYmVpbmcgcmVsZXZhbnQuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBgSVBfU0NUUGAgaXMgdGhlIG9ubHkgY29uZmlnIG9mIHJlbGV2YW5jZSBoZXJlLiBIbSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBjb21lIGludG8gcGxheS4gQWgsIGFscmlnaHQuIExvb2tzIGxpa2UgYElQX1NDVFBgIGFsc28gc2VsZWN0cyBgQ1JZUFRPX0xJQl9TSEExYCwgYENSWVBUT19MSUJfU0hBMjU2YCwgYW5kIGBDUllQVE9fTElCX1VUSUxTYC4gU28sIHllcywgYElQX1NDVFBgIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZnVuY3Rpb25hbCBpbXBhY3QuIFRoZSBwYXRjaCBpcyBhYm91dCBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBpbiBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJldHVybiB0eXBlIG9mIGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIGFuZCB0aGVuIG1vZGlmaWVzIHRoZSBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIGluIGBzY3RwX3BhY2tldF9wYWNrYCBhbmQgYHNjdHBfc2ZfYXV0aGVudGljYXRlYCB0byBoYW5kbGUgYW4gZXJyb3IuIFRoaXMgcHJldmVudHMgdGhlIHBvc3NpYmlsaXR5IG9mIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIHNpbGVudCBmYWlsdXJlcy4gVGhpcyB0eXBlIG9mIGNvcmUgbmV0d29yayBsb2dpYyBjaGFuZ2UgaGFzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LgoKVGhlcmVmb3JlLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgd2FudCB0byBmdXp6LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY3JpdGljYWwgYXJlYS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyYjMzQ7LAogICAgJiMzNDtzY3RwX3BhY2tldF90cmFuc21pdCYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2RvXzVfMURfY2UmIzM0OywKICAgICYjMzQ7c2N0cF9zZl9kb181XzJfNF9kdXBjb29rJiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZWF0X2F1dGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gSXQgdXBkYXRlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjIGFuZCBtb2RpZmllcyBjYWxsZXJzIGluIHNjdHBfcGFja2V0X3BhY2sgYW5kIHNjdHBfc2ZfYXV0aGVudGljYXRlIHRvIGhhbmRsZSB0aGUgZXJyb3IsIHByZXZlbnRpbmcgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc2lsZW50IGZhaWx1cmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyYjMzQ7LAogICAgJiMzNDtzY3RwX3BhY2tldF90cmFuc21pdCYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2RvXzVfMURfY2UmIzM0OywKICAgICYjMzQ7c2N0cF9zZl9kb181XzJfNF9kdXBjb29rJiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZWF0X2F1dGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gSXQgdXBkYXRlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjIGFuZCBtb2RpZmllcyBjYWxsZXJzIGluIHNjdHBfcGFja2V0X3BhY2sgYW5kIHNjdHBfc2ZfYXV0aGVudGljYXRlIHRvIGhhbmRsZSB0aGUgZXJyb3IsIHByZXZlbnRpbmcgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc2lsZW50IGZhaWx1cmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU0OjI5LjcwNTU5MjczM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NjgyODI3OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNcIixcbiAgICBcInNjdHBfcGFja2V0X3RyYW5zbWl0XCIsXG4gICAgXCJzY3RwX3NmX2RvXzVfMURfY2VcIixcbiAgICBcInNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va1wiLFxuICAgIFwic2N0cF9zZl9lYXRfYXV0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT01FTSkuIEl0IHVwZGF0ZXMgdGhlIHJldHVybiB0eXBlIG9mIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyBhbmQgbW9kaWZpZXMgY2FsbGVycyBpbiBzY3RwX3BhY2tldF9wYWNrIGFuZCBzY3RwX3NmX2F1dGhlbnRpY2F0ZSB0byBoYW5kbGUgdGhlIGVycm9yLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHNpbGVudCBmYWlsdXJlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU0OjI5LjcwNTYwMjI0MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzODE4MTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGJhMGMzZjgyNTQwOGYxODE5OWU3ZjNlYjBmODAyMDY3NmYzMzFhNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDA3OjU0OjI4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmhcXG5pbmRleCA2ZjJjZDU2MmIxZGU2Li5lZWIzMjk3ZmU5N2QzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oXFxuKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmhcXG5AQCAtODMsOSArODMsOSBAQCBpbnQgc2N0cF9hdXRoX3NlbmRfY2lkKGVudW0gc2N0cF9jaWQgY2h1bmssXFxuIFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7XFxuIGludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuayxcXG4gXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTtcXG4tdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXFxuLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcXG4raW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcXG4gdm9pZCBzY3RwX2F1dGhfc2hrZXlfcmVsZWFzZShzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpO1xcbiB2b2lkIHNjdHBfYXV0aF9zaGtleV9ob2xkKHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKnNoX2tleSk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hdXRoLmMgYi9uZXQvc2N0cC9hdXRoLmNcXG5pbmRleCBjOTAxZDM3M2FmODAzLi42ZGU2NmY1NmM0MWNlIDEwMDY0NFxcbi0tLSBhL25ldC9zY3RwL2F1dGguY1xcbisrKyBiL25ldC9zY3RwL2F1dGguY1xcbkBAIC02MTMsOSArNjEzLDkgQEAgaW50IHNjdHBfYXV0aF9yZWN2X2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLCBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcXG4gICogICAgemVybyAoYXMgc2hvd24gaW4gRmlndXJlIDYpIGZvbGxvd2VkIGJ5IGFsbCBjaHVua3MgdGhhdCBhcmUgcGxhY2VkXFxuICAqICAgIGFmdGVyIHRoZSBBVVRIIGNodW5rIGluIHRoZSBTQ1RQIHBhY2tldC5cXG4gICovXFxuLXZvaWQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxcbi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICplcF9rZXksIGdmcF90IGdmcClcXG4raW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKVxcbiB7XFxuIFxcdHN0cnVjdCBzY3RwX2F1dGhfYnl0ZXMgKmFzb2Nfa2V5O1xcbiBcXHRfX3UxNiBrZXlfaWQsIGhtYWNfaWQ7XFxuQEAgLTYzNiw3ICs2MzYsNyBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4gXFx0XFx0LyogZXBfa2V5IGNhbid0IGJlIE5VTEwgaGVyZSAqL1xcbiBcXHRcXHRhc29jX2tleSA9IHNjdHBfYXV0aF9hc29jX2NyZWF0ZV9zZWNyZXQoYXNvYywgZXBfa2V5LCBnZnApO1xcbiBcXHRcXHRpZiAoIWFzb2Nfa2V5KVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0XFx0ZnJlZV9rZXkgPSAxO1xcbiBcXHR9XFxuQEAgLTY1NCw2ICs2NTQsOCBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4gXFxuIFxcdGlmIChmcmVlX2tleSlcXG4gXFx0XFx0c2N0cF9hdXRoX2tleV9wdXQoYXNvY19rZXkpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qIEFQSSBIZWxwZXJzICovXFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmNcXG5pbmRleCAyM2U5NjMwNWNhZDdjLi4zZDdlYWQ5ZDQwZTE5IDEwMDY0NFxcbi0tLSBhL25ldC9zY3RwL291dHB1dC5jXFxuKysrIGIvbmV0L3NjdHAvb3V0cHV0LmNcXG5AQCAtNTE3LDggKzUxNywxNCBAQCBzdGF0aWMgaW50IHNjdHBfcGFja2V0X3BhY2soc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQsXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChhdXRoKSB7XFxuLVxcdFxcdFxcdHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyh0cC1cXHUwMDNlYXNvYywgbnNrYiwgYXV0aCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHBhY2tldC1cXHUwMDNlYXV0aC1cXHUwMDNlc2hrZXksIGdmcCk7XFxuK1xcdFxcdFxcdGlmIChzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWModHAtXFx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGFja2V0LVxcdTAwM2VhdXRoLVxcdTAwM2VzaGtleSwgZ2ZwKSkge1xcbitcXHRcXHRcXHRcXHRzY3RwX2NodW5rX2ZyZWUocGFja2V0LVxcdTAwM2VhdXRoKTtcXG4rXFx0XFx0XFx0XFx0cGFja2V0LVxcdTAwM2VhdXRoID0gTlVMTDtcXG4rXFx0XFx0XFx0XFx0aWYgKGdzbylcXG4rXFx0XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKG5za2IpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHQvKiBmcmVlIGF1dGggaWYgbm8gbW9yZSBjaHVua3MsIG9yIGFkZCBpdCBiYWNrICovXFxuIFxcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZwYWNrZXQtXFx1MDAzZWNodW5rX2xpc3QpKVxcbiBcXHRcXHRcXHRcXHRzY3RwX2NodW5rX2ZyZWUocGFja2V0LVxcdTAwM2VhdXRoKTtcXG5AQCAtNjE5LDcgKzYyNSw3IEBAIGludCBzY3RwX3BhY2tldF90cmFuc21pdChzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCwgZ2ZwX3QgZ2ZwKVxcbiBcXG4gXFx0LyogcGFjayB1cCBjaHVua3MgKi9cXG4gXFx0cGt0X2NvdW50ID0gc2N0cF9wYWNrZXRfcGFjayhwYWNrZXQsIGhlYWQsIGdzbywgZ2ZwKTtcXG4tXFx0aWYgKCFwa3RfY291bnQpIHtcXG4rXFx0aWYgKHBrdF9jb3VudCBcXHUwMDNjPSAwKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihoZWFkKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1xcbmluZGV4IDcwOGZhMDdkNWZmZmMuLmUxOTg4MWM5MGI0OTkgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcXG4rKysgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1xcbkBAIC02MzcsMTMgKzYzNywxNyBAQCBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFDX2FjayhzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXFxuLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxcbitzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxcbiB7XFxuIFxcdHN0cnVjdCBzY3RwX2NodW5rIGF1dGg7XFxuIFxcbi1cXHRpZiAoIWNodW5rLVxcdTAwM2VhdXRoX2NodW5rKVxcbi1cXHRcXHRyZXR1cm4gIXNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay1cXHUwMDNlY2h1bmtfaGRyLVxcdTAwM2V0eXBlLCBhc29jKTtcXG4rXFx0aWYgKCFjaHVuay1cXHUwMDNlYXV0aF9jaHVuaykge1xcbitcXHRcXHRpZiAoc2N0cF9hdXRoX3JlY3ZfY2lkKGNodW5rLVxcdTAwM2VjaHVua19oZHItXFx1MDAzZXR5cGUsIGFzb2MpKVxcbitcXHRcXHRcXHRyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NJRztcXG4rXFx0XFx0cmV0dXJuIFNDVFBfSUVSUk9SX05PX0VSUk9SO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBTQ1RQLUFVVEg6ICBhdXRoX2NodW5rIHBvaW50ZXIgaXMgb25seSBzZXQgd2hlbiB0aGUgY29va2llLWVjaG9cXG4gXFx0ICogaXMgc3VwcG9zZWQgdG8gYmUgYXV0aGVudGljYXRlZCBhbmQgd2UgaGF2ZSB0byBkbyBkZWxheWVkXFxuQEAgLTY1NCw3ICs2NTgsNyBAQCBzdGF0aWMgYm9vbCBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxcbiBcXG4gXFx0LyogTWFrZSBzdXJlIHRoYXQgd2UgYW5kIHRoZSBwZWVyIGFyZSBBVVRIIGNhcGFibGUgKi9cXG4gXFx0aWYgKCFuZXQtXFx1MDAzZXNjdHAuYXV0aF9lbmFibGUgfHwgIWFzb2MtXFx1MDAzZXBlZXIuYXV0aF9jYXBhYmxlKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdHJldHVybiBTQ1RQX0lFUlJPUl9CQURfU0lHO1xcbiBcXG4gXFx0Lyogc2V0LXVwIG91ciBmYWtlIGNodW5rIHNvIHRoYXQgd2UgY2FuIHByb2Nlc3MgaXQgKi9cXG4gXFx0YXV0aC5za2IgPSBjaHVuay1cXHUwMDNlYXV0aF9jaHVuaztcXG5AQCAtNjY2LDcgKzY3MCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXFxuIFxcdHNrYl9wdWxsKGNodW5rLVxcdTAwM2VhdXRoX2NodW5rLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTtcXG4gXFx0YXV0aC50cmFuc3BvcnQgPSBjaHVuay1cXHUwMDNldHJhbnNwb3J0O1xcbiBcXG4tXFx0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFxcdTAwMjZhdXRoKSA9PSBTQ1RQX0lFUlJPUl9OT19FUlJPUjtcXG4rXFx0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFxcdTAwMjZhdXRoKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtODI2LDggKzgzMCwxMSBAQCBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFEX2NlKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRnb3RvIG5vbWVtX2luaXQ7XFxuIFxcbi1cXHRpZiAoIXNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpKSB7XFxuK1xcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYyk7XFxuK1xcdGlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikge1xcbiBcXHRcXHRzY3RwX2Fzc29jaWF0aW9uX2ZyZWUobmV3X2Fzb2MpO1xcbitcXHRcXHRpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pXFxuK1xcdFxcdFxcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNO1xcbiBcXHRcXHRyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChuZXQsIGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTg4OSw2ICsxODk2LDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYShcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpwZWVyX2luaXQ7XFxuIFxcdGVudW0gc2N0cF9kaXNwb3NpdGlvbiBkaXNwb3NpdGlvbjtcXG4rXFx0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcXG4gXFx0c3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2O1xcbiBcXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDtcXG4gXFx0c3RydWN0IHNjdHBfY2h1bmsgKmVycjtcXG5AQCAtMTkwNCw4ICsxOTEyLDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2EoXFxuIFxcdGlmIChzY3RwX2F1dGhfYXNvY19pbml0X2FjdGl2ZV9rZXkobmV3X2Fzb2MsIEdGUF9BVE9NSUMpKVxcbiBcXHRcXHRnb3RvIG5vbWVtO1xcbiBcXG4tXFx0aWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSlcXG4rXFx0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcXG4rXFx0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XFxuK1xcdFxcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XFxuIFxcdFxcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIE1ha2Ugc3VyZSBubyBuZXcgYWRkcmVzc2VzIGFyZSBiZWluZyBhZGRlZCBkdXJpbmcgdGhlXFxuIFxcdCAqIHJlc3RhcnQuICBUaG91Z2ggdGhpcyBpcyBhIHByZXR0eSBjb21wbGljYXRlZCBhdHRhY2tcXG5AQCAtMjAxMSw2ICsyMDIzLDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYihcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKm5ld19hc29jKVxcbiB7XFxuIFxcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcXG4rXFx0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcXG4gXFx0c3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7XFxuIFxcbiBcXHQvKiBuZXdfYXNvYyBpcyBhIGJyYW5kLW5ldyBhc3NvY2lhdGlvbiwgc28gdGhlc2UgYXJlIG5vdCB5ZXRcXG5AQCAtMjAyNCw4ICsyMDM3LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2IoXFxuIFxcdGlmIChzY3RwX2F1dGhfYXNvY19pbml0X2FjdGl2ZV9rZXkobmV3X2Fzb2MsIEdGUF9BVE9NSUMpKVxcbiBcXHRcXHRnb3RvIG5vbWVtO1xcbiBcXG4tXFx0aWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSlcXG4rXFx0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcXG4rXFx0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XFxuK1xcdFxcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XFxuIFxcdFxcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XFxuK1xcdH1cXG4gXFxuIFxcdHNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfTkVXX1NUQVRFLFxcbiBcXHRcXHRcXHRTQ1RQX1NUQVRFKFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQpKTtcXG5AQCAtMjExOCw2ICsyMTM1LDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfZChcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKm5ld19hc29jKVxcbiB7XFxuIFxcdHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldiA9IE5VTEwsICphaV9ldiA9IE5VTEwsICphdXRoX2V2ID0gTlVMTDtcXG4rXFx0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcXG4gXFx0c3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7XFxuIFxcbiBcXHQvKiBDbGFyaWZpY2F0aW9uIGZyb20gSW1wbGVtZW50b3IncyBHdWlkZTpcXG5AQCAtMjEyNyw4ICsyMTQ1LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXFxuIFxcdCAqIGEgQ09PS0lFIEFDSy5cXG4gXFx0ICovXFxuIFxcbi1cXHRpZiAoIXNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgYXNvYykpXFxuK1xcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKTtcXG4rXFx0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XFxuK1xcdFxcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XFxuIFxcdFxcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIERvbid0IGFjY2lkZW50YWxseSBtb3ZlIGJhY2sgaW50byBlc3RhYmxpc2hlZCBzdGF0ZS4gKi9cXG4gXFx0aWYgKGFzb2MtXFx1MDAzZXN0YXRlIFxcdTAwM2MgU0NUUF9TVEFURV9FU1RBQkxJU0hFRCkge1xcbkBAIC00NDU1LDkgKzQ0NzcsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9zZl9hdXRoZW50aWNhdGUoXFxuIFxcbiBcXHRtZW1zZXQoZGlnZXN0LCAwLCBzaWdfbGVuKTtcXG4gXFxuLVxcdHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhhc29jLCBjaHVuay1cXHUwMDNlc2tiLFxcbi1cXHRcXHRcXHRcXHQgKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKiljaHVuay1cXHUwMDNlY2h1bmtfaGRyLFxcbi1cXHRcXHRcXHRcXHQgc2hfa2V5LCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhhc29jLCBjaHVuay1cXHUwMDNlc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgIChzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICopY2h1bmstXFx1MDAzZWNodW5rX2hkcixcXG4rXFx0XFx0XFx0XFx0ICAgICBzaF9rZXksIEdGUF9BVE9NSUMpKSB7XFxuK1xcdFxcdGtmcmVlKHNhdmVfZGlnZXN0KTtcXG4rXFx0XFx0cmV0dXJuIFNDVFBfSUVSUk9SX05PTUVNO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBEaXNjYXJkIHRoZSBwYWNrZXQgaWYgdGhlIGRpZ2VzdHMgZG8gbm90IG1hdGNoICovXFxuIFxcdGlmIChjcnlwdG9fbWVtbmVxKHNhdmVfZGlnZXN0LCBkaWdlc3QsIHNpZ19sZW4pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU0OjMwLjIyMDQ2MTcwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY4MTY3OTQ2ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNcIixcbiAgICBcInNjdHBfcGFja2V0X3RyYW5zbWl0XCIsXG4gICAgXCJzY3RwX3NmX2RvXzVfMURfY2VcIixcbiAgICBcInNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va1wiLFxuICAgIFwic2N0cF9zZl9lYXRfYXV0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT01FTSkuIEl0IHVwZGF0ZXMgdGhlIHJldHVybiB0eXBlIG9mIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyBhbmQgbW9kaWZpZXMgY2FsbGVycyBpbiBzY3RwX3BhY2tldF9wYWNrIGFuZCBzY3RwX3NmX2F1dGhlbnRpY2F0ZSB0byBoYW5kbGUgdGhlIGVycm9yLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHNpbGVudCBmYWlsdXJlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRiYTBjM2Y4MjU0MDhmMTgxOTllN2YzZWIwZjgwMjA2NzZmMzMxYTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA3OjU0OjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmggYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaFxuaW5kZXggNmYyY2Q1NjJiMWRlNi4uZWViMzI5N2ZlOTdkMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oXG4rKysgYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaFxuQEAgLTgzLDkgKzgzLDkgQEAgaW50IHNjdHBfYXV0aF9zZW5kX2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpO1xuIGludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuayxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTtcbi12b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbitpbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuK1x0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCxcbitcdFx0XHQgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbiB2b2lkIHNjdHBfYXV0aF9zaGtleV9yZWxlYXNlKHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKnNoX2tleSk7XG4gdm9pZCBzY3RwX2F1dGhfc2hrZXlfaG9sZChzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2F1dGguYyBiL25ldC9zY3RwL2F1dGguY1xuaW5kZXggYzkwMWQzNzNhZjgwMy4uNmRlNjZmNTZjNDFjZSAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL2F1dGguY1xuKysrIGIvbmV0L3NjdHAvYXV0aC5jXG5AQCAtNjEzLDkgKzYxMyw5IEBAIGludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuaywgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4gICogICAgemVybyAoYXMgc2hvd24gaW4gRmlndXJlIDYpIGZvbGxvd2VkIGJ5IGFsbCBjaHVua3MgdGhhdCBhcmUgcGxhY2VkXG4gICogICAgYWZ0ZXIgdGhlIEFVVEggY2h1bmsgaW4gdGhlIFNDVFAgcGFja2V0LlxuICAqL1xuLXZvaWQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXG4tXHRcdFx0ICAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApXG4raW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbitcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXG4rXHRcdFx0ICAgICBzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICplcF9rZXksIGdmcF90IGdmcClcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9hdXRoX2J5dGVzICphc29jX2tleTtcbiBcdF9fdTE2IGtleV9pZCwgaG1hY19pZDtcbkBAIC02MzYsNyArNjM2LDcgQEAgdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXHRcdC8qIGVwX2tleSBjYW4ndCBiZSBOVUxMIGhlcmUgKi9cbiBcdFx0YXNvY19rZXkgPSBzY3RwX2F1dGhfYXNvY19jcmVhdGVfc2VjcmV0KGFzb2MsIGVwX2tleSwgZ2ZwKTtcbiBcdFx0aWYgKCFhc29jX2tleSlcbi1cdFx0XHRyZXR1cm47XG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRcdGZyZWVfa2V5ID0gMTtcbiBcdH1cbkBAIC02NTQsNiArNjU0LDggQEAgdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXG4gXHRpZiAoZnJlZV9rZXkpXG4gXHRcdHNjdHBfYXV0aF9rZXlfcHV0KGFzb2Nfa2V5KTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKiBBUEkgSGVscGVycyAqL1xuZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmNcbmluZGV4IDIzZTk2MzA1Y2FkN2MuLjNkN2VhZDlkNDBlMTkgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9vdXRwdXQuY1xuKysrIGIvbmV0L3NjdHAvb3V0cHV0LmNcbkBAIC01MTcsOCArNTE3LDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCxcbiBcdFx0fVxuIFxuIFx0XHRpZiAoYXV0aCkge1xuLVx0XHRcdHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyh0cC1cdTAwM2Vhc29jLCBuc2tiLCBhdXRoLFxuLVx0XHRcdFx0XHRcdCBwYWNrZXQtXHUwMDNlYXV0aC1cdTAwM2VzaGtleSwgZ2ZwKTtcbitcdFx0XHRpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLVx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXG4rXHRcdFx0XHRcdFx0ICAgICBwYWNrZXQtXHUwMDNlYXV0aC1cdTAwM2VzaGtleSwgZ2ZwKSkge1xuK1x0XHRcdFx0c2N0cF9jaHVua19mcmVlKHBhY2tldC1cdTAwM2VhdXRoKTtcbitcdFx0XHRcdHBhY2tldC1cdTAwM2VhdXRoID0gTlVMTDtcbitcdFx0XHRcdGlmIChnc28pXG4rXHRcdFx0XHRcdGtmcmVlX3NrYihuc2tiKTtcbitcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRcdH1cbiBcdFx0XHQvKiBmcmVlIGF1dGggaWYgbm8gbW9yZSBjaHVua3MsIG9yIGFkZCBpdCBiYWNrICovXG4gXHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cGFja2V0LVx1MDAzZWNodW5rX2xpc3QpKVxuIFx0XHRcdFx0c2N0cF9jaHVua19mcmVlKHBhY2tldC1cdTAwM2VhdXRoKTtcbkBAIC02MTksNyArNjI1LDcgQEAgaW50IHNjdHBfcGFja2V0X3RyYW5zbWl0KHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LCBnZnBfdCBnZnApXG4gXG4gXHQvKiBwYWNrIHVwIGNodW5rcyAqL1xuIFx0cGt0X2NvdW50ID0gc2N0cF9wYWNrZXRfcGFjayhwYWNrZXQsIGhlYWQsIGdzbywgZ2ZwKTtcbi1cdGlmICghcGt0X2NvdW50KSB7XG4rXHRpZiAocGt0X2NvdW50IFx1MDAzYz0gMCkge1xuIFx0XHRrZnJlZV9za2IoaGVhZCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbmluZGV4IDcwOGZhMDdkNWZmZmMuLmUxOTg4MWM5MGI0OTkgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1xuKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbkBAIC02MzcsMTMgKzYzNywxNyBAQCBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFDX2FjayhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxuLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4rc3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4rXHRcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9jaHVuayBhdXRoO1xuIFxuLVx0aWYgKCFjaHVuay1cdTAwM2VhdXRoX2NodW5rKVxuLVx0XHRyZXR1cm4gIXNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay1cdTAwM2VjaHVua19oZHItXHUwMDNldHlwZSwgYXNvYyk7XG4rXHRpZiAoIWNodW5rLVx1MDAzZWF1dGhfY2h1bmspIHtcbitcdFx0aWYgKHNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay1cdTAwM2VjaHVua19oZHItXHUwMDNldHlwZSwgYXNvYykpXG4rXHRcdFx0cmV0dXJuIFNDVFBfSUVSUk9SX0JBRF9TSUc7XG4rXHRcdHJldHVybiBTQ1RQX0lFUlJPUl9OT19FUlJPUjtcbitcdH1cbiBcbiBcdC8qIFNDVFAtQVVUSDogIGF1dGhfY2h1bmsgcG9pbnRlciBpcyBvbmx5IHNldCB3aGVuIHRoZSBjb29raWUtZWNob1xuIFx0ICogaXMgc3VwcG9zZWQgdG8gYmUgYXV0aGVudGljYXRlZCBhbmQgd2UgaGF2ZSB0byBkbyBkZWxheWVkXG5AQCAtNjU0LDcgKzY1OCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4gXG4gXHQvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbmQgdGhlIHBlZXIgYXJlIEFVVEggY2FwYWJsZSAqL1xuIFx0aWYgKCFuZXQtXHUwMDNlc2N0cC5hdXRoX2VuYWJsZSB8fCAhYXNvYy1cdTAwM2VwZWVyLmF1dGhfY2FwYWJsZSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NJRztcbiBcbiBcdC8qIHNldC11cCBvdXIgZmFrZSBjaHVuayBzbyB0aGF0IHdlIGNhbiBwcm9jZXNzIGl0ICovXG4gXHRhdXRoLnNrYiA9IGNodW5rLVx1MDAzZWF1dGhfY2h1bms7XG5AQCAtNjY2LDcgKzY3MCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4gXHRza2JfcHVsbChjaHVuay1cdTAwM2VhdXRoX2NodW5rLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTtcbiBcdGF1dGgudHJhbnNwb3J0ID0gY2h1bmstXHUwMDNldHJhbnNwb3J0O1xuIFxuLVx0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFx1MDAyNmF1dGgpID09IFNDVFBfSUVSUk9SX05PX0VSUk9SO1xuK1x0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFx1MDAyNmF1dGgpO1xuIH1cbiBcbiAvKlxuQEAgLTgyNiw4ICs4MzAsMTEgQEAgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xRF9jZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gbm9tZW1faW5pdDtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpIHtcbitcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYyk7XG4rXHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiBcdFx0c2N0cF9hc3NvY2lhdGlvbl9mcmVlKG5ld19hc29jKTtcbitcdFx0aWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKVxuK1x0XHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNO1xuIFx0XHRyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChuZXQsIGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTtcbiBcdH1cbiBcbkBAIC0xODg5LDYgKzE4OTYsNyBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19hKFxuIHtcbiBcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcbiBcdGVudW0gc2N0cF9kaXNwb3NpdGlvbiBkaXNwb3NpdGlvbjtcbitcdGVudW0gc2N0cF9pZXJyb3IgZXJyb3I7XG4gXHRzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXY7XG4gXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICplcnI7XG5AQCAtMTkwNCw4ICsxOTEyLDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2EoXG4gXHRpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSlcbiBcdFx0Z290byBub21lbTtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpXG4rXHRlcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpO1xuK1x0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XG4rXHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbitcdFx0XHRyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTtcbiBcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fRElTQ0FSRDtcbitcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBubyBuZXcgYWRkcmVzc2VzIGFyZSBiZWluZyBhZGRlZCBkdXJpbmcgdGhlXG4gXHQgKiByZXN0YXJ0LiAgVGhvdWdoIHRoaXMgaXMgYSBwcmV0dHkgY29tcGxpY2F0ZWQgYXR0YWNrXG5AQCAtMjAxMSw2ICsyMDIzLDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYihcbiBcdFx0XHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKm5ld19hc29jKVxuIHtcbiBcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcbitcdGVudW0gc2N0cF9pZXJyb3IgZXJyb3I7XG4gXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDtcbiBcbiBcdC8qIG5ld19hc29jIGlzIGEgYnJhbmQtbmV3IGFzc29jaWF0aW9uLCBzbyB0aGVzZSBhcmUgbm90IHlldFxuQEAgLTIwMjQsOCArMjAzNywxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19iKFxuIFx0aWYgKHNjdHBfYXV0aF9hc29jX2luaXRfYWN0aXZlX2tleShuZXdfYXNvYywgR0ZQX0FUT01JQykpXG4gXHRcdGdvdG8gbm9tZW07XG4gXG4tXHRpZiAoIXNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpKVxuK1x0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcbitcdGlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikge1xuK1x0XHRpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pXG4rXHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4rXHR9XG4gXG4gXHRzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX05FV19TVEFURSxcbiBcdFx0XHRTQ1RQX1NUQVRFKFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQpKTtcbkBAIC0yMTE4LDYgKzIxMzUsNyBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19kKFxuIFx0XHRcdFx0XHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqbmV3X2Fzb2MpXG4ge1xuIFx0c3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ID0gTlVMTCwgKmFpX2V2ID0gTlVMTCwgKmF1dGhfZXYgPSBOVUxMO1xuK1x0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICpyZXBsO1xuIFxuIFx0LyogQ2xhcmlmaWNhdGlvbiBmcm9tIEltcGxlbWVudG9yJ3MgR3VpZGU6XG5AQCAtMjEyNyw4ICsyMTQ1LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXG4gXHQgKiBhIENPT0tJRSBBQ0suXG4gXHQgKi9cbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKSlcbitcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKTtcbitcdGlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikge1xuK1x0XHRpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pXG4rXHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4rXHR9XG4gXG4gXHQvKiBEb24ndCBhY2NpZGVudGFsbHkgbW92ZSBiYWNrIGludG8gZXN0YWJsaXNoZWQgc3RhdGUuICovXG4gXHRpZiAoYXNvYy1cdTAwM2VzdGF0ZSBcdTAwM2MgU0NUUF9TVEFURV9FU1RBQkxJU0hFRCkge1xuQEAgLTQ0NTUsOSArNDQ3NywxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcbiBcbiBcdG1lbXNldChkaWdlc3QsIDAsIHNpZ19sZW4pO1xuIFxuLVx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGFzb2MsIGNodW5rLVx1MDAzZXNrYixcbi1cdFx0XHRcdCAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLVx1MDAzZWNodW5rX2hkcixcbi1cdFx0XHRcdCBzaF9rZXksIEdGUF9BVE9NSUMpO1xuK1x0aWYgKHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhhc29jLCBjaHVuay1cdTAwM2Vza2IsXG4rXHRcdFx0XHQgICAgIChzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICopY2h1bmstXHUwMDNlY2h1bmtfaGRyLFxuK1x0XHRcdFx0ICAgICBzaF9rZXksIEdGUF9BVE9NSUMpKSB7XG4rXHRcdGtmcmVlKHNhdmVfZGlnZXN0KTtcbitcdFx0cmV0dXJuIFNDVFBfSUVSUk9SX05PTUVNO1xuK1x0fVxuIFxuIFx0LyogRGlzY2FyZCB0aGUgcGFja2V0IGlmIHRoZSBkaWdlc3RzIGRvIG5vdCBtYXRjaCAqL1xuIFx0aWYgKGNyeXB0b19tZW1uZXEoc2F2ZV9kaWdlc3QsIGRpZ2VzdCwgc2lnX2xlbikpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU0OjMwLjIyMDQ2MzkyNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MTQ5MDQ3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTQ1RQIEF1dGhlbnRpY2F0aW9uIEhNQUMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBjaGFuZ2luZyB0aGUgd2F5IHRoZSBITUFDIGNhbGN1bGF0aW9uIGlzIGhhbmRsZWQgaW4gU0NUUCBhdXRoZW50aWNhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIGdvbmUgZnJvbSBhIGB2b2lkYCByZXR1cm4gdHlwZSBpbiBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYCB0byBhbiBgaW50YCwgdG8gYWxsb3cgZm9yIHRoZSBoYW5kbGluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aXRoIHRoZSBgLUVOT01FTWAgZXJyb3IgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjaGFuZ2U7IHJvYnVzdCBlcnJvciBoYW5kbGluZyBpcyBjcnVjaWFsLCBlc3BlY2lhbGx5IGluIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uIGxpa2UgYXV0aGVudGljYXRpb24uIFRoZSBjYWxsZXJzIHNlZW0gdG8gYmUgcHJvcGVybHkgdXBkYXRlZCB0byBtYW5hZ2UgdGhlc2UgZXJyb3JzIGFuZCBwcm9wYWdhdGUgdGhlbSBhcHByb3ByaWF0ZWx5LCByZXR1cm5pbmcgYFNDVFBfSUVSUk9SX05PTUVNYCBvciBgU0NUUF9ESVNQT1NJVElPTl9OT01FTWAuXG5cblRoZSBpbW1lZGlhdGUgdGhvdWdodCBpczogaXMgdGhpcyBmdW5jdGlvbmFsIGFuZCBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseSwgeWVzLiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBpbiBhdXRoZW50aWNhdGlvbiBhcmUgYSBsZWdpdGltYXRlIGFuZCBpbXBvcnRhbnQgZmFpbHVyZSBzY2VuYXJpbyB0byB0ZXN0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIFNDVFAgYXV0aGVudGljYXRpb24sIHdoaWNoIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB3ZSBzaG91bGQgZm9jdXMgb24gZm9yIGZ1enppbmcuIFdlIGhhdmUgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AgaXRzZWxmLCB3aGljaCBpcyB0aGUgaW1tZWRpYXRlIHRhcmdldC4gVGhlbiB0aGVyZSdzIGBzY3RwX3BhY2tldF9wYWNrYCAod2hpY2ggaXMgc3RhdGljLCBzbyBsZXQncyBzZWUgaWYgaXQncyBpbmxpbmVkIC0gb3RoZXJ3aXNlLCBtYXliZSBza2lwIGl0LCBmb2N1c2luZyBvbiBBUEkgZW50cnlwb2ludHMgb3Igc3RhdGUgbWFjaGluZSBmdW5jdGlvbnMpLiBXZSBoYXZlIGBzY3RwX3BhY2tldF90cmFuc21pdGAsIGBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5YCAod2hpY2ggaXMgYWxzbyBzdGF0aWMpLCBhbmQgdGhlbiBhIGJ1bmNoIG9mIHN0YXRlIG1hY2hpbmUgZnVuY3Rpb25zLCBgc2N0cF9zZl9kb181XzFEX2NlYCwgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYHNjdHBfc2ZfZG9fZHVwY29va19kYCwgYW5kIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAuXG5cblRoZSBrZXkgZW50cnlwb2ludHMgdG8gaW5jbHVkZSBmb3IgZnV6emluZyBzaG91bGQgYmU6IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgLCBgc2N0cF9wYWNrZXRfdHJhbnNtaXRgLCBhbmQgdGhlbiB0aG9zZSBzdGF0ZSBtYWNoaW5lIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbnZvbHZlZCBpbiBhdXRoZW50aWNhdGlvbjogYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAsIGFuZCBgc2N0cF9zZl9hdXRoZW50aWNhdGVgLlxuXG5KdXN0IGEgcXVpY2sgY2hlY2sgbm93LCBtYWtlIHN1cmUgU0NUUCBpcyBldmVuIGVuYWJsZWQuIGBJUF9TQ1RQYCBpbiBLY29uZmlnLCBnb3QgaXQuIExldCdzIHZlcmlmeSB0aGF0J3MgYWxsIHNldCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNDYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NDozOC4wMzUzNzI3MTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYwMjkyOTYzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfU0NUUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9LY29uZmlnLTUtXFxubmV0L3NjdHAvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBfU0NUUFxcbm5ldC9zY3RwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVGhlIFNDVFAgUHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU0OjQxLjYzODMxMjIwMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTQ5OTg2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBTQ1RQIEF1dGhlbnRpY2F0aW9uIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBTQ1RQIGF1dGhlbnRpY2F0aW9uLCBhbmQgSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0by4gVGhpcyBpc24ndCBqdXN0IGEgZ2VuZXJpYyBzZWN1cml0eSBhc3Nlc3NtZW50OyBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBBcmUgdGhlcmUgYW55IFNDVFAtc3BlY2lmaWMgc2V0dGluZ3MgdGhhdCByZWxhdGUgdG8gdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MgaXRzZWxmPyBUaGluZ3MgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIGEgZ2VuZXJhbCBzZWN1cml0eSBwb3N0dXJlIHJldmlldy4gSSBuZWVkIHRvIGtub3cgaWYgSSdtIG1pc3Npbmcgc29tZXRoaW5nLCBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgSSBjYW4gZXhwbG9pdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQwOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU0OjQ1LjIzMzMxMzUwNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTY1ODU1OTEwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0NUUF9BVVRIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NDo0OS4xOTkxNzczMDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg0MTE5NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKkRlbHZpbmcgaW50byBTeXN0ZW0gUGFyYW1ldGVycyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGp1c3QgbG9va2luZyBhdCB0aGF0IGBuZXQtXHUwMDNlc2N0cC5hdXRoX2VuYWJsZWAgc2V0dGluZy4uLiBhbmQgYSBsaWdodGJ1bGIganVzdCB3ZW50IG9mZi4gVGhhdCdzIG5vdCBzb21lIG9ic2N1cmUga2VybmVsIHZhcmlhYmxlLCB0aGF0J3MgYSAqc3lzY3RsKi4gTWVhbmluZyBJIGNhbiB0dW5lIGl0IGF0IHJ1bnRpbWUgd2l0aG91dCBuZWVkaW5nIGEgZnVsbCByZWJvb3Qgb3IgZXZlbiBhIG1vZHVsZSByZWxvYWQuIFRoYXQgY2hhbmdlcyBldmVyeXRoaW5nLCBvciBhdCBsZWFzdCBpdCBjaGFuZ2VzIG15IGFwcHJvYWNoISBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0b2dnbGluZyB0aGF0LiBJcyBpdCBhIHBlcnNpc3RlbnQgY2hhbmdlLCBvciBpcyBpdCBvbmx5IGVmZmVjdGl2ZSB1bnRpbCB0aGUgbmV4dCByZWJvb3Q/IFdoYXQncyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIG1vZGlmeSBpdD8gSSBzaG91bGQgY2hlY2sgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGZvciBgc3lzY3RsYCBhbmQgU0NUUCBhdXRoZW50aWNhdGlvbiB0byBnZXQgYSBwcmVjaXNlIHVuZGVyc3RhbmRpbmcgYmVmb3JlIG1ha2luZyBhbnkgZGVjaXNpb25zLiBOb3cgSSBuZWVkIHRvIHJldmlldyB3aGF0IGVmZmVjdHMgdGhpcyBpcyBpbnRlbmRlZCB0byBoYXZlLiBHb29kIHRoaW5nIEkganVzdCBoYWQgdGhhdCB0aG91Z2h0LCBiZWZvcmUgZGl2aW5nIGludG8gc29tZXRoaW5nIGZhciBtb3JlIGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTkwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6NTQ6NTIuNjgzMjk5NTQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzY0Mjg4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdXRoX2VuYWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvYXV0aC5jPTcyMj1pbnQgc2N0cF9hdXRoX3NldF9rZXkoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTczOC1cXHR9IGVsc2Uge1xcbm5ldC9zY3RwL2F1dGguYzo3Mzk6XFx0XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvYXV0aC5jLTc0MC1cXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbm5ldC9zY3RwL2F1dGguYz03ODU9aW50IHNjdHBfYXV0aF9zZXRfYWN0aXZlX2tleShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtNzk4LVxcdH0gZWxzZSB7XFxubmV0L3NjdHAvYXV0aC5jOjc5OTpcXHRcXHRpZiAoIWVwLVxcdTAwM2VhdXRoX2VuYWJsZSlcXG5uZXQvc2N0cC9hdXRoLmMtODAwLVxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbi0tXFxubmV0L3NjdHAvYXV0aC5jPTgyOD1pbnQgc2N0cF9hdXRoX2RlbF9rZXlfaWQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTg0Ni1cXHR9IGVsc2Uge1xcbm5ldC9zY3RwL2F1dGguYzo4NDc6XFx0XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvYXV0aC5jLTg0OC1cXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbm5ldC9zY3RwL2F1dGguYz04NzI9aW50IHNjdHBfYXV0aF9kZWFjdF9rZXlfaWQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTg4OS1cXHR9IGVsc2Uge1xcbm5ldC9zY3RwL2F1dGguYzo4OTA6XFx0XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvYXV0aC5jLTg5MS1cXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbm5ldC9zY3RwL2VuZHBvaW50b2xhLmM9NTA9c3RhdGljIHN0cnVjdCBzY3RwX2VuZHBvaW50ICpzY3RwX2VuZHBvaW50X2luaXQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYy01Ny1cXHRlcC1cXHUwMDNlYXNjb25mX2VuYWJsZSA9IG5ldC1cXHUwMDNlc2N0cC5hZGRpcF9lbmFibGU7XFxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYzo1ODpcXHRlcC1cXHUwMDNlYXV0aF9lbmFibGUgPSBuZXQtXFx1MDAzZXNjdHAuYXV0aF9lbmFibGU7XFxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYzo1OTpcXHRpZiAoZXAtXFx1MDAzZWF1dGhfZW5hYmxlKSB7XFxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYy02MC1cXHRcXHRpZiAoc2N0cF9hdXRoX2luaXQoZXAsIGdmcCkpXFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jPTEyODk9c3RhdGljIGludCBfX25ldF9pbml0IHNjdHBfZGVmYXVsdHNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEzMTQtXFx0LyogV2hldGhlciBjb29raWUgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZCgxKSBvciBub3QoMCkgKi9cXG5uZXQvc2N0cC9wcm90b2NvbC5jOjEzMTU6XFx0bmV0LVxcdTAwM2VzY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSA9XFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMzE2LVxcdFxcdCFJU19FTkFCTEVEKENPTkZJR19TQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfTk9ORSk7XFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEzNjEtXFx0LyogRGlzYWJsZSBBVVRIIGJ5IGRlZmF1bHQuICovXFxubmV0L3NjdHAvcHJvdG9jb2wuYzoxMzYyOlxcdG5ldC1cXHUwMDNlc2N0cC5hdXRoX2VuYWJsZSA9IDA7XFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMzYzLVxcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTE5OD1zdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2luaXQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjcyLVxcdC8qIEFjY291bnQgZm9yIEFVVEggcmVsYXRlZCBwYXJhbWV0ZXJzICovXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjI3MzpcXHRpZiAoZXAtXFx1MDAzZWF1dGhfZW5hYmxlKSB7XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI3NC1cXHRcXHQvKiBBZGQgcmFuZG9tIHBhcmFtZXRlciBsZW5ndGgqL1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTM1NS1cXHQvKiBBZGQgU0NUUC1BVVRIIGNodW5rcyB0byB0aGUgcGFyYW1ldGVyIGxpc3QgKi9cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MzU2OlxcdGlmIChlcC1cXHUwMDNlYXV0aF9lbmFibGUpIHtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzU3LVxcdFxcdHNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYXNvYy1cXHUwMDNlYy5hdXRoX3JhbmRvbSksXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MTY0NT1zdGF0aWMgc3RydWN0IHNjdHBfY29va2llX3BhcmFtICpzY3RwX3BhY2tfY29va2llKFxcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTE3MTEtXFx0LyogU2lnbiB0aGUgY29va2llLCBpZiBjb29raWUgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZC4gKi9cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MTcxMjpcXHRpZiAoc2N0cF9zayhlcC1cXHUwMDNlYmFzZS5zayktXFx1MDAzZWNvb2tpZV9hdXRoX2VuYWJsZSkge1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0xNzEzLVxcdFxcdHN0YXRpY19hc3NlcnQoc2l6ZW9mKGNvb2tpZS1cXHUwMDNlbWFjKSA9PSBTSEEyNTZfRElHRVNUX1NJWkUpO1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTE3MjI9c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKnNjdHBfdW5wYWNrX2Nvb2tpZShcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0xNzc0LVxcdC8qIFZlcmlmeSB0aGUgY29va2llJ3MgTUFDLCBpZiBjb29raWUgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZC4gKi9cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MTc3NTpcXHRpZiAoc2N0cF9zayhlcC1cXHUwMDNlYmFzZS5zayktXFx1MDAzZWNvb2tpZV9hdXRoX2VuYWJsZSkge1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0xNzc2LVxcdFxcdHU4IG1hY1tTSEEyNTZfRElHRVNUX1NJWkVdO1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTIwMzE9c3RhdGljIHZvaWQgc2N0cF9wcm9jZXNzX2V4dF9wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMDUwLVxcdFxcdFxcdCAqL1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMDUxOlxcdFxcdFxcdGlmIChhc29jLVxcdTAwM2VlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIwNTItXFx0XFx0XFx0XFx0YXNvYy1cXHUwMDNlcGVlci5hdXRoX2NhcGFibGUgPSAxO1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTIxNDc9c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF92ZXJpZnlfcGFyYW0oc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIyMTEtXFx0Y2FzZSBTQ1RQX1BBUkFNX1JBTkRPTTpcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjIxMjpcXHRcXHRpZiAoIWVwLVxcdTAwM2VhdXRoX2VuYWJsZSlcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjIxMy1cXHRcXHRcXHRnb3RvIHVuaGFuZGxlZDtcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMjI4LVxcdGNhc2UgU0NUUF9QQVJBTV9DSFVOS1M6XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjIyMjk6XFx0XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIyMzAtXFx0XFx0XFx0Z290byB1bmhhbmRsZWQ7XFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjI0NC1cXHRjYXNlIFNDVFBfUEFSQU1fSE1BQ19BTEdPOlxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMjQ1OlxcdFxcdGlmICghZXAtXFx1MDAzZWF1dGhfZW5hYmxlKVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMjQ2LVxcdFxcdFxcdGdvdG8gdW5oYW5kbGVkO1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTI1MzI9c3RhdGljIGludCBzY3RwX3Byb2Nlc3NfcGFyYW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjY5MC1cXHRjYXNlIFNDVFBfUEFSQU1fUkFORE9NOlxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyNjkxOlxcdFxcdGlmICghZXAtXFx1MDAzZWF1dGhfZW5hYmxlKVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yNjkyLVxcdFxcdFxcdGdvdG8gZmFsbF90aHJvdWdoO1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI3MDQtXFx0Y2FzZSBTQ1RQX1BBUkFNX0hNQUNfQUxHTzpcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjcwNTpcXHRcXHRpZiAoIWVwLVxcdTAwM2VhdXRoX2VuYWJsZSlcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjcwNi1cXHRcXHRcXHRnb3RvIGZhbGxfdGhyb3VnaDtcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yNzIxLVxcdGNhc2UgU0NUUF9QQVJBTV9DSFVOS1M6XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjI3MjI6XFx0XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI3MjMtXFx0XFx0XFx0Z290byBmYWxsX3Rocm91Z2g7XFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz02NDA9c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy02NTktXFx0LyogTWFrZSBzdXJlIHRoYXQgd2UgYW5kIHRoZSBwZWVyIGFyZSBBVVRIIGNhcGFibGUgKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo2NjA6XFx0aWYgKCFuZXQtXFx1MDAzZXNjdHAuYXV0aF9lbmFibGUgfHwgIWFzb2MtXFx1MDAzZXBlZXIuYXV0aF9jYXBhYmxlKVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTY2MS1cXHRcXHRyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NJRztcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTcwNz1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFEX2NlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTc5NS1cXHRjaWQgPSBwZWVyX2luaXQtXFx1MDAzZWNodW5rX2hkci50eXBlO1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjc5NjpcXHRpZiAoIXNjdHBfc2soc2spLVxcdTAwM2Vjb29raWVfYXV0aF9lbmFibGUgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy03OTctXFx0ICAgICFzY3RwX3ZlcmlmeV9pbml0KG5ldCwgZXAsIGFzb2MsIGNpZCwgcGVlcl9pbml0LCBjaHVuayxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTIyNDY9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayhcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzMzAtXFx0XFx0Y2lkID0gcGVlcl9pbml0LVxcdTAwM2VjaHVua19oZHIudHlwZTtcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMzMxOlxcdFxcdGlmICghc2N0cF9zayhlcC1cXHUwMDNlYmFzZS5zayktXFx1MDAzZWNvb2tpZV9hdXRoX2VuYWJsZSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzMzItXFx0XFx0ICAgICFzY3RwX3ZlcmlmeV9pbml0KG5ldCwgZXAsIGFzb2MsIGNpZCwgcGVlcl9pbml0LCBjaHVuayxcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTM1Nzk9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0aF9jaHVuayhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0zNTg0LVxcbm5ldC9zY3RwL3NvY2tldC5jOjM1ODU6XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvc29ja2V0LmMtMzU4Ni1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTM2MDk9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0zNjE1LVxcbm5ldC9zY3RwL3NvY2tldC5jOjM2MTY6XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvc29ja2V0LmMtMzYxNy1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTQzNDE9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXNjb25mX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy00MzU5LVxcbm5ldC9zY3RwL3NvY2tldC5jOjQzNjA6XFx0aWYgKGVwLVxcdTAwM2Vhc2NvbmZfZW5hYmxlIFxcdTAwMjZcXHUwMDI2IGVwLVxcdTAwM2VhdXRoX2VuYWJsZSkge1xcbm5ldC9zY3RwL3NvY2tldC5jLTQzNjEtXFx0XFx0c2N0cF9hdXRoX2VwX2FkZF9jaHVua2lkKGVwLCBTQ1RQX0NJRF9BU0NPTkYpO1xcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9NDM3MT1zdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hdXRoX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy00Mzk3LVxcbm5ldC9zY3RwL3NvY2tldC5jOjQzOTg6XFx0ZXAtXFx1MDAzZWF1dGhfZW5hYmxlID0gISFwYXJhbXMtXFx1MDAzZWFzc29jX3ZhbHVlO1xcbm5ldC9zY3RwL3NvY2tldC5jLTQzOTktXFx0cmV0dmFsID0gMDtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTUwMjE9c3RhdGljIGludCBzY3RwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy01MDU1LVxcbm5ldC9zY3RwL3NvY2tldC5jOjUwNTY6XFx0c3AtXFx1MDAzZWNvb2tpZV9hdXRoX2VuYWJsZSA9IG5ldC1cXHUwMDNlc2N0cC5jb29raWVfYXV0aF9lbmFibGU7XFxubmV0L3NjdHAvc29ja2V0LmMtNTA1Ny1cXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTY5NjA9c3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy02OTY5LVxcbm5ldC9zY3RwL3NvY2tldC5jOjY5NzA6XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvc29ja2V0LmMtNjk3MS1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTY5OTY9c3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfYWN0aXZlX2tleShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy03MDE4LVxcdH0gZWxzZSB7XFxubmV0L3NjdHAvc29ja2V0LmM6NzAxOTpcXHRcXHRpZiAoIWVwLVxcdTAwM2VhdXRoX2VuYWJsZSlcXG5uZXQvc2N0cC9zb2NrZXQuYy03MDIwLVxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9NzA3Nj1zdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9sb2NhbF9hdXRoX2NodW5rcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy03MTAzLVxcdH0gZWxzZSB7XFxubmV0L3NjdHAvc29ja2V0LmM6NzEwNDpcXHRcXHRpZiAoIWVwLVxcdTAwM2VhdXRoX2VuYWJsZSlcXG5uZXQvc2N0cC9zb2NrZXQuYy03MTA1LVxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9Nzg5NT1zdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9hdXRoX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy03OTE5LVxcdHBhcmFtcy5hc3NvY192YWx1ZSA9IGFzb2MgPyBhc29jLVxcdTAwM2VwZWVyLmF1dGhfY2FwYWJsZVxcbm5ldC9zY3RwL3NvY2tldC5jOjc5MjA6XFx0XFx0XFx0XFx0ICA6IHNjdHBfc2soc2spLVxcdTAwM2VlcC1cXHUwMDNlYXV0aF9lbmFibGU7XFxubmV0L3NjdHAvc29ja2V0LmMtNzkyMS1cXG4tLVxcbm5ldC9zY3RwL3N5c2N0bC5jPTk1PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHNjdHBfbmV0X3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvc2N0cC9zeXNjdGwuYy0xNzYtXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiY29va2llX2htYWNfYWxnXFxcIixcXG5uZXQvc2N0cC9zeXNjdGwuYzoxNzc6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC5zY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSxcXG5uZXQvc2N0cC9zeXNjdGwuYy0xNzgtXFx0XFx0Lm1heGxlblxcdFxcdD0gOCxcXG4tLVxcbm5ldC9zY3RwL3N5c2N0bC5jLTI2NC1cXHR7XFxubmV0L3NjdHAvc3lzY3RsLmM6MjY1OlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcImFkZGlwX25vYXV0aF9lbmFibGVcXFwiLFxcbm5ldC9zY3RwL3N5c2N0bC5jLTI2Ni1cXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnNjdHAuYWRkaXBfbm9hdXRoLFxcbi0tXFxubmV0L3NjdHAvc3lzY3RsLmMtMjg1LVxcdHtcXG5uZXQvc2N0cC9zeXNjdGwuYzoyODY6XFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiYXV0aF9lbmFibGVcXFwiLFxcbm5ldC9zY3RwL3N5c2N0bC5jOjI4NzpcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnNjdHAuYXV0aF9lbmFibGUsXFxubmV0L3NjdHAvc3lzY3RsLmMtMjg4LVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbi0tXFxubmV0L3NjdHAvc3lzY3RsLmM9Mzg3PXN0YXRpYyBpbnQgcHJvY19zY3RwX2RvX2htYWNfYWxnKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbi0tXFxubmV0L3NjdHAvc3lzY3RsLmMtMzkwLVxcdHN0cnVjdCBuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZihjdGwtXFx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsXFxubmV0L3NjdHAvc3lzY3RsLmM6MzkxOlxcdFxcdFxcdFxcdCAgICAgICBzY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSk7XFxubmV0L3NjdHAvc3lzY3RsLmMtMzkyLVxcdHN0cnVjdCBjdGxfdGFibGUgdGJsO1xcbi0tXFxubmV0L3NjdHAvc3lzY3RsLmMtNDA0LVxcdFxcdGlmICghc3RyY21wKHRtcCwgXFxcInNoYTI1NlxcXCIpKSB7XFxubmV0L3NjdHAvc3lzY3RsLmM6NDA1OlxcdFxcdFxcdG5ldC1cXHUwMDNlc2N0cC5jb29raWVfYXV0aF9lbmFibGUgPSAxO1xcbm5ldC9zY3RwL3N5c2N0bC5jLTQwNi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9zY3RwL3N5c2N0bC5jLTQwOC1cXHRcXHRpZiAoIXN0cmNtcCh0bXAsIFxcXCJub25lXFxcIikpIHtcXG5uZXQvc2N0cC9zeXNjdGwuYzo0MDk6XFx0XFx0XFx0bmV0LVxcdTAwM2VzY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSA9IDA7XFxubmV0L3NjdHAvc3lzY3RsLmMtNDEwLVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L3NjdHAvc3lzY3RsLmMtNDEzLVxcdH1cXG5uZXQvc2N0cC9zeXNjdGwuYzo0MTQ6XFx0aWYgKG5ldC1cXHUwMDNlc2N0cC5jb29raWVfYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvc3lzY3RsLmMtNDE1LVxcdFxcdHRibC5kYXRhID0gKGNoYXIgKilcXFwic2hhMjU2XFxcIjtcXG4tLVxcbm5ldC9zY3RwL3N5c2N0bC5jPTQ4OD1zdGF0aWMgaW50IHByb2Nfc2N0cF9kb19hdXRoKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbi0tXFxubmV0L3NjdHAvc3lzY3RsLmMtNDkwLXtcXG5uZXQvc2N0cC9zeXNjdGwuYzo0OTE6XFx0c3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKGN0bC1cXHUwMDNlZGF0YSwgc3RydWN0IG5ldCwgc2N0cC5hdXRoX2VuYWJsZSk7XFxubmV0L3NjdHAvc3lzY3RsLmMtNDkyLVxcdHN0cnVjdCBjdGxfdGFibGUgdGJsO1xcbi0tXFxubmV0L3NjdHAvc3lzY3RsLmMtNTAwLVxcdGVsc2VcXG5uZXQvc2N0cC9zeXNjdGwuYzo1MDE6XFx0XFx0dGJsLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2VzY3RwLmF1dGhfZW5hYmxlO1xcbm5ldC9zY3RwL3N5c2N0bC5jLTUwMi1cXG4tLVxcbm5ldC9zY3RwL3N5c2N0bC5jLTUwNi1cXG5uZXQvc2N0cC9zeXNjdGwuYzo1MDc6XFx0XFx0bmV0LVxcdTAwM2VzY3RwLmF1dGhfZW5hYmxlID0gbmV3X3ZhbHVlO1xcbm5ldC9zY3RwL3N5c2N0bC5jLTUwOC1cXHRcXHQvKiBVcGRhdGUgdGhlIHZhbHVlIGluIHRoZSBjb250cm9sIHNvY2tldCAqL1xcbm5ldC9zY3RwL3N5c2N0bC5jLTUwOS1cXHRcXHRsb2NrX3NvY2soc2spO1xcbm5ldC9zY3RwL3N5c2N0bC5jOjUxMDpcXHRcXHRzY3RwX3NrKHNrKS1cXHUwMDNlZXAtXFx1MDAzZWF1dGhfZW5hYmxlID0gbmV3X3ZhbHVlO1xcbm5ldC9zY3RwL3N5c2N0bC5jLTUxMS1cXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NDo1Mi44ODY5NDc2NjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTI2NjQ1OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIFNDVFAgQ29uZmlndXJhdGlvbiBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhdXRoX2VuYWJsZWAgdGhpbmcsIGFuZCBpdCdzIGZsYWdnZWQgYXMgYSBgc3lzY3RsYCwgbm90IGEgS2NvbmZpZyBvcHRpb24uIEludGVyZXN0aW5nLiBJdCdzIG1ha2luZyBtZSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcGF0aHMuIFRoZSBtYWluIFNDVFAgZmxhZywgYElQX1NDVFBgLCB0aGF0J3MgS2NvbmZpZy4gTm93IEknbSBzdGFydGluZyB0byB3b25kZXIgaWYgdGhlcmUgYXJlICpvdGhlciogY29uZmlndXJhdGlvbnMgYnVyaWVkIGluIGhlcmUuIEl0IGFsd2F5cyBwYXlzIHRvIGJlIHRob3JvdWdoLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvc2N0cC9LY29uZmlnYCBzcGVjaWZpY2FsbHkgYW5kIHNlZSBpZiBJIGNhbiBmaW5kIGBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfTk9ORWAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIHJlbGF0ZWQsIHBvdGVudGlhbGx5IGltcGFjdGZ1bCwgc2V0dGluZy4gR290dGEgbWFwIG91dCB0aGUgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ2NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU0OjU3LjAxMzU5NjQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE2ODkyMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfTk9ORVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9LY29uZmlnPTYyPWNvbmZpZyBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfU0hBMjU2XFxuLS1cXG5uZXQvc2N0cC9LY29uZmlnLTY0LVxcbm5ldC9zY3RwL0tjb25maWc6NjU6Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19OT05FXFxubmV0L3NjdHAvS2NvbmZpZy02Ni1cXHRib29sIFxcXCJOb25lXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NTowMS40MzA0OTU0ODRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyOTAxMzEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIFNDVFAgS2NvbmZpZyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nLCBcIlRpbWUgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSBlbnRpcmUgYG5ldC9zY3RwL0tjb25maWdgIGZpbGUuXCIgR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBuZXR3b3JraW5nIGFuZCB0aGUgTGludXgga2VybmVsLCB0aGlzIGBLY29uZmlnYCBmaWxlIGlzIGdvaW5nIHRvIGJlIHRoZSBjZW50cmFsIGNvbnRyb2wgcG9pbnQgZm9yIGNvbmZpZ3VyaW5nIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUCkgZmVhdHVyZXMgYW5kIG1vZHVsZXMgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHNldmVyYWwga2V5IHRoaW5ncy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHZhcmlvdXMgU0NUUCBvcHRpb25zIGFyZSBsYWlkIG91dCBoaWVyYXJjaGljYWxseSwgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZW0sIGFuZCBob3cgdGhleSByZWxhdGUgdG8gb3RoZXIgbmV0d29ya2luZyBzdWJzeXN0ZW1zIHdpdGhpbiB0aGUga2VybmVsLiBJJ2xsIGJlIGZvY3VzZWQgb24gaG93IGl0J3Mgc3RydWN0dXJlZCwgaXRzIG9yZ2FuaXphdGlvbiwgdGhlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIHN5bWJvbHMsIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGFzc29jaWF0ZWQgaGVscCB0ZXh0LiBJIGFudGljaXBhdGUgZmluZGluZyBjb25kaXRpb25hbHMgYmFzZWQgb24gYXJjaGl0ZWN0dXJlLCBrZXJuZWwgdmVyc2lvbiwgb3Igb3RoZXIgZGVwZW5kZW5jaWVzIGxpa2Ugd2hldGhlciBvdGhlciBuZXR3b3JraW5nIHByb3RvY29scyBhcmUgZW5hYmxlZC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IG9wdGlvbnMgZm9yIGJ1bmRsZWQgc3VwcG9ydCBzdWNoIGFzIE0zVUEgb3Igb3ZlciBJUHNlYyBhcmUgaGFuZGxlZCwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZmVhdHVyZXMgc3VjaCBhcyBtdWx0aXBsZSBzdHJlYW1zLCBhbmQgaG93IHRoZXNlIHNldHRpbmdzIGFyZSBleHBvc2VkIGluIHRoZSBidWlsZCBzeXN0ZW0uIFRoaXMgYEtjb25maWdgIGZpbGUgd2lsbCBwcm92aWRlIHRoZSB1bHRpbWF0ZSBtYXAgb2YgaG93IFNDVFAgaXMgZW5hYmxlZCwgY3VzdG9taXplZCwgYW5kIGludGVncmF0ZWQgaW50byBhIHNwZWNpZmljIExpbnV4IGtlcm5lbCBidWlsZC4gVW5kZXJzdGFuZGluZyB0aGlzIGZpbGUgaXMgcGFyYW1vdW50IHRvIGFueSBlZmZlY3RpdmUga2VybmVsLWxldmVsIFNDVFAgZGV2ZWxvcG1lbnQgYW5kIHR1bmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NTowNS44NTk1MTE0MDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY3RwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFNDVFAgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIElQX1NDVFBcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgU0NUUCBQcm90b2NvbFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgMTI6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDEzOlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2xcXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBGcm9tIFJGQyAyOTYwIFxcdTAwM2NodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTYwLnR4dFxcdTAwM2UuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgXFxcIlNDVFAgaXMgYSByZWxpYWJsZSB0cmFuc3BvcnQgcHJvdG9jb2wgb3BlcmF0aW5nIG9uIHRvcCBvZiBhXFxuICAyMDpcXHRcXHQgIGNvbm5lY3Rpb25sZXNzIHBhY2tldCBuZXR3b3JrIHN1Y2ggYXMgSVAuICBJdCBvZmZlcnMgdGhlIGZvbGxvd2luZ1xcbiAgMjE6XFx0XFx0ICBzZXJ2aWNlcyB0byBpdHMgdXNlcnM6XFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgLS0gYWNrbm93bGVkZ2VkIGVycm9yLWZyZWUgbm9uLWR1cGxpY2F0ZWQgdHJhbnNmZXIgb2YgdXNlciBkYXRhLFxcbiAgMjQ6XFx0XFx0ICAtLSBkYXRhIGZyYWdtZW50YXRpb24gdG8gY29uZm9ybSB0byBkaXNjb3ZlcmVkIHBhdGggTVRVIHNpemUsXFxuICAyNTpcXHRcXHQgIC0tIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiB1c2VyIG1lc3NhZ2VzIHdpdGhpbiBtdWx0aXBsZSBzdHJlYW1zLFxcbiAgMjY6XFx0XFx0ICB3aXRoIGFuIG9wdGlvbiBmb3Igb3JkZXItb2YtYXJyaXZhbCBkZWxpdmVyeSBvZiBpbmRpdmlkdWFsIHVzZXJcXG4gIDI3OlxcdFxcdCAgbWVzc2FnZXMsXFxuICAyODpcXHRcXHQgIC0tIG9wdGlvbmFsIGJ1bmRsaW5nIG9mIG11bHRpcGxlIHVzZXIgbWVzc2FnZXMgaW50byBhIHNpbmdsZSBTQ1RQXFxuICAyOTpcXHRcXHQgIHBhY2tldCwgYW5kXFxuICAzMDpcXHRcXHQgIC0tIG5ldHdvcmstbGV2ZWwgZmF1bHQgdG9sZXJhbmNlIHRocm91Z2ggc3VwcG9ydGluZyBvZiBtdWx0aS1cXG4gIDMxOlxcdFxcdCAgaG9taW5nIGF0IGVpdGhlciBvciBib3RoIGVuZHMgb2YgYW4gYXNzb2NpYXRpb24uXFxcIlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBwcm90b2NvbCBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDM0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjdHAuIERlYnVnIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGJ5IHRoZVxcbiAgMzU6XFx0XFx0ICBrZXJuZWwncyBkeW5hbWljIGRlYnVnZ2luZyBmcmFtZXdvcmsuXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRpZiBJUF9TQ1RQXFxuICA0MDpcXHRcXG4gIDQxOlxcdGNvbmZpZyBTQ1RQX0RCR19PQkpDTlRcXG4gIDQyOlxcdFxcdGJvb2wgXFxcIlNDVFA6IERlYnVnIG9iamVjdCBjb3VudHNcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlNcXG4gIDQ0OlxcdFxcdGhlbHBcXG4gIDQ1OlxcdFxcdCAgSWYgeW91IHNheSBZLCB0aGlzIHdpbGwgZW5hYmxlIGRlYnVnZ2luZyBzdXBwb3J0IGZvciBjb3VudGluZyB0aGVcXG4gIDQ2OlxcdFxcdCAgdHlwZSBvZiBvYmplY3RzIHRoYXQgYXJlIGN1cnJlbnRseSBhbGxvY2F0ZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDQ3OlxcdFxcdCAgaWRlbnRpZnlpbmcgbWVtb3J5IGxlYWtzLiBUaGlzIGRlYnVnIGluZm9ybWF0aW9uIGNhbiBiZSB2aWV3ZWQgYnlcXG4gIDQ4OlxcdFxcdCAgJ2NhdCAvcHJvYy9uZXQvc2N0cC9zY3RwX2RiZ19vYmpjbnQnXFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTlxcbiAgNTE6XFx0XFxuICA1MjpcXHRjaG9pY2VcXG4gIDUzOlxcdFxcdHByb21wdCBcXFwiRGVmYXVsdCBTQ1RQIGNvb2tpZSBhdXRoZW50aWNhdGlvbiBtZXRob2RcXFwiXFxuICA1NDpcXHRcXHRkZWZhdWx0IFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEEyNTZcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgZGVmYXVsdCBTQ1RQIGNvb2tpZSBhdXRoZW50aWNhdGlvbiBtZXRob2QsIGZvclxcbiAgNTc6XFx0XFx0ICB3aGVuIGEgbWV0aG9kIGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2VsZWN0ZWQgdmlhIHRoZVxcbiAgNTg6XFx0XFx0ICBuZXQuc2N0cC5jb29raWVfaG1hY19hbGcgc3lzY3RsLlxcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQgIElmIHVuc3VyZSwgY2hvb3NlIHRoZSBkZWZhdWx0IChITUFDLVNIQTI1NikuXFxuICA2MTpcXHRcXG4gIDYyOlxcdGNvbmZpZyBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfU0hBMjU2XFxuICA2MzpcXHRcXHRib29sIFxcXCJITUFDLVNIQTI1NlxcXCJcXG4gIDY0OlxcdFxcbiAgNjU6XFx0Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19OT05FXFxuICA2NjpcXHRcXHRib29sIFxcXCJOb25lXFxcIlxcbiAgNjc6XFx0XFxuICA2ODpcXHRlbmRjaG9pY2VcXG4gIDY5OlxcdFxcbiAgNzA6XFx0Y29uZmlnIElORVRfU0NUUF9ESUFHXFxuICA3MTpcXHRcXHRkZXBlbmRzIG9uIElORVRfRElBR1xcbiAgNzI6XFx0XFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXG4gIDc1OlxcdGVuZGlmICMgSVBfU0NUUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NTowNS44NTk2MTk5MDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU5MTg1NDM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTQ1RQIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgaXQgbG9va3MgbGlrZSBgSVBfU0NUUGAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UgbmVlZCB0byBjb25zaWRlciBoZXJlLiBOb3csIGxldCdzIGNhcmVmdWxseSByZXZpZXcgdGhlIGZvY3VzIHN5bWJvbHMgaWRlbnRpZmllZC4gSSdtIHNlZWluZzpcblxuKiAgIGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgXG4qICAgYHNjdHBfcGFja2V0X3RyYW5zbWl0YFxuKiAgIGBzY3RwX3NmX2RvXzVfMURfY2VgXG4qICAgYHNjdHBfc2ZfZG9fZHVwY29va19hYFxuKiAgIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmBcbiogICBgc2N0cF9zZl9kb19kdXBjb29rX2RgXG4qICAgYHNjdHBfc2ZfYXV0aGVudGljYXRlYFxuXG5UaGVzZSBhbGwgbG9vayByZWxldmFudCwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHJlLWV2YWx1YXRlIGBzY3RwX3BhY2tldF90cmFuc21pdGAuIEl0IHNlZW1lZCBhIGJpdCBicm9hZCBhdCBmaXJzdCwgYnV0IHJlbWVtYmVyaW5nIHRoZSBlcnJvciBoYW5kbGluZyBmbG93LCB0aGUgYWN0dWFsIGVycm9yIGhhbmRsaW5nIHJlc2lkZXMgd2l0aGluIGEgc3RhdGljIGZ1bmN0aW9uIGBzY3RwX3BhY2tldF9wYWNrYCBhbmQsIGNyaXRpY2FsbHksIGBzY3RwX3BhY2tldF90cmFuc21pdGAgY2FsbHMgdGhpcyBmdW5jdGlvbi4gU28sIEkgd2lsbCBpbmNsdWRlIGl0LlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGF0IHRoZSBhdXRoZW50aWNhdGlvbi1yZWxhdGVkIHN5bWJvbHMgYXJlIGFjdHVhbGx5IHN0YXRpYyBhcyBJIGluaXRpYWxseSB0aG91Z2h0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgc29tZXRoaW5nLlxuXG5Pa2F5LCBjaGVja2luZyBgbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNgLCBgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeWAgKmlzKiBpbmRlZWQgc3RhdGljLiBJdHMgY2FsbGVycyBhcmUgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAsIGFuZCBgc2N0cF9zZl9kb19kdXBjb29rX2RgLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC5cblxuTm93IHRvIHJlLXZlcmlmeSBgc2N0cF9zZl9hdXRoZW50aWNhdGVgLiBZZXMsIGl0J3MgYWxzbyBzdGF0aWMsIGluIGBuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE4MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU1OjEzLjQ1MTQ3ODIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjczNzQwMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9zZl9hdXRoZW50aWNhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTE0Mj1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfdmlvbGF0aW9uX2NodW5rKFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTQ5LVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjE1MDpzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xNTEtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz02NDA9c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy02NzItXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NjczOlxcdHJldHVybiBzY3RwX3NmX2F1dGhlbnRpY2F0ZShhc29jLCBcXHUwMDI2YXV0aCk7XFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNjc0LX1cXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTQzMzU9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZWF0X2Z3ZF90c25fZmFzdChcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ0MjItICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDQyMzpzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NDI0LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDUwMT1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9lYXRfYXV0aChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NTI3LVxcdGF1dGhfaGRyID0gKHN0cnVjdCBzY3RwX2F1dGhoZHIgKiljaHVuay1cXHUwMDNlc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQ1Mjg6XFx0ZXJyb3IgPSBzY3RwX3NmX2F1dGhlbnRpY2F0ZShhc29jLCBjaHVuayk7XFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDUyOS1cXHRzd2l0Y2ggKGVycm9yKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU1OjEzLjY3ODg1ODU3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc3MDQ1MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uICoqQW5hbHl6aW5nIHRoZSBgc2N0cF9zZl9hdXRoZW50aWNhdGVgIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvIGlzIGNhbGxpbmcgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgYHNjdHBfc2ZfZWF0X2F1dGhgLCBgc2N0cF9zZl9kb181XzFEX2NlYCwgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYW5kIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAgYXJlIGFsbCBjYWxsaW5nIGl0LlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIEkgY291bGQgaGF2ZSBzd29ybiB0aGF0IGBzY3RwX3NmX2VhdF9hdXRoYCB3YXMgc3RhdGljIHRvby4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYmVjYXVzZSBteSBtZW1vcnkgbWlnaHQgbm90IGJlIHRoZSBiZXN0IGFuZCB0aGlzIGlzIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NjIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6NTU6MTguNzU1OTA4NDkzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIzNDQ2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9zZl9lYXRfYXV0aFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDQyMz1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ1MDAtXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDUwMTplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9lYXRfYXV0aChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDUwMi1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jPTQ5OD1yZWNvbmZfY2h1bmtfZXZlbnRfdGFibGVbU0NUUF9OVU1fUkVDT05GX0NIVU5LX1RZUEVTXVtTQ1RQX1NUQVRFX05VTV9TVEFURVNdID0ge1xcbi0tXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jLTUwNy1cXHQvKiBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQgKi8gXFxcXFxcbm5ldC9zY3RwL3NtX3N0YXRldGFibGUuYzo1MDg6XFx0VFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lYXRfYXV0aCksIFxcXFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMtNTA5LVxcdC8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8gXFxcXFxcbm5ldC9zY3RwL3NtX3N0YXRldGFibGUuYzo1MTA6XFx0VFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lYXRfYXV0aCksIFxcXFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMtNTExLVxcdC8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcXFxcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jOjUxMjpcXHRUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2VhdF9hdXRoKSwgXFxcXFxcbm5ldC9zY3RwL3NtX3N0YXRldGFibGUuYy01MTMtXFx0LyogU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UICovIFxcXFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmM6NTE0OlxcdFRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X2F1dGgpLCBcXFxcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jLTUxNS1cXHQvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFxcXFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmM6NTE2OlxcdFRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X2F1dGgpLCBcXFxcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jLTUxNy1cXHQvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFxcXFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmM6NTE4OlxcdFRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X2F1dGgpLCBcXFxcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jLTUxOS19IC8qIFRZUEVfU0NUUF9BVVRIICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU1OjE4LjkxODI1OTI0OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDA3OTc4MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTQ1RQIEZ1bmN0aW9uIEF0dHJpYnV0ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBvdmVyIHRoaXMgU0NUUCBjb2RlLCBzcGVjaWZpY2FsbHkgYXQgdGhlc2UgZnVuY3Rpb25zLiBJdCdzIGdvb2QgdG8gY2xhcmlmeSB0aGVzZSBkZXRhaWxzLiBJIGNhbiBzZWUgdGhhdCBgc2N0cF9zZl9lYXRfYXV0aGAgaXMgZGVmaW5pdGVseSBub3QgZGVjbGFyZWQgYXMgc3RhdGljIOKAkyB0aGF0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIEFuZCBJIGNvbmZpcm0gdGhhdCBgc2N0cF9zZl9kb181XzFEX2NlYCBpcyBhbHNvIG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSBleHBlY3RlZC4gTm93LCBJIGhhdmUgYSBmZWVsaW5nIGFib3V0IHRoZSBgc2N0cF9zZl9kb19kdXBjb29rXypgIGZhbWlseS4gTGV0J3Mgc2VlLi4uIGFyZSBgc2N0cF9zZl9kb19kdXBjb29rX2FgLCBgc2N0cF9zZl9kb19kdXBjb29rX2JgLCBhbmQgYHNjdHBfc2ZfZG9fZHVwY29va19kYCBkZWNsYXJlZCBzdGF0aWM/IEdvdHRhIGRvdWJsZSBjaGVjayB0aG9zZSB0byBiZSBzdXJlLCBhbmQgSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGF0IGluIG15IHdvcmtpbmcgZG9jdW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTUwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6NTU6MjMuMzI2MjQwNTcyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE3MjI1ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9zZl9kb19kdXBjb29rX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MTg2MD1zdGF0aWMgaW50IHNjdHBfc2ZfZG9fYXNzb2NfdXBkYXRlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTg4OC0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoxODg5OnN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2EoXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTg5MC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMDE2LS8qIFRoaXMgY2FzZSByZXByZXNlbnRzIGFuIGluaXRpYWxpemF0aW9uIGNvbGxpc2lvbi4gICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MjAxNzpzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19iKFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIwMTgtXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjEwNS0vKiBUaGlzIGNhc2UgcmVwcmVzZW50cyBhbiBpbml0aWFsaXphdGlvbiBjb2xsaXNpb24uICAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIxMDY6c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYyhcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMTA3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIxMjgtLyogVGhpcyBjYXNlIHJlcHJlc2VudHMgYW4gaW5pdGlhbGl6YXRpb24gY29sbGlzaW9uLiAgKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMTI5OnN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjEzMC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz0yMjQ2PWVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2soXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzU0LVxcdGNhc2UgJ0EnOiAvKiBBc3NvY2lhdGlvbiByZXN0YXJ0LiAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIzNTU6XFx0XFx0cmV0dmFsID0gc2N0cF9zZl9kb19kdXBjb29rX2EobmV0LCBlcCwgYXNvYywgY2h1bmssIGNvbW1hbmRzLFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNTYtXFx0XFx0XFx0XFx0XFx0ICAgICAgbmV3X2Fzb2MpO1xcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjM1OS1cXHRjYXNlICdCJzogLyogQ29sbGlzaW9uIGNhc2UgQi4gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMzYwOlxcdFxcdHJldHZhbCA9IHNjdHBfc2ZfZG9fZHVwY29va19iKG5ldCwgZXAsIGFzb2MsIGNodW5rLCBjb21tYW5kcyxcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzYxLVxcdFxcdFxcdFxcdFxcdCAgICAgIG5ld19hc29jKTtcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNjQtXFx0Y2FzZSAnQyc6IC8qIENvbGxpc2lvbiBjYXNlIEMuICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MjM2NTpcXHRcXHRyZXR2YWwgPSBzY3RwX3NmX2RvX2R1cGNvb2tfYyhuZXQsIGVwLCBhc29jLCBjaHVuaywgY29tbWFuZHMsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjM2Ni1cXHRcXHRcXHRcXHRcXHQgICAgICBuZXdfYXNvYyk7XFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzY5LVxcdGNhc2UgJ0QnOiAvKiBDb2xsaXNpb24gY2FzZSBELiAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIzNzA6XFx0XFx0cmV0dmFsID0gc2N0cF9zZl9kb19kdXBjb29rX2QobmV0LCBlcCwgYXNvYywgY2h1bmssIGNvbW1hbmRzLFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNzEtXFx0XFx0XFx0XFx0XFx0ICAgICAgbmV3X2Fzb2MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NToyMy40NDc5Njk5NzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAwOTg1NTc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFN0YXRpYyBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aGUgZnVuY3Rpb25zIEknbSBleGFtaW5pbmcgc2VlbSB0byBiZSBzdGF0aWNhbGx5IGRlY2xhcmVkLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCdzIGNhbGxpbmcgdGhlbSwgd2hpY2ggYXBwZWFycyB0byBiZSBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYC4gQmFzZWQgb24gdGhpcywgSSBuZWVkIHRvIGZvY3VzIG15IGludmVzdGlnYXRpb24gb24gYSBzZWxlY3QgZ3JvdXAgb2Ygc3ltYm9scyByZWxhdGVkIHRvIHRoaXMuXG5cblRoZSBjcnVjaWFsIG9uZXMgdG8gZXhhbWluZSBhcmU6XG4tICAgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2Bcbi0gICBgc2N0cF9wYWNrZXRfdHJhbnNtaXRgXG4tICAgYHNjdHBfc2ZfZG9fNV8xRF9jZWBcbi0gICBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYFxuLSAgIGBzY3RwX3NmX2VhdF9hdXRoYFxuXG5Ob3csIEknbGwgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AgaXMsIGluIGZhY3QsIG5vbi1zdGF0aWMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBkaWdnaW5nIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODEyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU1OjI5LjQ1NzgyODM4NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM5NTY2NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvYXV0aC5jPTU5NT1pbnQgc2N0cF9hdXRoX3JlY3ZfY2lkKGVudW0gc2N0cF9jaWQgY2h1bmssIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTYxNS0gKi9cXG5uZXQvc2N0cC9hdXRoLmM6NjE2OmludCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxubmV0L3NjdHAvYXV0aC5jLTYxNy1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXFxuLS1cXG5uZXQvc2N0cC9vdXRwdXQuYz00MzY9c3RhdGljIGludCBzY3RwX3BhY2tldF9wYWNrKHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LFxcbi0tXFxubmV0L3NjdHAvb3V0cHV0LmMtNTE5LVxcdFxcdGlmIChhdXRoKSB7XFxubmV0L3NjdHAvb3V0cHV0LmM6NTIwOlxcdFxcdFxcdGlmIChzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWModHAtXFx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXFxubmV0L3NjdHAvb3V0cHV0LmMtNTIxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGFja2V0LVxcdTAwM2VhdXRoLVxcdTAwM2VzaGtleSwgZ2ZwKSkge1xcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDQyMz1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ0NzktXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDQ4MDpcXHRpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGFzb2MsIGNodW5rLVxcdTAwM2Vza2IsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDQ4MS1cXHRcXHRcXHRcXHQgICAgIChzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICopY2h1bmstXFx1MDAzZWNodW5rX2hkcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6NTU6MjkuNzk3NDIzMTc0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzODYyNTMzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0NUUCBBdXRoZW50aWNhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3Qgc3RhdGljIGNvZGUsIHRoYXQncyBjbGVhci4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBjb2RlIHBvaW50cyBtZSB0byB0aGVzZSBrZXkgc3ltYm9scyBmb3IgZGVlcGVyIGFuYWx5c2lzOiBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYCwgYHNjdHBfcGFja2V0X3RyYW5zbWl0YCwgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tgLCBhbmQgYHNjdHBfc2ZfZWF0X2F1dGhgLiBJJ20gc2VlaW5nIHRoZSBgSVBfU0NUUGAgY29uZmlnIGJlaW5nIHJlbGV2YW50LlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IGBJUF9TQ1RQYCBpcyB0aGUgb25seSBjb25maWcgb2YgcmVsZXZhbmNlIGhlcmUuIEhtLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgY29tZSBpbnRvIHBsYXkuIEFoLCBhbHJpZ2h0LiBMb29rcyBsaWtlIGBJUF9TQ1RQYCBhbHNvIHNlbGVjdHMgYENSWVBUT19MSUJfU0hBMWAsIGBDUllQVE9fTElCX1NIQTI1NmAsIGFuZCBgQ1JZUFRPX0xJQl9VVElMU2AuIFNvLCB5ZXMsIGBJUF9TQ1RQYCBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBmdW5jdGlvbmFsIGltcGFjdC4gVGhlIHBhdGNoIGlzIGFib3V0IGhhbmRsaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGluIGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgb2YgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AgYW5kIHRoZW4gbW9kaWZpZXMgdGhlIGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24gaW4gYHNjdHBfcGFja2V0X3BhY2tgIGFuZCBgc2N0cF9zZl9hdXRoZW50aWNhdGVgIHRvIGhhbmRsZSBhbiBlcnJvci4gVGhpcyBwcmV2ZW50cyB0aGUgcG9zc2liaWxpdHkgb2YgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igc2lsZW50IGZhaWx1cmVzLiBUaGlzIHR5cGUgb2YgY29yZSBuZXR3b3JrIGxvZ2ljIGNoYW5nZSBoYXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuXG5cblRoZXJlZm9yZSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gZnV6ei4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY3JpdGljYWwgYXJlYS5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjE1LCJPdXRwdXRUb2tlbnMiOjE5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NTozOC4xODM2Nzk3NzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ3MjQ2MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNcIixcbiAgICBcInNjdHBfcGFja2V0X3RyYW5zbWl0XCIsXG4gICAgXCJzY3RwX3NmX2RvXzVfMURfY2VcIixcbiAgICBcInNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va1wiLFxuICAgIFwic2N0cF9zZl9lYXRfYXV0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT01FTSkuIEl0IHVwZGF0ZXMgdGhlIHJldHVybiB0eXBlIG9mIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyBhbmQgbW9kaWZpZXMgY2FsbGVycyBpbiBzY3RwX3BhY2tldF9wYWNrIGFuZCBzY3RwX3NmX2F1dGhlbnRpY2F0ZSB0byBoYW5kbGUgdGhlIGVycm9yLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHNpbGVudCBmYWlsdXJlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY1wiLFxuICAgIFwic2N0cF9wYWNrZXRfdHJhbnNtaXRcIixcbiAgICBcInNjdHBfc2ZfZG9fNV8xRF9jZVwiLFxuICAgIFwic2N0cF9zZl9kb181XzJfNF9kdXBjb29rXCIsXG4gICAgXCJzY3RwX3NmX2VhdF9hdXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gSXQgdXBkYXRlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjIGFuZCBtb2RpZmllcyBjYWxsZXJzIGluIHNjdHBfcGFja2V0X3BhY2sgYW5kIHNjdHBfc2ZfYXV0aGVudGljYXRlIHRvIGhhbmRsZSB0aGUgZXJyb3IsIHByZXZlbnRpbmcgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc2lsZW50IGZhaWx1cmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow7bctf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 07:35:32 +0000 UTC FinishedAt: 2026-08-04 07:55:39 +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": "d1000fd7995e51deec872d154e0a40d82f7a539f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d1000fd7995e51deec872d154e0a40d82f7a539f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "02176ce0-597e-4170-b82b-287db7ee902a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_auth_calculate_hmac", "sctp_packet_transmit", "sctp_sf_do_5_1D_ce", "sctp_sf_do_5_2_4_dupcook", "sctp_sf_eat_auth" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMmIzM0OywKICAgICYjMzQ7c2N0cF9wYWNrZXRfdHJhbnNtaXQmIzM0OywKICAgICYjMzQ7c2N0cF9zZl9kb181XzFEX2NlJiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2VhdF9hdXRoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT01FTSkuIEl0IHVwZGF0ZXMgdGhlIHJldHVybiB0eXBlIG9mIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyBhbmQgbW9kaWZpZXMgY2FsbGVycyBpbiBzY3RwX3BhY2tldF9wYWNrIGFuZCBzY3RwX3NmX2F1dGhlbnRpY2F0ZSB0byBoYW5kbGUgdGhlIGVycm9yLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHNpbGVudCBmYWlsdXJlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYmEwYzNmODI1NDA4ZjE4MTk5ZTdmM2ViMGY4MDIwNjc2ZjMzMWE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAwNzo1NDoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL2F1dGguaCBiL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oXG5pbmRleCA2ZjJjZDU2MmIxZGU2Li5lZWIzMjk3ZmU5N2QzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oXG5AQCAtODMsOSAmIzQzOzgzLDkgQEAgaW50IHNjdHBfYXV0aF9zZW5kX2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpO1xuIGludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuayxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTtcbi12b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbiYjNDM7aW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbiB2b2lkIHNjdHBfYXV0aF9zaGtleV9yZWxlYXNlKHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKnNoX2tleSk7XG4gdm9pZCBzY3RwX2F1dGhfc2hrZXlfaG9sZChzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2F1dGguYyBiL25ldC9zY3RwL2F1dGguY1xuaW5kZXggYzkwMWQzNzNhZjgwMy4uNmRlNjZmNTZjNDFjZSAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL2F1dGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvYXV0aC5jXG5AQCAtNjEzLDkgJiM0Mzs2MTMsOSBAQCBpbnQgc2N0cF9hdXRoX3JlY3ZfY2lkKGVudW0gc2N0cF9jaWQgY2h1bmssIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuICAqICAgIHplcm8gKGFzIHNob3duIGluIEZpZ3VyZSA2KSBmb2xsb3dlZCBieSBhbGwgY2h1bmtzIHRoYXQgYXJlIHBsYWNlZFxuICAqICAgIGFmdGVyIHRoZSBBVVRIIGNodW5rIGluIHRoZSBTQ1RQIHBhY2tldC5cbiAgKi9cbi12b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKVxuJiM0MztpbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApXG4ge1xuIFx0c3RydWN0IHNjdHBfYXV0aF9ieXRlcyAqYXNvY19rZXk7XG4gXHRfX3UxNiBrZXlfaWQsIGhtYWNfaWQ7XG5AQCAtNjM2LDcgJiM0Mzs2MzYsNyBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcdFx0LyogZXBfa2V5IGNhbiYjMzk7dCBiZSBOVUxMIGhlcmUgKi9cbiBcdFx0YXNvY19rZXkgPSBzY3RwX2F1dGhfYXNvY19jcmVhdGVfc2VjcmV0KGFzb2MsIGVwX2tleSwgZ2ZwKTtcbiBcdFx0aWYgKCFhc29jX2tleSlcbi1cdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0XHRmcmVlX2tleSA9IDE7XG4gXHR9XG5AQCAtNjU0LDYgJiM0Mzs2NTQsOCBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcbiBcdGlmIChmcmVlX2tleSlcbiBcdFx0c2N0cF9hdXRoX2tleV9wdXQoYXNvY19rZXkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyogQVBJIEhlbHBlcnMgKi9cbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRwdXQuYyBiL25ldC9zY3RwL291dHB1dC5jXG5pbmRleCAyM2U5NjMwNWNhZDdjLi4zZDdlYWQ5ZDQwZTE5IDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL291dHB1dC5jXG5AQCAtNTE3LDggJiM0Mzs1MTcsMTQgQEAgc3RhdGljIGludCBzY3RwX3BhY2tldF9wYWNrKHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LFxuIFx0XHR9XG4gXG4gXHRcdGlmIChhdXRoKSB7XG4tXHRcdFx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLVx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXG4tXHRcdFx0XHRcdFx0IHBhY2tldC1cdTAwM2VhdXRoLVx1MDAzZXNoa2V5LCBnZnApO1xuJiM0MztcdFx0XHRpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLVx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgcGFja2V0LVx1MDAzZWF1dGgtXHUwMDNlc2hrZXksIGdmcCkpIHtcbiYjNDM7XHRcdFx0XHRzY3RwX2NodW5rX2ZyZWUocGFja2V0LVx1MDAzZWF1dGgpO1xuJiM0MztcdFx0XHRcdHBhY2tldC1cdTAwM2VhdXRoID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRpZiAoZ3NvKVxuJiM0MztcdFx0XHRcdFx0a2ZyZWVfc2tiKG5za2IpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0LyogZnJlZSBhdXRoIGlmIG5vIG1vcmUgY2h1bmtzLCBvciBhZGQgaXQgYmFjayAqL1xuIFx0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnBhY2tldC1cdTAwM2VjaHVua19saXN0KSlcbiBcdFx0XHRcdHNjdHBfY2h1bmtfZnJlZShwYWNrZXQtXHUwMDNlYXV0aCk7XG5AQCAtNjE5LDcgJiM0Mzs2MjUsNyBAQCBpbnQgc2N0cF9wYWNrZXRfdHJhbnNtaXQoc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQsIGdmcF90IGdmcClcbiBcbiBcdC8qIHBhY2sgdXAgY2h1bmtzICovXG4gXHRwa3RfY291bnQgPSBzY3RwX3BhY2tldF9wYWNrKHBhY2tldCwgaGVhZCwgZ3NvLCBnZnApO1xuLVx0aWYgKCFwa3RfY291bnQpIHtcbiYjNDM7XHRpZiAocGt0X2NvdW50IFx1MDAzYz0gMCkge1xuIFx0XHRrZnJlZV9za2IoaGVhZCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbmluZGV4IDcwOGZhMDdkNWZmZmMuLmUxOTg4MWM5MGI0OTkgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbkBAIC02MzcsMTMgJiM0Mzs2MzcsMTcgQEAgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xQ19hY2soc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fQ09OU1VNRTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuJiM0MztzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4ge1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgYXV0aDtcbiBcbi1cdGlmICghY2h1bmstXHUwMDNlYXV0aF9jaHVuaylcbi1cdFx0cmV0dXJuICFzY3RwX2F1dGhfcmVjdl9jaWQoY2h1bmstXHUwMDNlY2h1bmtfaGRyLVx1MDAzZXR5cGUsIGFzb2MpO1xuJiM0MztcdGlmICghY2h1bmstXHUwMDNlYXV0aF9jaHVuaykge1xuJiM0MztcdFx0aWYgKHNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay1cdTAwM2VjaHVua19oZHItXHUwMDNldHlwZSwgYXNvYykpXG4mIzQzO1x0XHRcdHJldHVybiBTQ1RQX0lFUlJPUl9CQURfU0lHO1xuJiM0MztcdFx0cmV0dXJuIFNDVFBfSUVSUk9SX05PX0VSUk9SO1xuJiM0MztcdH1cbiBcbiBcdC8qIFNDVFAtQVVUSDogIGF1dGhfY2h1bmsgcG9pbnRlciBpcyBvbmx5IHNldCB3aGVuIHRoZSBjb29raWUtZWNob1xuIFx0ICogaXMgc3VwcG9zZWQgdG8gYmUgYXV0aGVudGljYXRlZCBhbmQgd2UgaGF2ZSB0byBkbyBkZWxheWVkXG5AQCAtNjU0LDcgJiM0Mzs2NTgsNyBAQCBzdGF0aWMgYm9vbCBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxuIFxuIFx0LyogTWFrZSBzdXJlIHRoYXQgd2UgYW5kIHRoZSBwZWVyIGFyZSBBVVRIIGNhcGFibGUgKi9cbiBcdGlmICghbmV0LVx1MDAzZXNjdHAuYXV0aF9lbmFibGUgfHwgIWFzb2MtXHUwMDNlcGVlci5hdXRoX2NhcGFibGUpXG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiBTQ1RQX0lFUlJPUl9CQURfU0lHO1xuIFxuIFx0Lyogc2V0LXVwIG91ciBmYWtlIGNodW5rIHNvIHRoYXQgd2UgY2FuIHByb2Nlc3MgaXQgKi9cbiBcdGF1dGguc2tiID0gY2h1bmstXHUwMDNlYXV0aF9jaHVuaztcbkBAIC02NjYsNyAmIzQzOzY3MCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4gXHRza2JfcHVsbChjaHVuay1cdTAwM2VhdXRoX2NodW5rLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTtcbiBcdGF1dGgudHJhbnNwb3J0ID0gY2h1bmstXHUwMDNldHJhbnNwb3J0O1xuIFxuLVx0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFx1MDAyNmF1dGgpID09IFNDVFBfSUVSUk9SX05PX0VSUk9SO1xuJiM0MztcdHJldHVybiBzY3RwX3NmX2F1dGhlbnRpY2F0ZShhc29jLCBcdTAwMjZhdXRoKTtcbiB9XG4gXG4gLypcbkBAIC04MjYsOCAmIzQzOzgzMCwxMSBAQCBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFEX2NlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBub21lbV9pbml0O1xuIFxuLVx0aWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSkge1xuJiM0MztcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYyk7XG4mIzQzO1x0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XG4gXHRcdHNjdHBfYXNzb2NpYXRpb25fZnJlZShuZXdfYXNvYyk7XG4mIzQzO1x0XHRpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pXG4mIzQzO1x0XHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNO1xuIFx0XHRyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChuZXQsIGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTtcbiBcdH1cbiBcbkBAIC0xODg5LDYgJiM0MzsxODk2LDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYShcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpwZWVyX2luaXQ7XG4gXHRlbnVtIHNjdHBfZGlzcG9zaXRpb24gZGlzcG9zaXRpb247XG4mIzQzO1x0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcbiBcdHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldjtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICpyZXBsO1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgKmVycjtcbkBAIC0xOTA0LDggJiM0MzsxOTEyLDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2EoXG4gXHRpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSlcbiBcdFx0Z290byBub21lbTtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpXG4mIzQzO1x0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcbiYjNDM7XHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiYjNDM7XHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogTWFrZSBzdXJlIG5vIG5ldyBhZGRyZXNzZXMgYXJlIGJlaW5nIGFkZGVkIGR1cmluZyB0aGVcbiBcdCAqIHJlc3RhcnQuICBUaG91Z2ggdGhpcyBpcyBhIHByZXR0eSBjb21wbGljYXRlZCBhdHRhY2tcbkBAIC0yMDExLDYgJiM0MzsyMDIzLDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYihcbiBcdFx0XHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKm5ld19hc29jKVxuIHtcbiBcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcbiYjNDM7XHRlbnVtIHNjdHBfaWVycm9yIGVycm9yO1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7XG4gXG4gXHQvKiBuZXdfYXNvYyBpcyBhIGJyYW5kLW5ldyBhc3NvY2lhdGlvbiwgc28gdGhlc2UgYXJlIG5vdCB5ZXRcbkBAIC0yMDI0LDggJiM0MzsyMDM3LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2IoXG4gXHRpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSlcbiBcdFx0Z290byBub21lbTtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpXG4mIzQzO1x0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcbiYjNDM7XHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiYjNDM7XHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4mIzQzO1x0fVxuIFxuIFx0c2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ORVdfU1RBVEUsXG4gXHRcdFx0U0NUUF9TVEFURShTQ1RQX1NUQVRFX0VTVEFCTElTSEVEKSk7XG5AQCAtMjExOCw2ICYjNDM7MjEzNSw3IEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXG4gXHRcdFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpuZXdfYXNvYylcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXYgPSBOVUxMLCAqYWlfZXYgPSBOVUxMLCAqYXV0aF9ldiA9IE5VTEw7XG4mIzQzO1x0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICpyZXBsO1xuIFxuIFx0LyogQ2xhcmlmaWNhdGlvbiBmcm9tIEltcGxlbWVudG9yJiMzOTtzIEd1aWRlOlxuQEAgLTIxMjcsOCAmIzQzOzIxNDUsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfZChcbiBcdCAqIGEgQ09PS0lFIEFDSy5cbiBcdCAqL1xuIFxuLVx0aWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIGFzb2MpKVxuJiM0MztcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKTtcbiYjNDM7XHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiYjNDM7XHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogRG9uJiMzOTt0IGFjY2lkZW50YWxseSBtb3ZlIGJhY2sgaW50byBlc3RhYmxpc2hlZCBzdGF0ZS4gKi9cbiBcdGlmIChhc29jLVx1MDAzZXN0YXRlIFx1MDAzYyBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEKSB7XG5AQCAtNDQ1NSw5ICYjNDM7NDQ3NywxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcbiBcbiBcdG1lbXNldChkaWdlc3QsIDAsIHNpZ19sZW4pO1xuIFxuLVx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGFzb2MsIGNodW5rLVx1MDAzZXNrYixcbi1cdFx0XHRcdCAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLVx1MDAzZWNodW5rX2hkcixcbi1cdFx0XHRcdCBzaF9rZXksIEdGUF9BVE9NSUMpO1xuJiM0MztcdGlmIChzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoYXNvYywgY2h1bmstXHUwMDNlc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKiljaHVuay1cdTAwM2VjaHVua19oZHIsXG4mIzQzO1x0XHRcdFx0ICAgICBzaF9rZXksIEdGUF9BVE9NSUMpKSB7XG4mIzQzO1x0XHRrZnJlZShzYXZlX2RpZ2VzdCk7XG4mIzQzO1x0XHRyZXR1cm4gU0NUUF9JRVJST1JfTk9NRU07XG4mIzQzO1x0fVxuIFxuIFx0LyogRGlzY2FyZCB0aGUgcGFja2V0IGlmIHRoZSBkaWdlc3RzIGRvIG5vdCBtYXRjaCAqL1xuIFx0aWYgKGNyeXB0b19tZW1uZXEoc2F2ZV9kaWdlc3QsIGRpZ2VzdCwgc2lnX2xlbikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyYjMzQ7LAogICAgJiMzNDtzY3RwX3BhY2tldF90cmFuc21pdCYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2RvXzVfMURfY2UmIzM0OywKICAgICYjMzQ7c2N0cF9zZl9kb181XzJfNF9kdXBjb29rJiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZWF0X2F1dGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gSXQgdXBkYXRlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjIGFuZCBtb2RpZmllcyBjYWxsZXJzIGluIHNjdHBfcGFja2V0X3BhY2sgYW5kIHNjdHBfc2ZfYXV0aGVudGljYXRlIHRvIGhhbmRsZSB0aGUgZXJyb3IsIHByZXZlbnRpbmcgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc2lsZW50IGZhaWx1cmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRiYTBjM2Y4MjU0MDhmMTgxOTllN2YzZWIwZjgwMjA2NzZmMzMxYTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDA3OjU0OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmggYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaAppbmRleCA2ZjJjZDU2MmIxZGU2Li5lZWIzMjk3ZmU5N2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL2F1dGguaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaApAQCAtODMsOSAmIzQzOzgzLDkgQEAgaW50IHNjdHBfYXV0aF9zZW5kX2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLAogCQkgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwogaW50IHNjdHBfYXV0aF9yZWN2X2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLAogCQkgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwotdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLAotCQkJICAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApOwomIzQzO2ludCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiYjNDM7CQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLAomIzQzOwkJCSAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApOwogdm9pZCBzY3RwX2F1dGhfc2hrZXlfcmVsZWFzZShzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpOwogdm9pZCBzY3RwX2F1dGhfc2hrZXlfaG9sZChzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpOwogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hdXRoLmMgYi9uZXQvc2N0cC9hdXRoLmMKaW5kZXggYzkwMWQzNzNhZjgwMy4uNmRlNjZmNTZjNDFjZSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYXV0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL2F1dGguYwpAQCAtNjEzLDkgJiM0Mzs2MTMsOSBAQCBpbnQgc2N0cF9hdXRoX3JlY3ZfY2lkKGVudW0gc2N0cF9jaWQgY2h1bmssIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogICogICAgemVybyAoYXMgc2hvd24gaW4gRmlndXJlIDYpIGZvbGxvd2VkIGJ5IGFsbCBjaHVua3MgdGhhdCBhcmUgcGxhY2VkCiAgKiAgICBhZnRlciB0aGUgQVVUSCBjaHVuayBpbiB0aGUgU0NUUCBwYWNrZXQuCiAgKi8KLXZvaWQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCwKLQkJCSAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKQomIzQzO2ludCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiYjNDM7CQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLAomIzQzOwkJCSAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHNjdHBfYXV0aF9ieXRlcyAqYXNvY19rZXk7CiAJX191MTYga2V5X2lkLCBobWFjX2lkOwpAQCAtNjM2LDcgJiM0Mzs2MzYsNyBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJLyogZXBfa2V5IGNhbiYjMzk7dCBiZSBOVUxMIGhlcmUgKi8KIAkJYXNvY19rZXkgPSBzY3RwX2F1dGhfYXNvY19jcmVhdGVfc2VjcmV0KGFzb2MsIGVwX2tleSwgZ2ZwKTsKIAkJaWYgKCFhc29jX2tleSkKLQkJCXJldHVybjsKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKIAogCQlmcmVlX2tleSA9IDE7CiAJfQpAQCAtNjU0LDYgJiM0Mzs2NTQsOCBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAogCWlmIChmcmVlX2tleSkKIAkJc2N0cF9hdXRoX2tleV9wdXQoYXNvY19rZXkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyogQVBJIEhlbHBlcnMgKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmMKaW5kZXggMjNlOTYzMDVjYWQ3Yy4uM2Q3ZWFkOWQ0MGUxOSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvb3V0cHV0LmMKQEAgLTUxNyw4ICYjNDM7NTE3LDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCwKIAkJfQogCiAJCWlmIChhdXRoKSB7Ci0JCQlzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWModHAtJmd0O2Fzb2MsIG5za2IsIGF1dGgsCi0JCQkJCQkgcGFja2V0LSZndDthdXRoLSZndDtzaGtleSwgZ2ZwKTsKJiM0MzsJCQlpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLSZndDthc29jLCBuc2tiLCBhdXRoLAomIzQzOwkJCQkJCSAgICAgcGFja2V0LSZndDthdXRoLSZndDtzaGtleSwgZ2ZwKSkgewomIzQzOwkJCQlzY3RwX2NodW5rX2ZyZWUocGFja2V0LSZndDthdXRoKTsKJiM0MzsJCQkJcGFja2V0LSZndDthdXRoID0gTlVMTDsKJiM0MzsJCQkJaWYgKGdzbykKJiM0MzsJCQkJCWtmcmVlX3NrYihuc2tiKTsKJiM0MzsJCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQkJfQogCQkJLyogZnJlZSBhdXRoIGlmIG5vIG1vcmUgY2h1bmtzLCBvciBhZGQgaXQgYmFjayAqLwogCQkJaWYgKGxpc3RfZW1wdHkoJmFtcDtwYWNrZXQtJmd0O2NodW5rX2xpc3QpKQogCQkJCXNjdHBfY2h1bmtfZnJlZShwYWNrZXQtJmd0O2F1dGgpOwpAQCAtNjE5LDcgJiM0Mzs2MjUsNyBAQCBpbnQgc2N0cF9wYWNrZXRfdHJhbnNtaXQoc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQsIGdmcF90IGdmcCkKIAogCS8qIHBhY2sgdXAgY2h1bmtzICovCiAJcGt0X2NvdW50ID0gc2N0cF9wYWNrZXRfcGFjayhwYWNrZXQsIGhlYWQsIGdzbywgZ2ZwKTsKLQlpZiAoIXBrdF9jb3VudCkgewomIzQzOwlpZiAocGt0X2NvdW50ICZsdDs9IDApIHsKIAkJa2ZyZWVfc2tiKGhlYWQpOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCmluZGV4IDcwOGZhMDdkNWZmZmMuLmUxOTg4MWM5MGI0OTkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCkBAIC02MzcsMTMgJiM0Mzs2MzcsMTcgQEAgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xQ19hY2soc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7CiB9CiAKLXN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCi0JCQkJICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiYjNDM7c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAomIzQzOwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogewogCXN0cnVjdCBzY3RwX2NodW5rIGF1dGg7CiAKLQlpZiAoIWNodW5rLSZndDthdXRoX2NodW5rKQotCQlyZXR1cm4gIXNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay0mZ3Q7Y2h1bmtfaGRyLSZndDt0eXBlLCBhc29jKTsKJiM0MzsJaWYgKCFjaHVuay0mZ3Q7YXV0aF9jaHVuaykgewomIzQzOwkJaWYgKHNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay0mZ3Q7Y2h1bmtfaGRyLSZndDt0eXBlLCBhc29jKSkKJiM0MzsJCQlyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NJRzsKJiM0MzsJCXJldHVybiBTQ1RQX0lFUlJPUl9OT19FUlJPUjsKJiM0MzsJfQogCiAJLyogU0NUUC1BVVRIOiAgYXV0aF9jaHVuayBwb2ludGVyIGlzIG9ubHkgc2V0IHdoZW4gdGhlIGNvb2tpZS1lY2hvCiAJICogaXMgc3VwcG9zZWQgdG8gYmUgYXV0aGVudGljYXRlZCBhbmQgd2UgaGF2ZSB0byBkbyBkZWxheWVkCkBAIC02NTQsNyAmIzQzOzY1OCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCiAKIAkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbmQgdGhlIHBlZXIgYXJlIEFVVEggY2FwYWJsZSAqLwogCWlmICghbmV0LSZndDtzY3RwLmF1dGhfZW5hYmxlIHx8ICFhc29jLSZndDtwZWVyLmF1dGhfY2FwYWJsZSkKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJcmV0dXJuIFNDVFBfSUVSUk9SX0JBRF9TSUc7CiAKIAkvKiBzZXQtdXAgb3VyIGZha2UgY2h1bmsgc28gdGhhdCB3ZSBjYW4gcHJvY2VzcyBpdCAqLwogCWF1dGguc2tiID0gY2h1bmstJmd0O2F1dGhfY2h1bms7CkBAIC02NjYsNyAmIzQzOzY3MCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCiAJc2tiX3B1bGwoY2h1bmstJmd0O2F1dGhfY2h1bmssIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpOwogCWF1dGgudHJhbnNwb3J0ID0gY2h1bmstJmd0O3RyYW5zcG9ydDsKIAotCXJldHVybiBzY3RwX3NmX2F1dGhlbnRpY2F0ZShhc29jLCAmYW1wO2F1dGgpID09IFNDVFBfSUVSUk9SX05PX0VSUk9SOwomIzQzOwlyZXR1cm4gc2N0cF9zZl9hdXRoZW50aWNhdGUoYXNvYywgJmFtcDthdXRoKTsKIH0KIAogLyoKQEAgLTgyNiw4ICYjNDM7ODMwLDExIEBAIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMURfY2Uoc3RydWN0IG5ldCAqbmV0LAogCWlmIChlcnJvcikKIAkJZ290byBub21lbV9pbml0OwogCi0JaWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSkgewomIzQzOwllcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpOwomIzQzOwlpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHsKIAkJc2N0cF9hc3NvY2lhdGlvbl9mcmVlKG5ld19hc29jKTsKJiM0MzsJCWlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSkKJiM0MzsJCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTsKIAkJcmV0dXJuIHNjdHBfc2ZfcGRpc2NhcmQobmV0LCBlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CiAJfQogCkBAIC0xODg5LDYgJiM0MzsxODk2LDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYSgKIHsKIAlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpwZWVyX2luaXQ7CiAJZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uOwomIzQzOwllbnVtIHNjdHBfaWVycm9yIGVycm9yOwogCXN0cnVjdCBzY3RwX3VscGV2ZW50ICpldjsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqZXJyOwpAQCAtMTkwNCw4ICYjNDM7MTkxMiwxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19hKAogCWlmIChzY3RwX2F1dGhfYXNvY19pbml0X2FjdGl2ZV9rZXkobmV3X2Fzb2MsIEdGUF9BVE9NSUMpKQogCQlnb3RvIG5vbWVtOwogCi0JaWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSkKJiM0MzsJZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTsKJiM0MzsJaWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7CiYjNDM7CQlpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pCiYjNDM7CQkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07CiAJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7CiYjNDM7CX0KIAogCS8qIE1ha2Ugc3VyZSBubyBuZXcgYWRkcmVzc2VzIGFyZSBiZWluZyBhZGRlZCBkdXJpbmcgdGhlCiAJICogcmVzdGFydC4gIFRob3VnaCB0aGlzIGlzIGEgcHJldHR5IGNvbXBsaWNhdGVkIGF0dGFjawpAQCAtMjAxMSw2ICYjNDM7MjAyMyw3IEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2IoCiAJCQkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpuZXdfYXNvYykKIHsKIAlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpwZWVyX2luaXQ7CiYjNDM7CWVudW0gc2N0cF9pZXJyb3IgZXJyb3I7CiAJc3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7CiAKIAkvKiBuZXdfYXNvYyBpcyBhIGJyYW5kLW5ldyBhc3NvY2lhdGlvbiwgc28gdGhlc2UgYXJlIG5vdCB5ZXQKQEAgLTIwMjQsOCAmIzQzOzIwMzcsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYigKIAlpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSkKIAkJZ290byBub21lbTsKIAotCWlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpCiYjNDM7CWVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYyk7CiYjNDM7CWlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikgewomIzQzOwkJaWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKQomIzQzOwkJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNOwogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ESVNDQVJEOwomIzQzOwl9CiAKIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX05FV19TVEFURSwKIAkJCVNDVFBfU1RBVEUoU0NUUF9TVEFURV9FU1RBQkxJU0hFRCkpOwpAQCAtMjExOCw2ICYjNDM7MjEzNSw3IEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoCiAJCQkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpuZXdfYXNvYykKIHsKIAlzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXYgPSBOVUxMLCAqYWlfZXYgPSBOVUxMLCAqYXV0aF9ldiA9IE5VTEw7CiYjNDM7CWVudW0gc2N0cF9pZXJyb3IgZXJyb3I7CiAJc3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7CiAKIAkvKiBDbGFyaWZpY2F0aW9uIGZyb20gSW1wbGVtZW50b3ImIzM5O3MgR3VpZGU6CkBAIC0yMTI3LDggJiM0MzsyMTQ1LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoCiAJICogYSBDT09LSUUgQUNLLgogCSAqLwogCi0JaWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIGFzb2MpKQomIzQzOwllcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgYXNvYyk7CiYjNDM7CWlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikgewomIzQzOwkJaWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKQomIzQzOwkJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNOwogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ESVNDQVJEOwomIzQzOwl9CiAKIAkvKiBEb24mIzM5O3QgYWNjaWRlbnRhbGx5IG1vdmUgYmFjayBpbnRvIGVzdGFibGlzaGVkIHN0YXRlLiAqLwogCWlmIChhc29jLSZndDtzdGF0ZSAmbHQ7IFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQpIHsKQEAgLTQ0NTUsOSAmIzQzOzQ0NzcsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9zZl9hdXRoZW50aWNhdGUoCiAKIAltZW1zZXQoZGlnZXN0LCAwLCBzaWdfbGVuKTsKIAotCXNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhhc29jLCBjaHVuay0mZ3Q7c2tiLAotCQkJCSAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLSZndDtjaHVua19oZHIsCi0JCQkJIHNoX2tleSwgR0ZQX0FUT01JQyk7CiYjNDM7CWlmIChzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoYXNvYywgY2h1bmstJmd0O3NrYiwKJiM0MzsJCQkJICAgICAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLSZndDtjaHVua19oZHIsCiYjNDM7CQkJCSAgICAgc2hfa2V5LCBHRlBfQVRPTUlDKSkgewomIzQzOwkJa2ZyZWUoc2F2ZV9kaWdlc3QpOwomIzQzOwkJcmV0dXJuIFNDVFBfSUVSUk9SX05PTUVNOwomIzQzOwl9CiAKIAkvKiBEaXNjYXJkIHRoZSBwYWNrZXQgaWYgdGhlIGRpZ2VzdHMgZG8gbm90IG1hdGNoICovCiAJaWYgKGNyeXB0b19tZW1uZXEoc2F2ZV9kaWdlc3QsIGRpZ2VzdCwgc2lnX2xlbikpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNDVFAgQXV0aGVudGljYXRpb24gSE1BQyBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGNoYW5naW5nIHRoZSB3YXkgdGhlIEhNQUMgY2FsY3VsYXRpb24gaXMgaGFuZGxlZCBpbiBTQ1RQIGF1dGhlbnRpY2F0aW9uLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIGdvbmUgZnJvbSBhIGB2b2lkYCByZXR1cm4gdHlwZSBpbiBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYCB0byBhbiBgaW50YCwgdG8gYWxsb3cgZm9yIHRoZSBoYW5kbGluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aXRoIHRoZSBgLUVOT01FTWAgZXJyb3IgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjaGFuZ2U7IHJvYnVzdCBlcnJvciBoYW5kbGluZyBpcyBjcnVjaWFsLCBlc3BlY2lhbGx5IGluIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uIGxpa2UgYXV0aGVudGljYXRpb24uIFRoZSBjYWxsZXJzIHNlZW0gdG8gYmUgcHJvcGVybHkgdXBkYXRlZCB0byBtYW5hZ2UgdGhlc2UgZXJyb3JzIGFuZCBwcm9wYWdhdGUgdGhlbSBhcHByb3ByaWF0ZWx5LCByZXR1cm5pbmcgYFNDVFBfSUVSUk9SX05PTUVNYCBvciBgU0NUUF9ESVNQT1NJVElPTl9OT01FTWAuCgpUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXM6IGlzIHRoaXMgZnVuY3Rpb25hbCBhbmQgZnV6ei13b3J0aHk/IEFic29sdXRlbHksIHllcy4gTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgaW4gYXV0aGVudGljYXRpb24gYXJlIGEgbGVnaXRpbWF0ZSBhbmQgaW1wb3J0YW50IGZhaWx1cmUgc2NlbmFyaW8gdG8gdGVzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBTQ1RQIGF1dGhlbnRpY2F0aW9uLCB3aGljaCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB3ZSBzaG91bGQgZm9jdXMgb24gZm9yIGZ1enppbmcuIFdlIGhhdmUgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AgaXRzZWxmLCB3aGljaCBpcyB0aGUgaW1tZWRpYXRlIHRhcmdldC4gVGhlbiB0aGVyZSYjMzk7cyBgc2N0cF9wYWNrZXRfcGFja2AgKHdoaWNoIGlzIHN0YXRpYywgc28gbGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBpbmxpbmVkIC0gb3RoZXJ3aXNlLCBtYXliZSBza2lwIGl0LCBmb2N1c2luZyBvbiBBUEkgZW50cnlwb2ludHMgb3Igc3RhdGUgbWFjaGluZSBmdW5jdGlvbnMpLiBXZSBoYXZlIGBzY3RwX3BhY2tldF90cmFuc21pdGAsIGBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5YCAod2hpY2ggaXMgYWxzbyBzdGF0aWMpLCBhbmQgdGhlbiBhIGJ1bmNoIG9mIHN0YXRlIG1hY2hpbmUgZnVuY3Rpb25zLCBgc2N0cF9zZl9kb181XzFEX2NlYCwgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYHNjdHBfc2ZfZG9fZHVwY29va19kYCwgYW5kIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAuCgpUaGUga2V5IGVudHJ5cG9pbnRzIHRvIGluY2x1ZGUgZm9yIGZ1enppbmcgc2hvdWxkIGJlOiBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYCwgYHNjdHBfcGFja2V0X3RyYW5zbWl0YCwgYW5kIHRoZW4gdGhvc2Ugc3RhdGUgbWFjaGluZSBmdW5jdGlvbnMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gYXV0aGVudGljYXRpb246IGBzY3RwX3NmX2RvXzVfMURfY2VgLCBgc2N0cF9zZl9kb19kdXBjb29rX2FgLCBgc2N0cF9zZl9kb19kdXBjb29rX2JgLCBgc2N0cF9zZl9kb19kdXBjb29rX2RgLCBhbmQgYHNjdHBfc2ZfYXV0aGVudGljYXRlYC4KCkp1c3QgYSBxdWljayBjaGVjayBub3csIG1ha2Ugc3VyZSBTQ1RQIGlzIGV2ZW4gZW5hYmxlZC4gYElQX1NDVFBgIGluIEtjb25maWcsIGdvdCBpdC4gTGV0JiMzOTtzIHZlcmlmeSB0aGF0JiMzOTtzIGFsbCBzZXQgdXAgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TQ1RQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL0tjb25maWctNS1cbm5ldC9zY3RwL0tjb25maWc6NjptZW51Y29uZmlnIElQX1NDVFBcbm5ldC9zY3RwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBTQ1RQIFByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQwOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBTQ1RQIEF1dGhlbnRpY2F0aW9uIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIFNDVFAgYXV0aGVudGljYXRpb24sIGFuZCBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0by4gVGhpcyBpc24mIzM5O3QganVzdCBhIGdlbmVyaWMgc2VjdXJpdHkgYXNzZXNzbWVudDsgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMuIEFyZSB0aGVyZSBhbnkgU0NUUC1zcGVjaWZpYyBzZXR0aW5ncyB0aGF0IHJlbGF0ZSB0byB0aGUgYXV0aGVudGljYXRpb24gcHJvY2VzcyBpdHNlbGY/IFRoaW5ncyB0aGF0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gYSBnZW5lcmFsIHNlY3VyaXR5IHBvc3R1cmUgcmV2aWV3LiBJIG5lZWQgdG8ga25vdyBpZiBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLCBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgSSBjYW4gZXhwbG9pdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTQ1RQX0FVVEgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1OTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkRlbHZpbmcgaW50byBTeXN0ZW0gUGFyYW1ldGVycyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyBqdXN0IGxvb2tpbmcgYXQgdGhhdCBgbmV0LSZndDtzY3RwLmF1dGhfZW5hYmxlYCBzZXR0aW5nLi4uIGFuZCBhIGxpZ2h0YnVsYiBqdXN0IHdlbnQgb2ZmLiBUaGF0JiMzOTtzIG5vdCBzb21lIG9ic2N1cmUga2VybmVsIHZhcmlhYmxlLCB0aGF0JiMzOTtzIGEgKnN5c2N0bCouIE1lYW5pbmcgSSBjYW4gdHVuZSBpdCBhdCBydW50aW1lIHdpdGhvdXQgbmVlZGluZyBhIGZ1bGwgcmVib290IG9yIGV2ZW4gYSBtb2R1bGUgcmVsb2FkLiBUaGF0IGNoYW5nZXMgZXZlcnl0aGluZywgb3IgYXQgbGVhc3QgaXQgY2hhbmdlcyBteSBhcHByb2FjaCEgSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdG9nZ2xpbmcgdGhhdC4gSXMgaXQgYSBwZXJzaXN0ZW50IGNoYW5nZSwgb3IgaXMgaXQgb25seSBlZmZlY3RpdmUgdW50aWwgdGhlIG5leHQgcmVib290PyBXaGF0JiMzOTtzIHRoZSByZWNvbW1lbmRlZCB3YXkgdG8gbW9kaWZ5IGl0PyBJIHNob3VsZCBjaGVjayB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gZm9yIGBzeXNjdGxgIGFuZCBTQ1RQIGF1dGhlbnRpY2F0aW9uIHRvIGdldCBhIHByZWNpc2UgdW5kZXJzdGFuZGluZyBiZWZvcmUgbWFraW5nIGFueSBkZWNpc2lvbnMuIE5vdyBJIG5lZWQgdG8gcmV2aWV3IHdoYXQgZWZmZWN0cyB0aGlzIGlzIGludGVuZGVkIHRvIGhhdmUuIEdvb2QgdGhpbmcgSSBqdXN0IGhhZCB0aGF0IHRob3VnaHQsIGJlZm9yZSBkaXZpbmcgaW50byBzb21ldGhpbmcgZmFyIG1vcmUgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXV0aF9lbmFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvYXV0aC5jPTcyMj1pbnQgc2N0cF9hdXRoX3NldF9rZXkoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL2F1dGguYy03MzgtXHR9IGVsc2Uge1xubmV0L3NjdHAvYXV0aC5jOjczOTpcdFx0aWYgKCFlcC1cdTAwM2VhdXRoX2VuYWJsZSlcbm5ldC9zY3RwL2F1dGguYy03NDAtXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxubmV0L3NjdHAvYXV0aC5jPTc4NT1pbnQgc2N0cF9hdXRoX3NldF9hY3RpdmVfa2V5KHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbi0tXG5uZXQvc2N0cC9hdXRoLmMtNzk4LVx0fSBlbHNlIHtcbm5ldC9zY3RwL2F1dGguYzo3OTk6XHRcdGlmICghZXAtXHUwMDNlYXV0aF9lbmFibGUpXG5uZXQvc2N0cC9hdXRoLmMtODAwLVx0XHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbm5ldC9zY3RwL2F1dGguYz04Mjg9aW50IHNjdHBfYXV0aF9kZWxfa2V5X2lkKHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbi0tXG5uZXQvc2N0cC9hdXRoLmMtODQ2LVx0fSBlbHNlIHtcbm5ldC9zY3RwL2F1dGguYzo4NDc6XHRcdGlmICghZXAtXHUwMDNlYXV0aF9lbmFibGUpXG5uZXQvc2N0cC9hdXRoLmMtODQ4LVx0XHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbm5ldC9zY3RwL2F1dGguYz04NzI9aW50IHNjdHBfYXV0aF9kZWFjdF9rZXlfaWQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL2F1dGguYy04ODktXHR9IGVsc2Uge1xubmV0L3NjdHAvYXV0aC5jOjg5MDpcdFx0aWYgKCFlcC1cdTAwM2VhdXRoX2VuYWJsZSlcbm5ldC9zY3RwL2F1dGguYy04OTEtXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYz01MD1zdGF0aWMgc3RydWN0IHNjdHBfZW5kcG9pbnQgKnNjdHBfZW5kcG9pbnRfaW5pdChzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYy01Ny1cdGVwLVx1MDAzZWFzY29uZl9lbmFibGUgPSBuZXQtXHUwMDNlc2N0cC5hZGRpcF9lbmFibGU7XG5uZXQvc2N0cC9lbmRwb2ludG9sYS5jOjU4Olx0ZXAtXHUwMDNlYXV0aF9lbmFibGUgPSBuZXQtXHUwMDNlc2N0cC5hdXRoX2VuYWJsZTtcbm5ldC9zY3RwL2VuZHBvaW50b2xhLmM6NTk6XHRpZiAoZXAtXHUwMDNlYXV0aF9lbmFibGUpIHtcbm5ldC9zY3RwL2VuZHBvaW50b2xhLmMtNjAtXHRcdGlmIChzY3RwX2F1dGhfaW5pdChlcCwgZ2ZwKSlcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jPTEyODk9c3RhdGljIGludCBfX25ldF9pbml0IHNjdHBfZGVmYXVsdHNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMzE0LVx0LyogV2hldGhlciBjb29raWUgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZCgxKSBvciBub3QoMCkgKi9cbm5ldC9zY3RwL3Byb3RvY29sLmM6MTMxNTpcdG5ldC1cdTAwM2VzY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSA9XG5uZXQvc2N0cC9wcm90b2NvbC5jLTEzMTYtXHRcdCFJU19FTkFCTEVEKENPTkZJR19TQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfTk9ORSk7XG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMzYxLVx0LyogRGlzYWJsZSBBVVRIIGJ5IGRlZmF1bHQuICovXG5uZXQvc2N0cC9wcm90b2NvbC5jOjEzNjI6XHRuZXQtXHUwMDNlc2N0cC5hdXRoX2VuYWJsZSA9IDA7XG5uZXQvc2N0cC9wcm90b2NvbC5jLTEzNjMtXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTE5OD1zdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2luaXQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI3Mi1cdC8qIEFjY291bnQgZm9yIEFVVEggcmVsYXRlZCBwYXJhbWV0ZXJzICovXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjczOlx0aWYgKGVwLVx1MDAzZWF1dGhfZW5hYmxlKSB7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjc0LVx0XHQvKiBBZGQgcmFuZG9tIHBhcmFtZXRlciBsZW5ndGgqL1xuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0zNTUtXHQvKiBBZGQgU0NUUC1BVVRIIGNodW5rcyB0byB0aGUgcGFyYW1ldGVyIGxpc3QgKi9cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzozNTY6XHRpZiAoZXAtXHUwMDNlYXV0aF9lbmFibGUpIHtcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0zNTctXHRcdHNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYXNvYy1cdTAwM2VjLmF1dGhfcmFuZG9tKSxcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MTY0NT1zdGF0aWMgc3RydWN0IHNjdHBfY29va2llX3BhcmFtICpzY3RwX3BhY2tfY29va2llKFxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0xNzExLVx0LyogU2lnbiB0aGUgY29va2llLCBpZiBjb29raWUgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZC4gKi9cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoxNzEyOlx0aWYgKHNjdHBfc2soZXAtXHUwMDNlYmFzZS5zayktXHUwMDNlY29va2llX2F1dGhfZW5hYmxlKSB7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMTcxMy1cdFx0c3RhdGljX2Fzc2VydChzaXplb2YoY29va2llLVx1MDAzZW1hYykgPT0gU0hBMjU2X0RJR0VTVF9TSVpFKTtcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MTcyMj1zdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqc2N0cF91bnBhY2tfY29va2llKFxuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0xNzc0LVx0LyogVmVyaWZ5IHRoZSBjb29raWUmIzM5O3MgTUFDLCBpZiBjb29raWUgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZC4gKi9cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoxNzc1Olx0aWYgKHNjdHBfc2soZXAtXHUwMDNlYmFzZS5zayktXHUwMDNlY29va2llX2F1dGhfZW5hYmxlKSB7XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMTc3Ni1cdFx0dTggbWFjW1NIQTI1Nl9ESUdFU1RfU0laRV07XG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTIwMzE9c3RhdGljIHZvaWQgc2N0cF9wcm9jZXNzX2V4dF9wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjA1MC1cdFx0XHQgKi9cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMDUxOlx0XHRcdGlmIChhc29jLVx1MDAzZWVwLVx1MDAzZWF1dGhfZW5hYmxlKVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIwNTItXHRcdFx0XHRhc29jLVx1MDAzZXBlZXIuYXV0aF9jYXBhYmxlID0gMTtcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MjE0Nz1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3ZlcmlmeV9wYXJhbShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIyMTEtXHRjYXNlIFNDVFBfUEFSQU1fUkFORE9NOlxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjIyMTI6XHRcdGlmICghZXAtXHUwMDNlYXV0aF9lbmFibGUpXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjIxMy1cdFx0XHRnb3RvIHVuaGFuZGxlZDtcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjIyOC1cdGNhc2UgU0NUUF9QQVJBTV9DSFVOS1M6XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjIyOTpcdFx0aWYgKCFlcC1cdTAwM2VhdXRoX2VuYWJsZSlcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMjMwLVx0XHRcdGdvdG8gdW5oYW5kbGVkO1xuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMjQ0LVx0Y2FzZSBTQ1RQX1BBUkFNX0hNQUNfQUxHTzpcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMjQ1Olx0XHRpZiAoIWVwLVx1MDAzZWF1dGhfZW5hYmxlKVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIyNDYtXHRcdFx0Z290byB1bmhhbmRsZWQ7XG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTI1MzI9c3RhdGljIGludCBzY3RwX3Byb2Nlc3NfcGFyYW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4tLVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI2OTAtXHRjYXNlIFNDVFBfUEFSQU1fUkFORE9NOlxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjI2OTE6XHRcdGlmICghZXAtXHUwMDNlYXV0aF9lbmFibGUpXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjY5Mi1cdFx0XHRnb3RvIGZhbGxfdGhyb3VnaDtcbi0tXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjcwNC1cdGNhc2UgU0NUUF9QQVJBTV9ITUFDX0FMR086XG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjcwNTpcdFx0aWYgKCFlcC1cdTAwM2VhdXRoX2VuYWJsZSlcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yNzA2LVx0XHRcdGdvdG8gZmFsbF90aHJvdWdoO1xuLS1cbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yNzIxLVx0Y2FzZSBTQ1RQX1BBUkFNX0NIVU5LUzpcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyNzIyOlx0XHRpZiAoIWVwLVx1MDAzZWF1dGhfZW5hYmxlKVxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI3MjMtXHRcdFx0Z290byBmYWxsX3Rocm91Z2g7XG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NjQwPXN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTY1OS1cdC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFuZCB0aGUgcGVlciBhcmUgQVVUSCBjYXBhYmxlICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo2NjA6XHRpZiAoIW5ldC1cdTAwM2VzY3RwLmF1dGhfZW5hYmxlIHx8ICFhc29jLVx1MDAzZXBlZXIuYXV0aF9jYXBhYmxlKVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNjYxLVx0XHRyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NJRztcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz03MDc9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xRF9jZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNzk1LVx0Y2lkID0gcGVlcl9pbml0LVx1MDAzZWNodW5rX2hkci50eXBlO1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6Nzk2Olx0aWYgKCFzY3RwX3NrKHNrKS1cdTAwM2Vjb29raWVfYXV0aF9lbmFibGUgXHUwMDI2XHUwMDI2XG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy03OTctXHQgICAgIXNjdHBfdmVyaWZ5X2luaXQobmV0LCBlcCwgYXNvYywgY2lkLCBwZWVyX2luaXQsIGNodW5rLFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTIyNDY9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayhcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzMwLVx0XHRjaWQgPSBwZWVyX2luaXQtXHUwMDNlY2h1bmtfaGRyLnR5cGU7XG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMzMxOlx0XHRpZiAoIXNjdHBfc2soZXAtXHUwMDNlYmFzZS5zayktXHUwMDNlY29va2llX2F1dGhfZW5hYmxlIFx1MDAyNlx1MDAyNlxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjMzMi1cdFx0ICAgICFzY3RwX3ZlcmlmeV9pbml0KG5ldCwgZXAsIGFzb2MsIGNpZCwgcGVlcl9pbml0LCBjaHVuayxcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz0zNTc5PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2F1dGhfY2h1bmsoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTM1ODQtXG5uZXQvc2N0cC9zb2NrZXQuYzozNTg1Olx0aWYgKCFlcC1cdTAwM2VhdXRoX2VuYWJsZSlcbm5ldC9zY3RwL3NvY2tldC5jLTM1ODYtXHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTM2MDk9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtMzYxNS1cbm5ldC9zY3RwL3NvY2tldC5jOjM2MTY6XHRpZiAoIWVwLVx1MDAzZWF1dGhfZW5hYmxlKVxubmV0L3NjdHAvc29ja2V0LmMtMzYxNy1cdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxubmV0L3NjdHAvc29ja2V0LmM9NDM0MT1zdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hc2NvbmZfc3VwcG9ydGVkKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy00MzU5LVxubmV0L3NjdHAvc29ja2V0LmM6NDM2MDpcdGlmIChlcC1cdTAwM2Vhc2NvbmZfZW5hYmxlIFx1MDAyNlx1MDAyNiBlcC1cdTAwM2VhdXRoX2VuYWJsZSkge1xubmV0L3NjdHAvc29ja2V0LmMtNDM2MS1cdFx0c2N0cF9hdXRoX2VwX2FkZF9jaHVua2lkKGVwLCBTQ1RQX0NJRF9BU0NPTkYpO1xuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTQzNzE9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0aF9zdXBwb3J0ZWQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTQzOTctXG5uZXQvc2N0cC9zb2NrZXQuYzo0Mzk4Olx0ZXAtXHUwMDNlYXV0aF9lbmFibGUgPSAhIXBhcmFtcy1cdTAwM2Vhc3NvY192YWx1ZTtcbm5ldC9zY3RwL3NvY2tldC5jLTQzOTktXHRyZXR2YWwgPSAwO1xuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTUwMjE9c3RhdGljIGludCBzY3RwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNTA1NS1cbm5ldC9zY3RwL3NvY2tldC5jOjUwNTY6XHRzcC1cdTAwM2Vjb29raWVfYXV0aF9lbmFibGUgPSBuZXQtXHUwMDNlc2N0cC5jb29raWVfYXV0aF9lbmFibGU7XG5uZXQvc2N0cC9zb2NrZXQuYy01MDU3LVxuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTY5NjA9c3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNjk2OS1cbm5ldC9zY3RwL3NvY2tldC5jOjY5NzA6XHRpZiAoIWVwLVx1MDAzZWF1dGhfZW5hYmxlKVxubmV0L3NjdHAvc29ja2V0LmMtNjk3MS1cdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxubmV0L3NjdHAvc29ja2V0LmM9Njk5Nj1zdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9hY3RpdmVfa2V5KHN0cnVjdCBzb2NrICpzaywgaW50IGxlbixcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy03MDE4LVx0fSBlbHNlIHtcbm5ldC9zY3RwL3NvY2tldC5jOjcwMTk6XHRcdGlmICghZXAtXHUwMDNlYXV0aF9lbmFibGUpXG5uZXQvc2N0cC9zb2NrZXQuYy03MDIwLVx0XHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbm5ldC9zY3RwL3NvY2tldC5jPTcwNzY9c3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfbG9jYWxfYXV0aF9jaHVua3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTcxMDMtXHR9IGVsc2Uge1xubmV0L3NjdHAvc29ja2V0LmM6NzEwNDpcdFx0aWYgKCFlcC1cdTAwM2VhdXRoX2VuYWJsZSlcbm5ldC9zY3RwL3NvY2tldC5jLTcxMDUtXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxubmV0L3NjdHAvc29ja2V0LmM9Nzg5NT1zdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9hdXRoX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNzkxOS1cdHBhcmFtcy5hc3NvY192YWx1ZSA9IGFzb2MgPyBhc29jLVx1MDAzZXBlZXIuYXV0aF9jYXBhYmxlXG5uZXQvc2N0cC9zb2NrZXQuYzo3OTIwOlx0XHRcdFx0ICA6IHNjdHBfc2soc2spLVx1MDAzZWVwLVx1MDAzZWF1dGhfZW5hYmxlO1xubmV0L3NjdHAvc29ja2V0LmMtNzkyMS1cbi0tXG5uZXQvc2N0cC9zeXNjdGwuYz05NT1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX25ldF90YWJsZVtdID0ge1xuLS1cbm5ldC9zY3RwL3N5c2N0bC5jLTE3Ni1cdFx0LnByb2NuYW1lXHQ9IFwmIzM0O2Nvb2tpZV9obWFjX2FsZ1wmIzM0Oyxcbm5ldC9zY3RwL3N5c2N0bC5jOjE3NzpcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5zY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSxcbm5ldC9zY3RwL3N5c2N0bC5jLTE3OC1cdFx0Lm1heGxlblx0XHQ9IDgsXG4tLVxubmV0L3NjdHAvc3lzY3RsLmMtMjY0LVx0e1xubmV0L3NjdHAvc3lzY3RsLmM6MjY1Olx0XHQucHJvY25hbWVcdD0gXCYjMzQ7YWRkaXBfbm9hdXRoX2VuYWJsZVwmIzM0Oyxcbm5ldC9zY3RwL3N5c2N0bC5jLTI2Ni1cdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5zY3RwLmFkZGlwX25vYXV0aCxcbi0tXG5uZXQvc2N0cC9zeXNjdGwuYy0yODUtXHR7XG5uZXQvc2N0cC9zeXNjdGwuYzoyODY6XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDthdXRoX2VuYWJsZVwmIzM0Oyxcbm5ldC9zY3RwL3N5c2N0bC5jOjI4NzpcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5zY3RwLmF1dGhfZW5hYmxlLFxubmV0L3NjdHAvc3lzY3RsLmMtMjg4LVx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG4tLVxubmV0L3NjdHAvc3lzY3RsLmM9Mzg3PXN0YXRpYyBpbnQgcHJvY19zY3RwX2RvX2htYWNfYWxnKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuLS1cbm5ldC9zY3RwL3N5c2N0bC5jLTM5MC1cdHN0cnVjdCBuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZihjdGwtXHUwMDNlZGF0YSwgc3RydWN0IG5ldCxcbm5ldC9zY3RwL3N5c2N0bC5jOjM5MTpcdFx0XHRcdCAgICAgICBzY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSk7XG5uZXQvc2N0cC9zeXNjdGwuYy0zOTItXHRzdHJ1Y3QgY3RsX3RhYmxlIHRibDtcbi0tXG5uZXQvc2N0cC9zeXNjdGwuYy00MDQtXHRcdGlmICghc3RyY21wKHRtcCwgXCYjMzQ7c2hhMjU2XCYjMzQ7KSkge1xubmV0L3NjdHAvc3lzY3RsLmM6NDA1Olx0XHRcdG5ldC1cdTAwM2VzY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSA9IDE7XG5uZXQvc2N0cC9zeXNjdGwuYy00MDYtXHRcdFx0cmV0dXJuIDA7XG4tLVxubmV0L3NjdHAvc3lzY3RsLmMtNDA4LVx0XHRpZiAoIXN0cmNtcCh0bXAsIFwmIzM0O25vbmVcJiMzNDspKSB7XG5uZXQvc2N0cC9zeXNjdGwuYzo0MDk6XHRcdFx0bmV0LVx1MDAzZXNjdHAuY29va2llX2F1dGhfZW5hYmxlID0gMDtcbm5ldC9zY3RwL3N5c2N0bC5jLTQxMC1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvc2N0cC9zeXNjdGwuYy00MTMtXHR9XG5uZXQvc2N0cC9zeXNjdGwuYzo0MTQ6XHRpZiAobmV0LVx1MDAzZXNjdHAuY29va2llX2F1dGhfZW5hYmxlKVxubmV0L3NjdHAvc3lzY3RsLmMtNDE1LVx0XHR0YmwuZGF0YSA9IChjaGFyICopXCYjMzQ7c2hhMjU2XCYjMzQ7O1xuLS1cbm5ldC9zY3RwL3N5c2N0bC5jPTQ4OD1zdGF0aWMgaW50IHByb2Nfc2N0cF9kb19hdXRoKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuLS1cbm5ldC9zY3RwL3N5c2N0bC5jLTQ5MC17XG5uZXQvc2N0cC9zeXNjdGwuYzo0OTE6XHRzdHJ1Y3QgbmV0ICpuZXQgPSBjb250YWluZXJfb2YoY3RsLVx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsIHNjdHAuYXV0aF9lbmFibGUpO1xubmV0L3NjdHAvc3lzY3RsLmMtNDkyLVx0c3RydWN0IGN0bF90YWJsZSB0Ymw7XG4tLVxubmV0L3NjdHAvc3lzY3RsLmMtNTAwLVx0ZWxzZVxubmV0L3NjdHAvc3lzY3RsLmM6NTAxOlx0XHR0YmwuZGF0YSA9IFx1MDAyNm5ldC1cdTAwM2VzY3RwLmF1dGhfZW5hYmxlO1xubmV0L3NjdHAvc3lzY3RsLmMtNTAyLVxuLS1cbm5ldC9zY3RwL3N5c2N0bC5jLTUwNi1cbm5ldC9zY3RwL3N5c2N0bC5jOjUwNzpcdFx0bmV0LVx1MDAzZXNjdHAuYXV0aF9lbmFibGUgPSBuZXdfdmFsdWU7XG5uZXQvc2N0cC9zeXNjdGwuYy01MDgtXHRcdC8qIFVwZGF0ZSB0aGUgdmFsdWUgaW4gdGhlIGNvbnRyb2wgc29ja2V0ICovXG5uZXQvc2N0cC9zeXNjdGwuYy01MDktXHRcdGxvY2tfc29jayhzayk7XG5uZXQvc2N0cC9zeXNjdGwuYzo1MTA6XHRcdHNjdHBfc2soc2spLVx1MDAzZWVwLVx1MDAzZWF1dGhfZW5hYmxlID0gbmV3X3ZhbHVlO1xubmV0L3NjdHAvc3lzY3RsLmMtNTExLVx0XHRyZWxlYXNlX3NvY2soc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDY3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgU0NUUCBDb25maWd1cmF0aW9uIExhYnlyaW50aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYXV0aF9lbmFibGVgIHRoaW5nLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBhIGBzeXNjdGxgLCBub3QgYSBLY29uZmlnIG9wdGlvbi4gSW50ZXJlc3RpbmcuIEl0JiMzOTtzIG1ha2luZyBtZSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcGF0aHMuIFRoZSBtYWluIFNDVFAgZmxhZywgYElQX1NDVFBgLCB0aGF0JiMzOTtzIEtjb25maWcuIE5vdyBJJiMzOTttIHN0YXJ0aW5nIHRvIHdvbmRlciBpZiB0aGVyZSBhcmUgKm90aGVyKiBjb25maWd1cmF0aW9ucyBidXJpZWQgaW4gaGVyZS4gSXQgYWx3YXlzIHBheXMgdG8gYmUgdGhvcm91Z2guIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvc2N0cC9LY29uZmlnYCBzcGVjaWZpY2FsbHkgYW5kIHNlZSBpZiBJIGNhbiBmaW5kIGBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfTk9ORWAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSByZWxhdGVkLCBwb3RlbnRpYWxseSBpbXBhY3RmdWwsIHNldHRpbmcuIEdvdHRhIG1hcCBvdXQgdGhlIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19OT05FJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL0tjb25maWc9NjI9Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEEyNTZcbi0tXG5uZXQvc2N0cC9LY29uZmlnLTY0LVxubmV0L3NjdHAvS2NvbmZpZzo2NTpjb25maWcgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX05PTkVcbm5ldC9zY3RwL0tjb25maWctNjYtXHRib29sIFwmIzM0O05vbmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBTQ1RQIEtjb25maWcgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1RpbWUgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSBlbnRpcmUgYG5ldC9zY3RwL0tjb25maWdgIGZpbGUuJiMzNDsgR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBuZXR3b3JraW5nIGFuZCB0aGUgTGludXgga2VybmVsLCB0aGlzIGBLY29uZmlnYCBmaWxlIGlzIGdvaW5nIHRvIGJlIHRoZSBjZW50cmFsIGNvbnRyb2wgcG9pbnQgZm9yIGNvbmZpZ3VyaW5nIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUCkgZmVhdHVyZXMgYW5kIG1vZHVsZXMgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGZvciBzZXZlcmFsIGtleSB0aGluZ3MuIEkgd2FudCB0byBzZWUgaG93IHRoZSB2YXJpb3VzIFNDVFAgb3B0aW9ucyBhcmUgbGFpZCBvdXQgaGllcmFyY2hpY2FsbHksIHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVtLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIG90aGVyIG5ldHdvcmtpbmcgc3Vic3lzdGVtcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgaXQmIzM5O3Mgc3RydWN0dXJlZCwgaXRzIG9yZ2FuaXphdGlvbiwgdGhlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIHN5bWJvbHMsIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGFzc29jaWF0ZWQgaGVscCB0ZXh0LiBJIGFudGljaXBhdGUgZmluZGluZyBjb25kaXRpb25hbHMgYmFzZWQgb24gYXJjaGl0ZWN0dXJlLCBrZXJuZWwgdmVyc2lvbiwgb3Igb3RoZXIgZGVwZW5kZW5jaWVzIGxpa2Ugd2hldGhlciBvdGhlciBuZXR3b3JraW5nIHByb3RvY29scyBhcmUgZW5hYmxlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IGhvdyBvcHRpb25zIGZvciBidW5kbGVkIHN1cHBvcnQgc3VjaCBhcyBNM1VBIG9yIG92ZXIgSVBzZWMgYXJlIGhhbmRsZWQsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGZlYXR1cmVzIHN1Y2ggYXMgbXVsdGlwbGUgc3RyZWFtcywgYW5kIGhvdyB0aGVzZSBzZXR0aW5ncyBhcmUgZXhwb3NlZCBpbiB0aGUgYnVpbGQgc3lzdGVtLiBUaGlzIGBLY29uZmlnYCBmaWxlIHdpbGwgcHJvdmlkZSB0aGUgdWx0aW1hdGUgbWFwIG9mIGhvdyBTQ1RQIGlzIGVuYWJsZWQsIGN1c3RvbWl6ZWQsIGFuZCBpbnRlZ3JhdGVkIGludG8gYSBzcGVjaWZpYyBMaW51eCBrZXJuZWwgYnVpbGQuIFVuZGVyc3RhbmRpbmcgdGhpcyBmaWxlIGlzIHBhcmFtb3VudCB0byBhbnkgZWZmZWN0aXZlIGtlcm5lbC1sZXZlbCBTQ1RQIGRldmVsb3BtZW50IGFuZCB0dW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjdHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBTQ1RQIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBJUF9TQ1RQXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtUaGUgU0NUUCBQcm90b2NvbFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAgMTE6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gIDEyOlx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxMzpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbFxuICAxNjpcdFxuICAxNzpcdFx0ICBGcm9tIFJGQyAyOTYwIFx1MDAzY2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI5NjAudHh0XHUwMDNlLlxuICAxODpcdFxuICAxOTpcdFx0ICBcJiMzNDtTQ1RQIGlzIGEgcmVsaWFibGUgdHJhbnNwb3J0IHByb3RvY29sIG9wZXJhdGluZyBvbiB0b3Agb2YgYVxuICAyMDpcdFx0ICBjb25uZWN0aW9ubGVzcyBwYWNrZXQgbmV0d29yayBzdWNoIGFzIElQLiAgSXQgb2ZmZXJzIHRoZSBmb2xsb3dpbmdcbiAgMjE6XHRcdCAgc2VydmljZXMgdG8gaXRzIHVzZXJzOlxuICAyMjpcdFxuICAyMzpcdFx0ICAtLSBhY2tub3dsZWRnZWQgZXJyb3ItZnJlZSBub24tZHVwbGljYXRlZCB0cmFuc2ZlciBvZiB1c2VyIGRhdGEsXG4gIDI0Olx0XHQgIC0tIGRhdGEgZnJhZ21lbnRhdGlvbiB0byBjb25mb3JtIHRvIGRpc2NvdmVyZWQgcGF0aCBNVFUgc2l6ZSxcbiAgMjU6XHRcdCAgLS0gc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIHVzZXIgbWVzc2FnZXMgd2l0aGluIG11bHRpcGxlIHN0cmVhbXMsXG4gIDI2Olx0XHQgIHdpdGggYW4gb3B0aW9uIGZvciBvcmRlci1vZi1hcnJpdmFsIGRlbGl2ZXJ5IG9mIGluZGl2aWR1YWwgdXNlclxuICAyNzpcdFx0ICBtZXNzYWdlcyxcbiAgMjg6XHRcdCAgLS0gb3B0aW9uYWwgYnVuZGxpbmcgb2YgbXVsdGlwbGUgdXNlciBtZXNzYWdlcyBpbnRvIGEgc2luZ2xlIFNDVFBcbiAgMjk6XHRcdCAgcGFja2V0LCBhbmRcbiAgMzA6XHRcdCAgLS0gbmV0d29yay1sZXZlbCBmYXVsdCB0b2xlcmFuY2UgdGhyb3VnaCBzdXBwb3J0aW5nIG9mIG11bHRpLVxuICAzMTpcdFx0ICBob21pbmcgYXQgZWl0aGVyIG9yIGJvdGggZW5kcyBvZiBhbiBhc3NvY2lhdGlvbi5cJiMzNDtcbiAgMzI6XHRcbiAgMzM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIHByb3RvY29sIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAzNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2N0cC4gRGVidWcgbWVzc2FnZXMgYXJlIGhhbmRsZWQgYnkgdGhlXG4gIDM1Olx0XHQgIGtlcm5lbCYjMzk7cyBkeW5hbWljIGRlYnVnZ2luZyBmcmFtZXdvcmsuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cbiAgMzg6XHRcbiAgMzk6XHRpZiBJUF9TQ1RQXG4gIDQwOlx0XG4gIDQxOlx0Y29uZmlnIFNDVFBfREJHX09CSkNOVFxuICA0MjpcdFx0Ym9vbCBcJiMzNDtTQ1RQOiBEZWJ1ZyBvYmplY3QgY291bnRzXCYjMzQ7XG4gIDQzOlx0XHRkZXBlbmRzIG9uIFBST0NfRlNcbiAgNDQ6XHRcdGhlbHBcbiAgNDU6XHRcdCAgSWYgeW91IHNheSBZLCB0aGlzIHdpbGwgZW5hYmxlIGRlYnVnZ2luZyBzdXBwb3J0IGZvciBjb3VudGluZyB0aGVcbiAgNDY6XHRcdCAgdHlwZSBvZiBvYmplY3RzIHRoYXQgYXJlIGN1cnJlbnRseSBhbGxvY2F0ZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3JcbiAgNDc6XHRcdCAgaWRlbnRpZnlpbmcgbWVtb3J5IGxlYWtzLiBUaGlzIGRlYnVnIGluZm9ybWF0aW9uIGNhbiBiZSB2aWV3ZWQgYnlcbiAgNDg6XHRcdCAgJiMzOTtjYXQgL3Byb2MvbmV0L3NjdHAvc2N0cF9kYmdfb2JqY250JiMzOTtcbiAgNDk6XHRcbiAgNTA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTlxuICA1MTpcdFxuICA1MjpcdGNob2ljZVxuICA1MzpcdFx0cHJvbXB0IFwmIzM0O0RlZmF1bHQgU0NUUCBjb29raWUgYXV0aGVudGljYXRpb24gbWV0aG9kXCYjMzQ7XG4gIDU0Olx0XHRkZWZhdWx0IFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEEyNTZcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgZGVmYXVsdCBTQ1RQIGNvb2tpZSBhdXRoZW50aWNhdGlvbiBtZXRob2QsIGZvclxuICA1NzpcdFx0ICB3aGVuIGEgbWV0aG9kIGhhc24mIzM5O3QgYmVlbiBleHBsaWNpdGx5IHNlbGVjdGVkIHZpYSB0aGVcbiAgNTg6XHRcdCAgbmV0LnNjdHAuY29va2llX2htYWNfYWxnIHN5c2N0bC5cbiAgNTk6XHRcbiAgNjA6XHRcdCAgSWYgdW5zdXJlLCBjaG9vc2UgdGhlIGRlZmF1bHQgKEhNQUMtU0hBMjU2KS5cbiAgNjE6XHRcbiAgNjI6XHRjb25maWcgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX1NIQTI1NlxuICA2MzpcdFx0Ym9vbCBcJiMzNDtITUFDLVNIQTI1NlwmIzM0O1xuICA2NDpcdFxuICA2NTpcdGNvbmZpZyBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfTk9ORVxuICA2NjpcdFx0Ym9vbCBcJiMzNDtOb25lXCYjMzQ7XG4gIDY3Olx0XG4gIDY4Olx0ZW5kY2hvaWNlXG4gIDY5Olx0XG4gIDcwOlx0Y29uZmlnIElORVRfU0NUUF9ESUFHXG4gIDcxOlx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICA3MjpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICA3MzpcdFxuICA3NDpcdFxuICA3NTpcdGVuZGlmICMgSVBfU0NUUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE4MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTQ1RQIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGl0IGxvb2tzIGxpa2UgYElQX1NDVFBgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlIG5lZWQgdG8gY29uc2lkZXIgaGVyZS4gTm93LCBsZXQmIzM5O3MgY2FyZWZ1bGx5IHJldmlldyB0aGUgZm9jdXMgc3ltYm9scyBpZGVudGlmaWVkLiBJJiMzOTttIHNlZWluZzoKCiogICBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYAoqICAgYHNjdHBfcGFja2V0X3RyYW5zbWl0YAoqICAgYHNjdHBfc2ZfZG9fNV8xRF9jZWAKKiAgIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAKKiAgIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAKKiAgIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAKKiAgIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAKClRoZXNlIGFsbCBsb29rIHJlbGV2YW50LCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmUtZXZhbHVhdGUgYHNjdHBfcGFja2V0X3RyYW5zbWl0YC4gSXQgc2VlbWVkIGEgYml0IGJyb2FkIGF0IGZpcnN0LCBidXQgcmVtZW1iZXJpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGZsb3csIHRoZSBhY3R1YWwgZXJyb3IgaGFuZGxpbmcgcmVzaWRlcyB3aXRoaW4gYSBzdGF0aWMgZnVuY3Rpb24gYHNjdHBfcGFja2V0X3BhY2tgIGFuZCwgY3JpdGljYWxseSwgYHNjdHBfcGFja2V0X3RyYW5zbWl0YCBjYWxscyB0aGlzIGZ1bmN0aW9uLiBTbywgSSB3aWxsIGluY2x1ZGUgaXQuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGUgYXV0aGVudGljYXRpb24tcmVsYXRlZCBzeW1ib2xzIGFyZSBhY3R1YWxseSBzdGF0aWMgYXMgSSBpbml0aWFsbHkgdGhvdWdodC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBzb21ldGhpbmcuCgpPa2F5LCBjaGVja2luZyBgbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNgLCBgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeWAgKmlzKiBpbmRlZWQgc3RhdGljLiBJdHMgY2FsbGVycyBhcmUgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAsIGFuZCBgc2N0cF9zZl9kb19kdXBjb29rX2RgLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4KCk5vdyB0byByZS12ZXJpZnkgYHNjdHBfc2ZfYXV0aGVudGljYXRlYC4gWWVzLCBpdCYjMzk7cyBhbHNvIHN0YXRpYywgaW4gYG5ldC9zY3RwL3NtX3N0YXRlZnVucy5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjdHBfc2ZfYXV0aGVudGljYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTE0Mj1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfdmlvbGF0aW9uX2NodW5rKFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTE0OS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjE1MDpzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTE1MS1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NjQwPXN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTY3Mi1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjY3MzpcdHJldHVybiBzY3RwX3NmX2F1dGhlbnRpY2F0ZShhc29jLCBcdTAwMjZhdXRoKTtcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTY3NC19XG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDMzNT1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9lYXRfZndkX3Rzbl9mYXN0KFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ0MjItICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0NDIzOnN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfc2ZfYXV0aGVudGljYXRlKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDQyNC1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDUwMT1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9lYXRfYXV0aChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDUyNy1cdGF1dGhfaGRyID0gKHN0cnVjdCBzY3RwX2F1dGhoZHIgKiljaHVuay1cdTAwM2Vza2ItXHUwMDNlZGF0YTtcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQ1Mjg6XHRlcnJvciA9IHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIGNodW5rKTtcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ1MjktXHRzd2l0Y2ggKGVycm9yKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA3OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTYyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiAqKkFuYWx5emluZyB0aGUgYHNjdHBfc2ZfYXV0aGVudGljYXRlYCBGdW5jdGlvbioqCgpSaWdodCwgc28gYHNjdHBfc2ZfYXV0aGVudGljYXRlYCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8gaXMgY2FsbGluZyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgc2N0cF9zZl9lYXRfYXV0aGAsIGBzY3RwX3NmX2RvXzVfMURfY2VgLCBgc2N0cF9zZl9kb19kdXBjb29rX2FgLCBgc2N0cF9zZl9kb19kdXBjb29rX2JgLCBhbmQgYHNjdHBfc2ZfZG9fZHVwY29va19kYCBhcmUgYWxsIGNhbGxpbmcgaXQuCgpIYW5nIG9uIGEgc2Vjb25k4oCmIEkgY291bGQgaGF2ZSBzd29ybiB0aGF0IGBzY3RwX3NmX2VhdF9hdXRoYCB3YXMgc3RhdGljIHRvby4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYmVjYXVzZSBteSBtZW1vcnkgbWlnaHQgbm90IGJlIHRoZSBiZXN0IGFuZCB0aGlzIGlzIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9zZl9lYXRfYXV0aCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00NDIzPXN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfc2ZfYXV0aGVudGljYXRlKFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ1MDAtXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0NTAxOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2VhdF9hdXRoKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ1MDItXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRldGFibGUuYz00OTg9cmVjb25mX2NodW5rX2V2ZW50X3RhYmxlW1NDVFBfTlVNX1JFQ09ORl9DSFVOS19UWVBFU11bU0NUUF9TVEFURV9OVU1fU1RBVEVTXSA9IHtcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMtNTA3LVx0LyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmM6NTA4Olx0VFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lYXRfYXV0aCksIFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMtNTA5LVx0LyogU0NUUF9TVEFURV9FU1RBQkxJU0hFRCAqLyBcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jOjUxMDpcdFRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X2F1dGgpLCBcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jLTUxMS1cdC8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jOjUxMjpcdFRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X2F1dGgpLCBcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jLTUxMy1cdC8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jOjUxNDpcdFRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X2F1dGgpLCBcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jLTUxNS1cdC8qIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgKi8gXFxcbm5ldC9zY3RwL3NtX3N0YXRldGFibGUuYzo1MTY6XHRUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2VhdF9hdXRoKSwgXFxcbm5ldC9zY3RwL3NtX3N0YXRldGFibGUuYy01MTctXHQvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmM6NTE4Olx0VFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lYXRfYXV0aCksIFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMtNTE5LX0gLyogVFlQRV9TQ1RQX0FVVEggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0NUUCBGdW5jdGlvbiBBdHRyaWJ1dGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBvdmVyIHRoaXMgU0NUUCBjb2RlLCBzcGVjaWZpY2FsbHkgYXQgdGhlc2UgZnVuY3Rpb25zLiBJdCYjMzk7cyBnb29kIHRvIGNsYXJpZnkgdGhlc2UgZGV0YWlscy4gSSBjYW4gc2VlIHRoYXQgYHNjdHBfc2ZfZWF0X2F1dGhgIGlzIGRlZmluaXRlbHkgbm90IGRlY2xhcmVkIGFzIHN0YXRpYyDigJMgdGhhdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gQW5kIEkgY29uZmlybSB0aGF0IGBzY3RwX3NmX2RvXzVfMURfY2VgIGlzIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdGVkLiBOb3csIEkgaGF2ZSBhIGZlZWxpbmcgYWJvdXQgdGhlIGBzY3RwX3NmX2RvX2R1cGNvb2tfKmAgZmFtaWx5LiBMZXQmIzM5O3Mgc2VlLi4uIGFyZSBgc2N0cF9zZl9kb19kdXBjb29rX2FgLCBgc2N0cF9zZl9kb19kdXBjb29rX2JgLCBhbmQgYHNjdHBfc2ZfZG9fZHVwY29va19kYCBkZWNsYXJlZCBzdGF0aWM/IEdvdHRhIGRvdWJsZSBjaGVjayB0aG9zZSB0byBiZSBzdXJlLCBhbmQgSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCBpbiBteSB3b3JraW5nIGRvY3VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX3NmX2RvX2R1cGNvb2tfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTE4NjA9c3RhdGljIGludCBzY3RwX3NmX2RvX2Fzc29jX3VwZGF0ZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xODg4LSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MTg4OTpzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19hKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTg5MC1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIwMTYtLyogVGhpcyBjYXNlIHJlcHJlc2VudHMgYW4gaW5pdGlhbGl6YXRpb24gY29sbGlzaW9uLiAgKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIwMTc6c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYihcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIwMTgtXHRcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMTA1LS8qIFRoaXMgY2FzZSByZXByZXNlbnRzIGFuIGluaXRpYWxpemF0aW9uIGNvbGxpc2lvbi4gICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMTA2OnN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2MoXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMTA3LVx0XHRcdFx0XHRzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjEyOC0vKiBUaGlzIGNhc2UgcmVwcmVzZW50cyBhbiBpbml0aWFsaXphdGlvbiBjb2xsaXNpb24uICAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MjEyOTpzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19kKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjEzMC1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTIyNDY9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayhcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzU0LVx0Y2FzZSAmIzM5O0EmIzM5OzogLyogQXNzb2NpYXRpb24gcmVzdGFydC4gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIzNTU6XHRcdHJldHZhbCA9IHNjdHBfc2ZfZG9fZHVwY29va19hKG5ldCwgZXAsIGFzb2MsIGNodW5rLCBjb21tYW5kcyxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNTYtXHRcdFx0XHRcdCAgICAgIG5ld19hc29jKTtcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzU5LVx0Y2FzZSAmIzM5O0ImIzM5OzogLyogQ29sbGlzaW9uIGNhc2UgQi4gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIzNjA6XHRcdHJldHZhbCA9IHNjdHBfc2ZfZG9fZHVwY29va19iKG5ldCwgZXAsIGFzb2MsIGNodW5rLCBjb21tYW5kcyxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNjEtXHRcdFx0XHRcdCAgICAgIG5ld19hc29jKTtcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzY0LVx0Y2FzZSAmIzM5O0MmIzM5OzogLyogQ29sbGlzaW9uIGNhc2UgQy4gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIzNjU6XHRcdHJldHZhbCA9IHNjdHBfc2ZfZG9fZHVwY29va19jKG5ldCwgZXAsIGFzb2MsIGNodW5rLCBjb21tYW5kcyxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNjYtXHRcdFx0XHRcdCAgICAgIG5ld19hc29jKTtcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzY5LVx0Y2FzZSAmIzM5O0QmIzM5OzogLyogQ29sbGlzaW9uIGNhc2UgRC4gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIzNzA6XHRcdHJldHZhbCA9IHNjdHBfc2ZfZG9fZHVwY29va19kKG5ldCwgZXAsIGFzb2MsIGNodW5rLCBjb21tYW5kcyxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNzEtXHRcdFx0XHRcdCAgICAgIG5ld19hc29jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBTdGF0aWMgRnVuY3Rpb25zKioKCkFscmlnaHQsIHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBleGFtaW5pbmcgc2VlbSB0byBiZSBzdGF0aWNhbGx5IGRlY2xhcmVkLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCYjMzk7cyBjYWxsaW5nIHRoZW0sIHdoaWNoIGFwcGVhcnMgdG8gYmUgYHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va2AuIEJhc2VkIG9uIHRoaXMsIEkgbmVlZCB0byBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uIG9uIGEgc2VsZWN0IGdyb3VwIG9mIHN5bWJvbHMgcmVsYXRlZCB0byB0aGlzLgoKVGhlIGNydWNpYWwgb25lcyB0byBleGFtaW5lIGFyZToKLSAgIGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgCi0gICBgc2N0cF9wYWNrZXRfdHJhbnNtaXRgCi0gICBgc2N0cF9zZl9kb181XzFEX2NlYAotICAgYHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va2AKLSAgIGBzY3RwX3NmX2VhdF9hdXRoYAoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYCBpcywgaW4gZmFjdCwgbm9uLXN0YXRpYy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGRpZ2dpbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL2F1dGguYz01OTU9aW50IHNjdHBfYXV0aF9yZWN2X2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLCBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbi0tXG5uZXQvc2N0cC9hdXRoLmMtNjE1LSAqL1xubmV0L3NjdHAvYXV0aC5jOjYxNjppbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxubmV0L3NjdHAvYXV0aC5jLTYxNy1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXG4tLVxubmV0L3NjdHAvb3V0cHV0LmM9NDM2PXN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCxcbi0tXG5uZXQvc2N0cC9vdXRwdXQuYy01MTktXHRcdGlmIChhdXRoKSB7XG5uZXQvc2N0cC9vdXRwdXQuYzo1MjA6XHRcdFx0aWYgKHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyh0cC1cdTAwM2Vhc29jLCBuc2tiLCBhdXRoLFxubmV0L3NjdHAvb3V0cHV0LmMtNTIxLVx0XHRcdFx0XHRcdCAgICAgcGFja2V0LVx1MDAzZWF1dGgtXHUwMDNlc2hrZXksIGdmcCkpIHtcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00NDIzPXN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfc2ZfYXV0aGVudGljYXRlKFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ0NzktXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0NDgwOlx0aWYgKHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhhc29jLCBjaHVuay1cdTAwM2Vza2IsXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NDgxLVx0XHRcdFx0ICAgICAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLVx1MDAzZWNodW5rX2hkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MTUKCQkJCQkJCW91dHB1dDogMTk2CgkJCQkJCQl0aG91Z2h0czogMzMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNDVFAgQXV0aGVudGljYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBpc24mIzM5O3Qgc3RhdGljIGNvZGUsIHRoYXQmIzM5O3MgY2xlYXIuIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgY29kZSBwb2ludHMgbWUgdG8gdGhlc2Uga2V5IHN5bWJvbHMgZm9yIGRlZXBlciBhbmFseXNpczogYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AsIGBzY3RwX3BhY2tldF90cmFuc21pdGAsIGBzY3RwX3NmX2RvXzVfMURfY2VgLCBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYCwgYW5kIGBzY3RwX3NmX2VhdF9hdXRoYC4gSSYjMzk7bSBzZWVpbmcgdGhlIGBJUF9TQ1RQYCBjb25maWcgYmVpbmcgcmVsZXZhbnQuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBgSVBfU0NUUGAgaXMgdGhlIG9ubHkgY29uZmlnIG9mIHJlbGV2YW5jZSBoZXJlLiBIbSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBjb21lIGludG8gcGxheS4gQWgsIGFscmlnaHQuIExvb2tzIGxpa2UgYElQX1NDVFBgIGFsc28gc2VsZWN0cyBgQ1JZUFRPX0xJQl9TSEExYCwgYENSWVBUT19MSUJfU0hBMjU2YCwgYW5kIGBDUllQVE9fTElCX1VUSUxTYC4gU28sIHllcywgYElQX1NDVFBgIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZnVuY3Rpb25hbCBpbXBhY3QuIFRoZSBwYXRjaCBpcyBhYm91dCBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBpbiBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJldHVybiB0eXBlIG9mIGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIGFuZCB0aGVuIG1vZGlmaWVzIHRoZSBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIGluIGBzY3RwX3BhY2tldF9wYWNrYCBhbmQgYHNjdHBfc2ZfYXV0aGVudGljYXRlYCB0byBoYW5kbGUgYW4gZXJyb3IuIFRoaXMgcHJldmVudHMgdGhlIHBvc3NpYmlsaXR5IG9mIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIHNpbGVudCBmYWlsdXJlcy4gVGhpcyB0eXBlIG9mIGNvcmUgbmV0d29yayBsb2dpYyBjaGFuZ2UgaGFzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LgoKVGhlcmVmb3JlLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgd2FudCB0byBmdXp6LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY3JpdGljYWwgYXJlYS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyYjMzQ7LAogICAgJiMzNDtzY3RwX3BhY2tldF90cmFuc21pdCYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2RvXzVfMURfY2UmIzM0OywKICAgICYjMzQ7c2N0cF9zZl9kb181XzJfNF9kdXBjb29rJiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZWF0X2F1dGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gSXQgdXBkYXRlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjIGFuZCBtb2RpZmllcyBjYWxsZXJzIGluIHNjdHBfcGFja2V0X3BhY2sgYW5kIHNjdHBfc2ZfYXV0aGVudGljYXRlIHRvIGhhbmRsZSB0aGUgZXJyb3IsIHByZXZlbnRpbmcgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc2lsZW50IGZhaWx1cmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyYjMzQ7LAogICAgJiMzNDtzY3RwX3BhY2tldF90cmFuc21pdCYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2RvXzVfMURfY2UmIzM0OywKICAgICYjMzQ7c2N0cF9zZl9kb181XzJfNF9kdXBjb29rJiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZWF0X2F1dGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gSXQgdXBkYXRlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjIGFuZCBtb2RpZmllcyBjYWxsZXJzIGluIHNjdHBfcGFja2V0X3BhY2sgYW5kIHNjdHBfc2ZfYXV0aGVudGljYXRlIHRvIGhhbmRsZSB0aGUgZXJyb3IsIHByZXZlbnRpbmcgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc2lsZW50IGZhaWx1cmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU0OjI5LjcwNTU5MjczM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NjgyODI3OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNcIixcbiAgICBcInNjdHBfcGFja2V0X3RyYW5zbWl0XCIsXG4gICAgXCJzY3RwX3NmX2RvXzVfMURfY2VcIixcbiAgICBcInNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va1wiLFxuICAgIFwic2N0cF9zZl9lYXRfYXV0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT01FTSkuIEl0IHVwZGF0ZXMgdGhlIHJldHVybiB0eXBlIG9mIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyBhbmQgbW9kaWZpZXMgY2FsbGVycyBpbiBzY3RwX3BhY2tldF9wYWNrIGFuZCBzY3RwX3NmX2F1dGhlbnRpY2F0ZSB0byBoYW5kbGUgdGhlIGVycm9yLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHNpbGVudCBmYWlsdXJlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU0OjI5LjcwNTYwMjI0MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzODE4MTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGJhMGMzZjgyNTQwOGYxODE5OWU3ZjNlYjBmODAyMDY3NmYzMzFhNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDA3OjU0OjI4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmhcXG5pbmRleCA2ZjJjZDU2MmIxZGU2Li5lZWIzMjk3ZmU5N2QzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oXFxuKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmhcXG5AQCAtODMsOSArODMsOSBAQCBpbnQgc2N0cF9hdXRoX3NlbmRfY2lkKGVudW0gc2N0cF9jaWQgY2h1bmssXFxuIFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7XFxuIGludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuayxcXG4gXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTtcXG4tdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXFxuLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcXG4raW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcXG4gdm9pZCBzY3RwX2F1dGhfc2hrZXlfcmVsZWFzZShzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpO1xcbiB2b2lkIHNjdHBfYXV0aF9zaGtleV9ob2xkKHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKnNoX2tleSk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hdXRoLmMgYi9uZXQvc2N0cC9hdXRoLmNcXG5pbmRleCBjOTAxZDM3M2FmODAzLi42ZGU2NmY1NmM0MWNlIDEwMDY0NFxcbi0tLSBhL25ldC9zY3RwL2F1dGguY1xcbisrKyBiL25ldC9zY3RwL2F1dGguY1xcbkBAIC02MTMsOSArNjEzLDkgQEAgaW50IHNjdHBfYXV0aF9yZWN2X2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLCBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcXG4gICogICAgemVybyAoYXMgc2hvd24gaW4gRmlndXJlIDYpIGZvbGxvd2VkIGJ5IGFsbCBjaHVua3MgdGhhdCBhcmUgcGxhY2VkXFxuICAqICAgIGFmdGVyIHRoZSBBVVRIIGNodW5rIGluIHRoZSBTQ1RQIHBhY2tldC5cXG4gICovXFxuLXZvaWQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxcbi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICplcF9rZXksIGdmcF90IGdmcClcXG4raW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKVxcbiB7XFxuIFxcdHN0cnVjdCBzY3RwX2F1dGhfYnl0ZXMgKmFzb2Nfa2V5O1xcbiBcXHRfX3UxNiBrZXlfaWQsIGhtYWNfaWQ7XFxuQEAgLTYzNiw3ICs2MzYsNyBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4gXFx0XFx0LyogZXBfa2V5IGNhbid0IGJlIE5VTEwgaGVyZSAqL1xcbiBcXHRcXHRhc29jX2tleSA9IHNjdHBfYXV0aF9hc29jX2NyZWF0ZV9zZWNyZXQoYXNvYywgZXBfa2V5LCBnZnApO1xcbiBcXHRcXHRpZiAoIWFzb2Nfa2V5KVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0XFx0ZnJlZV9rZXkgPSAxO1xcbiBcXHR9XFxuQEAgLTY1NCw2ICs2NTQsOCBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4gXFxuIFxcdGlmIChmcmVlX2tleSlcXG4gXFx0XFx0c2N0cF9hdXRoX2tleV9wdXQoYXNvY19rZXkpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qIEFQSSBIZWxwZXJzICovXFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmNcXG5pbmRleCAyM2U5NjMwNWNhZDdjLi4zZDdlYWQ5ZDQwZTE5IDEwMDY0NFxcbi0tLSBhL25ldC9zY3RwL291dHB1dC5jXFxuKysrIGIvbmV0L3NjdHAvb3V0cHV0LmNcXG5AQCAtNTE3LDggKzUxNywxNCBAQCBzdGF0aWMgaW50IHNjdHBfcGFja2V0X3BhY2soc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQsXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChhdXRoKSB7XFxuLVxcdFxcdFxcdHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyh0cC1cXHUwMDNlYXNvYywgbnNrYiwgYXV0aCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHBhY2tldC1cXHUwMDNlYXV0aC1cXHUwMDNlc2hrZXksIGdmcCk7XFxuK1xcdFxcdFxcdGlmIChzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWModHAtXFx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGFja2V0LVxcdTAwM2VhdXRoLVxcdTAwM2VzaGtleSwgZ2ZwKSkge1xcbitcXHRcXHRcXHRcXHRzY3RwX2NodW5rX2ZyZWUocGFja2V0LVxcdTAwM2VhdXRoKTtcXG4rXFx0XFx0XFx0XFx0cGFja2V0LVxcdTAwM2VhdXRoID0gTlVMTDtcXG4rXFx0XFx0XFx0XFx0aWYgKGdzbylcXG4rXFx0XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKG5za2IpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHQvKiBmcmVlIGF1dGggaWYgbm8gbW9yZSBjaHVua3MsIG9yIGFkZCBpdCBiYWNrICovXFxuIFxcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZwYWNrZXQtXFx1MDAzZWNodW5rX2xpc3QpKVxcbiBcXHRcXHRcXHRcXHRzY3RwX2NodW5rX2ZyZWUocGFja2V0LVxcdTAwM2VhdXRoKTtcXG5AQCAtNjE5LDcgKzYyNSw3IEBAIGludCBzY3RwX3BhY2tldF90cmFuc21pdChzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCwgZ2ZwX3QgZ2ZwKVxcbiBcXG4gXFx0LyogcGFjayB1cCBjaHVua3MgKi9cXG4gXFx0cGt0X2NvdW50ID0gc2N0cF9wYWNrZXRfcGFjayhwYWNrZXQsIGhlYWQsIGdzbywgZ2ZwKTtcXG4tXFx0aWYgKCFwa3RfY291bnQpIHtcXG4rXFx0aWYgKHBrdF9jb3VudCBcXHUwMDNjPSAwKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihoZWFkKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1xcbmluZGV4IDcwOGZhMDdkNWZmZmMuLmUxOTg4MWM5MGI0OTkgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcXG4rKysgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1xcbkBAIC02MzcsMTMgKzYzNywxNyBAQCBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFDX2FjayhzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXFxuLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxcbitzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxcbiB7XFxuIFxcdHN0cnVjdCBzY3RwX2NodW5rIGF1dGg7XFxuIFxcbi1cXHRpZiAoIWNodW5rLVxcdTAwM2VhdXRoX2NodW5rKVxcbi1cXHRcXHRyZXR1cm4gIXNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay1cXHUwMDNlY2h1bmtfaGRyLVxcdTAwM2V0eXBlLCBhc29jKTtcXG4rXFx0aWYgKCFjaHVuay1cXHUwMDNlYXV0aF9jaHVuaykge1xcbitcXHRcXHRpZiAoc2N0cF9hdXRoX3JlY3ZfY2lkKGNodW5rLVxcdTAwM2VjaHVua19oZHItXFx1MDAzZXR5cGUsIGFzb2MpKVxcbitcXHRcXHRcXHRyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NJRztcXG4rXFx0XFx0cmV0dXJuIFNDVFBfSUVSUk9SX05PX0VSUk9SO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBTQ1RQLUFVVEg6ICBhdXRoX2NodW5rIHBvaW50ZXIgaXMgb25seSBzZXQgd2hlbiB0aGUgY29va2llLWVjaG9cXG4gXFx0ICogaXMgc3VwcG9zZWQgdG8gYmUgYXV0aGVudGljYXRlZCBhbmQgd2UgaGF2ZSB0byBkbyBkZWxheWVkXFxuQEAgLTY1NCw3ICs2NTgsNyBAQCBzdGF0aWMgYm9vbCBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxcbiBcXG4gXFx0LyogTWFrZSBzdXJlIHRoYXQgd2UgYW5kIHRoZSBwZWVyIGFyZSBBVVRIIGNhcGFibGUgKi9cXG4gXFx0aWYgKCFuZXQtXFx1MDAzZXNjdHAuYXV0aF9lbmFibGUgfHwgIWFzb2MtXFx1MDAzZXBlZXIuYXV0aF9jYXBhYmxlKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdHJldHVybiBTQ1RQX0lFUlJPUl9CQURfU0lHO1xcbiBcXG4gXFx0Lyogc2V0LXVwIG91ciBmYWtlIGNodW5rIHNvIHRoYXQgd2UgY2FuIHByb2Nlc3MgaXQgKi9cXG4gXFx0YXV0aC5za2IgPSBjaHVuay1cXHUwMDNlYXV0aF9jaHVuaztcXG5AQCAtNjY2LDcgKzY3MCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXFxuIFxcdHNrYl9wdWxsKGNodW5rLVxcdTAwM2VhdXRoX2NodW5rLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTtcXG4gXFx0YXV0aC50cmFuc3BvcnQgPSBjaHVuay1cXHUwMDNldHJhbnNwb3J0O1xcbiBcXG4tXFx0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFxcdTAwMjZhdXRoKSA9PSBTQ1RQX0lFUlJPUl9OT19FUlJPUjtcXG4rXFx0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFxcdTAwMjZhdXRoKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtODI2LDggKzgzMCwxMSBAQCBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFEX2NlKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRnb3RvIG5vbWVtX2luaXQ7XFxuIFxcbi1cXHRpZiAoIXNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpKSB7XFxuK1xcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYyk7XFxuK1xcdGlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikge1xcbiBcXHRcXHRzY3RwX2Fzc29jaWF0aW9uX2ZyZWUobmV3X2Fzb2MpO1xcbitcXHRcXHRpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pXFxuK1xcdFxcdFxcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNO1xcbiBcXHRcXHRyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChuZXQsIGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTg4OSw2ICsxODk2LDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYShcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpwZWVyX2luaXQ7XFxuIFxcdGVudW0gc2N0cF9kaXNwb3NpdGlvbiBkaXNwb3NpdGlvbjtcXG4rXFx0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcXG4gXFx0c3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2O1xcbiBcXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDtcXG4gXFx0c3RydWN0IHNjdHBfY2h1bmsgKmVycjtcXG5AQCAtMTkwNCw4ICsxOTEyLDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2EoXFxuIFxcdGlmIChzY3RwX2F1dGhfYXNvY19pbml0X2FjdGl2ZV9rZXkobmV3X2Fzb2MsIEdGUF9BVE9NSUMpKVxcbiBcXHRcXHRnb3RvIG5vbWVtO1xcbiBcXG4tXFx0aWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSlcXG4rXFx0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcXG4rXFx0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XFxuK1xcdFxcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XFxuIFxcdFxcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIE1ha2Ugc3VyZSBubyBuZXcgYWRkcmVzc2VzIGFyZSBiZWluZyBhZGRlZCBkdXJpbmcgdGhlXFxuIFxcdCAqIHJlc3RhcnQuICBUaG91Z2ggdGhpcyBpcyBhIHByZXR0eSBjb21wbGljYXRlZCBhdHRhY2tcXG5AQCAtMjAxMSw2ICsyMDIzLDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYihcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKm5ld19hc29jKVxcbiB7XFxuIFxcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcXG4rXFx0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcXG4gXFx0c3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7XFxuIFxcbiBcXHQvKiBuZXdfYXNvYyBpcyBhIGJyYW5kLW5ldyBhc3NvY2lhdGlvbiwgc28gdGhlc2UgYXJlIG5vdCB5ZXRcXG5AQCAtMjAyNCw4ICsyMDM3LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2IoXFxuIFxcdGlmIChzY3RwX2F1dGhfYXNvY19pbml0X2FjdGl2ZV9rZXkobmV3X2Fzb2MsIEdGUF9BVE9NSUMpKVxcbiBcXHRcXHRnb3RvIG5vbWVtO1xcbiBcXG4tXFx0aWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSlcXG4rXFx0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcXG4rXFx0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XFxuK1xcdFxcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XFxuIFxcdFxcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XFxuK1xcdH1cXG4gXFxuIFxcdHNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfTkVXX1NUQVRFLFxcbiBcXHRcXHRcXHRTQ1RQX1NUQVRFKFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQpKTtcXG5AQCAtMjExOCw2ICsyMTM1LDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfZChcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKm5ld19hc29jKVxcbiB7XFxuIFxcdHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldiA9IE5VTEwsICphaV9ldiA9IE5VTEwsICphdXRoX2V2ID0gTlVMTDtcXG4rXFx0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcXG4gXFx0c3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7XFxuIFxcbiBcXHQvKiBDbGFyaWZpY2F0aW9uIGZyb20gSW1wbGVtZW50b3IncyBHdWlkZTpcXG5AQCAtMjEyNyw4ICsyMTQ1LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXFxuIFxcdCAqIGEgQ09PS0lFIEFDSy5cXG4gXFx0ICovXFxuIFxcbi1cXHRpZiAoIXNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgYXNvYykpXFxuK1xcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKTtcXG4rXFx0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XFxuK1xcdFxcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XFxuIFxcdFxcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIERvbid0IGFjY2lkZW50YWxseSBtb3ZlIGJhY2sgaW50byBlc3RhYmxpc2hlZCBzdGF0ZS4gKi9cXG4gXFx0aWYgKGFzb2MtXFx1MDAzZXN0YXRlIFxcdTAwM2MgU0NUUF9TVEFURV9FU1RBQkxJU0hFRCkge1xcbkBAIC00NDU1LDkgKzQ0NzcsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9zZl9hdXRoZW50aWNhdGUoXFxuIFxcbiBcXHRtZW1zZXQoZGlnZXN0LCAwLCBzaWdfbGVuKTtcXG4gXFxuLVxcdHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhhc29jLCBjaHVuay1cXHUwMDNlc2tiLFxcbi1cXHRcXHRcXHRcXHQgKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKiljaHVuay1cXHUwMDNlY2h1bmtfaGRyLFxcbi1cXHRcXHRcXHRcXHQgc2hfa2V5LCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhhc29jLCBjaHVuay1cXHUwMDNlc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgIChzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICopY2h1bmstXFx1MDAzZWNodW5rX2hkcixcXG4rXFx0XFx0XFx0XFx0ICAgICBzaF9rZXksIEdGUF9BVE9NSUMpKSB7XFxuK1xcdFxcdGtmcmVlKHNhdmVfZGlnZXN0KTtcXG4rXFx0XFx0cmV0dXJuIFNDVFBfSUVSUk9SX05PTUVNO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBEaXNjYXJkIHRoZSBwYWNrZXQgaWYgdGhlIGRpZ2VzdHMgZG8gbm90IG1hdGNoICovXFxuIFxcdGlmIChjcnlwdG9fbWVtbmVxKHNhdmVfZGlnZXN0LCBkaWdlc3QsIHNpZ19sZW4pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU0OjMwLjIyMDQ2MTcwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY4MTY3OTQ2ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNcIixcbiAgICBcInNjdHBfcGFja2V0X3RyYW5zbWl0XCIsXG4gICAgXCJzY3RwX3NmX2RvXzVfMURfY2VcIixcbiAgICBcInNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va1wiLFxuICAgIFwic2N0cF9zZl9lYXRfYXV0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT01FTSkuIEl0IHVwZGF0ZXMgdGhlIHJldHVybiB0eXBlIG9mIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyBhbmQgbW9kaWZpZXMgY2FsbGVycyBpbiBzY3RwX3BhY2tldF9wYWNrIGFuZCBzY3RwX3NmX2F1dGhlbnRpY2F0ZSB0byBoYW5kbGUgdGhlIGVycm9yLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHNpbGVudCBmYWlsdXJlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRiYTBjM2Y4MjU0MDhmMTgxOTllN2YzZWIwZjgwMjA2NzZmMzMxYTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA3OjU0OjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmggYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaFxuaW5kZXggNmYyY2Q1NjJiMWRlNi4uZWViMzI5N2ZlOTdkMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oXG4rKysgYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaFxuQEAgLTgzLDkgKzgzLDkgQEAgaW50IHNjdHBfYXV0aF9zZW5kX2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpO1xuIGludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuayxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTtcbi12b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbitpbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuK1x0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCxcbitcdFx0XHQgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbiB2b2lkIHNjdHBfYXV0aF9zaGtleV9yZWxlYXNlKHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKnNoX2tleSk7XG4gdm9pZCBzY3RwX2F1dGhfc2hrZXlfaG9sZChzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2F1dGguYyBiL25ldC9zY3RwL2F1dGguY1xuaW5kZXggYzkwMWQzNzNhZjgwMy4uNmRlNjZmNTZjNDFjZSAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL2F1dGguY1xuKysrIGIvbmV0L3NjdHAvYXV0aC5jXG5AQCAtNjEzLDkgKzYxMyw5IEBAIGludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuaywgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4gICogICAgemVybyAoYXMgc2hvd24gaW4gRmlndXJlIDYpIGZvbGxvd2VkIGJ5IGFsbCBjaHVua3MgdGhhdCBhcmUgcGxhY2VkXG4gICogICAgYWZ0ZXIgdGhlIEFVVEggY2h1bmsgaW4gdGhlIFNDVFAgcGFja2V0LlxuICAqL1xuLXZvaWQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXG4tXHRcdFx0ICAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApXG4raW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbitcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXG4rXHRcdFx0ICAgICBzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICplcF9rZXksIGdmcF90IGdmcClcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9hdXRoX2J5dGVzICphc29jX2tleTtcbiBcdF9fdTE2IGtleV9pZCwgaG1hY19pZDtcbkBAIC02MzYsNyArNjM2LDcgQEAgdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXHRcdC8qIGVwX2tleSBjYW4ndCBiZSBOVUxMIGhlcmUgKi9cbiBcdFx0YXNvY19rZXkgPSBzY3RwX2F1dGhfYXNvY19jcmVhdGVfc2VjcmV0KGFzb2MsIGVwX2tleSwgZ2ZwKTtcbiBcdFx0aWYgKCFhc29jX2tleSlcbi1cdFx0XHRyZXR1cm47XG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRcdGZyZWVfa2V5ID0gMTtcbiBcdH1cbkBAIC02NTQsNiArNjU0LDggQEAgdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXG4gXHRpZiAoZnJlZV9rZXkpXG4gXHRcdHNjdHBfYXV0aF9rZXlfcHV0KGFzb2Nfa2V5KTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKiBBUEkgSGVscGVycyAqL1xuZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmNcbmluZGV4IDIzZTk2MzA1Y2FkN2MuLjNkN2VhZDlkNDBlMTkgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9vdXRwdXQuY1xuKysrIGIvbmV0L3NjdHAvb3V0cHV0LmNcbkBAIC01MTcsOCArNTE3LDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCxcbiBcdFx0fVxuIFxuIFx0XHRpZiAoYXV0aCkge1xuLVx0XHRcdHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyh0cC1cdTAwM2Vhc29jLCBuc2tiLCBhdXRoLFxuLVx0XHRcdFx0XHRcdCBwYWNrZXQtXHUwMDNlYXV0aC1cdTAwM2VzaGtleSwgZ2ZwKTtcbitcdFx0XHRpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLVx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXG4rXHRcdFx0XHRcdFx0ICAgICBwYWNrZXQtXHUwMDNlYXV0aC1cdTAwM2VzaGtleSwgZ2ZwKSkge1xuK1x0XHRcdFx0c2N0cF9jaHVua19mcmVlKHBhY2tldC1cdTAwM2VhdXRoKTtcbitcdFx0XHRcdHBhY2tldC1cdTAwM2VhdXRoID0gTlVMTDtcbitcdFx0XHRcdGlmIChnc28pXG4rXHRcdFx0XHRcdGtmcmVlX3NrYihuc2tiKTtcbitcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRcdH1cbiBcdFx0XHQvKiBmcmVlIGF1dGggaWYgbm8gbW9yZSBjaHVua3MsIG9yIGFkZCBpdCBiYWNrICovXG4gXHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cGFja2V0LVx1MDAzZWNodW5rX2xpc3QpKVxuIFx0XHRcdFx0c2N0cF9jaHVua19mcmVlKHBhY2tldC1cdTAwM2VhdXRoKTtcbkBAIC02MTksNyArNjI1LDcgQEAgaW50IHNjdHBfcGFja2V0X3RyYW5zbWl0KHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LCBnZnBfdCBnZnApXG4gXG4gXHQvKiBwYWNrIHVwIGNodW5rcyAqL1xuIFx0cGt0X2NvdW50ID0gc2N0cF9wYWNrZXRfcGFjayhwYWNrZXQsIGhlYWQsIGdzbywgZ2ZwKTtcbi1cdGlmICghcGt0X2NvdW50KSB7XG4rXHRpZiAocGt0X2NvdW50IFx1MDAzYz0gMCkge1xuIFx0XHRrZnJlZV9za2IoaGVhZCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbmluZGV4IDcwOGZhMDdkNWZmZmMuLmUxOTg4MWM5MGI0OTkgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1xuKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbkBAIC02MzcsMTMgKzYzNywxNyBAQCBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFDX2FjayhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxuLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4rc3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4rXHRcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9jaHVuayBhdXRoO1xuIFxuLVx0aWYgKCFjaHVuay1cdTAwM2VhdXRoX2NodW5rKVxuLVx0XHRyZXR1cm4gIXNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay1cdTAwM2VjaHVua19oZHItXHUwMDNldHlwZSwgYXNvYyk7XG4rXHRpZiAoIWNodW5rLVx1MDAzZWF1dGhfY2h1bmspIHtcbitcdFx0aWYgKHNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay1cdTAwM2VjaHVua19oZHItXHUwMDNldHlwZSwgYXNvYykpXG4rXHRcdFx0cmV0dXJuIFNDVFBfSUVSUk9SX0JBRF9TSUc7XG4rXHRcdHJldHVybiBTQ1RQX0lFUlJPUl9OT19FUlJPUjtcbitcdH1cbiBcbiBcdC8qIFNDVFAtQVVUSDogIGF1dGhfY2h1bmsgcG9pbnRlciBpcyBvbmx5IHNldCB3aGVuIHRoZSBjb29raWUtZWNob1xuIFx0ICogaXMgc3VwcG9zZWQgdG8gYmUgYXV0aGVudGljYXRlZCBhbmQgd2UgaGF2ZSB0byBkbyBkZWxheWVkXG5AQCAtNjU0LDcgKzY1OCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4gXG4gXHQvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbmQgdGhlIHBlZXIgYXJlIEFVVEggY2FwYWJsZSAqL1xuIFx0aWYgKCFuZXQtXHUwMDNlc2N0cC5hdXRoX2VuYWJsZSB8fCAhYXNvYy1cdTAwM2VwZWVyLmF1dGhfY2FwYWJsZSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NJRztcbiBcbiBcdC8qIHNldC11cCBvdXIgZmFrZSBjaHVuayBzbyB0aGF0IHdlIGNhbiBwcm9jZXNzIGl0ICovXG4gXHRhdXRoLnNrYiA9IGNodW5rLVx1MDAzZWF1dGhfY2h1bms7XG5AQCAtNjY2LDcgKzY3MCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4gXHRza2JfcHVsbChjaHVuay1cdTAwM2VhdXRoX2NodW5rLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTtcbiBcdGF1dGgudHJhbnNwb3J0ID0gY2h1bmstXHUwMDNldHJhbnNwb3J0O1xuIFxuLVx0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFx1MDAyNmF1dGgpID09IFNDVFBfSUVSUk9SX05PX0VSUk9SO1xuK1x0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFx1MDAyNmF1dGgpO1xuIH1cbiBcbiAvKlxuQEAgLTgyNiw4ICs4MzAsMTEgQEAgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xRF9jZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gbm9tZW1faW5pdDtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpIHtcbitcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYyk7XG4rXHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiBcdFx0c2N0cF9hc3NvY2lhdGlvbl9mcmVlKG5ld19hc29jKTtcbitcdFx0aWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKVxuK1x0XHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNO1xuIFx0XHRyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChuZXQsIGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTtcbiBcdH1cbiBcbkBAIC0xODg5LDYgKzE4OTYsNyBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19hKFxuIHtcbiBcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcbiBcdGVudW0gc2N0cF9kaXNwb3NpdGlvbiBkaXNwb3NpdGlvbjtcbitcdGVudW0gc2N0cF9pZXJyb3IgZXJyb3I7XG4gXHRzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXY7XG4gXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICplcnI7XG5AQCAtMTkwNCw4ICsxOTEyLDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2EoXG4gXHRpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSlcbiBcdFx0Z290byBub21lbTtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpXG4rXHRlcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpO1xuK1x0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XG4rXHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbitcdFx0XHRyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTtcbiBcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fRElTQ0FSRDtcbitcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBubyBuZXcgYWRkcmVzc2VzIGFyZSBiZWluZyBhZGRlZCBkdXJpbmcgdGhlXG4gXHQgKiByZXN0YXJ0LiAgVGhvdWdoIHRoaXMgaXMgYSBwcmV0dHkgY29tcGxpY2F0ZWQgYXR0YWNrXG5AQCAtMjAxMSw2ICsyMDIzLDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYihcbiBcdFx0XHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKm5ld19hc29jKVxuIHtcbiBcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcbitcdGVudW0gc2N0cF9pZXJyb3IgZXJyb3I7XG4gXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDtcbiBcbiBcdC8qIG5ld19hc29jIGlzIGEgYnJhbmQtbmV3IGFzc29jaWF0aW9uLCBzbyB0aGVzZSBhcmUgbm90IHlldFxuQEAgLTIwMjQsOCArMjAzNywxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19iKFxuIFx0aWYgKHNjdHBfYXV0aF9hc29jX2luaXRfYWN0aXZlX2tleShuZXdfYXNvYywgR0ZQX0FUT01JQykpXG4gXHRcdGdvdG8gbm9tZW07XG4gXG4tXHRpZiAoIXNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpKVxuK1x0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcbitcdGlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikge1xuK1x0XHRpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pXG4rXHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4rXHR9XG4gXG4gXHRzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX05FV19TVEFURSxcbiBcdFx0XHRTQ1RQX1NUQVRFKFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQpKTtcbkBAIC0yMTE4LDYgKzIxMzUsNyBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19kKFxuIFx0XHRcdFx0XHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqbmV3X2Fzb2MpXG4ge1xuIFx0c3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ID0gTlVMTCwgKmFpX2V2ID0gTlVMTCwgKmF1dGhfZXYgPSBOVUxMO1xuK1x0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICpyZXBsO1xuIFxuIFx0LyogQ2xhcmlmaWNhdGlvbiBmcm9tIEltcGxlbWVudG9yJ3MgR3VpZGU6XG5AQCAtMjEyNyw4ICsyMTQ1LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXG4gXHQgKiBhIENPT0tJRSBBQ0suXG4gXHQgKi9cbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKSlcbitcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKTtcbitcdGlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikge1xuK1x0XHRpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pXG4rXHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4rXHR9XG4gXG4gXHQvKiBEb24ndCBhY2NpZGVudGFsbHkgbW92ZSBiYWNrIGludG8gZXN0YWJsaXNoZWQgc3RhdGUuICovXG4gXHRpZiAoYXNvYy1cdTAwM2VzdGF0ZSBcdTAwM2MgU0NUUF9TVEFURV9FU1RBQkxJU0hFRCkge1xuQEAgLTQ0NTUsOSArNDQ3NywxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcbiBcbiBcdG1lbXNldChkaWdlc3QsIDAsIHNpZ19sZW4pO1xuIFxuLVx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGFzb2MsIGNodW5rLVx1MDAzZXNrYixcbi1cdFx0XHRcdCAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLVx1MDAzZWNodW5rX2hkcixcbi1cdFx0XHRcdCBzaF9rZXksIEdGUF9BVE9NSUMpO1xuK1x0aWYgKHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhhc29jLCBjaHVuay1cdTAwM2Vza2IsXG4rXHRcdFx0XHQgICAgIChzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICopY2h1bmstXHUwMDNlY2h1bmtfaGRyLFxuK1x0XHRcdFx0ICAgICBzaF9rZXksIEdGUF9BVE9NSUMpKSB7XG4rXHRcdGtmcmVlKHNhdmVfZGlnZXN0KTtcbitcdFx0cmV0dXJuIFNDVFBfSUVSUk9SX05PTUVNO1xuK1x0fVxuIFxuIFx0LyogRGlzY2FyZCB0aGUgcGFja2V0IGlmIHRoZSBkaWdlc3RzIGRvIG5vdCBtYXRjaCAqL1xuIFx0aWYgKGNyeXB0b19tZW1uZXEoc2F2ZV9kaWdlc3QsIGRpZ2VzdCwgc2lnX2xlbikpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU0OjMwLjIyMDQ2MzkyNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MTQ5MDQ3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTQ1RQIEF1dGhlbnRpY2F0aW9uIEhNQUMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBjaGFuZ2luZyB0aGUgd2F5IHRoZSBITUFDIGNhbGN1bGF0aW9uIGlzIGhhbmRsZWQgaW4gU0NUUCBhdXRoZW50aWNhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIGdvbmUgZnJvbSBhIGB2b2lkYCByZXR1cm4gdHlwZSBpbiBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYCB0byBhbiBgaW50YCwgdG8gYWxsb3cgZm9yIHRoZSBoYW5kbGluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyB3aXRoIHRoZSBgLUVOT01FTWAgZXJyb3IgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjaGFuZ2U7IHJvYnVzdCBlcnJvciBoYW5kbGluZyBpcyBjcnVjaWFsLCBlc3BlY2lhbGx5IGluIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uIGxpa2UgYXV0aGVudGljYXRpb24uIFRoZSBjYWxsZXJzIHNlZW0gdG8gYmUgcHJvcGVybHkgdXBkYXRlZCB0byBtYW5hZ2UgdGhlc2UgZXJyb3JzIGFuZCBwcm9wYWdhdGUgdGhlbSBhcHByb3ByaWF0ZWx5LCByZXR1cm5pbmcgYFNDVFBfSUVSUk9SX05PTUVNYCBvciBgU0NUUF9ESVNQT1NJVElPTl9OT01FTWAuXG5cblRoZSBpbW1lZGlhdGUgdGhvdWdodCBpczogaXMgdGhpcyBmdW5jdGlvbmFsIGFuZCBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseSwgeWVzLiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBpbiBhdXRoZW50aWNhdGlvbiBhcmUgYSBsZWdpdGltYXRlIGFuZCBpbXBvcnRhbnQgZmFpbHVyZSBzY2VuYXJpbyB0byB0ZXN0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIFNDVFAgYXV0aGVudGljYXRpb24sIHdoaWNoIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB3ZSBzaG91bGQgZm9jdXMgb24gZm9yIGZ1enppbmcuIFdlIGhhdmUgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AgaXRzZWxmLCB3aGljaCBpcyB0aGUgaW1tZWRpYXRlIHRhcmdldC4gVGhlbiB0aGVyZSdzIGBzY3RwX3BhY2tldF9wYWNrYCAod2hpY2ggaXMgc3RhdGljLCBzbyBsZXQncyBzZWUgaWYgaXQncyBpbmxpbmVkIC0gb3RoZXJ3aXNlLCBtYXliZSBza2lwIGl0LCBmb2N1c2luZyBvbiBBUEkgZW50cnlwb2ludHMgb3Igc3RhdGUgbWFjaGluZSBmdW5jdGlvbnMpLiBXZSBoYXZlIGBzY3RwX3BhY2tldF90cmFuc21pdGAsIGBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5YCAod2hpY2ggaXMgYWxzbyBzdGF0aWMpLCBhbmQgdGhlbiBhIGJ1bmNoIG9mIHN0YXRlIG1hY2hpbmUgZnVuY3Rpb25zLCBgc2N0cF9zZl9kb181XzFEX2NlYCwgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYHNjdHBfc2ZfZG9fZHVwY29va19kYCwgYW5kIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAuXG5cblRoZSBrZXkgZW50cnlwb2ludHMgdG8gaW5jbHVkZSBmb3IgZnV6emluZyBzaG91bGQgYmU6IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgLCBgc2N0cF9wYWNrZXRfdHJhbnNtaXRgLCBhbmQgdGhlbiB0aG9zZSBzdGF0ZSBtYWNoaW5lIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbnZvbHZlZCBpbiBhdXRoZW50aWNhdGlvbjogYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAsIGFuZCBgc2N0cF9zZl9hdXRoZW50aWNhdGVgLlxuXG5KdXN0IGEgcXVpY2sgY2hlY2sgbm93LCBtYWtlIHN1cmUgU0NUUCBpcyBldmVuIGVuYWJsZWQuIGBJUF9TQ1RQYCBpbiBLY29uZmlnLCBnb3QgaXQuIExldCdzIHZlcmlmeSB0aGF0J3MgYWxsIHNldCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNDYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NDozOC4wMzUzNzI3MTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYwMjkyOTYzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfU0NUUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9LY29uZmlnLTUtXFxubmV0L3NjdHAvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBfU0NUUFxcbm5ldC9zY3RwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVGhlIFNDVFAgUHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU0OjQxLjYzODMxMjIwMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTQ5OTg2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBTQ1RQIEF1dGhlbnRpY2F0aW9uIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBTQ1RQIGF1dGhlbnRpY2F0aW9uLCBhbmQgSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0by4gVGhpcyBpc24ndCBqdXN0IGEgZ2VuZXJpYyBzZWN1cml0eSBhc3Nlc3NtZW50OyBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBBcmUgdGhlcmUgYW55IFNDVFAtc3BlY2lmaWMgc2V0dGluZ3MgdGhhdCByZWxhdGUgdG8gdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MgaXRzZWxmPyBUaGluZ3MgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIGEgZ2VuZXJhbCBzZWN1cml0eSBwb3N0dXJlIHJldmlldy4gSSBuZWVkIHRvIGtub3cgaWYgSSdtIG1pc3Npbmcgc29tZXRoaW5nLCBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgSSBjYW4gZXhwbG9pdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQwOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU0OjQ1LjIzMzMxMzUwNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTY1ODU1OTEwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0NUUF9BVVRIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NDo0OS4xOTkxNzczMDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg0MTE5NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKkRlbHZpbmcgaW50byBTeXN0ZW0gUGFyYW1ldGVycyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGp1c3QgbG9va2luZyBhdCB0aGF0IGBuZXQtXHUwMDNlc2N0cC5hdXRoX2VuYWJsZWAgc2V0dGluZy4uLiBhbmQgYSBsaWdodGJ1bGIganVzdCB3ZW50IG9mZi4gVGhhdCdzIG5vdCBzb21lIG9ic2N1cmUga2VybmVsIHZhcmlhYmxlLCB0aGF0J3MgYSAqc3lzY3RsKi4gTWVhbmluZyBJIGNhbiB0dW5lIGl0IGF0IHJ1bnRpbWUgd2l0aG91dCBuZWVkaW5nIGEgZnVsbCByZWJvb3Qgb3IgZXZlbiBhIG1vZHVsZSByZWxvYWQuIFRoYXQgY2hhbmdlcyBldmVyeXRoaW5nLCBvciBhdCBsZWFzdCBpdCBjaGFuZ2VzIG15IGFwcHJvYWNoISBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0b2dnbGluZyB0aGF0LiBJcyBpdCBhIHBlcnNpc3RlbnQgY2hhbmdlLCBvciBpcyBpdCBvbmx5IGVmZmVjdGl2ZSB1bnRpbCB0aGUgbmV4dCByZWJvb3Q/IFdoYXQncyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIG1vZGlmeSBpdD8gSSBzaG91bGQgY2hlY2sgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGZvciBgc3lzY3RsYCBhbmQgU0NUUCBhdXRoZW50aWNhdGlvbiB0byBnZXQgYSBwcmVjaXNlIHVuZGVyc3RhbmRpbmcgYmVmb3JlIG1ha2luZyBhbnkgZGVjaXNpb25zLiBOb3cgSSBuZWVkIHRvIHJldmlldyB3aGF0IGVmZmVjdHMgdGhpcyBpcyBpbnRlbmRlZCB0byBoYXZlLiBHb29kIHRoaW5nIEkganVzdCBoYWQgdGhhdCB0aG91Z2h0LCBiZWZvcmUgZGl2aW5nIGludG8gc29tZXRoaW5nIGZhciBtb3JlIGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTkwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6NTQ6NTIuNjgzMjk5NTQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzY0Mjg4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdXRoX2VuYWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvYXV0aC5jPTcyMj1pbnQgc2N0cF9hdXRoX3NldF9rZXkoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTczOC1cXHR9IGVsc2Uge1xcbm5ldC9zY3RwL2F1dGguYzo3Mzk6XFx0XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvYXV0aC5jLTc0MC1cXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbm5ldC9zY3RwL2F1dGguYz03ODU9aW50IHNjdHBfYXV0aF9zZXRfYWN0aXZlX2tleShzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtNzk4LVxcdH0gZWxzZSB7XFxubmV0L3NjdHAvYXV0aC5jOjc5OTpcXHRcXHRpZiAoIWVwLVxcdTAwM2VhdXRoX2VuYWJsZSlcXG5uZXQvc2N0cC9hdXRoLmMtODAwLVxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbi0tXFxubmV0L3NjdHAvYXV0aC5jPTgyOD1pbnQgc2N0cF9hdXRoX2RlbF9rZXlfaWQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTg0Ni1cXHR9IGVsc2Uge1xcbm5ldC9zY3RwL2F1dGguYzo4NDc6XFx0XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvYXV0aC5jLTg0OC1cXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbm5ldC9zY3RwL2F1dGguYz04NzI9aW50IHNjdHBfYXV0aF9kZWFjdF9rZXlfaWQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTg4OS1cXHR9IGVsc2Uge1xcbm5ldC9zY3RwL2F1dGguYzo4OTA6XFx0XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvYXV0aC5jLTg5MS1cXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbm5ldC9zY3RwL2VuZHBvaW50b2xhLmM9NTA9c3RhdGljIHN0cnVjdCBzY3RwX2VuZHBvaW50ICpzY3RwX2VuZHBvaW50X2luaXQoc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYy01Ny1cXHRlcC1cXHUwMDNlYXNjb25mX2VuYWJsZSA9IG5ldC1cXHUwMDNlc2N0cC5hZGRpcF9lbmFibGU7XFxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYzo1ODpcXHRlcC1cXHUwMDNlYXV0aF9lbmFibGUgPSBuZXQtXFx1MDAzZXNjdHAuYXV0aF9lbmFibGU7XFxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYzo1OTpcXHRpZiAoZXAtXFx1MDAzZWF1dGhfZW5hYmxlKSB7XFxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYy02MC1cXHRcXHRpZiAoc2N0cF9hdXRoX2luaXQoZXAsIGdmcCkpXFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jPTEyODk9c3RhdGljIGludCBfX25ldF9pbml0IHNjdHBfZGVmYXVsdHNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEzMTQtXFx0LyogV2hldGhlciBjb29raWUgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZCgxKSBvciBub3QoMCkgKi9cXG5uZXQvc2N0cC9wcm90b2NvbC5jOjEzMTU6XFx0bmV0LVxcdTAwM2VzY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSA9XFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMzE2LVxcdFxcdCFJU19FTkFCTEVEKENPTkZJR19TQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfTk9ORSk7XFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEzNjEtXFx0LyogRGlzYWJsZSBBVVRIIGJ5IGRlZmF1bHQuICovXFxubmV0L3NjdHAvcHJvdG9jb2wuYzoxMzYyOlxcdG5ldC1cXHUwMDNlc2N0cC5hdXRoX2VuYWJsZSA9IDA7XFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMzYzLVxcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTE5OD1zdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2luaXQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjcyLVxcdC8qIEFjY291bnQgZm9yIEFVVEggcmVsYXRlZCBwYXJhbWV0ZXJzICovXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjI3MzpcXHRpZiAoZXAtXFx1MDAzZWF1dGhfZW5hYmxlKSB7XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI3NC1cXHRcXHQvKiBBZGQgcmFuZG9tIHBhcmFtZXRlciBsZW5ndGgqL1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTM1NS1cXHQvKiBBZGQgU0NUUC1BVVRIIGNodW5rcyB0byB0aGUgcGFyYW1ldGVyIGxpc3QgKi9cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MzU2OlxcdGlmIChlcC1cXHUwMDNlYXV0aF9lbmFibGUpIHtcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMzU3LVxcdFxcdHNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYXNvYy1cXHUwMDNlYy5hdXRoX3JhbmRvbSksXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM9MTY0NT1zdGF0aWMgc3RydWN0IHNjdHBfY29va2llX3BhcmFtICpzY3RwX3BhY2tfY29va2llKFxcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTE3MTEtXFx0LyogU2lnbiB0aGUgY29va2llLCBpZiBjb29raWUgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZC4gKi9cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MTcxMjpcXHRpZiAoc2N0cF9zayhlcC1cXHUwMDNlYmFzZS5zayktXFx1MDAzZWNvb2tpZV9hdXRoX2VuYWJsZSkge1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0xNzEzLVxcdFxcdHN0YXRpY19hc3NlcnQoc2l6ZW9mKGNvb2tpZS1cXHUwMDNlbWFjKSA9PSBTSEEyNTZfRElHRVNUX1NJWkUpO1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTE3MjI9c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKnNjdHBfdW5wYWNrX2Nvb2tpZShcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0xNzc0LVxcdC8qIFZlcmlmeSB0aGUgY29va2llJ3MgTUFDLCBpZiBjb29raWUgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZC4gKi9cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MTc3NTpcXHRpZiAoc2N0cF9zayhlcC1cXHUwMDNlYmFzZS5zayktXFx1MDAzZWNvb2tpZV9hdXRoX2VuYWJsZSkge1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0xNzc2LVxcdFxcdHU4IG1hY1tTSEEyNTZfRElHRVNUX1NJWkVdO1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTIwMzE9c3RhdGljIHZvaWQgc2N0cF9wcm9jZXNzX2V4dF9wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMDUwLVxcdFxcdFxcdCAqL1xcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMDUxOlxcdFxcdFxcdGlmIChhc29jLVxcdTAwM2VlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIwNTItXFx0XFx0XFx0XFx0YXNvYy1cXHUwMDNlcGVlci5hdXRoX2NhcGFibGUgPSAxO1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTIxNDc9c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF92ZXJpZnlfcGFyYW0oc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIyMTEtXFx0Y2FzZSBTQ1RQX1BBUkFNX1JBTkRPTTpcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjIxMjpcXHRcXHRpZiAoIWVwLVxcdTAwM2VhdXRoX2VuYWJsZSlcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjIxMy1cXHRcXHRcXHRnb3RvIHVuaGFuZGxlZDtcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMjI4LVxcdGNhc2UgU0NUUF9QQVJBTV9DSFVOS1M6XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjIyMjk6XFx0XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTIyMzAtXFx0XFx0XFx0Z290byB1bmhhbmRsZWQ7XFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjI0NC1cXHRjYXNlIFNDVFBfUEFSQU1fSE1BQ19BTEdPOlxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyMjQ1OlxcdFxcdGlmICghZXAtXFx1MDAzZWF1dGhfZW5hYmxlKVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yMjQ2LVxcdFxcdFxcdGdvdG8gdW5oYW5kbGVkO1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jPTI1MzI9c3RhdGljIGludCBzY3RwX3Byb2Nlc3NfcGFyYW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjY5MC1cXHRjYXNlIFNDVFBfUEFSQU1fUkFORE9NOlxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYzoyNjkxOlxcdFxcdGlmICghZXAtXFx1MDAzZWF1dGhfZW5hYmxlKVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yNjkyLVxcdFxcdFxcdGdvdG8gZmFsbF90aHJvdWdoO1xcbi0tXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI3MDQtXFx0Y2FzZSBTQ1RQX1BBUkFNX0hNQUNfQUxHTzpcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmM6MjcwNTpcXHRcXHRpZiAoIWVwLVxcdTAwM2VhdXRoX2VuYWJsZSlcXG5uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMtMjcwNi1cXHRcXHRcXHRnb3RvIGZhbGxfdGhyb3VnaDtcXG4tLVxcbm5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYy0yNzIxLVxcdGNhc2UgU0NUUF9QQVJBTV9DSFVOS1M6XFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jOjI3MjI6XFx0XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvc21fbWFrZV9jaHVuay5jLTI3MjMtXFx0XFx0XFx0Z290byBmYWxsX3Rocm91Z2g7XFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz02NDA9c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy02NTktXFx0LyogTWFrZSBzdXJlIHRoYXQgd2UgYW5kIHRoZSBwZWVyIGFyZSBBVVRIIGNhcGFibGUgKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo2NjA6XFx0aWYgKCFuZXQtXFx1MDAzZXNjdHAuYXV0aF9lbmFibGUgfHwgIWFzb2MtXFx1MDAzZXBlZXIuYXV0aF9jYXBhYmxlKVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTY2MS1cXHRcXHRyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NJRztcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTcwNz1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFEX2NlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTc5NS1cXHRjaWQgPSBwZWVyX2luaXQtXFx1MDAzZWNodW5rX2hkci50eXBlO1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjc5NjpcXHRpZiAoIXNjdHBfc2soc2spLVxcdTAwM2Vjb29raWVfYXV0aF9lbmFibGUgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy03OTctXFx0ICAgICFzY3RwX3ZlcmlmeV9pbml0KG5ldCwgZXAsIGFzb2MsIGNpZCwgcGVlcl9pbml0LCBjaHVuayxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTIyNDY9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayhcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzMzAtXFx0XFx0Y2lkID0gcGVlcl9pbml0LVxcdTAwM2VjaHVua19oZHIudHlwZTtcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMzMxOlxcdFxcdGlmICghc2N0cF9zayhlcC1cXHUwMDNlYmFzZS5zayktXFx1MDAzZWNvb2tpZV9hdXRoX2VuYWJsZSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzMzItXFx0XFx0ICAgICFzY3RwX3ZlcmlmeV9pbml0KG5ldCwgZXAsIGFzb2MsIGNpZCwgcGVlcl9pbml0LCBjaHVuayxcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTM1Nzk9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0aF9jaHVuayhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0zNTg0LVxcbm5ldC9zY3RwL3NvY2tldC5jOjM1ODU6XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvc29ja2V0LmMtMzU4Ni1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTM2MDk9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0zNjE1LVxcbm5ldC9zY3RwL3NvY2tldC5jOjM2MTY6XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvc29ja2V0LmMtMzYxNy1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTQzNDE9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXNjb25mX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy00MzU5LVxcbm5ldC9zY3RwL3NvY2tldC5jOjQzNjA6XFx0aWYgKGVwLVxcdTAwM2Vhc2NvbmZfZW5hYmxlIFxcdTAwMjZcXHUwMDI2IGVwLVxcdTAwM2VhdXRoX2VuYWJsZSkge1xcbm5ldC9zY3RwL3NvY2tldC5jLTQzNjEtXFx0XFx0c2N0cF9hdXRoX2VwX2FkZF9jaHVua2lkKGVwLCBTQ1RQX0NJRF9BU0NPTkYpO1xcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9NDM3MT1zdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hdXRoX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy00Mzk3LVxcbm5ldC9zY3RwL3NvY2tldC5jOjQzOTg6XFx0ZXAtXFx1MDAzZWF1dGhfZW5hYmxlID0gISFwYXJhbXMtXFx1MDAzZWFzc29jX3ZhbHVlO1xcbm5ldC9zY3RwL3NvY2tldC5jLTQzOTktXFx0cmV0dmFsID0gMDtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTUwMjE9c3RhdGljIGludCBzY3RwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy01MDU1LVxcbm5ldC9zY3RwL3NvY2tldC5jOjUwNTY6XFx0c3AtXFx1MDAzZWNvb2tpZV9hdXRoX2VuYWJsZSA9IG5ldC1cXHUwMDNlc2N0cC5jb29raWVfYXV0aF9lbmFibGU7XFxubmV0L3NjdHAvc29ja2V0LmMtNTA1Ny1cXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTY5NjA9c3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfaG1hY19pZGVudChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy02OTY5LVxcbm5ldC9zY3RwL3NvY2tldC5jOjY5NzA6XFx0aWYgKCFlcC1cXHUwMDNlYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvc29ja2V0LmMtNjk3MS1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTY5OTY9c3RhdGljIGludCBzY3RwX2dldHNvY2tvcHRfYWN0aXZlX2tleShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy03MDE4LVxcdH0gZWxzZSB7XFxubmV0L3NjdHAvc29ja2V0LmM6NzAxOTpcXHRcXHRpZiAoIWVwLVxcdTAwM2VhdXRoX2VuYWJsZSlcXG5uZXQvc2N0cC9zb2NrZXQuYy03MDIwLVxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9NzA3Nj1zdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9sb2NhbF9hdXRoX2NodW5rcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy03MTAzLVxcdH0gZWxzZSB7XFxubmV0L3NjdHAvc29ja2V0LmM6NzEwNDpcXHRcXHRpZiAoIWVwLVxcdTAwM2VhdXRoX2VuYWJsZSlcXG5uZXQvc2N0cC9zb2NrZXQuYy03MTA1LVxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9Nzg5NT1zdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9hdXRoX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy03OTE5LVxcdHBhcmFtcy5hc3NvY192YWx1ZSA9IGFzb2MgPyBhc29jLVxcdTAwM2VwZWVyLmF1dGhfY2FwYWJsZVxcbm5ldC9zY3RwL3NvY2tldC5jOjc5MjA6XFx0XFx0XFx0XFx0ICA6IHNjdHBfc2soc2spLVxcdTAwM2VlcC1cXHUwMDNlYXV0aF9lbmFibGU7XFxubmV0L3NjdHAvc29ja2V0LmMtNzkyMS1cXG4tLVxcbm5ldC9zY3RwL3N5c2N0bC5jPTk1PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHNjdHBfbmV0X3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvc2N0cC9zeXNjdGwuYy0xNzYtXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiY29va2llX2htYWNfYWxnXFxcIixcXG5uZXQvc2N0cC9zeXNjdGwuYzoxNzc6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC5zY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSxcXG5uZXQvc2N0cC9zeXNjdGwuYy0xNzgtXFx0XFx0Lm1heGxlblxcdFxcdD0gOCxcXG4tLVxcbm5ldC9zY3RwL3N5c2N0bC5jLTI2NC1cXHR7XFxubmV0L3NjdHAvc3lzY3RsLmM6MjY1OlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcImFkZGlwX25vYXV0aF9lbmFibGVcXFwiLFxcbm5ldC9zY3RwL3N5c2N0bC5jLTI2Ni1cXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnNjdHAuYWRkaXBfbm9hdXRoLFxcbi0tXFxubmV0L3NjdHAvc3lzY3RsLmMtMjg1LVxcdHtcXG5uZXQvc2N0cC9zeXNjdGwuYzoyODY6XFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiYXV0aF9lbmFibGVcXFwiLFxcbm5ldC9zY3RwL3N5c2N0bC5jOjI4NzpcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LnNjdHAuYXV0aF9lbmFibGUsXFxubmV0L3NjdHAvc3lzY3RsLmMtMjg4LVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbi0tXFxubmV0L3NjdHAvc3lzY3RsLmM9Mzg3PXN0YXRpYyBpbnQgcHJvY19zY3RwX2RvX2htYWNfYWxnKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbi0tXFxubmV0L3NjdHAvc3lzY3RsLmMtMzkwLVxcdHN0cnVjdCBuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZihjdGwtXFx1MDAzZWRhdGEsIHN0cnVjdCBuZXQsXFxubmV0L3NjdHAvc3lzY3RsLmM6MzkxOlxcdFxcdFxcdFxcdCAgICAgICBzY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSk7XFxubmV0L3NjdHAvc3lzY3RsLmMtMzkyLVxcdHN0cnVjdCBjdGxfdGFibGUgdGJsO1xcbi0tXFxubmV0L3NjdHAvc3lzY3RsLmMtNDA0LVxcdFxcdGlmICghc3RyY21wKHRtcCwgXFxcInNoYTI1NlxcXCIpKSB7XFxubmV0L3NjdHAvc3lzY3RsLmM6NDA1OlxcdFxcdFxcdG5ldC1cXHUwMDNlc2N0cC5jb29raWVfYXV0aF9lbmFibGUgPSAxO1xcbm5ldC9zY3RwL3N5c2N0bC5jLTQwNi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9zY3RwL3N5c2N0bC5jLTQwOC1cXHRcXHRpZiAoIXN0cmNtcCh0bXAsIFxcXCJub25lXFxcIikpIHtcXG5uZXQvc2N0cC9zeXNjdGwuYzo0MDk6XFx0XFx0XFx0bmV0LVxcdTAwM2VzY3RwLmNvb2tpZV9hdXRoX2VuYWJsZSA9IDA7XFxubmV0L3NjdHAvc3lzY3RsLmMtNDEwLVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L3NjdHAvc3lzY3RsLmMtNDEzLVxcdH1cXG5uZXQvc2N0cC9zeXNjdGwuYzo0MTQ6XFx0aWYgKG5ldC1cXHUwMDNlc2N0cC5jb29raWVfYXV0aF9lbmFibGUpXFxubmV0L3NjdHAvc3lzY3RsLmMtNDE1LVxcdFxcdHRibC5kYXRhID0gKGNoYXIgKilcXFwic2hhMjU2XFxcIjtcXG4tLVxcbm5ldC9zY3RwL3N5c2N0bC5jPTQ4OD1zdGF0aWMgaW50IHByb2Nfc2N0cF9kb19hdXRoKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbi0tXFxubmV0L3NjdHAvc3lzY3RsLmMtNDkwLXtcXG5uZXQvc2N0cC9zeXNjdGwuYzo0OTE6XFx0c3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKGN0bC1cXHUwMDNlZGF0YSwgc3RydWN0IG5ldCwgc2N0cC5hdXRoX2VuYWJsZSk7XFxubmV0L3NjdHAvc3lzY3RsLmMtNDkyLVxcdHN0cnVjdCBjdGxfdGFibGUgdGJsO1xcbi0tXFxubmV0L3NjdHAvc3lzY3RsLmMtNTAwLVxcdGVsc2VcXG5uZXQvc2N0cC9zeXNjdGwuYzo1MDE6XFx0XFx0dGJsLmRhdGEgPSBcXHUwMDI2bmV0LVxcdTAwM2VzY3RwLmF1dGhfZW5hYmxlO1xcbm5ldC9zY3RwL3N5c2N0bC5jLTUwMi1cXG4tLVxcbm5ldC9zY3RwL3N5c2N0bC5jLTUwNi1cXG5uZXQvc2N0cC9zeXNjdGwuYzo1MDc6XFx0XFx0bmV0LVxcdTAwM2VzY3RwLmF1dGhfZW5hYmxlID0gbmV3X3ZhbHVlO1xcbm5ldC9zY3RwL3N5c2N0bC5jLTUwOC1cXHRcXHQvKiBVcGRhdGUgdGhlIHZhbHVlIGluIHRoZSBjb250cm9sIHNvY2tldCAqL1xcbm5ldC9zY3RwL3N5c2N0bC5jLTUwOS1cXHRcXHRsb2NrX3NvY2soc2spO1xcbm5ldC9zY3RwL3N5c2N0bC5jOjUxMDpcXHRcXHRzY3RwX3NrKHNrKS1cXHUwMDNlZXAtXFx1MDAzZWF1dGhfZW5hYmxlID0gbmV3X3ZhbHVlO1xcbm5ldC9zY3RwL3N5c2N0bC5jLTUxMS1cXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NDo1Mi44ODY5NDc2NjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTI2NjQ1OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIFNDVFAgQ29uZmlndXJhdGlvbiBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhdXRoX2VuYWJsZWAgdGhpbmcsIGFuZCBpdCdzIGZsYWdnZWQgYXMgYSBgc3lzY3RsYCwgbm90IGEgS2NvbmZpZyBvcHRpb24uIEludGVyZXN0aW5nLiBJdCdzIG1ha2luZyBtZSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcGF0aHMuIFRoZSBtYWluIFNDVFAgZmxhZywgYElQX1NDVFBgLCB0aGF0J3MgS2NvbmZpZy4gTm93IEknbSBzdGFydGluZyB0byB3b25kZXIgaWYgdGhlcmUgYXJlICpvdGhlciogY29uZmlndXJhdGlvbnMgYnVyaWVkIGluIGhlcmUuIEl0IGFsd2F5cyBwYXlzIHRvIGJlIHRob3JvdWdoLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQvc2N0cC9LY29uZmlnYCBzcGVjaWZpY2FsbHkgYW5kIHNlZSBpZiBJIGNhbiBmaW5kIGBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfTk9ORWAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIHJlbGF0ZWQsIHBvdGVudGlhbGx5IGltcGFjdGZ1bCwgc2V0dGluZy4gR290dGEgbWFwIG91dCB0aGUgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ2NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU0OjU3LjAxMzU5NjQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE2ODkyMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfTk9ORVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9LY29uZmlnPTYyPWNvbmZpZyBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfU0hBMjU2XFxuLS1cXG5uZXQvc2N0cC9LY29uZmlnLTY0LVxcbm5ldC9zY3RwL0tjb25maWc6NjU6Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19OT05FXFxubmV0L3NjdHAvS2NvbmZpZy02Ni1cXHRib29sIFxcXCJOb25lXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NTowMS40MzA0OTU0ODRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyOTAxMzEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIFNDVFAgS2NvbmZpZyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nLCBcIlRpbWUgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSBlbnRpcmUgYG5ldC9zY3RwL0tjb25maWdgIGZpbGUuXCIgR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBuZXR3b3JraW5nIGFuZCB0aGUgTGludXgga2VybmVsLCB0aGlzIGBLY29uZmlnYCBmaWxlIGlzIGdvaW5nIHRvIGJlIHRoZSBjZW50cmFsIGNvbnRyb2wgcG9pbnQgZm9yIGNvbmZpZ3VyaW5nIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUCkgZmVhdHVyZXMgYW5kIG1vZHVsZXMgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHNldmVyYWwga2V5IHRoaW5ncy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHZhcmlvdXMgU0NUUCBvcHRpb25zIGFyZSBsYWlkIG91dCBoaWVyYXJjaGljYWxseSwgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZW0sIGFuZCBob3cgdGhleSByZWxhdGUgdG8gb3RoZXIgbmV0d29ya2luZyBzdWJzeXN0ZW1zIHdpdGhpbiB0aGUga2VybmVsLiBJJ2xsIGJlIGZvY3VzZWQgb24gaG93IGl0J3Mgc3RydWN0dXJlZCwgaXRzIG9yZ2FuaXphdGlvbiwgdGhlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIHN5bWJvbHMsIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGFzc29jaWF0ZWQgaGVscCB0ZXh0LiBJIGFudGljaXBhdGUgZmluZGluZyBjb25kaXRpb25hbHMgYmFzZWQgb24gYXJjaGl0ZWN0dXJlLCBrZXJuZWwgdmVyc2lvbiwgb3Igb3RoZXIgZGVwZW5kZW5jaWVzIGxpa2Ugd2hldGhlciBvdGhlciBuZXR3b3JraW5nIHByb3RvY29scyBhcmUgZW5hYmxlZC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IG9wdGlvbnMgZm9yIGJ1bmRsZWQgc3VwcG9ydCBzdWNoIGFzIE0zVUEgb3Igb3ZlciBJUHNlYyBhcmUgaGFuZGxlZCwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgZmVhdHVyZXMgc3VjaCBhcyBtdWx0aXBsZSBzdHJlYW1zLCBhbmQgaG93IHRoZXNlIHNldHRpbmdzIGFyZSBleHBvc2VkIGluIHRoZSBidWlsZCBzeXN0ZW0uIFRoaXMgYEtjb25maWdgIGZpbGUgd2lsbCBwcm92aWRlIHRoZSB1bHRpbWF0ZSBtYXAgb2YgaG93IFNDVFAgaXMgZW5hYmxlZCwgY3VzdG9taXplZCwgYW5kIGludGVncmF0ZWQgaW50byBhIHNwZWNpZmljIExpbnV4IGtlcm5lbCBidWlsZC4gVW5kZXJzdGFuZGluZyB0aGlzIGZpbGUgaXMgcGFyYW1vdW50IHRvIGFueSBlZmZlY3RpdmUga2VybmVsLWxldmVsIFNDVFAgZGV2ZWxvcG1lbnQgYW5kIHR1bmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NTowNS44NTk1MTE0MDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY3RwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFNDVFAgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIElQX1NDVFBcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgU0NUUCBQcm90b2NvbFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgMTI6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDEzOlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2xcXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBGcm9tIFJGQyAyOTYwIFxcdTAwM2NodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTYwLnR4dFxcdTAwM2UuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgXFxcIlNDVFAgaXMgYSByZWxpYWJsZSB0cmFuc3BvcnQgcHJvdG9jb2wgb3BlcmF0aW5nIG9uIHRvcCBvZiBhXFxuICAyMDpcXHRcXHQgIGNvbm5lY3Rpb25sZXNzIHBhY2tldCBuZXR3b3JrIHN1Y2ggYXMgSVAuICBJdCBvZmZlcnMgdGhlIGZvbGxvd2luZ1xcbiAgMjE6XFx0XFx0ICBzZXJ2aWNlcyB0byBpdHMgdXNlcnM6XFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgLS0gYWNrbm93bGVkZ2VkIGVycm9yLWZyZWUgbm9uLWR1cGxpY2F0ZWQgdHJhbnNmZXIgb2YgdXNlciBkYXRhLFxcbiAgMjQ6XFx0XFx0ICAtLSBkYXRhIGZyYWdtZW50YXRpb24gdG8gY29uZm9ybSB0byBkaXNjb3ZlcmVkIHBhdGggTVRVIHNpemUsXFxuICAyNTpcXHRcXHQgIC0tIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiB1c2VyIG1lc3NhZ2VzIHdpdGhpbiBtdWx0aXBsZSBzdHJlYW1zLFxcbiAgMjY6XFx0XFx0ICB3aXRoIGFuIG9wdGlvbiBmb3Igb3JkZXItb2YtYXJyaXZhbCBkZWxpdmVyeSBvZiBpbmRpdmlkdWFsIHVzZXJcXG4gIDI3OlxcdFxcdCAgbWVzc2FnZXMsXFxuICAyODpcXHRcXHQgIC0tIG9wdGlvbmFsIGJ1bmRsaW5nIG9mIG11bHRpcGxlIHVzZXIgbWVzc2FnZXMgaW50byBhIHNpbmdsZSBTQ1RQXFxuICAyOTpcXHRcXHQgIHBhY2tldCwgYW5kXFxuICAzMDpcXHRcXHQgIC0tIG5ldHdvcmstbGV2ZWwgZmF1bHQgdG9sZXJhbmNlIHRocm91Z2ggc3VwcG9ydGluZyBvZiBtdWx0aS1cXG4gIDMxOlxcdFxcdCAgaG9taW5nIGF0IGVpdGhlciBvciBib3RoIGVuZHMgb2YgYW4gYXNzb2NpYXRpb24uXFxcIlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBwcm90b2NvbCBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDM0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjdHAuIERlYnVnIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGJ5IHRoZVxcbiAgMzU6XFx0XFx0ICBrZXJuZWwncyBkeW5hbWljIGRlYnVnZ2luZyBmcmFtZXdvcmsuXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRpZiBJUF9TQ1RQXFxuICA0MDpcXHRcXG4gIDQxOlxcdGNvbmZpZyBTQ1RQX0RCR19PQkpDTlRcXG4gIDQyOlxcdFxcdGJvb2wgXFxcIlNDVFA6IERlYnVnIG9iamVjdCBjb3VudHNcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlNcXG4gIDQ0OlxcdFxcdGhlbHBcXG4gIDQ1OlxcdFxcdCAgSWYgeW91IHNheSBZLCB0aGlzIHdpbGwgZW5hYmxlIGRlYnVnZ2luZyBzdXBwb3J0IGZvciBjb3VudGluZyB0aGVcXG4gIDQ2OlxcdFxcdCAgdHlwZSBvZiBvYmplY3RzIHRoYXQgYXJlIGN1cnJlbnRseSBhbGxvY2F0ZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDQ3OlxcdFxcdCAgaWRlbnRpZnlpbmcgbWVtb3J5IGxlYWtzLiBUaGlzIGRlYnVnIGluZm9ybWF0aW9uIGNhbiBiZSB2aWV3ZWQgYnlcXG4gIDQ4OlxcdFxcdCAgJ2NhdCAvcHJvYy9uZXQvc2N0cC9zY3RwX2RiZ19vYmpjbnQnXFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTlxcbiAgNTE6XFx0XFxuICA1MjpcXHRjaG9pY2VcXG4gIDUzOlxcdFxcdHByb21wdCBcXFwiRGVmYXVsdCBTQ1RQIGNvb2tpZSBhdXRoZW50aWNhdGlvbiBtZXRob2RcXFwiXFxuICA1NDpcXHRcXHRkZWZhdWx0IFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEEyNTZcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgZGVmYXVsdCBTQ1RQIGNvb2tpZSBhdXRoZW50aWNhdGlvbiBtZXRob2QsIGZvclxcbiAgNTc6XFx0XFx0ICB3aGVuIGEgbWV0aG9kIGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2VsZWN0ZWQgdmlhIHRoZVxcbiAgNTg6XFx0XFx0ICBuZXQuc2N0cC5jb29raWVfaG1hY19hbGcgc3lzY3RsLlxcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQgIElmIHVuc3VyZSwgY2hvb3NlIHRoZSBkZWZhdWx0IChITUFDLVNIQTI1NikuXFxuICA2MTpcXHRcXG4gIDYyOlxcdGNvbmZpZyBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfU0hBMjU2XFxuICA2MzpcXHRcXHRib29sIFxcXCJITUFDLVNIQTI1NlxcXCJcXG4gIDY0OlxcdFxcbiAgNjU6XFx0Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19OT05FXFxuICA2NjpcXHRcXHRib29sIFxcXCJOb25lXFxcIlxcbiAgNjc6XFx0XFxuICA2ODpcXHRlbmRjaG9pY2VcXG4gIDY5OlxcdFxcbiAgNzA6XFx0Y29uZmlnIElORVRfU0NUUF9ESUFHXFxuICA3MTpcXHRcXHRkZXBlbmRzIG9uIElORVRfRElBR1xcbiAgNzI6XFx0XFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXG4gIDc1OlxcdGVuZGlmICMgSVBfU0NUUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NTowNS44NTk2MTk5MDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU5MTg1NDM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTQ1RQIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgaXQgbG9va3MgbGlrZSBgSVBfU0NUUGAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UgbmVlZCB0byBjb25zaWRlciBoZXJlLiBOb3csIGxldCdzIGNhcmVmdWxseSByZXZpZXcgdGhlIGZvY3VzIHN5bWJvbHMgaWRlbnRpZmllZC4gSSdtIHNlZWluZzpcblxuKiAgIGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgXG4qICAgYHNjdHBfcGFja2V0X3RyYW5zbWl0YFxuKiAgIGBzY3RwX3NmX2RvXzVfMURfY2VgXG4qICAgYHNjdHBfc2ZfZG9fZHVwY29va19hYFxuKiAgIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmBcbiogICBgc2N0cF9zZl9kb19kdXBjb29rX2RgXG4qICAgYHNjdHBfc2ZfYXV0aGVudGljYXRlYFxuXG5UaGVzZSBhbGwgbG9vayByZWxldmFudCwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHJlLWV2YWx1YXRlIGBzY3RwX3BhY2tldF90cmFuc21pdGAuIEl0IHNlZW1lZCBhIGJpdCBicm9hZCBhdCBmaXJzdCwgYnV0IHJlbWVtYmVyaW5nIHRoZSBlcnJvciBoYW5kbGluZyBmbG93LCB0aGUgYWN0dWFsIGVycm9yIGhhbmRsaW5nIHJlc2lkZXMgd2l0aGluIGEgc3RhdGljIGZ1bmN0aW9uIGBzY3RwX3BhY2tldF9wYWNrYCBhbmQsIGNyaXRpY2FsbHksIGBzY3RwX3BhY2tldF90cmFuc21pdGAgY2FsbHMgdGhpcyBmdW5jdGlvbi4gU28sIEkgd2lsbCBpbmNsdWRlIGl0LlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGF0IHRoZSBhdXRoZW50aWNhdGlvbi1yZWxhdGVkIHN5bWJvbHMgYXJlIGFjdHVhbGx5IHN0YXRpYyBhcyBJIGluaXRpYWxseSB0aG91Z2h0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgc29tZXRoaW5nLlxuXG5Pa2F5LCBjaGVja2luZyBgbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNgLCBgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeWAgKmlzKiBpbmRlZWQgc3RhdGljLiBJdHMgY2FsbGVycyBhcmUgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAsIGFuZCBgc2N0cF9zZl9kb19kdXBjb29rX2RgLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC5cblxuTm93IHRvIHJlLXZlcmlmeSBgc2N0cF9zZl9hdXRoZW50aWNhdGVgLiBZZXMsIGl0J3MgYWxzbyBzdGF0aWMsIGluIGBuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE4MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU1OjEzLjQ1MTQ3ODIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjczNzQwMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9zZl9hdXRoZW50aWNhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTE0Mj1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfdmlvbGF0aW9uX2NodW5rKFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTQ5LVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjE1MDpzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xNTEtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz02NDA9c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy02NzItXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NjczOlxcdHJldHVybiBzY3RwX3NmX2F1dGhlbnRpY2F0ZShhc29jLCBcXHUwMDI2YXV0aCk7XFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNjc0LX1cXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTQzMzU9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZWF0X2Z3ZF90c25fZmFzdChcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ0MjItICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDQyMzpzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NDI0LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDUwMT1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9lYXRfYXV0aChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NTI3LVxcdGF1dGhfaGRyID0gKHN0cnVjdCBzY3RwX2F1dGhoZHIgKiljaHVuay1cXHUwMDNlc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQ1Mjg6XFx0ZXJyb3IgPSBzY3RwX3NmX2F1dGhlbnRpY2F0ZShhc29jLCBjaHVuayk7XFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDUyOS1cXHRzd2l0Y2ggKGVycm9yKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU1OjEzLjY3ODg1ODU3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc3MDQ1MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uICoqQW5hbHl6aW5nIHRoZSBgc2N0cF9zZl9hdXRoZW50aWNhdGVgIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvIGlzIGNhbGxpbmcgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgYHNjdHBfc2ZfZWF0X2F1dGhgLCBgc2N0cF9zZl9kb181XzFEX2NlYCwgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYW5kIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAgYXJlIGFsbCBjYWxsaW5nIGl0LlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIEkgY291bGQgaGF2ZSBzd29ybiB0aGF0IGBzY3RwX3NmX2VhdF9hdXRoYCB3YXMgc3RhdGljIHRvby4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYmVjYXVzZSBteSBtZW1vcnkgbWlnaHQgbm90IGJlIHRoZSBiZXN0IGFuZCB0aGlzIGlzIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NjIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6NTU6MTguNzU1OTA4NDkzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIzNDQ2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9zZl9lYXRfYXV0aFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDQyMz1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ1MDAtXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDUwMTplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9lYXRfYXV0aChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDUwMi1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jPTQ5OD1yZWNvbmZfY2h1bmtfZXZlbnRfdGFibGVbU0NUUF9OVU1fUkVDT05GX0NIVU5LX1RZUEVTXVtTQ1RQX1NUQVRFX05VTV9TVEFURVNdID0ge1xcbi0tXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jLTUwNy1cXHQvKiBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQgKi8gXFxcXFxcbm5ldC9zY3RwL3NtX3N0YXRldGFibGUuYzo1MDg6XFx0VFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lYXRfYXV0aCksIFxcXFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMtNTA5LVxcdC8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8gXFxcXFxcbm5ldC9zY3RwL3NtX3N0YXRldGFibGUuYzo1MTA6XFx0VFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lYXRfYXV0aCksIFxcXFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMtNTExLVxcdC8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcXFxcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jOjUxMjpcXHRUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2VhdF9hdXRoKSwgXFxcXFxcbm5ldC9zY3RwL3NtX3N0YXRldGFibGUuYy01MTMtXFx0LyogU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UICovIFxcXFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmM6NTE0OlxcdFRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X2F1dGgpLCBcXFxcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jLTUxNS1cXHQvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFxcXFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmM6NTE2OlxcdFRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X2F1dGgpLCBcXFxcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jLTUxNy1cXHQvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFxcXFxcXG5uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmM6NTE4OlxcdFRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X2F1dGgpLCBcXFxcXFxubmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jLTUxOS19IC8qIFRZUEVfU0NUUF9BVVRIICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU1OjE4LjkxODI1OTI0OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDA3OTc4MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTQ1RQIEZ1bmN0aW9uIEF0dHJpYnV0ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBvdmVyIHRoaXMgU0NUUCBjb2RlLCBzcGVjaWZpY2FsbHkgYXQgdGhlc2UgZnVuY3Rpb25zLiBJdCdzIGdvb2QgdG8gY2xhcmlmeSB0aGVzZSBkZXRhaWxzLiBJIGNhbiBzZWUgdGhhdCBgc2N0cF9zZl9lYXRfYXV0aGAgaXMgZGVmaW5pdGVseSBub3QgZGVjbGFyZWQgYXMgc3RhdGljIOKAkyB0aGF0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIEFuZCBJIGNvbmZpcm0gdGhhdCBgc2N0cF9zZl9kb181XzFEX2NlYCBpcyBhbHNvIG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSBleHBlY3RlZC4gTm93LCBJIGhhdmUgYSBmZWVsaW5nIGFib3V0IHRoZSBgc2N0cF9zZl9kb19kdXBjb29rXypgIGZhbWlseS4gTGV0J3Mgc2VlLi4uIGFyZSBgc2N0cF9zZl9kb19kdXBjb29rX2FgLCBgc2N0cF9zZl9kb19kdXBjb29rX2JgLCBhbmQgYHNjdHBfc2ZfZG9fZHVwY29va19kYCBkZWNsYXJlZCBzdGF0aWM/IEdvdHRhIGRvdWJsZSBjaGVjayB0aG9zZSB0byBiZSBzdXJlLCBhbmQgSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGF0IGluIG15IHdvcmtpbmcgZG9jdW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTUwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6NTU6MjMuMzI2MjQwNTcyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE3MjI1ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9zZl9kb19kdXBjb29rX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MTg2MD1zdGF0aWMgaW50IHNjdHBfc2ZfZG9fYXNzb2NfdXBkYXRlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTg4OC0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoxODg5OnN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2EoXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTg5MC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMDE2LS8qIFRoaXMgY2FzZSByZXByZXNlbnRzIGFuIGluaXRpYWxpemF0aW9uIGNvbGxpc2lvbi4gICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MjAxNzpzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19iKFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIwMTgtXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjEwNS0vKiBUaGlzIGNhc2UgcmVwcmVzZW50cyBhbiBpbml0aWFsaXphdGlvbiBjb2xsaXNpb24uICAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIxMDY6c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYyhcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMTA3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIxMjgtLyogVGhpcyBjYXNlIHJlcHJlc2VudHMgYW4gaW5pdGlhbGl6YXRpb24gY29sbGlzaW9uLiAgKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMTI5OnN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjEzMC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz0yMjQ2PWVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2soXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzU0LVxcdGNhc2UgJ0EnOiAvKiBBc3NvY2lhdGlvbiByZXN0YXJ0LiAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIzNTU6XFx0XFx0cmV0dmFsID0gc2N0cF9zZl9kb19kdXBjb29rX2EobmV0LCBlcCwgYXNvYywgY2h1bmssIGNvbW1hbmRzLFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNTYtXFx0XFx0XFx0XFx0XFx0ICAgICAgbmV3X2Fzb2MpO1xcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjM1OS1cXHRjYXNlICdCJzogLyogQ29sbGlzaW9uIGNhc2UgQi4gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMzYwOlxcdFxcdHJldHZhbCA9IHNjdHBfc2ZfZG9fZHVwY29va19iKG5ldCwgZXAsIGFzb2MsIGNodW5rLCBjb21tYW5kcyxcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzYxLVxcdFxcdFxcdFxcdFxcdCAgICAgIG5ld19hc29jKTtcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNjQtXFx0Y2FzZSAnQyc6IC8qIENvbGxpc2lvbiBjYXNlIEMuICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MjM2NTpcXHRcXHRyZXR2YWwgPSBzY3RwX3NmX2RvX2R1cGNvb2tfYyhuZXQsIGVwLCBhc29jLCBjaHVuaywgY29tbWFuZHMsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjM2Ni1cXHRcXHRcXHRcXHRcXHQgICAgICBuZXdfYXNvYyk7XFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzY5LVxcdGNhc2UgJ0QnOiAvKiBDb2xsaXNpb24gY2FzZSBELiAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIzNzA6XFx0XFx0cmV0dmFsID0gc2N0cF9zZl9kb19kdXBjb29rX2QobmV0LCBlcCwgYXNvYywgY2h1bmssIGNvbW1hbmRzLFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNzEtXFx0XFx0XFx0XFx0XFx0ICAgICAgbmV3X2Fzb2MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NToyMy40NDc5Njk5NzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAwOTg1NTc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFN0YXRpYyBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aGUgZnVuY3Rpb25zIEknbSBleGFtaW5pbmcgc2VlbSB0byBiZSBzdGF0aWNhbGx5IGRlY2xhcmVkLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCdzIGNhbGxpbmcgdGhlbSwgd2hpY2ggYXBwZWFycyB0byBiZSBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYC4gQmFzZWQgb24gdGhpcywgSSBuZWVkIHRvIGZvY3VzIG15IGludmVzdGlnYXRpb24gb24gYSBzZWxlY3QgZ3JvdXAgb2Ygc3ltYm9scyByZWxhdGVkIHRvIHRoaXMuXG5cblRoZSBjcnVjaWFsIG9uZXMgdG8gZXhhbWluZSBhcmU6XG4tICAgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2Bcbi0gICBgc2N0cF9wYWNrZXRfdHJhbnNtaXRgXG4tICAgYHNjdHBfc2ZfZG9fNV8xRF9jZWBcbi0gICBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYFxuLSAgIGBzY3RwX3NmX2VhdF9hdXRoYFxuXG5Ob3csIEknbGwgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AgaXMsIGluIGZhY3QsIG5vbi1zdGF0aWMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBkaWdnaW5nIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODEyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA3OjU1OjI5LjQ1NzgyODM4NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM5NTY2NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvYXV0aC5jPTU5NT1pbnQgc2N0cF9hdXRoX3JlY3ZfY2lkKGVudW0gc2N0cF9jaWQgY2h1bmssIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxcbi0tXFxubmV0L3NjdHAvYXV0aC5jLTYxNS0gKi9cXG5uZXQvc2N0cC9hdXRoLmM6NjE2OmludCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxubmV0L3NjdHAvYXV0aC5jLTYxNy1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXFxuLS1cXG5uZXQvc2N0cC9vdXRwdXQuYz00MzY9c3RhdGljIGludCBzY3RwX3BhY2tldF9wYWNrKHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LFxcbi0tXFxubmV0L3NjdHAvb3V0cHV0LmMtNTE5LVxcdFxcdGlmIChhdXRoKSB7XFxubmV0L3NjdHAvb3V0cHV0LmM6NTIwOlxcdFxcdFxcdGlmIChzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWModHAtXFx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXFxubmV0L3NjdHAvb3V0cHV0LmMtNTIxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGFja2V0LVxcdTAwM2VhdXRoLVxcdTAwM2VzaGtleSwgZ2ZwKSkge1xcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDQyMz1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ0NzktXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDQ4MDpcXHRpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGFzb2MsIGNodW5rLVxcdTAwM2Vza2IsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDQ4MS1cXHRcXHRcXHRcXHQgICAgIChzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICopY2h1bmstXFx1MDAzZWNodW5rX2hkcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDc6NTU6MjkuNzk3NDIzMTc0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzODYyNTMzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0NUUCBBdXRoZW50aWNhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3Qgc3RhdGljIGNvZGUsIHRoYXQncyBjbGVhci4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBjb2RlIHBvaW50cyBtZSB0byB0aGVzZSBrZXkgc3ltYm9scyBmb3IgZGVlcGVyIGFuYWx5c2lzOiBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYCwgYHNjdHBfcGFja2V0X3RyYW5zbWl0YCwgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tgLCBhbmQgYHNjdHBfc2ZfZWF0X2F1dGhgLiBJJ20gc2VlaW5nIHRoZSBgSVBfU0NUUGAgY29uZmlnIGJlaW5nIHJlbGV2YW50LlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IGBJUF9TQ1RQYCBpcyB0aGUgb25seSBjb25maWcgb2YgcmVsZXZhbmNlIGhlcmUuIEhtLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgY29tZSBpbnRvIHBsYXkuIEFoLCBhbHJpZ2h0LiBMb29rcyBsaWtlIGBJUF9TQ1RQYCBhbHNvIHNlbGVjdHMgYENSWVBUT19MSUJfU0hBMWAsIGBDUllQVE9fTElCX1NIQTI1NmAsIGFuZCBgQ1JZUFRPX0xJQl9VVElMU2AuIFNvLCB5ZXMsIGBJUF9TQ1RQYCBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBmdW5jdGlvbmFsIGltcGFjdC4gVGhlIHBhdGNoIGlzIGFib3V0IGhhbmRsaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGluIGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgb2YgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AgYW5kIHRoZW4gbW9kaWZpZXMgdGhlIGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24gaW4gYHNjdHBfcGFja2V0X3BhY2tgIGFuZCBgc2N0cF9zZl9hdXRoZW50aWNhdGVgIHRvIGhhbmRsZSBhbiBlcnJvci4gVGhpcyBwcmV2ZW50cyB0aGUgcG9zc2liaWxpdHkgb2YgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igc2lsZW50IGZhaWx1cmVzLiBUaGlzIHR5cGUgb2YgY29yZSBuZXR3b3JrIGxvZ2ljIGNoYW5nZSBoYXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuXG5cblRoZXJlZm9yZSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gZnV6ei4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY3JpdGljYWwgYXJlYS5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjE1LCJPdXRwdXRUb2tlbnMiOjE5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNzo1NTozOC4xODM2Nzk3NzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ3MjQ2MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNcIixcbiAgICBcInNjdHBfcGFja2V0X3RyYW5zbWl0XCIsXG4gICAgXCJzY3RwX3NmX2RvXzVfMURfY2VcIixcbiAgICBcInNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va1wiLFxuICAgIFwic2N0cF9zZl9lYXRfYXV0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT01FTSkuIEl0IHVwZGF0ZXMgdGhlIHJldHVybiB0eXBlIG9mIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyBhbmQgbW9kaWZpZXMgY2FsbGVycyBpbiBzY3RwX3BhY2tldF9wYWNrIGFuZCBzY3RwX3NmX2F1dGhlbnRpY2F0ZSB0byBoYW5kbGUgdGhlIGVycm9yLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHNpbGVudCBmYWlsdXJlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY1wiLFxuICAgIFwic2N0cF9wYWNrZXRfdHJhbnNtaXRcIixcbiAgICBcInNjdHBfc2ZfZG9fNV8xRF9jZVwiLFxuICAgIFwic2N0cF9zZl9kb181XzJfNF9kdXBjb29rXCIsXG4gICAgXCJzY3RwX3NmX2VhdF9hdXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gSXQgdXBkYXRlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjIGFuZCBtb2RpZmllcyBjYWxsZXJzIGluIHNjdHBfcGFja2V0X3BhY2sgYW5kIHNjdHBfc2ZfYXV0aGVudGljYXRlIHRvIGhhbmRsZSB0aGUgZXJyb3IsIHByZXZlbnRpbmcgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc2lsZW50IGZhaWx1cmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow7bctf[1] Phase: Succeeded StartedAt: 2026-08-04 07:55:50 +0000 UTC FinishedAt: 2026-08-04 07:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 07:55:50 +0000 UTC FinishedAt: 2026-08-04 07:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2] Phase: Succeeded StartedAt: 2026-08-04 07:55:50 +0000 UTC FinishedAt: 2026-08-04 11:37:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-04 07:55:50 +0000 UTC FinishedAt: 2026-08-04 11:37:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","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-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-04 07:55:50 +0000 UTC FinishedAt: 2026-08-04 07:56:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-04 07:55:50 +0000 UTC FinishedAt: 2026-08-04 07:55:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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-workflow7bctf/series-workflow7bctf-convert-artifact-1468678004/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-04 07:56:01 +0000 UTC FinishedAt: 2026-08-04 08:15:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-04 07:56:01 +0000 UTC FinishedAt: 2026-08-04 08:15:31 +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:*d2b5e3dc-5499-4d63-8872-ea73adec18e2,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-workflow7bctf/series-workflow7bctf-convert-artifact-1468678004/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": "19fa5447-a7bc-4479-9bdc-a024611b8c51", "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-workflow7bctf/series-workflow7bctf-build-action-1362371698/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-04 07:56:01 +0000 UTC FinishedAt: 2026-08-04 08:15:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d2b5e3dc-5499-4d63-8872-ea73adec18e2,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-workflow7bctf/series-workflow7bctf-convert-artifact-1468678004/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": "19fa5447-a7bc-4479-9bdc-a024611b8c51", "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-workflow7bctf/series-workflow7bctf-build-action-1362371698/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-04 08:15:31 +0000 UTC FinishedAt: 2026-08-04 08:15:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-04 08:15:31 +0000 UTC FinishedAt: 2026-08-04 08:15:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-04 08:15:31 +0000 UTC FinishedAt: 2026-08-04 08:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-04 08:15:31 +0000 UTC FinishedAt: 2026-08-04 08:15:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","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-workflow7bctf/series-workflow7bctf-convert-artifact-265884211/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-04 08:15:42 +0000 UTC FinishedAt: 2026-08-04 08:17:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-04 08:15:42 +0000 UTC FinishedAt: 2026-08-04 08:17:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*19fa5447-a7bc-4479-9bdc-a024611b8c51,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-workflow7bctf/series-workflow7bctf-build-action-1362371698/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-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-04 08:17:45 +0000 UTC FinishedAt: 2026-08-04 08:17:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-04 08:17:45 +0000 UTC FinishedAt: 2026-08-04 08:17:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-04 08:17:45 +0000 UTC FinishedAt: 2026-08-04 08:33:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-04 08:17:45 +0000 UTC FinishedAt: 2026-08-04 08:33:51 +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:*d2b5e3dc-5499-4d63-8872-ea73adec18e2,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-workflow7bctf/series-workflow7bctf-convert-artifact-265884211/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": "66355234-075c-4419-870c-ddf0143afc9e", "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-workflow7bctf/series-workflow7bctf-build-action-3216644839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-04 08:17:45 +0000 UTC FinishedAt: 2026-08-04 08:33:41 +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:*d2b5e3dc-5499-4d63-8872-ea73adec18e2,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-workflow7bctf/series-workflow7bctf-convert-artifact-265884211/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": "66355234-075c-4419-870c-ddf0143afc9e", "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-workflow7bctf/series-workflow7bctf-build-action-3216644839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-04 08:33:51 +0000 UTC FinishedAt: 2026-08-04 08:33:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-04 08:33:51 +0000 UTC FinishedAt: 2026-08-04 08:33:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-04 08:33:51 +0000 UTC FinishedAt: 2026-08-04 08:35:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-04 08:33:51 +0000 UTC FinishedAt: 2026-08-04 08:35:46 +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:*66355234-075c-4419-870c-ddf0143afc9e,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-workflow7bctf/series-workflow7bctf-build-action-3216644839/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-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-04 08:35:56 +0000 UTC FinishedAt: 2026-08-04 11:37:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-04 08:35:56 +0000 UTC FinishedAt: 2026-08-04 11:37:51 +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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"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:*19fa5447-a7bc-4479-9bdc-a024611b8c51,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*66355234-075c-4419-870c-ddf0143afc9e,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-workflow7bctf/series-workflow7bctf-build-action-1362371698/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-workflow7bctf/series-workflow7bctf-build-action-3216644839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-04 08:35:56 +0000 UTC FinishedAt: 2026-08-04 08:36:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-04 08:35:56 +0000 UTC FinishedAt: 2026-08-04 08:36:01 +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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"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-workflow7bctf/series-workflow7bctf-convert-artifact-3981306924/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-04 08:35:56 +0000 UTC FinishedAt: 2026-08-04 08:35:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-04 08:35:56 +0000 UTC FinishedAt: 2026-08-04 08:35:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-04 08:35:56 +0000 UTC FinishedAt: 2026-08-04 08:35:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-04 08:36:06 +0000 UTC FinishedAt: 2026-08-04 11:37:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7bctf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1000fd7995e51deec872d154e0a40d82f7a539f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"02176ce0-597e-4170-b82b-287db7ee902a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-04 08:36:06 +0000 UTC FinishedAt: 2026-08-04 11:37:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*19fa5447-a7bc-4479-9bdc-a024611b8c51,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*66355234-075c-4419-870c-ddf0143afc9e,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-workflow7bctf/series-workflow7bctf-build-action-1362371698/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-workflow7bctf/series-workflow7bctf-build-action-3216644839/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-workflow7bctf/series-workflow7bctf-convert-artifact-3981306924/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,}