Name: series-workflow7gw7f Phase: Succeeded StartedAt: 2026-07-11 17:14:13 +0000 UTC FinishedAt: 2026-07-11 21:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[0] Phase: Succeeded StartedAt: 2026-07-11 17:14:13 +0000 UTC FinishedAt: 2026-07-11 17:34:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 17:14:13 +0000 UTC FinishedAt: 2026-07-11 17:34:32 +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": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "b6a2282b-c5f5-416d-8b7c-d3151cdc63dd" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_tx_completed", "xsk_tx_commit_batch", "__xsk_tx_peek_release_desc_batch", "xsk_tx_peek_release_shared_desc_batch", "xsk_tx_peek_release_desc_batch", "xsk_cq_submit_addr_single_locked", "xsk_drop_skb", "xsk_build_skb_zerocopy", "xsk_build_skb", "__xsk_generic_xmit", "xp_alloc_tx_descs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX3R4X2NvbXBsZXRlZCYjMzQ7LAogICAgJiMzNDt4c2tfdHhfY29tbWl0X2JhdGNoJiMzNDssCiAgICAmIzM0O19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkJiMzNDssCiAgICAmIzM0O3hza19kcm9wX3NrYiYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2ImIzM0OywKICAgICYjMzQ7X194c2tfZ2VuZXJpY194bWl0JiMzNDssCiAgICAmIzM0O3hwX2FsbG9jX3R4X2Rlc2NzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgbXVsdGktYnVmZmVyIChTRykgcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYywgaW50cm9kdWNpbmcgYmF0Y2hpbmcgYW5kIHJlY2xhaW0gZGVzY3JpcHRvcnMgdG8gaGFuZGxlIGludmFsaWQgZGVzY3JpcHRvcnMgYW5kIGJvdW5kYXJpZXMgY29ycmVjdGx5LiBJdCBtb2RpZmllcyBjb3JlIFhEUCBzb2NrZXQgY29kZSBpbiBuZXQveGRwL3hzay5jIGFuZCBuZXQveGRwL3hza19xdWV1ZS5oLiBUaGlzIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMzMGQ0ZjdlYmMxYWVmNzk2NmFiMzllZWQ5ZmRhNGE3NTk5MDhmZThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxNzozMzo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZHBfc29jay5oIGIvaW5jbHVkZS9uZXQveGRwX3NvY2suaFxuaW5kZXggZWJhYzYwYTNkOGExN2IuLjhiNTE4NzZlZmJlZDFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQveGRwX3NvY2suaFxuQEAgLTgwLDYgJiM0Mzs4MCw3IEBAIHN0cnVjdCB4ZHBfc29jayB7XG4gXHQgKiBjYWxsIG9mIF9feHNrX2dlbmVyaWNfeG1pdCgpLlxuIFx0ICovXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdGJvb2wgZHJhaW5fY29udDtcbiBcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbWFwX2xpc3Q7XG4gXHQvKiBQcm90ZWN0cyBtYXBfbGlzdCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaCBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxuaW5kZXggY2NiM2IzNTAwMDFmMjQuLmZiNTllMjA1YWM3ZDdlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcbkBAIC03OCw2ICYjNDM7NzgsOSBAQCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCB7XG4gXHR1MzIgY2h1bmtfc2l6ZTtcbiBcdHUzMiBjaHVua19zaGlmdDtcbiBcdHUzMiBmcmFtZV9sZW47XG4mIzQzO1x0dTMyIHR4X2Rlc2NzX25lbnRyaWVzO1xuJiM0MztcdHUzMiByZWNsYWltX2Rlc2NzO1xuJiM0MztcdHUzMiB0eF96Y19wZW5kaW5nX2Rlc2NzO1xuIFx0dTMyIHhkcF96Y19tYXhfc2VncztcbiBcdHU4IHR4X21ldGFkYXRhX2xlbjsgLyogaW5oZXJpdGVkIGZyb20gdW1lbSAqL1xuIFx0dTggY2FjaGVkX25lZWRfd2FrZXVwO1xuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXG5pbmRleCBiOTcwZjMwZWE5YjlkOC4uN2Q4YjQyYzRjMjE0YmEgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hzay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hzay5jXG5AQCAtNDk5LDYgJiM0Mzs0OTksMjMgQEAgdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdClcbiBcbiB2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKVxuIHtcbiYjNDM7XHR1MzIgcmVjbGFpbV9kZXNjcyA9IFJFQURfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkocmVjbGFpbV9kZXNjcykpIHtcbiYjNDM7XHRcdHUzMiBwZW5kaW5nX2Rlc2NzID0gUkVBRF9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5iX2VudHJpZXMgXHUwMDNjIHBlbmRpbmdfZGVzY3MpIHtcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MsXG4mIzQzO1x0XHRcdFx0ICAgcGVuZGluZ19kZXNjcyAtIG5iX2VudHJpZXMpO1xuJiM0MztcdFx0XHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgbmJfZW50cmllcyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcywgMCk7XG4mIzQzO1x0XHRuYl9lbnRyaWVzICYjNDM7PSByZWNsYWltX2Rlc2NzO1xuJiM0MztcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MsIDApO1xuJiM0MztcdH1cbiYjNDM7XG4gXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgbmJfZW50cmllcyk7XG4gfVxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XG5AQCAtNTc0LDIyICYjNDM7NTkxLDE2OSBAQCBzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50clxuIFx0cmV0dXJuIG5iX3BrdHM7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB4c2tfdHhfY29tbWl0X2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuJiM0MztcdFx0XHRcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoLFxuJiM0MztcdFx0XHRcdHUzMiBjcV9jYWNoZWRfcHJvZClcbiYjNDM7e1xuJiM0MztcdHUzMiBuYl9kZXNjcyA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhiYXRjaCk7XG4mIzQzO1xuJiM0MztcdGlmICghbmJfZGVzY3MpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXHUwMDNlY3EsIHBvb2wtXHUwMDNldHhfZGVzY3MsIG5iX2Rlc2NzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGJhdGNoLVx1MDAzZXJlY2xhaW1fZGVzY3MpKSB7XG4mIzQzO1x0XHR1MzIgY3FfcGVuZGluZ19kZXNjcztcbiYjNDM7XG4mIzQzO1x0XHQvKiBDUSBpcyBwb3NpdGlvbmFsLiBEZXNjcmlwdG9ycyBhbHJlYWR5IHdyaXR0ZW4gYnV0IG5vdFxuJiM0MztcdFx0ICogc3VibWl0dGVkIG11c3QgY29tcGxldGUgYmVmb3JlIGFueSByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnNcbiYjNDM7XHRcdCAqIGFwcGVuZGVkIGJlbG93LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjcV9wZW5kaW5nX2Rlc2NzID0gY3FfY2FjaGVkX3Byb2QgLSB4c2txX2dldF9wcm9kKHBvb2wtXHUwMDNlY3EpO1xuJiM0MztcbiYjNDM7XHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLCBiYXRjaC1cdTAwM2V0eF9kZXNjcyAmIzQzOyBjcV9wZW5kaW5nX2Rlc2NzKTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2VyZWNsYWltX2Rlc2NzLCBiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzKTtcbiYjNDM7XHRcdGlmICh1bmxpa2VseSghcG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzKSlcbiYjNDM7XHRcdFx0eHNrX3R4X2NvbXBsZXRlZChwb29sLCAwKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoXG4mIzQzO19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xuJiM0MztcdHUzMiBlbnRyaWVzO1xuJiM0MztcbiYjNDM7XHRlbnRyaWVzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIG1heF9kZXNjcyk7XG4mIzQzO1x0aWYgKCFlbnRyaWVzKVxuJiM0MztcdFx0cmV0dXJuIGJhdGNoO1xuJiM0MztcbiYjNDM7XHRiYXRjaCA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMsIHBvb2wsIGRlc2NzLCBlbnRyaWVzKTtcbiYjNDM7XHRpZiAoIXhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZiYXRjaCkpIHtcbiYjNDM7XHRcdHhzLVx1MDAzZXR4LVx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzJiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmIChiYXRjaC5jb25zdW1lZF9kZXNjcykge1xuJiM0MztcdFx0XHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbiYjNDM7XHRcdFx0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIGJhdGNoO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0X194c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4mIzQzO1x0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuJiM0MztcdHJldHVybiBiYXRjaDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcbiYjNDM7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9kZXNjcylcbiYjNDM7e1xuJiM0MztcdHUzMiBjcV9kZXNjc19iZWZvcmUsIGNxX2Rlc2NzX2FmdGVyO1xuJiM0MztcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggc3VtX2JhdGNoID0ge307XG4mIzQzO1x0Ym9vbCBidWRnZXRfZXhoYXVzdGVkO1xuJiM0MztcdHUzMiBwZXJfc29ja2V0X2J1ZGdldDtcbiYjNDM7XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xuJiM0MztcbiYjNDM7XHRtYXhfZGVzY3MgPSB4c2txX3Byb2RfbmJfZnJlZShwb29sLVx1MDAzZWNxLCBtYXhfZGVzY3MpO1xuJiM0MztcdGlmICghbWF4X2Rlc2NzKVxuJiM0MztcdFx0cmV0dXJuIHN1bV9iYXRjaDtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZhaXJuZXNzIHF1b3RhIG11c3QgYWxsb3cgb25lIG1heGltdW0tc2l6ZWQgdmFsaWQgcGFja2V0LiAqL1xuJiM0MztcdHBlcl9zb2NrZXRfYnVkZ2V0ID0gbWF4X3QodTMyLCBNQVhfUEVSX1NPQ0tFVF9CVURHRVQsXG4mIzQzO1x0XHRcdFx0ICBwb29sLVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4mIzQzO1xuJiM0MzthZ2FpbjpcbiYjNDM7XHRidWRnZXRfZXhoYXVzdGVkID0gZmFsc2U7XG4mIzQzO1x0Y3FfZGVzY3NfYmVmb3JlID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFx1MDAyNnN1bV9iYXRjaCk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsIFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpIHtcbiYjNDM7XHRcdHUzMiBidWRnZXQsIGJ1ZGdldF9sZWZ0LCBvZmZzZXQsIHJlbWFpbmluZztcbiYjNDM7XHRcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggY3Vycl9iYXRjaDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBPbmNlIHJlY2xhaW0tb25seSBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gYXBwZW5kZWQgdG8gdGhlIENRIGFkZHJlc3NcbiYjNDM7XHRcdCAqIGFyZWEsIGRvIG5vdCBhcHBlbmQgZHJpdmVyLXZpc2libGUgVHggZGVzY3JpcHRvcnMgZnJvbSBhbm90aGVyXG4mIzQzO1x0XHQgKiBzb2NrZXQgYWZ0ZXIgdGhlbS4geHNrX3R4X2NvbXBsZXRlZCgpIHJlbGllcyBvbiBhbGwgZHJpdmVyLXZpc2libGVcbiYjNDM7XHRcdCAqIGRlc2NyaXB0b3JzIHByZWNlZGluZyBhbGwgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLVx1MDAzZXR4X2Rlc2NzICovXG4mIzQzO1x0XHRvZmZzZXQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2c3VtX2JhdGNoKTtcbiYjNDM7XHRcdGlmIChvZmZzZXQgXHUwMDNlPSBtYXhfZGVzY3MpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmICh4cy1cdTAwM2V0eF9idWRnZXRfc3BlbnQgXHUwMDNlPSBwZXJfc29ja2V0X2J1ZGdldCkge1xuJiM0MztcdFx0XHRpZiAoeHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIDEpKVxuJiM0MztcdFx0XHRcdGJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRidWRnZXRfbGVmdCA9IHBlcl9zb2NrZXRfYnVkZ2V0IC0geHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50O1xuJiM0MztcdFx0cmVtYWluaW5nID0gbWF4X2Rlc2NzIC0gb2Zmc2V0O1xuJiM0MztcdFx0YnVkZ2V0ID0gbWluKHJlbWFpbmluZywgYnVkZ2V0X2xlZnQpO1xuJiM0MztcbiYjNDM7XHRcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICBwb29sLVx1MDAzZXR4X2Rlc2NzICYjNDM7IG9mZnNldCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICBidWRnZXQpO1xuJiM0MztcdFx0aWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2Y3Vycl9iYXRjaCkpIHtcbiYjNDM7XHRcdFx0aWYgKGN1cnJfYmF0Y2guYnVkZ2V0X2xpbWl0ZWQgXHUwMDI2XHUwMDI2IGJ1ZGdldF9sZWZ0IFx1MDAzYyByZW1haW5pbmcpXG4mIzQzO1x0XHRcdFx0YnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7XG4mIzQzO1x0XHRcdHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCAmIzQzOz0gY3Vycl9iYXRjaC5jb25zdW1lZF9kZXNjcztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ICYjNDM7PSBjdXJyX2JhdGNoLmNvbnN1bWVkX2Rlc2NzO1xuJiM0MztcdFx0c3VtX2JhdGNoLnR4X2Rlc2NzICYjNDM7PSBjdXJyX2JhdGNoLnR4X2Rlc2NzO1xuJiM0MztcdFx0c3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgJiM0Mzs9IGN1cnJfYmF0Y2gucmVjbGFpbV9kZXNjcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNxX2Rlc2NzX2FmdGVyID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFx1MDAyNnN1bV9iYXRjaCk7XG4mIzQzO1xuJiM0MztcdGlmIChzdW1fYmF0Y2gucmVjbGFpbV9kZXNjcyB8fCBjcV9kZXNjc19hZnRlciBcdTAwM2U9IG1heF9kZXNjcylcbiYjNDM7XHRcdHJldHVybiBzdW1fYmF0Y2g7XG4mIzQzO1xuJiM0MztcdC8qIENvbnRpbnVlIGZpbGxpbmcgdGhlIGJhdGNoIHdoaWxlIHRoaXMgcGFzcyBtYWRlIHByb2dyZXNzICovXG4mIzQzO1x0aWYgKGNxX2Rlc2NzX2JlZm9yZSAhPSBjcV9kZXNjc19hZnRlcilcbiYjNDM7XHRcdGdvdG8gYWdhaW47XG4mIzQzO1xuJiM0MztcdGlmICghYnVkZ2V0X2V4aGF1c3RlZClcbiYjNDM7XHRcdHJldHVybiBzdW1fYmF0Y2g7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0LCB0eF9saXN0KVxuJiM0MztcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ID0gMDtcbiYjNDM7XHRnb3RvIGFnYWluO1xuJiM0Mzt9XG4mIzQzO1xuIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XG4gXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xuJiM0MztcdHUzMiBjcV9jYWNoZWRfcHJvZDtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcykpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0bmJfcGt0cyA9IG1pbihuYl9wa3RzLCBwb29sLVx1MDAzZXR4X2Rlc2NzX25lbnRyaWVzKTtcbiYjNDM7XHRpZiAoIW5iX3BrdHMpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdGlmICghbGlzdF9pc19zaW5ndWxhcihcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0KSkge1xuLVx0XHQvKiBGYWxsYmFjayB0byB0aGUgbm9uLWJhdGNoZWQgdmVyc2lvbiAqL1xuJiM0MztcdFx0LyogS2VlcCB0aGUgbGVnYWN5IG9uZS1kZXNjcmlwdG9yIGZhbGxiYWNrIGZvciBub24tU0cgdXNlcnMuICBUaGVcbiYjNDM7XHRcdCAqIHNoYXJlZCBTRyBwYXRoIG5lZWRzIHBhY2tldC1mcmFtZWQgcGFyc2luZyBzbyBpbnZhbGlkL292ZXJmbG93ZWRcbiYjNDM7XHRcdCAqIG11bHRpLWJ1ZmZlciBwYWNrZXRzIGFyZSBkcmFpbmVkIGFzIGEgdW5pdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHBvb2wtXHUwMDNldW1lbS1cdTAwM2VmbGFncyBcdTAwMjYgWERQX1VNRU1fU0dfRkxBRykge1xuJiM0MztcdFx0XHRiYXRjaCA9IHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gocG9vbCwgbmJfcGt0cyk7XG4mIzQzO1x0XHRcdGNxX2NhY2hlZF9wcm9kID0gcG9vbC1cdTAwM2VjcS1cdTAwM2VjYWNoZWRfcHJvZDtcbiYjNDM7XHRcdFx0eHNrX3R4X2NvbW1pdF9iYXRjaChwb29sLCBcdTAwMjZiYXRjaCwgY3FfY2FjaGVkX3Byb2QpO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcbiBcdH1cbiBcbiBcdHhzID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdShcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0LCBzdHJ1Y3QgeGRwX3NvY2ssIHR4X2xpc3QpO1xuLVx0aWYgKCF4cykge1xuLVx0XHRuYl9wa3RzID0gMDtcbiYjNDM7XHRpZiAoIXhzKVxuIFx0XHRnb3RvIG91dDtcbi1cdH1cbiBcbiBcdG5iX3BrdHMgPSB4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cdTAwM2V0eCwgbmJfcGt0cyk7XG4gXG5AQCAtNjAzLDE5ICYjNDM7NzY3LDE4IEBAIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxuIFx0aWYgKCFuYl9wa3RzKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdG5iX3BrdHMgPSB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHhzLVx1MDAzZXR4LCBwb29sLCBuYl9wa3RzKTtcbi1cdGlmICghbmJfcGt0cykge1xuLVx0XHR4cy1cdTAwM2V0eC1cdTAwM2VxdWV1ZV9lbXB0eV9kZXNjcyYjNDM7JiM0Mzs7XG4mIzQzO1x0YmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cywgcG9vbC1cdTAwM2V0eF9kZXNjcyxcbiYjNDM7XHRcdFx0XHRcdFx0IG5iX3BrdHMpO1xuJiM0MztcdG5iX3BrdHMgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2YmF0Y2gpO1xuJiM0MztcdGlmICghbmJfcGt0cylcbiBcdFx0Z290byBvdXQ7XG4tXHR9XG4gXG4tXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbi1cdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXHUwMDNlY3EsIHBvb2wtXHUwMDNldHhfZGVzY3MsIG5iX3BrdHMpO1xuLVx0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuJiM0MztcdGNxX2NhY2hlZF9wcm9kID0gcG9vbC1cdTAwM2VjcS1cdTAwM2VjYWNoZWRfcHJvZDtcbiYjNDM7XHR4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsIFx1MDAyNmJhdGNoLCBjcV9jYWNoZWRfcHJvZCk7XG4gXG4gb3V0OlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRyZXR1cm4gbmJfcGt0cztcbiYjNDM7XHRyZXR1cm4gYmF0Y2gudHhfZGVzY3M7XG4gfVxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTtcbiBcbkBAIC03MzcsNiAmIzQzOzkwMCwxOSBAQCBzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0dTMyIGlkeDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cG9vbC1cdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZHggPSB4c2txX2dldF9wcm9kKHBvb2wtXHUwMDNlY3EpO1xuJiM0MztcdHhza3FfcHJvZF93cml0ZV9hZGRyKHBvb2wtXHUwMDNlY3EsIGlkeCwgZGVzYy1cdTAwM2VhZGRyKTtcbiYjNDM7XHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgMSk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHhza19jcV9jYW5jZWxfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbilcbiB7XG4gXHRzcGluX2xvY2soXHUwMDI2cG9vbC1cdTAwM2VjcS1cdTAwM2VjcV9jYWNoZWRfcHJvZF9sb2NrKTtcbkBAIC03OTQsOCAmIzQzOzk3MCwxMSBAQCBzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBzdGF0aWMgdm9pZCB4c2tfZHJvcF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHR4ZHBfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzICYjNDM7PSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XG4tXHR4c2tfY29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cdTAwM2Vzayk7XG4mIzQzO1xuJiM0MztcdHhzLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MgJiM0Mzs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcbiYjNDM7XHRjb25zdW1lX3NrYihza2IpO1xuJiM0MztcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG5AQCAtODc3LDcgJiM0MzsxMDU2LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4gXHRcdC8qIGluIGNhc2Ugb2YgLUVPVkVSRkxPVyB0aGF0IGNvdWxkIGhhcHBlbiBiZWxvdyxcbi1cdFx0ICogeHNrX2NvbnN1bWVfc2tiKCkgd2lsbCByZWxlYXNlIHRoaXMgbm9kZSBhcyB3aG9sZSBza2JcbiYjNDM7XHRcdCAqIHhza19kcm9wX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiXG4gXHRcdCAqIHdvdWxkIGJlIGRyb3BwZWQsIHdoaWNoIGltcGxpZXMgZnJlZWluZyBhbGwgbGlzdCBlbGVtZW50c1xuIFx0XHQgKi9cbiBcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbkBAIC05NjksNiAmIzQzOzExNDgsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4gXHRcdFx0fVxuIFxuJiM0MztcdFx0XHR4c2tfYWRkci1cdTAwM2VhZGRyc1t4c2tfYWRkci1cdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cdTAwM2VhZGRyO1xuJiM0MztcbiBcdFx0XHRpZiAodW5saWtlbHkobnJfZnJhZ3MgPT0gKE1BWF9TS0JfRlJBR1MgLSAxKSBcdTAwMjZcdTAwMjYgeHBfbWJfZGVzYyhkZXNjKSkpIHtcbiBcdFx0XHRcdGVyciA9IC1FT1ZFUkZMT1c7XG4gXHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuQEAgLTk4Niw4ICYjNDM7MTE2Nyw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuIFxuIFx0XHRcdHNrYl9hZGRfcnhfZnJhZyhza2IsIG5yX2ZyYWdzLCBwYWdlLCAwLCBsZW4sIFBBR0VfU0laRSk7XG4gXHRcdFx0cmVmY291bnRfYWRkKFBBR0VfU0laRSwgXHUwMDI2eHMtXHUwMDNlc2suc2tfd21lbV9hbGxvYyk7XG4tXG4tXHRcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTEwNjAsMTEgJiM0MzsxMjM5LDIyIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKHVubGlrZWx5KHhzLVx1MDAzZWRyYWluX2NvbnQpKSB7XG4mIzQzO1x0XHRcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIFx1MDAyNmRlc2MpO1xuJiM0MztcbiYjNDM7XHRcdFx0eHMtXHUwMDNldHgtXHUwMDNlaW52YWxpZF9kZXNjcyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHhza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbiYjNDM7XHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXHUwMDI2ZGVzYyk7XG4gXHRcdGlmIChJU19FUlIoc2tiKSkge1xuIFx0XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbiBcdFx0XHRpZiAoZXJyICE9IC1FT1ZFUkZMT1cpXG4gXHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0aWYgKHhwX21iX2Rlc2MoXHUwMDI2ZGVzYykpXG4mIzQzO1x0XHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHRydWU7XG4gXHRcdFx0ZXJyID0gMDtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuQEAgLTEwOTgsOSAmIzQzOzEyODgsMjQgQEAgc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0fVxuIFxuIFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVx1MDAzZXR4KSkge1xuJiM0MztcdFx0Ym9vbCByZWNsYWltX2Rlc2MgPSB4cy1cdTAwM2Vza2IgfHwgeHMtXHUwMDNlZHJhaW5fY29udDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmVjbGFpbV9kZXNjKSB7XG4mIzQzO1x0XHRcdGVyciA9IHhza19jcV9yZXNlcnZlX2xvY2tlZCh4cy1cdTAwM2Vwb29sKTtcbiYjNDM7XHRcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRcdGVyciA9IC1FQUdBSU47XG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGlmICh4cy1cdTAwM2Vza2IpXG4gXHRcdFx0eHNrX2Ryb3Bfc2tiKHhzLVx1MDAzZXNrYik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJlY2xhaW1fZGVzYylcbiYjNDM7XHRcdFx0eHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtXHUwMDNlcG9vbCwgXHUwMDI2ZGVzYyk7XG4mIzQzO1xuIFx0XHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4mIzQzO1x0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0geHBfbWJfZGVzYyhcdTAwMjZkZXNjKTtcbiBcdH1cbiBcbiBvdXQ6XG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2tfYnVmZl9wb29sLmMgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xuaW5kZXggMWYyOGE5NjQxNTcxZTQuLmI4NjJhZGRjZDhmZGFmIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXG5AQCAtNDgsNiAmIzQzOzQ4LDcgQEAgaW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuIFx0aWYgKCFwb29sLVx1MDAzZXR4X2Rlc2NzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjNDM7XHRwb29sLVx1MDAzZXR4X2Rlc2NzX25lbnRyaWVzID0geHMtXHUwMDNldHgtXHUwMDNlbmVudHJpZXM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2tfcXVldWUuaCBiL25ldC94ZHAveHNrX3F1ZXVlLmhcbmluZGV4IDNlM2ZiYjczZDIzZTJmLi5hMTVmZjE5MjlkYjYyMyAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrX3F1ZXVlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrX3F1ZXVlLmhcbkBAIC01OCw2ICYjNDM7NTgsMTggQEAgc3RydWN0IHBhcnNlZF9kZXNjIHtcbiBcdHUzMiB2YWxpZDtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgeHNrX3R4X2JhdGNoIHtcbiYjNDM7XHR1MzIgdHhfZGVzY3M7XG4mIzQzO1x0dTMyIHJlY2xhaW1fZGVzY3M7XG4mIzQzO1x0dTMyIGNvbnN1bWVkX2Rlc2NzO1xuJiM0MztcdGJvb2wgYnVkZ2V0X2xpbWl0ZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHUzMiB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoY29uc3Qgc3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYmF0Y2gtXHUwMDNldHhfZGVzY3MgJiM0MzsgYmF0Y2gtXHUwMDNlcmVjbGFpbV9kZXNjcztcbiYjNDM7fVxuJiM0MztcbiAvKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBzaGFyZWQgc3RhdGUgb2YgdGhlIHJpbmdzIGFyZSBhIHNpbXBsZVxuICAqIGNpcmN1bGFyIGJ1ZmZlciwgYXMgb3V0bGluZWQgaW5cbiAgKiBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL2NpcmN1bGFyLWJ1ZmZlcnMucnN0LiBGb3IgdGhlIFJ4IGFuZFxuQEAgLTI2MywxNyAmIzQzOzI3NSwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VfZGVzYyhzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbiBcdHBhcnNlZC1cdTAwM2VtYiA9IHhwX21iX2Rlc2MoZGVzYyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmVcbi11MzIgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbi1cdFx0XHQgICAgICB1MzIgbWF4KVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCB4c2tfdHhfYmF0Y2hcbiYjNDM7eHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4KVxuIHtcbi1cdHUzMiBjYWNoZWRfY29ucyA9IHEtXHUwMDNlY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwO1xuLVx0c3RydWN0IHhkcF9kZXNjICpkZXNjcyA9IHBvb2wtXHUwMDNldHhfZGVzY3M7XG4tXHR1MzIgdG90YWxfZGVzY3MgPSAwLCBucl9mcmFncyA9IDA7XG4mIzQzO1x0Ym9vbCBkcmFpbiA9IFJFQURfT05DRSh4cy1cdTAwM2VkcmFpbl9jb250KTtcbiYjNDM7XHR1MzIgY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwLCByZWxlYXNlZDtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XG4mIzQzO1x0c3RydWN0IHhza19xdWV1ZSAqcSA9IHhzLVx1MDAzZXR4O1xuJiM0MztcdHUzMiBucl9mcmFncyA9IDA7XG4mIzQzO1xuJiM0MztcdGNhY2hlZF9jb25zID0gcS1cdTAwM2VjYWNoZWRfY29ucztcbiBcbi1cdC8qIHRyYWNrIGZpcnN0IGVudHJ5LCBpZiBzdHVtYmxlIHVwb24gKmFueSogaW52YWxpZCBkZXNjcmlwdG9yLCByZXdpbmRcbi1cdCAqIGN1cnJlbnQgcGFja2V0IHRoYXQgY29uc2lzdHMgb2YgZnJhZ3MgYW5kIHN0b3AgdGhlIHByb2Nlc3Npbmdcbi1cdCAqL1xuIFx0d2hpbGUgKGNhY2hlZF9jb25zICE9IHEtXHUwMDNlY2FjaGVkX3Byb2QgXHUwMDI2XHUwMDI2IG5iX2VudHJpZXMgXHUwMDNjIG1heCkge1xuIFx0XHRzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqcmluZyA9IChzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqKXEtXHUwMDNlcmluZztcbiBcdFx0dTMyIGlkeCA9IGNhY2hlZF9jb25zIFx1MDAyNiBxLVx1MDAzZXJpbmdfbWFzaztcbkBAIC0yODIsMjYgJiM0MzsyOTUsNDkgQEAgdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4gXHRcdGRlc2NzW25iX2VudHJpZXNdID0gcmluZy1cdTAwM2VkZXNjW2lkeF07XG4gXHRcdGNhY2hlZF9jb25zJiM0MzsmIzQzOztcbiBcdFx0cGFyc2VfZGVzYyhxLCBwb29sLCBcdTAwMjZkZXNjc1tuYl9lbnRyaWVzXSwgXHUwMDI2cGFyc2VkKTtcbi1cdFx0aWYgKHVubGlrZWx5KCFwYXJzZWQudmFsaWQpKVxuLVx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KCFwYXJzZWQudmFsaWQpKSB7XG4mIzQzO1x0XHRcdGlmICghZHJhaW4gXHUwMDI2XHUwMDI2ICFucl9mcmFncyBcdTAwMjZcdTAwMjYgIXBhcnNlZC5tYilcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRcdGRyYWluID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRucl9mcmFncyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRuYl9lbnRyaWVzJiM0MzsmIzQzOztcbiBcbiBcdFx0aWYgKGxpa2VseSghcGFyc2VkLm1iKSkge1xuLVx0XHRcdHRvdGFsX2Rlc2NzICYjNDM7PSAobnJfZnJhZ3MgJiM0MzsgMSk7XG4tXHRcdFx0bnJfZnJhZ3MgPSAwO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdG5yX2ZyYWdzJiM0MzsmIzQzOztcbi1cdFx0XHRpZiAobnJfZnJhZ3MgPT0gcG9vbC1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpIHtcbiYjNDM7XHRcdFx0aWYgKHVubGlrZWx5KGRyYWluKSkge1xuJiM0MztcdFx0XHRcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcbiYjNDM7XHRcdFx0XHRXUklURV9PTkNFKHhzLVx1MDAzZWRyYWluX2NvbnQsIGZhbHNlKTtcbiBcdFx0XHRcdG5yX2ZyYWdzID0gMDtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGJhdGNoLnR4X2Rlc2NzICYjNDM7PSBucl9mcmFncztcbiYjNDM7XHRcdFx0bnJfZnJhZ3MgPSAwO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobnJfZnJhZ3MgPT0gcG9vbC1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpXG4mIzQzO1x0XHRcdGRyYWluID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChucl9mcmFncykge1xuJiM0MztcdFx0aWYgKGRyYWluKSB7XG4mIzQzO1x0XHRcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcbiYjNDM7XHRcdFx0V1JJVEVfT05DRSh4cy1cdTAwM2VkcmFpbl9jb250LCB0cnVlKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGlmIChuYl9lbnRyaWVzID09IG1heClcbiYjNDM7XHRcdFx0XHRiYXRjaC5idWRnZXRfbGltaXRlZCA9IHRydWU7XG4mIzQzO1x0XHRcdGNhY2hlZF9jb25zIC09IG5yX2ZyYWdzO1xuIFx0XHR9XG4tXHRcdG5iX2VudHJpZXMmIzQzOyYjNDM7O1xuIFx0fVxuIFxuLVx0Y2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7XG4mIzQzO1x0cmVsZWFzZWQgPSBjYWNoZWRfY29ucyAtIHEtXHUwMDNlY2FjaGVkX2NvbnM7XG4gXHQvKiBSZWxlYXNlIHZhbGlkIHBsdXMgYW55IGludmFsaWQgZW50cmllcyAqL1xuLVx0eHNrcV9jb25zX3JlbGVhc2VfbihxLCBjYWNoZWRfY29ucyAtIHEtXHUwMDNlY2FjaGVkX2NvbnMpO1xuLVx0cmV0dXJuIHRvdGFsX2Rlc2NzO1xuJiM0MztcdHhza3FfY29uc19yZWxlYXNlX24ocSwgcmVsZWFzZWQpO1xuJiM0MztcdGJhdGNoLmNvbnN1bWVkX2Rlc2NzID0gcmVsZWFzZWQ7XG4mIzQzO1x0cmV0dXJuIGJhdGNoO1xuIH1cbiBcbiAvKiBGdW5jdGlvbnMgZm9yIGNvbnN1bWVycyAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXG5pbmRleCA2ZWI5MDk2ZDA4NGMwMS4uN2FiYjQ5MzVlZGY5YWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXG5AQCAtNDI3LDE0ICYjNDM7NDI3LDE0IEBAIHN0YXRpYyB1MzIgcGt0X25iX2ZyYWdzKHUzMiBmcmFtZV9zaXplLCBzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbSwgc3RydWN0IHBrXG4gXHR9XG4gXG4gXHQvKiBTZWFyY2ggZm9yIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBpbiB2ZXJiYXRpbSBtb2RlICovXG4tXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4mIzQzO1x0aWYgKCFwa3RfY29udGludWVzKHBrdC1cdTAwM2VvcHRpb25zKSlcbiBcdFx0cmV0dXJuIG5iX2ZyYWdzO1xuIFxuIFx0bmV4dF9mcmFnID0gcGt0X3N0cmVhbS1cdTAwM2VjdXJyZW50X3BrdF9uYjtcbiBcdHBrdCYjNDM7JiM0Mzs7XG4gXHR3aGlsZSAobmV4dF9mcmFnJiM0MzsmIzQzOyBcdTAwM2MgcGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzKSB7XG4gXHRcdG5iX2ZyYWdzJiM0MzsmIzQzOztcbi1cdFx0aWYgKCFwa3RfY29udGludWVzKHBrdC1cdTAwM2VvcHRpb25zKSB8fCAhcGt0LVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0aWYgKCFwa3RfY29udGludWVzKHBrdC1cdTAwM2VvcHRpb25zKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0cGt0JiM0MzsmIzQzOztcbiBcdH1cbkBAIC02NjUsMTEgJiM0Mzs2NjUsMTEgQEAgc3RhdGljIHN0cnVjdCBwa3Rfc3RyZWFtICpfX3BrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHNcbiBcdFx0XHRpZiAoIWZyYW1lLVx1MDAzZXZhbGlkIHx8ICFwa3RfY29udGludWVzKGZyYW1lLVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRcdFx0cGF5bG9hZCYjNDM7JiM0Mzs7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0aWYgKGZyYW1lLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0XHRpZiAoZnJhbWUtXHUwMDNldmFsaWQpIHtcbiBcdFx0XHRcdGxlbiAmIzQzOz0gZnJhbWUtXHUwMDNlbGVuO1xuLVx0XHRcdGlmIChmcmFtZS1cdTAwM2V2YWxpZCBcdTAwMjZcdTAwMjYgcGt0X2NvbnRpbnVlcyhmcmFtZS1cdTAwM2VvcHRpb25zKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuJiM0MztcdFx0XHRcdGlmIChwa3RfY29udGludWVzKGZyYW1lLVx1MDAzZW9wdGlvbnMpKVxuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRwa3QtXHUwMDNlcGt0X25iID0gcGt0X25iO1xuIFx0XHRcdHBrdC1cdTAwM2VsZW4gPSBsZW47XG4gXHRcdFx0cGt0LVx1MDAzZXZhbGlkID0gZnJhbWUtXHUwMDNldmFsaWQ7XG5AQCAtMTIwOSw2ICYjNDM7MTIwOSw3IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgeHNrLVx1MDAzZWJhdGNoX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHN0cnVjdCBwa3QgKnBrdCA9IHBrdF9zdHJlYW1fZ2V0X25leHRfdHhfcGt0KHBrdF9zdHJlYW0pO1xuIFx0XHR1MzIgbmJfZnJhZ3NfbGVmdCwgbmJfZnJhZ3MsIGJ5dGVzX3dyaXR0ZW4gPSAwO1xuJiM0MztcdFx0c3RydWN0IHBrdCAqZmlyc3RfcGt0ID0gcGt0O1xuIFxuIFx0XHRpZiAoIXBrdClcbiBcdFx0XHRicmVhaztcbkBAIC0xMjUzLDYgJiM0MzsxMjU0LDggQEAgc3RhdGljIGludCBfX3NlbmRfcGt0cyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssXG4gXHRcdGlmIChwa3QgXHUwMDI2XHUwMDI2IHBrdC1cdTAwM2V2YWxpZCkge1xuIFx0XHRcdHZhbGlkX3BrdHMmIzQzOyYjNDM7O1xuIFx0XHRcdHZhbGlkX2ZyYWdzICYjNDM7PSBuYl9mcmFncztcbiYjNDM7XHRcdH0gZWxzZSBpZiAocGt0X3N0cmVhbS1cdTAwM2V2ZXJiYXRpbSBcdTAwMjZcdTAwMjYgcGt0X2NvbnRpbnVlcyhmaXJzdF9wa3QtXHUwMDNlb3B0aW9ucykpIHtcbiYjNDM7XHRcdFx0dmFsaWRfZnJhZ3MgJiM0Mzs9IG5iX2ZyYWdzO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMjA5OSwxMyAmIzQzOzIxMDIsMTYgQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRcdHswLCAwLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgYWRkcmVzcyBpbiB0aGUgc2Vjb25kIGZyYW1lICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuLVx0XHR7dW1lbV9zeiwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbiYjNDM7XHRcdHt1bWVtX3N6ICogMiwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbiYjNDM7XHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogSW52YWxpZCBsZW4gaW4gdGhlIG1pZGRsZSAqL1xuIFx0XHR7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbiBcdFx0ezAsIFhTS19VTUVNX19JTlZBTElEX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbiYjNDM7XHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogSW52YWxpZCBvcHRpb25zIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhTS19ERVNDX19JTlZBTElEX09QVElPTn0sXG4mIzQzO1x0XHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIFRyYW5zbWl0IDIgZnJhZ3MsIHJlY2VpdmUgMyAqL1xuIFx0XHR7MCwgWFNLX1VNRU1fX01BWF9GUkFNRV9TSVpFLCAwLCB0cnVlLCBYRFBfUEtUX0NPTlREfSxcbiBcdFx0ezAsIFhTS19VTUVNX19NQVhfRlJBTUVfU0laRSwgMCwgdHJ1ZSwgMH0sXG5AQCAtMjExNyw4ICYjNDM7MjEyMyw4IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFxuIFx0aWYgKHVtZW0tXHUwMDNldW5hbGlnbmVkX21vZGUpIHtcbiBcdFx0LyogQ3Jvc3NpbmcgYSBjaHVuayBib3VuZGFyeSBhbGxvd2VkICovXG4tXHRcdHBrdHNbMTJdLnZhbGlkID0gdHJ1ZTtcbi1cdFx0cGt0c1sxM10udmFsaWQgPSB0cnVlO1xuJiM0MztcdFx0cGt0c1sxNV0udmFsaWQgPSB0cnVlO1xuJiM0MztcdFx0cGt0c1sxNl0udmFsaWQgPSB0cnVlO1xuIFx0fVxuIFxuIFx0dGVzdC1cdTAwM2VtdHUgPSBNQVhfRVRIX0pVTUJPX1NJWkU7XG5AQCAtMjI3MCw3ICYjNDM7MjI3Niw3IEBAIGludCB0ZXN0YXBwX3Rvb19tYW55X2ZyYWdzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRcdG1heF9mcmFncyAmIzQzOz0gMTtcbiBcdH1cbiBcbi1cdHBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyAmIzQzOyAyLCBzaXplb2Yoc3RydWN0IHBrdCkpO1xuJiM0MztcdHBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyAmIzQzOyAzLCBzaXplb2Yoc3RydWN0IHBrdCkpO1xuIFx0aWYgKCFwa3RzKVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuQEAgLTIyODgsMjQgJiM0MzsyMjk0LDMwIEBAIGludCB0ZXN0YXBwX3Rvb19tYW55X2ZyYWdzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHR9XG4gXHRwa3RzW21heF9mcmFnc10ub3B0aW9ucyA9IDA7XG4gXG4tXHQvKiBBbiBpbnZhbGlkIHBhY2tldCB3aXRoIHRoZSBtYXggYW1vdW50IG9mIGZyYWdzIGJ1dCBzaWduYWxzIHBhY2tldFxuLVx0ICogY29udGludWVzIG9uIHRoZSBsYXN0IGZyYWdcbi1cdCAqL1xuLVx0Zm9yIChpID0gbWF4X2ZyYWdzICYjNDM7IDE7IGkgXHUwMDNjIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHQvKiBBbiBpbnZhbGlkIHBhY2tldCB3aXRoIHRoZSBtYXggJiM0MzsgMSBhbW91bnQgb2YgZnJhZ3MgKi9cbiYjNDM7XHRmb3IgKGkgPSBtYXhfZnJhZ3MgJiM0MzsgMTsgaSBcdTAwM2MgMiAqIG1heF9mcmFncyAmIzQzOyAyOyBpJiM0MzsmIzQzOykge1xuIFx0XHRwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTtcbiBcdFx0cGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDtcbi1cdFx0cGt0c1tpXS52YWxpZCA9IGZhbHNlO1xuJiM0MztcdFx0cGt0c1tpXS52YWxpZCA9IHRydWU7XG4gXHR9XG4mIzQzO1x0cGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDFdLm9wdGlvbnMgPSAwO1xuIFxuIFx0LyogVmFsaWQgcGFja2V0IGZvciBzeW5jaCAqL1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDFdLmxlbiA9IE1JTl9QS1RfU0laRTtcbi1cdHBrdHNbMiAqIG1heF9mcmFncyAmIzQzOyAxXS52YWxpZCA9IHRydWU7XG4mIzQzO1x0cGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDJdLmxlbiA9IE1JTl9QS1RfU0laRTtcbiYjNDM7XHRwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0udmFsaWQgPSB0cnVlO1xuIFxuLVx0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMikpIHtcbiYjNDM7XHRpZiAocGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20odGVzdCwgcGt0cywgMiAqIG1heF9mcmFncyAmIzQzOyAzKSkge1xuIFx0XHRmcmVlKHBrdHMpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuJiM0MztcdC8qIFRoZSBnZW5lcmF0ZWQgVHggc3RyZWFtIG11c3Qga2VlcCB0aGUgdG9vLWJpZyBwYWNrZXQgdmFsaWQgc28gdGhhdFxuJiM0MztcdCAqIF9fc2VuZF9wa3RzKCkgYWNjb3VudHMgaXRzIGRlc2NyaXB0b3JzIGluIG91dHN0YW5kaW5nX3R4LiBUaGUgUnhcbiYjNDM7XHQgKiBzdHJlYW0sIGhvd2V2ZXIsIG11c3Qgbm90IGV4cGVjdCB0aGlzIHBhY2tldCBvbiB0aGUgd2lyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2Vwa3Rfc3RyZWFtLVx1MDAzZXBrdHNbMl0udmFsaWQgPSBmYWxzZTtcbiYjNDM7XHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2Vwa3Rfc3RyZWFtLVx1MDAzZW5iX3ZhbGlkX2VudHJpZXMtLTtcbiYjNDM7XG4gXHRyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7XG4gXHRmcmVlKHBrdHMpO1xuIFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza190eF9jb21wbGV0ZWQmIzM0OywKICAgICYjMzQ7eHNrX3R4X2NvbW1pdF9iYXRjaCYjMzQ7LAogICAgJiMzNDtfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCYjMzQ7LAogICAgJiMzNDt4c2tfZHJvcF9za2ImIzM0OywKICAgICYjMzQ7eHNrX2J1aWxkX3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiJiMzNDssCiAgICAmIzM0O19feHNrX2dlbmVyaWNfeG1pdCYjMzQ7LAogICAgJiMzNDt4cF9hbGxvY190eF9kZXNjcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZfWERQIG11bHRpLWJ1ZmZlciAoU0cpIHBhY2tldCB0cmFuc21pc3Npb24gbG9naWMsIGludHJvZHVjaW5nIGJhdGNoaW5nIGFuZCByZWNsYWltIGRlc2NyaXB0b3JzIHRvIGhhbmRsZSBpbnZhbGlkIGRlc2NyaXB0b3JzIGFuZCBib3VuZGFyaWVzIGNvcnJlY3RseS4gSXQgbW9kaWZpZXMgY29yZSBYRFAgc29ja2V0IGNvZGUgaW4gbmV0L3hkcC94c2suYyBhbmQgbmV0L3hkcC94c2tfcXVldWUuaC4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMzMGQ0ZjdlYmMxYWVmNzk2NmFiMzllZWQ5ZmRhNGE3NTk5MDhmZTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxMSAxNzozMzo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmggYi9pbmNsdWRlL25ldC94ZHBfc29jay5oCmluZGV4IGViYWM2MGEzZDhhMTdiLi44YjUxODc2ZWZiZWQxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC94ZHBfc29jay5oCkBAIC04MCw2ICYjNDM7ODAsNyBAQCBzdHJ1Y3QgeGRwX3NvY2sgewogCSAqIGNhbGwgb2YgX194c2tfZ2VuZXJpY194bWl0KCkuCiAJICovCiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJYm9vbCBkcmFpbl9jb250OwogCiAJc3RydWN0IGxpc3RfaGVhZCBtYXBfbGlzdDsKIAkvKiBQcm90ZWN0cyBtYXBfbGlzdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oIGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oCmluZGV4IGNjYjNiMzUwMDAxZjI0Li5mYjU5ZTIwNWFjN2Q3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaApAQCAtNzgsNiAmIzQzOzc4LDkgQEAgc3RydWN0IHhza19idWZmX3Bvb2wgewogCXUzMiBjaHVua19zaXplOwogCXUzMiBjaHVua19zaGlmdDsKIAl1MzIgZnJhbWVfbGVuOwomIzQzOwl1MzIgdHhfZGVzY3NfbmVudHJpZXM7CiYjNDM7CXUzMiByZWNsYWltX2Rlc2NzOwomIzQzOwl1MzIgdHhfemNfcGVuZGluZ19kZXNjczsKIAl1MzIgeGRwX3pjX21heF9zZWdzOwogCXU4IHR4X21ldGFkYXRhX2xlbjsgLyogaW5oZXJpdGVkIGZyb20gdW1lbSAqLwogCXU4IGNhY2hlZF9uZWVkX3dha2V1cDsKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jCmluZGV4IGI5NzBmMzBlYTliOWQ4Li43ZDhiNDJjNGMyMTRiYSAxMDA2NDQKLS0tIGEvbmV0L3hkcC94c2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hzay5jCkBAIC00OTksNiAmIzQzOzQ5OSwyMyBAQCB2b2lkIF9feHNrX21hcF9mbHVzaChzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0KQogCiB2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKQogewomIzQzOwl1MzIgcmVjbGFpbV9kZXNjcyA9IFJFQURfT05DRShwb29sLSZndDtyZWNsYWltX2Rlc2NzKTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KHJlY2xhaW1fZGVzY3MpKSB7CiYjNDM7CQl1MzIgcGVuZGluZ19kZXNjcyA9IFJFQURfT05DRShwb29sLSZndDt0eF96Y19wZW5kaW5nX2Rlc2NzKTsKJiM0MzsKJiM0MzsJCWlmIChuYl9lbnRyaWVzICZsdDsgcGVuZGluZ19kZXNjcykgewomIzQzOwkJCVdSSVRFX09OQ0UocG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcywKJiM0MzsJCQkJICAgcGVuZGluZ19kZXNjcyAtIG5iX2VudHJpZXMpOwomIzQzOwkJCXhza3FfcHJvZF9zdWJtaXRfbihwb29sLSZndDtjcSwgbmJfZW50cmllcyk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwomIzQzOwkJV1JJVEVfT05DRShwb29sLSZndDt0eF96Y19wZW5kaW5nX2Rlc2NzLCAwKTsKJiM0MzsJCW5iX2VudHJpZXMgJiM0Mzs9IHJlY2xhaW1fZGVzY3M7CiYjNDM7CQlXUklURV9PTkNFKHBvb2wtJmd0O3JlY2xhaW1fZGVzY3MsIDApOwomIzQzOwl9CiYjNDM7CiAJeHNrcV9wcm9kX3N1Ym1pdF9uKHBvb2wtJmd0O2NxLCBuYl9lbnRyaWVzKTsKIH0KIEVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7CkBAIC01NzQsMjIgJiM0Mzs1OTEsMTY5IEBAIHN0YXRpYyB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9lbnRyCiAJcmV0dXJuIG5iX3BrdHM7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB4c2tfdHhfY29tbWl0X2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLAomIzQzOwkJCQlzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaCwKJiM0MzsJCQkJdTMyIGNxX2NhY2hlZF9wcm9kKQomIzQzO3sKJiM0MzsJdTMyIG5iX2Rlc2NzID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGJhdGNoKTsKJiM0MzsKJiM0MzsJaWYgKCFuYl9kZXNjcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJeHNrcV9wcm9kX3dyaXRlX2FkZHJfYmF0Y2gocG9vbC0mZ3Q7Y3EsIHBvb2wtJmd0O3R4X2Rlc2NzLCBuYl9kZXNjcyk7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShiYXRjaC0mZ3Q7cmVjbGFpbV9kZXNjcykpIHsKJiM0MzsJCXUzMiBjcV9wZW5kaW5nX2Rlc2NzOwomIzQzOwomIzQzOwkJLyogQ1EgaXMgcG9zaXRpb25hbC4gRGVzY3JpcHRvcnMgYWxyZWFkeSB3cml0dGVuIGJ1dCBub3QKJiM0MzsJCSAqIHN1Ym1pdHRlZCBtdXN0IGNvbXBsZXRlIGJlZm9yZSBhbnkgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzCiYjNDM7CQkgKiBhcHBlbmRlZCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJY3FfcGVuZGluZ19kZXNjcyA9IGNxX2NhY2hlZF9wcm9kIC0geHNrcV9nZXRfcHJvZChwb29sLSZndDtjcSk7CiYjNDM7CiYjNDM7CQlXUklURV9PTkNFKHBvb2wtJmd0O3R4X3pjX3BlbmRpbmdfZGVzY3MsIGJhdGNoLSZndDt0eF9kZXNjcyAmIzQzOyBjcV9wZW5kaW5nX2Rlc2NzKTsKJiM0MzsJCVdSSVRFX09OQ0UocG9vbC0mZ3Q7cmVjbGFpbV9kZXNjcywgYmF0Y2gtJmd0O3JlY2xhaW1fZGVzY3MpOwomIzQzOwkJaWYgKHVubGlrZWx5KCFwb29sLSZndDt0eF96Y19wZW5kaW5nX2Rlc2NzKSkKJiM0MzsJCQl4c2tfdHhfY29tcGxldGVkKHBvb2wsIDApOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoCiYjNDM7X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsCiYjNDM7CQkJCSBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKQomIzQzO3sKJiM0MzsJc3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9OwomIzQzOwl1MzIgZW50cmllczsKJiM0MzsKJiM0MzsJZW50cmllcyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLSZndDt0eCwgbWF4X2Rlc2NzKTsKJiM0MzsJaWYgKCFlbnRyaWVzKQomIzQzOwkJcmV0dXJuIGJhdGNoOwomIzQzOwomIzQzOwliYXRjaCA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMsIHBvb2wsIGRlc2NzLCBlbnRyaWVzKTsKJiM0MzsJaWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoJmFtcDtiYXRjaCkpIHsKJiM0MzsJCXhzLSZndDt0eC0mZ3Q7cXVldWVfZW1wdHlfZGVzY3MmIzQzOyYjNDM7OwomIzQzOwkJaWYgKGJhdGNoLmNvbnN1bWVkX2Rlc2NzKSB7CiYjNDM7CQkJX194c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwomIzQzOwkJCXhzLSZndDtzay5za193cml0ZV9zcGFjZSgmYW1wO3hzLSZndDtzayk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gYmF0Y2g7CiYjNDM7CX0KJiM0MzsKJiM0MzsJX194c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwomIzQzOwl4cy0mZ3Q7c2suc2tfd3JpdGVfc3BhY2UoJmFtcDt4cy0mZ3Q7c2spOwomIzQzOwlyZXR1cm4gYmF0Y2g7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoCiYjNDM7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9kZXNjcykKJiM0Mzt7CiYjNDM7CXUzMiBjcV9kZXNjc19iZWZvcmUsIGNxX2Rlc2NzX2FmdGVyOwomIzQzOwlzdHJ1Y3QgeHNrX3R4X2JhdGNoIHN1bV9iYXRjaCA9IHt9OwomIzQzOwlib29sIGJ1ZGdldF9leGhhdXN0ZWQ7CiYjNDM7CXUzMiBwZXJfc29ja2V0X2J1ZGdldDsKJiM0MzsJc3RydWN0IHhkcF9zb2NrICp4czsKJiM0MzsKJiM0MzsJbWF4X2Rlc2NzID0geHNrcV9wcm9kX25iX2ZyZWUocG9vbC0mZ3Q7Y3EsIG1heF9kZXNjcyk7CiYjNDM7CWlmICghbWF4X2Rlc2NzKQomIzQzOwkJcmV0dXJuIHN1bV9iYXRjaDsKJiM0MzsKJiM0MzsJLyogVGhlIGZhaXJuZXNzIHF1b3RhIG11c3QgYWxsb3cgb25lIG1heGltdW0tc2l6ZWQgdmFsaWQgcGFja2V0LiAqLwomIzQzOwlwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULAomIzQzOwkJCQkgIHBvb2wtJmd0O3hkcF96Y19tYXhfc2Vncyk7CiYjNDM7CiYjNDM7YWdhaW46CiYjNDM7CWJ1ZGdldF9leGhhdXN0ZWQgPSBmYWxzZTsKJiM0MzsJY3FfZGVzY3NfYmVmb3JlID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKCZhbXA7c3VtX2JhdGNoKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsICZhbXA7cG9vbC0mZ3Q7eHNrX3R4X2xpc3QsIHR4X2xpc3QpIHsKJiM0MzsJCXUzMiBidWRnZXQsIGJ1ZGdldF9sZWZ0LCBvZmZzZXQsIHJlbWFpbmluZzsKJiM0MzsJCXN0cnVjdCB4c2tfdHhfYmF0Y2ggY3Vycl9iYXRjaDsKJiM0MzsKJiM0MzsJCS8qIE9uY2UgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBhcHBlbmRlZCB0byB0aGUgQ1EgYWRkcmVzcwomIzQzOwkJICogYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9ycyBmcm9tIGFub3RoZXIKJiM0MzsJCSAqIHNvY2tldCBhZnRlciB0aGVtLiB4c2tfdHhfY29tcGxldGVkKCkgcmVsaWVzIG9uIGFsbCBkcml2ZXItdmlzaWJsZQomIzQzOwkJICogZGVzY3JpcHRvcnMgcHJlY2VkaW5nIGFsbCByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnMgaW4gQ1Egb3JkZXIuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChzdW1fYmF0Y2gucmVjbGFpbV9kZXNjcykKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLSZndDt0eF9kZXNjcyAqLwomIzQzOwkJb2Zmc2V0ID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKCZhbXA7c3VtX2JhdGNoKTsKJiM0MzsJCWlmIChvZmZzZXQgJmd0Oz0gbWF4X2Rlc2NzKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJaWYgKHhzLSZndDt0eF9idWRnZXRfc3BlbnQgJmd0Oz0gcGVyX3NvY2tldF9idWRnZXQpIHsKJiM0MzsJCQlpZiAoeHNrcV9jb25zX25iX2VudHJpZXMoeHMtJmd0O3R4LCAxKSkKJiM0MzsJCQkJYnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlidWRnZXRfbGVmdCA9IHBlcl9zb2NrZXRfYnVkZ2V0IC0geHMtJmd0O3R4X2J1ZGdldF9zcGVudDsKJiM0MzsJCXJlbWFpbmluZyA9IG1heF9kZXNjcyAtIG9mZnNldDsKJiM0MzsJCWJ1ZGdldCA9IG1pbihyZW1haW5pbmcsIGJ1ZGdldF9sZWZ0KTsKJiM0MzsKJiM0MzsJCWN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cywKJiM0MzsJCQkJCQkJICAgICAgcG9vbC0mZ3Q7dHhfZGVzY3MgJiM0Mzsgb2Zmc2V0LAomIzQzOwkJCQkJCQkgICAgICBidWRnZXQpOwomIzQzOwkJaWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoJmFtcDtjdXJyX2JhdGNoKSkgewomIzQzOwkJCWlmIChjdXJyX2JhdGNoLmJ1ZGdldF9saW1pdGVkICZhbXA7JmFtcDsgYnVkZ2V0X2xlZnQgJmx0OyByZW1haW5pbmcpCiYjNDM7CQkJCWJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlOwomIzQzOwkJCXhzLSZndDt0eF9idWRnZXRfc3BlbnQgJiM0Mzs9IGN1cnJfYmF0Y2guY29uc3VtZWRfZGVzY3M7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQl4cy0mZ3Q7dHhfYnVkZ2V0X3NwZW50ICYjNDM7PSBjdXJyX2JhdGNoLmNvbnN1bWVkX2Rlc2NzOwomIzQzOwkJc3VtX2JhdGNoLnR4X2Rlc2NzICYjNDM7PSBjdXJyX2JhdGNoLnR4X2Rlc2NzOwomIzQzOwkJc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgJiM0Mzs9IGN1cnJfYmF0Y2gucmVjbGFpbV9kZXNjczsKJiM0MzsJfQomIzQzOwomIzQzOwljcV9kZXNjc19hZnRlciA9IHhza190eF9iYXRjaF9jcV9kZXNjcygmYW1wO3N1bV9iYXRjaCk7CiYjNDM7CiYjNDM7CWlmIChzdW1fYmF0Y2gucmVjbGFpbV9kZXNjcyB8fCBjcV9kZXNjc19hZnRlciAmZ3Q7PSBtYXhfZGVzY3MpCiYjNDM7CQlyZXR1cm4gc3VtX2JhdGNoOwomIzQzOwomIzQzOwkvKiBDb250aW51ZSBmaWxsaW5nIHRoZSBiYXRjaCB3aGlsZSB0aGlzIHBhc3MgbWFkZSBwcm9ncmVzcyAqLwomIzQzOwlpZiAoY3FfZGVzY3NfYmVmb3JlICE9IGNxX2Rlc2NzX2FmdGVyKQomIzQzOwkJZ290byBhZ2FpbjsKJiM0MzsKJiM0MzsJaWYgKCFidWRnZXRfZXhoYXVzdGVkKQomIzQzOwkJcmV0dXJuIHN1bV9iYXRjaDsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsICZhbXA7cG9vbC0mZ3Q7eHNrX3R4X2xpc3QsIHR4X2xpc3QpCiYjNDM7CQl4cy0mZ3Q7dHhfYnVkZ2V0X3NwZW50ID0gMDsKJiM0MzsJZ290byBhZ2FpbjsKJiM0Mzt9CiYjNDM7CiB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cykKIHsKJiM0MzsJc3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9OwogCXN0cnVjdCB4ZHBfc29jayAqeHM7CiYjNDM7CXUzMiBjcV9jYWNoZWRfcHJvZDsKIAogCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRShwb29sLSZndDtyZWNsYWltX2Rlc2NzKSkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJbmJfcGt0cyA9IG1pbihuYl9wa3RzLCBwb29sLSZndDt0eF9kZXNjc19uZW50cmllcyk7CiYjNDM7CWlmICghbmJfcGt0cykKJiM0MzsJCWdvdG8gb3V0OwogCWlmICghbGlzdF9pc19zaW5ndWxhcigmYW1wO3Bvb2wtJmd0O3hza190eF9saXN0KSkgewotCQkvKiBGYWxsYmFjayB0byB0aGUgbm9uLWJhdGNoZWQgdmVyc2lvbiAqLwomIzQzOwkJLyogS2VlcCB0aGUgbGVnYWN5IG9uZS1kZXNjcmlwdG9yIGZhbGxiYWNrIGZvciBub24tU0cgdXNlcnMuICBUaGUKJiM0MzsJCSAqIHNoYXJlZCBTRyBwYXRoIG5lZWRzIHBhY2tldC1mcmFtZWQgcGFyc2luZyBzbyBpbnZhbGlkL292ZXJmbG93ZWQKJiM0MzsJCSAqIG11bHRpLWJ1ZmZlciBwYWNrZXRzIGFyZSBkcmFpbmVkIGFzIGEgdW5pdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHBvb2wtJmd0O3VtZW0tJmd0O2ZsYWdzICZhbXA7IFhEUF9VTUVNX1NHX0ZMQUcpIHsKJiM0MzsJCQliYXRjaCA9IHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gocG9vbCwgbmJfcGt0cyk7CiYjNDM7CQkJY3FfY2FjaGVkX3Byb2QgPSBwb29sLSZndDtjcS0mZ3Q7Y2FjaGVkX3Byb2Q7CiYjNDM7CQkJeHNrX3R4X2NvbW1pdF9iYXRjaChwb29sLCAmYW1wO2JhdGNoLCBjcV9jYWNoZWRfcHJvZCk7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTsKIAl9CiAKIAl4cyA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoJmFtcDtwb29sLSZndDt4c2tfdHhfbGlzdCwgc3RydWN0IHhkcF9zb2NrLCB0eF9saXN0KTsKLQlpZiAoIXhzKSB7Ci0JCW5iX3BrdHMgPSAwOwomIzQzOwlpZiAoIXhzKQogCQlnb3RvIG91dDsKLQl9CiAKIAluYl9wa3RzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtJmd0O3R4LCBuYl9wa3RzKTsKIApAQCAtNjAzLDE5ICYjNDM7NzY3LDE4IEBAIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKQogCWlmICghbmJfcGt0cykKIAkJZ290byBvdXQ7CiAKLQluYl9wa3RzID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cy0mZ3Q7dHgsIHBvb2wsIG5iX3BrdHMpOwotCWlmICghbmJfcGt0cykgewotCQl4cy0mZ3Q7dHgtJmd0O3F1ZXVlX2VtcHR5X2Rlc2NzJiM0MzsmIzQzOzsKJiM0MzsJYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cywgcG9vbC0mZ3Q7dHhfZGVzY3MsCiYjNDM7CQkJCQkJIG5iX3BrdHMpOwomIzQzOwluYl9wa3RzID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKCZhbXA7YmF0Y2gpOwomIzQzOwlpZiAoIW5iX3BrdHMpCiAJCWdvdG8gb3V0OwotCX0KIAotCV9feHNrcV9jb25zX3JlbGVhc2UoeHMtJmd0O3R4KTsKLQl4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLSZndDtjcSwgcG9vbC0mZ3Q7dHhfZGVzY3MsIG5iX3BrdHMpOwotCXhzLSZndDtzay5za193cml0ZV9zcGFjZSgmYW1wO3hzLSZndDtzayk7CiYjNDM7CWNxX2NhY2hlZF9wcm9kID0gcG9vbC0mZ3Q7Y3EtJmd0O2NhY2hlZF9wcm9kOwomIzQzOwl4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsICZhbXA7YmF0Y2gsIGNxX2NhY2hlZF9wcm9kKTsKIAogb3V0OgogCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiBuYl9wa3RzOwomIzQzOwlyZXR1cm4gYmF0Y2gudHhfZGVzY3M7CiB9CiBFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7CiAKQEAgLTczNyw2ICYjNDM7OTAwLDE5IEBAIHN0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3Bvb2wtJmd0O2NxX3Byb2RfbG9jaywgZmxhZ3MpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXUzMiBpZHg7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cG9vbC0mZ3Q7Y3FfcHJvZF9sb2NrLCBmbGFncyk7CiYjNDM7CWlkeCA9IHhza3FfZ2V0X3Byb2QocG9vbC0mZ3Q7Y3EpOwomIzQzOwl4c2txX3Byb2Rfd3JpdGVfYWRkcihwb29sLSZndDtjcSwgaWR4LCBkZXNjLSZndDthZGRyKTsKJiM0MzsJeHNrcV9wcm9kX3N1Ym1pdF9uKHBvb2wtJmd0O2NxLCAxKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3Bvb2wtJmd0O2NxX3Byb2RfbG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHhza19jcV9jYW5jZWxfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbikKIHsKIAlzcGluX2xvY2soJmFtcDtwb29sLSZndDtjcS0mZ3Q7Y3FfY2FjaGVkX3Byb2RfbG9jayk7CkBAIC03OTQsOCAmIzQzOzk3MCwxMSBAQCBzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogc3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JeGRwX3NrKHNrYi0mZ3Q7c2spLSZndDt0eC0mZ3Q7aW52YWxpZF9kZXNjcyAmIzQzOz0geHNrX2dldF9udW1fZGVzYyhza2IpOwotCXhza19jb25zdW1lX3NrYihza2IpOwomIzQzOwlzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi0mZ3Q7c2spOwomIzQzOwomIzQzOwl4cy0mZ3Q7dHgtJmd0O2ludmFsaWRfZGVzY3MgJiM0Mzs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTsKJiM0MzsJY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJeHMtJmd0O3NrYiA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsCkBAIC04NzcsNyAmIzQzOzEwNTYsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cywKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJCS8qIGluIGNhc2Ugb2YgLUVPVkVSRkxPVyB0aGF0IGNvdWxkIGhhcHBlbiBiZWxvdywKLQkJICogeHNrX2NvbnN1bWVfc2tiKCkgd2lsbCByZWxlYXNlIHRoaXMgbm9kZSBhcyB3aG9sZSBza2IKJiM0MzsJCSAqIHhza19kcm9wX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiCiAJCSAqIHdvdWxkIGJlIGRyb3BwZWQsIHdoaWNoIGltcGxpZXMgZnJlZWluZyBhbGwgbGlzdCBlbGVtZW50cwogCQkgKi8KIAkJeHNrX2FkZHItJmd0O2FkZHJzW3hza19hZGRyLSZndDtudW1fZGVzY3NdID0gZGVzYy0mZ3Q7YWRkcjsKQEAgLTk2OSw2ICYjNDM7MTE0OCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLAogCQkJCWdvdG8gZnJlZV9lcnI7CiAJCQl9CiAKJiM0MzsJCQl4c2tfYWRkci0mZ3Q7YWRkcnNbeHNrX2FkZHItJmd0O251bV9kZXNjc10gPSBkZXNjLSZndDthZGRyOwomIzQzOwogCQkJaWYgKHVubGlrZWx5KG5yX2ZyYWdzID09IChNQVhfU0tCX0ZSQUdTIC0gMSkgJmFtcDsmYW1wOyB4cF9tYl9kZXNjKGRlc2MpKSkgewogCQkJCWVyciA9IC1FT1ZFUkZMT1c7CiAJCQkJZ290byBmcmVlX2VycjsKQEAgLTk4Niw4ICYjNDM7MTE2Nyw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLAogCiAJCQlza2JfYWRkX3J4X2ZyYWcoc2tiLCBucl9mcmFncywgcGFnZSwgMCwgbGVuLCBQQUdFX1NJWkUpOwogCQkJcmVmY291bnRfYWRkKFBBR0VfU0laRSwgJmFtcDt4cy0mZ3Q7c2suc2tfd21lbV9hbGxvYyk7Ci0KLQkJCXhza19hZGRyLSZndDthZGRyc1t4c2tfYWRkci0mZ3Q7bnVtX2Rlc2NzXSA9IGRlc2MtJmd0O2FkZHI7CiAJCX0KIAl9CiAKQEAgLTEwNjAsMTEgJiM0MzsxMjM5LDIyIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaykKIAkJCWdvdG8gb3V0OwogCQl9CiAKJiM0MzsJCWlmICh1bmxpa2VseSh4cy0mZ3Q7ZHJhaW5fY29udCkpIHsKJiM0MzsJCQl4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy0mZ3Q7cG9vbCwgJmFtcDtkZXNjKTsKJiM0MzsKJiM0MzsJCQl4cy0mZ3Q7dHgtJmd0O2ludmFsaWRfZGVzY3MmIzQzOyYjNDM7OwomIzQzOwkJCXhza3FfY29uc19yZWxlYXNlKHhzLSZndDt0eCk7CiYjNDM7CQkJeHMtJmd0O2RyYWluX2NvbnQgPSB4cF9tYl9kZXNjKCZhbXA7ZGVzYyk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCXNrYiA9IHhza19idWlsZF9za2IoeHMsICZhbXA7ZGVzYyk7CiAJCWlmIChJU19FUlIoc2tiKSkgewogCQkJZXJyID0gUFRSX0VSUihza2IpOwogCQkJaWYgKGVyciAhPSAtRU9WRVJGTE9XKQogCQkJCWdvdG8gb3V0OwomIzQzOwkJCWlmICh4cF9tYl9kZXNjKCZhbXA7ZGVzYykpCiYjNDM7CQkJCXhzLSZndDtkcmFpbl9jb250ID0gdHJ1ZTsKIAkJCWVyciA9IDA7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTA5OCw5ICYjNDM7MTI4OCwyNCBAQCBzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spCiAJfQogCiAJaWYgKHhza3FfaGFzX2Rlc2NzKHhzLSZndDt0eCkpIHsKJiM0MzsJCWJvb2wgcmVjbGFpbV9kZXNjID0geHMtJmd0O3NrYiB8fCB4cy0mZ3Q7ZHJhaW5fY29udDsKJiM0MzsKJiM0MzsJCWlmIChyZWNsYWltX2Rlc2MpIHsKJiM0MzsJCQllcnIgPSB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoeHMtJmd0O3Bvb2wpOwomIzQzOwkJCWlmIChlcnIpIHsKJiM0MzsJCQkJZXJyID0gLUVBR0FJTjsKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwogCQlpZiAoeHMtJmd0O3NrYikKIAkJCXhza19kcm9wX3NrYih4cy0mZ3Q7c2tiKTsKJiM0MzsKJiM0MzsJCWlmIChyZWNsYWltX2Rlc2MpCiYjNDM7CQkJeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtJmd0O3Bvb2wsICZhbXA7ZGVzYyk7CiYjNDM7CiAJCXhza3FfY29uc19yZWxlYXNlKHhzLSZndDt0eCk7CiYjNDM7CQl4cy0mZ3Q7ZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoJmFtcDtkZXNjKTsKIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jIGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmMKaW5kZXggMWYyOGE5NjQxNTcxZTQuLmI4NjJhZGRjZDhmZGFmIDEwMDY0NAotLS0gYS9uZXQveGRwL3hza19idWZmX3Bvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuYwpAQCAtNDgsNiAmIzQzOzQ4LDcgQEAgaW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKQogCWlmICghcG9vbC0mZ3Q7dHhfZGVzY3MpCiAJCXJldHVybiAtRU5PTUVNOwogCiYjNDM7CXBvb2wtJmd0O3R4X2Rlc2NzX25lbnRyaWVzID0geHMtJmd0O3R4LSZndDtuZW50cmllczsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2tfcXVldWUuaCBiL25ldC94ZHAveHNrX3F1ZXVlLmgKaW5kZXggM2UzZmJiNzNkMjNlMmYuLmExNWZmMTkyOWRiNjIzIDEwMDY0NAotLS0gYS9uZXQveGRwL3hza19xdWV1ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrX3F1ZXVlLmgKQEAgLTU4LDYgJiM0Mzs1OCwxOCBAQCBzdHJ1Y3QgcGFyc2VkX2Rlc2MgewogCXUzMiB2YWxpZDsKIH07CiAKJiM0MztzdHJ1Y3QgeHNrX3R4X2JhdGNoIHsKJiM0MzsJdTMyIHR4X2Rlc2NzOwomIzQzOwl1MzIgcmVjbGFpbV9kZXNjczsKJiM0MzsJdTMyIGNvbnN1bWVkX2Rlc2NzOwomIzQzOwlib29sIGJ1ZGdldF9saW1pdGVkOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1MzIgeHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGNvbnN0IHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJhdGNoLSZndDt0eF9kZXNjcyAmIzQzOyBiYXRjaC0mZ3Q7cmVjbGFpbV9kZXNjczsKJiM0Mzt9CiYjNDM7CiAvKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBzaGFyZWQgc3RhdGUgb2YgdGhlIHJpbmdzIGFyZSBhIHNpbXBsZQogICogY2lyY3VsYXIgYnVmZmVyLCBhcyBvdXRsaW5lZCBpbgogICogRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9jaXJjdWxhci1idWZmZXJzLnJzdC4gRm9yIHRoZSBSeCBhbmQKQEAgLTI2MywxNyAmIzQzOzI3NSwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VfZGVzYyhzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKIAlwYXJzZWQtJmd0O21iID0geHBfbWJfZGVzYyhkZXNjKTsKIH0KIAotc3RhdGljIGlubGluZQotdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCi0JCQkgICAgICB1MzIgbWF4KQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhza190eF9iYXRjaAomIzQzO3hza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCiYjNDM7CQkJICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4KQogewotCXUzMiBjYWNoZWRfY29ucyA9IHEtJmd0O2NhY2hlZF9jb25zLCBuYl9lbnRyaWVzID0gMDsKLQlzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC0mZ3Q7dHhfZGVzY3M7Ci0JdTMyIHRvdGFsX2Rlc2NzID0gMCwgbnJfZnJhZ3MgPSAwOwomIzQzOwlib29sIGRyYWluID0gUkVBRF9PTkNFKHhzLSZndDtkcmFpbl9jb250KTsKJiM0MzsJdTMyIGNhY2hlZF9jb25zLCBuYl9lbnRyaWVzID0gMCwgcmVsZWFzZWQ7CiYjNDM7CXN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTsKJiM0MzsJc3RydWN0IHhza19xdWV1ZSAqcSA9IHhzLSZndDt0eDsKJiM0MzsJdTMyIG5yX2ZyYWdzID0gMDsKJiM0MzsKJiM0MzsJY2FjaGVkX2NvbnMgPSBxLSZndDtjYWNoZWRfY29uczsKIAotCS8qIHRyYWNrIGZpcnN0IGVudHJ5LCBpZiBzdHVtYmxlIHVwb24gKmFueSogaW52YWxpZCBkZXNjcmlwdG9yLCByZXdpbmQKLQkgKiBjdXJyZW50IHBhY2tldCB0aGF0IGNvbnNpc3RzIG9mIGZyYWdzIGFuZCBzdG9wIHRoZSBwcm9jZXNzaW5nCi0JICovCiAJd2hpbGUgKGNhY2hlZF9jb25zICE9IHEtJmd0O2NhY2hlZF9wcm9kICZhbXA7JmFtcDsgbmJfZW50cmllcyAmbHQ7IG1heCkgewogCQlzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqcmluZyA9IChzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqKXEtJmd0O3Jpbmc7CiAJCXUzMiBpZHggPSBjYWNoZWRfY29ucyAmYW1wOyBxLSZndDtyaW5nX21hc2s7CkBAIC0yODIsMjYgJiM0MzsyOTUsNDkgQEAgdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCiAJCWRlc2NzW25iX2VudHJpZXNdID0gcmluZy0mZ3Q7ZGVzY1tpZHhdOwogCQljYWNoZWRfY29ucyYjNDM7JiM0Mzs7CiAJCXBhcnNlX2Rlc2MocSwgcG9vbCwgJmFtcDtkZXNjc1tuYl9lbnRyaWVzXSwgJmFtcDtwYXJzZWQpOwotCQlpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpCi0JCQlicmVhazsKJiM0MzsJCWlmICh1bmxpa2VseSghcGFyc2VkLnZhbGlkKSkgewomIzQzOwkJCWlmICghZHJhaW4gJmFtcDsmYW1wOyAhbnJfZnJhZ3MgJmFtcDsmYW1wOyAhcGFyc2VkLm1iKQomIzQzOwkJCQlicmVhazsKJiM0MzsKJiM0MzsJCQlkcmFpbiA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlucl9mcmFncyYjNDM7JiM0Mzs7CiYjNDM7CQluYl9lbnRyaWVzJiM0MzsmIzQzOzsKIAogCQlpZiAobGlrZWx5KCFwYXJzZWQubWIpKSB7Ci0JCQl0b3RhbF9kZXNjcyAmIzQzOz0gKG5yX2ZyYWdzICYjNDM7IDEpOwotCQkJbnJfZnJhZ3MgPSAwOwotCQl9IGVsc2UgewotCQkJbnJfZnJhZ3MmIzQzOyYjNDM7OwotCQkJaWYgKG5yX2ZyYWdzID09IHBvb2wtJmd0O3hkcF96Y19tYXhfc2VncykgewomIzQzOwkJCWlmICh1bmxpa2VseShkcmFpbikpIHsKJiM0MzsJCQkJYmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzOwomIzQzOwkJCQlXUklURV9PTkNFKHhzLSZndDtkcmFpbl9jb250LCBmYWxzZSk7CiAJCQkJbnJfZnJhZ3MgPSAwOwogCQkJCWJyZWFrOwogCQkJfQomIzQzOwomIzQzOwkJCWJhdGNoLnR4X2Rlc2NzICYjNDM7PSBucl9mcmFnczsKJiM0MzsJCQlucl9mcmFncyA9IDA7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobnJfZnJhZ3MgPT0gcG9vbC0mZ3Q7eGRwX3pjX21heF9zZWdzKQomIzQzOwkJCWRyYWluID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnJfZnJhZ3MpIHsKJiM0MzsJCWlmIChkcmFpbikgewomIzQzOwkJCWJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFnczsKJiM0MzsJCQlXUklURV9PTkNFKHhzLSZndDtkcmFpbl9jb250LCB0cnVlKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWYgKG5iX2VudHJpZXMgPT0gbWF4KQomIzQzOwkJCQliYXRjaC5idWRnZXRfbGltaXRlZCA9IHRydWU7CiYjNDM7CQkJY2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7CiAJCX0KLQkJbmJfZW50cmllcyYjNDM7JiM0Mzs7CiAJfQogCi0JY2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7CiYjNDM7CXJlbGVhc2VkID0gY2FjaGVkX2NvbnMgLSBxLSZndDtjYWNoZWRfY29uczsKIAkvKiBSZWxlYXNlIHZhbGlkIHBsdXMgYW55IGludmFsaWQgZW50cmllcyAqLwotCXhza3FfY29uc19yZWxlYXNlX24ocSwgY2FjaGVkX2NvbnMgLSBxLSZndDtjYWNoZWRfY29ucyk7Ci0JcmV0dXJuIHRvdGFsX2Rlc2NzOwomIzQzOwl4c2txX2NvbnNfcmVsZWFzZV9uKHEsIHJlbGVhc2VkKTsKJiM0MzsJYmF0Y2guY29uc3VtZWRfZGVzY3MgPSByZWxlYXNlZDsKJiM0MzsJcmV0dXJuIGJhdGNoOwogfQogCiAvKiBGdW5jdGlvbnMgZm9yIGNvbnN1bWVycyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKaW5kZXggNmViOTA5NmQwODRjMDEuLjdhYmI0OTM1ZWRmOWFkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKQEAgLTQyNywxNCAmIzQzOzQyNywxNCBAQCBzdGF0aWMgdTMyIHBrdF9uYl9mcmFncyh1MzIgZnJhbWVfc2l6ZSwgc3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW0sIHN0cnVjdCBwawogCX0KIAogCS8qIFNlYXJjaCBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGluIHZlcmJhdGltIG1vZGUgKi8KLQlpZiAoIXBrdF9jb250aW51ZXMocGt0LSZndDtvcHRpb25zKSB8fCAhcGt0LSZndDt2YWxpZCkKJiM0MzsJaWYgKCFwa3RfY29udGludWVzKHBrdC0mZ3Q7b3B0aW9ucykpCiAJCXJldHVybiBuYl9mcmFnczsKIAogCW5leHRfZnJhZyA9IHBrdF9zdHJlYW0tJmd0O2N1cnJlbnRfcGt0X25iOwogCXBrdCYjNDM7JiM0Mzs7CiAJd2hpbGUgKG5leHRfZnJhZyYjNDM7JiM0MzsgJmx0OyBwa3Rfc3RyZWFtLSZndDtuYl9wa3RzKSB7CiAJCW5iX2ZyYWdzJiM0MzsmIzQzOzsKLQkJaWYgKCFwa3RfY29udGludWVzKHBrdC0mZ3Q7b3B0aW9ucykgfHwgIXBrdC0mZ3Q7dmFsaWQpCiYjNDM7CQlpZiAoIXBrdF9jb250aW51ZXMocGt0LSZndDtvcHRpb25zKSkKIAkJCWJyZWFrOwogCQlwa3QmIzQzOyYjNDM7OwogCX0KQEAgLTY2NSwxMSAmIzQzOzY2NSwxMSBAQCBzdGF0aWMgc3RydWN0IHBrdF9zdHJlYW0gKl9fcGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgcwogCQkJaWYgKCFmcmFtZS0mZ3Q7dmFsaWQgfHwgIXBrdF9jb250aW51ZXMoZnJhbWUtJmd0O29wdGlvbnMpKQogCQkJCXBheWxvYWQmIzQzOyYjNDM7OwogCQl9IGVsc2UgewotCQkJaWYgKGZyYW1lLSZndDt2YWxpZCkKJiM0MzsJCQlpZiAoZnJhbWUtJmd0O3ZhbGlkKSB7CiAJCQkJbGVuICYjNDM7PSBmcmFtZS0mZ3Q7bGVuOwotCQkJaWYgKGZyYW1lLSZndDt2YWxpZCAmYW1wOyZhbXA7IHBrdF9jb250aW51ZXMoZnJhbWUtJmd0O29wdGlvbnMpKQotCQkJCWNvbnRpbnVlOwotCiYjNDM7CQkJCWlmIChwa3RfY29udGludWVzKGZyYW1lLSZndDtvcHRpb25zKSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJCXBrdC0mZ3Q7cGt0X25iID0gcGt0X25iOwogCQkJcGt0LSZndDtsZW4gPSBsZW47CiAJCQlwa3QtJmd0O3ZhbGlkID0gZnJhbWUtJmd0O3ZhbGlkOwpAQCAtMTIwOSw2ICYjNDM7MTIwOSw3IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLAogCWZvciAoaSA9IDA7IGkgJmx0OyB4c2stJmd0O2JhdGNoX3NpemU7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBwa3QgKnBrdCA9IHBrdF9zdHJlYW1fZ2V0X25leHRfdHhfcGt0KHBrdF9zdHJlYW0pOwogCQl1MzIgbmJfZnJhZ3NfbGVmdCwgbmJfZnJhZ3MsIGJ5dGVzX3dyaXR0ZW4gPSAwOwomIzQzOwkJc3RydWN0IHBrdCAqZmlyc3RfcGt0ID0gcGt0OwogCiAJCWlmICghcGt0KQogCQkJYnJlYWs7CkBAIC0xMjUzLDYgJiM0MzsxMjU0LDggQEAgc3RhdGljIGludCBfX3NlbmRfcGt0cyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssCiAJCWlmIChwa3QgJmFtcDsmYW1wOyBwa3QtJmd0O3ZhbGlkKSB7CiAJCQl2YWxpZF9wa3RzJiM0MzsmIzQzOzsKIAkJCXZhbGlkX2ZyYWdzICYjNDM7PSBuYl9mcmFnczsKJiM0MzsJCX0gZWxzZSBpZiAocGt0X3N0cmVhbS0mZ3Q7dmVyYmF0aW0gJmFtcDsmYW1wOyBwa3RfY29udGludWVzKGZpcnN0X3BrdC0mZ3Q7b3B0aW9ucykpIHsKJiM0MzsJCQl2YWxpZF9mcmFncyAmIzQzOz0gbmJfZnJhZ3M7CiAJCX0KIAl9CiAKQEAgLTIwOTksMTMgJiM0MzsyMTAyLDE2IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCQl7MCwgMCwgMCwgZmFsc2UsIDB9LAogCQkvKiBJbnZhbGlkIGFkZHJlc3MgaW4gdGhlIHNlY29uZCBmcmFtZSAqLwogCQl7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSwKLQkJe3VtZW1fc3osIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7dW1lbV9zeiAqIDIsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sCiAJCS8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi8KIAkJezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiAJCXswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sCiAJCS8qIEludmFsaWQgb3B0aW9ucyBpbiB0aGUgbWlkZGxlICovCiAJCXswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LAogCQl7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYU0tfREVTQ19fSU5WQUxJRF9PUFRJT059LAomIzQzOwkJezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LAogCQkvKiBUcmFuc21pdCAyIGZyYWdzLCByZWNlaXZlIDMgKi8KIAkJezAsIFhTS19VTUVNX19NQVhfRlJBTUVfU0laRSwgMCwgdHJ1ZSwgWERQX1BLVF9DT05URH0sCiAJCXswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIDB9LApAQCAtMjExNyw4ICYjNDM7MjEyMyw4IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCiAJaWYgKHVtZW0tJmd0O3VuYWxpZ25lZF9tb2RlKSB7CiAJCS8qIENyb3NzaW5nIGEgY2h1bmsgYm91bmRhcnkgYWxsb3dlZCAqLwotCQlwa3RzWzEyXS52YWxpZCA9IHRydWU7Ci0JCXBrdHNbMTNdLnZhbGlkID0gdHJ1ZTsKJiM0MzsJCXBrdHNbMTVdLnZhbGlkID0gdHJ1ZTsKJiM0MzsJCXBrdHNbMTZdLnZhbGlkID0gdHJ1ZTsKIAl9CiAKIAl0ZXN0LSZndDttdHUgPSBNQVhfRVRIX0pVTUJPX1NJWkU7CkBAIC0yMjcwLDcgJiM0MzsyMjc2LDcgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKIAkJbWF4X2ZyYWdzICYjNDM7PSAxOwogCX0KIAotCXBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyAmIzQzOyAyLCBzaXplb2Yoc3RydWN0IHBrdCkpOwomIzQzOwlwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgJiM0MzsgMywgc2l6ZW9mKHN0cnVjdCBwa3QpKTsKIAlpZiAoIXBrdHMpCiAJCXJldHVybiBURVNUX0ZBSUxVUkU7CiAKQEAgLTIyODgsMjQgJiM0MzsyMjk0LDMwIEBAIGludCB0ZXN0YXBwX3Rvb19tYW55X2ZyYWdzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJfQogCXBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDsKIAotCS8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0Ci0JICogY29udGludWVzIG9uIHRoZSBsYXN0IGZyYWcKLQkgKi8KLQlmb3IgKGkgPSBtYXhfZnJhZ3MgJiM0MzsgMTsgaSAmbHQ7IDIgKiBtYXhfZnJhZ3MgJiM0MzsgMTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJLyogQW4gaW52YWxpZCBwYWNrZXQgd2l0aCB0aGUgbWF4ICYjNDM7IDEgYW1vdW50IG9mIGZyYWdzICovCiYjNDM7CWZvciAoaSA9IG1heF9mcmFncyAmIzQzOyAxOyBpICZsdDsgMiAqIG1heF9mcmFncyAmIzQzOyAyOyBpJiM0MzsmIzQzOykgewogCQlwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTsKIAkJcGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDsKLQkJcGt0c1tpXS52YWxpZCA9IGZhbHNlOwomIzQzOwkJcGt0c1tpXS52YWxpZCA9IHRydWU7CiAJfQomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0ub3B0aW9ucyA9IDA7CiAKIAkvKiBWYWxpZCBwYWNrZXQgZm9yIHN5bmNoICovCi0JcGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDFdLmxlbiA9IE1JTl9QS1RfU0laRTsKLQlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0udmFsaWQgPSB0cnVlOwomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0ubGVuID0gTUlOX1BLVF9TSVpFOwomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0udmFsaWQgPSB0cnVlOwogCi0JaWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMikpIHsKJiM0MzsJaWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMykpIHsKIAkJZnJlZShwa3RzKTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKJiM0MzsJLyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0CiYjNDM7CSAqIF9fc2VuZF9wa3RzKCkgYWNjb3VudHMgaXRzIGRlc2NyaXB0b3JzIGluIG91dHN0YW5kaW5nX3R4LiBUaGUgUngKJiM0MzsJICogc3RyZWFtLCBob3dldmVyLCBtdXN0IG5vdCBleHBlY3QgdGhpcyBwYWNrZXQgb24gdGhlIHdpcmUuCiYjNDM7CSAqLwomIzQzOwl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrLSZndDtwa3Rfc3RyZWFtLSZndDtwa3RzWzJdLnZhbGlkID0gZmFsc2U7CiYjNDM7CXRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2stJmd0O3BrdF9zdHJlYW0tJmd0O25iX3ZhbGlkX2VudHJpZXMtLTsKJiM0MzsKIAlyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7CiAJZnJlZShwa3RzKTsKIAlyZXR1cm4gcmV0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTA2CgkJCQkJCQlvdXRwdXQ6IDU3CgkJCQkJCQl0aG91Z2h0czogNTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUZfWERQIE11bHRpLUJ1ZmZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZmlsZXMgcmVsYXRlZCB0byBBRl9YRFA6IGB4ZHBfc29jay5oYCwgYHhza19idWZmX3Bvb2wuaGAsIGB4c2suY2AsIGB4c2tfYnVmZl9wb29sLmNgLCBgeHNrX3F1ZXVlLmhgLCBhbmQgYSBzZWxmdGVzdC4gVGhpcyBpcyBhbGwgYWJvdXQgaGFuZGxpbmcgbXVsdGktYnVmZmVyIG9yIFNHIChzY2F0dGVyLWdhdGhlcikgcGFja2V0cyB3aXRoaW4gQUZfWERQLCB3aGljaCBwaXF1ZXMgbXkgaW50ZXJlc3QgaW1tZWRpYXRlbHkuIEl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgbG9naWMuIEkmIzM5O20gc2VlaW5nIGFkZGl0aW9ucyBvZiB2YXJpYWJsZXMgbGlrZSBgZHJhaW5fY29udGAsIGB0eF9kZXNjc19uZW50cmllc2AsIGByZWNsYWltX2Rlc2NzYCwgYW5kIGB0eF96Y19wZW5kaW5nX2Rlc2NzYCBpbiB0aGUgYHhkcF9zb2NrYCBhbmQgYHhza19idWZmX3Bvb2xgIHN0cnVjdHVyZXMsIHdoaWNoIGluZGljYXRlcyBjaGFuZ2VzIGluIGRlc2NyaXB0b3IgbWFuYWdlbWVudC4KCkZpcnN0LCBsZXQmIzM5O3MgY29uZmlybSBBRl9YRFAgaXRzZWxmIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQg4oCTIGdvb2QsIHRoYXQmIzM5O3MgYSBiYXNlbGluZS4gTm93LCBzaG91bGQgd2UgZnV6eiB0aGlzPyBBYnNvbHV0ZWx5LCBjb25zaWRlcmluZyB0aGlzIG1vZGlmaWVzIHRoZSBmdW5kYW1lbnRhbCBtdWx0aS1idWZmZXIgVFggcGF0aC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzLiBJdCYjMzk7cyBpbXBhY3RpbmcgY3JpdGljYWwgcGFydHMgb2YgdGhlIFhEUCBkYXRhIHBhdGguIEkmIzM5O3ZlIGdvdCBhIGxpc3QgaGVyZTogYHhza190eF9jb21wbGV0ZWRgLCBhbmQgc29tZSBuZXcgb25lcyBsaWtlIGB4c2tfdHhfY29tbWl0X2JhdGNoYCwgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCwgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgIGFuZCBgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRgLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBjaGFuZ2VzIHRvIGB4c2tfZHJvcF9za2JgLCBhbmQgdGhlIFNLQiBidWlsZGluZyBmdW5jdGlvbnMgYHhza19idWlsZF9za2JfemVyb2NvcHlgIGFuZCBgeHNrX2J1aWxkX3NrYmAuIEZpbmFsbHksIEkgc2VlIGBfX3hza19nZW5lcmljX3htaXRgLCBgeHBfYWxsb2NfdHhfZGVzY3NgLCBhbmQgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgIGluIHRoZSBtaXguCgpUaW1lIHRvIGRyaWxsIGRvd24uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIHRocm91Z2ggYG5ldC94ZHAveHNrLmNgIGFuZCBgbmV0L3hkcC94c2tfcXVldWUuaGAgdG8gY29uZmlybSB0aGUgZXhhY3QgZnVuY3Rpb24gbmFtZXMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29kZSBiZWluZyBjaGFuZ2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucyBpcyBjcnVjaWFsIGZvciBidWlsZGluZyBhIHN0cm9uZyBmdXp6aW5nIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KHZvaWR8dTMyfGludHxzdHJ1Y3QgW2Etel9dJiM0MzsgXFwqKSBbYS16X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz00OT1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnhza190eF9nZW5lcmljX2NhY2hlO1xubmV0L3hkcC94c2suYy01MC1cbm5ldC94ZHAveHNrLmM6NTE6dm9pZCB4c2tfc2V0X3J4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy01Mi17XG4tLVxubmV0L3hkcC94c2suYz01OT1FWFBPUlRfU1lNQk9MKHhza19zZXRfcnhfbmVlZF93YWtldXApO1xubmV0L3hkcC94c2suYy02MC1cbm5ldC94ZHAveHNrLmM6NjE6dm9pZCB4c2tfc2V0X3R4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy02Mi17XG4tLVxubmV0L3hkcC94c2suYz03Nj1FWFBPUlRfU1lNQk9MKHhza19zZXRfdHhfbmVlZF93YWtldXApO1xubmV0L3hkcC94c2suYy03Ny1cbm5ldC94ZHAveHNrLmM6Nzg6dm9pZCB4c2tfY2xlYXJfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTc5LXtcbi0tXG5uZXQveGRwL3hzay5jPTg2PUVYUE9SVF9TWU1CT0woeHNrX2NsZWFyX3J4X25lZWRfd2FrZXVwKTtcbm5ldC94ZHAveHNrLmMtODctXG5uZXQveGRwL3hzay5jOjg4OnZvaWQgeHNrX2NsZWFyX3R4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy04OS17XG4tLVxubmV0L3hkcC94c2suYz0xMjE9RVhQT1JUX1NZTUJPTCh4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQpO1xubmV0L3hkcC94c2suYy0xMjItXG5uZXQveGRwL3hzay5jOjEyMzpzdGF0aWMgdm9pZCBfX3hza19jbGVhcl9wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaWQpXG5uZXQveGRwL3hzay5jLTEyNC17XG4tLVxubmV0L3hkcC94c2suYy0xMzAtXG5uZXQveGRwL3hzay5jOjEzMTp2b2lkIHhza19jbGVhcl9wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaWQpXG5uZXQveGRwL3hzay5jLTEzMi17XG4tLVxubmV0L3hkcC94c2suYy0xNDYtXG5uZXQveGRwL3hzay5jOjE0NzpzdGF0aWMgaW50IF9feHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3hkcC94c2suYy0xNDgtXHRcdFx0XHQgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUxNiBxdWV1ZV9pZClcbi0tXG5uZXQveGRwL3hzay5jLTE2NC0gKi9cbm5ldC94ZHAveHNrLmM6MTY1OmludCB4c2tfcmVnX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxubmV0L3hkcC94c2suYy0xNjYtXHRcdFx0dTE2IHF1ZXVlX2lkKVxuLS1cbm5ldC94ZHAveHNrLmMtMTkwLVxubmV0L3hkcC94c2suYzoxOTE6c3RhdGljIGludCBfX3hza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYiwgdTMyIGxlbixcbm5ldC94ZHAveHNrLmMtMTkyLVx0XHRcdHUzMiBmbGFncylcbi0tXG5uZXQveGRwL3hzay5jLTIwNy1cbm5ldC94ZHAveHNrLmM6MjA4OnN0YXRpYyB2b2lkIF9feHNrX3Jjdl96Y19zYWZlKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsXG5uZXQveGRwL3hzay5jLTIwOS1cdFx0XHQgICAgICB1MzIgbGVuLCB1MzIgZmxhZ3MpXG4tLVxubmV0L3hkcC94c2suYy0yMTgtXG5uZXQveGRwL3hzay5jOjIxOTpzdGF0aWMgaW50IHhza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXG5uZXQveGRwL3hzay5jLTIyMC17XG4tLVxubmV0L3hkcC94c2suYz0yNjA9c3RhdGljIHZvaWQgKnhza19jb3B5X3hkcF9zdGFydChzdHJ1Y3QgeGRwX2J1ZmYgKmZyb20pXG4tLVxubmV0L3hkcC94c2suYy0yNjctXG5uZXQveGRwL3hzay5jOjI2ODpzdGF0aWMgdTMyIHhza19jb3B5X3hkcCh2b2lkICp0bywgdm9pZCAqKmZyb20sIHUzMiB0b19sZW4sXG5uZXQveGRwL3hzay5jLTI2OS1cdFx0XHR1MzIgKmZyb21fbGVuLCBza2JfZnJhZ190ICoqZnJhZywgdTMyIHJlbSlcbi0tXG5uZXQveGRwL3hzay5jLTI5NS1cbm5ldC94ZHAveHNrLmM6Mjk2OnN0YXRpYyBpbnQgX194c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxubmV0L3hkcC94c2suYy0yOTcte1xuLS1cbm5ldC94ZHAveHNrLmM9MzY1PXN0YXRpYyBib29sIHhza190eF93cml0ZWFibGUoc3RydWN0IHhkcF9zb2NrICp4cylcbi0tXG5uZXQveGRwL3hzay5jLTM3Mi1cbm5ldC94ZHAveHNrLmM6MzczOnN0YXRpYyB2b2lkIF9feHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMzc0LXtcbi0tXG5uZXQveGRwL3hzay5jPTM5MD1zdGF0aWMgYm9vbCB4c2tfZGV2X3F1ZXVlX3ZhbGlkKGNvbnN0IHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy00MTQtXG5uZXQveGRwL3hzay5jOjQxNTpzdGF0aWMgaW50IHhza19yY3ZfY2hlY2soc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXG5uZXQveGRwL3hzay5jLTQxNi17XG4tLVxubmV0L3hkcC94c2suYy00MjktXG5uZXQveGRwL3hzay5jOjQzMDpzdGF0aWMgdm9pZCB4c2tfZmx1c2goc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtNDMxLXtcbi0tXG5uZXQveGRwL3hzay5jLTQzNi1cbm5ldC94ZHAveHNrLmM6NDM3OmludCB4c2tfZ2VuZXJpY19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQveGRwL3hzay5jLTQzOC17XG4tLVxubmV0L3hkcC94c2suYy00NTItXG5uZXQveGRwL3hzay5jOjQ1MzpzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQveGRwL3hzay5jLTQ1NC17XG4tLVxubmV0L3hkcC94c2suYy00NzItXG5uZXQveGRwL3hzay5jOjQ3MzppbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00NzQte1xuLS1cbm5ldC94ZHAveHNrLmMtNDg5LVxubmV0L3hkcC94c2suYzo0OTA6dm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdClcbm5ldC94ZHAveHNrLmMtNDkxLXtcbi0tXG5uZXQveGRwL3hzay5jLTQ5OS1cbm5ldC94ZHAveHNrLmM6NTAwOnZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXG5uZXQveGRwL3hzay5jLTUwMS17XG4tLVxubmV0L3hkcC94c2suYz01MjE9RVhQT1JUX1NZTUJPTCh4c2tfdHhfY29tcGxldGVkKTtcbm5ldC94ZHAveHNrLmMtNTIyLVxubmV0L3hkcC94c2suYzo1MjM6dm9pZCB4c2tfdHhfcmVsZWFzZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbm5ldC94ZHAveHNrLmMtNTI0LXtcbi0tXG5uZXQveGRwL3hzay5jPTU4MD1FWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX2Rlc2MpO1xubmV0L3hkcC94c2suYy01ODEtXG5uZXQveGRwL3hzay5jOjU4MjpzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50cmllcylcbm5ldC94ZHAveHNrLmMtNTgzLXtcbi0tXG5uZXQveGRwL3hzay5jLTU5My1cbm5ldC94ZHAveHNrLmM6NTk0OnN0YXRpYyB2b2lkIHhza190eF9jb21taXRfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG5uZXQveGRwL3hzay5jLTU5NS1cdFx0XHRcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoLFxuLS1cbm5ldC94ZHAveHNrLmM9NjQ4PXhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXG4tLVxubmV0L3hkcC94c2suYy03MjUtXG5uZXQveGRwL3hzay5jOjcyNjp1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcbm5ldC94ZHAveHNrLmMtNzI3LXtcbi0tXG5uZXQveGRwL3hzay5jPTc4Mz1FWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XG5uZXQveGRwL3hzay5jLTc4NC1cbm5ldC94ZHAveHNrLmM6Nzg1OnN0YXRpYyBpbnQgeHNrX3dha2V1cChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCB1OCBmbGFncylcbm5ldC94ZHAveHNrLmMtNzg2LXtcbi0tXG5uZXQveGRwL3hzay5jLTc5MS1cbm5ldC94ZHAveHNrLmM6NzkyOnN0YXRpYyBpbnQgeHNrX2NxX3Jlc2VydmVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy03OTMte1xuLS1cbm5ldC94ZHAveHNrLmM9ODI2PXN0YXRpYyBzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcnNfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGRwL3hzay5jLTgzOC1cbm5ldC94ZHAveHNrLmM6ODM5OnN0YXRpYyBpbnQgeHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHU2NCBhZGRyKVxubmV0L3hkcC94c2suYy04NDAte1xuLS1cbm5ldC94ZHAveHNrLmMtODUwLVxubmV0L3hkcC94c2suYzo4NTE6c3RhdGljIHZvaWQgeHNrX2luY19udW1fZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy04NTIte1xuLS1cbm5ldC94ZHAveHNrLmMtODYwLVxubmV0L3hkcC94c2suYzo4NjE6c3RhdGljIHUzMiB4c2tfZ2V0X251bV9kZXNjKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTg2Mi17XG4tLVxubmV0L3hkcC94c2suYy04NzItXG5uZXQveGRwL3hzay5jOjg3MzpzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxubmV0L3hkcC94c2suYy04NzQtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZHAveHNrLmMtOTAyLVxubmV0L3hkcC94c2suYzo5MDM6c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG5uZXQveGRwL3hzay5jLTkwNC1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4tLVxubmV0L3hkcC94c2suYy05MTUtXG5uZXQveGRwL3hzay5jOjkxNjpzdGF0aWMgdm9pZCB4c2tfY3FfY2FuY2VsX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG4pXG5uZXQveGRwL3hzay5jLTkxNy17XG4tLVxubmV0L3hkcC94c2suYz05MjM9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcbm5ldC94ZHAveHNrLmM6OTI0OnZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy05MjUte1xuLS1cbm5ldC94ZHAveHNrLmMtOTM2LVxubmV0L3hkcC94c2suYzo5Mzc6c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy05MzgtXHRcdFx0ICAgICB1NjQgYWRkcilcbi0tXG5uZXQveGRwL3hzay5jLTk1Mi1cbm5ldC94ZHAveHNrLmM6OTUzOnN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy05NTQte1xuLS1cbm5ldC94ZHAveHNrLmMtOTcwLVxubmV0L3hkcC94c2suYzo5NzE6c3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTk3Mi17XG4tLVxubmV0L3hkcC94c2suYy05NzktXG5uZXQveGRwL3hzay5jOjk4MDpzdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxubmV0L3hkcC94c2suYy05ODEtXHRcdFx0ICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYywgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4tLVxubmV0L3hkcC94c2suYz0xMDk4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTIwMy1cbm5ldC94ZHAveHNrLmM6MTIwNDpzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTEyMDUte1xuLS1cbm5ldC94ZHAveHNrLmMtMTMxOC1cbm5ldC94ZHAveHNrLmM6MTMxOTpzdGF0aWMgaW50IHhza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hkcC94c2suYy0xMzIwLXtcbi0tXG5uZXQveGRwL3hzay5jPTEzMzI9c3RhdGljIGJvb2wgeHNrX25vX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3hkcC94c2suYy0xMzQyLVxubmV0L3hkcC94c2suYzoxMzQzOnN0YXRpYyBpbnQgeHNrX2NoZWNrX2NvbW1vbihzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy0xMzQ0LXtcbi0tXG5uZXQveGRwL3hzay5jLTEzNTItXG5uZXQveGRwL3hzay5jOjEzNTM6c3RhdGljIGludCBfX3hza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXG5uZXQveGRwL3hzay5jLTEzNTQte1xuLS1cbm5ldC94ZHAveHNrLmMtMTM4My1cbm5ldC94ZHAveHNrLmM6MTM4NDpzdGF0aWMgaW50IHhza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXG5uZXQveGRwL3hzay5jLTEzODUte1xuLS1cbm5ldC94ZHAveHNrLmMtMTM5NC1cbm5ldC94ZHAveHNrLmM6MTM5NTpzdGF0aWMgaW50IF9feHNrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxubmV0L3hkcC94c2suYy0xMzk2LXtcbi0tXG5uZXQveGRwL3hzay5jLTE0MjAtXG5uZXQveGRwL3hzay5jOjE0MjE6c3RhdGljIGludCB4c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG5uZXQveGRwL3hzay5jLTE0MjIte1xuLS1cbm5ldC94ZHAveHNrLmM9MTQzMj1zdGF0aWMgX19wb2xsX3QgeHNrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3hkcC94c2suYy0xNDY0LVxubmV0L3hkcC94c2suYzoxNDY1OnN0YXRpYyBpbnQgeHNrX2luaXRfcXVldWUodTMyIGVudHJpZXMsIHN0cnVjdCB4c2tfcXVldWUgKipxdWV1ZSxcbm5ldC94ZHAveHNrLmMtMTQ2Ni1cdFx0XHQgIGJvb2wgdW1lbV9xdWV1ZSlcbi0tXG5uZXQveGRwL3hzay5jLTE0ODItXG5uZXQveGRwL3hzay5jOjE0ODM6c3RhdGljIHZvaWQgeHNrX3VuYmluZF9kZXYoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMTQ4NC17XG4tLVxubmV0L3hkcC94c2suYz0xNDk3PXN0YXRpYyBzdHJ1Y3QgeHNrX21hcCAqeHNrX2dldF9tYXBfbGlzdF9lbnRyeShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTUxNi1cbm5ldC94ZHAveHNrLmM6MTUxNzpzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2Zyb21fbWFwcyhzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy0xNTE4LXtcbi0tXG5uZXQveGRwL3hzay5jLTE1NDItXG5uZXQveGRwL3hzay5jOjE1NDM6c3RhdGljIGludCB4c2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L3hkcC94c2suYy0xNTQ0LXtcbi0tXG5uZXQveGRwL3hzay5jPTE1OTg9c3RhdGljIGJvb2wgeHNrX3ZhbGlkYXRlX3F1ZXVlcyhzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuLS1cbm5ldC94ZHAveHNrLmMtMTYwMi1cbm5ldC94ZHAveHNrLmM6MTYwMzpzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcl9sZW4pXG5uZXQveGRwL3hzay5jLTE2MDQte1xuLS1cbm5ldC94ZHAveHNrLmM9MTc5MD1zdHJ1Y3QgeGRwX3VtZW1fcmVnX3YxIHtcbi0tXG5uZXQveGRwL3hzay5jLTE3OTYtXG5uZXQveGRwL3hzay5jOjE3OTc6c3RhdGljIGludCB4c2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L3hkcC94c2suYy0xNzk4LVx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQveGRwL3hzay5jLTE5MTktXG5uZXQveGRwL3hzay5jOjE5MjA6c3RhdGljIHZvaWQgeHNrX2VudGVyX3J4dHhfb2Zmc2V0cyhzdHJ1Y3QgeGRwX3Jpbmdfb2Zmc2V0X3YxICpyaW5nKVxubmV0L3hkcC94c2suYy0xOTIxLXtcbi0tXG5uZXQveGRwL3hzay5jLTE5MjYtXG5uZXQveGRwL3hzay5jOjE5Mjc6c3RhdGljIHZvaWQgeHNrX2VudGVyX3VtZW1fb2Zmc2V0cyhzdHJ1Y3QgeGRwX3Jpbmdfb2Zmc2V0X3YxICpyaW5nKVxubmV0L3hkcC94c2suYy0xOTI4LXtcbi0tXG5uZXQveGRwL3hzay5jPTE5MzQ9c3RydWN0IHhkcF9zdGF0aXN0aWNzX3YxIHtcbi0tXG5uZXQveGRwL3hzay5jLTE5MzktXG5uZXQveGRwL3hzay5jOjE5NDA6c3RhdGljIGludCB4c2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L3hkcC94c2suYy0xOTQxLVx0XHRcdCAgc29ja29wdF90ICpvcHQpXG4tLVxubmV0L3hkcC94c2suYy0yMDY3LVxubmV0L3hkcC94c2suYzoyMDY4OnN0YXRpYyBpbnQgeHNrX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQveGRwL3hzay5jLTIwNjktXHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5uZXQveGRwL3hzay5jLTIxMDUtXG5uZXQveGRwL3hzay5jOjIxMDY6c3RhdGljIGludCB4c2tfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxubmV0L3hkcC94c2suYy0yMTA3LVx0XHRcdHVuc2lnbmVkIGxvbmcgbXNnLCB2b2lkICpwdHIpXG4tLVxubmV0L3hkcC94c2suYz0yMTQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHhza19wcm90b19vcHMgPSB7XG4tLVxubmV0L3hkcC94c2suYy0yMTYzLVxubmV0L3hkcC94c2suYzoyMTY0OnN0YXRpYyB2b2lkIHhza19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTIxNjUte1xuLS1cbm5ldC94ZHAveHNrLmMtMjE3NC1cbm5ldC94ZHAveHNrLmM6MjE3NTpzdGF0aWMgaW50IHhza19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG5uZXQveGRwL3hzay5jLTIxNzYtXHRcdCAgICAgIGludCBrZXJuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDI2CgkJCQkJCQlvdXRwdXQ6IDU5CgkJCQkJCQl0aG91Z2h0czogMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipNeSBBbmFseXNpcyBvZiBLZXkgWERQL1hTSyBUWCBhbmQgUlggRnVuY3Rpb25zKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGluIFhEUC9YU0sgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcGF0aHMuIFRoZSBmb2xsb3dpbmcgYXJlIGNydWNpYWwgZm9yIHRoZSB0YXNrIGF0IGhhbmQ6IGB4c2tfdHhfY29tcGxldGVkYCwgYHhza190eF9jb21taXRfYmF0Y2hgLCBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGAsICh5ZXMsIHRoYXQgb25lIGlzIGxpc3RlZCB0d2ljZSwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCksIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGAsIGB4c2tfZHJvcF9za2JgLCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAsIGB4c2tfYnVpbGRfc2tiYCwgYF9feHNrX2dlbmVyaWNfeG1pdGAsIGB4cF9hbGxvY190eF9kZXNjc2AsIGFuZCBgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaGAuIFRoYXQgZ2l2ZXMgbWUgdGhlIG92ZXJ2aWV3IHRoYXQgSSBuZWVkIGZvciB0aGlzIHNlY3Rpb24uIEkgd2lsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvZGUgZm9yIGB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoYC4gVG8gZG8gdGhhdCwgSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyBhdCBgbmV0L3hkcC94c2tfcXVldWUuaGAgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGlzIG1lYW50IHRvIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KHZvaWR8dTMyfGludHxzdHJ1Y3QgW2Etel9dJiM0MzsgXFwqKSBbYS16X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrX3F1ZXVlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2tfcXVldWUuaD01NDE9c3RydWN0IHhza19xdWV1ZSAqeHNrcV9jcmVhdGUodTMyIG5lbnRyaWVzLCBib29sIHVtZW1fcXVldWUpO1xubmV0L3hkcC94c2tfcXVldWUuaDo1NDI6dm9pZCB4c2txX2Rlc3Ryb3koc3RydWN0IHhza19xdWV1ZSAqcV9vcHMpO1xubmV0L3hkcC94c2tfcXVldWUuaC01NDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NjgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwmIzM5O3MgWERQIFNvY2tldCBDb25zdW1wdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaGAgZnVuY3Rpb24uIFJpZ2h0LCBpdCYjMzk7cyBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbiBkZWZpbmVkIGluIGBuZXQveGRwL3hza19xdWV1ZS5oYC4gVGhhdCBtZWFucyBpdCB3b24mIzM5O3QgYmUgYSB2aXNpYmxlIHN5bWJvbCBpbiB0aGUga2VybmVsIGltYWdlIGRpcmVjdGx5LiBCdXQsIHRoYXQmIzM5O3Mgbm90IHRoZSBlbmQgb2YgdGhlIGxpbmUsIGFzIEkga25vdyBpdCYjMzk7cyAqY2FsbGVkKiBieSBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGEgYml0IGFuZCBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzIGhlcmUuIEFGX1hEUCYjMzk7cyBhdmFpbGFiaWxpdHkgYm9pbHMgZG93biB0byBgQ09ORklHX1hEUF9TT0NLRVRTYC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGNvbWUgaW50byBwbGF5IGFzIHdlbGwuIEFsd2F5cyBnb29kIHRvIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfWERQX1NPQ0tFVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub1xubmV0L3hkcC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19YRFBfU09DS0VUUykgJiM0Mzs9IHhza19idWZmX3Bvb2wub1xubmV0L3hkcC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19YRFBfU09DS0VUU19ESUFHKSAmIzQzOz0geHNrX2RpYWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjE2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBYRFAtU29ja2V0cyBGdW5jdGlvbiBMaXN0KioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYFhEUF9TT0NLRVRTYCBzcGVjaWZpY2FsbHkuIFRpbWUgdG8gbmFpbCBkb3duIHRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gYW5hbHl6ZS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYSBwcmVsaW1pbmFyeSBsaXN0LCBhbmQgSSBuZWVkIHRvIHJlZmluZSBpdC4gSSYjMzk7bSB0aGlua2luZzoKCiogICBgeHNrX3R4X2NvbXBsZXRlZGAKKiAgIGB4c2tfdHhfY29tbWl0X2JhdGNoYAoqICAgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYAoqICAgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgCiogICBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCAoRHVwbGljYXRlLCBJJiMzOTtsbCBjbGVhbiB0aGF0IHVwIGxhdGVyKQoqICAgYHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkYAoqICAgYHhza19kcm9wX3NrYmAKKiAgIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YAoqICAgYHhza19idWlsZF9za2JgCiogICBgX194c2tfZ2VuZXJpY194bWl0YAoqICAgYHhwX2FsbG9jX3R4X2Rlc2NzYAoKV2FpdCBhIG1pbnV0ZSwgYSBmZXcgb2YgdGhvc2UgYXJlIG1hcmtlZCBhcyBgc3RhdGljYDogYHhza190eF9jb21taXRfYmF0Y2hgLCBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGAsIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGAsIGFuZCBgeHNrX2Ryb3Bfc2tiYC4gVGhleSBtaWdodCBiZSBpbmxpbmVkLiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhleSYjMzk7cmUgZXhwbGljaXRseSBkZWNsYXJlZCBhcyBgc3RhdGljIGlubGluZWAuIEFoLCBubywganVzdCBgc3RhdGljYC4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBsb2NhbCB0byB0aGVpciBjb21waWxhdGlvbiB1bml0LCBidXQgbm90IG5lY2Vzc2FyaWx5IGlubGluZWQuIFRoZXkgc2hvdWxkIGJlIGZpbmUgdG8gaW5jbHVkZSBmb3IgYSBicm9hZGVyIHZpZXcuCgpJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgeHBfYWxsb2NfdHhfZGVzY3NgIGluIGBuZXQveGRwL3hza19idWZmX3Bvb2wuY2AganVzdCB0byBiZSBzdXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHBfYWxsb2NfdHhfZGVzY3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwL3hza19idWZmX3Bvb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hza19idWZmX3Bvb2wuYz0zNT12b2lkIHhwX2Rlc3Ryb3koc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtNDQtXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYzo0NTppbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy00Ni17XG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM9NTU9c3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cyxcbi0tXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy03Mi1cdGlmICh4cy1cdTAwM2V0eClcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jOjczOlx0XHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMpKVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtNzQtXHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjUxCgkJCQkJCQlvdXRwdXQ6IDI1MQoJCQkJCQkJdGhvdWdodHM6IDYwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBBRl9YRFAgTXVsdGktQnVmZmVyIFRyYW5zbWlzc2lvbiBMb2dpYyBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgeHBfYWxsb2NfdHhfZGVzY3NgIGlzICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBrZXkuIE5vdywgSSBoYXZlIGEgc29saWQgbGlzdCBvZiBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nIGJhc2VkIG9uIHRoZSBwYXRjaCYjMzk7cyBzY29wZToKCiogICBgeHNrX3R4X2NvbXBsZXRlZGAKKiAgIGB4c2tfdHhfY29tbWl0X2JhdGNoYAoqICAgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYAoqICAgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgCiogICBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYAoqICAgYHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkYAoqICAgYHhza19kcm9wX3NrYmAKKiAgIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YAoqICAgYHhza19idWlsZF9za2JgCiogICBgX194c2tfZ2VuZXJpY194bWl0YAoqICAgYHhwX2FsbG9jX3R4X2Rlc2NzYAoKSW5pdGlhbGx5LCBJIGhhZCBhIHF1aWNrIGNoZWNrIG9uIHdoZXRoZXIgYF9feHNrX2dlbmVyaWNfeG1pdGAgd2FzIGEgc3RhdGljIGZ1bmN0aW9uLiBJdCBpcy4gSG93ZXZlciwgSSBjb25maXJtZWQgdGhhdCBpdCBpcyB0aGUgZ2VuZXJpYyB0cmFuc21pdCBmdW5jdGlvbiwgYW5kIHRoZSBwYXRjaCBoYXMgbW9kaWZpZWQgaXQuIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgIGlzIGFsc28gYSBob3QtcGF0aCBmdW5jdGlvbi4gVGhlIGluc3RydWN0aW9ucyBkaWQgd2FybiBhZ2FpbnN0IGluY2x1ZGluZyBnZW5lcmljIGhvdC1wYXRocyBsaWtlIGBrZnJlZWAgb3IgYHNjaGVkdWxlYCwgYnV0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWMgdG8gQUZcX1hEUCwgc28gdGhleSYjMzk7cmUgcmVsZXZhbnQgYW5kIGRvbiYjMzk7dCBza2V3IHRoZSBkaXN0cmlidXRpb24uIEluY2x1ZGluZyB0aGVtIGlzIGFjY2VwdGFibGUuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGZvY3VzZWQgb24gdGhlIEFGXF9YRFAgbXVsdGktYnVmZmVyIChTRykgcGFja2V0IHRyYW5zbWlzc2lvbi4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYmF0Y2hpbmcgYW5kIGRlc2NyaXB0b3IgcmVjbGFpbSB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgQUZcX1hEUCBjb2RlLCBzbyBpdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRvIGZ1enogaXQuIFRoZSBjb2RlJiMzOTtzIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiBgbmV0L3hkcC94c2suY2AgYW5kIGBuZXQveGRwL3hza19xdWV1ZS5oYC4KClRoZSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBlbnN1cmUgaXMgZW5hYmxlZCBmb3IgdGhpcyBpcyBgWERQX1NPQ0tFVFNgLiBJIGJyaWVmbHkgY2hlY2tlZCBpZiBgWERQX1NPQ0tFVFNgIGRlcGVuZGVkIG9uIGBCUEZfU1lTQ0FMTGAsIGFuZCBjb25maXJtZWQgdGhhdCBgWERQX1NPQ0tFVFNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiB0byBiZSBjaGVja2VkLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBlbmFibGVkIHVuZGVyIHRoZSB0YXJnZXRlZCBjb25maWd1cmF0aW9uLgoKU28sIGluIHN1bW1hcnksIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24sIHRoZSBwYXRjaCYjMzk7cyBzY29wZSwgYW5kIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlLiBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX3R4X2NvbXBsZXRlZCYjMzQ7LAogICAgJiMzNDt4c2tfdHhfY29tbWl0X2JhdGNoJiMzNDssCiAgICAmIzM0O19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkJiMzNDssCiAgICAmIzM0O3hza19kcm9wX3NrYiYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2ImIzM0OywKICAgICYjMzQ7X194c2tfZ2VuZXJpY194bWl0JiMzNDssCiAgICAmIzM0O3hwX2FsbG9jX3R4X2Rlc2NzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgbXVsdGktYnVmZmVyIChTRykgcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYywgaW50cm9kdWNpbmcgYmF0Y2hpbmcgYW5kIHJlY2xhaW0gZGVzY3JpcHRvcnMgdG8gaGFuZGxlIGludmFsaWQgZGVzY3JpcHRvcnMgYW5kIGJvdW5kYXJpZXMgY29ycmVjdGx5LiBJdCBtb2RpZmllcyBjb3JlIFhEUCBzb2NrZXQgY29kZSBpbiBuZXQveGRwL3hzay5jIGFuZCBuZXQveGRwL3hza19xdWV1ZS5oLiBUaGlzIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4c2tfdHhfY29tcGxldGVkJiMzNDssCiAgICAmIzM0O3hza190eF9jb21taXRfYmF0Y2gmIzM0OywKICAgICYjMzQ7X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7eHNrX2Ryb3Bfc2tiJiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7eHNrX2J1aWxkX3NrYiYjMzQ7LAogICAgJiMzNDtfX3hza19nZW5lcmljX3htaXQmIzM0OywKICAgICYjMzQ7eHBfYWxsb2NfdHhfZGVzY3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCBtdWx0aS1idWZmZXIgKFNHKSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljLCBpbnRyb2R1Y2luZyBiYXRjaGluZyBhbmQgcmVjbGFpbSBkZXNjcmlwdG9ycyB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgYm91bmRhcmllcyBjb3JyZWN0bHkuIEl0IG1vZGlmaWVzIGNvcmUgWERQIHNvY2tldCBjb2RlIGluIG5ldC94ZHAveHNrLmMgYW5kIG5ldC94ZHAveHNrX3F1ZXVlLmguIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzM6NDYuMjU1ODMzMTQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMwNDIwMzAyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfdHhfY29tcGxldGVkXCIsXG4gICAgXCJ4c2tfdHhfY29tbWl0X2JhdGNoXCIsXG4gICAgXCJfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZFwiLFxuICAgIFwieHNrX2Ryb3Bfc2tiXCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiX3plcm9jb3B5XCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiXCIsXG4gICAgXCJfX3hza19nZW5lcmljX3htaXRcIixcbiAgICBcInhwX2FsbG9jX3R4X2Rlc2NzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCBtdWx0aS1idWZmZXIgKFNHKSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljLCBpbnRyb2R1Y2luZyBiYXRjaGluZyBhbmQgcmVjbGFpbSBkZXNjcmlwdG9ycyB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgYm91bmRhcmllcyBjb3JyZWN0bHkuIEl0IG1vZGlmaWVzIGNvcmUgWERQIHNvY2tldCBjb2RlIGluIG5ldC94ZHAveHNrLmMgYW5kIG5ldC94ZHAveHNrX3F1ZXVlLmguIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzo0Ni4yNTU4NTg1MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MzkxMjQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMzMGQ0ZjdlYmMxYWVmNzk2NmFiMzllZWQ5ZmRhNGE3NTk5MDhmZThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTc6MzM6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaCBiL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcXG5pbmRleCBlYmFjNjBhM2Q4YTE3Yi4uOGI1MTg3NmVmYmVkMWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaFxcbisrKyBiL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcXG5AQCAtODAsNiArODAsNyBAQCBzdHJ1Y3QgeGRwX3NvY2sge1xcbiBcXHQgKiBjYWxsIG9mIF9feHNrX2dlbmVyaWNfeG1pdCgpLlxcbiBcXHQgKi9cXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0Ym9vbCBkcmFpbl9jb250O1xcbiBcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBtYXBfbGlzdDtcXG4gXFx0LyogUHJvdGVjdHMgbWFwX2xpc3QgKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oIGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXFxuaW5kZXggY2NiM2IzNTAwMDFmMjQuLmZiNTllMjA1YWM3ZDdlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxcbkBAIC03OCw2ICs3OCw5IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sIHtcXG4gXFx0dTMyIGNodW5rX3NpemU7XFxuIFxcdHUzMiBjaHVua19zaGlmdDtcXG4gXFx0dTMyIGZyYW1lX2xlbjtcXG4rXFx0dTMyIHR4X2Rlc2NzX25lbnRyaWVzO1xcbitcXHR1MzIgcmVjbGFpbV9kZXNjcztcXG4rXFx0dTMyIHR4X3pjX3BlbmRpbmdfZGVzY3M7XFxuIFxcdHUzMiB4ZHBfemNfbWF4X3NlZ3M7XFxuIFxcdHU4IHR4X21ldGFkYXRhX2xlbjsgLyogaW5oZXJpdGVkIGZyb20gdW1lbSAqL1xcbiBcXHR1OCBjYWNoZWRfbmVlZF93YWtldXA7XFxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXFxuaW5kZXggYjk3MGYzMGVhOWI5ZDguLjdkOGI0MmM0YzIxNGJhIDEwMDY0NFxcbi0tLSBhL25ldC94ZHAveHNrLmNcXG4rKysgYi9uZXQveGRwL3hzay5jXFxuQEAgLTQ5OSw2ICs0OTksMjMgQEAgdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdClcXG4gXFxuIHZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXFxuIHtcXG4rXFx0dTMyIHJlY2xhaW1fZGVzY3MgPSBSRUFEX09OQ0UocG9vbC1cXHUwMDNlcmVjbGFpbV9kZXNjcyk7XFxuK1xcbitcXHRpZiAodW5saWtlbHkocmVjbGFpbV9kZXNjcykpIHtcXG4rXFx0XFx0dTMyIHBlbmRpbmdfZGVzY3MgPSBSRUFEX09OQ0UocG9vbC1cXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyk7XFxuK1xcbitcXHRcXHRpZiAobmJfZW50cmllcyBcXHUwMDNjIHBlbmRpbmdfZGVzY3MpIHtcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShwb29sLVxcdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLFxcbitcXHRcXHRcXHRcXHQgICBwZW5kaW5nX2Rlc2NzIC0gbmJfZW50cmllcyk7XFxuK1xcdFxcdFxcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVxcdTAwM2VjcSwgbmJfZW50cmllcyk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0V1JJVEVfT05DRShwb29sLVxcdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLCAwKTtcXG4rXFx0XFx0bmJfZW50cmllcyArPSByZWNsYWltX2Rlc2NzO1xcbitcXHRcXHRXUklURV9PTkNFKHBvb2wtXFx1MDAzZXJlY2xhaW1fZGVzY3MsIDApO1xcbitcXHR9XFxuK1xcbiBcXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cXHUwMDNlY3EsIG5iX2VudHJpZXMpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XFxuQEAgLTU3NCwyMiArNTkxLDE2OSBAQCBzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50clxcbiBcXHRyZXR1cm4gbmJfcGt0cztcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gsXFxuK1xcdFxcdFxcdFxcdHUzMiBjcV9jYWNoZWRfcHJvZClcXG4re1xcbitcXHR1MzIgbmJfZGVzY3MgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoYmF0Y2gpO1xcbitcXG4rXFx0aWYgKCFuYl9kZXNjcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0eHNrcV9wcm9kX3dyaXRlX2FkZHJfYmF0Y2gocG9vbC1cXHUwMDNlY3EsIHBvb2wtXFx1MDAzZXR4X2Rlc2NzLCBuYl9kZXNjcyk7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoYmF0Y2gtXFx1MDAzZXJlY2xhaW1fZGVzY3MpKSB7XFxuK1xcdFxcdHUzMiBjcV9wZW5kaW5nX2Rlc2NzO1xcbitcXG4rXFx0XFx0LyogQ1EgaXMgcG9zaXRpb25hbC4gRGVzY3JpcHRvcnMgYWxyZWFkeSB3cml0dGVuIGJ1dCBub3RcXG4rXFx0XFx0ICogc3VibWl0dGVkIG11c3QgY29tcGxldGUgYmVmb3JlIGFueSByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnNcXG4rXFx0XFx0ICogYXBwZW5kZWQgYmVsb3cuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjcV9wZW5kaW5nX2Rlc2NzID0gY3FfY2FjaGVkX3Byb2QgLSB4c2txX2dldF9wcm9kKHBvb2wtXFx1MDAzZWNxKTtcXG4rXFxuK1xcdFxcdFdSSVRFX09OQ0UocG9vbC1cXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcywgYmF0Y2gtXFx1MDAzZXR4X2Rlc2NzICsgY3FfcGVuZGluZ19kZXNjcyk7XFxuK1xcdFxcdFdSSVRFX09OQ0UocG9vbC1cXHUwMDNlcmVjbGFpbV9kZXNjcywgYmF0Y2gtXFx1MDAzZXJlY2xhaW1fZGVzY3MpO1xcbitcXHRcXHRpZiAodW5saWtlbHkoIXBvb2wtXFx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MpKVxcbitcXHRcXHRcXHR4c2tfdHhfY29tcGxldGVkKHBvb2wsIDApO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoXFxuK19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHhkcF9kZXNjICpkZXNjcywgdTMyIG1heF9kZXNjcylcXG4re1xcbitcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XFxuK1xcdHUzMiBlbnRyaWVzO1xcbitcXG4rXFx0ZW50cmllcyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLVxcdTAwM2V0eCwgbWF4X2Rlc2NzKTtcXG4rXFx0aWYgKCFlbnRyaWVzKVxcbitcXHRcXHRyZXR1cm4gYmF0Y2g7XFxuK1xcbitcXHRiYXRjaCA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMsIHBvb2wsIGRlc2NzLCBlbnRyaWVzKTtcXG4rXFx0aWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNmJhdGNoKSkge1xcbitcXHRcXHR4cy1cXHUwMDNldHgtXFx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzKys7XFxuK1xcdFxcdGlmIChiYXRjaC5jb25zdW1lZF9kZXNjcykge1xcbitcXHRcXHRcXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVxcdTAwM2V0eCk7XFxuK1xcdFxcdFxcdHhzLVxcdTAwM2Vzay5za193cml0ZV9zcGFjZShcXHUwMDI2eHMtXFx1MDAzZXNrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gYmF0Y2g7XFxuK1xcdH1cXG4rXFxuK1xcdF9feHNrcV9jb25zX3JlbGVhc2UoeHMtXFx1MDAzZXR4KTtcXG4rXFx0eHMtXFx1MDAzZXNrLnNrX3dyaXRlX3NwYWNlKFxcdTAwMjZ4cy1cXHUwMDNlc2spO1xcbitcXHRyZXR1cm4gYmF0Y2g7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoXFxuK3hza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXFxuK3tcXG4rXFx0dTMyIGNxX2Rlc2NzX2JlZm9yZSwgY3FfZGVzY3NfYWZ0ZXI7XFxuK1xcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggc3VtX2JhdGNoID0ge307XFxuK1xcdGJvb2wgYnVkZ2V0X2V4aGF1c3RlZDtcXG4rXFx0dTMyIHBlcl9zb2NrZXRfYnVkZ2V0O1xcbitcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xcbitcXG4rXFx0bWF4X2Rlc2NzID0geHNrcV9wcm9kX25iX2ZyZWUocG9vbC1cXHUwMDNlY3EsIG1heF9kZXNjcyk7XFxuK1xcdGlmICghbWF4X2Rlc2NzKVxcbitcXHRcXHRyZXR1cm4gc3VtX2JhdGNoO1xcbitcXG4rXFx0LyogVGhlIGZhaXJuZXNzIHF1b3RhIG11c3QgYWxsb3cgb25lIG1heGltdW0tc2l6ZWQgdmFsaWQgcGFja2V0LiAqL1xcbitcXHRwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULFxcbitcXHRcXHRcXHRcXHQgIHBvb2wtXFx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XFxuK1xcbithZ2FpbjpcXG4rXFx0YnVkZ2V0X2V4aGF1c3RlZCA9IGZhbHNlO1xcbitcXHRjcV9kZXNjc19iZWZvcmUgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcXHUwMDI2cG9vbC1cXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpIHtcXG4rXFx0XFx0dTMyIGJ1ZGdldCwgYnVkZ2V0X2xlZnQsIG9mZnNldCwgcmVtYWluaW5nO1xcbitcXHRcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGN1cnJfYmF0Y2g7XFxuK1xcbitcXHRcXHQvKiBPbmNlIHJlY2xhaW0tb25seSBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gYXBwZW5kZWQgdG8gdGhlIENRIGFkZHJlc3NcXG4rXFx0XFx0ICogYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9ycyBmcm9tIGFub3RoZXJcXG4rXFx0XFx0ICogc29ja2V0IGFmdGVyIHRoZW0uIHhza190eF9jb21wbGV0ZWQoKSByZWxpZXMgb24gYWxsIGRyaXZlci12aXNpYmxlXFxuK1xcdFxcdCAqIGRlc2NyaXB0b3JzIHByZWNlZGluZyBhbGwgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLVxcdTAwM2V0eF9kZXNjcyAqL1xcbitcXHRcXHRvZmZzZXQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcdFxcdGlmIChvZmZzZXQgXFx1MDAzZT0gbWF4X2Rlc2NzKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGlmICh4cy1cXHUwMDNldHhfYnVkZ2V0X3NwZW50IFxcdTAwM2U9IHBlcl9zb2NrZXRfYnVkZ2V0KSB7XFxuK1xcdFxcdFxcdGlmICh4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cXHUwMDNldHgsIDEpKVxcbitcXHRcXHRcXHRcXHRidWRnZXRfZXhoYXVzdGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGJ1ZGdldF9sZWZ0ID0gcGVyX3NvY2tldF9idWRnZXQgLSB4cy1cXHUwMDNldHhfYnVkZ2V0X3NwZW50O1xcbitcXHRcXHRyZW1haW5pbmcgPSBtYXhfZGVzY3MgLSBvZmZzZXQ7XFxuK1xcdFxcdGJ1ZGdldCA9IG1pbihyZW1haW5pbmcsIGJ1ZGdldF9sZWZ0KTtcXG4rXFxuK1xcdFxcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcG9vbC1cXHUwMDNldHhfZGVzY3MgKyBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGJ1ZGdldCk7XFxuK1xcdFxcdGlmICgheHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFxcdTAwMjZjdXJyX2JhdGNoKSkge1xcbitcXHRcXHRcXHRpZiAoY3Vycl9iYXRjaC5idWRnZXRfbGltaXRlZCBcXHUwMDI2XFx1MDAyNiBidWRnZXRfbGVmdCBcXHUwMDNjIHJlbWFpbmluZylcXG4rXFx0XFx0XFx0XFx0YnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7XFxuK1xcdFxcdFxcdHhzLVxcdTAwM2V0eF9idWRnZXRfc3BlbnQgKz0gY3Vycl9iYXRjaC5jb25zdW1lZF9kZXNjcztcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHhzLVxcdTAwM2V0eF9idWRnZXRfc3BlbnQgKz0gY3Vycl9iYXRjaC5jb25zdW1lZF9kZXNjcztcXG4rXFx0XFx0c3VtX2JhdGNoLnR4X2Rlc2NzICs9IGN1cnJfYmF0Y2gudHhfZGVzY3M7XFxuK1xcdFxcdHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzICs9IGN1cnJfYmF0Y2gucmVjbGFpbV9kZXNjcztcXG4rXFx0fVxcbitcXG4rXFx0Y3FfZGVzY3NfYWZ0ZXIgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcbitcXHRpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgfHwgY3FfZGVzY3NfYWZ0ZXIgXFx1MDAzZT0gbWF4X2Rlc2NzKVxcbitcXHRcXHRyZXR1cm4gc3VtX2JhdGNoO1xcbitcXG4rXFx0LyogQ29udGludWUgZmlsbGluZyB0aGUgYmF0Y2ggd2hpbGUgdGhpcyBwYXNzIG1hZGUgcHJvZ3Jlc3MgKi9cXG4rXFx0aWYgKGNxX2Rlc2NzX2JlZm9yZSAhPSBjcV9kZXNjc19hZnRlcilcXG4rXFx0XFx0Z290byBhZ2FpbjtcXG4rXFxuK1xcdGlmICghYnVkZ2V0X2V4aGF1c3RlZClcXG4rXFx0XFx0cmV0dXJuIHN1bV9iYXRjaDtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcXHUwMDI2cG9vbC1cXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpXFxuK1xcdFxcdHhzLVxcdTAwM2V0eF9idWRnZXRfc3BlbnQgPSAwO1xcbitcXHRnb3RvIGFnYWluO1xcbit9XFxuK1xcbiB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcXG4ge1xcbitcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XFxuIFxcdHN0cnVjdCB4ZHBfc29jayAqeHM7XFxuK1xcdHUzMiBjcV9jYWNoZWRfcHJvZDtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0aWYgKHVubGlrZWx5KFJFQURfT05DRShwb29sLVxcdTAwM2VyZWNsYWltX2Rlc2NzKSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRuYl9wa3RzID0gbWluKG5iX3BrdHMsIHBvb2wtXFx1MDAzZXR4X2Rlc2NzX25lbnRyaWVzKTtcXG4rXFx0aWYgKCFuYl9wa3RzKVxcbitcXHRcXHRnb3RvIG91dDtcXG4gXFx0aWYgKCFsaXN0X2lzX3Npbmd1bGFyKFxcdTAwMjZwb29sLVxcdTAwM2V4c2tfdHhfbGlzdCkpIHtcXG4tXFx0XFx0LyogRmFsbGJhY2sgdG8gdGhlIG5vbi1iYXRjaGVkIHZlcnNpb24gKi9cXG4rXFx0XFx0LyogS2VlcCB0aGUgbGVnYWN5IG9uZS1kZXNjcmlwdG9yIGZhbGxiYWNrIGZvciBub24tU0cgdXNlcnMuICBUaGVcXG4rXFx0XFx0ICogc2hhcmVkIFNHIHBhdGggbmVlZHMgcGFja2V0LWZyYW1lZCBwYXJzaW5nIHNvIGludmFsaWQvb3ZlcmZsb3dlZFxcbitcXHRcXHQgKiBtdWx0aS1idWZmZXIgcGFja2V0cyBhcmUgZHJhaW5lZCBhcyBhIHVuaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocG9vbC1cXHUwMDNldW1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRFBfVU1FTV9TR19GTEFHKSB7XFxuK1xcdFxcdFxcdGJhdGNoID0geHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChwb29sLCBuYl9wa3RzKTtcXG4rXFx0XFx0XFx0Y3FfY2FjaGVkX3Byb2QgPSBwb29sLVxcdTAwM2VjcS1cXHUwMDNlY2FjaGVkX3Byb2Q7XFxuK1xcdFxcdFxcdHhza190eF9jb21taXRfYmF0Y2gocG9vbCwgXFx1MDAyNmJhdGNoLCBjcV9jYWNoZWRfcHJvZCk7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0cmV0dXJuIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2socG9vbCwgbmJfcGt0cyk7XFxuIFxcdH1cXG4gXFxuIFxcdHhzID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdShcXHUwMDI2cG9vbC1cXHUwMDNleHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jaywgdHhfbGlzdCk7XFxuLVxcdGlmICgheHMpIHtcXG4tXFx0XFx0bmJfcGt0cyA9IDA7XFxuK1xcdGlmICgheHMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuIFxcbiBcXHRuYl9wa3RzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXFx1MDAzZXR4LCBuYl9wa3RzKTtcXG4gXFxuQEAgLTYwMywxOSArNzY3LDE4IEBAIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxcbiBcXHRpZiAoIW5iX3BrdHMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0bmJfcGt0cyA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMtXFx1MDAzZXR4LCBwb29sLCBuYl9wa3RzKTtcXG4tXFx0aWYgKCFuYl9wa3RzKSB7XFxuLVxcdFxcdHhzLVxcdTAwM2V0eC1cXHUwMDNlcXVldWVfZW1wdHlfZGVzY3MrKztcXG4rXFx0YmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cywgcG9vbC1cXHUwMDNldHhfZGVzY3MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBuYl9wa3RzKTtcXG4rXFx0bmJfcGt0cyA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcXHUwMDI2YmF0Y2gpO1xcbitcXHRpZiAoIW5iX3BrdHMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuIFxcbi1cXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVxcdTAwM2V0eCk7XFxuLVxcdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXFx1MDAzZWNxLCBwb29sLVxcdTAwM2V0eF9kZXNjcywgbmJfcGt0cyk7XFxuLVxcdHhzLVxcdTAwM2Vzay5za193cml0ZV9zcGFjZShcXHUwMDI2eHMtXFx1MDAzZXNrKTtcXG4rXFx0Y3FfY2FjaGVkX3Byb2QgPSBwb29sLVxcdTAwM2VjcS1cXHUwMDNlY2FjaGVkX3Byb2Q7XFxuK1xcdHhza190eF9jb21taXRfYmF0Y2gocG9vbCwgXFx1MDAyNmJhdGNoLCBjcV9jYWNoZWRfcHJvZCk7XFxuIFxcbiBvdXQ6XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRyZXR1cm4gbmJfcGt0cztcXG4rXFx0cmV0dXJuIGJhdGNoLnR4X2Rlc2NzO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTtcXG4gXFxuQEAgLTczNyw2ICs5MDAsMTkgQEAgc3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cG9vbC1cXHUwMDNlY3FfcHJvZF9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHR1MzIgaWR4O1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBvb2wtXFx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xcbitcXHRpZHggPSB4c2txX2dldF9wcm9kKHBvb2wtXFx1MDAzZWNxKTtcXG4rXFx0eHNrcV9wcm9kX3dyaXRlX2FkZHIocG9vbC1cXHUwMDNlY3EsIGlkeCwgZGVzYy1cXHUwMDNlYWRkcik7XFxuK1xcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVxcdTAwM2VjcSwgMSk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBvb2wtXFx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB4c2tfY3FfY2FuY2VsX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG4pXFxuIHtcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZwb29sLVxcdTAwM2VjcS1cXHUwMDNlY3FfY2FjaGVkX3Byb2RfbG9jayk7XFxuQEAgLTc5NCw4ICs5NzAsMTEgQEAgc3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBzdGF0aWMgdm9pZCB4c2tfZHJvcF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHR4ZHBfc2soc2tiLVxcdTAwM2VzayktXFx1MDAzZXR4LVxcdTAwM2VpbnZhbGlkX2Rlc2NzICs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcXG4tXFx0eHNrX2NvbnN1bWVfc2tiKHNrYik7XFxuK1xcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLVxcdTAwM2Vzayk7XFxuK1xcbitcXHR4cy1cXHUwMDNldHgtXFx1MDAzZWludmFsaWRfZGVzY3MgKz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xcbitcXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcXG5AQCAtODc3LDcgKzEwNTYsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbiBcXHRcXHQvKiBpbiBjYXNlIG9mIC1FT1ZFUkZMT1cgdGhhdCBjb3VsZCBoYXBwZW4gYmVsb3csXFxuLVxcdFxcdCAqIHhza19jb25zdW1lX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiXFxuK1xcdFxcdCAqIHhza19kcm9wX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiXFxuIFxcdFxcdCAqIHdvdWxkIGJlIGRyb3BwZWQsIHdoaWNoIGltcGxpZXMgZnJlZWluZyBhbGwgbGlzdCBlbGVtZW50c1xcbiBcXHRcXHQgKi9cXG4gXFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG5AQCAtOTY5LDYgKzExNDgsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gXFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG4rXFxuIFxcdFxcdFxcdGlmICh1bmxpa2VseShucl9mcmFncyA9PSAoTUFYX1NLQl9GUkFHUyAtIDEpIFxcdTAwMjZcXHUwMDI2IHhwX21iX2Rlc2MoZGVzYykpKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IC1FT1ZFUkZMT1c7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuQEAgLTk4Niw4ICsxMTY3LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuIFxcbiBcXHRcXHRcXHRza2JfYWRkX3J4X2ZyYWcoc2tiLCBucl9mcmFncywgcGFnZSwgMCwgbGVuLCBQQUdFX1NJWkUpO1xcbiBcXHRcXHRcXHRyZWZjb3VudF9hZGQoUEFHRV9TSVpFLCBcXHUwMDI2eHMtXFx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xcbi1cXG4tXFx0XFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC0xMDYwLDExICsxMjM5LDIyIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICh1bmxpa2VseSh4cy1cXHUwMDNlZHJhaW5fY29udCkpIHtcXG4rXFx0XFx0XFx0eHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtXFx1MDAzZXBvb2wsIFxcdTAwMjZkZXNjKTtcXG4rXFxuK1xcdFxcdFxcdHhzLVxcdTAwM2V0eC1cXHUwMDNlaW52YWxpZF9kZXNjcysrO1xcbitcXHRcXHRcXHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbitcXHRcXHRcXHR4cy1cXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXFx1MDAyNmRlc2MpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXFx1MDAyNmRlc2MpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4gXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihza2IpO1xcbiBcXHRcXHRcXHRpZiAoZXJyICE9IC1FT1ZFUkZMT1cpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRpZiAoeHBfbWJfZGVzYyhcXHUwMDI2ZGVzYykpXFxuK1xcdFxcdFxcdFxcdHhzLVxcdTAwM2VkcmFpbl9jb250ID0gdHJ1ZTtcXG4gXFx0XFx0XFx0ZXJyID0gMDtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG5AQCAtMTA5OCw5ICsxMjg4LDI0IEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVxcdTAwM2V0eCkpIHtcXG4rXFx0XFx0Ym9vbCByZWNsYWltX2Rlc2MgPSB4cy1cXHUwMDNlc2tiIHx8IHhzLVxcdTAwM2VkcmFpbl9jb250O1xcbitcXG4rXFx0XFx0aWYgKHJlY2xhaW1fZGVzYykge1xcbitcXHRcXHRcXHRlcnIgPSB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoeHMtXFx1MDAzZXBvb2wpO1xcbitcXHRcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FQUdBSU47XFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGlmICh4cy1cXHUwMDNlc2tiKVxcbiBcXHRcXHRcXHR4c2tfZHJvcF9za2IoeHMtXFx1MDAzZXNrYik7XFxuK1xcbitcXHRcXHRpZiAocmVjbGFpbV9kZXNjKVxcbitcXHRcXHRcXHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cXHUwMDNlcG9vbCwgXFx1MDAyNmRlc2MpO1xcbitcXG4gXFx0XFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXFx1MDAzZXR4KTtcXG4rXFx0XFx0eHMtXFx1MDAzZWRyYWluX2NvbnQgPSB4cF9tYl9kZXNjKFxcdTAwMjZkZXNjKTtcXG4gXFx0fVxcbiBcXG4gb3V0OlxcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19idWZmX3Bvb2wuYyBiL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXFxuaW5kZXggMWYyOGE5NjQxNTcxZTQuLmI4NjJhZGRjZDhmZGFmIDEwMDY0NFxcbi0tLSBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXFxuKysrIGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcXG5AQCAtNDgsNiArNDgsNyBAQCBpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMpXFxuIFxcdGlmICghcG9vbC1cXHUwMDNldHhfZGVzY3MpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0cG9vbC1cXHUwMDNldHhfZGVzY3NfbmVudHJpZXMgPSB4cy1cXHUwMDNldHgtXFx1MDAzZW5lbnRyaWVzO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2tfcXVldWUuaCBiL25ldC94ZHAveHNrX3F1ZXVlLmhcXG5pbmRleCAzZTNmYmI3M2QyM2UyZi4uYTE1ZmYxOTI5ZGI2MjMgMTAwNjQ0XFxuLS0tIGEvbmV0L3hkcC94c2tfcXVldWUuaFxcbisrKyBiL25ldC94ZHAveHNrX3F1ZXVlLmhcXG5AQCAtNTgsNiArNTgsMTggQEAgc3RydWN0IHBhcnNlZF9kZXNjIHtcXG4gXFx0dTMyIHZhbGlkO1xcbiB9O1xcbiBcXG4rc3RydWN0IHhza190eF9iYXRjaCB7XFxuK1xcdHUzMiB0eF9kZXNjcztcXG4rXFx0dTMyIHJlY2xhaW1fZGVzY3M7XFxuK1xcdHUzMiBjb25zdW1lZF9kZXNjcztcXG4rXFx0Ym9vbCBidWRnZXRfbGltaXRlZDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdTMyIHhza190eF9iYXRjaF9jcV9kZXNjcyhjb25zdCBzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaClcXG4re1xcbitcXHRyZXR1cm4gYmF0Y2gtXFx1MDAzZXR4X2Rlc2NzICsgYmF0Y2gtXFx1MDAzZXJlY2xhaW1fZGVzY3M7XFxuK31cXG4rXFxuIC8qIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHNoYXJlZCBzdGF0ZSBvZiB0aGUgcmluZ3MgYXJlIGEgc2ltcGxlXFxuICAqIGNpcmN1bGFyIGJ1ZmZlciwgYXMgb3V0bGluZWQgaW5cXG4gICogRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9jaXJjdWxhci1idWZmZXJzLnJzdC4gRm9yIHRoZSBSeCBhbmRcXG5AQCAtMjYzLDE3ICsyNzUsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIHBhcnNlX2Rlc2Moc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuIFxcdHBhcnNlZC1cXHUwMDNlbWIgPSB4cF9tYl9kZXNjKGRlc2MpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lXFxuLXUzMiB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbi1cXHRcXHRcXHQgICAgICB1MzIgbWF4KVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCB4c2tfdHhfYmF0Y2hcXG4reHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4KVxcbiB7XFxuLVxcdHUzMiBjYWNoZWRfY29ucyA9IHEtXFx1MDAzZWNhY2hlZF9jb25zLCBuYl9lbnRyaWVzID0gMDtcXG4tXFx0c3RydWN0IHhkcF9kZXNjICpkZXNjcyA9IHBvb2wtXFx1MDAzZXR4X2Rlc2NzO1xcbi1cXHR1MzIgdG90YWxfZGVzY3MgPSAwLCBucl9mcmFncyA9IDA7XFxuK1xcdGJvb2wgZHJhaW4gPSBSRUFEX09OQ0UoeHMtXFx1MDAzZWRyYWluX2NvbnQpO1xcbitcXHR1MzIgY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwLCByZWxlYXNlZDtcXG4rXFx0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xcbitcXHRzdHJ1Y3QgeHNrX3F1ZXVlICpxID0geHMtXFx1MDAzZXR4O1xcbitcXHR1MzIgbnJfZnJhZ3MgPSAwO1xcbitcXG4rXFx0Y2FjaGVkX2NvbnMgPSBxLVxcdTAwM2VjYWNoZWRfY29ucztcXG4gXFxuLVxcdC8qIHRyYWNrIGZpcnN0IGVudHJ5LCBpZiBzdHVtYmxlIHVwb24gKmFueSogaW52YWxpZCBkZXNjcmlwdG9yLCByZXdpbmRcXG4tXFx0ICogY3VycmVudCBwYWNrZXQgdGhhdCBjb25zaXN0cyBvZiBmcmFncyBhbmQgc3RvcCB0aGUgcHJvY2Vzc2luZ1xcbi1cXHQgKi9cXG4gXFx0d2hpbGUgKGNhY2hlZF9jb25zICE9IHEtXFx1MDAzZWNhY2hlZF9wcm9kIFxcdTAwMjZcXHUwMDI2IG5iX2VudHJpZXMgXFx1MDAzYyBtYXgpIHtcXG4gXFx0XFx0c3RydWN0IHhkcF9yeHR4X3JpbmcgKnJpbmcgPSAoc3RydWN0IHhkcF9yeHR4X3JpbmcgKilxLVxcdTAwM2VyaW5nO1xcbiBcXHRcXHR1MzIgaWR4ID0gY2FjaGVkX2NvbnMgXFx1MDAyNiBxLVxcdTAwM2VyaW5nX21hc2s7XFxuQEAgLTI4MiwyNiArMjk1LDQ5IEBAIHUzMiB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbiBcXHRcXHRkZXNjc1tuYl9lbnRyaWVzXSA9IHJpbmctXFx1MDAzZWRlc2NbaWR4XTtcXG4gXFx0XFx0Y2FjaGVkX2NvbnMrKztcXG4gXFx0XFx0cGFyc2VfZGVzYyhxLCBwb29sLCBcXHUwMDI2ZGVzY3NbbmJfZW50cmllc10sIFxcdTAwMjZwYXJzZWQpO1xcbi1cXHRcXHRpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpIHtcXG4rXFx0XFx0XFx0aWYgKCFkcmFpbiBcXHUwMDI2XFx1MDAyNiAhbnJfZnJhZ3MgXFx1MDAyNlxcdTAwMjYgIXBhcnNlZC5tYilcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRcXHRkcmFpbiA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG5yX2ZyYWdzKys7XFxuK1xcdFxcdG5iX2VudHJpZXMrKztcXG4gXFxuIFxcdFxcdGlmIChsaWtlbHkoIXBhcnNlZC5tYikpIHtcXG4tXFx0XFx0XFx0dG90YWxfZGVzY3MgKz0gKG5yX2ZyYWdzICsgMSk7XFxuLVxcdFxcdFxcdG5yX2ZyYWdzID0gMDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0bnJfZnJhZ3MrKztcXG4tXFx0XFx0XFx0aWYgKG5yX2ZyYWdzID09IHBvb2wtXFx1MDAzZXhkcF96Y19tYXhfc2Vncykge1xcbitcXHRcXHRcXHRpZiAodW5saWtlbHkoZHJhaW4pKSB7XFxuK1xcdFxcdFxcdFxcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRSh4cy1cXHUwMDNlZHJhaW5fY29udCwgZmFsc2UpO1xcbiBcXHRcXHRcXHRcXHRucl9mcmFncyA9IDA7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRiYXRjaC50eF9kZXNjcyArPSBucl9mcmFncztcXG4rXFx0XFx0XFx0bnJfZnJhZ3MgPSAwO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG5yX2ZyYWdzID09IHBvb2wtXFx1MDAzZXhkcF96Y19tYXhfc2VncylcXG4rXFx0XFx0XFx0ZHJhaW4gPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobnJfZnJhZ3MpIHtcXG4rXFx0XFx0aWYgKGRyYWluKSB7XFxuK1xcdFxcdFxcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcXG4rXFx0XFx0XFx0V1JJVEVfT05DRSh4cy1cXHUwMDNlZHJhaW5fY29udCwgdHJ1ZSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGlmIChuYl9lbnRyaWVzID09IG1heClcXG4rXFx0XFx0XFx0XFx0YmF0Y2guYnVkZ2V0X2xpbWl0ZWQgPSB0cnVlO1xcbitcXHRcXHRcXHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcXG4gXFx0XFx0fVxcbi1cXHRcXHRuYl9lbnRyaWVzKys7XFxuIFxcdH1cXG4gXFxuLVxcdGNhY2hlZF9jb25zIC09IG5yX2ZyYWdzO1xcbitcXHRyZWxlYXNlZCA9IGNhY2hlZF9jb25zIC0gcS1cXHUwMDNlY2FjaGVkX2NvbnM7XFxuIFxcdC8qIFJlbGVhc2UgdmFsaWQgcGx1cyBhbnkgaW52YWxpZCBlbnRyaWVzICovXFxuLVxcdHhza3FfY29uc19yZWxlYXNlX24ocSwgY2FjaGVkX2NvbnMgLSBxLVxcdTAwM2VjYWNoZWRfY29ucyk7XFxuLVxcdHJldHVybiB0b3RhbF9kZXNjcztcXG4rXFx0eHNrcV9jb25zX3JlbGVhc2VfbihxLCByZWxlYXNlZCk7XFxuK1xcdGJhdGNoLmNvbnN1bWVkX2Rlc2NzID0gcmVsZWFzZWQ7XFxuK1xcdHJldHVybiBiYXRjaDtcXG4gfVxcbiBcXG4gLyogRnVuY3Rpb25zIGZvciBjb25zdW1lcnMgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG5pbmRleCA2ZWI5MDk2ZDA4NGMwMS4uN2FiYjQ5MzVlZGY5YWQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG5AQCAtNDI3LDE0ICs0MjcsMTQgQEAgc3RhdGljIHUzMiBwa3RfbmJfZnJhZ3ModTMyIGZyYW1lX3NpemUsIHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtLCBzdHJ1Y3QgcGtcXG4gXFx0fVxcbiBcXG4gXFx0LyogU2VhcmNoIGZvciB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgaW4gdmVyYmF0aW0gbW9kZSAqL1xcbi1cXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVxcdTAwM2VvcHRpb25zKSB8fCAhcGt0LVxcdTAwM2V2YWxpZClcXG4rXFx0aWYgKCFwa3RfY29udGludWVzKHBrdC1cXHUwMDNlb3B0aW9ucykpXFxuIFxcdFxcdHJldHVybiBuYl9mcmFncztcXG4gXFxuIFxcdG5leHRfZnJhZyA9IHBrdF9zdHJlYW0tXFx1MDAzZWN1cnJlbnRfcGt0X25iO1xcbiBcXHRwa3QrKztcXG4gXFx0d2hpbGUgKG5leHRfZnJhZysrIFxcdTAwM2MgcGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cykge1xcbiBcXHRcXHRuYl9mcmFncysrO1xcbi1cXHRcXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVxcdTAwM2VvcHRpb25zKSB8fCAhcGt0LVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0aWYgKCFwa3RfY29udGludWVzKHBrdC1cXHUwMDNlb3B0aW9ucykpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRwa3QrKztcXG4gXFx0fVxcbkBAIC02NjUsMTEgKzY2NSwxMSBAQCBzdGF0aWMgc3RydWN0IHBrdF9zdHJlYW0gKl9fcGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc1xcbiBcXHRcXHRcXHRpZiAoIWZyYW1lLVxcdTAwM2V2YWxpZCB8fCAhcGt0X2NvbnRpbnVlcyhmcmFtZS1cXHUwMDNlb3B0aW9ucykpXFxuIFxcdFxcdFxcdFxcdHBheWxvYWQrKztcXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0aWYgKGZyYW1lLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0XFx0aWYgKGZyYW1lLVxcdTAwM2V2YWxpZCkge1xcbiBcXHRcXHRcXHRcXHRsZW4gKz0gZnJhbWUtXFx1MDAzZWxlbjtcXG4tXFx0XFx0XFx0aWYgKGZyYW1lLVxcdTAwM2V2YWxpZCBcXHUwMDI2XFx1MDAyNiBwa3RfY29udGludWVzKGZyYW1lLVxcdTAwM2VvcHRpb25zKSlcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcbitcXHRcXHRcXHRcXHRpZiAocGt0X2NvbnRpbnVlcyhmcmFtZS1cXHUwMDNlb3B0aW9ucykpXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHBrdC1cXHUwMDNlcGt0X25iID0gcGt0X25iO1xcbiBcXHRcXHRcXHRwa3QtXFx1MDAzZWxlbiA9IGxlbjtcXG4gXFx0XFx0XFx0cGt0LVxcdTAwM2V2YWxpZCA9IGZyYW1lLVxcdTAwM2V2YWxpZDtcXG5AQCAtMTIwOSw2ICsxMjA5LDcgQEAgc3RhdGljIGludCBfX3NlbmRfcGt0cyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB4c2stXFx1MDAzZWJhdGNoX3NpemU7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgcGt0ICpwa3QgPSBwa3Rfc3RyZWFtX2dldF9uZXh0X3R4X3BrdChwa3Rfc3RyZWFtKTtcXG4gXFx0XFx0dTMyIG5iX2ZyYWdzX2xlZnQsIG5iX2ZyYWdzLCBieXRlc193cml0dGVuID0gMDtcXG4rXFx0XFx0c3RydWN0IHBrdCAqZmlyc3RfcGt0ID0gcGt0O1xcbiBcXG4gXFx0XFx0aWYgKCFwa3QpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xMjUzLDYgKzEyNTQsOCBAQCBzdGF0aWMgaW50IF9fc2VuZF9wa3RzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayxcXG4gXFx0XFx0aWYgKHBrdCBcXHUwMDI2XFx1MDAyNiBwa3QtXFx1MDAzZXZhbGlkKSB7XFxuIFxcdFxcdFxcdHZhbGlkX3BrdHMrKztcXG4gXFx0XFx0XFx0dmFsaWRfZnJhZ3MgKz0gbmJfZnJhZ3M7XFxuK1xcdFxcdH0gZWxzZSBpZiAocGt0X3N0cmVhbS1cXHUwMDNldmVyYmF0aW0gXFx1MDAyNlxcdTAwMjYgcGt0X2NvbnRpbnVlcyhmaXJzdF9wa3QtXFx1MDAzZW9wdGlvbnMpKSB7XFxuK1xcdFxcdFxcdHZhbGlkX2ZyYWdzICs9IG5iX2ZyYWdzO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTIwOTksMTMgKzIxMDIsMTYgQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdFxcdHswLCAwLCAwLCBmYWxzZSwgMH0sXFxuIFxcdFxcdC8qIEludmFsaWQgYWRkcmVzcyBpbiB0aGUgc2Vjb25kIGZyYW1lICovXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxcbi1cXHRcXHR7dW1lbV9zeiwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcXG4rXFx0XFx0e3VtZW1fc3ogKiAyLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxcbitcXHRcXHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXFxuIFxcdFxcdC8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi9cXG4gXFx0XFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuK1xcdFxcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcXG4gXFx0XFx0LyogSW52YWxpZCBvcHRpb25zIGluIHRoZSBtaWRkbGUgKi9cXG4gXFx0XFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhTS19ERVNDX19JTlZBTElEX09QVElPTn0sXFxuK1xcdFxcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcXG4gXFx0XFx0LyogVHJhbnNtaXQgMiBmcmFncywgcmVjZWl2ZSAzICovXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIFhEUF9QS1RfQ09OVER9LFxcbiBcXHRcXHR7MCwgWFNLX1VNRU1fX01BWF9GUkFNRV9TSVpFLCAwLCB0cnVlLCAwfSxcXG5AQCAtMjExNyw4ICsyMTIzLDggQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcbiBcXHRpZiAodW1lbS1cXHUwMDNldW5hbGlnbmVkX21vZGUpIHtcXG4gXFx0XFx0LyogQ3Jvc3NpbmcgYSBjaHVuayBib3VuZGFyeSBhbGxvd2VkICovXFxuLVxcdFxcdHBrdHNbMTJdLnZhbGlkID0gdHJ1ZTtcXG4tXFx0XFx0cGt0c1sxM10udmFsaWQgPSB0cnVlO1xcbitcXHRcXHRwa3RzWzE1XS52YWxpZCA9IHRydWU7XFxuK1xcdFxcdHBrdHNbMTZdLnZhbGlkID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4gXFx0dGVzdC1cXHUwMDNlbXR1ID0gTUFYX0VUSF9KVU1CT19TSVpFO1xcbkBAIC0yMjcwLDcgKzIyNzYsNyBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXHRcXHRtYXhfZnJhZ3MgKz0gMTtcXG4gXFx0fVxcbiBcXG4tXFx0cGt0cyA9IGNhbGxvYygyICogbWF4X2ZyYWdzICsgMiwgc2l6ZW9mKHN0cnVjdCBwa3QpKTtcXG4rXFx0cGt0cyA9IGNhbGxvYygyICogbWF4X2ZyYWdzICsgMywgc2l6ZW9mKHN0cnVjdCBwa3QpKTtcXG4gXFx0aWYgKCFwa3RzKVxcbiBcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbiBcXG5AQCAtMjI4OCwyNCArMjI5NCwzMCBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXHR9XFxuIFxcdHBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDtcXG4gXFxuLVxcdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0XFxuLVxcdCAqIGNvbnRpbnVlcyBvbiB0aGUgbGFzdCBmcmFnXFxuLVxcdCAqL1xcbi1cXHRmb3IgKGkgPSBtYXhfZnJhZ3MgKyAxOyBpIFxcdTAwM2MgMiAqIG1heF9mcmFncyArIDE7IGkrKykge1xcbitcXHQvKiBBbiBpbnZhbGlkIHBhY2tldCB3aXRoIHRoZSBtYXggKyAxIGFtb3VudCBvZiBmcmFncyAqL1xcbitcXHRmb3IgKGkgPSBtYXhfZnJhZ3MgKyAxOyBpIFxcdTAwM2MgMiAqIG1heF9mcmFncyArIDI7IGkrKykge1xcbiBcXHRcXHRwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTtcXG4gXFx0XFx0cGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDtcXG4tXFx0XFx0cGt0c1tpXS52YWxpZCA9IGZhbHNlO1xcbitcXHRcXHRwa3RzW2ldLnZhbGlkID0gdHJ1ZTtcXG4gXFx0fVxcbitcXHRwa3RzWzIgKiBtYXhfZnJhZ3MgKyAxXS5vcHRpb25zID0gMDtcXG4gXFxuIFxcdC8qIFZhbGlkIHBhY2tldCBmb3Igc3luY2ggKi9cXG4tXFx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0ubGVuID0gTUlOX1BLVF9TSVpFO1xcbi1cXHRwa3RzWzIgKiBtYXhfZnJhZ3MgKyAxXS52YWxpZCA9IHRydWU7XFxuK1xcdHBrdHNbMiAqIG1heF9mcmFncyArIDJdLmxlbiA9IE1JTl9QS1RfU0laRTtcXG4rXFx0cGt0c1syICogbWF4X2ZyYWdzICsgMl0udmFsaWQgPSB0cnVlO1xcbiBcXG4tXFx0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAyKSkge1xcbitcXHRpZiAocGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20odGVzdCwgcGt0cywgMiAqIG1heF9mcmFncyArIDMpKSB7XFxuIFxcdFxcdGZyZWUocGt0cyk7XFxuIFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIFRoZSBnZW5lcmF0ZWQgVHggc3RyZWFtIG11c3Qga2VlcCB0aGUgdG9vLWJpZyBwYWNrZXQgdmFsaWQgc28gdGhhdFxcbitcXHQgKiBfX3NlbmRfcGt0cygpIGFjY291bnRzIGl0cyBkZXNjcmlwdG9ycyBpbiBvdXRzdGFuZGluZ190eC4gVGhlIFJ4XFxuK1xcdCAqIHN0cmVhbSwgaG93ZXZlciwgbXVzdCBub3QgZXhwZWN0IHRoaXMgcGFja2V0IG9uIHRoZSB3aXJlLlxcbitcXHQgKi9cXG4rXFx0dGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhzay1cXHUwMDNlcGt0X3N0cmVhbS1cXHUwMDNlcGt0c1syXS52YWxpZCA9IGZhbHNlO1xcbitcXHR0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrLVxcdTAwM2Vwa3Rfc3RyZWFtLVxcdTAwM2VuYl92YWxpZF9lbnRyaWVzLS07XFxuK1xcbiBcXHRyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7XFxuIFxcdGZyZWUocGt0cyk7XFxuIFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjMzOjQ2LjkyMDg1NDg1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzNzY5OTYxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfdHhfY29tcGxldGVkXCIsXG4gICAgXCJ4c2tfdHhfY29tbWl0X2JhdGNoXCIsXG4gICAgXCJfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZFwiLFxuICAgIFwieHNrX2Ryb3Bfc2tiXCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiX3plcm9jb3B5XCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiXCIsXG4gICAgXCJfX3hza19nZW5lcmljX3htaXRcIixcbiAgICBcInhwX2FsbG9jX3R4X2Rlc2NzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCBtdWx0aS1idWZmZXIgKFNHKSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljLCBpbnRyb2R1Y2luZyBiYXRjaGluZyBhbmQgcmVjbGFpbSBkZXNjcmlwdG9ycyB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgYm91bmRhcmllcyBjb3JyZWN0bHkuIEl0IG1vZGlmaWVzIGNvcmUgWERQIHNvY2tldCBjb2RlIGluIG5ldC94ZHAveHNrLmMgYW5kIG5ldC94ZHAveHNrX3F1ZXVlLmguIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMzMGQ0ZjdlYmMxYWVmNzk2NmFiMzllZWQ5ZmRhNGE3NTk5MDhmZThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxNzozMzo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmggYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXG5pbmRleCBlYmFjNjBhM2Q4YTE3Yi4uOGI1MTg3NmVmYmVkMWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZHBfc29jay5oXG4rKysgYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXG5AQCAtODAsNiArODAsNyBAQCBzdHJ1Y3QgeGRwX3NvY2sge1xuIFx0ICogY2FsbCBvZiBfX3hza19nZW5lcmljX3htaXQoKS5cbiBcdCAqL1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdGJvb2wgZHJhaW5fY29udDtcbiBcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbWFwX2xpc3Q7XG4gXHQvKiBQcm90ZWN0cyBtYXBfbGlzdCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaCBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxuaW5kZXggY2NiM2IzNTAwMDFmMjQuLmZiNTllMjA1YWM3ZDdlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXG4rKysgYi9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcbkBAIC03OCw2ICs3OCw5IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sIHtcbiBcdHUzMiBjaHVua19zaXplO1xuIFx0dTMyIGNodW5rX3NoaWZ0O1xuIFx0dTMyIGZyYW1lX2xlbjtcbitcdHUzMiB0eF9kZXNjc19uZW50cmllcztcbitcdHUzMiByZWNsYWltX2Rlc2NzO1xuK1x0dTMyIHR4X3pjX3BlbmRpbmdfZGVzY3M7XG4gXHR1MzIgeGRwX3pjX21heF9zZWdzO1xuIFx0dTggdHhfbWV0YWRhdGFfbGVuOyAvKiBpbmhlcml0ZWQgZnJvbSB1bWVtICovXG4gXHR1OCBjYWNoZWRfbmVlZF93YWtldXA7XG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmNcbmluZGV4IGI5NzBmMzBlYTliOWQ4Li43ZDhiNDJjNGMyMTRiYSAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrLmNcbisrKyBiL25ldC94ZHAveHNrLmNcbkBAIC00OTksNiArNDk5LDIzIEBAIHZvaWQgX194c2tfbWFwX2ZsdXNoKHN0cnVjdCBsaXN0X2hlYWQgKmZsdXNoX2xpc3QpXG4gXG4gdm9pZCB4c2tfdHhfY29tcGxldGVkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfZW50cmllcylcbiB7XG4rXHR1MzIgcmVjbGFpbV9kZXNjcyA9IFJFQURfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MpO1xuK1xuK1x0aWYgKHVubGlrZWx5KHJlY2xhaW1fZGVzY3MpKSB7XG4rXHRcdHUzMiBwZW5kaW5nX2Rlc2NzID0gUkVBRF9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyk7XG4rXG4rXHRcdGlmIChuYl9lbnRyaWVzIFx1MDAzYyBwZW5kaW5nX2Rlc2NzKSB7XG4rXHRcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MsXG4rXHRcdFx0XHQgICBwZW5kaW5nX2Rlc2NzIC0gbmJfZW50cmllcyk7XG4rXHRcdFx0eHNrcV9wcm9kX3N1Ym1pdF9uKHBvb2wtXHUwMDNlY3EsIG5iX2VudHJpZXMpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuK1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcywgMCk7XG4rXHRcdG5iX2VudHJpZXMgKz0gcmVjbGFpbV9kZXNjcztcbitcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MsIDApO1xuK1x0fVxuK1xuIFx0eHNrcV9wcm9kX3N1Ym1pdF9uKHBvb2wtXHUwMDNlY3EsIG5iX2VudHJpZXMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHhza190eF9jb21wbGV0ZWQpO1xuQEAgLTU3NCwyMiArNTkxLDE2OSBAQCBzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50clxuIFx0cmV0dXJuIG5iX3BrdHM7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHhza190eF9jb21taXRfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4rXHRcdFx0XHRzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaCxcbitcdFx0XHRcdHUzMiBjcV9jYWNoZWRfcHJvZClcbit7XG4rXHR1MzIgbmJfZGVzY3MgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoYmF0Y2gpO1xuK1xuK1x0aWYgKCFuYl9kZXNjcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0eHNrcV9wcm9kX3dyaXRlX2FkZHJfYmF0Y2gocG9vbC1cdTAwM2VjcSwgcG9vbC1cdTAwM2V0eF9kZXNjcywgbmJfZGVzY3MpO1xuK1xuK1x0aWYgKHVubGlrZWx5KGJhdGNoLVx1MDAzZXJlY2xhaW1fZGVzY3MpKSB7XG4rXHRcdHUzMiBjcV9wZW5kaW5nX2Rlc2NzO1xuK1xuK1x0XHQvKiBDUSBpcyBwb3NpdGlvbmFsLiBEZXNjcmlwdG9ycyBhbHJlYWR5IHdyaXR0ZW4gYnV0IG5vdFxuK1x0XHQgKiBzdWJtaXR0ZWQgbXVzdCBjb21wbGV0ZSBiZWZvcmUgYW55IHJlY2xhaW0tb25seSBkZXNjcmlwdG9yc1xuK1x0XHQgKiBhcHBlbmRlZCBiZWxvdy5cbitcdFx0ICovXG4rXHRcdGNxX3BlbmRpbmdfZGVzY3MgPSBjcV9jYWNoZWRfcHJvZCAtIHhza3FfZ2V0X3Byb2QocG9vbC1cdTAwM2VjcSk7XG4rXG4rXHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLCBiYXRjaC1cdTAwM2V0eF9kZXNjcyArIGNxX3BlbmRpbmdfZGVzY3MpO1xuK1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcywgYmF0Y2gtXHUwMDNlcmVjbGFpbV9kZXNjcyk7XG4rXHRcdGlmICh1bmxpa2VseSghcG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzKSlcbitcdFx0XHR4c2tfdHhfY29tcGxldGVkKHBvb2wsIDApO1xuK1x0fVxuK31cbitcbitzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxuK19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuK1x0XHRcdFx0IHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXhfZGVzY3MpXG4re1xuK1x0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xuK1x0dTMyIGVudHJpZXM7XG4rXG4rXHRlbnRyaWVzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIG1heF9kZXNjcyk7XG4rXHRpZiAoIWVudHJpZXMpXG4rXHRcdHJldHVybiBiYXRjaDtcbitcbitcdGJhdGNoID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cywgcG9vbCwgZGVzY3MsIGVudHJpZXMpO1xuK1x0aWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2YmF0Y2gpKSB7XG4rXHRcdHhzLVx1MDAzZXR4LVx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzKys7XG4rXHRcdGlmIChiYXRjaC5jb25zdW1lZF9kZXNjcykge1xuK1x0XHRcdF9feHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuK1x0XHRcdHhzLVx1MDAzZXNrLnNrX3dyaXRlX3NwYWNlKFx1MDAyNnhzLVx1MDAzZXNrKTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gYmF0Y2g7XG4rXHR9XG4rXG4rXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbitcdHhzLVx1MDAzZXNrLnNrX3dyaXRlX3NwYWNlKFx1MDAyNnhzLVx1MDAzZXNrKTtcbitcdHJldHVybiBiYXRjaDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcbit4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2Rlc2NzKVxuK3tcbitcdHUzMiBjcV9kZXNjc19iZWZvcmUsIGNxX2Rlc2NzX2FmdGVyO1xuK1x0c3RydWN0IHhza190eF9iYXRjaCBzdW1fYmF0Y2ggPSB7fTtcbitcdGJvb2wgYnVkZ2V0X2V4aGF1c3RlZDtcbitcdHUzMiBwZXJfc29ja2V0X2J1ZGdldDtcbitcdHN0cnVjdCB4ZHBfc29jayAqeHM7XG4rXG4rXHRtYXhfZGVzY3MgPSB4c2txX3Byb2RfbmJfZnJlZShwb29sLVx1MDAzZWNxLCBtYXhfZGVzY3MpO1xuK1x0aWYgKCFtYXhfZGVzY3MpXG4rXHRcdHJldHVybiBzdW1fYmF0Y2g7XG4rXG4rXHQvKiBUaGUgZmFpcm5lc3MgcXVvdGEgbXVzdCBhbGxvdyBvbmUgbWF4aW11bS1zaXplZCB2YWxpZCBwYWNrZXQuICovXG4rXHRwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULFxuK1x0XHRcdFx0ICBwb29sLVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4rXG4rYWdhaW46XG4rXHRidWRnZXRfZXhoYXVzdGVkID0gZmFsc2U7XG4rXHRjcV9kZXNjc19iZWZvcmUgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2c3VtX2JhdGNoKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0LCB0eF9saXN0KSB7XG4rXHRcdHUzMiBidWRnZXQsIGJ1ZGdldF9sZWZ0LCBvZmZzZXQsIHJlbWFpbmluZztcbitcdFx0c3RydWN0IHhza190eF9iYXRjaCBjdXJyX2JhdGNoO1xuK1xuK1x0XHQvKiBPbmNlIHJlY2xhaW0tb25seSBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gYXBwZW5kZWQgdG8gdGhlIENRIGFkZHJlc3NcbitcdFx0ICogYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9ycyBmcm9tIGFub3RoZXJcbitcdFx0ICogc29ja2V0IGFmdGVyIHRoZW0uIHhza190eF9jb21wbGV0ZWQoKSByZWxpZXMgb24gYWxsIGRyaXZlci12aXNpYmxlXG4rXHRcdCAqIGRlc2NyaXB0b3JzIHByZWNlZGluZyBhbGwgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLlxuK1x0XHQgKi9cbitcdFx0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBiZSBnZW50bGUgd2hlbiBwbGF5aW5nIHdpdGggcG9vbC1cdTAwM2V0eF9kZXNjcyAqL1xuK1x0XHRvZmZzZXQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2c3VtX2JhdGNoKTtcbitcdFx0aWYgKG9mZnNldCBcdTAwM2U9IG1heF9kZXNjcylcbitcdFx0XHRicmVhaztcbitcbitcdFx0aWYgKHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCBcdTAwM2U9IHBlcl9zb2NrZXRfYnVkZ2V0KSB7XG4rXHRcdFx0aWYgKHhza3FfY29uc19uYl9lbnRyaWVzKHhzLVx1MDAzZXR4LCAxKSlcbitcdFx0XHRcdGJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGJ1ZGdldF9sZWZ0ID0gcGVyX3NvY2tldF9idWRnZXQgLSB4cy1cdTAwM2V0eF9idWRnZXRfc3BlbnQ7XG4rXHRcdHJlbWFpbmluZyA9IG1heF9kZXNjcyAtIG9mZnNldDtcbitcdFx0YnVkZ2V0ID0gbWluKHJlbWFpbmluZywgYnVkZ2V0X2xlZnQpO1xuK1xuK1x0XHRjdXJyX2JhdGNoID0gX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gocG9vbCwgeHMsXG4rXHRcdFx0XHRcdFx0XHQgICAgICBwb29sLVx1MDAzZXR4X2Rlc2NzICsgb2Zmc2V0LFxuK1x0XHRcdFx0XHRcdFx0ICAgICAgYnVkZ2V0KTtcbitcdFx0aWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2Y3Vycl9iYXRjaCkpIHtcbitcdFx0XHRpZiAoY3Vycl9iYXRjaC5idWRnZXRfbGltaXRlZCBcdTAwMjZcdTAwMjYgYnVkZ2V0X2xlZnQgXHUwMDNjIHJlbWFpbmluZylcbitcdFx0XHRcdGJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlO1xuK1x0XHRcdHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCArPSBjdXJyX2JhdGNoLmNvbnN1bWVkX2Rlc2NzO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCArPSBjdXJyX2JhdGNoLmNvbnN1bWVkX2Rlc2NzO1xuK1x0XHRzdW1fYmF0Y2gudHhfZGVzY3MgKz0gY3Vycl9iYXRjaC50eF9kZXNjcztcbitcdFx0c3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgKz0gY3Vycl9iYXRjaC5yZWNsYWltX2Rlc2NzO1xuK1x0fVxuK1xuK1x0Y3FfZGVzY3NfYWZ0ZXIgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2c3VtX2JhdGNoKTtcbitcbitcdGlmIChzdW1fYmF0Y2gucmVjbGFpbV9kZXNjcyB8fCBjcV9kZXNjc19hZnRlciBcdTAwM2U9IG1heF9kZXNjcylcbitcdFx0cmV0dXJuIHN1bV9iYXRjaDtcbitcbitcdC8qIENvbnRpbnVlIGZpbGxpbmcgdGhlIGJhdGNoIHdoaWxlIHRoaXMgcGFzcyBtYWRlIHByb2dyZXNzICovXG4rXHRpZiAoY3FfZGVzY3NfYmVmb3JlICE9IGNxX2Rlc2NzX2FmdGVyKVxuK1x0XHRnb3RvIGFnYWluO1xuK1xuK1x0aWYgKCFidWRnZXRfZXhoYXVzdGVkKVxuK1x0XHRyZXR1cm4gc3VtX2JhdGNoO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsIFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpXG4rXHRcdHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCA9IDA7XG4rXHRnb3RvIGFnYWluO1xuK31cbitcbiB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcbiB7XG4rXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XG4gXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xuK1x0dTMyIGNxX2NhY2hlZF9wcm9kO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0aWYgKHVubGlrZWx5KFJFQURfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MpKSlcbitcdFx0Z290byBvdXQ7XG4rXHRuYl9wa3RzID0gbWluKG5iX3BrdHMsIHBvb2wtXHUwMDNldHhfZGVzY3NfbmVudHJpZXMpO1xuK1x0aWYgKCFuYl9wa3RzKVxuK1x0XHRnb3RvIG91dDtcbiBcdGlmICghbGlzdF9pc19zaW5ndWxhcihcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0KSkge1xuLVx0XHQvKiBGYWxsYmFjayB0byB0aGUgbm9uLWJhdGNoZWQgdmVyc2lvbiAqL1xuK1x0XHQvKiBLZWVwIHRoZSBsZWdhY3kgb25lLWRlc2NyaXB0b3IgZmFsbGJhY2sgZm9yIG5vbi1TRyB1c2Vycy4gIFRoZVxuK1x0XHQgKiBzaGFyZWQgU0cgcGF0aCBuZWVkcyBwYWNrZXQtZnJhbWVkIHBhcnNpbmcgc28gaW52YWxpZC9vdmVyZmxvd2VkXG4rXHRcdCAqIG11bHRpLWJ1ZmZlciBwYWNrZXRzIGFyZSBkcmFpbmVkIGFzIGEgdW5pdC5cbitcdFx0ICovXG4rXHRcdGlmIChwb29sLVx1MDAzZXVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpIHtcbitcdFx0XHRiYXRjaCA9IHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gocG9vbCwgbmJfcGt0cyk7XG4rXHRcdFx0Y3FfY2FjaGVkX3Byb2QgPSBwb29sLVx1MDAzZWNxLVx1MDAzZWNhY2hlZF9wcm9kO1xuK1x0XHRcdHhza190eF9jb21taXRfYmF0Y2gocG9vbCwgXHUwMDI2YmF0Y2gsIGNxX2NhY2hlZF9wcm9kKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2socG9vbCwgbmJfcGt0cyk7XG4gXHR9XG4gXG4gXHR4cyA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2V4c2tfdHhfbGlzdCwgc3RydWN0IHhkcF9zb2NrLCB0eF9saXN0KTtcbi1cdGlmICgheHMpIHtcbi1cdFx0bmJfcGt0cyA9IDA7XG4rXHRpZiAoIXhzKVxuIFx0XHRnb3RvIG91dDtcbi1cdH1cbiBcbiBcdG5iX3BrdHMgPSB4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cdTAwM2V0eCwgbmJfcGt0cyk7XG4gXG5AQCAtNjAzLDE5ICs3NjcsMTggQEAgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpXG4gXHRpZiAoIW5iX3BrdHMpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0bmJfcGt0cyA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMtXHUwMDNldHgsIHBvb2wsIG5iX3BrdHMpO1xuLVx0aWYgKCFuYl9wa3RzKSB7XG4tXHRcdHhzLVx1MDAzZXR4LVx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzKys7XG4rXHRiYXRjaCA9IF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIHhzLCBwb29sLVx1MDAzZXR4X2Rlc2NzLFxuK1x0XHRcdFx0XHRcdCBuYl9wa3RzKTtcbitcdG5iX3BrdHMgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2YmF0Y2gpO1xuK1x0aWYgKCFuYl9wa3RzKVxuIFx0XHRnb3RvIG91dDtcbi1cdH1cbiBcbi1cdF9feHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuLVx0eHNrcV9wcm9kX3dyaXRlX2FkZHJfYmF0Y2gocG9vbC1cdTAwM2VjcSwgcG9vbC1cdTAwM2V0eF9kZXNjcywgbmJfcGt0cyk7XG4tXHR4cy1cdTAwM2Vzay5za193cml0ZV9zcGFjZShcdTAwMjZ4cy1cdTAwM2Vzayk7XG4rXHRjcV9jYWNoZWRfcHJvZCA9IHBvb2wtXHUwMDNlY3EtXHUwMDNlY2FjaGVkX3Byb2Q7XG4rXHR4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsIFx1MDAyNmJhdGNoLCBjcV9jYWNoZWRfcHJvZCk7XG4gXG4gb3V0OlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRyZXR1cm4gbmJfcGt0cztcbitcdHJldHVybiBiYXRjaC50eF9kZXNjcztcbiB9XG4gRVhQT1JUX1NZTUJPTCh4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gpO1xuIFxuQEAgLTczNyw2ICs5MDAsMTkgQEAgc3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1MzIgaWR4O1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cG9vbC1cdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcbitcdGlkeCA9IHhza3FfZ2V0X3Byb2QocG9vbC1cdTAwM2VjcSk7XG4rXHR4c2txX3Byb2Rfd3JpdGVfYWRkcihwb29sLVx1MDAzZWNxLCBpZHgsIGRlc2MtXHUwMDNlYWRkcik7XG4rXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgMSk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlY3FfcHJvZF9sb2NrLCBmbGFncyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHhza19jcV9jYW5jZWxfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbilcbiB7XG4gXHRzcGluX2xvY2soXHUwMDI2cG9vbC1cdTAwM2VjcS1cdTAwM2VjcV9jYWNoZWRfcHJvZF9sb2NrKTtcbkBAIC03OTQsOCArOTcwLDExIEBAIHN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIHN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHhkcF9zayhza2ItXHUwMDNlc2spLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MgKz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xuLVx0eHNrX2NvbnN1bWVfc2tiKHNrYik7XG4rXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cdTAwM2Vzayk7XG4rXG4rXHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzICs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcbitcdGNvbnN1bWVfc2tiKHNrYik7XG4rXHR4cy1cdTAwM2Vza2IgPSBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxuQEAgLTg3Nyw3ICsxMDU2LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4gXHRcdC8qIGluIGNhc2Ugb2YgLUVPVkVSRkxPVyB0aGF0IGNvdWxkIGhhcHBlbiBiZWxvdyxcbi1cdFx0ICogeHNrX2NvbnN1bWVfc2tiKCkgd2lsbCByZWxlYXNlIHRoaXMgbm9kZSBhcyB3aG9sZSBza2JcbitcdFx0ICogeHNrX2Ryb3Bfc2tiKCkgd2lsbCByZWxlYXNlIHRoaXMgbm9kZSBhcyB3aG9sZSBza2JcbiBcdFx0ICogd291bGQgYmUgZHJvcHBlZCwgd2hpY2ggaW1wbGllcyBmcmVlaW5nIGFsbCBsaXN0IGVsZW1lbnRzXG4gXHRcdCAqL1xuIFx0XHR4c2tfYWRkci1cdTAwM2VhZGRyc1t4c2tfYWRkci1cdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cdTAwM2VhZGRyO1xuQEAgLTk2OSw2ICsxMTQ4LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gXHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuIFx0XHRcdH1cbiBcbitcdFx0XHR4c2tfYWRkci1cdTAwM2VhZGRyc1t4c2tfYWRkci1cdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cdTAwM2VhZGRyO1xuK1xuIFx0XHRcdGlmICh1bmxpa2VseShucl9mcmFncyA9PSAoTUFYX1NLQl9GUkFHUyAtIDEpIFx1MDAyNlx1MDAyNiB4cF9tYl9kZXNjKGRlc2MpKSkge1xuIFx0XHRcdFx0ZXJyID0gLUVPVkVSRkxPVztcbiBcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG5AQCAtOTg2LDggKzExNjcsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcbiBcdFx0XHRza2JfYWRkX3J4X2ZyYWcoc2tiLCBucl9mcmFncywgcGFnZSwgMCwgbGVuLCBQQUdFX1NJWkUpO1xuIFx0XHRcdHJlZmNvdW50X2FkZChQQUdFX1NJWkUsIFx1MDAyNnhzLVx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xuLVxuLVx0XHRcdHhza19hZGRyLVx1MDAzZWFkZHJzW3hza19hZGRyLVx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVx1MDAzZWFkZHI7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xMDYwLDExICsxMjM5LDIyIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuK1x0XHRpZiAodW5saWtlbHkoeHMtXHUwMDNlZHJhaW5fY29udCkpIHtcbitcdFx0XHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cdTAwM2Vwb29sLCBcdTAwMjZkZXNjKTtcbitcbitcdFx0XHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzKys7XG4rXHRcdFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuK1x0XHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSB4cF9tYl9kZXNjKFx1MDAyNmRlc2MpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdHNrYiA9IHhza19idWlsZF9za2IoeHMsIFx1MDAyNmRlc2MpO1xuIFx0XHRpZiAoSVNfRVJSKHNrYikpIHtcbiBcdFx0XHRlcnIgPSBQVFJfRVJSKHNrYik7XG4gXHRcdFx0aWYgKGVyciAhPSAtRU9WRVJGTE9XKVxuIFx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0aWYgKHhwX21iX2Rlc2MoXHUwMDI2ZGVzYykpXG4rXHRcdFx0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0gdHJ1ZTtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtMTA5OCw5ICsxMjg4LDI0IEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbiBcdH1cbiBcbiBcdGlmICh4c2txX2hhc19kZXNjcyh4cy1cdTAwM2V0eCkpIHtcbitcdFx0Ym9vbCByZWNsYWltX2Rlc2MgPSB4cy1cdTAwM2Vza2IgfHwgeHMtXHUwMDNlZHJhaW5fY29udDtcbitcbitcdFx0aWYgKHJlY2xhaW1fZGVzYykge1xuK1x0XHRcdGVyciA9IHhza19jcV9yZXNlcnZlX2xvY2tlZCh4cy1cdTAwM2Vwb29sKTtcbitcdFx0XHRpZiAoZXJyKSB7XG4rXHRcdFx0XHRlcnIgPSAtRUFHQUlOO1xuK1x0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4gXHRcdGlmICh4cy1cdTAwM2Vza2IpXG4gXHRcdFx0eHNrX2Ryb3Bfc2tiKHhzLVx1MDAzZXNrYik7XG4rXG4rXHRcdGlmIChyZWNsYWltX2Rlc2MpXG4rXHRcdFx0eHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtXHUwMDNlcG9vbCwgXHUwMDI2ZGVzYyk7XG4rXG4gXHRcdHhza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbitcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4gXHR9XG4gXG4gb3V0OlxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jIGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcbmluZGV4IDFmMjhhOTY0MTU3MWU0Li5iODYyYWRkY2Q4ZmRhZiAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXG4rKysgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xuQEAgLTQ4LDYgKzQ4LDcgQEAgaW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuIFx0aWYgKCFwb29sLVx1MDAzZXR4X2Rlc2NzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHBvb2wtXHUwMDNldHhfZGVzY3NfbmVudHJpZXMgPSB4cy1cdTAwM2V0eC1cdTAwM2VuZW50cmllcztcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19xdWV1ZS5oIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuaW5kZXggM2UzZmJiNzNkMjNlMmYuLmExNWZmMTkyOWRiNjIzIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2tfcXVldWUuaFxuKysrIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuQEAgLTU4LDYgKzU4LDE4IEBAIHN0cnVjdCBwYXJzZWRfZGVzYyB7XG4gXHR1MzIgdmFsaWQ7XG4gfTtcbiBcbitzdHJ1Y3QgeHNrX3R4X2JhdGNoIHtcbitcdHUzMiB0eF9kZXNjcztcbitcdHUzMiByZWNsYWltX2Rlc2NzO1xuK1x0dTMyIGNvbnN1bWVkX2Rlc2NzO1xuK1x0Ym9vbCBidWRnZXRfbGltaXRlZDtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIHhza190eF9iYXRjaF9jcV9kZXNjcyhjb25zdCBzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaClcbit7XG4rXHRyZXR1cm4gYmF0Y2gtXHUwMDNldHhfZGVzY3MgKyBiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzO1xuK31cbitcbiAvKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBzaGFyZWQgc3RhdGUgb2YgdGhlIHJpbmdzIGFyZSBhIHNpbXBsZVxuICAqIGNpcmN1bGFyIGJ1ZmZlciwgYXMgb3V0bGluZWQgaW5cbiAgKiBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL2NpcmN1bGFyLWJ1ZmZlcnMucnN0LiBGb3IgdGhlIFJ4IGFuZFxuQEAgLTI2MywxNyArMjc1LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZV9kZXNjKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0cGFyc2VkLVx1MDAzZW1iID0geHBfbWJfZGVzYyhkZXNjKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZVxuLXUzMiB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLVx0XHRcdCAgICAgIHUzMiBtYXgpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeHNrX3R4X2JhdGNoXG4reHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbitcdFx0XHQgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXgpXG4ge1xuLVx0dTMyIGNhY2hlZF9jb25zID0gcS1cdTAwM2VjYWNoZWRfY29ucywgbmJfZW50cmllcyA9IDA7XG4tXHRzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC1cdTAwM2V0eF9kZXNjcztcbi1cdHUzMiB0b3RhbF9kZXNjcyA9IDAsIG5yX2ZyYWdzID0gMDtcbitcdGJvb2wgZHJhaW4gPSBSRUFEX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCk7XG4rXHR1MzIgY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwLCByZWxlYXNlZDtcbitcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbitcdHN0cnVjdCB4c2tfcXVldWUgKnEgPSB4cy1cdTAwM2V0eDtcbitcdHUzMiBucl9mcmFncyA9IDA7XG4rXG4rXHRjYWNoZWRfY29ucyA9IHEtXHUwMDNlY2FjaGVkX2NvbnM7XG4gXG4tXHQvKiB0cmFjayBmaXJzdCBlbnRyeSwgaWYgc3R1bWJsZSB1cG9uICphbnkqIGludmFsaWQgZGVzY3JpcHRvciwgcmV3aW5kXG4tXHQgKiBjdXJyZW50IHBhY2tldCB0aGF0IGNvbnNpc3RzIG9mIGZyYWdzIGFuZCBzdG9wIHRoZSBwcm9jZXNzaW5nXG4tXHQgKi9cbiBcdHdoaWxlIChjYWNoZWRfY29ucyAhPSBxLVx1MDAzZWNhY2hlZF9wcm9kIFx1MDAyNlx1MDAyNiBuYl9lbnRyaWVzIFx1MDAzYyBtYXgpIHtcbiBcdFx0c3RydWN0IHhkcF9yeHR4X3JpbmcgKnJpbmcgPSAoc3RydWN0IHhkcF9yeHR4X3JpbmcgKilxLVx1MDAzZXJpbmc7XG4gXHRcdHUzMiBpZHggPSBjYWNoZWRfY29ucyBcdTAwMjYgcS1cdTAwM2VyaW5nX21hc2s7XG5AQCAtMjgyLDI2ICsyOTUsNDkgQEAgdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4gXHRcdGRlc2NzW25iX2VudHJpZXNdID0gcmluZy1cdTAwM2VkZXNjW2lkeF07XG4gXHRcdGNhY2hlZF9jb25zKys7XG4gXHRcdHBhcnNlX2Rlc2MocSwgcG9vbCwgXHUwMDI2ZGVzY3NbbmJfZW50cmllc10sIFx1MDAyNnBhcnNlZCk7XG4tXHRcdGlmICh1bmxpa2VseSghcGFyc2VkLnZhbGlkKSlcbi1cdFx0XHRicmVhaztcbitcdFx0aWYgKHVubGlrZWx5KCFwYXJzZWQudmFsaWQpKSB7XG4rXHRcdFx0aWYgKCFkcmFpbiBcdTAwMjZcdTAwMjYgIW5yX2ZyYWdzIFx1MDAyNlx1MDAyNiAhcGFyc2VkLm1iKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0ZHJhaW4gPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdG5yX2ZyYWdzKys7XG4rXHRcdG5iX2VudHJpZXMrKztcbiBcbiBcdFx0aWYgKGxpa2VseSghcGFyc2VkLm1iKSkge1xuLVx0XHRcdHRvdGFsX2Rlc2NzICs9IChucl9mcmFncyArIDEpO1xuLVx0XHRcdG5yX2ZyYWdzID0gMDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRucl9mcmFncysrO1xuLVx0XHRcdGlmIChucl9mcmFncyA9PSBwb29sLVx1MDAzZXhkcF96Y19tYXhfc2Vncykge1xuK1x0XHRcdGlmICh1bmxpa2VseShkcmFpbikpIHtcbitcdFx0XHRcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcbitcdFx0XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCwgZmFsc2UpO1xuIFx0XHRcdFx0bnJfZnJhZ3MgPSAwO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuK1xuK1x0XHRcdGJhdGNoLnR4X2Rlc2NzICs9IG5yX2ZyYWdzO1xuK1x0XHRcdG5yX2ZyYWdzID0gMDtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAobnJfZnJhZ3MgPT0gcG9vbC1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpXG4rXHRcdFx0ZHJhaW4gPSB0cnVlO1xuK1x0fVxuK1xuK1x0aWYgKG5yX2ZyYWdzKSB7XG4rXHRcdGlmIChkcmFpbikge1xuK1x0XHRcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcbitcdFx0XHRXUklURV9PTkNFKHhzLVx1MDAzZWRyYWluX2NvbnQsIHRydWUpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGlmIChuYl9lbnRyaWVzID09IG1heClcbitcdFx0XHRcdGJhdGNoLmJ1ZGdldF9saW1pdGVkID0gdHJ1ZTtcbitcdFx0XHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcbiBcdFx0fVxuLVx0XHRuYl9lbnRyaWVzKys7XG4gXHR9XG4gXG4tXHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcbitcdHJlbGVhc2VkID0gY2FjaGVkX2NvbnMgLSBxLVx1MDAzZWNhY2hlZF9jb25zO1xuIFx0LyogUmVsZWFzZSB2YWxpZCBwbHVzIGFueSBpbnZhbGlkIGVudHJpZXMgKi9cbi1cdHhza3FfY29uc19yZWxlYXNlX24ocSwgY2FjaGVkX2NvbnMgLSBxLVx1MDAzZWNhY2hlZF9jb25zKTtcbi1cdHJldHVybiB0b3RhbF9kZXNjcztcbitcdHhza3FfY29uc19yZWxlYXNlX24ocSwgcmVsZWFzZWQpO1xuK1x0YmF0Y2guY29uc3VtZWRfZGVzY3MgPSByZWxlYXNlZDtcbitcdHJldHVybiBiYXRjaDtcbiB9XG4gXG4gLyogRnVuY3Rpb25zIGZvciBjb25zdW1lcnMgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuaW5kZXggNmViOTA5NmQwODRjMDEuLjdhYmI0OTM1ZWRmOWFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuQEAgLTQyNywxNCArNDI3LDE0IEBAIHN0YXRpYyB1MzIgcGt0X25iX2ZyYWdzKHUzMiBmcmFtZV9zaXplLCBzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbSwgc3RydWN0IHBrXG4gXHR9XG4gXG4gXHQvKiBTZWFyY2ggZm9yIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBpbiB2ZXJiYXRpbSBtb2RlICovXG4tXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4rXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRyZXR1cm4gbmJfZnJhZ3M7XG4gXG4gXHRuZXh0X2ZyYWcgPSBwa3Rfc3RyZWFtLVx1MDAzZWN1cnJlbnRfcGt0X25iO1xuIFx0cGt0Kys7XG4gXHR3aGlsZSAobmV4dF9mcmFnKysgXHUwMDNjIHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cykge1xuIFx0XHRuYl9mcmFncysrO1xuLVx0XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4rXHRcdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXHUwMDNlb3B0aW9ucykpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHBrdCsrO1xuIFx0fVxuQEAgLTY2NSwxMSArNjY1LDExIEBAIHN0YXRpYyBzdHJ1Y3QgcGt0X3N0cmVhbSAqX19wa3Rfc3RyZWFtX2dlbmVyYXRlX2N1c3RvbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzXG4gXHRcdFx0aWYgKCFmcmFtZS1cdTAwM2V2YWxpZCB8fCAhcGt0X2NvbnRpbnVlcyhmcmFtZS1cdTAwM2VvcHRpb25zKSlcbiBcdFx0XHRcdHBheWxvYWQrKztcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoZnJhbWUtXHUwMDNldmFsaWQpXG4rXHRcdFx0aWYgKGZyYW1lLVx1MDAzZXZhbGlkKSB7XG4gXHRcdFx0XHRsZW4gKz0gZnJhbWUtXHUwMDNlbGVuO1xuLVx0XHRcdGlmIChmcmFtZS1cdTAwM2V2YWxpZCBcdTAwMjZcdTAwMjYgcGt0X2NvbnRpbnVlcyhmcmFtZS1cdTAwM2VvcHRpb25zKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuK1x0XHRcdFx0aWYgKHBrdF9jb250aW51ZXMoZnJhbWUtXHUwMDNlb3B0aW9ucykpXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbiBcdFx0XHRwa3QtXHUwMDNlcGt0X25iID0gcGt0X25iO1xuIFx0XHRcdHBrdC1cdTAwM2VsZW4gPSBsZW47XG4gXHRcdFx0cGt0LVx1MDAzZXZhbGlkID0gZnJhbWUtXHUwMDNldmFsaWQ7XG5AQCAtMTIwOSw2ICsxMjA5LDcgQEAgc3RhdGljIGludCBfX3NlbmRfcGt0cyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB4c2stXHUwMDNlYmF0Y2hfc2l6ZTsgaSsrKSB7XG4gXHRcdHN0cnVjdCBwa3QgKnBrdCA9IHBrdF9zdHJlYW1fZ2V0X25leHRfdHhfcGt0KHBrdF9zdHJlYW0pO1xuIFx0XHR1MzIgbmJfZnJhZ3NfbGVmdCwgbmJfZnJhZ3MsIGJ5dGVzX3dyaXR0ZW4gPSAwO1xuK1x0XHRzdHJ1Y3QgcGt0ICpmaXJzdF9wa3QgPSBwa3Q7XG4gXG4gXHRcdGlmICghcGt0KVxuIFx0XHRcdGJyZWFrO1xuQEAgLTEyNTMsNiArMTI1NCw4IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLFxuIFx0XHRpZiAocGt0IFx1MDAyNlx1MDAyNiBwa3QtXHUwMDNldmFsaWQpIHtcbiBcdFx0XHR2YWxpZF9wa3RzKys7XG4gXHRcdFx0dmFsaWRfZnJhZ3MgKz0gbmJfZnJhZ3M7XG4rXHRcdH0gZWxzZSBpZiAocGt0X3N0cmVhbS1cdTAwM2V2ZXJiYXRpbSBcdTAwMjZcdTAwMjYgcGt0X2NvbnRpbnVlcyhmaXJzdF9wa3QtXHUwMDNlb3B0aW9ucykpIHtcbitcdFx0XHR2YWxpZF9mcmFncyArPSBuYl9mcmFncztcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTIwOTksMTMgKzIxMDIsMTYgQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRcdHswLCAwLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgYWRkcmVzcyBpbiB0aGUgc2Vjb25kIGZyYW1lICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuLVx0XHR7dW1lbV9zeiwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbitcdFx0e3VtZW1fc3ogKiAyLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuK1x0XHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4rXHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogSW52YWxpZCBvcHRpb25zIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhTS19ERVNDX19JTlZBTElEX09QVElPTn0sXG4rXHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogVHJhbnNtaXQgMiBmcmFncywgcmVjZWl2ZSAzICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIFhEUF9QS1RfQ09OVER9LFxuIFx0XHR7MCwgWFNLX1VNRU1fX01BWF9GUkFNRV9TSVpFLCAwLCB0cnVlLCAwfSxcbkBAIC0yMTE3LDggKzIxMjMsOCBAQCBpbnQgdGVzdGFwcF9pbnZhbGlkX2Rlc2NfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcbiBcdGlmICh1bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlKSB7XG4gXHRcdC8qIENyb3NzaW5nIGEgY2h1bmsgYm91bmRhcnkgYWxsb3dlZCAqL1xuLVx0XHRwa3RzWzEyXS52YWxpZCA9IHRydWU7XG4tXHRcdHBrdHNbMTNdLnZhbGlkID0gdHJ1ZTtcbitcdFx0cGt0c1sxNV0udmFsaWQgPSB0cnVlO1xuK1x0XHRwa3RzWzE2XS52YWxpZCA9IHRydWU7XG4gXHR9XG4gXG4gXHR0ZXN0LVx1MDAzZW10dSA9IE1BWF9FVEhfSlVNQk9fU0laRTtcbkBAIC0yMjcwLDcgKzIyNzYsNyBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRtYXhfZnJhZ3MgKz0gMTtcbiBcdH1cbiBcbi1cdHBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyArIDIsIHNpemVvZihzdHJ1Y3QgcGt0KSk7XG4rXHRwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgKyAzLCBzaXplb2Yoc3RydWN0IHBrdCkpO1xuIFx0aWYgKCFwa3RzKVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuQEAgLTIyODgsMjQgKzIyOTQsMzAgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdH1cbiBcdHBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDtcbiBcbi1cdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0XG4tXHQgKiBjb250aW51ZXMgb24gdGhlIGxhc3QgZnJhZ1xuLVx0ICovXG4tXHRmb3IgKGkgPSBtYXhfZnJhZ3MgKyAxOyBpIFx1MDAzYyAyICogbWF4X2ZyYWdzICsgMTsgaSsrKSB7XG4rXHQvKiBBbiBpbnZhbGlkIHBhY2tldCB3aXRoIHRoZSBtYXggKyAxIGFtb3VudCBvZiBmcmFncyAqL1xuK1x0Zm9yIChpID0gbWF4X2ZyYWdzICsgMTsgaSBcdTAwM2MgMiAqIG1heF9mcmFncyArIDI7IGkrKykge1xuIFx0XHRwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTtcbiBcdFx0cGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDtcbi1cdFx0cGt0c1tpXS52YWxpZCA9IGZhbHNlO1xuK1x0XHRwa3RzW2ldLnZhbGlkID0gdHJ1ZTtcbiBcdH1cbitcdHBrdHNbMiAqIG1heF9mcmFncyArIDFdLm9wdGlvbnMgPSAwO1xuIFxuIFx0LyogVmFsaWQgcGFja2V0IGZvciBzeW5jaCAqL1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0ubGVuID0gTUlOX1BLVF9TSVpFO1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0udmFsaWQgPSB0cnVlO1xuK1x0cGt0c1syICogbWF4X2ZyYWdzICsgMl0ubGVuID0gTUlOX1BLVF9TSVpFO1xuK1x0cGt0c1syICogbWF4X2ZyYWdzICsgMl0udmFsaWQgPSB0cnVlO1xuIFxuLVx0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAyKSkge1xuK1x0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAzKSkge1xuIFx0XHRmcmVlKHBrdHMpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuK1x0LyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0XG4rXHQgKiBfX3NlbmRfcGt0cygpIGFjY291bnRzIGl0cyBkZXNjcmlwdG9ycyBpbiBvdXRzdGFuZGluZ190eC4gVGhlIFJ4XG4rXHQgKiBzdHJlYW0sIGhvd2V2ZXIsIG11c3Qgbm90IGV4cGVjdCB0aGlzIHBhY2tldCBvbiB0aGUgd2lyZS5cbitcdCAqL1xuK1x0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNlcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzJdLnZhbGlkID0gZmFsc2U7XG4rXHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2Vwa3Rfc3RyZWFtLVx1MDAzZW5iX3ZhbGlkX2VudHJpZXMtLTtcbitcbiBcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbiBcdGZyZWUocGt0cyk7XG4gXHRyZXR1cm4gcmV0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzM6NDYuOTIwODU4MDgxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk3NDExMzE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFGX1hEUCBNdWx0aS1CdWZmZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0b3VjaGluZyBzZXZlcmFsIGtleSBmaWxlcyByZWxhdGVkIHRvIEFGX1hEUDogYHhkcF9zb2NrLmhgLCBgeHNrX2J1ZmZfcG9vbC5oYCwgYHhzay5jYCwgYHhza19idWZmX3Bvb2wuY2AsIGB4c2tfcXVldWUuaGAsIGFuZCBhIHNlbGZ0ZXN0LiBUaGlzIGlzIGFsbCBhYm91dCBoYW5kbGluZyBtdWx0aS1idWZmZXIgb3IgU0cgKHNjYXR0ZXItZ2F0aGVyKSBwYWNrZXRzIHdpdGhpbiBBRl9YRFAsIHdoaWNoIHBpcXVlcyBteSBpbnRlcmVzdCBpbW1lZGlhdGVseS4gSXQncyB0b3VjaGluZyBjb3JlIGxvZ2ljLiBJJ20gc2VlaW5nIGFkZGl0aW9ucyBvZiB2YXJpYWJsZXMgbGlrZSBgZHJhaW5fY29udGAsIGB0eF9kZXNjc19uZW50cmllc2AsIGByZWNsYWltX2Rlc2NzYCwgYW5kIGB0eF96Y19wZW5kaW5nX2Rlc2NzYCBpbiB0aGUgYHhkcF9zb2NrYCBhbmQgYHhza19idWZmX3Bvb2xgIHN0cnVjdHVyZXMsIHdoaWNoIGluZGljYXRlcyBjaGFuZ2VzIGluIGRlc2NyaXB0b3IgbWFuYWdlbWVudC5cblxuRmlyc3QsIGxldCdzIGNvbmZpcm0gQUZfWERQIGl0c2VsZiBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkIOKAkyBnb29kLCB0aGF0J3MgYSBiYXNlbGluZS4gTm93LCBzaG91bGQgd2UgZnV6eiB0aGlzPyBBYnNvbHV0ZWx5LCBjb25zaWRlcmluZyB0aGlzIG1vZGlmaWVzIHRoZSBmdW5kYW1lbnRhbCBtdWx0aS1idWZmZXIgVFggcGF0aC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcy4gSXQncyBpbXBhY3RpbmcgY3JpdGljYWwgcGFydHMgb2YgdGhlIFhEUCBkYXRhIHBhdGguIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgeHNrX3R4X2NvbXBsZXRlZGAsIGFuZCBzb21lIG5ldyBvbmVzIGxpa2UgYHhza190eF9jb21taXRfYmF0Y2hgLCBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGAgYW5kIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGAuIEl0J3MgYWxzbyBtYWtpbmcgY2hhbmdlcyB0byBgeHNrX2Ryb3Bfc2tiYCwgYW5kIHRoZSBTS0IgYnVpbGRpbmcgZnVuY3Rpb25zIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YCBhbmQgYHhza19idWlsZF9za2JgLiBGaW5hbGx5LCBJIHNlZSBgX194c2tfZ2VuZXJpY194bWl0YCwgYHhwX2FsbG9jX3R4X2Rlc2NzYCwgYW5kIGB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoYCBpbiB0aGUgbWl4LlxuXG5UaW1lIHRvIGRyaWxsIGRvd24uIEknbSBnb2luZyB0byBxdWlja2x5IGdyZXAgdGhyb3VnaCBgbmV0L3hkcC94c2suY2AgYW5kIGBuZXQveGRwL3hza19xdWV1ZS5oYCB0byBjb25maXJtIHRoZSBleGFjdCBmdW5jdGlvbiBuYW1lcyBhbmQgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjb2RlIGJlaW5nIGNoYW5nZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zIGlzIGNydWNpYWwgZm9yIGJ1aWxkaW5nIGEgc3Ryb25nIGZ1enppbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDYsIk91dHB1dFRva2VucyI6NTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzo1NC44OTQ5NzQwNjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MTI5OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KHZvaWR8dTMyfGludHxzdHJ1Y3QgW2Etel9dKyBcXFxcKikgW2Etel9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAveHNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz00OT1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnhza190eF9nZW5lcmljX2NhY2hlO1xcbm5ldC94ZHAveHNrLmMtNTAtXFxubmV0L3hkcC94c2suYzo1MTp2b2lkIHhza19zZXRfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy01Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jPTU5PUVYUE9SVF9TWU1CT0woeHNrX3NldF9yeF9uZWVkX3dha2V1cCk7XFxubmV0L3hkcC94c2suYy02MC1cXG5uZXQveGRwL3hzay5jOjYxOnZvaWQgeHNrX3NldF90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTYyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9NzY9RVhQT1JUX1NZTUJPTCh4c2tfc2V0X3R4X25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTc3LVxcbm5ldC94ZHAveHNrLmM6Nzg6dm9pZCB4c2tfY2xlYXJfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy03OS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTg2PUVYUE9SVF9TWU1CT0woeHNrX2NsZWFyX3J4X25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTg3LVxcbm5ldC94ZHAveHNrLmM6ODg6dm9pZCB4c2tfY2xlYXJfdHhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy04OS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTEyMT1FWFBPUlRfU1lNQk9MKHhza19nZXRfcG9vbF9mcm9tX3FpZCk7XFxubmV0L3hkcC94c2suYy0xMjItXFxubmV0L3hkcC94c2suYzoxMjM6c3RhdGljIHZvaWQgX194c2tfY2xlYXJfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHF1ZXVlX2lkKVxcbm5ldC94ZHAveHNrLmMtMTI0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTMwLVxcbm5ldC94ZHAveHNrLmM6MTMxOnZvaWQgeHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcXG5uZXQveGRwL3hzay5jLTEzMi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE0Ni1cXG5uZXQveGRwL3hzay5jOjE0NzpzdGF0aWMgaW50IF9feHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC94ZHAveHNrLmMtMTQ4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTE2IHF1ZXVlX2lkKVxcbi0tXFxubmV0L3hkcC94c2suYy0xNjQtICovXFxubmV0L3hkcC94c2suYzoxNjU6aW50IHhza19yZWdfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxubmV0L3hkcC94c2suYy0xNjYtXFx0XFx0XFx0dTE2IHF1ZXVlX2lkKVxcbi0tXFxubmV0L3hkcC94c2suYy0xOTAtXFxubmV0L3hkcC94c2suYzoxOTE6c3RhdGljIGludCBfX3hza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYiwgdTMyIGxlbixcXG5uZXQveGRwL3hzay5jLTE5Mi1cXHRcXHRcXHR1MzIgZmxhZ3MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTIwNy1cXG5uZXQveGRwL3hzay5jOjIwODpzdGF0aWMgdm9pZCBfX3hza19yY3ZfemNfc2FmZShzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiLFxcbm5ldC94ZHAveHNrLmMtMjA5LVxcdFxcdFxcdCAgICAgIHUzMiBsZW4sIHUzMiBmbGFncylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjE4LVxcbm5ldC94ZHAveHNrLmM6MjE5OnN0YXRpYyBpbnQgeHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcXG5uZXQveGRwL3hzay5jLTIyMC17XFxuLS1cXG5uZXQveGRwL3hzay5jPTI2MD1zdGF0aWMgdm9pZCAqeHNrX2NvcHlfeGRwX3N0YXJ0KHN0cnVjdCB4ZHBfYnVmZiAqZnJvbSlcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjY3LVxcbm5ldC94ZHAveHNrLmM6MjY4OnN0YXRpYyB1MzIgeHNrX2NvcHlfeGRwKHZvaWQgKnRvLCB2b2lkICoqZnJvbSwgdTMyIHRvX2xlbixcXG5uZXQveGRwL3hzay5jLTI2OS1cXHRcXHRcXHR1MzIgKmZyb21fbGVuLCBza2JfZnJhZ190ICoqZnJhZywgdTMyIHJlbSlcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjk1LVxcbm5ldC94ZHAveHNrLmM6Mjk2OnN0YXRpYyBpbnQgX194c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxcbm5ldC94ZHAveHNrLmMtMjk3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MzY1PXN0YXRpYyBib29sIHhza190eF93cml0ZWFibGUoc3RydWN0IHhkcF9zb2NrICp4cylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMzcyLVxcbm5ldC94ZHAveHNrLmM6MzczOnN0YXRpYyB2b2lkIF9feHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTM3NC17XFxuLS1cXG5uZXQveGRwL3hzay5jPTM5MD1zdGF0aWMgYm9vbCB4c2tfZGV2X3F1ZXVlX3ZhbGlkKGNvbnN0IHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuLS1cXG5uZXQveGRwL3hzay5jLTQxNC1cXG5uZXQveGRwL3hzay5jOjQxNTpzdGF0aWMgaW50IHhza19yY3ZfY2hlY2soc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy00MTYte1xcbi0tXFxubmV0L3hkcC94c2suYy00MjktXFxubmV0L3hkcC94c2suYzo0MzA6c3RhdGljIHZvaWQgeHNrX2ZsdXNoKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy00MzEte1xcbi0tXFxubmV0L3hkcC94c2suYy00MzYtXFxubmV0L3hkcC94c2suYzo0Mzc6aW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQzOC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTQ1Mi1cXG5uZXQveGRwL3hzay5jOjQ1MzpzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L3hkcC94c2suYy00NTQte1xcbi0tXFxubmV0L3hkcC94c2suYy00NzItXFxubmV0L3hkcC94c2suYzo0NzM6aW50IF9feHNrX21hcF9yZWRpcmVjdChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQ3NC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTQ4OS1cXG5uZXQveGRwL3hzay5jOjQ5MDp2b2lkIF9feHNrX21hcF9mbHVzaChzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0KVxcbm5ldC94ZHAveHNrLmMtNDkxLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDk5LVxcbm5ldC94ZHAveHNrLmM6NTAwOnZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXFxubmV0L3hkcC94c2suYy01MDEte1xcbi0tXFxubmV0L3hkcC94c2suYz01MjE9RVhQT1JUX1NZTUJPTCh4c2tfdHhfY29tcGxldGVkKTtcXG5uZXQveGRwL3hzay5jLTUyMi1cXG5uZXQveGRwL3hzay5jOjUyMzp2b2lkIHhza190eF9yZWxlYXNlKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbm5ldC94ZHAveHNrLmMtNTI0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9NTgwPUVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfZGVzYyk7XFxubmV0L3hkcC94c2suYy01ODEtXFxubmV0L3hkcC94c2suYzo1ODI6c3RhdGljIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2VudHJpZXMpXFxubmV0L3hkcC94c2suYy01ODMte1xcbi0tXFxubmV0L3hkcC94c2suYy01OTMtXFxubmV0L3hkcC94c2suYzo1OTQ6c3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG5uZXQveGRwL3hzay5jLTU5NS1cXHRcXHRcXHRcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaCxcXG4tLVxcbm5ldC94ZHAveHNrLmM9NjQ4PXhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTcyNS1cXG5uZXQveGRwL3hzay5jOjcyNjp1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcXG5uZXQveGRwL3hzay5jLTcyNy17XFxuLS1cXG5uZXQveGRwL3hzay5jPTc4Mz1FWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XFxubmV0L3hkcC94c2suYy03ODQtXFxubmV0L3hkcC94c2suYzo3ODU6c3RhdGljIGludCB4c2tfd2FrZXVwKHN0cnVjdCB4ZHBfc29jayAqeHMsIHU4IGZsYWdzKVxcbm5ldC94ZHAveHNrLmMtNzg2LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzkxLVxcbm5ldC94ZHAveHNrLmM6NzkyOnN0YXRpYyBpbnQgeHNrX2NxX3Jlc2VydmVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbm5ldC94ZHAveHNrLmMtNzkzLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9ODI2PXN0YXRpYyBzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcnNfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZHAveHNrLmMtODM4LVxcbm5ldC94ZHAveHNrLmM6ODM5OnN0YXRpYyBpbnQgeHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHU2NCBhZGRyKVxcbm5ldC94ZHAveHNrLmMtODQwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODUwLVxcbm5ldC94ZHAveHNrLmM6ODUxOnN0YXRpYyB2b2lkIHhza19pbmNfbnVtX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTg1Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTg2MC1cXG5uZXQveGRwL3hzay5jOjg2MTpzdGF0aWMgdTMyIHhza19nZXRfbnVtX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTg2Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTg3Mi1cXG5uZXQveGRwL3hzay5jOjg3MzpzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbm5ldC94ZHAveHNrLmMtODc0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGRwL3hzay5jLTkwMi1cXG5uZXQveGRwL3hzay5jOjkwMzpzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG5uZXQveGRwL3hzay5jLTkwNC1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTE1LVxcbm5ldC94ZHAveHNrLmM6OTE2OnN0YXRpYyB2b2lkIHhza19jcV9jYW5jZWxfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbilcXG5uZXQveGRwL3hzay5jLTkxNy17XFxuLS1cXG5uZXQveGRwL3hzay5jPTkyMz1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxcbm5ldC94ZHAveHNrLmM6OTI0OnZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtOTI1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTM2LVxcbm5ldC94ZHAveHNrLmM6OTM3OnN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTkzOC1cXHRcXHRcXHQgICAgIHU2NCBhZGRyKVxcbi0tXFxubmV0L3hkcC94c2suYy05NTItXFxubmV0L3hkcC94c2suYzo5NTM6c3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy05NTQte1xcbi0tXFxubmV0L3hkcC94c2suYy05NzAtXFxubmV0L3hkcC94c2suYzo5NzE6c3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy05NzIte1xcbi0tXFxubmV0L3hkcC94c2suYy05NzktXFxubmV0L3hkcC94c2suYzo5ODA6c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcXG5uZXQveGRwL3hzay5jLTk4MS1cXHRcXHRcXHQgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTA5OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTIwMy1cXG5uZXQveGRwL3hzay5jOjEyMDQ6c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTIwNS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzMTgtXFxubmV0L3hkcC94c2suYzoxMzE5OnN0YXRpYyBpbnQgeHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hkcC94c2suYy0xMzIwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTMzMj1zdGF0aWMgYm9vbCB4c2tfbm9fd2FrZXVwKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM0Mi1cXG5uZXQveGRwL3hzay5jOjEzNDM6c3RhdGljIGludCB4c2tfY2hlY2tfY29tbW9uKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xMzQ0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM1Mi1cXG5uZXQveGRwL3hzay5jOjEzNTM6c3RhdGljIGludCBfX3hza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXFxubmV0L3hkcC94c2suYy0xMzU0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM4My1cXG5uZXQveGRwL3hzay5jOjEzODQ6c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTM4NS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzOTQtXFxubmV0L3hkcC94c2suYzoxMzk1OnN0YXRpYyBpbnQgX194c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxubmV0L3hkcC94c2suYy0xMzk2LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTQyMC1cXG5uZXQveGRwL3hzay5jOjE0MjE6c3RhdGljIGludCB4c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxubmV0L3hkcC94c2suYy0xNDIyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTQzMj1zdGF0aWMgX19wb2xsX3QgeHNrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0NjQtXFxubmV0L3hkcC94c2suYzoxNDY1OnN0YXRpYyBpbnQgeHNrX2luaXRfcXVldWUodTMyIGVudHJpZXMsIHN0cnVjdCB4c2tfcXVldWUgKipxdWV1ZSxcXG5uZXQveGRwL3hzay5jLTE0NjYtXFx0XFx0XFx0ICBib29sIHVtZW1fcXVldWUpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0ODItXFxubmV0L3hkcC94c2suYzoxNDgzOnN0YXRpYyB2b2lkIHhza191bmJpbmRfZGV2KHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNDg0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTQ5Nz1zdGF0aWMgc3RydWN0IHhza19tYXAgKnhza19nZXRfbWFwX2xpc3RfZW50cnkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTUxNi1cXG5uZXQveGRwL3hzay5jOjE1MTc6c3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9mcm9tX21hcHMoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTE1MTgte1xcbi0tXFxubmV0L3hkcC94c2suYy0xNTQyLVxcbm5ldC94ZHAveHNrLmM6MTU0MzpzdGF0aWMgaW50IHhza19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxubmV0L3hkcC94c2suYy0xNTQ0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTU5OD1zdGF0aWMgYm9vbCB4c2tfdmFsaWRhdGVfcXVldWVzKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE2MDItXFxubmV0L3hkcC94c2suYzoxNjAzOnN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilcXG5uZXQveGRwL3hzay5jLTE2MDQte1xcbi0tXFxubmV0L3hkcC94c2suYz0xNzkwPXN0cnVjdCB4ZHBfdW1lbV9yZWdfdjEge1xcbi0tXFxubmV0L3hkcC94c2suYy0xNzk2LVxcbm5ldC94ZHAveHNrLmM6MTc5NzpzdGF0aWMgaW50IHhza19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxubmV0L3hkcC94c2suYy0xNzk4LVxcdFxcdFxcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTkxOS1cXG5uZXQveGRwL3hzay5jOjE5MjA6c3RhdGljIHZvaWQgeHNrX2VudGVyX3J4dHhfb2Zmc2V0cyhzdHJ1Y3QgeGRwX3Jpbmdfb2Zmc2V0X3YxICpyaW5nKVxcbm5ldC94ZHAveHNrLmMtMTkyMS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE5MjYtXFxubmV0L3hkcC94c2suYzoxOTI3OnN0YXRpYyB2b2lkIHhza19lbnRlcl91bWVtX29mZnNldHMoc3RydWN0IHhkcF9yaW5nX29mZnNldF92MSAqcmluZylcXG5uZXQveGRwL3hzay5jLTE5Mjgte1xcbi0tXFxubmV0L3hkcC94c2suYz0xOTM0PXN0cnVjdCB4ZHBfc3RhdGlzdGljc192MSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTE5MzktXFxubmV0L3hkcC94c2suYzoxOTQwOnN0YXRpYyBpbnQgeHNrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQveGRwL3hzay5jLTE5NDEtXFx0XFx0XFx0ICBzb2Nrb3B0X3QgKm9wdClcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjA2Ny1cXG5uZXQveGRwL3hzay5jOjIwNjg6c3RhdGljIGludCB4c2tfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQveGRwL3hzay5jLTIwNjktXFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubmV0L3hkcC94c2suYy0yMTA1LVxcbm5ldC94ZHAveHNrLmM6MjEwNjpzdGF0aWMgaW50IHhza19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXFxubmV0L3hkcC94c2suYy0yMTA3LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbXNnLCB2b2lkICpwdHIpXFxuLS1cXG5uZXQveGRwL3hzay5jPTIxNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjE2My1cXG5uZXQveGRwL3hzay5jOjIxNjQ6c3RhdGljIHZvaWQgeHNrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG5uZXQveGRwL3hzay5jLTIxNjUte1xcbi0tXFxubmV0L3hkcC94c2suYy0yMTc0LVxcbm5ldC94ZHAveHNrLmM6MjE3NTpzdGF0aWMgaW50IHhza19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxubmV0L3hkcC94c2suYy0yMTc2LVxcdFxcdCAgICAgIGludCBrZXJuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzo1NS4wNjAxMTMxMThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ3NjMzMjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgQW5hbHlzaXMgb2YgS2V5IFhEUC9YU0sgVFggYW5kIFJYIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGluIFhEUC9YU0sgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcGF0aHMuIFRoZSBmb2xsb3dpbmcgYXJlIGNydWNpYWwgZm9yIHRoZSB0YXNrIGF0IGhhbmQ6IGB4c2tfdHhfY29tcGxldGVkYCwgYHhza190eF9jb21taXRfYmF0Y2hgLCBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGAsICh5ZXMsIHRoYXQgb25lIGlzIGxpc3RlZCB0d2ljZSwgYnV0IGl0J3MgaW1wb3J0YW50KSwgYHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkYCwgYHhza19kcm9wX3NrYmAsIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YCwgYHhza19idWlsZF9za2JgLCBgX194c2tfZ2VuZXJpY194bWl0YCwgYHhwX2FsbG9jX3R4X2Rlc2NzYCwgYW5kIGB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoYC4gVGhhdCBnaXZlcyBtZSB0aGUgb3ZlcnZpZXcgdGhhdCBJIG5lZWQgZm9yIHRoaXMgc2VjdGlvbi4gSSB3aWxsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgY29kZSBmb3IgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgLiBUbyBkbyB0aGF0LCBJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC94ZHAveHNrX3F1ZXVlLmhgIHRvIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGlzIG1lYW50IHRvIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAyNiwiT3V0cHV0VG9rZW5zIjo1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzo1OS40MDc3NDg2MjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTY2OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KHZvaWR8dTMyfGludHxzdHJ1Y3QgW2Etel9dKyBcXFxcKikgW2Etel9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAveHNrX3F1ZXVlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2tfcXVldWUuaD01NDE9c3RydWN0IHhza19xdWV1ZSAqeHNrcV9jcmVhdGUodTMyIG5lbnRyaWVzLCBib29sIHVtZW1fcXVldWUpO1xcbm5ldC94ZHAveHNrX3F1ZXVlLmg6NTQyOnZvaWQgeHNrcV9kZXN0cm95KHN0cnVjdCB4c2tfcXVldWUgKnFfb3BzKTtcXG5uZXQveGRwL3hza19xdWV1ZS5oLTU0My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzM6NTkuNTYzNzI1MTgyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyNzIwMDUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCdzIFhEUCBTb2NrZXQgQ29uc3VtcHRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoYCBmdW5jdGlvbi4gUmlnaHQsIGl0J3MgYSBgc3RhdGljIGlubGluZWAgZnVuY3Rpb24gZGVmaW5lZCBpbiBgbmV0L3hkcC94c2tfcXVldWUuaGAuIFRoYXQgbWVhbnMgaXQgd29uJ3QgYmUgYSB2aXNpYmxlIHN5bWJvbCBpbiB0aGUga2VybmVsIGltYWdlIGRpcmVjdGx5LiBCdXQsIHRoYXQncyBub3QgdGhlIGVuZCBvZiB0aGUgbGluZSwgYXMgSSBrbm93IGl0J3MgKmNhbGxlZCogYnkgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYC5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYSBiaXQgYW5kIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMgaGVyZS4gQUZfWERQJ3MgYXZhaWxhYmlsaXR5IGJvaWxzIGRvd24gdG8gYENPTkZJR19YRFBfU09DS0VUU2AuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBjb21lIGludG8gcGxheSBhcyB3ZWxsLiBBbHdheXMgZ29vZCB0byBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjY4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjAzLjY5MDkyODA4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjc2NzIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfWERQX1NPQ0tFVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC94ZHAvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpICs9IHhzay5vIHhkcF91bWVtLm8geHNrX3F1ZXVlLm8geHNrbWFwLm9cXG5uZXQveGRwL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSB4c2tfYnVmZl9wb29sLm9cXG5uZXQveGRwL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTX0RJQUcpICs9IHhza19kaWFnLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MDMuODE3NzA1Mjg4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5NDc2ODUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgWERQLVNvY2tldHMgRnVuY3Rpb24gTGlzdCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBgWERQX1NPQ0tFVFNgIHNwZWNpZmljYWxseS4gVGltZSB0byBuYWlsIGRvd24gdGhlIGNvcmUgZnVuY3Rpb25zIEkgbmVlZCB0byBhbmFseXplLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3QgYSBwcmVsaW1pbmFyeSBsaXN0LCBhbmQgSSBuZWVkIHRvIHJlZmluZSBpdC4gSSdtIHRoaW5raW5nOlxuXG4qICAgYHhza190eF9jb21wbGV0ZWRgXG4qICAgYHhza190eF9jb21taXRfYmF0Y2hgXG4qICAgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYFxuKiAgIGB4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoYFxuKiAgIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgIChEdXBsaWNhdGUsIEknbGwgY2xlYW4gdGhhdCB1cCBsYXRlcilcbiogICBgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRgXG4qICAgYHhza19kcm9wX3NrYmBcbiogICBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWBcbiogICBgeHNrX2J1aWxkX3NrYmBcbiogICBgX194c2tfZ2VuZXJpY194bWl0YFxuKiAgIGB4cF9hbGxvY190eF9kZXNjc2BcblxuV2FpdCBhIG1pbnV0ZSwgYSBmZXcgb2YgdGhvc2UgYXJlIG1hcmtlZCBhcyBgc3RhdGljYDogYHhza190eF9jb21taXRfYmF0Y2hgLCBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGAsIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGAsIGFuZCBgeHNrX2Ryb3Bfc2tiYC4gVGhleSBtaWdodCBiZSBpbmxpbmVkLiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhleSdyZSBleHBsaWNpdGx5IGRlY2xhcmVkIGFzIGBzdGF0aWMgaW5saW5lYC4gQWgsIG5vLCBqdXN0IGBzdGF0aWNgLiBUaGF0IG1lYW5zIHRoZXkncmUgbG9jYWwgdG8gdGhlaXIgY29tcGlsYXRpb24gdW5pdCwgYnV0IG5vdCBuZWNlc3NhcmlseSBpbmxpbmVkLiBUaGV5IHNob3VsZCBiZSBmaW5lIHRvIGluY2x1ZGUgZm9yIGEgYnJvYWRlciB2aWV3LlxuXG5JJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IGB4cF9hbGxvY190eF9kZXNjc2AgaW4gYG5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jYCBqdXN0IHRvIGJlIHN1cmUuIEl0J3MgdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjE2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjA5LjcxMjQ3NjQwMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMjAxODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhwX2FsbG9jX3R4X2Rlc2NzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jPTM1PXZvaWQgeHBfZGVzdHJveShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG4tLVxcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTQ0LVxcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jOjQ1OmludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy00Ni17XFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYz01NT1zdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbi0tXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtNzItXFx0aWYgKHhzLVxcdTAwM2V0eClcXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYzo3MzpcXHRcXHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMpKVxcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTc0LVxcdFxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDowOS44ODU2ODQ4NDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE0MTQ0MTY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBBRl9YRFAgTXVsdGktQnVmZmVyIFRyYW5zbWlzc2lvbiBMb2dpYyBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYHhwX2FsbG9jX3R4X2Rlc2NzYCBpcyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMga2V5LiBOb3csIEkgaGF2ZSBhIHNvbGlkIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZyBiYXNlZCBvbiB0aGUgcGF0Y2gncyBzY29wZTpcblxuKiAgIGB4c2tfdHhfY29tcGxldGVkYFxuKiAgIGB4c2tfdHhfY29tbWl0X2JhdGNoYFxuKiAgIGBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGBcbiogICBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGBcbiogICBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYFxuKiAgIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGBcbiogICBgeHNrX2Ryb3Bfc2tiYFxuKiAgIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YFxuKiAgIGB4c2tfYnVpbGRfc2tiYFxuKiAgIGBfX3hza19nZW5lcmljX3htaXRgXG4qICAgYHhwX2FsbG9jX3R4X2Rlc2NzYFxuXG5Jbml0aWFsbHksIEkgaGFkIGEgcXVpY2sgY2hlY2sgb24gd2hldGhlciBgX194c2tfZ2VuZXJpY194bWl0YCB3YXMgYSBzdGF0aWMgZnVuY3Rpb24uIEl0IGlzLiBIb3dldmVyLCBJIGNvbmZpcm1lZCB0aGF0IGl0IGlzIHRoZSBnZW5lcmljIHRyYW5zbWl0IGZ1bmN0aW9uLCBhbmQgdGhlIHBhdGNoIGhhcyBtb2RpZmllZCBpdC4gYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAgaXMgYWxzbyBhIGhvdC1wYXRoIGZ1bmN0aW9uLiBUaGUgaW5zdHJ1Y3Rpb25zIGRpZCB3YXJuIGFnYWluc3QgaW5jbHVkaW5nIGdlbmVyaWMgaG90LXBhdGhzIGxpa2UgYGtmcmVlYCBvciBgc2NoZWR1bGVgLCBidXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byBBRlxcX1hEUCwgc28gdGhleSdyZSByZWxldmFudCBhbmQgZG9uJ3Qgc2tldyB0aGUgZGlzdHJpYnV0aW9uLiBJbmNsdWRpbmcgdGhlbSBpcyBhY2NlcHRhYmxlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGZvY3VzZWQgb24gdGhlIEFGXFxfWERQIG11bHRpLWJ1ZmZlciAoU0cpIHBhY2tldCB0cmFuc21pc3Npb24uIEl0J3MgaW50cm9kdWNpbmcgYmF0Y2hpbmcgYW5kIGRlc2NyaXB0b3IgcmVjbGFpbSB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgQUZcXF9YRFAgY29kZSwgc28gaXQgbWFrZXMgcGVyZmVjdCBzZW5zZSB0byBmdXp6IGl0LiBUaGUgY29kZSdzIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiBgbmV0L3hkcC94c2suY2AgYW5kIGBuZXQveGRwL3hza19xdWV1ZS5oYC5cblxuVGhlIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIGVuc3VyZSBpcyBlbmFibGVkIGZvciB0aGlzIGlzIGBYRFBfU09DS0VUU2AuIEkgYnJpZWZseSBjaGVja2VkIGlmIGBYRFBfU09DS0VUU2AgZGVwZW5kZWQgb24gYEJQRl9TWVNDQUxMYCwgYW5kIGNvbmZpcm1lZCB0aGF0IGBYRFBfU09DS0VUU2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHRvIGJlIGNoZWNrZWQuIFRoaXMgY29uZmlybXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGVuYWJsZWQgdW5kZXIgdGhlIHRhcmdldGVkIGNvbmZpZ3VyYXRpb24uXG5cblNvLCBpbiBzdW1tYXJ5LCBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLCB0aGUgcGF0Y2gncyBzY29wZSwgYW5kIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlLiBJJ20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI1MSwiT3V0cHV0VG9rZW5zIjoyNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MTkuMDI3MTI5Mzg2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwNzE0MDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza190eF9jb21wbGV0ZWRcIixcbiAgICBcInhza190eF9jb21taXRfYmF0Y2hcIixcbiAgICBcIl9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hcIixcbiAgICBcInhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkXCIsXG4gICAgXCJ4c2tfZHJvcF9za2JcIixcbiAgICBcInhza19idWlsZF9za2JfemVyb2NvcHlcIixcbiAgICBcInhza19idWlsZF9za2JcIixcbiAgICBcIl9feHNrX2dlbmVyaWNfeG1pdFwiLFxuICAgIFwieHBfYWxsb2NfdHhfZGVzY3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZfWERQIG11bHRpLWJ1ZmZlciAoU0cpIHBhY2tldCB0cmFuc21pc3Npb24gbG9naWMsIGludHJvZHVjaW5nIGJhdGNoaW5nIGFuZCByZWNsYWltIGRlc2NyaXB0b3JzIHRvIGhhbmRsZSBpbnZhbGlkIGRlc2NyaXB0b3JzIGFuZCBib3VuZGFyaWVzIGNvcnJlY3RseS4gSXQgbW9kaWZpZXMgY29yZSBYRFAgc29ja2V0IGNvZGUgaW4gbmV0L3hkcC94c2suYyBhbmQgbmV0L3hkcC94c2tfcXVldWUuaC4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfdHhfY29tcGxldGVkXCIsXG4gICAgXCJ4c2tfdHhfY29tbWl0X2JhdGNoXCIsXG4gICAgXCJfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZFwiLFxuICAgIFwieHNrX2Ryb3Bfc2tiXCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiX3plcm9jb3B5XCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiXCIsXG4gICAgXCJfX3hza19nZW5lcmljX3htaXRcIixcbiAgICBcInhwX2FsbG9jX3R4X2Rlc2NzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCBtdWx0aS1idWZmZXIgKFNHKSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljLCBpbnRyb2R1Y2luZyBiYXRjaGluZyBhbmQgcmVjbGFpbSBkZXNjcmlwdG9ycyB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgYm91bmRhcmllcyBjb3JyZWN0bHkuIEl0IG1vZGlmaWVzIGNvcmUgWERQIHNvY2tldCBjb2RlIGluIG5ldC94ZHAveHNrLmMgYW5kIG5ldC94ZHAveHNrX3F1ZXVlLmguIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gw7f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 17:14:13 +0000 UTC FinishedAt: 2026-07-11 17:34:21 +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": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "b6a2282b-c5f5-416d-8b7c-d3151cdc63dd" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_tx_completed", "xsk_tx_commit_batch", "__xsk_tx_peek_release_desc_batch", "xsk_tx_peek_release_shared_desc_batch", "xsk_tx_peek_release_desc_batch", "xsk_cq_submit_addr_single_locked", "xsk_drop_skb", "xsk_build_skb_zerocopy", "xsk_build_skb", "__xsk_generic_xmit", "xp_alloc_tx_descs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX3R4X2NvbXBsZXRlZCYjMzQ7LAogICAgJiMzNDt4c2tfdHhfY29tbWl0X2JhdGNoJiMzNDssCiAgICAmIzM0O19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkJiMzNDssCiAgICAmIzM0O3hza19kcm9wX3NrYiYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2ImIzM0OywKICAgICYjMzQ7X194c2tfZ2VuZXJpY194bWl0JiMzNDssCiAgICAmIzM0O3hwX2FsbG9jX3R4X2Rlc2NzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgbXVsdGktYnVmZmVyIChTRykgcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYywgaW50cm9kdWNpbmcgYmF0Y2hpbmcgYW5kIHJlY2xhaW0gZGVzY3JpcHRvcnMgdG8gaGFuZGxlIGludmFsaWQgZGVzY3JpcHRvcnMgYW5kIGJvdW5kYXJpZXMgY29ycmVjdGx5LiBJdCBtb2RpZmllcyBjb3JlIFhEUCBzb2NrZXQgY29kZSBpbiBuZXQveGRwL3hzay5jIGFuZCBuZXQveGRwL3hza19xdWV1ZS5oLiBUaGlzIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMzMGQ0ZjdlYmMxYWVmNzk2NmFiMzllZWQ5ZmRhNGE3NTk5MDhmZThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxNzozMzo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZHBfc29jay5oIGIvaW5jbHVkZS9uZXQveGRwX3NvY2suaFxuaW5kZXggZWJhYzYwYTNkOGExN2IuLjhiNTE4NzZlZmJlZDFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQveGRwX3NvY2suaFxuQEAgLTgwLDYgJiM0Mzs4MCw3IEBAIHN0cnVjdCB4ZHBfc29jayB7XG4gXHQgKiBjYWxsIG9mIF9feHNrX2dlbmVyaWNfeG1pdCgpLlxuIFx0ICovXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdGJvb2wgZHJhaW5fY29udDtcbiBcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbWFwX2xpc3Q7XG4gXHQvKiBQcm90ZWN0cyBtYXBfbGlzdCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaCBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxuaW5kZXggY2NiM2IzNTAwMDFmMjQuLmZiNTllMjA1YWM3ZDdlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcbkBAIC03OCw2ICYjNDM7NzgsOSBAQCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCB7XG4gXHR1MzIgY2h1bmtfc2l6ZTtcbiBcdHUzMiBjaHVua19zaGlmdDtcbiBcdHUzMiBmcmFtZV9sZW47XG4mIzQzO1x0dTMyIHR4X2Rlc2NzX25lbnRyaWVzO1xuJiM0MztcdHUzMiByZWNsYWltX2Rlc2NzO1xuJiM0MztcdHUzMiB0eF96Y19wZW5kaW5nX2Rlc2NzO1xuIFx0dTMyIHhkcF96Y19tYXhfc2VncztcbiBcdHU4IHR4X21ldGFkYXRhX2xlbjsgLyogaW5oZXJpdGVkIGZyb20gdW1lbSAqL1xuIFx0dTggY2FjaGVkX25lZWRfd2FrZXVwO1xuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXG5pbmRleCBiOTcwZjMwZWE5YjlkOC4uN2Q4YjQyYzRjMjE0YmEgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hzay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hzay5jXG5AQCAtNDk5LDYgJiM0Mzs0OTksMjMgQEAgdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdClcbiBcbiB2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKVxuIHtcbiYjNDM7XHR1MzIgcmVjbGFpbV9kZXNjcyA9IFJFQURfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkocmVjbGFpbV9kZXNjcykpIHtcbiYjNDM7XHRcdHUzMiBwZW5kaW5nX2Rlc2NzID0gUkVBRF9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5iX2VudHJpZXMgXHUwMDNjIHBlbmRpbmdfZGVzY3MpIHtcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MsXG4mIzQzO1x0XHRcdFx0ICAgcGVuZGluZ19kZXNjcyAtIG5iX2VudHJpZXMpO1xuJiM0MztcdFx0XHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgbmJfZW50cmllcyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcywgMCk7XG4mIzQzO1x0XHRuYl9lbnRyaWVzICYjNDM7PSByZWNsYWltX2Rlc2NzO1xuJiM0MztcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MsIDApO1xuJiM0MztcdH1cbiYjNDM7XG4gXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgbmJfZW50cmllcyk7XG4gfVxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XG5AQCAtNTc0LDIyICYjNDM7NTkxLDE2OSBAQCBzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50clxuIFx0cmV0dXJuIG5iX3BrdHM7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB4c2tfdHhfY29tbWl0X2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuJiM0MztcdFx0XHRcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoLFxuJiM0MztcdFx0XHRcdHUzMiBjcV9jYWNoZWRfcHJvZClcbiYjNDM7e1xuJiM0MztcdHUzMiBuYl9kZXNjcyA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhiYXRjaCk7XG4mIzQzO1xuJiM0MztcdGlmICghbmJfZGVzY3MpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXHUwMDNlY3EsIHBvb2wtXHUwMDNldHhfZGVzY3MsIG5iX2Rlc2NzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGJhdGNoLVx1MDAzZXJlY2xhaW1fZGVzY3MpKSB7XG4mIzQzO1x0XHR1MzIgY3FfcGVuZGluZ19kZXNjcztcbiYjNDM7XG4mIzQzO1x0XHQvKiBDUSBpcyBwb3NpdGlvbmFsLiBEZXNjcmlwdG9ycyBhbHJlYWR5IHdyaXR0ZW4gYnV0IG5vdFxuJiM0MztcdFx0ICogc3VibWl0dGVkIG11c3QgY29tcGxldGUgYmVmb3JlIGFueSByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnNcbiYjNDM7XHRcdCAqIGFwcGVuZGVkIGJlbG93LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjcV9wZW5kaW5nX2Rlc2NzID0gY3FfY2FjaGVkX3Byb2QgLSB4c2txX2dldF9wcm9kKHBvb2wtXHUwMDNlY3EpO1xuJiM0MztcbiYjNDM7XHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLCBiYXRjaC1cdTAwM2V0eF9kZXNjcyAmIzQzOyBjcV9wZW5kaW5nX2Rlc2NzKTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2VyZWNsYWltX2Rlc2NzLCBiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzKTtcbiYjNDM7XHRcdGlmICh1bmxpa2VseSghcG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzKSlcbiYjNDM7XHRcdFx0eHNrX3R4X2NvbXBsZXRlZChwb29sLCAwKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoXG4mIzQzO19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xuJiM0MztcdHUzMiBlbnRyaWVzO1xuJiM0MztcbiYjNDM7XHRlbnRyaWVzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIG1heF9kZXNjcyk7XG4mIzQzO1x0aWYgKCFlbnRyaWVzKVxuJiM0MztcdFx0cmV0dXJuIGJhdGNoO1xuJiM0MztcbiYjNDM7XHRiYXRjaCA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMsIHBvb2wsIGRlc2NzLCBlbnRyaWVzKTtcbiYjNDM7XHRpZiAoIXhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZiYXRjaCkpIHtcbiYjNDM7XHRcdHhzLVx1MDAzZXR4LVx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzJiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmIChiYXRjaC5jb25zdW1lZF9kZXNjcykge1xuJiM0MztcdFx0XHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbiYjNDM7XHRcdFx0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIGJhdGNoO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0X194c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4mIzQzO1x0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuJiM0MztcdHJldHVybiBiYXRjaDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcbiYjNDM7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9kZXNjcylcbiYjNDM7e1xuJiM0MztcdHUzMiBjcV9kZXNjc19iZWZvcmUsIGNxX2Rlc2NzX2FmdGVyO1xuJiM0MztcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggc3VtX2JhdGNoID0ge307XG4mIzQzO1x0Ym9vbCBidWRnZXRfZXhoYXVzdGVkO1xuJiM0MztcdHUzMiBwZXJfc29ja2V0X2J1ZGdldDtcbiYjNDM7XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xuJiM0MztcbiYjNDM7XHRtYXhfZGVzY3MgPSB4c2txX3Byb2RfbmJfZnJlZShwb29sLVx1MDAzZWNxLCBtYXhfZGVzY3MpO1xuJiM0MztcdGlmICghbWF4X2Rlc2NzKVxuJiM0MztcdFx0cmV0dXJuIHN1bV9iYXRjaDtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZhaXJuZXNzIHF1b3RhIG11c3QgYWxsb3cgb25lIG1heGltdW0tc2l6ZWQgdmFsaWQgcGFja2V0LiAqL1xuJiM0MztcdHBlcl9zb2NrZXRfYnVkZ2V0ID0gbWF4X3QodTMyLCBNQVhfUEVSX1NPQ0tFVF9CVURHRVQsXG4mIzQzO1x0XHRcdFx0ICBwb29sLVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4mIzQzO1xuJiM0MzthZ2FpbjpcbiYjNDM7XHRidWRnZXRfZXhoYXVzdGVkID0gZmFsc2U7XG4mIzQzO1x0Y3FfZGVzY3NfYmVmb3JlID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFx1MDAyNnN1bV9iYXRjaCk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsIFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpIHtcbiYjNDM7XHRcdHUzMiBidWRnZXQsIGJ1ZGdldF9sZWZ0LCBvZmZzZXQsIHJlbWFpbmluZztcbiYjNDM7XHRcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggY3Vycl9iYXRjaDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBPbmNlIHJlY2xhaW0tb25seSBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gYXBwZW5kZWQgdG8gdGhlIENRIGFkZHJlc3NcbiYjNDM7XHRcdCAqIGFyZWEsIGRvIG5vdCBhcHBlbmQgZHJpdmVyLXZpc2libGUgVHggZGVzY3JpcHRvcnMgZnJvbSBhbm90aGVyXG4mIzQzO1x0XHQgKiBzb2NrZXQgYWZ0ZXIgdGhlbS4geHNrX3R4X2NvbXBsZXRlZCgpIHJlbGllcyBvbiBhbGwgZHJpdmVyLXZpc2libGVcbiYjNDM7XHRcdCAqIGRlc2NyaXB0b3JzIHByZWNlZGluZyBhbGwgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLVx1MDAzZXR4X2Rlc2NzICovXG4mIzQzO1x0XHRvZmZzZXQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2c3VtX2JhdGNoKTtcbiYjNDM7XHRcdGlmIChvZmZzZXQgXHUwMDNlPSBtYXhfZGVzY3MpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmICh4cy1cdTAwM2V0eF9idWRnZXRfc3BlbnQgXHUwMDNlPSBwZXJfc29ja2V0X2J1ZGdldCkge1xuJiM0MztcdFx0XHRpZiAoeHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIDEpKVxuJiM0MztcdFx0XHRcdGJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRidWRnZXRfbGVmdCA9IHBlcl9zb2NrZXRfYnVkZ2V0IC0geHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50O1xuJiM0MztcdFx0cmVtYWluaW5nID0gbWF4X2Rlc2NzIC0gb2Zmc2V0O1xuJiM0MztcdFx0YnVkZ2V0ID0gbWluKHJlbWFpbmluZywgYnVkZ2V0X2xlZnQpO1xuJiM0MztcbiYjNDM7XHRcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICBwb29sLVx1MDAzZXR4X2Rlc2NzICYjNDM7IG9mZnNldCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICBidWRnZXQpO1xuJiM0MztcdFx0aWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2Y3Vycl9iYXRjaCkpIHtcbiYjNDM7XHRcdFx0aWYgKGN1cnJfYmF0Y2guYnVkZ2V0X2xpbWl0ZWQgXHUwMDI2XHUwMDI2IGJ1ZGdldF9sZWZ0IFx1MDAzYyByZW1haW5pbmcpXG4mIzQzO1x0XHRcdFx0YnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7XG4mIzQzO1x0XHRcdHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCAmIzQzOz0gY3Vycl9iYXRjaC5jb25zdW1lZF9kZXNjcztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ICYjNDM7PSBjdXJyX2JhdGNoLmNvbnN1bWVkX2Rlc2NzO1xuJiM0MztcdFx0c3VtX2JhdGNoLnR4X2Rlc2NzICYjNDM7PSBjdXJyX2JhdGNoLnR4X2Rlc2NzO1xuJiM0MztcdFx0c3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgJiM0Mzs9IGN1cnJfYmF0Y2gucmVjbGFpbV9kZXNjcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNxX2Rlc2NzX2FmdGVyID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFx1MDAyNnN1bV9iYXRjaCk7XG4mIzQzO1xuJiM0MztcdGlmIChzdW1fYmF0Y2gucmVjbGFpbV9kZXNjcyB8fCBjcV9kZXNjc19hZnRlciBcdTAwM2U9IG1heF9kZXNjcylcbiYjNDM7XHRcdHJldHVybiBzdW1fYmF0Y2g7XG4mIzQzO1xuJiM0MztcdC8qIENvbnRpbnVlIGZpbGxpbmcgdGhlIGJhdGNoIHdoaWxlIHRoaXMgcGFzcyBtYWRlIHByb2dyZXNzICovXG4mIzQzO1x0aWYgKGNxX2Rlc2NzX2JlZm9yZSAhPSBjcV9kZXNjc19hZnRlcilcbiYjNDM7XHRcdGdvdG8gYWdhaW47XG4mIzQzO1xuJiM0MztcdGlmICghYnVkZ2V0X2V4aGF1c3RlZClcbiYjNDM7XHRcdHJldHVybiBzdW1fYmF0Y2g7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0LCB0eF9saXN0KVxuJiM0MztcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ID0gMDtcbiYjNDM7XHRnb3RvIGFnYWluO1xuJiM0Mzt9XG4mIzQzO1xuIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XG4gXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xuJiM0MztcdHUzMiBjcV9jYWNoZWRfcHJvZDtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcykpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0bmJfcGt0cyA9IG1pbihuYl9wa3RzLCBwb29sLVx1MDAzZXR4X2Rlc2NzX25lbnRyaWVzKTtcbiYjNDM7XHRpZiAoIW5iX3BrdHMpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdGlmICghbGlzdF9pc19zaW5ndWxhcihcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0KSkge1xuLVx0XHQvKiBGYWxsYmFjayB0byB0aGUgbm9uLWJhdGNoZWQgdmVyc2lvbiAqL1xuJiM0MztcdFx0LyogS2VlcCB0aGUgbGVnYWN5IG9uZS1kZXNjcmlwdG9yIGZhbGxiYWNrIGZvciBub24tU0cgdXNlcnMuICBUaGVcbiYjNDM7XHRcdCAqIHNoYXJlZCBTRyBwYXRoIG5lZWRzIHBhY2tldC1mcmFtZWQgcGFyc2luZyBzbyBpbnZhbGlkL292ZXJmbG93ZWRcbiYjNDM7XHRcdCAqIG11bHRpLWJ1ZmZlciBwYWNrZXRzIGFyZSBkcmFpbmVkIGFzIGEgdW5pdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHBvb2wtXHUwMDNldW1lbS1cdTAwM2VmbGFncyBcdTAwMjYgWERQX1VNRU1fU0dfRkxBRykge1xuJiM0MztcdFx0XHRiYXRjaCA9IHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gocG9vbCwgbmJfcGt0cyk7XG4mIzQzO1x0XHRcdGNxX2NhY2hlZF9wcm9kID0gcG9vbC1cdTAwM2VjcS1cdTAwM2VjYWNoZWRfcHJvZDtcbiYjNDM7XHRcdFx0eHNrX3R4X2NvbW1pdF9iYXRjaChwb29sLCBcdTAwMjZiYXRjaCwgY3FfY2FjaGVkX3Byb2QpO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcbiBcdH1cbiBcbiBcdHhzID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdShcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0LCBzdHJ1Y3QgeGRwX3NvY2ssIHR4X2xpc3QpO1xuLVx0aWYgKCF4cykge1xuLVx0XHRuYl9wa3RzID0gMDtcbiYjNDM7XHRpZiAoIXhzKVxuIFx0XHRnb3RvIG91dDtcbi1cdH1cbiBcbiBcdG5iX3BrdHMgPSB4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cdTAwM2V0eCwgbmJfcGt0cyk7XG4gXG5AQCAtNjAzLDE5ICYjNDM7NzY3LDE4IEBAIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxuIFx0aWYgKCFuYl9wa3RzKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdG5iX3BrdHMgPSB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHhzLVx1MDAzZXR4LCBwb29sLCBuYl9wa3RzKTtcbi1cdGlmICghbmJfcGt0cykge1xuLVx0XHR4cy1cdTAwM2V0eC1cdTAwM2VxdWV1ZV9lbXB0eV9kZXNjcyYjNDM7JiM0Mzs7XG4mIzQzO1x0YmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cywgcG9vbC1cdTAwM2V0eF9kZXNjcyxcbiYjNDM7XHRcdFx0XHRcdFx0IG5iX3BrdHMpO1xuJiM0MztcdG5iX3BrdHMgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2YmF0Y2gpO1xuJiM0MztcdGlmICghbmJfcGt0cylcbiBcdFx0Z290byBvdXQ7XG4tXHR9XG4gXG4tXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbi1cdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXHUwMDNlY3EsIHBvb2wtXHUwMDNldHhfZGVzY3MsIG5iX3BrdHMpO1xuLVx0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuJiM0MztcdGNxX2NhY2hlZF9wcm9kID0gcG9vbC1cdTAwM2VjcS1cdTAwM2VjYWNoZWRfcHJvZDtcbiYjNDM7XHR4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsIFx1MDAyNmJhdGNoLCBjcV9jYWNoZWRfcHJvZCk7XG4gXG4gb3V0OlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRyZXR1cm4gbmJfcGt0cztcbiYjNDM7XHRyZXR1cm4gYmF0Y2gudHhfZGVzY3M7XG4gfVxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTtcbiBcbkBAIC03MzcsNiAmIzQzOzkwMCwxOSBAQCBzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0dTMyIGlkeDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cG9vbC1cdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZHggPSB4c2txX2dldF9wcm9kKHBvb2wtXHUwMDNlY3EpO1xuJiM0MztcdHhza3FfcHJvZF93cml0ZV9hZGRyKHBvb2wtXHUwMDNlY3EsIGlkeCwgZGVzYy1cdTAwM2VhZGRyKTtcbiYjNDM7XHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgMSk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHhza19jcV9jYW5jZWxfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbilcbiB7XG4gXHRzcGluX2xvY2soXHUwMDI2cG9vbC1cdTAwM2VjcS1cdTAwM2VjcV9jYWNoZWRfcHJvZF9sb2NrKTtcbkBAIC03OTQsOCAmIzQzOzk3MCwxMSBAQCBzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBzdGF0aWMgdm9pZCB4c2tfZHJvcF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHR4ZHBfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzICYjNDM7PSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XG4tXHR4c2tfY29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cdTAwM2Vzayk7XG4mIzQzO1xuJiM0MztcdHhzLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MgJiM0Mzs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcbiYjNDM7XHRjb25zdW1lX3NrYihza2IpO1xuJiM0MztcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG5AQCAtODc3LDcgJiM0MzsxMDU2LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4gXHRcdC8qIGluIGNhc2Ugb2YgLUVPVkVSRkxPVyB0aGF0IGNvdWxkIGhhcHBlbiBiZWxvdyxcbi1cdFx0ICogeHNrX2NvbnN1bWVfc2tiKCkgd2lsbCByZWxlYXNlIHRoaXMgbm9kZSBhcyB3aG9sZSBza2JcbiYjNDM7XHRcdCAqIHhza19kcm9wX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiXG4gXHRcdCAqIHdvdWxkIGJlIGRyb3BwZWQsIHdoaWNoIGltcGxpZXMgZnJlZWluZyBhbGwgbGlzdCBlbGVtZW50c1xuIFx0XHQgKi9cbiBcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbkBAIC05NjksNiAmIzQzOzExNDgsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4gXHRcdFx0fVxuIFxuJiM0MztcdFx0XHR4c2tfYWRkci1cdTAwM2VhZGRyc1t4c2tfYWRkci1cdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cdTAwM2VhZGRyO1xuJiM0MztcbiBcdFx0XHRpZiAodW5saWtlbHkobnJfZnJhZ3MgPT0gKE1BWF9TS0JfRlJBR1MgLSAxKSBcdTAwMjZcdTAwMjYgeHBfbWJfZGVzYyhkZXNjKSkpIHtcbiBcdFx0XHRcdGVyciA9IC1FT1ZFUkZMT1c7XG4gXHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuQEAgLTk4Niw4ICYjNDM7MTE2Nyw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuIFxuIFx0XHRcdHNrYl9hZGRfcnhfZnJhZyhza2IsIG5yX2ZyYWdzLCBwYWdlLCAwLCBsZW4sIFBBR0VfU0laRSk7XG4gXHRcdFx0cmVmY291bnRfYWRkKFBBR0VfU0laRSwgXHUwMDI2eHMtXHUwMDNlc2suc2tfd21lbV9hbGxvYyk7XG4tXG4tXHRcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTEwNjAsMTEgJiM0MzsxMjM5LDIyIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKHVubGlrZWx5KHhzLVx1MDAzZWRyYWluX2NvbnQpKSB7XG4mIzQzO1x0XHRcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIFx1MDAyNmRlc2MpO1xuJiM0MztcbiYjNDM7XHRcdFx0eHMtXHUwMDNldHgtXHUwMDNlaW52YWxpZF9kZXNjcyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHhza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbiYjNDM7XHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXHUwMDI2ZGVzYyk7XG4gXHRcdGlmIChJU19FUlIoc2tiKSkge1xuIFx0XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbiBcdFx0XHRpZiAoZXJyICE9IC1FT1ZFUkZMT1cpXG4gXHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0aWYgKHhwX21iX2Rlc2MoXHUwMDI2ZGVzYykpXG4mIzQzO1x0XHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHRydWU7XG4gXHRcdFx0ZXJyID0gMDtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuQEAgLTEwOTgsOSAmIzQzOzEyODgsMjQgQEAgc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0fVxuIFxuIFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVx1MDAzZXR4KSkge1xuJiM0MztcdFx0Ym9vbCByZWNsYWltX2Rlc2MgPSB4cy1cdTAwM2Vza2IgfHwgeHMtXHUwMDNlZHJhaW5fY29udDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmVjbGFpbV9kZXNjKSB7XG4mIzQzO1x0XHRcdGVyciA9IHhza19jcV9yZXNlcnZlX2xvY2tlZCh4cy1cdTAwM2Vwb29sKTtcbiYjNDM7XHRcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRcdGVyciA9IC1FQUdBSU47XG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGlmICh4cy1cdTAwM2Vza2IpXG4gXHRcdFx0eHNrX2Ryb3Bfc2tiKHhzLVx1MDAzZXNrYik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJlY2xhaW1fZGVzYylcbiYjNDM7XHRcdFx0eHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtXHUwMDNlcG9vbCwgXHUwMDI2ZGVzYyk7XG4mIzQzO1xuIFx0XHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4mIzQzO1x0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0geHBfbWJfZGVzYyhcdTAwMjZkZXNjKTtcbiBcdH1cbiBcbiBvdXQ6XG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2tfYnVmZl9wb29sLmMgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xuaW5kZXggMWYyOGE5NjQxNTcxZTQuLmI4NjJhZGRjZDhmZGFmIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXG5AQCAtNDgsNiAmIzQzOzQ4LDcgQEAgaW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuIFx0aWYgKCFwb29sLVx1MDAzZXR4X2Rlc2NzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjNDM7XHRwb29sLVx1MDAzZXR4X2Rlc2NzX25lbnRyaWVzID0geHMtXHUwMDNldHgtXHUwMDNlbmVudHJpZXM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2tfcXVldWUuaCBiL25ldC94ZHAveHNrX3F1ZXVlLmhcbmluZGV4IDNlM2ZiYjczZDIzZTJmLi5hMTVmZjE5MjlkYjYyMyAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrX3F1ZXVlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrX3F1ZXVlLmhcbkBAIC01OCw2ICYjNDM7NTgsMTggQEAgc3RydWN0IHBhcnNlZF9kZXNjIHtcbiBcdHUzMiB2YWxpZDtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgeHNrX3R4X2JhdGNoIHtcbiYjNDM7XHR1MzIgdHhfZGVzY3M7XG4mIzQzO1x0dTMyIHJlY2xhaW1fZGVzY3M7XG4mIzQzO1x0dTMyIGNvbnN1bWVkX2Rlc2NzO1xuJiM0MztcdGJvb2wgYnVkZ2V0X2xpbWl0ZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHUzMiB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoY29uc3Qgc3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYmF0Y2gtXHUwMDNldHhfZGVzY3MgJiM0MzsgYmF0Y2gtXHUwMDNlcmVjbGFpbV9kZXNjcztcbiYjNDM7fVxuJiM0MztcbiAvKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBzaGFyZWQgc3RhdGUgb2YgdGhlIHJpbmdzIGFyZSBhIHNpbXBsZVxuICAqIGNpcmN1bGFyIGJ1ZmZlciwgYXMgb3V0bGluZWQgaW5cbiAgKiBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL2NpcmN1bGFyLWJ1ZmZlcnMucnN0LiBGb3IgdGhlIFJ4IGFuZFxuQEAgLTI2MywxNyAmIzQzOzI3NSwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VfZGVzYyhzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbiBcdHBhcnNlZC1cdTAwM2VtYiA9IHhwX21iX2Rlc2MoZGVzYyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmVcbi11MzIgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbi1cdFx0XHQgICAgICB1MzIgbWF4KVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCB4c2tfdHhfYmF0Y2hcbiYjNDM7eHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4KVxuIHtcbi1cdHUzMiBjYWNoZWRfY29ucyA9IHEtXHUwMDNlY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwO1xuLVx0c3RydWN0IHhkcF9kZXNjICpkZXNjcyA9IHBvb2wtXHUwMDNldHhfZGVzY3M7XG4tXHR1MzIgdG90YWxfZGVzY3MgPSAwLCBucl9mcmFncyA9IDA7XG4mIzQzO1x0Ym9vbCBkcmFpbiA9IFJFQURfT05DRSh4cy1cdTAwM2VkcmFpbl9jb250KTtcbiYjNDM7XHR1MzIgY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwLCByZWxlYXNlZDtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XG4mIzQzO1x0c3RydWN0IHhza19xdWV1ZSAqcSA9IHhzLVx1MDAzZXR4O1xuJiM0MztcdHUzMiBucl9mcmFncyA9IDA7XG4mIzQzO1xuJiM0MztcdGNhY2hlZF9jb25zID0gcS1cdTAwM2VjYWNoZWRfY29ucztcbiBcbi1cdC8qIHRyYWNrIGZpcnN0IGVudHJ5LCBpZiBzdHVtYmxlIHVwb24gKmFueSogaW52YWxpZCBkZXNjcmlwdG9yLCByZXdpbmRcbi1cdCAqIGN1cnJlbnQgcGFja2V0IHRoYXQgY29uc2lzdHMgb2YgZnJhZ3MgYW5kIHN0b3AgdGhlIHByb2Nlc3Npbmdcbi1cdCAqL1xuIFx0d2hpbGUgKGNhY2hlZF9jb25zICE9IHEtXHUwMDNlY2FjaGVkX3Byb2QgXHUwMDI2XHUwMDI2IG5iX2VudHJpZXMgXHUwMDNjIG1heCkge1xuIFx0XHRzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqcmluZyA9IChzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqKXEtXHUwMDNlcmluZztcbiBcdFx0dTMyIGlkeCA9IGNhY2hlZF9jb25zIFx1MDAyNiBxLVx1MDAzZXJpbmdfbWFzaztcbkBAIC0yODIsMjYgJiM0MzsyOTUsNDkgQEAgdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4gXHRcdGRlc2NzW25iX2VudHJpZXNdID0gcmluZy1cdTAwM2VkZXNjW2lkeF07XG4gXHRcdGNhY2hlZF9jb25zJiM0MzsmIzQzOztcbiBcdFx0cGFyc2VfZGVzYyhxLCBwb29sLCBcdTAwMjZkZXNjc1tuYl9lbnRyaWVzXSwgXHUwMDI2cGFyc2VkKTtcbi1cdFx0aWYgKHVubGlrZWx5KCFwYXJzZWQudmFsaWQpKVxuLVx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KCFwYXJzZWQudmFsaWQpKSB7XG4mIzQzO1x0XHRcdGlmICghZHJhaW4gXHUwMDI2XHUwMDI2ICFucl9mcmFncyBcdTAwMjZcdTAwMjYgIXBhcnNlZC5tYilcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRcdGRyYWluID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRucl9mcmFncyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRuYl9lbnRyaWVzJiM0MzsmIzQzOztcbiBcbiBcdFx0aWYgKGxpa2VseSghcGFyc2VkLm1iKSkge1xuLVx0XHRcdHRvdGFsX2Rlc2NzICYjNDM7PSAobnJfZnJhZ3MgJiM0MzsgMSk7XG4tXHRcdFx0bnJfZnJhZ3MgPSAwO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdG5yX2ZyYWdzJiM0MzsmIzQzOztcbi1cdFx0XHRpZiAobnJfZnJhZ3MgPT0gcG9vbC1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpIHtcbiYjNDM7XHRcdFx0aWYgKHVubGlrZWx5KGRyYWluKSkge1xuJiM0MztcdFx0XHRcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcbiYjNDM7XHRcdFx0XHRXUklURV9PTkNFKHhzLVx1MDAzZWRyYWluX2NvbnQsIGZhbHNlKTtcbiBcdFx0XHRcdG5yX2ZyYWdzID0gMDtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGJhdGNoLnR4X2Rlc2NzICYjNDM7PSBucl9mcmFncztcbiYjNDM7XHRcdFx0bnJfZnJhZ3MgPSAwO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobnJfZnJhZ3MgPT0gcG9vbC1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpXG4mIzQzO1x0XHRcdGRyYWluID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChucl9mcmFncykge1xuJiM0MztcdFx0aWYgKGRyYWluKSB7XG4mIzQzO1x0XHRcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcbiYjNDM7XHRcdFx0V1JJVEVfT05DRSh4cy1cdTAwM2VkcmFpbl9jb250LCB0cnVlKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGlmIChuYl9lbnRyaWVzID09IG1heClcbiYjNDM7XHRcdFx0XHRiYXRjaC5idWRnZXRfbGltaXRlZCA9IHRydWU7XG4mIzQzO1x0XHRcdGNhY2hlZF9jb25zIC09IG5yX2ZyYWdzO1xuIFx0XHR9XG4tXHRcdG5iX2VudHJpZXMmIzQzOyYjNDM7O1xuIFx0fVxuIFxuLVx0Y2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7XG4mIzQzO1x0cmVsZWFzZWQgPSBjYWNoZWRfY29ucyAtIHEtXHUwMDNlY2FjaGVkX2NvbnM7XG4gXHQvKiBSZWxlYXNlIHZhbGlkIHBsdXMgYW55IGludmFsaWQgZW50cmllcyAqL1xuLVx0eHNrcV9jb25zX3JlbGVhc2VfbihxLCBjYWNoZWRfY29ucyAtIHEtXHUwMDNlY2FjaGVkX2NvbnMpO1xuLVx0cmV0dXJuIHRvdGFsX2Rlc2NzO1xuJiM0MztcdHhza3FfY29uc19yZWxlYXNlX24ocSwgcmVsZWFzZWQpO1xuJiM0MztcdGJhdGNoLmNvbnN1bWVkX2Rlc2NzID0gcmVsZWFzZWQ7XG4mIzQzO1x0cmV0dXJuIGJhdGNoO1xuIH1cbiBcbiAvKiBGdW5jdGlvbnMgZm9yIGNvbnN1bWVycyAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXG5pbmRleCA2ZWI5MDk2ZDA4NGMwMS4uN2FiYjQ5MzVlZGY5YWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXG5AQCAtNDI3LDE0ICYjNDM7NDI3LDE0IEBAIHN0YXRpYyB1MzIgcGt0X25iX2ZyYWdzKHUzMiBmcmFtZV9zaXplLCBzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbSwgc3RydWN0IHBrXG4gXHR9XG4gXG4gXHQvKiBTZWFyY2ggZm9yIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBpbiB2ZXJiYXRpbSBtb2RlICovXG4tXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4mIzQzO1x0aWYgKCFwa3RfY29udGludWVzKHBrdC1cdTAwM2VvcHRpb25zKSlcbiBcdFx0cmV0dXJuIG5iX2ZyYWdzO1xuIFxuIFx0bmV4dF9mcmFnID0gcGt0X3N0cmVhbS1cdTAwM2VjdXJyZW50X3BrdF9uYjtcbiBcdHBrdCYjNDM7JiM0Mzs7XG4gXHR3aGlsZSAobmV4dF9mcmFnJiM0MzsmIzQzOyBcdTAwM2MgcGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzKSB7XG4gXHRcdG5iX2ZyYWdzJiM0MzsmIzQzOztcbi1cdFx0aWYgKCFwa3RfY29udGludWVzKHBrdC1cdTAwM2VvcHRpb25zKSB8fCAhcGt0LVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0aWYgKCFwa3RfY29udGludWVzKHBrdC1cdTAwM2VvcHRpb25zKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0cGt0JiM0MzsmIzQzOztcbiBcdH1cbkBAIC02NjUsMTEgJiM0Mzs2NjUsMTEgQEAgc3RhdGljIHN0cnVjdCBwa3Rfc3RyZWFtICpfX3BrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHNcbiBcdFx0XHRpZiAoIWZyYW1lLVx1MDAzZXZhbGlkIHx8ICFwa3RfY29udGludWVzKGZyYW1lLVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRcdFx0cGF5bG9hZCYjNDM7JiM0Mzs7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0aWYgKGZyYW1lLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0XHRpZiAoZnJhbWUtXHUwMDNldmFsaWQpIHtcbiBcdFx0XHRcdGxlbiAmIzQzOz0gZnJhbWUtXHUwMDNlbGVuO1xuLVx0XHRcdGlmIChmcmFtZS1cdTAwM2V2YWxpZCBcdTAwMjZcdTAwMjYgcGt0X2NvbnRpbnVlcyhmcmFtZS1cdTAwM2VvcHRpb25zKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuJiM0MztcdFx0XHRcdGlmIChwa3RfY29udGludWVzKGZyYW1lLVx1MDAzZW9wdGlvbnMpKVxuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRwa3QtXHUwMDNlcGt0X25iID0gcGt0X25iO1xuIFx0XHRcdHBrdC1cdTAwM2VsZW4gPSBsZW47XG4gXHRcdFx0cGt0LVx1MDAzZXZhbGlkID0gZnJhbWUtXHUwMDNldmFsaWQ7XG5AQCAtMTIwOSw2ICYjNDM7MTIwOSw3IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgeHNrLVx1MDAzZWJhdGNoX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHN0cnVjdCBwa3QgKnBrdCA9IHBrdF9zdHJlYW1fZ2V0X25leHRfdHhfcGt0KHBrdF9zdHJlYW0pO1xuIFx0XHR1MzIgbmJfZnJhZ3NfbGVmdCwgbmJfZnJhZ3MsIGJ5dGVzX3dyaXR0ZW4gPSAwO1xuJiM0MztcdFx0c3RydWN0IHBrdCAqZmlyc3RfcGt0ID0gcGt0O1xuIFxuIFx0XHRpZiAoIXBrdClcbiBcdFx0XHRicmVhaztcbkBAIC0xMjUzLDYgJiM0MzsxMjU0LDggQEAgc3RhdGljIGludCBfX3NlbmRfcGt0cyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssXG4gXHRcdGlmIChwa3QgXHUwMDI2XHUwMDI2IHBrdC1cdTAwM2V2YWxpZCkge1xuIFx0XHRcdHZhbGlkX3BrdHMmIzQzOyYjNDM7O1xuIFx0XHRcdHZhbGlkX2ZyYWdzICYjNDM7PSBuYl9mcmFncztcbiYjNDM7XHRcdH0gZWxzZSBpZiAocGt0X3N0cmVhbS1cdTAwM2V2ZXJiYXRpbSBcdTAwMjZcdTAwMjYgcGt0X2NvbnRpbnVlcyhmaXJzdF9wa3QtXHUwMDNlb3B0aW9ucykpIHtcbiYjNDM7XHRcdFx0dmFsaWRfZnJhZ3MgJiM0Mzs9IG5iX2ZyYWdzO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMjA5OSwxMyAmIzQzOzIxMDIsMTYgQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRcdHswLCAwLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgYWRkcmVzcyBpbiB0aGUgc2Vjb25kIGZyYW1lICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuLVx0XHR7dW1lbV9zeiwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbiYjNDM7XHRcdHt1bWVtX3N6ICogMiwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbiYjNDM7XHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogSW52YWxpZCBsZW4gaW4gdGhlIG1pZGRsZSAqL1xuIFx0XHR7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbiBcdFx0ezAsIFhTS19VTUVNX19JTlZBTElEX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbiYjNDM7XHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogSW52YWxpZCBvcHRpb25zIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhTS19ERVNDX19JTlZBTElEX09QVElPTn0sXG4mIzQzO1x0XHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIFRyYW5zbWl0IDIgZnJhZ3MsIHJlY2VpdmUgMyAqL1xuIFx0XHR7MCwgWFNLX1VNRU1fX01BWF9GUkFNRV9TSVpFLCAwLCB0cnVlLCBYRFBfUEtUX0NPTlREfSxcbiBcdFx0ezAsIFhTS19VTUVNX19NQVhfRlJBTUVfU0laRSwgMCwgdHJ1ZSwgMH0sXG5AQCAtMjExNyw4ICYjNDM7MjEyMyw4IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFxuIFx0aWYgKHVtZW0tXHUwMDNldW5hbGlnbmVkX21vZGUpIHtcbiBcdFx0LyogQ3Jvc3NpbmcgYSBjaHVuayBib3VuZGFyeSBhbGxvd2VkICovXG4tXHRcdHBrdHNbMTJdLnZhbGlkID0gdHJ1ZTtcbi1cdFx0cGt0c1sxM10udmFsaWQgPSB0cnVlO1xuJiM0MztcdFx0cGt0c1sxNV0udmFsaWQgPSB0cnVlO1xuJiM0MztcdFx0cGt0c1sxNl0udmFsaWQgPSB0cnVlO1xuIFx0fVxuIFxuIFx0dGVzdC1cdTAwM2VtdHUgPSBNQVhfRVRIX0pVTUJPX1NJWkU7XG5AQCAtMjI3MCw3ICYjNDM7MjI3Niw3IEBAIGludCB0ZXN0YXBwX3Rvb19tYW55X2ZyYWdzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRcdG1heF9mcmFncyAmIzQzOz0gMTtcbiBcdH1cbiBcbi1cdHBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyAmIzQzOyAyLCBzaXplb2Yoc3RydWN0IHBrdCkpO1xuJiM0MztcdHBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyAmIzQzOyAzLCBzaXplb2Yoc3RydWN0IHBrdCkpO1xuIFx0aWYgKCFwa3RzKVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuQEAgLTIyODgsMjQgJiM0MzsyMjk0LDMwIEBAIGludCB0ZXN0YXBwX3Rvb19tYW55X2ZyYWdzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHR9XG4gXHRwa3RzW21heF9mcmFnc10ub3B0aW9ucyA9IDA7XG4gXG4tXHQvKiBBbiBpbnZhbGlkIHBhY2tldCB3aXRoIHRoZSBtYXggYW1vdW50IG9mIGZyYWdzIGJ1dCBzaWduYWxzIHBhY2tldFxuLVx0ICogY29udGludWVzIG9uIHRoZSBsYXN0IGZyYWdcbi1cdCAqL1xuLVx0Zm9yIChpID0gbWF4X2ZyYWdzICYjNDM7IDE7IGkgXHUwMDNjIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHQvKiBBbiBpbnZhbGlkIHBhY2tldCB3aXRoIHRoZSBtYXggJiM0MzsgMSBhbW91bnQgb2YgZnJhZ3MgKi9cbiYjNDM7XHRmb3IgKGkgPSBtYXhfZnJhZ3MgJiM0MzsgMTsgaSBcdTAwM2MgMiAqIG1heF9mcmFncyAmIzQzOyAyOyBpJiM0MzsmIzQzOykge1xuIFx0XHRwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTtcbiBcdFx0cGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDtcbi1cdFx0cGt0c1tpXS52YWxpZCA9IGZhbHNlO1xuJiM0MztcdFx0cGt0c1tpXS52YWxpZCA9IHRydWU7XG4gXHR9XG4mIzQzO1x0cGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDFdLm9wdGlvbnMgPSAwO1xuIFxuIFx0LyogVmFsaWQgcGFja2V0IGZvciBzeW5jaCAqL1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDFdLmxlbiA9IE1JTl9QS1RfU0laRTtcbi1cdHBrdHNbMiAqIG1heF9mcmFncyAmIzQzOyAxXS52YWxpZCA9IHRydWU7XG4mIzQzO1x0cGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDJdLmxlbiA9IE1JTl9QS1RfU0laRTtcbiYjNDM7XHRwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0udmFsaWQgPSB0cnVlO1xuIFxuLVx0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMikpIHtcbiYjNDM7XHRpZiAocGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20odGVzdCwgcGt0cywgMiAqIG1heF9mcmFncyAmIzQzOyAzKSkge1xuIFx0XHRmcmVlKHBrdHMpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuJiM0MztcdC8qIFRoZSBnZW5lcmF0ZWQgVHggc3RyZWFtIG11c3Qga2VlcCB0aGUgdG9vLWJpZyBwYWNrZXQgdmFsaWQgc28gdGhhdFxuJiM0MztcdCAqIF9fc2VuZF9wa3RzKCkgYWNjb3VudHMgaXRzIGRlc2NyaXB0b3JzIGluIG91dHN0YW5kaW5nX3R4LiBUaGUgUnhcbiYjNDM7XHQgKiBzdHJlYW0sIGhvd2V2ZXIsIG11c3Qgbm90IGV4cGVjdCB0aGlzIHBhY2tldCBvbiB0aGUgd2lyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2Vwa3Rfc3RyZWFtLVx1MDAzZXBrdHNbMl0udmFsaWQgPSBmYWxzZTtcbiYjNDM7XHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2Vwa3Rfc3RyZWFtLVx1MDAzZW5iX3ZhbGlkX2VudHJpZXMtLTtcbiYjNDM7XG4gXHRyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7XG4gXHRmcmVlKHBrdHMpO1xuIFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza190eF9jb21wbGV0ZWQmIzM0OywKICAgICYjMzQ7eHNrX3R4X2NvbW1pdF9iYXRjaCYjMzQ7LAogICAgJiMzNDtfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCYjMzQ7LAogICAgJiMzNDt4c2tfZHJvcF9za2ImIzM0OywKICAgICYjMzQ7eHNrX2J1aWxkX3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiJiMzNDssCiAgICAmIzM0O19feHNrX2dlbmVyaWNfeG1pdCYjMzQ7LAogICAgJiMzNDt4cF9hbGxvY190eF9kZXNjcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZfWERQIG11bHRpLWJ1ZmZlciAoU0cpIHBhY2tldCB0cmFuc21pc3Npb24gbG9naWMsIGludHJvZHVjaW5nIGJhdGNoaW5nIGFuZCByZWNsYWltIGRlc2NyaXB0b3JzIHRvIGhhbmRsZSBpbnZhbGlkIGRlc2NyaXB0b3JzIGFuZCBib3VuZGFyaWVzIGNvcnJlY3RseS4gSXQgbW9kaWZpZXMgY29yZSBYRFAgc29ja2V0IGNvZGUgaW4gbmV0L3hkcC94c2suYyBhbmQgbmV0L3hkcC94c2tfcXVldWUuaC4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMzMGQ0ZjdlYmMxYWVmNzk2NmFiMzllZWQ5ZmRhNGE3NTk5MDhmZTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxMSAxNzozMzo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmggYi9pbmNsdWRlL25ldC94ZHBfc29jay5oCmluZGV4IGViYWM2MGEzZDhhMTdiLi44YjUxODc2ZWZiZWQxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC94ZHBfc29jay5oCkBAIC04MCw2ICYjNDM7ODAsNyBAQCBzdHJ1Y3QgeGRwX3NvY2sgewogCSAqIGNhbGwgb2YgX194c2tfZ2VuZXJpY194bWl0KCkuCiAJICovCiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJYm9vbCBkcmFpbl9jb250OwogCiAJc3RydWN0IGxpc3RfaGVhZCBtYXBfbGlzdDsKIAkvKiBQcm90ZWN0cyBtYXBfbGlzdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oIGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oCmluZGV4IGNjYjNiMzUwMDAxZjI0Li5mYjU5ZTIwNWFjN2Q3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaApAQCAtNzgsNiAmIzQzOzc4LDkgQEAgc3RydWN0IHhza19idWZmX3Bvb2wgewogCXUzMiBjaHVua19zaXplOwogCXUzMiBjaHVua19zaGlmdDsKIAl1MzIgZnJhbWVfbGVuOwomIzQzOwl1MzIgdHhfZGVzY3NfbmVudHJpZXM7CiYjNDM7CXUzMiByZWNsYWltX2Rlc2NzOwomIzQzOwl1MzIgdHhfemNfcGVuZGluZ19kZXNjczsKIAl1MzIgeGRwX3pjX21heF9zZWdzOwogCXU4IHR4X21ldGFkYXRhX2xlbjsgLyogaW5oZXJpdGVkIGZyb20gdW1lbSAqLwogCXU4IGNhY2hlZF9uZWVkX3dha2V1cDsKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jCmluZGV4IGI5NzBmMzBlYTliOWQ4Li43ZDhiNDJjNGMyMTRiYSAxMDA2NDQKLS0tIGEvbmV0L3hkcC94c2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hzay5jCkBAIC00OTksNiAmIzQzOzQ5OSwyMyBAQCB2b2lkIF9feHNrX21hcF9mbHVzaChzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0KQogCiB2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKQogewomIzQzOwl1MzIgcmVjbGFpbV9kZXNjcyA9IFJFQURfT05DRShwb29sLSZndDtyZWNsYWltX2Rlc2NzKTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KHJlY2xhaW1fZGVzY3MpKSB7CiYjNDM7CQl1MzIgcGVuZGluZ19kZXNjcyA9IFJFQURfT05DRShwb29sLSZndDt0eF96Y19wZW5kaW5nX2Rlc2NzKTsKJiM0MzsKJiM0MzsJCWlmIChuYl9lbnRyaWVzICZsdDsgcGVuZGluZ19kZXNjcykgewomIzQzOwkJCVdSSVRFX09OQ0UocG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcywKJiM0MzsJCQkJICAgcGVuZGluZ19kZXNjcyAtIG5iX2VudHJpZXMpOwomIzQzOwkJCXhza3FfcHJvZF9zdWJtaXRfbihwb29sLSZndDtjcSwgbmJfZW50cmllcyk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwomIzQzOwkJV1JJVEVfT05DRShwb29sLSZndDt0eF96Y19wZW5kaW5nX2Rlc2NzLCAwKTsKJiM0MzsJCW5iX2VudHJpZXMgJiM0Mzs9IHJlY2xhaW1fZGVzY3M7CiYjNDM7CQlXUklURV9PTkNFKHBvb2wtJmd0O3JlY2xhaW1fZGVzY3MsIDApOwomIzQzOwl9CiYjNDM7CiAJeHNrcV9wcm9kX3N1Ym1pdF9uKHBvb2wtJmd0O2NxLCBuYl9lbnRyaWVzKTsKIH0KIEVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7CkBAIC01NzQsMjIgJiM0Mzs1OTEsMTY5IEBAIHN0YXRpYyB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9lbnRyCiAJcmV0dXJuIG5iX3BrdHM7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB4c2tfdHhfY29tbWl0X2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLAomIzQzOwkJCQlzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaCwKJiM0MzsJCQkJdTMyIGNxX2NhY2hlZF9wcm9kKQomIzQzO3sKJiM0MzsJdTMyIG5iX2Rlc2NzID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGJhdGNoKTsKJiM0MzsKJiM0MzsJaWYgKCFuYl9kZXNjcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJeHNrcV9wcm9kX3dyaXRlX2FkZHJfYmF0Y2gocG9vbC0mZ3Q7Y3EsIHBvb2wtJmd0O3R4X2Rlc2NzLCBuYl9kZXNjcyk7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShiYXRjaC0mZ3Q7cmVjbGFpbV9kZXNjcykpIHsKJiM0MzsJCXUzMiBjcV9wZW5kaW5nX2Rlc2NzOwomIzQzOwomIzQzOwkJLyogQ1EgaXMgcG9zaXRpb25hbC4gRGVzY3JpcHRvcnMgYWxyZWFkeSB3cml0dGVuIGJ1dCBub3QKJiM0MzsJCSAqIHN1Ym1pdHRlZCBtdXN0IGNvbXBsZXRlIGJlZm9yZSBhbnkgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzCiYjNDM7CQkgKiBhcHBlbmRlZCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJY3FfcGVuZGluZ19kZXNjcyA9IGNxX2NhY2hlZF9wcm9kIC0geHNrcV9nZXRfcHJvZChwb29sLSZndDtjcSk7CiYjNDM7CiYjNDM7CQlXUklURV9PTkNFKHBvb2wtJmd0O3R4X3pjX3BlbmRpbmdfZGVzY3MsIGJhdGNoLSZndDt0eF9kZXNjcyAmIzQzOyBjcV9wZW5kaW5nX2Rlc2NzKTsKJiM0MzsJCVdSSVRFX09OQ0UocG9vbC0mZ3Q7cmVjbGFpbV9kZXNjcywgYmF0Y2gtJmd0O3JlY2xhaW1fZGVzY3MpOwomIzQzOwkJaWYgKHVubGlrZWx5KCFwb29sLSZndDt0eF96Y19wZW5kaW5nX2Rlc2NzKSkKJiM0MzsJCQl4c2tfdHhfY29tcGxldGVkKHBvb2wsIDApOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoCiYjNDM7X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsCiYjNDM7CQkJCSBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKQomIzQzO3sKJiM0MzsJc3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9OwomIzQzOwl1MzIgZW50cmllczsKJiM0MzsKJiM0MzsJZW50cmllcyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLSZndDt0eCwgbWF4X2Rlc2NzKTsKJiM0MzsJaWYgKCFlbnRyaWVzKQomIzQzOwkJcmV0dXJuIGJhdGNoOwomIzQzOwomIzQzOwliYXRjaCA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMsIHBvb2wsIGRlc2NzLCBlbnRyaWVzKTsKJiM0MzsJaWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoJmFtcDtiYXRjaCkpIHsKJiM0MzsJCXhzLSZndDt0eC0mZ3Q7cXVldWVfZW1wdHlfZGVzY3MmIzQzOyYjNDM7OwomIzQzOwkJaWYgKGJhdGNoLmNvbnN1bWVkX2Rlc2NzKSB7CiYjNDM7CQkJX194c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwomIzQzOwkJCXhzLSZndDtzay5za193cml0ZV9zcGFjZSgmYW1wO3hzLSZndDtzayk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gYmF0Y2g7CiYjNDM7CX0KJiM0MzsKJiM0MzsJX194c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwomIzQzOwl4cy0mZ3Q7c2suc2tfd3JpdGVfc3BhY2UoJmFtcDt4cy0mZ3Q7c2spOwomIzQzOwlyZXR1cm4gYmF0Y2g7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoCiYjNDM7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9kZXNjcykKJiM0Mzt7CiYjNDM7CXUzMiBjcV9kZXNjc19iZWZvcmUsIGNxX2Rlc2NzX2FmdGVyOwomIzQzOwlzdHJ1Y3QgeHNrX3R4X2JhdGNoIHN1bV9iYXRjaCA9IHt9OwomIzQzOwlib29sIGJ1ZGdldF9leGhhdXN0ZWQ7CiYjNDM7CXUzMiBwZXJfc29ja2V0X2J1ZGdldDsKJiM0MzsJc3RydWN0IHhkcF9zb2NrICp4czsKJiM0MzsKJiM0MzsJbWF4X2Rlc2NzID0geHNrcV9wcm9kX25iX2ZyZWUocG9vbC0mZ3Q7Y3EsIG1heF9kZXNjcyk7CiYjNDM7CWlmICghbWF4X2Rlc2NzKQomIzQzOwkJcmV0dXJuIHN1bV9iYXRjaDsKJiM0MzsKJiM0MzsJLyogVGhlIGZhaXJuZXNzIHF1b3RhIG11c3QgYWxsb3cgb25lIG1heGltdW0tc2l6ZWQgdmFsaWQgcGFja2V0LiAqLwomIzQzOwlwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULAomIzQzOwkJCQkgIHBvb2wtJmd0O3hkcF96Y19tYXhfc2Vncyk7CiYjNDM7CiYjNDM7YWdhaW46CiYjNDM7CWJ1ZGdldF9leGhhdXN0ZWQgPSBmYWxzZTsKJiM0MzsJY3FfZGVzY3NfYmVmb3JlID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKCZhbXA7c3VtX2JhdGNoKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsICZhbXA7cG9vbC0mZ3Q7eHNrX3R4X2xpc3QsIHR4X2xpc3QpIHsKJiM0MzsJCXUzMiBidWRnZXQsIGJ1ZGdldF9sZWZ0LCBvZmZzZXQsIHJlbWFpbmluZzsKJiM0MzsJCXN0cnVjdCB4c2tfdHhfYmF0Y2ggY3Vycl9iYXRjaDsKJiM0MzsKJiM0MzsJCS8qIE9uY2UgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBhcHBlbmRlZCB0byB0aGUgQ1EgYWRkcmVzcwomIzQzOwkJICogYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9ycyBmcm9tIGFub3RoZXIKJiM0MzsJCSAqIHNvY2tldCBhZnRlciB0aGVtLiB4c2tfdHhfY29tcGxldGVkKCkgcmVsaWVzIG9uIGFsbCBkcml2ZXItdmlzaWJsZQomIzQzOwkJICogZGVzY3JpcHRvcnMgcHJlY2VkaW5nIGFsbCByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnMgaW4gQ1Egb3JkZXIuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChzdW1fYmF0Y2gucmVjbGFpbV9kZXNjcykKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLSZndDt0eF9kZXNjcyAqLwomIzQzOwkJb2Zmc2V0ID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKCZhbXA7c3VtX2JhdGNoKTsKJiM0MzsJCWlmIChvZmZzZXQgJmd0Oz0gbWF4X2Rlc2NzKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJaWYgKHhzLSZndDt0eF9idWRnZXRfc3BlbnQgJmd0Oz0gcGVyX3NvY2tldF9idWRnZXQpIHsKJiM0MzsJCQlpZiAoeHNrcV9jb25zX25iX2VudHJpZXMoeHMtJmd0O3R4LCAxKSkKJiM0MzsJCQkJYnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlidWRnZXRfbGVmdCA9IHBlcl9zb2NrZXRfYnVkZ2V0IC0geHMtJmd0O3R4X2J1ZGdldF9zcGVudDsKJiM0MzsJCXJlbWFpbmluZyA9IG1heF9kZXNjcyAtIG9mZnNldDsKJiM0MzsJCWJ1ZGdldCA9IG1pbihyZW1haW5pbmcsIGJ1ZGdldF9sZWZ0KTsKJiM0MzsKJiM0MzsJCWN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cywKJiM0MzsJCQkJCQkJICAgICAgcG9vbC0mZ3Q7dHhfZGVzY3MgJiM0Mzsgb2Zmc2V0LAomIzQzOwkJCQkJCQkgICAgICBidWRnZXQpOwomIzQzOwkJaWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoJmFtcDtjdXJyX2JhdGNoKSkgewomIzQzOwkJCWlmIChjdXJyX2JhdGNoLmJ1ZGdldF9saW1pdGVkICZhbXA7JmFtcDsgYnVkZ2V0X2xlZnQgJmx0OyByZW1haW5pbmcpCiYjNDM7CQkJCWJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlOwomIzQzOwkJCXhzLSZndDt0eF9idWRnZXRfc3BlbnQgJiM0Mzs9IGN1cnJfYmF0Y2guY29uc3VtZWRfZGVzY3M7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQl4cy0mZ3Q7dHhfYnVkZ2V0X3NwZW50ICYjNDM7PSBjdXJyX2JhdGNoLmNvbnN1bWVkX2Rlc2NzOwomIzQzOwkJc3VtX2JhdGNoLnR4X2Rlc2NzICYjNDM7PSBjdXJyX2JhdGNoLnR4X2Rlc2NzOwomIzQzOwkJc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgJiM0Mzs9IGN1cnJfYmF0Y2gucmVjbGFpbV9kZXNjczsKJiM0MzsJfQomIzQzOwomIzQzOwljcV9kZXNjc19hZnRlciA9IHhza190eF9iYXRjaF9jcV9kZXNjcygmYW1wO3N1bV9iYXRjaCk7CiYjNDM7CiYjNDM7CWlmIChzdW1fYmF0Y2gucmVjbGFpbV9kZXNjcyB8fCBjcV9kZXNjc19hZnRlciAmZ3Q7PSBtYXhfZGVzY3MpCiYjNDM7CQlyZXR1cm4gc3VtX2JhdGNoOwomIzQzOwomIzQzOwkvKiBDb250aW51ZSBmaWxsaW5nIHRoZSBiYXRjaCB3aGlsZSB0aGlzIHBhc3MgbWFkZSBwcm9ncmVzcyAqLwomIzQzOwlpZiAoY3FfZGVzY3NfYmVmb3JlICE9IGNxX2Rlc2NzX2FmdGVyKQomIzQzOwkJZ290byBhZ2FpbjsKJiM0MzsKJiM0MzsJaWYgKCFidWRnZXRfZXhoYXVzdGVkKQomIzQzOwkJcmV0dXJuIHN1bV9iYXRjaDsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsICZhbXA7cG9vbC0mZ3Q7eHNrX3R4X2xpc3QsIHR4X2xpc3QpCiYjNDM7CQl4cy0mZ3Q7dHhfYnVkZ2V0X3NwZW50ID0gMDsKJiM0MzsJZ290byBhZ2FpbjsKJiM0Mzt9CiYjNDM7CiB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cykKIHsKJiM0MzsJc3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9OwogCXN0cnVjdCB4ZHBfc29jayAqeHM7CiYjNDM7CXUzMiBjcV9jYWNoZWRfcHJvZDsKIAogCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRShwb29sLSZndDtyZWNsYWltX2Rlc2NzKSkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJbmJfcGt0cyA9IG1pbihuYl9wa3RzLCBwb29sLSZndDt0eF9kZXNjc19uZW50cmllcyk7CiYjNDM7CWlmICghbmJfcGt0cykKJiM0MzsJCWdvdG8gb3V0OwogCWlmICghbGlzdF9pc19zaW5ndWxhcigmYW1wO3Bvb2wtJmd0O3hza190eF9saXN0KSkgewotCQkvKiBGYWxsYmFjayB0byB0aGUgbm9uLWJhdGNoZWQgdmVyc2lvbiAqLwomIzQzOwkJLyogS2VlcCB0aGUgbGVnYWN5IG9uZS1kZXNjcmlwdG9yIGZhbGxiYWNrIGZvciBub24tU0cgdXNlcnMuICBUaGUKJiM0MzsJCSAqIHNoYXJlZCBTRyBwYXRoIG5lZWRzIHBhY2tldC1mcmFtZWQgcGFyc2luZyBzbyBpbnZhbGlkL292ZXJmbG93ZWQKJiM0MzsJCSAqIG11bHRpLWJ1ZmZlciBwYWNrZXRzIGFyZSBkcmFpbmVkIGFzIGEgdW5pdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHBvb2wtJmd0O3VtZW0tJmd0O2ZsYWdzICZhbXA7IFhEUF9VTUVNX1NHX0ZMQUcpIHsKJiM0MzsJCQliYXRjaCA9IHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gocG9vbCwgbmJfcGt0cyk7CiYjNDM7CQkJY3FfY2FjaGVkX3Byb2QgPSBwb29sLSZndDtjcS0mZ3Q7Y2FjaGVkX3Byb2Q7CiYjNDM7CQkJeHNrX3R4X2NvbW1pdF9iYXRjaChwb29sLCAmYW1wO2JhdGNoLCBjcV9jYWNoZWRfcHJvZCk7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTsKIAl9CiAKIAl4cyA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoJmFtcDtwb29sLSZndDt4c2tfdHhfbGlzdCwgc3RydWN0IHhkcF9zb2NrLCB0eF9saXN0KTsKLQlpZiAoIXhzKSB7Ci0JCW5iX3BrdHMgPSAwOwomIzQzOwlpZiAoIXhzKQogCQlnb3RvIG91dDsKLQl9CiAKIAluYl9wa3RzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtJmd0O3R4LCBuYl9wa3RzKTsKIApAQCAtNjAzLDE5ICYjNDM7NzY3LDE4IEBAIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKQogCWlmICghbmJfcGt0cykKIAkJZ290byBvdXQ7CiAKLQluYl9wa3RzID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cy0mZ3Q7dHgsIHBvb2wsIG5iX3BrdHMpOwotCWlmICghbmJfcGt0cykgewotCQl4cy0mZ3Q7dHgtJmd0O3F1ZXVlX2VtcHR5X2Rlc2NzJiM0MzsmIzQzOzsKJiM0MzsJYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cywgcG9vbC0mZ3Q7dHhfZGVzY3MsCiYjNDM7CQkJCQkJIG5iX3BrdHMpOwomIzQzOwluYl9wa3RzID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKCZhbXA7YmF0Y2gpOwomIzQzOwlpZiAoIW5iX3BrdHMpCiAJCWdvdG8gb3V0OwotCX0KIAotCV9feHNrcV9jb25zX3JlbGVhc2UoeHMtJmd0O3R4KTsKLQl4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLSZndDtjcSwgcG9vbC0mZ3Q7dHhfZGVzY3MsIG5iX3BrdHMpOwotCXhzLSZndDtzay5za193cml0ZV9zcGFjZSgmYW1wO3hzLSZndDtzayk7CiYjNDM7CWNxX2NhY2hlZF9wcm9kID0gcG9vbC0mZ3Q7Y3EtJmd0O2NhY2hlZF9wcm9kOwomIzQzOwl4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsICZhbXA7YmF0Y2gsIGNxX2NhY2hlZF9wcm9kKTsKIAogb3V0OgogCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiBuYl9wa3RzOwomIzQzOwlyZXR1cm4gYmF0Y2gudHhfZGVzY3M7CiB9CiBFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7CiAKQEAgLTczNyw2ICYjNDM7OTAwLDE5IEBAIHN0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3Bvb2wtJmd0O2NxX3Byb2RfbG9jaywgZmxhZ3MpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXUzMiBpZHg7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cG9vbC0mZ3Q7Y3FfcHJvZF9sb2NrLCBmbGFncyk7CiYjNDM7CWlkeCA9IHhza3FfZ2V0X3Byb2QocG9vbC0mZ3Q7Y3EpOwomIzQzOwl4c2txX3Byb2Rfd3JpdGVfYWRkcihwb29sLSZndDtjcSwgaWR4LCBkZXNjLSZndDthZGRyKTsKJiM0MzsJeHNrcV9wcm9kX3N1Ym1pdF9uKHBvb2wtJmd0O2NxLCAxKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3Bvb2wtJmd0O2NxX3Byb2RfbG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHhza19jcV9jYW5jZWxfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbikKIHsKIAlzcGluX2xvY2soJmFtcDtwb29sLSZndDtjcS0mZ3Q7Y3FfY2FjaGVkX3Byb2RfbG9jayk7CkBAIC03OTQsOCAmIzQzOzk3MCwxMSBAQCBzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogc3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JeGRwX3NrKHNrYi0mZ3Q7c2spLSZndDt0eC0mZ3Q7aW52YWxpZF9kZXNjcyAmIzQzOz0geHNrX2dldF9udW1fZGVzYyhza2IpOwotCXhza19jb25zdW1lX3NrYihza2IpOwomIzQzOwlzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi0mZ3Q7c2spOwomIzQzOwomIzQzOwl4cy0mZ3Q7dHgtJmd0O2ludmFsaWRfZGVzY3MgJiM0Mzs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTsKJiM0MzsJY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJeHMtJmd0O3NrYiA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsCkBAIC04NzcsNyAmIzQzOzEwNTYsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cywKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJCS8qIGluIGNhc2Ugb2YgLUVPVkVSRkxPVyB0aGF0IGNvdWxkIGhhcHBlbiBiZWxvdywKLQkJICogeHNrX2NvbnN1bWVfc2tiKCkgd2lsbCByZWxlYXNlIHRoaXMgbm9kZSBhcyB3aG9sZSBza2IKJiM0MzsJCSAqIHhza19kcm9wX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiCiAJCSAqIHdvdWxkIGJlIGRyb3BwZWQsIHdoaWNoIGltcGxpZXMgZnJlZWluZyBhbGwgbGlzdCBlbGVtZW50cwogCQkgKi8KIAkJeHNrX2FkZHItJmd0O2FkZHJzW3hza19hZGRyLSZndDtudW1fZGVzY3NdID0gZGVzYy0mZ3Q7YWRkcjsKQEAgLTk2OSw2ICYjNDM7MTE0OCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLAogCQkJCWdvdG8gZnJlZV9lcnI7CiAJCQl9CiAKJiM0MzsJCQl4c2tfYWRkci0mZ3Q7YWRkcnNbeHNrX2FkZHItJmd0O251bV9kZXNjc10gPSBkZXNjLSZndDthZGRyOwomIzQzOwogCQkJaWYgKHVubGlrZWx5KG5yX2ZyYWdzID09IChNQVhfU0tCX0ZSQUdTIC0gMSkgJmFtcDsmYW1wOyB4cF9tYl9kZXNjKGRlc2MpKSkgewogCQkJCWVyciA9IC1FT1ZFUkZMT1c7CiAJCQkJZ290byBmcmVlX2VycjsKQEAgLTk4Niw4ICYjNDM7MTE2Nyw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLAogCiAJCQlza2JfYWRkX3J4X2ZyYWcoc2tiLCBucl9mcmFncywgcGFnZSwgMCwgbGVuLCBQQUdFX1NJWkUpOwogCQkJcmVmY291bnRfYWRkKFBBR0VfU0laRSwgJmFtcDt4cy0mZ3Q7c2suc2tfd21lbV9hbGxvYyk7Ci0KLQkJCXhza19hZGRyLSZndDthZGRyc1t4c2tfYWRkci0mZ3Q7bnVtX2Rlc2NzXSA9IGRlc2MtJmd0O2FkZHI7CiAJCX0KIAl9CiAKQEAgLTEwNjAsMTEgJiM0MzsxMjM5LDIyIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaykKIAkJCWdvdG8gb3V0OwogCQl9CiAKJiM0MzsJCWlmICh1bmxpa2VseSh4cy0mZ3Q7ZHJhaW5fY29udCkpIHsKJiM0MzsJCQl4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy0mZ3Q7cG9vbCwgJmFtcDtkZXNjKTsKJiM0MzsKJiM0MzsJCQl4cy0mZ3Q7dHgtJmd0O2ludmFsaWRfZGVzY3MmIzQzOyYjNDM7OwomIzQzOwkJCXhza3FfY29uc19yZWxlYXNlKHhzLSZndDt0eCk7CiYjNDM7CQkJeHMtJmd0O2RyYWluX2NvbnQgPSB4cF9tYl9kZXNjKCZhbXA7ZGVzYyk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCXNrYiA9IHhza19idWlsZF9za2IoeHMsICZhbXA7ZGVzYyk7CiAJCWlmIChJU19FUlIoc2tiKSkgewogCQkJZXJyID0gUFRSX0VSUihza2IpOwogCQkJaWYgKGVyciAhPSAtRU9WRVJGTE9XKQogCQkJCWdvdG8gb3V0OwomIzQzOwkJCWlmICh4cF9tYl9kZXNjKCZhbXA7ZGVzYykpCiYjNDM7CQkJCXhzLSZndDtkcmFpbl9jb250ID0gdHJ1ZTsKIAkJCWVyciA9IDA7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTA5OCw5ICYjNDM7MTI4OCwyNCBAQCBzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spCiAJfQogCiAJaWYgKHhza3FfaGFzX2Rlc2NzKHhzLSZndDt0eCkpIHsKJiM0MzsJCWJvb2wgcmVjbGFpbV9kZXNjID0geHMtJmd0O3NrYiB8fCB4cy0mZ3Q7ZHJhaW5fY29udDsKJiM0MzsKJiM0MzsJCWlmIChyZWNsYWltX2Rlc2MpIHsKJiM0MzsJCQllcnIgPSB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoeHMtJmd0O3Bvb2wpOwomIzQzOwkJCWlmIChlcnIpIHsKJiM0MzsJCQkJZXJyID0gLUVBR0FJTjsKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwogCQlpZiAoeHMtJmd0O3NrYikKIAkJCXhza19kcm9wX3NrYih4cy0mZ3Q7c2tiKTsKJiM0MzsKJiM0MzsJCWlmIChyZWNsYWltX2Rlc2MpCiYjNDM7CQkJeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtJmd0O3Bvb2wsICZhbXA7ZGVzYyk7CiYjNDM7CiAJCXhza3FfY29uc19yZWxlYXNlKHhzLSZndDt0eCk7CiYjNDM7CQl4cy0mZ3Q7ZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoJmFtcDtkZXNjKTsKIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jIGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmMKaW5kZXggMWYyOGE5NjQxNTcxZTQuLmI4NjJhZGRjZDhmZGFmIDEwMDY0NAotLS0gYS9uZXQveGRwL3hza19idWZmX3Bvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuYwpAQCAtNDgsNiAmIzQzOzQ4LDcgQEAgaW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKQogCWlmICghcG9vbC0mZ3Q7dHhfZGVzY3MpCiAJCXJldHVybiAtRU5PTUVNOwogCiYjNDM7CXBvb2wtJmd0O3R4X2Rlc2NzX25lbnRyaWVzID0geHMtJmd0O3R4LSZndDtuZW50cmllczsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2tfcXVldWUuaCBiL25ldC94ZHAveHNrX3F1ZXVlLmgKaW5kZXggM2UzZmJiNzNkMjNlMmYuLmExNWZmMTkyOWRiNjIzIDEwMDY0NAotLS0gYS9uZXQveGRwL3hza19xdWV1ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrX3F1ZXVlLmgKQEAgLTU4LDYgJiM0Mzs1OCwxOCBAQCBzdHJ1Y3QgcGFyc2VkX2Rlc2MgewogCXUzMiB2YWxpZDsKIH07CiAKJiM0MztzdHJ1Y3QgeHNrX3R4X2JhdGNoIHsKJiM0MzsJdTMyIHR4X2Rlc2NzOwomIzQzOwl1MzIgcmVjbGFpbV9kZXNjczsKJiM0MzsJdTMyIGNvbnN1bWVkX2Rlc2NzOwomIzQzOwlib29sIGJ1ZGdldF9saW1pdGVkOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1MzIgeHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGNvbnN0IHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJhdGNoLSZndDt0eF9kZXNjcyAmIzQzOyBiYXRjaC0mZ3Q7cmVjbGFpbV9kZXNjczsKJiM0Mzt9CiYjNDM7CiAvKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBzaGFyZWQgc3RhdGUgb2YgdGhlIHJpbmdzIGFyZSBhIHNpbXBsZQogICogY2lyY3VsYXIgYnVmZmVyLCBhcyBvdXRsaW5lZCBpbgogICogRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9jaXJjdWxhci1idWZmZXJzLnJzdC4gRm9yIHRoZSBSeCBhbmQKQEAgLTI2MywxNyAmIzQzOzI3NSwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VfZGVzYyhzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKIAlwYXJzZWQtJmd0O21iID0geHBfbWJfZGVzYyhkZXNjKTsKIH0KIAotc3RhdGljIGlubGluZQotdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCi0JCQkgICAgICB1MzIgbWF4KQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhza190eF9iYXRjaAomIzQzO3hza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCiYjNDM7CQkJICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4KQogewotCXUzMiBjYWNoZWRfY29ucyA9IHEtJmd0O2NhY2hlZF9jb25zLCBuYl9lbnRyaWVzID0gMDsKLQlzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC0mZ3Q7dHhfZGVzY3M7Ci0JdTMyIHRvdGFsX2Rlc2NzID0gMCwgbnJfZnJhZ3MgPSAwOwomIzQzOwlib29sIGRyYWluID0gUkVBRF9PTkNFKHhzLSZndDtkcmFpbl9jb250KTsKJiM0MzsJdTMyIGNhY2hlZF9jb25zLCBuYl9lbnRyaWVzID0gMCwgcmVsZWFzZWQ7CiYjNDM7CXN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTsKJiM0MzsJc3RydWN0IHhza19xdWV1ZSAqcSA9IHhzLSZndDt0eDsKJiM0MzsJdTMyIG5yX2ZyYWdzID0gMDsKJiM0MzsKJiM0MzsJY2FjaGVkX2NvbnMgPSBxLSZndDtjYWNoZWRfY29uczsKIAotCS8qIHRyYWNrIGZpcnN0IGVudHJ5LCBpZiBzdHVtYmxlIHVwb24gKmFueSogaW52YWxpZCBkZXNjcmlwdG9yLCByZXdpbmQKLQkgKiBjdXJyZW50IHBhY2tldCB0aGF0IGNvbnNpc3RzIG9mIGZyYWdzIGFuZCBzdG9wIHRoZSBwcm9jZXNzaW5nCi0JICovCiAJd2hpbGUgKGNhY2hlZF9jb25zICE9IHEtJmd0O2NhY2hlZF9wcm9kICZhbXA7JmFtcDsgbmJfZW50cmllcyAmbHQ7IG1heCkgewogCQlzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqcmluZyA9IChzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqKXEtJmd0O3Jpbmc7CiAJCXUzMiBpZHggPSBjYWNoZWRfY29ucyAmYW1wOyBxLSZndDtyaW5nX21hc2s7CkBAIC0yODIsMjYgJiM0MzsyOTUsNDkgQEAgdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCiAJCWRlc2NzW25iX2VudHJpZXNdID0gcmluZy0mZ3Q7ZGVzY1tpZHhdOwogCQljYWNoZWRfY29ucyYjNDM7JiM0Mzs7CiAJCXBhcnNlX2Rlc2MocSwgcG9vbCwgJmFtcDtkZXNjc1tuYl9lbnRyaWVzXSwgJmFtcDtwYXJzZWQpOwotCQlpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpCi0JCQlicmVhazsKJiM0MzsJCWlmICh1bmxpa2VseSghcGFyc2VkLnZhbGlkKSkgewomIzQzOwkJCWlmICghZHJhaW4gJmFtcDsmYW1wOyAhbnJfZnJhZ3MgJmFtcDsmYW1wOyAhcGFyc2VkLm1iKQomIzQzOwkJCQlicmVhazsKJiM0MzsKJiM0MzsJCQlkcmFpbiA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlucl9mcmFncyYjNDM7JiM0Mzs7CiYjNDM7CQluYl9lbnRyaWVzJiM0MzsmIzQzOzsKIAogCQlpZiAobGlrZWx5KCFwYXJzZWQubWIpKSB7Ci0JCQl0b3RhbF9kZXNjcyAmIzQzOz0gKG5yX2ZyYWdzICYjNDM7IDEpOwotCQkJbnJfZnJhZ3MgPSAwOwotCQl9IGVsc2UgewotCQkJbnJfZnJhZ3MmIzQzOyYjNDM7OwotCQkJaWYgKG5yX2ZyYWdzID09IHBvb2wtJmd0O3hkcF96Y19tYXhfc2VncykgewomIzQzOwkJCWlmICh1bmxpa2VseShkcmFpbikpIHsKJiM0MzsJCQkJYmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzOwomIzQzOwkJCQlXUklURV9PTkNFKHhzLSZndDtkcmFpbl9jb250LCBmYWxzZSk7CiAJCQkJbnJfZnJhZ3MgPSAwOwogCQkJCWJyZWFrOwogCQkJfQomIzQzOwomIzQzOwkJCWJhdGNoLnR4X2Rlc2NzICYjNDM7PSBucl9mcmFnczsKJiM0MzsJCQlucl9mcmFncyA9IDA7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobnJfZnJhZ3MgPT0gcG9vbC0mZ3Q7eGRwX3pjX21heF9zZWdzKQomIzQzOwkJCWRyYWluID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnJfZnJhZ3MpIHsKJiM0MzsJCWlmIChkcmFpbikgewomIzQzOwkJCWJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFnczsKJiM0MzsJCQlXUklURV9PTkNFKHhzLSZndDtkcmFpbl9jb250LCB0cnVlKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWYgKG5iX2VudHJpZXMgPT0gbWF4KQomIzQzOwkJCQliYXRjaC5idWRnZXRfbGltaXRlZCA9IHRydWU7CiYjNDM7CQkJY2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7CiAJCX0KLQkJbmJfZW50cmllcyYjNDM7JiM0Mzs7CiAJfQogCi0JY2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7CiYjNDM7CXJlbGVhc2VkID0gY2FjaGVkX2NvbnMgLSBxLSZndDtjYWNoZWRfY29uczsKIAkvKiBSZWxlYXNlIHZhbGlkIHBsdXMgYW55IGludmFsaWQgZW50cmllcyAqLwotCXhza3FfY29uc19yZWxlYXNlX24ocSwgY2FjaGVkX2NvbnMgLSBxLSZndDtjYWNoZWRfY29ucyk7Ci0JcmV0dXJuIHRvdGFsX2Rlc2NzOwomIzQzOwl4c2txX2NvbnNfcmVsZWFzZV9uKHEsIHJlbGVhc2VkKTsKJiM0MzsJYmF0Y2guY29uc3VtZWRfZGVzY3MgPSByZWxlYXNlZDsKJiM0MzsJcmV0dXJuIGJhdGNoOwogfQogCiAvKiBGdW5jdGlvbnMgZm9yIGNvbnN1bWVycyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKaW5kZXggNmViOTA5NmQwODRjMDEuLjdhYmI0OTM1ZWRmOWFkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKQEAgLTQyNywxNCAmIzQzOzQyNywxNCBAQCBzdGF0aWMgdTMyIHBrdF9uYl9mcmFncyh1MzIgZnJhbWVfc2l6ZSwgc3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW0sIHN0cnVjdCBwawogCX0KIAogCS8qIFNlYXJjaCBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGluIHZlcmJhdGltIG1vZGUgKi8KLQlpZiAoIXBrdF9jb250aW51ZXMocGt0LSZndDtvcHRpb25zKSB8fCAhcGt0LSZndDt2YWxpZCkKJiM0MzsJaWYgKCFwa3RfY29udGludWVzKHBrdC0mZ3Q7b3B0aW9ucykpCiAJCXJldHVybiBuYl9mcmFnczsKIAogCW5leHRfZnJhZyA9IHBrdF9zdHJlYW0tJmd0O2N1cnJlbnRfcGt0X25iOwogCXBrdCYjNDM7JiM0Mzs7CiAJd2hpbGUgKG5leHRfZnJhZyYjNDM7JiM0MzsgJmx0OyBwa3Rfc3RyZWFtLSZndDtuYl9wa3RzKSB7CiAJCW5iX2ZyYWdzJiM0MzsmIzQzOzsKLQkJaWYgKCFwa3RfY29udGludWVzKHBrdC0mZ3Q7b3B0aW9ucykgfHwgIXBrdC0mZ3Q7dmFsaWQpCiYjNDM7CQlpZiAoIXBrdF9jb250aW51ZXMocGt0LSZndDtvcHRpb25zKSkKIAkJCWJyZWFrOwogCQlwa3QmIzQzOyYjNDM7OwogCX0KQEAgLTY2NSwxMSAmIzQzOzY2NSwxMSBAQCBzdGF0aWMgc3RydWN0IHBrdF9zdHJlYW0gKl9fcGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgcwogCQkJaWYgKCFmcmFtZS0mZ3Q7dmFsaWQgfHwgIXBrdF9jb250aW51ZXMoZnJhbWUtJmd0O29wdGlvbnMpKQogCQkJCXBheWxvYWQmIzQzOyYjNDM7OwogCQl9IGVsc2UgewotCQkJaWYgKGZyYW1lLSZndDt2YWxpZCkKJiM0MzsJCQlpZiAoZnJhbWUtJmd0O3ZhbGlkKSB7CiAJCQkJbGVuICYjNDM7PSBmcmFtZS0mZ3Q7bGVuOwotCQkJaWYgKGZyYW1lLSZndDt2YWxpZCAmYW1wOyZhbXA7IHBrdF9jb250aW51ZXMoZnJhbWUtJmd0O29wdGlvbnMpKQotCQkJCWNvbnRpbnVlOwotCiYjNDM7CQkJCWlmIChwa3RfY29udGludWVzKGZyYW1lLSZndDtvcHRpb25zKSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJCXBrdC0mZ3Q7cGt0X25iID0gcGt0X25iOwogCQkJcGt0LSZndDtsZW4gPSBsZW47CiAJCQlwa3QtJmd0O3ZhbGlkID0gZnJhbWUtJmd0O3ZhbGlkOwpAQCAtMTIwOSw2ICYjNDM7MTIwOSw3IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLAogCWZvciAoaSA9IDA7IGkgJmx0OyB4c2stJmd0O2JhdGNoX3NpemU7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBwa3QgKnBrdCA9IHBrdF9zdHJlYW1fZ2V0X25leHRfdHhfcGt0KHBrdF9zdHJlYW0pOwogCQl1MzIgbmJfZnJhZ3NfbGVmdCwgbmJfZnJhZ3MsIGJ5dGVzX3dyaXR0ZW4gPSAwOwomIzQzOwkJc3RydWN0IHBrdCAqZmlyc3RfcGt0ID0gcGt0OwogCiAJCWlmICghcGt0KQogCQkJYnJlYWs7CkBAIC0xMjUzLDYgJiM0MzsxMjU0LDggQEAgc3RhdGljIGludCBfX3NlbmRfcGt0cyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssCiAJCWlmIChwa3QgJmFtcDsmYW1wOyBwa3QtJmd0O3ZhbGlkKSB7CiAJCQl2YWxpZF9wa3RzJiM0MzsmIzQzOzsKIAkJCXZhbGlkX2ZyYWdzICYjNDM7PSBuYl9mcmFnczsKJiM0MzsJCX0gZWxzZSBpZiAocGt0X3N0cmVhbS0mZ3Q7dmVyYmF0aW0gJmFtcDsmYW1wOyBwa3RfY29udGludWVzKGZpcnN0X3BrdC0mZ3Q7b3B0aW9ucykpIHsKJiM0MzsJCQl2YWxpZF9mcmFncyAmIzQzOz0gbmJfZnJhZ3M7CiAJCX0KIAl9CiAKQEAgLTIwOTksMTMgJiM0MzsyMTAyLDE2IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCQl7MCwgMCwgMCwgZmFsc2UsIDB9LAogCQkvKiBJbnZhbGlkIGFkZHJlc3MgaW4gdGhlIHNlY29uZCBmcmFtZSAqLwogCQl7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSwKLQkJe3VtZW1fc3osIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7dW1lbV9zeiAqIDIsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sCiAJCS8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi8KIAkJezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiAJCXswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sCiAJCS8qIEludmFsaWQgb3B0aW9ucyBpbiB0aGUgbWlkZGxlICovCiAJCXswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LAogCQl7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYU0tfREVTQ19fSU5WQUxJRF9PUFRJT059LAomIzQzOwkJezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LAogCQkvKiBUcmFuc21pdCAyIGZyYWdzLCByZWNlaXZlIDMgKi8KIAkJezAsIFhTS19VTUVNX19NQVhfRlJBTUVfU0laRSwgMCwgdHJ1ZSwgWERQX1BLVF9DT05URH0sCiAJCXswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIDB9LApAQCAtMjExNyw4ICYjNDM7MjEyMyw4IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCiAJaWYgKHVtZW0tJmd0O3VuYWxpZ25lZF9tb2RlKSB7CiAJCS8qIENyb3NzaW5nIGEgY2h1bmsgYm91bmRhcnkgYWxsb3dlZCAqLwotCQlwa3RzWzEyXS52YWxpZCA9IHRydWU7Ci0JCXBrdHNbMTNdLnZhbGlkID0gdHJ1ZTsKJiM0MzsJCXBrdHNbMTVdLnZhbGlkID0gdHJ1ZTsKJiM0MzsJCXBrdHNbMTZdLnZhbGlkID0gdHJ1ZTsKIAl9CiAKIAl0ZXN0LSZndDttdHUgPSBNQVhfRVRIX0pVTUJPX1NJWkU7CkBAIC0yMjcwLDcgJiM0MzsyMjc2LDcgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKIAkJbWF4X2ZyYWdzICYjNDM7PSAxOwogCX0KIAotCXBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyAmIzQzOyAyLCBzaXplb2Yoc3RydWN0IHBrdCkpOwomIzQzOwlwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgJiM0MzsgMywgc2l6ZW9mKHN0cnVjdCBwa3QpKTsKIAlpZiAoIXBrdHMpCiAJCXJldHVybiBURVNUX0ZBSUxVUkU7CiAKQEAgLTIyODgsMjQgJiM0MzsyMjk0LDMwIEBAIGludCB0ZXN0YXBwX3Rvb19tYW55X2ZyYWdzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJfQogCXBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDsKIAotCS8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0Ci0JICogY29udGludWVzIG9uIHRoZSBsYXN0IGZyYWcKLQkgKi8KLQlmb3IgKGkgPSBtYXhfZnJhZ3MgJiM0MzsgMTsgaSAmbHQ7IDIgKiBtYXhfZnJhZ3MgJiM0MzsgMTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJLyogQW4gaW52YWxpZCBwYWNrZXQgd2l0aCB0aGUgbWF4ICYjNDM7IDEgYW1vdW50IG9mIGZyYWdzICovCiYjNDM7CWZvciAoaSA9IG1heF9mcmFncyAmIzQzOyAxOyBpICZsdDsgMiAqIG1heF9mcmFncyAmIzQzOyAyOyBpJiM0MzsmIzQzOykgewogCQlwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTsKIAkJcGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDsKLQkJcGt0c1tpXS52YWxpZCA9IGZhbHNlOwomIzQzOwkJcGt0c1tpXS52YWxpZCA9IHRydWU7CiAJfQomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0ub3B0aW9ucyA9IDA7CiAKIAkvKiBWYWxpZCBwYWNrZXQgZm9yIHN5bmNoICovCi0JcGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDFdLmxlbiA9IE1JTl9QS1RfU0laRTsKLQlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0udmFsaWQgPSB0cnVlOwomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0ubGVuID0gTUlOX1BLVF9TSVpFOwomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0udmFsaWQgPSB0cnVlOwogCi0JaWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMikpIHsKJiM0MzsJaWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMykpIHsKIAkJZnJlZShwa3RzKTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKJiM0MzsJLyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0CiYjNDM7CSAqIF9fc2VuZF9wa3RzKCkgYWNjb3VudHMgaXRzIGRlc2NyaXB0b3JzIGluIG91dHN0YW5kaW5nX3R4LiBUaGUgUngKJiM0MzsJICogc3RyZWFtLCBob3dldmVyLCBtdXN0IG5vdCBleHBlY3QgdGhpcyBwYWNrZXQgb24gdGhlIHdpcmUuCiYjNDM7CSAqLwomIzQzOwl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrLSZndDtwa3Rfc3RyZWFtLSZndDtwa3RzWzJdLnZhbGlkID0gZmFsc2U7CiYjNDM7CXRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2stJmd0O3BrdF9zdHJlYW0tJmd0O25iX3ZhbGlkX2VudHJpZXMtLTsKJiM0MzsKIAlyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7CiAJZnJlZShwa3RzKTsKIAlyZXR1cm4gcmV0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTA2CgkJCQkJCQlvdXRwdXQ6IDU3CgkJCQkJCQl0aG91Z2h0czogNTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUZfWERQIE11bHRpLUJ1ZmZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZmlsZXMgcmVsYXRlZCB0byBBRl9YRFA6IGB4ZHBfc29jay5oYCwgYHhza19idWZmX3Bvb2wuaGAsIGB4c2suY2AsIGB4c2tfYnVmZl9wb29sLmNgLCBgeHNrX3F1ZXVlLmhgLCBhbmQgYSBzZWxmdGVzdC4gVGhpcyBpcyBhbGwgYWJvdXQgaGFuZGxpbmcgbXVsdGktYnVmZmVyIG9yIFNHIChzY2F0dGVyLWdhdGhlcikgcGFja2V0cyB3aXRoaW4gQUZfWERQLCB3aGljaCBwaXF1ZXMgbXkgaW50ZXJlc3QgaW1tZWRpYXRlbHkuIEl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgbG9naWMuIEkmIzM5O20gc2VlaW5nIGFkZGl0aW9ucyBvZiB2YXJpYWJsZXMgbGlrZSBgZHJhaW5fY29udGAsIGB0eF9kZXNjc19uZW50cmllc2AsIGByZWNsYWltX2Rlc2NzYCwgYW5kIGB0eF96Y19wZW5kaW5nX2Rlc2NzYCBpbiB0aGUgYHhkcF9zb2NrYCBhbmQgYHhza19idWZmX3Bvb2xgIHN0cnVjdHVyZXMsIHdoaWNoIGluZGljYXRlcyBjaGFuZ2VzIGluIGRlc2NyaXB0b3IgbWFuYWdlbWVudC4KCkZpcnN0LCBsZXQmIzM5O3MgY29uZmlybSBBRl9YRFAgaXRzZWxmIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQg4oCTIGdvb2QsIHRoYXQmIzM5O3MgYSBiYXNlbGluZS4gTm93LCBzaG91bGQgd2UgZnV6eiB0aGlzPyBBYnNvbHV0ZWx5LCBjb25zaWRlcmluZyB0aGlzIG1vZGlmaWVzIHRoZSBmdW5kYW1lbnRhbCBtdWx0aS1idWZmZXIgVFggcGF0aC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzLiBJdCYjMzk7cyBpbXBhY3RpbmcgY3JpdGljYWwgcGFydHMgb2YgdGhlIFhEUCBkYXRhIHBhdGguIEkmIzM5O3ZlIGdvdCBhIGxpc3QgaGVyZTogYHhza190eF9jb21wbGV0ZWRgLCBhbmQgc29tZSBuZXcgb25lcyBsaWtlIGB4c2tfdHhfY29tbWl0X2JhdGNoYCwgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCwgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgIGFuZCBgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRgLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBjaGFuZ2VzIHRvIGB4c2tfZHJvcF9za2JgLCBhbmQgdGhlIFNLQiBidWlsZGluZyBmdW5jdGlvbnMgYHhza19idWlsZF9za2JfemVyb2NvcHlgIGFuZCBgeHNrX2J1aWxkX3NrYmAuIEZpbmFsbHksIEkgc2VlIGBfX3hza19nZW5lcmljX3htaXRgLCBgeHBfYWxsb2NfdHhfZGVzY3NgLCBhbmQgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgIGluIHRoZSBtaXguCgpUaW1lIHRvIGRyaWxsIGRvd24uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIHRocm91Z2ggYG5ldC94ZHAveHNrLmNgIGFuZCBgbmV0L3hkcC94c2tfcXVldWUuaGAgdG8gY29uZmlybSB0aGUgZXhhY3QgZnVuY3Rpb24gbmFtZXMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29kZSBiZWluZyBjaGFuZ2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucyBpcyBjcnVjaWFsIGZvciBidWlsZGluZyBhIHN0cm9uZyBmdXp6aW5nIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KHZvaWR8dTMyfGludHxzdHJ1Y3QgW2Etel9dJiM0MzsgXFwqKSBbYS16X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz00OT1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnhza190eF9nZW5lcmljX2NhY2hlO1xubmV0L3hkcC94c2suYy01MC1cbm5ldC94ZHAveHNrLmM6NTE6dm9pZCB4c2tfc2V0X3J4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy01Mi17XG4tLVxubmV0L3hkcC94c2suYz01OT1FWFBPUlRfU1lNQk9MKHhza19zZXRfcnhfbmVlZF93YWtldXApO1xubmV0L3hkcC94c2suYy02MC1cbm5ldC94ZHAveHNrLmM6NjE6dm9pZCB4c2tfc2V0X3R4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy02Mi17XG4tLVxubmV0L3hkcC94c2suYz03Nj1FWFBPUlRfU1lNQk9MKHhza19zZXRfdHhfbmVlZF93YWtldXApO1xubmV0L3hkcC94c2suYy03Ny1cbm5ldC94ZHAveHNrLmM6Nzg6dm9pZCB4c2tfY2xlYXJfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTc5LXtcbi0tXG5uZXQveGRwL3hzay5jPTg2PUVYUE9SVF9TWU1CT0woeHNrX2NsZWFyX3J4X25lZWRfd2FrZXVwKTtcbm5ldC94ZHAveHNrLmMtODctXG5uZXQveGRwL3hzay5jOjg4OnZvaWQgeHNrX2NsZWFyX3R4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy04OS17XG4tLVxubmV0L3hkcC94c2suYz0xMjE9RVhQT1JUX1NZTUJPTCh4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQpO1xubmV0L3hkcC94c2suYy0xMjItXG5uZXQveGRwL3hzay5jOjEyMzpzdGF0aWMgdm9pZCBfX3hza19jbGVhcl9wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaWQpXG5uZXQveGRwL3hzay5jLTEyNC17XG4tLVxubmV0L3hkcC94c2suYy0xMzAtXG5uZXQveGRwL3hzay5jOjEzMTp2b2lkIHhza19jbGVhcl9wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaWQpXG5uZXQveGRwL3hzay5jLTEzMi17XG4tLVxubmV0L3hkcC94c2suYy0xNDYtXG5uZXQveGRwL3hzay5jOjE0NzpzdGF0aWMgaW50IF9feHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3hkcC94c2suYy0xNDgtXHRcdFx0XHQgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUxNiBxdWV1ZV9pZClcbi0tXG5uZXQveGRwL3hzay5jLTE2NC0gKi9cbm5ldC94ZHAveHNrLmM6MTY1OmludCB4c2tfcmVnX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxubmV0L3hkcC94c2suYy0xNjYtXHRcdFx0dTE2IHF1ZXVlX2lkKVxuLS1cbm5ldC94ZHAveHNrLmMtMTkwLVxubmV0L3hkcC94c2suYzoxOTE6c3RhdGljIGludCBfX3hza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYiwgdTMyIGxlbixcbm5ldC94ZHAveHNrLmMtMTkyLVx0XHRcdHUzMiBmbGFncylcbi0tXG5uZXQveGRwL3hzay5jLTIwNy1cbm5ldC94ZHAveHNrLmM6MjA4OnN0YXRpYyB2b2lkIF9feHNrX3Jjdl96Y19zYWZlKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsXG5uZXQveGRwL3hzay5jLTIwOS1cdFx0XHQgICAgICB1MzIgbGVuLCB1MzIgZmxhZ3MpXG4tLVxubmV0L3hkcC94c2suYy0yMTgtXG5uZXQveGRwL3hzay5jOjIxOTpzdGF0aWMgaW50IHhza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXG5uZXQveGRwL3hzay5jLTIyMC17XG4tLVxubmV0L3hkcC94c2suYz0yNjA9c3RhdGljIHZvaWQgKnhza19jb3B5X3hkcF9zdGFydChzdHJ1Y3QgeGRwX2J1ZmYgKmZyb20pXG4tLVxubmV0L3hkcC94c2suYy0yNjctXG5uZXQveGRwL3hzay5jOjI2ODpzdGF0aWMgdTMyIHhza19jb3B5X3hkcCh2b2lkICp0bywgdm9pZCAqKmZyb20sIHUzMiB0b19sZW4sXG5uZXQveGRwL3hzay5jLTI2OS1cdFx0XHR1MzIgKmZyb21fbGVuLCBza2JfZnJhZ190ICoqZnJhZywgdTMyIHJlbSlcbi0tXG5uZXQveGRwL3hzay5jLTI5NS1cbm5ldC94ZHAveHNrLmM6Mjk2OnN0YXRpYyBpbnQgX194c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxubmV0L3hkcC94c2suYy0yOTcte1xuLS1cbm5ldC94ZHAveHNrLmM9MzY1PXN0YXRpYyBib29sIHhza190eF93cml0ZWFibGUoc3RydWN0IHhkcF9zb2NrICp4cylcbi0tXG5uZXQveGRwL3hzay5jLTM3Mi1cbm5ldC94ZHAveHNrLmM6MzczOnN0YXRpYyB2b2lkIF9feHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMzc0LXtcbi0tXG5uZXQveGRwL3hzay5jPTM5MD1zdGF0aWMgYm9vbCB4c2tfZGV2X3F1ZXVlX3ZhbGlkKGNvbnN0IHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy00MTQtXG5uZXQveGRwL3hzay5jOjQxNTpzdGF0aWMgaW50IHhza19yY3ZfY2hlY2soc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXG5uZXQveGRwL3hzay5jLTQxNi17XG4tLVxubmV0L3hkcC94c2suYy00MjktXG5uZXQveGRwL3hzay5jOjQzMDpzdGF0aWMgdm9pZCB4c2tfZmx1c2goc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtNDMxLXtcbi0tXG5uZXQveGRwL3hzay5jLTQzNi1cbm5ldC94ZHAveHNrLmM6NDM3OmludCB4c2tfZ2VuZXJpY19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQveGRwL3hzay5jLTQzOC17XG4tLVxubmV0L3hkcC94c2suYy00NTItXG5uZXQveGRwL3hzay5jOjQ1MzpzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQveGRwL3hzay5jLTQ1NC17XG4tLVxubmV0L3hkcC94c2suYy00NzItXG5uZXQveGRwL3hzay5jOjQ3MzppbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00NzQte1xuLS1cbm5ldC94ZHAveHNrLmMtNDg5LVxubmV0L3hkcC94c2suYzo0OTA6dm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdClcbm5ldC94ZHAveHNrLmMtNDkxLXtcbi0tXG5uZXQveGRwL3hzay5jLTQ5OS1cbm5ldC94ZHAveHNrLmM6NTAwOnZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXG5uZXQveGRwL3hzay5jLTUwMS17XG4tLVxubmV0L3hkcC94c2suYz01MjE9RVhQT1JUX1NZTUJPTCh4c2tfdHhfY29tcGxldGVkKTtcbm5ldC94ZHAveHNrLmMtNTIyLVxubmV0L3hkcC94c2suYzo1MjM6dm9pZCB4c2tfdHhfcmVsZWFzZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbm5ldC94ZHAveHNrLmMtNTI0LXtcbi0tXG5uZXQveGRwL3hzay5jPTU4MD1FWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX2Rlc2MpO1xubmV0L3hkcC94c2suYy01ODEtXG5uZXQveGRwL3hzay5jOjU4MjpzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50cmllcylcbm5ldC94ZHAveHNrLmMtNTgzLXtcbi0tXG5uZXQveGRwL3hzay5jLTU5My1cbm5ldC94ZHAveHNrLmM6NTk0OnN0YXRpYyB2b2lkIHhza190eF9jb21taXRfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG5uZXQveGRwL3hzay5jLTU5NS1cdFx0XHRcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoLFxuLS1cbm5ldC94ZHAveHNrLmM9NjQ4PXhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXG4tLVxubmV0L3hkcC94c2suYy03MjUtXG5uZXQveGRwL3hzay5jOjcyNjp1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcbm5ldC94ZHAveHNrLmMtNzI3LXtcbi0tXG5uZXQveGRwL3hzay5jPTc4Mz1FWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XG5uZXQveGRwL3hzay5jLTc4NC1cbm5ldC94ZHAveHNrLmM6Nzg1OnN0YXRpYyBpbnQgeHNrX3dha2V1cChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCB1OCBmbGFncylcbm5ldC94ZHAveHNrLmMtNzg2LXtcbi0tXG5uZXQveGRwL3hzay5jLTc5MS1cbm5ldC94ZHAveHNrLmM6NzkyOnN0YXRpYyBpbnQgeHNrX2NxX3Jlc2VydmVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy03OTMte1xuLS1cbm5ldC94ZHAveHNrLmM9ODI2PXN0YXRpYyBzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcnNfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGRwL3hzay5jLTgzOC1cbm5ldC94ZHAveHNrLmM6ODM5OnN0YXRpYyBpbnQgeHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHU2NCBhZGRyKVxubmV0L3hkcC94c2suYy04NDAte1xuLS1cbm5ldC94ZHAveHNrLmMtODUwLVxubmV0L3hkcC94c2suYzo4NTE6c3RhdGljIHZvaWQgeHNrX2luY19udW1fZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy04NTIte1xuLS1cbm5ldC94ZHAveHNrLmMtODYwLVxubmV0L3hkcC94c2suYzo4NjE6c3RhdGljIHUzMiB4c2tfZ2V0X251bV9kZXNjKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTg2Mi17XG4tLVxubmV0L3hkcC94c2suYy04NzItXG5uZXQveGRwL3hzay5jOjg3MzpzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxubmV0L3hkcC94c2suYy04NzQtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZHAveHNrLmMtOTAyLVxubmV0L3hkcC94c2suYzo5MDM6c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG5uZXQveGRwL3hzay5jLTkwNC1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4tLVxubmV0L3hkcC94c2suYy05MTUtXG5uZXQveGRwL3hzay5jOjkxNjpzdGF0aWMgdm9pZCB4c2tfY3FfY2FuY2VsX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG4pXG5uZXQveGRwL3hzay5jLTkxNy17XG4tLVxubmV0L3hkcC94c2suYz05MjM9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcbm5ldC94ZHAveHNrLmM6OTI0OnZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy05MjUte1xuLS1cbm5ldC94ZHAveHNrLmMtOTM2LVxubmV0L3hkcC94c2suYzo5Mzc6c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy05MzgtXHRcdFx0ICAgICB1NjQgYWRkcilcbi0tXG5uZXQveGRwL3hzay5jLTk1Mi1cbm5ldC94ZHAveHNrLmM6OTUzOnN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy05NTQte1xuLS1cbm5ldC94ZHAveHNrLmMtOTcwLVxubmV0L3hkcC94c2suYzo5NzE6c3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTk3Mi17XG4tLVxubmV0L3hkcC94c2suYy05NzktXG5uZXQveGRwL3hzay5jOjk4MDpzdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxubmV0L3hkcC94c2suYy05ODEtXHRcdFx0ICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYywgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4tLVxubmV0L3hkcC94c2suYz0xMDk4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTIwMy1cbm5ldC94ZHAveHNrLmM6MTIwNDpzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTEyMDUte1xuLS1cbm5ldC94ZHAveHNrLmMtMTMxOC1cbm5ldC94ZHAveHNrLmM6MTMxOTpzdGF0aWMgaW50IHhza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hkcC94c2suYy0xMzIwLXtcbi0tXG5uZXQveGRwL3hzay5jPTEzMzI9c3RhdGljIGJvb2wgeHNrX25vX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3hkcC94c2suYy0xMzQyLVxubmV0L3hkcC94c2suYzoxMzQzOnN0YXRpYyBpbnQgeHNrX2NoZWNrX2NvbW1vbihzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy0xMzQ0LXtcbi0tXG5uZXQveGRwL3hzay5jLTEzNTItXG5uZXQveGRwL3hzay5jOjEzNTM6c3RhdGljIGludCBfX3hza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXG5uZXQveGRwL3hzay5jLTEzNTQte1xuLS1cbm5ldC94ZHAveHNrLmMtMTM4My1cbm5ldC94ZHAveHNrLmM6MTM4NDpzdGF0aWMgaW50IHhza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXG5uZXQveGRwL3hzay5jLTEzODUte1xuLS1cbm5ldC94ZHAveHNrLmMtMTM5NC1cbm5ldC94ZHAveHNrLmM6MTM5NTpzdGF0aWMgaW50IF9feHNrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxubmV0L3hkcC94c2suYy0xMzk2LXtcbi0tXG5uZXQveGRwL3hzay5jLTE0MjAtXG5uZXQveGRwL3hzay5jOjE0MjE6c3RhdGljIGludCB4c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG5uZXQveGRwL3hzay5jLTE0MjIte1xuLS1cbm5ldC94ZHAveHNrLmM9MTQzMj1zdGF0aWMgX19wb2xsX3QgeHNrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3hkcC94c2suYy0xNDY0LVxubmV0L3hkcC94c2suYzoxNDY1OnN0YXRpYyBpbnQgeHNrX2luaXRfcXVldWUodTMyIGVudHJpZXMsIHN0cnVjdCB4c2tfcXVldWUgKipxdWV1ZSxcbm5ldC94ZHAveHNrLmMtMTQ2Ni1cdFx0XHQgIGJvb2wgdW1lbV9xdWV1ZSlcbi0tXG5uZXQveGRwL3hzay5jLTE0ODItXG5uZXQveGRwL3hzay5jOjE0ODM6c3RhdGljIHZvaWQgeHNrX3VuYmluZF9kZXYoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMTQ4NC17XG4tLVxubmV0L3hkcC94c2suYz0xNDk3PXN0YXRpYyBzdHJ1Y3QgeHNrX21hcCAqeHNrX2dldF9tYXBfbGlzdF9lbnRyeShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTUxNi1cbm5ldC94ZHAveHNrLmM6MTUxNzpzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2Zyb21fbWFwcyhzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy0xNTE4LXtcbi0tXG5uZXQveGRwL3hzay5jLTE1NDItXG5uZXQveGRwL3hzay5jOjE1NDM6c3RhdGljIGludCB4c2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L3hkcC94c2suYy0xNTQ0LXtcbi0tXG5uZXQveGRwL3hzay5jPTE1OTg9c3RhdGljIGJvb2wgeHNrX3ZhbGlkYXRlX3F1ZXVlcyhzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuLS1cbm5ldC94ZHAveHNrLmMtMTYwMi1cbm5ldC94ZHAveHNrLmM6MTYwMzpzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcl9sZW4pXG5uZXQveGRwL3hzay5jLTE2MDQte1xuLS1cbm5ldC94ZHAveHNrLmM9MTc5MD1zdHJ1Y3QgeGRwX3VtZW1fcmVnX3YxIHtcbi0tXG5uZXQveGRwL3hzay5jLTE3OTYtXG5uZXQveGRwL3hzay5jOjE3OTc6c3RhdGljIGludCB4c2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L3hkcC94c2suYy0xNzk4LVx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQveGRwL3hzay5jLTE5MTktXG5uZXQveGRwL3hzay5jOjE5MjA6c3RhdGljIHZvaWQgeHNrX2VudGVyX3J4dHhfb2Zmc2V0cyhzdHJ1Y3QgeGRwX3Jpbmdfb2Zmc2V0X3YxICpyaW5nKVxubmV0L3hkcC94c2suYy0xOTIxLXtcbi0tXG5uZXQveGRwL3hzay5jLTE5MjYtXG5uZXQveGRwL3hzay5jOjE5Mjc6c3RhdGljIHZvaWQgeHNrX2VudGVyX3VtZW1fb2Zmc2V0cyhzdHJ1Y3QgeGRwX3Jpbmdfb2Zmc2V0X3YxICpyaW5nKVxubmV0L3hkcC94c2suYy0xOTI4LXtcbi0tXG5uZXQveGRwL3hzay5jPTE5MzQ9c3RydWN0IHhkcF9zdGF0aXN0aWNzX3YxIHtcbi0tXG5uZXQveGRwL3hzay5jLTE5MzktXG5uZXQveGRwL3hzay5jOjE5NDA6c3RhdGljIGludCB4c2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L3hkcC94c2suYy0xOTQxLVx0XHRcdCAgc29ja29wdF90ICpvcHQpXG4tLVxubmV0L3hkcC94c2suYy0yMDY3LVxubmV0L3hkcC94c2suYzoyMDY4OnN0YXRpYyBpbnQgeHNrX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQveGRwL3hzay5jLTIwNjktXHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5uZXQveGRwL3hzay5jLTIxMDUtXG5uZXQveGRwL3hzay5jOjIxMDY6c3RhdGljIGludCB4c2tfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxubmV0L3hkcC94c2suYy0yMTA3LVx0XHRcdHVuc2lnbmVkIGxvbmcgbXNnLCB2b2lkICpwdHIpXG4tLVxubmV0L3hkcC94c2suYz0yMTQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHhza19wcm90b19vcHMgPSB7XG4tLVxubmV0L3hkcC94c2suYy0yMTYzLVxubmV0L3hkcC94c2suYzoyMTY0OnN0YXRpYyB2b2lkIHhza19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTIxNjUte1xuLS1cbm5ldC94ZHAveHNrLmMtMjE3NC1cbm5ldC94ZHAveHNrLmM6MjE3NTpzdGF0aWMgaW50IHhza19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG5uZXQveGRwL3hzay5jLTIxNzYtXHRcdCAgICAgIGludCBrZXJuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDI2CgkJCQkJCQlvdXRwdXQ6IDU5CgkJCQkJCQl0aG91Z2h0czogMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipNeSBBbmFseXNpcyBvZiBLZXkgWERQL1hTSyBUWCBhbmQgUlggRnVuY3Rpb25zKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGluIFhEUC9YU0sgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcGF0aHMuIFRoZSBmb2xsb3dpbmcgYXJlIGNydWNpYWwgZm9yIHRoZSB0YXNrIGF0IGhhbmQ6IGB4c2tfdHhfY29tcGxldGVkYCwgYHhza190eF9jb21taXRfYmF0Y2hgLCBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGAsICh5ZXMsIHRoYXQgb25lIGlzIGxpc3RlZCB0d2ljZSwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCksIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGAsIGB4c2tfZHJvcF9za2JgLCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAsIGB4c2tfYnVpbGRfc2tiYCwgYF9feHNrX2dlbmVyaWNfeG1pdGAsIGB4cF9hbGxvY190eF9kZXNjc2AsIGFuZCBgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaGAuIFRoYXQgZ2l2ZXMgbWUgdGhlIG92ZXJ2aWV3IHRoYXQgSSBuZWVkIGZvciB0aGlzIHNlY3Rpb24uIEkgd2lsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvZGUgZm9yIGB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoYC4gVG8gZG8gdGhhdCwgSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyBhdCBgbmV0L3hkcC94c2tfcXVldWUuaGAgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGlzIG1lYW50IHRvIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KHZvaWR8dTMyfGludHxzdHJ1Y3QgW2Etel9dJiM0MzsgXFwqKSBbYS16X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrX3F1ZXVlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2tfcXVldWUuaD01NDE9c3RydWN0IHhza19xdWV1ZSAqeHNrcV9jcmVhdGUodTMyIG5lbnRyaWVzLCBib29sIHVtZW1fcXVldWUpO1xubmV0L3hkcC94c2tfcXVldWUuaDo1NDI6dm9pZCB4c2txX2Rlc3Ryb3koc3RydWN0IHhza19xdWV1ZSAqcV9vcHMpO1xubmV0L3hkcC94c2tfcXVldWUuaC01NDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NjgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwmIzM5O3MgWERQIFNvY2tldCBDb25zdW1wdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaGAgZnVuY3Rpb24uIFJpZ2h0LCBpdCYjMzk7cyBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbiBkZWZpbmVkIGluIGBuZXQveGRwL3hza19xdWV1ZS5oYC4gVGhhdCBtZWFucyBpdCB3b24mIzM5O3QgYmUgYSB2aXNpYmxlIHN5bWJvbCBpbiB0aGUga2VybmVsIGltYWdlIGRpcmVjdGx5LiBCdXQsIHRoYXQmIzM5O3Mgbm90IHRoZSBlbmQgb2YgdGhlIGxpbmUsIGFzIEkga25vdyBpdCYjMzk7cyAqY2FsbGVkKiBieSBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGEgYml0IGFuZCBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzIGhlcmUuIEFGX1hEUCYjMzk7cyBhdmFpbGFiaWxpdHkgYm9pbHMgZG93biB0byBgQ09ORklHX1hEUF9TT0NLRVRTYC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGNvbWUgaW50byBwbGF5IGFzIHdlbGwuIEFsd2F5cyBnb29kIHRvIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfWERQX1NPQ0tFVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub1xubmV0L3hkcC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19YRFBfU09DS0VUUykgJiM0Mzs9IHhza19idWZmX3Bvb2wub1xubmV0L3hkcC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19YRFBfU09DS0VUU19ESUFHKSAmIzQzOz0geHNrX2RpYWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjE2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBYRFAtU29ja2V0cyBGdW5jdGlvbiBMaXN0KioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYFhEUF9TT0NLRVRTYCBzcGVjaWZpY2FsbHkuIFRpbWUgdG8gbmFpbCBkb3duIHRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gYW5hbHl6ZS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYSBwcmVsaW1pbmFyeSBsaXN0LCBhbmQgSSBuZWVkIHRvIHJlZmluZSBpdC4gSSYjMzk7bSB0aGlua2luZzoKCiogICBgeHNrX3R4X2NvbXBsZXRlZGAKKiAgIGB4c2tfdHhfY29tbWl0X2JhdGNoYAoqICAgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYAoqICAgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgCiogICBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCAoRHVwbGljYXRlLCBJJiMzOTtsbCBjbGVhbiB0aGF0IHVwIGxhdGVyKQoqICAgYHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkYAoqICAgYHhza19kcm9wX3NrYmAKKiAgIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YAoqICAgYHhza19idWlsZF9za2JgCiogICBgX194c2tfZ2VuZXJpY194bWl0YAoqICAgYHhwX2FsbG9jX3R4X2Rlc2NzYAoKV2FpdCBhIG1pbnV0ZSwgYSBmZXcgb2YgdGhvc2UgYXJlIG1hcmtlZCBhcyBgc3RhdGljYDogYHhza190eF9jb21taXRfYmF0Y2hgLCBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGAsIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGAsIGFuZCBgeHNrX2Ryb3Bfc2tiYC4gVGhleSBtaWdodCBiZSBpbmxpbmVkLiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhleSYjMzk7cmUgZXhwbGljaXRseSBkZWNsYXJlZCBhcyBgc3RhdGljIGlubGluZWAuIEFoLCBubywganVzdCBgc3RhdGljYC4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBsb2NhbCB0byB0aGVpciBjb21waWxhdGlvbiB1bml0LCBidXQgbm90IG5lY2Vzc2FyaWx5IGlubGluZWQuIFRoZXkgc2hvdWxkIGJlIGZpbmUgdG8gaW5jbHVkZSBmb3IgYSBicm9hZGVyIHZpZXcuCgpJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgeHBfYWxsb2NfdHhfZGVzY3NgIGluIGBuZXQveGRwL3hza19idWZmX3Bvb2wuY2AganVzdCB0byBiZSBzdXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHBfYWxsb2NfdHhfZGVzY3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwL3hza19idWZmX3Bvb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hza19idWZmX3Bvb2wuYz0zNT12b2lkIHhwX2Rlc3Ryb3koc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtNDQtXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYzo0NTppbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy00Ni17XG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM9NTU9c3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cyxcbi0tXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy03Mi1cdGlmICh4cy1cdTAwM2V0eClcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jOjczOlx0XHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMpKVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtNzQtXHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjUxCgkJCQkJCQlvdXRwdXQ6IDI1MQoJCQkJCQkJdGhvdWdodHM6IDYwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBBRl9YRFAgTXVsdGktQnVmZmVyIFRyYW5zbWlzc2lvbiBMb2dpYyBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgeHBfYWxsb2NfdHhfZGVzY3NgIGlzICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBrZXkuIE5vdywgSSBoYXZlIGEgc29saWQgbGlzdCBvZiBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nIGJhc2VkIG9uIHRoZSBwYXRjaCYjMzk7cyBzY29wZToKCiogICBgeHNrX3R4X2NvbXBsZXRlZGAKKiAgIGB4c2tfdHhfY29tbWl0X2JhdGNoYAoqICAgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYAoqICAgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgCiogICBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYAoqICAgYHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkYAoqICAgYHhza19kcm9wX3NrYmAKKiAgIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YAoqICAgYHhza19idWlsZF9za2JgCiogICBgX194c2tfZ2VuZXJpY194bWl0YAoqICAgYHhwX2FsbG9jX3R4X2Rlc2NzYAoKSW5pdGlhbGx5LCBJIGhhZCBhIHF1aWNrIGNoZWNrIG9uIHdoZXRoZXIgYF9feHNrX2dlbmVyaWNfeG1pdGAgd2FzIGEgc3RhdGljIGZ1bmN0aW9uLiBJdCBpcy4gSG93ZXZlciwgSSBjb25maXJtZWQgdGhhdCBpdCBpcyB0aGUgZ2VuZXJpYyB0cmFuc21pdCBmdW5jdGlvbiwgYW5kIHRoZSBwYXRjaCBoYXMgbW9kaWZpZWQgaXQuIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgIGlzIGFsc28gYSBob3QtcGF0aCBmdW5jdGlvbi4gVGhlIGluc3RydWN0aW9ucyBkaWQgd2FybiBhZ2FpbnN0IGluY2x1ZGluZyBnZW5lcmljIGhvdC1wYXRocyBsaWtlIGBrZnJlZWAgb3IgYHNjaGVkdWxlYCwgYnV0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWMgdG8gQUZcX1hEUCwgc28gdGhleSYjMzk7cmUgcmVsZXZhbnQgYW5kIGRvbiYjMzk7dCBza2V3IHRoZSBkaXN0cmlidXRpb24uIEluY2x1ZGluZyB0aGVtIGlzIGFjY2VwdGFibGUuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGZvY3VzZWQgb24gdGhlIEFGXF9YRFAgbXVsdGktYnVmZmVyIChTRykgcGFja2V0IHRyYW5zbWlzc2lvbi4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYmF0Y2hpbmcgYW5kIGRlc2NyaXB0b3IgcmVjbGFpbSB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgQUZcX1hEUCBjb2RlLCBzbyBpdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRvIGZ1enogaXQuIFRoZSBjb2RlJiMzOTtzIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiBgbmV0L3hkcC94c2suY2AgYW5kIGBuZXQveGRwL3hza19xdWV1ZS5oYC4KClRoZSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBlbnN1cmUgaXMgZW5hYmxlZCBmb3IgdGhpcyBpcyBgWERQX1NPQ0tFVFNgLiBJIGJyaWVmbHkgY2hlY2tlZCBpZiBgWERQX1NPQ0tFVFNgIGRlcGVuZGVkIG9uIGBCUEZfU1lTQ0FMTGAsIGFuZCBjb25maXJtZWQgdGhhdCBgWERQX1NPQ0tFVFNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiB0byBiZSBjaGVja2VkLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBlbmFibGVkIHVuZGVyIHRoZSB0YXJnZXRlZCBjb25maWd1cmF0aW9uLgoKU28sIGluIHN1bW1hcnksIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24sIHRoZSBwYXRjaCYjMzk7cyBzY29wZSwgYW5kIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlLiBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX3R4X2NvbXBsZXRlZCYjMzQ7LAogICAgJiMzNDt4c2tfdHhfY29tbWl0X2JhdGNoJiMzNDssCiAgICAmIzM0O19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkJiMzNDssCiAgICAmIzM0O3hza19kcm9wX3NrYiYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2ImIzM0OywKICAgICYjMzQ7X194c2tfZ2VuZXJpY194bWl0JiMzNDssCiAgICAmIzM0O3hwX2FsbG9jX3R4X2Rlc2NzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgbXVsdGktYnVmZmVyIChTRykgcGFja2V0IHRyYW5zbWlzc2lvbiBsb2dpYywgaW50cm9kdWNpbmcgYmF0Y2hpbmcgYW5kIHJlY2xhaW0gZGVzY3JpcHRvcnMgdG8gaGFuZGxlIGludmFsaWQgZGVzY3JpcHRvcnMgYW5kIGJvdW5kYXJpZXMgY29ycmVjdGx5LiBJdCBtb2RpZmllcyBjb3JlIFhEUCBzb2NrZXQgY29kZSBpbiBuZXQveGRwL3hzay5jIGFuZCBuZXQveGRwL3hza19xdWV1ZS5oLiBUaGlzIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4c2tfdHhfY29tcGxldGVkJiMzNDssCiAgICAmIzM0O3hza190eF9jb21taXRfYmF0Y2gmIzM0OywKICAgICYjMzQ7X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7eHNrX2Ryb3Bfc2tiJiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7eHNrX2J1aWxkX3NrYiYjMzQ7LAogICAgJiMzNDtfX3hza19nZW5lcmljX3htaXQmIzM0OywKICAgICYjMzQ7eHBfYWxsb2NfdHhfZGVzY3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCBtdWx0aS1idWZmZXIgKFNHKSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljLCBpbnRyb2R1Y2luZyBiYXRjaGluZyBhbmQgcmVjbGFpbSBkZXNjcmlwdG9ycyB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgYm91bmRhcmllcyBjb3JyZWN0bHkuIEl0IG1vZGlmaWVzIGNvcmUgWERQIHNvY2tldCBjb2RlIGluIG5ldC94ZHAveHNrLmMgYW5kIG5ldC94ZHAveHNrX3F1ZXVlLmguIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzM6NDYuMjU1ODMzMTQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMwNDIwMzAyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfdHhfY29tcGxldGVkXCIsXG4gICAgXCJ4c2tfdHhfY29tbWl0X2JhdGNoXCIsXG4gICAgXCJfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZFwiLFxuICAgIFwieHNrX2Ryb3Bfc2tiXCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiX3plcm9jb3B5XCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiXCIsXG4gICAgXCJfX3hza19nZW5lcmljX3htaXRcIixcbiAgICBcInhwX2FsbG9jX3R4X2Rlc2NzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCBtdWx0aS1idWZmZXIgKFNHKSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljLCBpbnRyb2R1Y2luZyBiYXRjaGluZyBhbmQgcmVjbGFpbSBkZXNjcmlwdG9ycyB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgYm91bmRhcmllcyBjb3JyZWN0bHkuIEl0IG1vZGlmaWVzIGNvcmUgWERQIHNvY2tldCBjb2RlIGluIG5ldC94ZHAveHNrLmMgYW5kIG5ldC94ZHAveHNrX3F1ZXVlLmguIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzo0Ni4yNTU4NTg1MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MzkxMjQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMzMGQ0ZjdlYmMxYWVmNzk2NmFiMzllZWQ5ZmRhNGE3NTk5MDhmZThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTc6MzM6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaCBiL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcXG5pbmRleCBlYmFjNjBhM2Q4YTE3Yi4uOGI1MTg3NmVmYmVkMWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaFxcbisrKyBiL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcXG5AQCAtODAsNiArODAsNyBAQCBzdHJ1Y3QgeGRwX3NvY2sge1xcbiBcXHQgKiBjYWxsIG9mIF9feHNrX2dlbmVyaWNfeG1pdCgpLlxcbiBcXHQgKi9cXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0Ym9vbCBkcmFpbl9jb250O1xcbiBcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBtYXBfbGlzdDtcXG4gXFx0LyogUHJvdGVjdHMgbWFwX2xpc3QgKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oIGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXFxuaW5kZXggY2NiM2IzNTAwMDFmMjQuLmZiNTllMjA1YWM3ZDdlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxcbkBAIC03OCw2ICs3OCw5IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sIHtcXG4gXFx0dTMyIGNodW5rX3NpemU7XFxuIFxcdHUzMiBjaHVua19zaGlmdDtcXG4gXFx0dTMyIGZyYW1lX2xlbjtcXG4rXFx0dTMyIHR4X2Rlc2NzX25lbnRyaWVzO1xcbitcXHR1MzIgcmVjbGFpbV9kZXNjcztcXG4rXFx0dTMyIHR4X3pjX3BlbmRpbmdfZGVzY3M7XFxuIFxcdHUzMiB4ZHBfemNfbWF4X3NlZ3M7XFxuIFxcdHU4IHR4X21ldGFkYXRhX2xlbjsgLyogaW5oZXJpdGVkIGZyb20gdW1lbSAqL1xcbiBcXHR1OCBjYWNoZWRfbmVlZF93YWtldXA7XFxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXFxuaW5kZXggYjk3MGYzMGVhOWI5ZDguLjdkOGI0MmM0YzIxNGJhIDEwMDY0NFxcbi0tLSBhL25ldC94ZHAveHNrLmNcXG4rKysgYi9uZXQveGRwL3hzay5jXFxuQEAgLTQ5OSw2ICs0OTksMjMgQEAgdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdClcXG4gXFxuIHZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXFxuIHtcXG4rXFx0dTMyIHJlY2xhaW1fZGVzY3MgPSBSRUFEX09OQ0UocG9vbC1cXHUwMDNlcmVjbGFpbV9kZXNjcyk7XFxuK1xcbitcXHRpZiAodW5saWtlbHkocmVjbGFpbV9kZXNjcykpIHtcXG4rXFx0XFx0dTMyIHBlbmRpbmdfZGVzY3MgPSBSRUFEX09OQ0UocG9vbC1cXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyk7XFxuK1xcbitcXHRcXHRpZiAobmJfZW50cmllcyBcXHUwMDNjIHBlbmRpbmdfZGVzY3MpIHtcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShwb29sLVxcdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLFxcbitcXHRcXHRcXHRcXHQgICBwZW5kaW5nX2Rlc2NzIC0gbmJfZW50cmllcyk7XFxuK1xcdFxcdFxcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVxcdTAwM2VjcSwgbmJfZW50cmllcyk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0V1JJVEVfT05DRShwb29sLVxcdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLCAwKTtcXG4rXFx0XFx0bmJfZW50cmllcyArPSByZWNsYWltX2Rlc2NzO1xcbitcXHRcXHRXUklURV9PTkNFKHBvb2wtXFx1MDAzZXJlY2xhaW1fZGVzY3MsIDApO1xcbitcXHR9XFxuK1xcbiBcXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cXHUwMDNlY3EsIG5iX2VudHJpZXMpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XFxuQEAgLTU3NCwyMiArNTkxLDE2OSBAQCBzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50clxcbiBcXHRyZXR1cm4gbmJfcGt0cztcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gsXFxuK1xcdFxcdFxcdFxcdHUzMiBjcV9jYWNoZWRfcHJvZClcXG4re1xcbitcXHR1MzIgbmJfZGVzY3MgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoYmF0Y2gpO1xcbitcXG4rXFx0aWYgKCFuYl9kZXNjcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0eHNrcV9wcm9kX3dyaXRlX2FkZHJfYmF0Y2gocG9vbC1cXHUwMDNlY3EsIHBvb2wtXFx1MDAzZXR4X2Rlc2NzLCBuYl9kZXNjcyk7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoYmF0Y2gtXFx1MDAzZXJlY2xhaW1fZGVzY3MpKSB7XFxuK1xcdFxcdHUzMiBjcV9wZW5kaW5nX2Rlc2NzO1xcbitcXG4rXFx0XFx0LyogQ1EgaXMgcG9zaXRpb25hbC4gRGVzY3JpcHRvcnMgYWxyZWFkeSB3cml0dGVuIGJ1dCBub3RcXG4rXFx0XFx0ICogc3VibWl0dGVkIG11c3QgY29tcGxldGUgYmVmb3JlIGFueSByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnNcXG4rXFx0XFx0ICogYXBwZW5kZWQgYmVsb3cuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjcV9wZW5kaW5nX2Rlc2NzID0gY3FfY2FjaGVkX3Byb2QgLSB4c2txX2dldF9wcm9kKHBvb2wtXFx1MDAzZWNxKTtcXG4rXFxuK1xcdFxcdFdSSVRFX09OQ0UocG9vbC1cXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcywgYmF0Y2gtXFx1MDAzZXR4X2Rlc2NzICsgY3FfcGVuZGluZ19kZXNjcyk7XFxuK1xcdFxcdFdSSVRFX09OQ0UocG9vbC1cXHUwMDNlcmVjbGFpbV9kZXNjcywgYmF0Y2gtXFx1MDAzZXJlY2xhaW1fZGVzY3MpO1xcbitcXHRcXHRpZiAodW5saWtlbHkoIXBvb2wtXFx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MpKVxcbitcXHRcXHRcXHR4c2tfdHhfY29tcGxldGVkKHBvb2wsIDApO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoXFxuK19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHhkcF9kZXNjICpkZXNjcywgdTMyIG1heF9kZXNjcylcXG4re1xcbitcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XFxuK1xcdHUzMiBlbnRyaWVzO1xcbitcXG4rXFx0ZW50cmllcyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLVxcdTAwM2V0eCwgbWF4X2Rlc2NzKTtcXG4rXFx0aWYgKCFlbnRyaWVzKVxcbitcXHRcXHRyZXR1cm4gYmF0Y2g7XFxuK1xcbitcXHRiYXRjaCA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMsIHBvb2wsIGRlc2NzLCBlbnRyaWVzKTtcXG4rXFx0aWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNmJhdGNoKSkge1xcbitcXHRcXHR4cy1cXHUwMDNldHgtXFx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzKys7XFxuK1xcdFxcdGlmIChiYXRjaC5jb25zdW1lZF9kZXNjcykge1xcbitcXHRcXHRcXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVxcdTAwM2V0eCk7XFxuK1xcdFxcdFxcdHhzLVxcdTAwM2Vzay5za193cml0ZV9zcGFjZShcXHUwMDI2eHMtXFx1MDAzZXNrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gYmF0Y2g7XFxuK1xcdH1cXG4rXFxuK1xcdF9feHNrcV9jb25zX3JlbGVhc2UoeHMtXFx1MDAzZXR4KTtcXG4rXFx0eHMtXFx1MDAzZXNrLnNrX3dyaXRlX3NwYWNlKFxcdTAwMjZ4cy1cXHUwMDNlc2spO1xcbitcXHRyZXR1cm4gYmF0Y2g7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoXFxuK3hza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXFxuK3tcXG4rXFx0dTMyIGNxX2Rlc2NzX2JlZm9yZSwgY3FfZGVzY3NfYWZ0ZXI7XFxuK1xcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggc3VtX2JhdGNoID0ge307XFxuK1xcdGJvb2wgYnVkZ2V0X2V4aGF1c3RlZDtcXG4rXFx0dTMyIHBlcl9zb2NrZXRfYnVkZ2V0O1xcbitcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xcbitcXG4rXFx0bWF4X2Rlc2NzID0geHNrcV9wcm9kX25iX2ZyZWUocG9vbC1cXHUwMDNlY3EsIG1heF9kZXNjcyk7XFxuK1xcdGlmICghbWF4X2Rlc2NzKVxcbitcXHRcXHRyZXR1cm4gc3VtX2JhdGNoO1xcbitcXG4rXFx0LyogVGhlIGZhaXJuZXNzIHF1b3RhIG11c3QgYWxsb3cgb25lIG1heGltdW0tc2l6ZWQgdmFsaWQgcGFja2V0LiAqL1xcbitcXHRwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULFxcbitcXHRcXHRcXHRcXHQgIHBvb2wtXFx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XFxuK1xcbithZ2FpbjpcXG4rXFx0YnVkZ2V0X2V4aGF1c3RlZCA9IGZhbHNlO1xcbitcXHRjcV9kZXNjc19iZWZvcmUgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcXHUwMDI2cG9vbC1cXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpIHtcXG4rXFx0XFx0dTMyIGJ1ZGdldCwgYnVkZ2V0X2xlZnQsIG9mZnNldCwgcmVtYWluaW5nO1xcbitcXHRcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGN1cnJfYmF0Y2g7XFxuK1xcbitcXHRcXHQvKiBPbmNlIHJlY2xhaW0tb25seSBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gYXBwZW5kZWQgdG8gdGhlIENRIGFkZHJlc3NcXG4rXFx0XFx0ICogYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9ycyBmcm9tIGFub3RoZXJcXG4rXFx0XFx0ICogc29ja2V0IGFmdGVyIHRoZW0uIHhza190eF9jb21wbGV0ZWQoKSByZWxpZXMgb24gYWxsIGRyaXZlci12aXNpYmxlXFxuK1xcdFxcdCAqIGRlc2NyaXB0b3JzIHByZWNlZGluZyBhbGwgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLVxcdTAwM2V0eF9kZXNjcyAqL1xcbitcXHRcXHRvZmZzZXQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcdFxcdGlmIChvZmZzZXQgXFx1MDAzZT0gbWF4X2Rlc2NzKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGlmICh4cy1cXHUwMDNldHhfYnVkZ2V0X3NwZW50IFxcdTAwM2U9IHBlcl9zb2NrZXRfYnVkZ2V0KSB7XFxuK1xcdFxcdFxcdGlmICh4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cXHUwMDNldHgsIDEpKVxcbitcXHRcXHRcXHRcXHRidWRnZXRfZXhoYXVzdGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGJ1ZGdldF9sZWZ0ID0gcGVyX3NvY2tldF9idWRnZXQgLSB4cy1cXHUwMDNldHhfYnVkZ2V0X3NwZW50O1xcbitcXHRcXHRyZW1haW5pbmcgPSBtYXhfZGVzY3MgLSBvZmZzZXQ7XFxuK1xcdFxcdGJ1ZGdldCA9IG1pbihyZW1haW5pbmcsIGJ1ZGdldF9sZWZ0KTtcXG4rXFxuK1xcdFxcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcG9vbC1cXHUwMDNldHhfZGVzY3MgKyBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGJ1ZGdldCk7XFxuK1xcdFxcdGlmICgheHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFxcdTAwMjZjdXJyX2JhdGNoKSkge1xcbitcXHRcXHRcXHRpZiAoY3Vycl9iYXRjaC5idWRnZXRfbGltaXRlZCBcXHUwMDI2XFx1MDAyNiBidWRnZXRfbGVmdCBcXHUwMDNjIHJlbWFpbmluZylcXG4rXFx0XFx0XFx0XFx0YnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7XFxuK1xcdFxcdFxcdHhzLVxcdTAwM2V0eF9idWRnZXRfc3BlbnQgKz0gY3Vycl9iYXRjaC5jb25zdW1lZF9kZXNjcztcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHhzLVxcdTAwM2V0eF9idWRnZXRfc3BlbnQgKz0gY3Vycl9iYXRjaC5jb25zdW1lZF9kZXNjcztcXG4rXFx0XFx0c3VtX2JhdGNoLnR4X2Rlc2NzICs9IGN1cnJfYmF0Y2gudHhfZGVzY3M7XFxuK1xcdFxcdHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzICs9IGN1cnJfYmF0Y2gucmVjbGFpbV9kZXNjcztcXG4rXFx0fVxcbitcXG4rXFx0Y3FfZGVzY3NfYWZ0ZXIgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcbitcXHRpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgfHwgY3FfZGVzY3NfYWZ0ZXIgXFx1MDAzZT0gbWF4X2Rlc2NzKVxcbitcXHRcXHRyZXR1cm4gc3VtX2JhdGNoO1xcbitcXG4rXFx0LyogQ29udGludWUgZmlsbGluZyB0aGUgYmF0Y2ggd2hpbGUgdGhpcyBwYXNzIG1hZGUgcHJvZ3Jlc3MgKi9cXG4rXFx0aWYgKGNxX2Rlc2NzX2JlZm9yZSAhPSBjcV9kZXNjc19hZnRlcilcXG4rXFx0XFx0Z290byBhZ2FpbjtcXG4rXFxuK1xcdGlmICghYnVkZ2V0X2V4aGF1c3RlZClcXG4rXFx0XFx0cmV0dXJuIHN1bV9iYXRjaDtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcXHUwMDI2cG9vbC1cXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpXFxuK1xcdFxcdHhzLVxcdTAwM2V0eF9idWRnZXRfc3BlbnQgPSAwO1xcbitcXHRnb3RvIGFnYWluO1xcbit9XFxuK1xcbiB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcXG4ge1xcbitcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XFxuIFxcdHN0cnVjdCB4ZHBfc29jayAqeHM7XFxuK1xcdHUzMiBjcV9jYWNoZWRfcHJvZDtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0aWYgKHVubGlrZWx5KFJFQURfT05DRShwb29sLVxcdTAwM2VyZWNsYWltX2Rlc2NzKSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRuYl9wa3RzID0gbWluKG5iX3BrdHMsIHBvb2wtXFx1MDAzZXR4X2Rlc2NzX25lbnRyaWVzKTtcXG4rXFx0aWYgKCFuYl9wa3RzKVxcbitcXHRcXHRnb3RvIG91dDtcXG4gXFx0aWYgKCFsaXN0X2lzX3Npbmd1bGFyKFxcdTAwMjZwb29sLVxcdTAwM2V4c2tfdHhfbGlzdCkpIHtcXG4tXFx0XFx0LyogRmFsbGJhY2sgdG8gdGhlIG5vbi1iYXRjaGVkIHZlcnNpb24gKi9cXG4rXFx0XFx0LyogS2VlcCB0aGUgbGVnYWN5IG9uZS1kZXNjcmlwdG9yIGZhbGxiYWNrIGZvciBub24tU0cgdXNlcnMuICBUaGVcXG4rXFx0XFx0ICogc2hhcmVkIFNHIHBhdGggbmVlZHMgcGFja2V0LWZyYW1lZCBwYXJzaW5nIHNvIGludmFsaWQvb3ZlcmZsb3dlZFxcbitcXHRcXHQgKiBtdWx0aS1idWZmZXIgcGFja2V0cyBhcmUgZHJhaW5lZCBhcyBhIHVuaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocG9vbC1cXHUwMDNldW1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRFBfVU1FTV9TR19GTEFHKSB7XFxuK1xcdFxcdFxcdGJhdGNoID0geHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChwb29sLCBuYl9wa3RzKTtcXG4rXFx0XFx0XFx0Y3FfY2FjaGVkX3Byb2QgPSBwb29sLVxcdTAwM2VjcS1cXHUwMDNlY2FjaGVkX3Byb2Q7XFxuK1xcdFxcdFxcdHhza190eF9jb21taXRfYmF0Y2gocG9vbCwgXFx1MDAyNmJhdGNoLCBjcV9jYWNoZWRfcHJvZCk7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0cmV0dXJuIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2socG9vbCwgbmJfcGt0cyk7XFxuIFxcdH1cXG4gXFxuIFxcdHhzID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdShcXHUwMDI2cG9vbC1cXHUwMDNleHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jaywgdHhfbGlzdCk7XFxuLVxcdGlmICgheHMpIHtcXG4tXFx0XFx0bmJfcGt0cyA9IDA7XFxuK1xcdGlmICgheHMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuIFxcbiBcXHRuYl9wa3RzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXFx1MDAzZXR4LCBuYl9wa3RzKTtcXG4gXFxuQEAgLTYwMywxOSArNzY3LDE4IEBAIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxcbiBcXHRpZiAoIW5iX3BrdHMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0bmJfcGt0cyA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMtXFx1MDAzZXR4LCBwb29sLCBuYl9wa3RzKTtcXG4tXFx0aWYgKCFuYl9wa3RzKSB7XFxuLVxcdFxcdHhzLVxcdTAwM2V0eC1cXHUwMDNlcXVldWVfZW1wdHlfZGVzY3MrKztcXG4rXFx0YmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cywgcG9vbC1cXHUwMDNldHhfZGVzY3MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBuYl9wa3RzKTtcXG4rXFx0bmJfcGt0cyA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcXHUwMDI2YmF0Y2gpO1xcbitcXHRpZiAoIW5iX3BrdHMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuIFxcbi1cXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVxcdTAwM2V0eCk7XFxuLVxcdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXFx1MDAzZWNxLCBwb29sLVxcdTAwM2V0eF9kZXNjcywgbmJfcGt0cyk7XFxuLVxcdHhzLVxcdTAwM2Vzay5za193cml0ZV9zcGFjZShcXHUwMDI2eHMtXFx1MDAzZXNrKTtcXG4rXFx0Y3FfY2FjaGVkX3Byb2QgPSBwb29sLVxcdTAwM2VjcS1cXHUwMDNlY2FjaGVkX3Byb2Q7XFxuK1xcdHhza190eF9jb21taXRfYmF0Y2gocG9vbCwgXFx1MDAyNmJhdGNoLCBjcV9jYWNoZWRfcHJvZCk7XFxuIFxcbiBvdXQ6XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRyZXR1cm4gbmJfcGt0cztcXG4rXFx0cmV0dXJuIGJhdGNoLnR4X2Rlc2NzO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTtcXG4gXFxuQEAgLTczNyw2ICs5MDAsMTkgQEAgc3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cG9vbC1cXHUwMDNlY3FfcHJvZF9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHR1MzIgaWR4O1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBvb2wtXFx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xcbitcXHRpZHggPSB4c2txX2dldF9wcm9kKHBvb2wtXFx1MDAzZWNxKTtcXG4rXFx0eHNrcV9wcm9kX3dyaXRlX2FkZHIocG9vbC1cXHUwMDNlY3EsIGlkeCwgZGVzYy1cXHUwMDNlYWRkcik7XFxuK1xcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVxcdTAwM2VjcSwgMSk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBvb2wtXFx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB4c2tfY3FfY2FuY2VsX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG4pXFxuIHtcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZwb29sLVxcdTAwM2VjcS1cXHUwMDNlY3FfY2FjaGVkX3Byb2RfbG9jayk7XFxuQEAgLTc5NCw4ICs5NzAsMTEgQEAgc3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBzdGF0aWMgdm9pZCB4c2tfZHJvcF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHR4ZHBfc2soc2tiLVxcdTAwM2VzayktXFx1MDAzZXR4LVxcdTAwM2VpbnZhbGlkX2Rlc2NzICs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcXG4tXFx0eHNrX2NvbnN1bWVfc2tiKHNrYik7XFxuK1xcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLVxcdTAwM2Vzayk7XFxuK1xcbitcXHR4cy1cXHUwMDNldHgtXFx1MDAzZWludmFsaWRfZGVzY3MgKz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xcbitcXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcXG5AQCAtODc3LDcgKzEwNTYsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbiBcXHRcXHQvKiBpbiBjYXNlIG9mIC1FT1ZFUkZMT1cgdGhhdCBjb3VsZCBoYXBwZW4gYmVsb3csXFxuLVxcdFxcdCAqIHhza19jb25zdW1lX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiXFxuK1xcdFxcdCAqIHhza19kcm9wX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiXFxuIFxcdFxcdCAqIHdvdWxkIGJlIGRyb3BwZWQsIHdoaWNoIGltcGxpZXMgZnJlZWluZyBhbGwgbGlzdCBlbGVtZW50c1xcbiBcXHRcXHQgKi9cXG4gXFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG5AQCAtOTY5LDYgKzExNDgsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gXFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG4rXFxuIFxcdFxcdFxcdGlmICh1bmxpa2VseShucl9mcmFncyA9PSAoTUFYX1NLQl9GUkFHUyAtIDEpIFxcdTAwMjZcXHUwMDI2IHhwX21iX2Rlc2MoZGVzYykpKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IC1FT1ZFUkZMT1c7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuQEAgLTk4Niw4ICsxMTY3LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuIFxcbiBcXHRcXHRcXHRza2JfYWRkX3J4X2ZyYWcoc2tiLCBucl9mcmFncywgcGFnZSwgMCwgbGVuLCBQQUdFX1NJWkUpO1xcbiBcXHRcXHRcXHRyZWZjb3VudF9hZGQoUEFHRV9TSVpFLCBcXHUwMDI2eHMtXFx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xcbi1cXG4tXFx0XFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC0xMDYwLDExICsxMjM5LDIyIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICh1bmxpa2VseSh4cy1cXHUwMDNlZHJhaW5fY29udCkpIHtcXG4rXFx0XFx0XFx0eHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtXFx1MDAzZXBvb2wsIFxcdTAwMjZkZXNjKTtcXG4rXFxuK1xcdFxcdFxcdHhzLVxcdTAwM2V0eC1cXHUwMDNlaW52YWxpZF9kZXNjcysrO1xcbitcXHRcXHRcXHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbitcXHRcXHRcXHR4cy1cXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXFx1MDAyNmRlc2MpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXFx1MDAyNmRlc2MpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4gXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihza2IpO1xcbiBcXHRcXHRcXHRpZiAoZXJyICE9IC1FT1ZFUkZMT1cpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRpZiAoeHBfbWJfZGVzYyhcXHUwMDI2ZGVzYykpXFxuK1xcdFxcdFxcdFxcdHhzLVxcdTAwM2VkcmFpbl9jb250ID0gdHJ1ZTtcXG4gXFx0XFx0XFx0ZXJyID0gMDtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG5AQCAtMTA5OCw5ICsxMjg4LDI0IEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVxcdTAwM2V0eCkpIHtcXG4rXFx0XFx0Ym9vbCByZWNsYWltX2Rlc2MgPSB4cy1cXHUwMDNlc2tiIHx8IHhzLVxcdTAwM2VkcmFpbl9jb250O1xcbitcXG4rXFx0XFx0aWYgKHJlY2xhaW1fZGVzYykge1xcbitcXHRcXHRcXHRlcnIgPSB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoeHMtXFx1MDAzZXBvb2wpO1xcbitcXHRcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FQUdBSU47XFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGlmICh4cy1cXHUwMDNlc2tiKVxcbiBcXHRcXHRcXHR4c2tfZHJvcF9za2IoeHMtXFx1MDAzZXNrYik7XFxuK1xcbitcXHRcXHRpZiAocmVjbGFpbV9kZXNjKVxcbitcXHRcXHRcXHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cXHUwMDNlcG9vbCwgXFx1MDAyNmRlc2MpO1xcbitcXG4gXFx0XFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXFx1MDAzZXR4KTtcXG4rXFx0XFx0eHMtXFx1MDAzZWRyYWluX2NvbnQgPSB4cF9tYl9kZXNjKFxcdTAwMjZkZXNjKTtcXG4gXFx0fVxcbiBcXG4gb3V0OlxcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19idWZmX3Bvb2wuYyBiL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXFxuaW5kZXggMWYyOGE5NjQxNTcxZTQuLmI4NjJhZGRjZDhmZGFmIDEwMDY0NFxcbi0tLSBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXFxuKysrIGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcXG5AQCAtNDgsNiArNDgsNyBAQCBpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMpXFxuIFxcdGlmICghcG9vbC1cXHUwMDNldHhfZGVzY3MpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0cG9vbC1cXHUwMDNldHhfZGVzY3NfbmVudHJpZXMgPSB4cy1cXHUwMDNldHgtXFx1MDAzZW5lbnRyaWVzO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2tfcXVldWUuaCBiL25ldC94ZHAveHNrX3F1ZXVlLmhcXG5pbmRleCAzZTNmYmI3M2QyM2UyZi4uYTE1ZmYxOTI5ZGI2MjMgMTAwNjQ0XFxuLS0tIGEvbmV0L3hkcC94c2tfcXVldWUuaFxcbisrKyBiL25ldC94ZHAveHNrX3F1ZXVlLmhcXG5AQCAtNTgsNiArNTgsMTggQEAgc3RydWN0IHBhcnNlZF9kZXNjIHtcXG4gXFx0dTMyIHZhbGlkO1xcbiB9O1xcbiBcXG4rc3RydWN0IHhza190eF9iYXRjaCB7XFxuK1xcdHUzMiB0eF9kZXNjcztcXG4rXFx0dTMyIHJlY2xhaW1fZGVzY3M7XFxuK1xcdHUzMiBjb25zdW1lZF9kZXNjcztcXG4rXFx0Ym9vbCBidWRnZXRfbGltaXRlZDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdTMyIHhza190eF9iYXRjaF9jcV9kZXNjcyhjb25zdCBzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaClcXG4re1xcbitcXHRyZXR1cm4gYmF0Y2gtXFx1MDAzZXR4X2Rlc2NzICsgYmF0Y2gtXFx1MDAzZXJlY2xhaW1fZGVzY3M7XFxuK31cXG4rXFxuIC8qIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHNoYXJlZCBzdGF0ZSBvZiB0aGUgcmluZ3MgYXJlIGEgc2ltcGxlXFxuICAqIGNpcmN1bGFyIGJ1ZmZlciwgYXMgb3V0bGluZWQgaW5cXG4gICogRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9jaXJjdWxhci1idWZmZXJzLnJzdC4gRm9yIHRoZSBSeCBhbmRcXG5AQCAtMjYzLDE3ICsyNzUsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIHBhcnNlX2Rlc2Moc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuIFxcdHBhcnNlZC1cXHUwMDNlbWIgPSB4cF9tYl9kZXNjKGRlc2MpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lXFxuLXUzMiB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbi1cXHRcXHRcXHQgICAgICB1MzIgbWF4KVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCB4c2tfdHhfYmF0Y2hcXG4reHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4KVxcbiB7XFxuLVxcdHUzMiBjYWNoZWRfY29ucyA9IHEtXFx1MDAzZWNhY2hlZF9jb25zLCBuYl9lbnRyaWVzID0gMDtcXG4tXFx0c3RydWN0IHhkcF9kZXNjICpkZXNjcyA9IHBvb2wtXFx1MDAzZXR4X2Rlc2NzO1xcbi1cXHR1MzIgdG90YWxfZGVzY3MgPSAwLCBucl9mcmFncyA9IDA7XFxuK1xcdGJvb2wgZHJhaW4gPSBSRUFEX09OQ0UoeHMtXFx1MDAzZWRyYWluX2NvbnQpO1xcbitcXHR1MzIgY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwLCByZWxlYXNlZDtcXG4rXFx0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xcbitcXHRzdHJ1Y3QgeHNrX3F1ZXVlICpxID0geHMtXFx1MDAzZXR4O1xcbitcXHR1MzIgbnJfZnJhZ3MgPSAwO1xcbitcXG4rXFx0Y2FjaGVkX2NvbnMgPSBxLVxcdTAwM2VjYWNoZWRfY29ucztcXG4gXFxuLVxcdC8qIHRyYWNrIGZpcnN0IGVudHJ5LCBpZiBzdHVtYmxlIHVwb24gKmFueSogaW52YWxpZCBkZXNjcmlwdG9yLCByZXdpbmRcXG4tXFx0ICogY3VycmVudCBwYWNrZXQgdGhhdCBjb25zaXN0cyBvZiBmcmFncyBhbmQgc3RvcCB0aGUgcHJvY2Vzc2luZ1xcbi1cXHQgKi9cXG4gXFx0d2hpbGUgKGNhY2hlZF9jb25zICE9IHEtXFx1MDAzZWNhY2hlZF9wcm9kIFxcdTAwMjZcXHUwMDI2IG5iX2VudHJpZXMgXFx1MDAzYyBtYXgpIHtcXG4gXFx0XFx0c3RydWN0IHhkcF9yeHR4X3JpbmcgKnJpbmcgPSAoc3RydWN0IHhkcF9yeHR4X3JpbmcgKilxLVxcdTAwM2VyaW5nO1xcbiBcXHRcXHR1MzIgaWR4ID0gY2FjaGVkX2NvbnMgXFx1MDAyNiBxLVxcdTAwM2VyaW5nX21hc2s7XFxuQEAgLTI4MiwyNiArMjk1LDQ5IEBAIHUzMiB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbiBcXHRcXHRkZXNjc1tuYl9lbnRyaWVzXSA9IHJpbmctXFx1MDAzZWRlc2NbaWR4XTtcXG4gXFx0XFx0Y2FjaGVkX2NvbnMrKztcXG4gXFx0XFx0cGFyc2VfZGVzYyhxLCBwb29sLCBcXHUwMDI2ZGVzY3NbbmJfZW50cmllc10sIFxcdTAwMjZwYXJzZWQpO1xcbi1cXHRcXHRpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpIHtcXG4rXFx0XFx0XFx0aWYgKCFkcmFpbiBcXHUwMDI2XFx1MDAyNiAhbnJfZnJhZ3MgXFx1MDAyNlxcdTAwMjYgIXBhcnNlZC5tYilcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRcXHRkcmFpbiA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG5yX2ZyYWdzKys7XFxuK1xcdFxcdG5iX2VudHJpZXMrKztcXG4gXFxuIFxcdFxcdGlmIChsaWtlbHkoIXBhcnNlZC5tYikpIHtcXG4tXFx0XFx0XFx0dG90YWxfZGVzY3MgKz0gKG5yX2ZyYWdzICsgMSk7XFxuLVxcdFxcdFxcdG5yX2ZyYWdzID0gMDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0bnJfZnJhZ3MrKztcXG4tXFx0XFx0XFx0aWYgKG5yX2ZyYWdzID09IHBvb2wtXFx1MDAzZXhkcF96Y19tYXhfc2Vncykge1xcbitcXHRcXHRcXHRpZiAodW5saWtlbHkoZHJhaW4pKSB7XFxuK1xcdFxcdFxcdFxcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRSh4cy1cXHUwMDNlZHJhaW5fY29udCwgZmFsc2UpO1xcbiBcXHRcXHRcXHRcXHRucl9mcmFncyA9IDA7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRiYXRjaC50eF9kZXNjcyArPSBucl9mcmFncztcXG4rXFx0XFx0XFx0bnJfZnJhZ3MgPSAwO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG5yX2ZyYWdzID09IHBvb2wtXFx1MDAzZXhkcF96Y19tYXhfc2VncylcXG4rXFx0XFx0XFx0ZHJhaW4gPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobnJfZnJhZ3MpIHtcXG4rXFx0XFx0aWYgKGRyYWluKSB7XFxuK1xcdFxcdFxcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcXG4rXFx0XFx0XFx0V1JJVEVfT05DRSh4cy1cXHUwMDNlZHJhaW5fY29udCwgdHJ1ZSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGlmIChuYl9lbnRyaWVzID09IG1heClcXG4rXFx0XFx0XFx0XFx0YmF0Y2guYnVkZ2V0X2xpbWl0ZWQgPSB0cnVlO1xcbitcXHRcXHRcXHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcXG4gXFx0XFx0fVxcbi1cXHRcXHRuYl9lbnRyaWVzKys7XFxuIFxcdH1cXG4gXFxuLVxcdGNhY2hlZF9jb25zIC09IG5yX2ZyYWdzO1xcbitcXHRyZWxlYXNlZCA9IGNhY2hlZF9jb25zIC0gcS1cXHUwMDNlY2FjaGVkX2NvbnM7XFxuIFxcdC8qIFJlbGVhc2UgdmFsaWQgcGx1cyBhbnkgaW52YWxpZCBlbnRyaWVzICovXFxuLVxcdHhza3FfY29uc19yZWxlYXNlX24ocSwgY2FjaGVkX2NvbnMgLSBxLVxcdTAwM2VjYWNoZWRfY29ucyk7XFxuLVxcdHJldHVybiB0b3RhbF9kZXNjcztcXG4rXFx0eHNrcV9jb25zX3JlbGVhc2VfbihxLCByZWxlYXNlZCk7XFxuK1xcdGJhdGNoLmNvbnN1bWVkX2Rlc2NzID0gcmVsZWFzZWQ7XFxuK1xcdHJldHVybiBiYXRjaDtcXG4gfVxcbiBcXG4gLyogRnVuY3Rpb25zIGZvciBjb25zdW1lcnMgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG5pbmRleCA2ZWI5MDk2ZDA4NGMwMS4uN2FiYjQ5MzVlZGY5YWQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG5AQCAtNDI3LDE0ICs0MjcsMTQgQEAgc3RhdGljIHUzMiBwa3RfbmJfZnJhZ3ModTMyIGZyYW1lX3NpemUsIHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtLCBzdHJ1Y3QgcGtcXG4gXFx0fVxcbiBcXG4gXFx0LyogU2VhcmNoIGZvciB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgaW4gdmVyYmF0aW0gbW9kZSAqL1xcbi1cXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVxcdTAwM2VvcHRpb25zKSB8fCAhcGt0LVxcdTAwM2V2YWxpZClcXG4rXFx0aWYgKCFwa3RfY29udGludWVzKHBrdC1cXHUwMDNlb3B0aW9ucykpXFxuIFxcdFxcdHJldHVybiBuYl9mcmFncztcXG4gXFxuIFxcdG5leHRfZnJhZyA9IHBrdF9zdHJlYW0tXFx1MDAzZWN1cnJlbnRfcGt0X25iO1xcbiBcXHRwa3QrKztcXG4gXFx0d2hpbGUgKG5leHRfZnJhZysrIFxcdTAwM2MgcGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cykge1xcbiBcXHRcXHRuYl9mcmFncysrO1xcbi1cXHRcXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVxcdTAwM2VvcHRpb25zKSB8fCAhcGt0LVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0aWYgKCFwa3RfY29udGludWVzKHBrdC1cXHUwMDNlb3B0aW9ucykpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRwa3QrKztcXG4gXFx0fVxcbkBAIC02NjUsMTEgKzY2NSwxMSBAQCBzdGF0aWMgc3RydWN0IHBrdF9zdHJlYW0gKl9fcGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc1xcbiBcXHRcXHRcXHRpZiAoIWZyYW1lLVxcdTAwM2V2YWxpZCB8fCAhcGt0X2NvbnRpbnVlcyhmcmFtZS1cXHUwMDNlb3B0aW9ucykpXFxuIFxcdFxcdFxcdFxcdHBheWxvYWQrKztcXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0aWYgKGZyYW1lLVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0XFx0aWYgKGZyYW1lLVxcdTAwM2V2YWxpZCkge1xcbiBcXHRcXHRcXHRcXHRsZW4gKz0gZnJhbWUtXFx1MDAzZWxlbjtcXG4tXFx0XFx0XFx0aWYgKGZyYW1lLVxcdTAwM2V2YWxpZCBcXHUwMDI2XFx1MDAyNiBwa3RfY29udGludWVzKGZyYW1lLVxcdTAwM2VvcHRpb25zKSlcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcbitcXHRcXHRcXHRcXHRpZiAocGt0X2NvbnRpbnVlcyhmcmFtZS1cXHUwMDNlb3B0aW9ucykpXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHBrdC1cXHUwMDNlcGt0X25iID0gcGt0X25iO1xcbiBcXHRcXHRcXHRwa3QtXFx1MDAzZWxlbiA9IGxlbjtcXG4gXFx0XFx0XFx0cGt0LVxcdTAwM2V2YWxpZCA9IGZyYW1lLVxcdTAwM2V2YWxpZDtcXG5AQCAtMTIwOSw2ICsxMjA5LDcgQEAgc3RhdGljIGludCBfX3NlbmRfcGt0cyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB4c2stXFx1MDAzZWJhdGNoX3NpemU7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgcGt0ICpwa3QgPSBwa3Rfc3RyZWFtX2dldF9uZXh0X3R4X3BrdChwa3Rfc3RyZWFtKTtcXG4gXFx0XFx0dTMyIG5iX2ZyYWdzX2xlZnQsIG5iX2ZyYWdzLCBieXRlc193cml0dGVuID0gMDtcXG4rXFx0XFx0c3RydWN0IHBrdCAqZmlyc3RfcGt0ID0gcGt0O1xcbiBcXG4gXFx0XFx0aWYgKCFwa3QpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xMjUzLDYgKzEyNTQsOCBAQCBzdGF0aWMgaW50IF9fc2VuZF9wa3RzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayxcXG4gXFx0XFx0aWYgKHBrdCBcXHUwMDI2XFx1MDAyNiBwa3QtXFx1MDAzZXZhbGlkKSB7XFxuIFxcdFxcdFxcdHZhbGlkX3BrdHMrKztcXG4gXFx0XFx0XFx0dmFsaWRfZnJhZ3MgKz0gbmJfZnJhZ3M7XFxuK1xcdFxcdH0gZWxzZSBpZiAocGt0X3N0cmVhbS1cXHUwMDNldmVyYmF0aW0gXFx1MDAyNlxcdTAwMjYgcGt0X2NvbnRpbnVlcyhmaXJzdF9wa3QtXFx1MDAzZW9wdGlvbnMpKSB7XFxuK1xcdFxcdFxcdHZhbGlkX2ZyYWdzICs9IG5iX2ZyYWdzO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTIwOTksMTMgKzIxMDIsMTYgQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdFxcdHswLCAwLCAwLCBmYWxzZSwgMH0sXFxuIFxcdFxcdC8qIEludmFsaWQgYWRkcmVzcyBpbiB0aGUgc2Vjb25kIGZyYW1lICovXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxcbi1cXHRcXHR7dW1lbV9zeiwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcXG4rXFx0XFx0e3VtZW1fc3ogKiAyLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxcbitcXHRcXHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXFxuIFxcdFxcdC8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi9cXG4gXFx0XFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuK1xcdFxcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcXG4gXFx0XFx0LyogSW52YWxpZCBvcHRpb25zIGluIHRoZSBtaWRkbGUgKi9cXG4gXFx0XFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhTS19ERVNDX19JTlZBTElEX09QVElPTn0sXFxuK1xcdFxcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcXG4gXFx0XFx0LyogVHJhbnNtaXQgMiBmcmFncywgcmVjZWl2ZSAzICovXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIFhEUF9QS1RfQ09OVER9LFxcbiBcXHRcXHR7MCwgWFNLX1VNRU1fX01BWF9GUkFNRV9TSVpFLCAwLCB0cnVlLCAwfSxcXG5AQCAtMjExNyw4ICsyMTIzLDggQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcbiBcXHRpZiAodW1lbS1cXHUwMDNldW5hbGlnbmVkX21vZGUpIHtcXG4gXFx0XFx0LyogQ3Jvc3NpbmcgYSBjaHVuayBib3VuZGFyeSBhbGxvd2VkICovXFxuLVxcdFxcdHBrdHNbMTJdLnZhbGlkID0gdHJ1ZTtcXG4tXFx0XFx0cGt0c1sxM10udmFsaWQgPSB0cnVlO1xcbitcXHRcXHRwa3RzWzE1XS52YWxpZCA9IHRydWU7XFxuK1xcdFxcdHBrdHNbMTZdLnZhbGlkID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4gXFx0dGVzdC1cXHUwMDNlbXR1ID0gTUFYX0VUSF9KVU1CT19TSVpFO1xcbkBAIC0yMjcwLDcgKzIyNzYsNyBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXHRcXHRtYXhfZnJhZ3MgKz0gMTtcXG4gXFx0fVxcbiBcXG4tXFx0cGt0cyA9IGNhbGxvYygyICogbWF4X2ZyYWdzICsgMiwgc2l6ZW9mKHN0cnVjdCBwa3QpKTtcXG4rXFx0cGt0cyA9IGNhbGxvYygyICogbWF4X2ZyYWdzICsgMywgc2l6ZW9mKHN0cnVjdCBwa3QpKTtcXG4gXFx0aWYgKCFwa3RzKVxcbiBcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbiBcXG5AQCAtMjI4OCwyNCArMjI5NCwzMCBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXHR9XFxuIFxcdHBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDtcXG4gXFxuLVxcdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0XFxuLVxcdCAqIGNvbnRpbnVlcyBvbiB0aGUgbGFzdCBmcmFnXFxuLVxcdCAqL1xcbi1cXHRmb3IgKGkgPSBtYXhfZnJhZ3MgKyAxOyBpIFxcdTAwM2MgMiAqIG1heF9mcmFncyArIDE7IGkrKykge1xcbitcXHQvKiBBbiBpbnZhbGlkIHBhY2tldCB3aXRoIHRoZSBtYXggKyAxIGFtb3VudCBvZiBmcmFncyAqL1xcbitcXHRmb3IgKGkgPSBtYXhfZnJhZ3MgKyAxOyBpIFxcdTAwM2MgMiAqIG1heF9mcmFncyArIDI7IGkrKykge1xcbiBcXHRcXHRwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTtcXG4gXFx0XFx0cGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDtcXG4tXFx0XFx0cGt0c1tpXS52YWxpZCA9IGZhbHNlO1xcbitcXHRcXHRwa3RzW2ldLnZhbGlkID0gdHJ1ZTtcXG4gXFx0fVxcbitcXHRwa3RzWzIgKiBtYXhfZnJhZ3MgKyAxXS5vcHRpb25zID0gMDtcXG4gXFxuIFxcdC8qIFZhbGlkIHBhY2tldCBmb3Igc3luY2ggKi9cXG4tXFx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0ubGVuID0gTUlOX1BLVF9TSVpFO1xcbi1cXHRwa3RzWzIgKiBtYXhfZnJhZ3MgKyAxXS52YWxpZCA9IHRydWU7XFxuK1xcdHBrdHNbMiAqIG1heF9mcmFncyArIDJdLmxlbiA9IE1JTl9QS1RfU0laRTtcXG4rXFx0cGt0c1syICogbWF4X2ZyYWdzICsgMl0udmFsaWQgPSB0cnVlO1xcbiBcXG4tXFx0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAyKSkge1xcbitcXHRpZiAocGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20odGVzdCwgcGt0cywgMiAqIG1heF9mcmFncyArIDMpKSB7XFxuIFxcdFxcdGZyZWUocGt0cyk7XFxuIFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIFRoZSBnZW5lcmF0ZWQgVHggc3RyZWFtIG11c3Qga2VlcCB0aGUgdG9vLWJpZyBwYWNrZXQgdmFsaWQgc28gdGhhdFxcbitcXHQgKiBfX3NlbmRfcGt0cygpIGFjY291bnRzIGl0cyBkZXNjcmlwdG9ycyBpbiBvdXRzdGFuZGluZ190eC4gVGhlIFJ4XFxuK1xcdCAqIHN0cmVhbSwgaG93ZXZlciwgbXVzdCBub3QgZXhwZWN0IHRoaXMgcGFja2V0IG9uIHRoZSB3aXJlLlxcbitcXHQgKi9cXG4rXFx0dGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhzay1cXHUwMDNlcGt0X3N0cmVhbS1cXHUwMDNlcGt0c1syXS52YWxpZCA9IGZhbHNlO1xcbitcXHR0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrLVxcdTAwM2Vwa3Rfc3RyZWFtLVxcdTAwM2VuYl92YWxpZF9lbnRyaWVzLS07XFxuK1xcbiBcXHRyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7XFxuIFxcdGZyZWUocGt0cyk7XFxuIFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjMzOjQ2LjkyMDg1NDg1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzNzY5OTYxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfdHhfY29tcGxldGVkXCIsXG4gICAgXCJ4c2tfdHhfY29tbWl0X2JhdGNoXCIsXG4gICAgXCJfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZFwiLFxuICAgIFwieHNrX2Ryb3Bfc2tiXCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiX3plcm9jb3B5XCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiXCIsXG4gICAgXCJfX3hza19nZW5lcmljX3htaXRcIixcbiAgICBcInhwX2FsbG9jX3R4X2Rlc2NzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCBtdWx0aS1idWZmZXIgKFNHKSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljLCBpbnRyb2R1Y2luZyBiYXRjaGluZyBhbmQgcmVjbGFpbSBkZXNjcmlwdG9ycyB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgYm91bmRhcmllcyBjb3JyZWN0bHkuIEl0IG1vZGlmaWVzIGNvcmUgWERQIHNvY2tldCBjb2RlIGluIG5ldC94ZHAveHNrLmMgYW5kIG5ldC94ZHAveHNrX3F1ZXVlLmguIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMzMGQ0ZjdlYmMxYWVmNzk2NmFiMzllZWQ5ZmRhNGE3NTk5MDhmZThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxNzozMzo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmggYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXG5pbmRleCBlYmFjNjBhM2Q4YTE3Yi4uOGI1MTg3NmVmYmVkMWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZHBfc29jay5oXG4rKysgYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXG5AQCAtODAsNiArODAsNyBAQCBzdHJ1Y3QgeGRwX3NvY2sge1xuIFx0ICogY2FsbCBvZiBfX3hza19nZW5lcmljX3htaXQoKS5cbiBcdCAqL1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdGJvb2wgZHJhaW5fY29udDtcbiBcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbWFwX2xpc3Q7XG4gXHQvKiBQcm90ZWN0cyBtYXBfbGlzdCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaCBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxuaW5kZXggY2NiM2IzNTAwMDFmMjQuLmZiNTllMjA1YWM3ZDdlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXG4rKysgYi9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcbkBAIC03OCw2ICs3OCw5IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sIHtcbiBcdHUzMiBjaHVua19zaXplO1xuIFx0dTMyIGNodW5rX3NoaWZ0O1xuIFx0dTMyIGZyYW1lX2xlbjtcbitcdHUzMiB0eF9kZXNjc19uZW50cmllcztcbitcdHUzMiByZWNsYWltX2Rlc2NzO1xuK1x0dTMyIHR4X3pjX3BlbmRpbmdfZGVzY3M7XG4gXHR1MzIgeGRwX3pjX21heF9zZWdzO1xuIFx0dTggdHhfbWV0YWRhdGFfbGVuOyAvKiBpbmhlcml0ZWQgZnJvbSB1bWVtICovXG4gXHR1OCBjYWNoZWRfbmVlZF93YWtldXA7XG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmNcbmluZGV4IGI5NzBmMzBlYTliOWQ4Li43ZDhiNDJjNGMyMTRiYSAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrLmNcbisrKyBiL25ldC94ZHAveHNrLmNcbkBAIC00OTksNiArNDk5LDIzIEBAIHZvaWQgX194c2tfbWFwX2ZsdXNoKHN0cnVjdCBsaXN0X2hlYWQgKmZsdXNoX2xpc3QpXG4gXG4gdm9pZCB4c2tfdHhfY29tcGxldGVkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfZW50cmllcylcbiB7XG4rXHR1MzIgcmVjbGFpbV9kZXNjcyA9IFJFQURfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MpO1xuK1xuK1x0aWYgKHVubGlrZWx5KHJlY2xhaW1fZGVzY3MpKSB7XG4rXHRcdHUzMiBwZW5kaW5nX2Rlc2NzID0gUkVBRF9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyk7XG4rXG4rXHRcdGlmIChuYl9lbnRyaWVzIFx1MDAzYyBwZW5kaW5nX2Rlc2NzKSB7XG4rXHRcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MsXG4rXHRcdFx0XHQgICBwZW5kaW5nX2Rlc2NzIC0gbmJfZW50cmllcyk7XG4rXHRcdFx0eHNrcV9wcm9kX3N1Ym1pdF9uKHBvb2wtXHUwMDNlY3EsIG5iX2VudHJpZXMpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuK1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcywgMCk7XG4rXHRcdG5iX2VudHJpZXMgKz0gcmVjbGFpbV9kZXNjcztcbitcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MsIDApO1xuK1x0fVxuK1xuIFx0eHNrcV9wcm9kX3N1Ym1pdF9uKHBvb2wtXHUwMDNlY3EsIG5iX2VudHJpZXMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHhza190eF9jb21wbGV0ZWQpO1xuQEAgLTU3NCwyMiArNTkxLDE2OSBAQCBzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50clxuIFx0cmV0dXJuIG5iX3BrdHM7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHhza190eF9jb21taXRfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4rXHRcdFx0XHRzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaCxcbitcdFx0XHRcdHUzMiBjcV9jYWNoZWRfcHJvZClcbit7XG4rXHR1MzIgbmJfZGVzY3MgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoYmF0Y2gpO1xuK1xuK1x0aWYgKCFuYl9kZXNjcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0eHNrcV9wcm9kX3dyaXRlX2FkZHJfYmF0Y2gocG9vbC1cdTAwM2VjcSwgcG9vbC1cdTAwM2V0eF9kZXNjcywgbmJfZGVzY3MpO1xuK1xuK1x0aWYgKHVubGlrZWx5KGJhdGNoLVx1MDAzZXJlY2xhaW1fZGVzY3MpKSB7XG4rXHRcdHUzMiBjcV9wZW5kaW5nX2Rlc2NzO1xuK1xuK1x0XHQvKiBDUSBpcyBwb3NpdGlvbmFsLiBEZXNjcmlwdG9ycyBhbHJlYWR5IHdyaXR0ZW4gYnV0IG5vdFxuK1x0XHQgKiBzdWJtaXR0ZWQgbXVzdCBjb21wbGV0ZSBiZWZvcmUgYW55IHJlY2xhaW0tb25seSBkZXNjcmlwdG9yc1xuK1x0XHQgKiBhcHBlbmRlZCBiZWxvdy5cbitcdFx0ICovXG4rXHRcdGNxX3BlbmRpbmdfZGVzY3MgPSBjcV9jYWNoZWRfcHJvZCAtIHhza3FfZ2V0X3Byb2QocG9vbC1cdTAwM2VjcSk7XG4rXG4rXHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLCBiYXRjaC1cdTAwM2V0eF9kZXNjcyArIGNxX3BlbmRpbmdfZGVzY3MpO1xuK1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcywgYmF0Y2gtXHUwMDNlcmVjbGFpbV9kZXNjcyk7XG4rXHRcdGlmICh1bmxpa2VseSghcG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzKSlcbitcdFx0XHR4c2tfdHhfY29tcGxldGVkKHBvb2wsIDApO1xuK1x0fVxuK31cbitcbitzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxuK19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuK1x0XHRcdFx0IHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXhfZGVzY3MpXG4re1xuK1x0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xuK1x0dTMyIGVudHJpZXM7XG4rXG4rXHRlbnRyaWVzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIG1heF9kZXNjcyk7XG4rXHRpZiAoIWVudHJpZXMpXG4rXHRcdHJldHVybiBiYXRjaDtcbitcbitcdGJhdGNoID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cywgcG9vbCwgZGVzY3MsIGVudHJpZXMpO1xuK1x0aWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2YmF0Y2gpKSB7XG4rXHRcdHhzLVx1MDAzZXR4LVx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzKys7XG4rXHRcdGlmIChiYXRjaC5jb25zdW1lZF9kZXNjcykge1xuK1x0XHRcdF9feHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuK1x0XHRcdHhzLVx1MDAzZXNrLnNrX3dyaXRlX3NwYWNlKFx1MDAyNnhzLVx1MDAzZXNrKTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gYmF0Y2g7XG4rXHR9XG4rXG4rXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbitcdHhzLVx1MDAzZXNrLnNrX3dyaXRlX3NwYWNlKFx1MDAyNnhzLVx1MDAzZXNrKTtcbitcdHJldHVybiBiYXRjaDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcbit4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2Rlc2NzKVxuK3tcbitcdHUzMiBjcV9kZXNjc19iZWZvcmUsIGNxX2Rlc2NzX2FmdGVyO1xuK1x0c3RydWN0IHhza190eF9iYXRjaCBzdW1fYmF0Y2ggPSB7fTtcbitcdGJvb2wgYnVkZ2V0X2V4aGF1c3RlZDtcbitcdHUzMiBwZXJfc29ja2V0X2J1ZGdldDtcbitcdHN0cnVjdCB4ZHBfc29jayAqeHM7XG4rXG4rXHRtYXhfZGVzY3MgPSB4c2txX3Byb2RfbmJfZnJlZShwb29sLVx1MDAzZWNxLCBtYXhfZGVzY3MpO1xuK1x0aWYgKCFtYXhfZGVzY3MpXG4rXHRcdHJldHVybiBzdW1fYmF0Y2g7XG4rXG4rXHQvKiBUaGUgZmFpcm5lc3MgcXVvdGEgbXVzdCBhbGxvdyBvbmUgbWF4aW11bS1zaXplZCB2YWxpZCBwYWNrZXQuICovXG4rXHRwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULFxuK1x0XHRcdFx0ICBwb29sLVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4rXG4rYWdhaW46XG4rXHRidWRnZXRfZXhoYXVzdGVkID0gZmFsc2U7XG4rXHRjcV9kZXNjc19iZWZvcmUgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2c3VtX2JhdGNoKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0LCB0eF9saXN0KSB7XG4rXHRcdHUzMiBidWRnZXQsIGJ1ZGdldF9sZWZ0LCBvZmZzZXQsIHJlbWFpbmluZztcbitcdFx0c3RydWN0IHhza190eF9iYXRjaCBjdXJyX2JhdGNoO1xuK1xuK1x0XHQvKiBPbmNlIHJlY2xhaW0tb25seSBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gYXBwZW5kZWQgdG8gdGhlIENRIGFkZHJlc3NcbitcdFx0ICogYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9ycyBmcm9tIGFub3RoZXJcbitcdFx0ICogc29ja2V0IGFmdGVyIHRoZW0uIHhza190eF9jb21wbGV0ZWQoKSByZWxpZXMgb24gYWxsIGRyaXZlci12aXNpYmxlXG4rXHRcdCAqIGRlc2NyaXB0b3JzIHByZWNlZGluZyBhbGwgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLlxuK1x0XHQgKi9cbitcdFx0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBiZSBnZW50bGUgd2hlbiBwbGF5aW5nIHdpdGggcG9vbC1cdTAwM2V0eF9kZXNjcyAqL1xuK1x0XHRvZmZzZXQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2c3VtX2JhdGNoKTtcbitcdFx0aWYgKG9mZnNldCBcdTAwM2U9IG1heF9kZXNjcylcbitcdFx0XHRicmVhaztcbitcbitcdFx0aWYgKHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCBcdTAwM2U9IHBlcl9zb2NrZXRfYnVkZ2V0KSB7XG4rXHRcdFx0aWYgKHhza3FfY29uc19uYl9lbnRyaWVzKHhzLVx1MDAzZXR4LCAxKSlcbitcdFx0XHRcdGJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGJ1ZGdldF9sZWZ0ID0gcGVyX3NvY2tldF9idWRnZXQgLSB4cy1cdTAwM2V0eF9idWRnZXRfc3BlbnQ7XG4rXHRcdHJlbWFpbmluZyA9IG1heF9kZXNjcyAtIG9mZnNldDtcbitcdFx0YnVkZ2V0ID0gbWluKHJlbWFpbmluZywgYnVkZ2V0X2xlZnQpO1xuK1xuK1x0XHRjdXJyX2JhdGNoID0gX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gocG9vbCwgeHMsXG4rXHRcdFx0XHRcdFx0XHQgICAgICBwb29sLVx1MDAzZXR4X2Rlc2NzICsgb2Zmc2V0LFxuK1x0XHRcdFx0XHRcdFx0ICAgICAgYnVkZ2V0KTtcbitcdFx0aWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2Y3Vycl9iYXRjaCkpIHtcbitcdFx0XHRpZiAoY3Vycl9iYXRjaC5idWRnZXRfbGltaXRlZCBcdTAwMjZcdTAwMjYgYnVkZ2V0X2xlZnQgXHUwMDNjIHJlbWFpbmluZylcbitcdFx0XHRcdGJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlO1xuK1x0XHRcdHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCArPSBjdXJyX2JhdGNoLmNvbnN1bWVkX2Rlc2NzO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCArPSBjdXJyX2JhdGNoLmNvbnN1bWVkX2Rlc2NzO1xuK1x0XHRzdW1fYmF0Y2gudHhfZGVzY3MgKz0gY3Vycl9iYXRjaC50eF9kZXNjcztcbitcdFx0c3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgKz0gY3Vycl9iYXRjaC5yZWNsYWltX2Rlc2NzO1xuK1x0fVxuK1xuK1x0Y3FfZGVzY3NfYWZ0ZXIgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2c3VtX2JhdGNoKTtcbitcbitcdGlmIChzdW1fYmF0Y2gucmVjbGFpbV9kZXNjcyB8fCBjcV9kZXNjc19hZnRlciBcdTAwM2U9IG1heF9kZXNjcylcbitcdFx0cmV0dXJuIHN1bV9iYXRjaDtcbitcbitcdC8qIENvbnRpbnVlIGZpbGxpbmcgdGhlIGJhdGNoIHdoaWxlIHRoaXMgcGFzcyBtYWRlIHByb2dyZXNzICovXG4rXHRpZiAoY3FfZGVzY3NfYmVmb3JlICE9IGNxX2Rlc2NzX2FmdGVyKVxuK1x0XHRnb3RvIGFnYWluO1xuK1xuK1x0aWYgKCFidWRnZXRfZXhoYXVzdGVkKVxuK1x0XHRyZXR1cm4gc3VtX2JhdGNoO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsIFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpXG4rXHRcdHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCA9IDA7XG4rXHRnb3RvIGFnYWluO1xuK31cbitcbiB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcbiB7XG4rXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XG4gXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xuK1x0dTMyIGNxX2NhY2hlZF9wcm9kO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0aWYgKHVubGlrZWx5KFJFQURfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MpKSlcbitcdFx0Z290byBvdXQ7XG4rXHRuYl9wa3RzID0gbWluKG5iX3BrdHMsIHBvb2wtXHUwMDNldHhfZGVzY3NfbmVudHJpZXMpO1xuK1x0aWYgKCFuYl9wa3RzKVxuK1x0XHRnb3RvIG91dDtcbiBcdGlmICghbGlzdF9pc19zaW5ndWxhcihcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0KSkge1xuLVx0XHQvKiBGYWxsYmFjayB0byB0aGUgbm9uLWJhdGNoZWQgdmVyc2lvbiAqL1xuK1x0XHQvKiBLZWVwIHRoZSBsZWdhY3kgb25lLWRlc2NyaXB0b3IgZmFsbGJhY2sgZm9yIG5vbi1TRyB1c2Vycy4gIFRoZVxuK1x0XHQgKiBzaGFyZWQgU0cgcGF0aCBuZWVkcyBwYWNrZXQtZnJhbWVkIHBhcnNpbmcgc28gaW52YWxpZC9vdmVyZmxvd2VkXG4rXHRcdCAqIG11bHRpLWJ1ZmZlciBwYWNrZXRzIGFyZSBkcmFpbmVkIGFzIGEgdW5pdC5cbitcdFx0ICovXG4rXHRcdGlmIChwb29sLVx1MDAzZXVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpIHtcbitcdFx0XHRiYXRjaCA9IHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gocG9vbCwgbmJfcGt0cyk7XG4rXHRcdFx0Y3FfY2FjaGVkX3Byb2QgPSBwb29sLVx1MDAzZWNxLVx1MDAzZWNhY2hlZF9wcm9kO1xuK1x0XHRcdHhza190eF9jb21taXRfYmF0Y2gocG9vbCwgXHUwMDI2YmF0Y2gsIGNxX2NhY2hlZF9wcm9kKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2socG9vbCwgbmJfcGt0cyk7XG4gXHR9XG4gXG4gXHR4cyA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2V4c2tfdHhfbGlzdCwgc3RydWN0IHhkcF9zb2NrLCB0eF9saXN0KTtcbi1cdGlmICgheHMpIHtcbi1cdFx0bmJfcGt0cyA9IDA7XG4rXHRpZiAoIXhzKVxuIFx0XHRnb3RvIG91dDtcbi1cdH1cbiBcbiBcdG5iX3BrdHMgPSB4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cdTAwM2V0eCwgbmJfcGt0cyk7XG4gXG5AQCAtNjAzLDE5ICs3NjcsMTggQEAgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpXG4gXHRpZiAoIW5iX3BrdHMpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0bmJfcGt0cyA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMtXHUwMDNldHgsIHBvb2wsIG5iX3BrdHMpO1xuLVx0aWYgKCFuYl9wa3RzKSB7XG4tXHRcdHhzLVx1MDAzZXR4LVx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzKys7XG4rXHRiYXRjaCA9IF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIHhzLCBwb29sLVx1MDAzZXR4X2Rlc2NzLFxuK1x0XHRcdFx0XHRcdCBuYl9wa3RzKTtcbitcdG5iX3BrdHMgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2YmF0Y2gpO1xuK1x0aWYgKCFuYl9wa3RzKVxuIFx0XHRnb3RvIG91dDtcbi1cdH1cbiBcbi1cdF9feHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuLVx0eHNrcV9wcm9kX3dyaXRlX2FkZHJfYmF0Y2gocG9vbC1cdTAwM2VjcSwgcG9vbC1cdTAwM2V0eF9kZXNjcywgbmJfcGt0cyk7XG4tXHR4cy1cdTAwM2Vzay5za193cml0ZV9zcGFjZShcdTAwMjZ4cy1cdTAwM2Vzayk7XG4rXHRjcV9jYWNoZWRfcHJvZCA9IHBvb2wtXHUwMDNlY3EtXHUwMDNlY2FjaGVkX3Byb2Q7XG4rXHR4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsIFx1MDAyNmJhdGNoLCBjcV9jYWNoZWRfcHJvZCk7XG4gXG4gb3V0OlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRyZXR1cm4gbmJfcGt0cztcbitcdHJldHVybiBiYXRjaC50eF9kZXNjcztcbiB9XG4gRVhQT1JUX1NZTUJPTCh4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gpO1xuIFxuQEAgLTczNyw2ICs5MDAsMTkgQEAgc3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1MzIgaWR4O1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cG9vbC1cdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcbitcdGlkeCA9IHhza3FfZ2V0X3Byb2QocG9vbC1cdTAwM2VjcSk7XG4rXHR4c2txX3Byb2Rfd3JpdGVfYWRkcihwb29sLVx1MDAzZWNxLCBpZHgsIGRlc2MtXHUwMDNlYWRkcik7XG4rXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgMSk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlY3FfcHJvZF9sb2NrLCBmbGFncyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHhza19jcV9jYW5jZWxfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbilcbiB7XG4gXHRzcGluX2xvY2soXHUwMDI2cG9vbC1cdTAwM2VjcS1cdTAwM2VjcV9jYWNoZWRfcHJvZF9sb2NrKTtcbkBAIC03OTQsOCArOTcwLDExIEBAIHN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIHN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHhkcF9zayhza2ItXHUwMDNlc2spLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MgKz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xuLVx0eHNrX2NvbnN1bWVfc2tiKHNrYik7XG4rXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cdTAwM2Vzayk7XG4rXG4rXHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzICs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcbitcdGNvbnN1bWVfc2tiKHNrYik7XG4rXHR4cy1cdTAwM2Vza2IgPSBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxuQEAgLTg3Nyw3ICsxMDU2LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4gXHRcdC8qIGluIGNhc2Ugb2YgLUVPVkVSRkxPVyB0aGF0IGNvdWxkIGhhcHBlbiBiZWxvdyxcbi1cdFx0ICogeHNrX2NvbnN1bWVfc2tiKCkgd2lsbCByZWxlYXNlIHRoaXMgbm9kZSBhcyB3aG9sZSBza2JcbitcdFx0ICogeHNrX2Ryb3Bfc2tiKCkgd2lsbCByZWxlYXNlIHRoaXMgbm9kZSBhcyB3aG9sZSBza2JcbiBcdFx0ICogd291bGQgYmUgZHJvcHBlZCwgd2hpY2ggaW1wbGllcyBmcmVlaW5nIGFsbCBsaXN0IGVsZW1lbnRzXG4gXHRcdCAqL1xuIFx0XHR4c2tfYWRkci1cdTAwM2VhZGRyc1t4c2tfYWRkci1cdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cdTAwM2VhZGRyO1xuQEAgLTk2OSw2ICsxMTQ4LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gXHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuIFx0XHRcdH1cbiBcbitcdFx0XHR4c2tfYWRkci1cdTAwM2VhZGRyc1t4c2tfYWRkci1cdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cdTAwM2VhZGRyO1xuK1xuIFx0XHRcdGlmICh1bmxpa2VseShucl9mcmFncyA9PSAoTUFYX1NLQl9GUkFHUyAtIDEpIFx1MDAyNlx1MDAyNiB4cF9tYl9kZXNjKGRlc2MpKSkge1xuIFx0XHRcdFx0ZXJyID0gLUVPVkVSRkxPVztcbiBcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG5AQCAtOTg2LDggKzExNjcsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcbiBcdFx0XHRza2JfYWRkX3J4X2ZyYWcoc2tiLCBucl9mcmFncywgcGFnZSwgMCwgbGVuLCBQQUdFX1NJWkUpO1xuIFx0XHRcdHJlZmNvdW50X2FkZChQQUdFX1NJWkUsIFx1MDAyNnhzLVx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xuLVxuLVx0XHRcdHhza19hZGRyLVx1MDAzZWFkZHJzW3hza19hZGRyLVx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVx1MDAzZWFkZHI7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xMDYwLDExICsxMjM5LDIyIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuK1x0XHRpZiAodW5saWtlbHkoeHMtXHUwMDNlZHJhaW5fY29udCkpIHtcbitcdFx0XHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cdTAwM2Vwb29sLCBcdTAwMjZkZXNjKTtcbitcbitcdFx0XHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzKys7XG4rXHRcdFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuK1x0XHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSB4cF9tYl9kZXNjKFx1MDAyNmRlc2MpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdHNrYiA9IHhza19idWlsZF9za2IoeHMsIFx1MDAyNmRlc2MpO1xuIFx0XHRpZiAoSVNfRVJSKHNrYikpIHtcbiBcdFx0XHRlcnIgPSBQVFJfRVJSKHNrYik7XG4gXHRcdFx0aWYgKGVyciAhPSAtRU9WRVJGTE9XKVxuIFx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0aWYgKHhwX21iX2Rlc2MoXHUwMDI2ZGVzYykpXG4rXHRcdFx0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0gdHJ1ZTtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtMTA5OCw5ICsxMjg4LDI0IEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbiBcdH1cbiBcbiBcdGlmICh4c2txX2hhc19kZXNjcyh4cy1cdTAwM2V0eCkpIHtcbitcdFx0Ym9vbCByZWNsYWltX2Rlc2MgPSB4cy1cdTAwM2Vza2IgfHwgeHMtXHUwMDNlZHJhaW5fY29udDtcbitcbitcdFx0aWYgKHJlY2xhaW1fZGVzYykge1xuK1x0XHRcdGVyciA9IHhza19jcV9yZXNlcnZlX2xvY2tlZCh4cy1cdTAwM2Vwb29sKTtcbitcdFx0XHRpZiAoZXJyKSB7XG4rXHRcdFx0XHRlcnIgPSAtRUFHQUlOO1xuK1x0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4gXHRcdGlmICh4cy1cdTAwM2Vza2IpXG4gXHRcdFx0eHNrX2Ryb3Bfc2tiKHhzLVx1MDAzZXNrYik7XG4rXG4rXHRcdGlmIChyZWNsYWltX2Rlc2MpXG4rXHRcdFx0eHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtXHUwMDNlcG9vbCwgXHUwMDI2ZGVzYyk7XG4rXG4gXHRcdHhza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbitcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4gXHR9XG4gXG4gb3V0OlxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jIGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcbmluZGV4IDFmMjhhOTY0MTU3MWU0Li5iODYyYWRkY2Q4ZmRhZiAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXG4rKysgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xuQEAgLTQ4LDYgKzQ4LDcgQEAgaW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuIFx0aWYgKCFwb29sLVx1MDAzZXR4X2Rlc2NzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHBvb2wtXHUwMDNldHhfZGVzY3NfbmVudHJpZXMgPSB4cy1cdTAwM2V0eC1cdTAwM2VuZW50cmllcztcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19xdWV1ZS5oIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuaW5kZXggM2UzZmJiNzNkMjNlMmYuLmExNWZmMTkyOWRiNjIzIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2tfcXVldWUuaFxuKysrIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuQEAgLTU4LDYgKzU4LDE4IEBAIHN0cnVjdCBwYXJzZWRfZGVzYyB7XG4gXHR1MzIgdmFsaWQ7XG4gfTtcbiBcbitzdHJ1Y3QgeHNrX3R4X2JhdGNoIHtcbitcdHUzMiB0eF9kZXNjcztcbitcdHUzMiByZWNsYWltX2Rlc2NzO1xuK1x0dTMyIGNvbnN1bWVkX2Rlc2NzO1xuK1x0Ym9vbCBidWRnZXRfbGltaXRlZDtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIHhza190eF9iYXRjaF9jcV9kZXNjcyhjb25zdCBzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaClcbit7XG4rXHRyZXR1cm4gYmF0Y2gtXHUwMDNldHhfZGVzY3MgKyBiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzO1xuK31cbitcbiAvKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBzaGFyZWQgc3RhdGUgb2YgdGhlIHJpbmdzIGFyZSBhIHNpbXBsZVxuICAqIGNpcmN1bGFyIGJ1ZmZlciwgYXMgb3V0bGluZWQgaW5cbiAgKiBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL2NpcmN1bGFyLWJ1ZmZlcnMucnN0LiBGb3IgdGhlIFJ4IGFuZFxuQEAgLTI2MywxNyArMjc1LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZV9kZXNjKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0cGFyc2VkLVx1MDAzZW1iID0geHBfbWJfZGVzYyhkZXNjKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZVxuLXUzMiB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLVx0XHRcdCAgICAgIHUzMiBtYXgpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeHNrX3R4X2JhdGNoXG4reHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbitcdFx0XHQgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXgpXG4ge1xuLVx0dTMyIGNhY2hlZF9jb25zID0gcS1cdTAwM2VjYWNoZWRfY29ucywgbmJfZW50cmllcyA9IDA7XG4tXHRzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC1cdTAwM2V0eF9kZXNjcztcbi1cdHUzMiB0b3RhbF9kZXNjcyA9IDAsIG5yX2ZyYWdzID0gMDtcbitcdGJvb2wgZHJhaW4gPSBSRUFEX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCk7XG4rXHR1MzIgY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwLCByZWxlYXNlZDtcbitcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbitcdHN0cnVjdCB4c2tfcXVldWUgKnEgPSB4cy1cdTAwM2V0eDtcbitcdHUzMiBucl9mcmFncyA9IDA7XG4rXG4rXHRjYWNoZWRfY29ucyA9IHEtXHUwMDNlY2FjaGVkX2NvbnM7XG4gXG4tXHQvKiB0cmFjayBmaXJzdCBlbnRyeSwgaWYgc3R1bWJsZSB1cG9uICphbnkqIGludmFsaWQgZGVzY3JpcHRvciwgcmV3aW5kXG4tXHQgKiBjdXJyZW50IHBhY2tldCB0aGF0IGNvbnNpc3RzIG9mIGZyYWdzIGFuZCBzdG9wIHRoZSBwcm9jZXNzaW5nXG4tXHQgKi9cbiBcdHdoaWxlIChjYWNoZWRfY29ucyAhPSBxLVx1MDAzZWNhY2hlZF9wcm9kIFx1MDAyNlx1MDAyNiBuYl9lbnRyaWVzIFx1MDAzYyBtYXgpIHtcbiBcdFx0c3RydWN0IHhkcF9yeHR4X3JpbmcgKnJpbmcgPSAoc3RydWN0IHhkcF9yeHR4X3JpbmcgKilxLVx1MDAzZXJpbmc7XG4gXHRcdHUzMiBpZHggPSBjYWNoZWRfY29ucyBcdTAwMjYgcS1cdTAwM2VyaW5nX21hc2s7XG5AQCAtMjgyLDI2ICsyOTUsNDkgQEAgdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4gXHRcdGRlc2NzW25iX2VudHJpZXNdID0gcmluZy1cdTAwM2VkZXNjW2lkeF07XG4gXHRcdGNhY2hlZF9jb25zKys7XG4gXHRcdHBhcnNlX2Rlc2MocSwgcG9vbCwgXHUwMDI2ZGVzY3NbbmJfZW50cmllc10sIFx1MDAyNnBhcnNlZCk7XG4tXHRcdGlmICh1bmxpa2VseSghcGFyc2VkLnZhbGlkKSlcbi1cdFx0XHRicmVhaztcbitcdFx0aWYgKHVubGlrZWx5KCFwYXJzZWQudmFsaWQpKSB7XG4rXHRcdFx0aWYgKCFkcmFpbiBcdTAwMjZcdTAwMjYgIW5yX2ZyYWdzIFx1MDAyNlx1MDAyNiAhcGFyc2VkLm1iKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0ZHJhaW4gPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdG5yX2ZyYWdzKys7XG4rXHRcdG5iX2VudHJpZXMrKztcbiBcbiBcdFx0aWYgKGxpa2VseSghcGFyc2VkLm1iKSkge1xuLVx0XHRcdHRvdGFsX2Rlc2NzICs9IChucl9mcmFncyArIDEpO1xuLVx0XHRcdG5yX2ZyYWdzID0gMDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRucl9mcmFncysrO1xuLVx0XHRcdGlmIChucl9mcmFncyA9PSBwb29sLVx1MDAzZXhkcF96Y19tYXhfc2Vncykge1xuK1x0XHRcdGlmICh1bmxpa2VseShkcmFpbikpIHtcbitcdFx0XHRcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcbitcdFx0XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCwgZmFsc2UpO1xuIFx0XHRcdFx0bnJfZnJhZ3MgPSAwO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuK1xuK1x0XHRcdGJhdGNoLnR4X2Rlc2NzICs9IG5yX2ZyYWdzO1xuK1x0XHRcdG5yX2ZyYWdzID0gMDtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAobnJfZnJhZ3MgPT0gcG9vbC1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpXG4rXHRcdFx0ZHJhaW4gPSB0cnVlO1xuK1x0fVxuK1xuK1x0aWYgKG5yX2ZyYWdzKSB7XG4rXHRcdGlmIChkcmFpbikge1xuK1x0XHRcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcbitcdFx0XHRXUklURV9PTkNFKHhzLVx1MDAzZWRyYWluX2NvbnQsIHRydWUpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGlmIChuYl9lbnRyaWVzID09IG1heClcbitcdFx0XHRcdGJhdGNoLmJ1ZGdldF9saW1pdGVkID0gdHJ1ZTtcbitcdFx0XHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcbiBcdFx0fVxuLVx0XHRuYl9lbnRyaWVzKys7XG4gXHR9XG4gXG4tXHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcbitcdHJlbGVhc2VkID0gY2FjaGVkX2NvbnMgLSBxLVx1MDAzZWNhY2hlZF9jb25zO1xuIFx0LyogUmVsZWFzZSB2YWxpZCBwbHVzIGFueSBpbnZhbGlkIGVudHJpZXMgKi9cbi1cdHhza3FfY29uc19yZWxlYXNlX24ocSwgY2FjaGVkX2NvbnMgLSBxLVx1MDAzZWNhY2hlZF9jb25zKTtcbi1cdHJldHVybiB0b3RhbF9kZXNjcztcbitcdHhza3FfY29uc19yZWxlYXNlX24ocSwgcmVsZWFzZWQpO1xuK1x0YmF0Y2guY29uc3VtZWRfZGVzY3MgPSByZWxlYXNlZDtcbitcdHJldHVybiBiYXRjaDtcbiB9XG4gXG4gLyogRnVuY3Rpb25zIGZvciBjb25zdW1lcnMgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuaW5kZXggNmViOTA5NmQwODRjMDEuLjdhYmI0OTM1ZWRmOWFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuQEAgLTQyNywxNCArNDI3LDE0IEBAIHN0YXRpYyB1MzIgcGt0X25iX2ZyYWdzKHUzMiBmcmFtZV9zaXplLCBzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbSwgc3RydWN0IHBrXG4gXHR9XG4gXG4gXHQvKiBTZWFyY2ggZm9yIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBpbiB2ZXJiYXRpbSBtb2RlICovXG4tXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4rXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRyZXR1cm4gbmJfZnJhZ3M7XG4gXG4gXHRuZXh0X2ZyYWcgPSBwa3Rfc3RyZWFtLVx1MDAzZWN1cnJlbnRfcGt0X25iO1xuIFx0cGt0Kys7XG4gXHR3aGlsZSAobmV4dF9mcmFnKysgXHUwMDNjIHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cykge1xuIFx0XHRuYl9mcmFncysrO1xuLVx0XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4rXHRcdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXHUwMDNlb3B0aW9ucykpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHBrdCsrO1xuIFx0fVxuQEAgLTY2NSwxMSArNjY1LDExIEBAIHN0YXRpYyBzdHJ1Y3QgcGt0X3N0cmVhbSAqX19wa3Rfc3RyZWFtX2dlbmVyYXRlX2N1c3RvbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzXG4gXHRcdFx0aWYgKCFmcmFtZS1cdTAwM2V2YWxpZCB8fCAhcGt0X2NvbnRpbnVlcyhmcmFtZS1cdTAwM2VvcHRpb25zKSlcbiBcdFx0XHRcdHBheWxvYWQrKztcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoZnJhbWUtXHUwMDNldmFsaWQpXG4rXHRcdFx0aWYgKGZyYW1lLVx1MDAzZXZhbGlkKSB7XG4gXHRcdFx0XHRsZW4gKz0gZnJhbWUtXHUwMDNlbGVuO1xuLVx0XHRcdGlmIChmcmFtZS1cdTAwM2V2YWxpZCBcdTAwMjZcdTAwMjYgcGt0X2NvbnRpbnVlcyhmcmFtZS1cdTAwM2VvcHRpb25zKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuK1x0XHRcdFx0aWYgKHBrdF9jb250aW51ZXMoZnJhbWUtXHUwMDNlb3B0aW9ucykpXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbiBcdFx0XHRwa3QtXHUwMDNlcGt0X25iID0gcGt0X25iO1xuIFx0XHRcdHBrdC1cdTAwM2VsZW4gPSBsZW47XG4gXHRcdFx0cGt0LVx1MDAzZXZhbGlkID0gZnJhbWUtXHUwMDNldmFsaWQ7XG5AQCAtMTIwOSw2ICsxMjA5LDcgQEAgc3RhdGljIGludCBfX3NlbmRfcGt0cyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB4c2stXHUwMDNlYmF0Y2hfc2l6ZTsgaSsrKSB7XG4gXHRcdHN0cnVjdCBwa3QgKnBrdCA9IHBrdF9zdHJlYW1fZ2V0X25leHRfdHhfcGt0KHBrdF9zdHJlYW0pO1xuIFx0XHR1MzIgbmJfZnJhZ3NfbGVmdCwgbmJfZnJhZ3MsIGJ5dGVzX3dyaXR0ZW4gPSAwO1xuK1x0XHRzdHJ1Y3QgcGt0ICpmaXJzdF9wa3QgPSBwa3Q7XG4gXG4gXHRcdGlmICghcGt0KVxuIFx0XHRcdGJyZWFrO1xuQEAgLTEyNTMsNiArMTI1NCw4IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLFxuIFx0XHRpZiAocGt0IFx1MDAyNlx1MDAyNiBwa3QtXHUwMDNldmFsaWQpIHtcbiBcdFx0XHR2YWxpZF9wa3RzKys7XG4gXHRcdFx0dmFsaWRfZnJhZ3MgKz0gbmJfZnJhZ3M7XG4rXHRcdH0gZWxzZSBpZiAocGt0X3N0cmVhbS1cdTAwM2V2ZXJiYXRpbSBcdTAwMjZcdTAwMjYgcGt0X2NvbnRpbnVlcyhmaXJzdF9wa3QtXHUwMDNlb3B0aW9ucykpIHtcbitcdFx0XHR2YWxpZF9mcmFncyArPSBuYl9mcmFncztcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTIwOTksMTMgKzIxMDIsMTYgQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRcdHswLCAwLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgYWRkcmVzcyBpbiB0aGUgc2Vjb25kIGZyYW1lICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuLVx0XHR7dW1lbV9zeiwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbitcdFx0e3VtZW1fc3ogKiAyLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuK1x0XHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4rXHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogSW52YWxpZCBvcHRpb25zIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhTS19ERVNDX19JTlZBTElEX09QVElPTn0sXG4rXHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogVHJhbnNtaXQgMiBmcmFncywgcmVjZWl2ZSAzICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIFhEUF9QS1RfQ09OVER9LFxuIFx0XHR7MCwgWFNLX1VNRU1fX01BWF9GUkFNRV9TSVpFLCAwLCB0cnVlLCAwfSxcbkBAIC0yMTE3LDggKzIxMjMsOCBAQCBpbnQgdGVzdGFwcF9pbnZhbGlkX2Rlc2NfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcbiBcdGlmICh1bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlKSB7XG4gXHRcdC8qIENyb3NzaW5nIGEgY2h1bmsgYm91bmRhcnkgYWxsb3dlZCAqL1xuLVx0XHRwa3RzWzEyXS52YWxpZCA9IHRydWU7XG4tXHRcdHBrdHNbMTNdLnZhbGlkID0gdHJ1ZTtcbitcdFx0cGt0c1sxNV0udmFsaWQgPSB0cnVlO1xuK1x0XHRwa3RzWzE2XS52YWxpZCA9IHRydWU7XG4gXHR9XG4gXG4gXHR0ZXN0LVx1MDAzZW10dSA9IE1BWF9FVEhfSlVNQk9fU0laRTtcbkBAIC0yMjcwLDcgKzIyNzYsNyBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRtYXhfZnJhZ3MgKz0gMTtcbiBcdH1cbiBcbi1cdHBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyArIDIsIHNpemVvZihzdHJ1Y3QgcGt0KSk7XG4rXHRwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgKyAzLCBzaXplb2Yoc3RydWN0IHBrdCkpO1xuIFx0aWYgKCFwa3RzKVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuQEAgLTIyODgsMjQgKzIyOTQsMzAgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdH1cbiBcdHBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDtcbiBcbi1cdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0XG4tXHQgKiBjb250aW51ZXMgb24gdGhlIGxhc3QgZnJhZ1xuLVx0ICovXG4tXHRmb3IgKGkgPSBtYXhfZnJhZ3MgKyAxOyBpIFx1MDAzYyAyICogbWF4X2ZyYWdzICsgMTsgaSsrKSB7XG4rXHQvKiBBbiBpbnZhbGlkIHBhY2tldCB3aXRoIHRoZSBtYXggKyAxIGFtb3VudCBvZiBmcmFncyAqL1xuK1x0Zm9yIChpID0gbWF4X2ZyYWdzICsgMTsgaSBcdTAwM2MgMiAqIG1heF9mcmFncyArIDI7IGkrKykge1xuIFx0XHRwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTtcbiBcdFx0cGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDtcbi1cdFx0cGt0c1tpXS52YWxpZCA9IGZhbHNlO1xuK1x0XHRwa3RzW2ldLnZhbGlkID0gdHJ1ZTtcbiBcdH1cbitcdHBrdHNbMiAqIG1heF9mcmFncyArIDFdLm9wdGlvbnMgPSAwO1xuIFxuIFx0LyogVmFsaWQgcGFja2V0IGZvciBzeW5jaCAqL1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0ubGVuID0gTUlOX1BLVF9TSVpFO1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0udmFsaWQgPSB0cnVlO1xuK1x0cGt0c1syICogbWF4X2ZyYWdzICsgMl0ubGVuID0gTUlOX1BLVF9TSVpFO1xuK1x0cGt0c1syICogbWF4X2ZyYWdzICsgMl0udmFsaWQgPSB0cnVlO1xuIFxuLVx0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAyKSkge1xuK1x0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAzKSkge1xuIFx0XHRmcmVlKHBrdHMpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuK1x0LyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0XG4rXHQgKiBfX3NlbmRfcGt0cygpIGFjY291bnRzIGl0cyBkZXNjcmlwdG9ycyBpbiBvdXRzdGFuZGluZ190eC4gVGhlIFJ4XG4rXHQgKiBzdHJlYW0sIGhvd2V2ZXIsIG11c3Qgbm90IGV4cGVjdCB0aGlzIHBhY2tldCBvbiB0aGUgd2lyZS5cbitcdCAqL1xuK1x0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNlcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzJdLnZhbGlkID0gZmFsc2U7XG4rXHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2Vwa3Rfc3RyZWFtLVx1MDAzZW5iX3ZhbGlkX2VudHJpZXMtLTtcbitcbiBcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbiBcdGZyZWUocGt0cyk7XG4gXHRyZXR1cm4gcmV0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzM6NDYuOTIwODU4MDgxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk3NDExMzE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFGX1hEUCBNdWx0aS1CdWZmZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0b3VjaGluZyBzZXZlcmFsIGtleSBmaWxlcyByZWxhdGVkIHRvIEFGX1hEUDogYHhkcF9zb2NrLmhgLCBgeHNrX2J1ZmZfcG9vbC5oYCwgYHhzay5jYCwgYHhza19idWZmX3Bvb2wuY2AsIGB4c2tfcXVldWUuaGAsIGFuZCBhIHNlbGZ0ZXN0LiBUaGlzIGlzIGFsbCBhYm91dCBoYW5kbGluZyBtdWx0aS1idWZmZXIgb3IgU0cgKHNjYXR0ZXItZ2F0aGVyKSBwYWNrZXRzIHdpdGhpbiBBRl9YRFAsIHdoaWNoIHBpcXVlcyBteSBpbnRlcmVzdCBpbW1lZGlhdGVseS4gSXQncyB0b3VjaGluZyBjb3JlIGxvZ2ljLiBJJ20gc2VlaW5nIGFkZGl0aW9ucyBvZiB2YXJpYWJsZXMgbGlrZSBgZHJhaW5fY29udGAsIGB0eF9kZXNjc19uZW50cmllc2AsIGByZWNsYWltX2Rlc2NzYCwgYW5kIGB0eF96Y19wZW5kaW5nX2Rlc2NzYCBpbiB0aGUgYHhkcF9zb2NrYCBhbmQgYHhza19idWZmX3Bvb2xgIHN0cnVjdHVyZXMsIHdoaWNoIGluZGljYXRlcyBjaGFuZ2VzIGluIGRlc2NyaXB0b3IgbWFuYWdlbWVudC5cblxuRmlyc3QsIGxldCdzIGNvbmZpcm0gQUZfWERQIGl0c2VsZiBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkIOKAkyBnb29kLCB0aGF0J3MgYSBiYXNlbGluZS4gTm93LCBzaG91bGQgd2UgZnV6eiB0aGlzPyBBYnNvbHV0ZWx5LCBjb25zaWRlcmluZyB0aGlzIG1vZGlmaWVzIHRoZSBmdW5kYW1lbnRhbCBtdWx0aS1idWZmZXIgVFggcGF0aC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcy4gSXQncyBpbXBhY3RpbmcgY3JpdGljYWwgcGFydHMgb2YgdGhlIFhEUCBkYXRhIHBhdGguIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgeHNrX3R4X2NvbXBsZXRlZGAsIGFuZCBzb21lIG5ldyBvbmVzIGxpa2UgYHhza190eF9jb21taXRfYmF0Y2hgLCBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGAgYW5kIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGAuIEl0J3MgYWxzbyBtYWtpbmcgY2hhbmdlcyB0byBgeHNrX2Ryb3Bfc2tiYCwgYW5kIHRoZSBTS0IgYnVpbGRpbmcgZnVuY3Rpb25zIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YCBhbmQgYHhza19idWlsZF9za2JgLiBGaW5hbGx5LCBJIHNlZSBgX194c2tfZ2VuZXJpY194bWl0YCwgYHhwX2FsbG9jX3R4X2Rlc2NzYCwgYW5kIGB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoYCBpbiB0aGUgbWl4LlxuXG5UaW1lIHRvIGRyaWxsIGRvd24uIEknbSBnb2luZyB0byBxdWlja2x5IGdyZXAgdGhyb3VnaCBgbmV0L3hkcC94c2suY2AgYW5kIGBuZXQveGRwL3hza19xdWV1ZS5oYCB0byBjb25maXJtIHRoZSBleGFjdCBmdW5jdGlvbiBuYW1lcyBhbmQgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjb2RlIGJlaW5nIGNoYW5nZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zIGlzIGNydWNpYWwgZm9yIGJ1aWxkaW5nIGEgc3Ryb25nIGZ1enppbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDYsIk91dHB1dFRva2VucyI6NTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzo1NC44OTQ5NzQwNjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MTI5OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KHZvaWR8dTMyfGludHxzdHJ1Y3QgW2Etel9dKyBcXFxcKikgW2Etel9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAveHNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz00OT1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnhza190eF9nZW5lcmljX2NhY2hlO1xcbm5ldC94ZHAveHNrLmMtNTAtXFxubmV0L3hkcC94c2suYzo1MTp2b2lkIHhza19zZXRfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy01Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jPTU5PUVYUE9SVF9TWU1CT0woeHNrX3NldF9yeF9uZWVkX3dha2V1cCk7XFxubmV0L3hkcC94c2suYy02MC1cXG5uZXQveGRwL3hzay5jOjYxOnZvaWQgeHNrX3NldF90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTYyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9NzY9RVhQT1JUX1NZTUJPTCh4c2tfc2V0X3R4X25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTc3LVxcbm5ldC94ZHAveHNrLmM6Nzg6dm9pZCB4c2tfY2xlYXJfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy03OS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTg2PUVYUE9SVF9TWU1CT0woeHNrX2NsZWFyX3J4X25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTg3LVxcbm5ldC94ZHAveHNrLmM6ODg6dm9pZCB4c2tfY2xlYXJfdHhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy04OS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTEyMT1FWFBPUlRfU1lNQk9MKHhza19nZXRfcG9vbF9mcm9tX3FpZCk7XFxubmV0L3hkcC94c2suYy0xMjItXFxubmV0L3hkcC94c2suYzoxMjM6c3RhdGljIHZvaWQgX194c2tfY2xlYXJfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHF1ZXVlX2lkKVxcbm5ldC94ZHAveHNrLmMtMTI0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTMwLVxcbm5ldC94ZHAveHNrLmM6MTMxOnZvaWQgeHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcXG5uZXQveGRwL3hzay5jLTEzMi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE0Ni1cXG5uZXQveGRwL3hzay5jOjE0NzpzdGF0aWMgaW50IF9feHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC94ZHAveHNrLmMtMTQ4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTE2IHF1ZXVlX2lkKVxcbi0tXFxubmV0L3hkcC94c2suYy0xNjQtICovXFxubmV0L3hkcC94c2suYzoxNjU6aW50IHhza19yZWdfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxubmV0L3hkcC94c2suYy0xNjYtXFx0XFx0XFx0dTE2IHF1ZXVlX2lkKVxcbi0tXFxubmV0L3hkcC94c2suYy0xOTAtXFxubmV0L3hkcC94c2suYzoxOTE6c3RhdGljIGludCBfX3hza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYiwgdTMyIGxlbixcXG5uZXQveGRwL3hzay5jLTE5Mi1cXHRcXHRcXHR1MzIgZmxhZ3MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTIwNy1cXG5uZXQveGRwL3hzay5jOjIwODpzdGF0aWMgdm9pZCBfX3hza19yY3ZfemNfc2FmZShzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiLFxcbm5ldC94ZHAveHNrLmMtMjA5LVxcdFxcdFxcdCAgICAgIHUzMiBsZW4sIHUzMiBmbGFncylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjE4LVxcbm5ldC94ZHAveHNrLmM6MjE5OnN0YXRpYyBpbnQgeHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcXG5uZXQveGRwL3hzay5jLTIyMC17XFxuLS1cXG5uZXQveGRwL3hzay5jPTI2MD1zdGF0aWMgdm9pZCAqeHNrX2NvcHlfeGRwX3N0YXJ0KHN0cnVjdCB4ZHBfYnVmZiAqZnJvbSlcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjY3LVxcbm5ldC94ZHAveHNrLmM6MjY4OnN0YXRpYyB1MzIgeHNrX2NvcHlfeGRwKHZvaWQgKnRvLCB2b2lkICoqZnJvbSwgdTMyIHRvX2xlbixcXG5uZXQveGRwL3hzay5jLTI2OS1cXHRcXHRcXHR1MzIgKmZyb21fbGVuLCBza2JfZnJhZ190ICoqZnJhZywgdTMyIHJlbSlcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjk1LVxcbm5ldC94ZHAveHNrLmM6Mjk2OnN0YXRpYyBpbnQgX194c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxcbm5ldC94ZHAveHNrLmMtMjk3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MzY1PXN0YXRpYyBib29sIHhza190eF93cml0ZWFibGUoc3RydWN0IHhkcF9zb2NrICp4cylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMzcyLVxcbm5ldC94ZHAveHNrLmM6MzczOnN0YXRpYyB2b2lkIF9feHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTM3NC17XFxuLS1cXG5uZXQveGRwL3hzay5jPTM5MD1zdGF0aWMgYm9vbCB4c2tfZGV2X3F1ZXVlX3ZhbGlkKGNvbnN0IHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuLS1cXG5uZXQveGRwL3hzay5jLTQxNC1cXG5uZXQveGRwL3hzay5jOjQxNTpzdGF0aWMgaW50IHhza19yY3ZfY2hlY2soc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy00MTYte1xcbi0tXFxubmV0L3hkcC94c2suYy00MjktXFxubmV0L3hkcC94c2suYzo0MzA6c3RhdGljIHZvaWQgeHNrX2ZsdXNoKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy00MzEte1xcbi0tXFxubmV0L3hkcC94c2suYy00MzYtXFxubmV0L3hkcC94c2suYzo0Mzc6aW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQzOC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTQ1Mi1cXG5uZXQveGRwL3hzay5jOjQ1MzpzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L3hkcC94c2suYy00NTQte1xcbi0tXFxubmV0L3hkcC94c2suYy00NzItXFxubmV0L3hkcC94c2suYzo0NzM6aW50IF9feHNrX21hcF9yZWRpcmVjdChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQ3NC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTQ4OS1cXG5uZXQveGRwL3hzay5jOjQ5MDp2b2lkIF9feHNrX21hcF9mbHVzaChzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0KVxcbm5ldC94ZHAveHNrLmMtNDkxLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDk5LVxcbm5ldC94ZHAveHNrLmM6NTAwOnZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXFxubmV0L3hkcC94c2suYy01MDEte1xcbi0tXFxubmV0L3hkcC94c2suYz01MjE9RVhQT1JUX1NZTUJPTCh4c2tfdHhfY29tcGxldGVkKTtcXG5uZXQveGRwL3hzay5jLTUyMi1cXG5uZXQveGRwL3hzay5jOjUyMzp2b2lkIHhza190eF9yZWxlYXNlKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbm5ldC94ZHAveHNrLmMtNTI0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9NTgwPUVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfZGVzYyk7XFxubmV0L3hkcC94c2suYy01ODEtXFxubmV0L3hkcC94c2suYzo1ODI6c3RhdGljIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2VudHJpZXMpXFxubmV0L3hkcC94c2suYy01ODMte1xcbi0tXFxubmV0L3hkcC94c2suYy01OTMtXFxubmV0L3hkcC94c2suYzo1OTQ6c3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG5uZXQveGRwL3hzay5jLTU5NS1cXHRcXHRcXHRcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaCxcXG4tLVxcbm5ldC94ZHAveHNrLmM9NjQ4PXhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTcyNS1cXG5uZXQveGRwL3hzay5jOjcyNjp1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcXG5uZXQveGRwL3hzay5jLTcyNy17XFxuLS1cXG5uZXQveGRwL3hzay5jPTc4Mz1FWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XFxubmV0L3hkcC94c2suYy03ODQtXFxubmV0L3hkcC94c2suYzo3ODU6c3RhdGljIGludCB4c2tfd2FrZXVwKHN0cnVjdCB4ZHBfc29jayAqeHMsIHU4IGZsYWdzKVxcbm5ldC94ZHAveHNrLmMtNzg2LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzkxLVxcbm5ldC94ZHAveHNrLmM6NzkyOnN0YXRpYyBpbnQgeHNrX2NxX3Jlc2VydmVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbm5ldC94ZHAveHNrLmMtNzkzLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9ODI2PXN0YXRpYyBzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcnNfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZHAveHNrLmMtODM4LVxcbm5ldC94ZHAveHNrLmM6ODM5OnN0YXRpYyBpbnQgeHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHU2NCBhZGRyKVxcbm5ldC94ZHAveHNrLmMtODQwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODUwLVxcbm5ldC94ZHAveHNrLmM6ODUxOnN0YXRpYyB2b2lkIHhza19pbmNfbnVtX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTg1Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTg2MC1cXG5uZXQveGRwL3hzay5jOjg2MTpzdGF0aWMgdTMyIHhza19nZXRfbnVtX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTg2Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTg3Mi1cXG5uZXQveGRwL3hzay5jOjg3MzpzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbm5ldC94ZHAveHNrLmMtODc0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGRwL3hzay5jLTkwMi1cXG5uZXQveGRwL3hzay5jOjkwMzpzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG5uZXQveGRwL3hzay5jLTkwNC1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTE1LVxcbm5ldC94ZHAveHNrLmM6OTE2OnN0YXRpYyB2b2lkIHhza19jcV9jYW5jZWxfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbilcXG5uZXQveGRwL3hzay5jLTkxNy17XFxuLS1cXG5uZXQveGRwL3hzay5jPTkyMz1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxcbm5ldC94ZHAveHNrLmM6OTI0OnZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtOTI1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTM2LVxcbm5ldC94ZHAveHNrLmM6OTM3OnN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTkzOC1cXHRcXHRcXHQgICAgIHU2NCBhZGRyKVxcbi0tXFxubmV0L3hkcC94c2suYy05NTItXFxubmV0L3hkcC94c2suYzo5NTM6c3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy05NTQte1xcbi0tXFxubmV0L3hkcC94c2suYy05NzAtXFxubmV0L3hkcC94c2suYzo5NzE6c3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy05NzIte1xcbi0tXFxubmV0L3hkcC94c2suYy05NzktXFxubmV0L3hkcC94c2suYzo5ODA6c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcXG5uZXQveGRwL3hzay5jLTk4MS1cXHRcXHRcXHQgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTA5OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTIwMy1cXG5uZXQveGRwL3hzay5jOjEyMDQ6c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTIwNS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzMTgtXFxubmV0L3hkcC94c2suYzoxMzE5OnN0YXRpYyBpbnQgeHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hkcC94c2suYy0xMzIwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTMzMj1zdGF0aWMgYm9vbCB4c2tfbm9fd2FrZXVwKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM0Mi1cXG5uZXQveGRwL3hzay5jOjEzNDM6c3RhdGljIGludCB4c2tfY2hlY2tfY29tbW9uKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xMzQ0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM1Mi1cXG5uZXQveGRwL3hzay5jOjEzNTM6c3RhdGljIGludCBfX3hza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXFxubmV0L3hkcC94c2suYy0xMzU0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM4My1cXG5uZXQveGRwL3hzay5jOjEzODQ6c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTM4NS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzOTQtXFxubmV0L3hkcC94c2suYzoxMzk1OnN0YXRpYyBpbnQgX194c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxubmV0L3hkcC94c2suYy0xMzk2LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTQyMC1cXG5uZXQveGRwL3hzay5jOjE0MjE6c3RhdGljIGludCB4c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxubmV0L3hkcC94c2suYy0xNDIyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTQzMj1zdGF0aWMgX19wb2xsX3QgeHNrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0NjQtXFxubmV0L3hkcC94c2suYzoxNDY1OnN0YXRpYyBpbnQgeHNrX2luaXRfcXVldWUodTMyIGVudHJpZXMsIHN0cnVjdCB4c2tfcXVldWUgKipxdWV1ZSxcXG5uZXQveGRwL3hzay5jLTE0NjYtXFx0XFx0XFx0ICBib29sIHVtZW1fcXVldWUpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0ODItXFxubmV0L3hkcC94c2suYzoxNDgzOnN0YXRpYyB2b2lkIHhza191bmJpbmRfZGV2KHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNDg0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTQ5Nz1zdGF0aWMgc3RydWN0IHhza19tYXAgKnhza19nZXRfbWFwX2xpc3RfZW50cnkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTUxNi1cXG5uZXQveGRwL3hzay5jOjE1MTc6c3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9mcm9tX21hcHMoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTE1MTgte1xcbi0tXFxubmV0L3hkcC94c2suYy0xNTQyLVxcbm5ldC94ZHAveHNrLmM6MTU0MzpzdGF0aWMgaW50IHhza19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxubmV0L3hkcC94c2suYy0xNTQ0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTU5OD1zdGF0aWMgYm9vbCB4c2tfdmFsaWRhdGVfcXVldWVzKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE2MDItXFxubmV0L3hkcC94c2suYzoxNjAzOnN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilcXG5uZXQveGRwL3hzay5jLTE2MDQte1xcbi0tXFxubmV0L3hkcC94c2suYz0xNzkwPXN0cnVjdCB4ZHBfdW1lbV9yZWdfdjEge1xcbi0tXFxubmV0L3hkcC94c2suYy0xNzk2LVxcbm5ldC94ZHAveHNrLmM6MTc5NzpzdGF0aWMgaW50IHhza19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxubmV0L3hkcC94c2suYy0xNzk4LVxcdFxcdFxcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTkxOS1cXG5uZXQveGRwL3hzay5jOjE5MjA6c3RhdGljIHZvaWQgeHNrX2VudGVyX3J4dHhfb2Zmc2V0cyhzdHJ1Y3QgeGRwX3Jpbmdfb2Zmc2V0X3YxICpyaW5nKVxcbm5ldC94ZHAveHNrLmMtMTkyMS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE5MjYtXFxubmV0L3hkcC94c2suYzoxOTI3OnN0YXRpYyB2b2lkIHhza19lbnRlcl91bWVtX29mZnNldHMoc3RydWN0IHhkcF9yaW5nX29mZnNldF92MSAqcmluZylcXG5uZXQveGRwL3hzay5jLTE5Mjgte1xcbi0tXFxubmV0L3hkcC94c2suYz0xOTM0PXN0cnVjdCB4ZHBfc3RhdGlzdGljc192MSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTE5MzktXFxubmV0L3hkcC94c2suYzoxOTQwOnN0YXRpYyBpbnQgeHNrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQveGRwL3hzay5jLTE5NDEtXFx0XFx0XFx0ICBzb2Nrb3B0X3QgKm9wdClcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjA2Ny1cXG5uZXQveGRwL3hzay5jOjIwNjg6c3RhdGljIGludCB4c2tfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQveGRwL3hzay5jLTIwNjktXFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubmV0L3hkcC94c2suYy0yMTA1LVxcbm5ldC94ZHAveHNrLmM6MjEwNjpzdGF0aWMgaW50IHhza19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXFxubmV0L3hkcC94c2suYy0yMTA3LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbXNnLCB2b2lkICpwdHIpXFxuLS1cXG5uZXQveGRwL3hzay5jPTIxNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjE2My1cXG5uZXQveGRwL3hzay5jOjIxNjQ6c3RhdGljIHZvaWQgeHNrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG5uZXQveGRwL3hzay5jLTIxNjUte1xcbi0tXFxubmV0L3hkcC94c2suYy0yMTc0LVxcbm5ldC94ZHAveHNrLmM6MjE3NTpzdGF0aWMgaW50IHhza19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxubmV0L3hkcC94c2suYy0yMTc2LVxcdFxcdCAgICAgIGludCBrZXJuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzo1NS4wNjAxMTMxMThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ3NjMzMjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgQW5hbHlzaXMgb2YgS2V5IFhEUC9YU0sgVFggYW5kIFJYIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGluIFhEUC9YU0sgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcGF0aHMuIFRoZSBmb2xsb3dpbmcgYXJlIGNydWNpYWwgZm9yIHRoZSB0YXNrIGF0IGhhbmQ6IGB4c2tfdHhfY29tcGxldGVkYCwgYHhza190eF9jb21taXRfYmF0Y2hgLCBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGAsICh5ZXMsIHRoYXQgb25lIGlzIGxpc3RlZCB0d2ljZSwgYnV0IGl0J3MgaW1wb3J0YW50KSwgYHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkYCwgYHhza19kcm9wX3NrYmAsIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YCwgYHhza19idWlsZF9za2JgLCBgX194c2tfZ2VuZXJpY194bWl0YCwgYHhwX2FsbG9jX3R4X2Rlc2NzYCwgYW5kIGB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoYC4gVGhhdCBnaXZlcyBtZSB0aGUgb3ZlcnZpZXcgdGhhdCBJIG5lZWQgZm9yIHRoaXMgc2VjdGlvbi4gSSB3aWxsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgY29kZSBmb3IgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgLiBUbyBkbyB0aGF0LCBJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC94ZHAveHNrX3F1ZXVlLmhgIHRvIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGlzIG1lYW50IHRvIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAyNiwiT3V0cHV0VG9rZW5zIjo1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozMzo1OS40MDc3NDg2MjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTY2OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KHZvaWR8dTMyfGludHxzdHJ1Y3QgW2Etel9dKyBcXFxcKikgW2Etel9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAveHNrX3F1ZXVlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2tfcXVldWUuaD01NDE9c3RydWN0IHhza19xdWV1ZSAqeHNrcV9jcmVhdGUodTMyIG5lbnRyaWVzLCBib29sIHVtZW1fcXVldWUpO1xcbm5ldC94ZHAveHNrX3F1ZXVlLmg6NTQyOnZvaWQgeHNrcV9kZXN0cm95KHN0cnVjdCB4c2tfcXVldWUgKnFfb3BzKTtcXG5uZXQveGRwL3hza19xdWV1ZS5oLTU0My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzM6NTkuNTYzNzI1MTgyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyNzIwMDUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCdzIFhEUCBTb2NrZXQgQ29uc3VtcHRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoYCBmdW5jdGlvbi4gUmlnaHQsIGl0J3MgYSBgc3RhdGljIGlubGluZWAgZnVuY3Rpb24gZGVmaW5lZCBpbiBgbmV0L3hkcC94c2tfcXVldWUuaGAuIFRoYXQgbWVhbnMgaXQgd29uJ3QgYmUgYSB2aXNpYmxlIHN5bWJvbCBpbiB0aGUga2VybmVsIGltYWdlIGRpcmVjdGx5LiBCdXQsIHRoYXQncyBub3QgdGhlIGVuZCBvZiB0aGUgbGluZSwgYXMgSSBrbm93IGl0J3MgKmNhbGxlZCogYnkgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYC5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYSBiaXQgYW5kIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMgaGVyZS4gQUZfWERQJ3MgYXZhaWxhYmlsaXR5IGJvaWxzIGRvd24gdG8gYENPTkZJR19YRFBfU09DS0VUU2AuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBjb21lIGludG8gcGxheSBhcyB3ZWxsLiBBbHdheXMgZ29vZCB0byBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjY4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjAzLjY5MDkyODA4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjc2NzIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfWERQX1NPQ0tFVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC94ZHAvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpICs9IHhzay5vIHhkcF91bWVtLm8geHNrX3F1ZXVlLm8geHNrbWFwLm9cXG5uZXQveGRwL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSB4c2tfYnVmZl9wb29sLm9cXG5uZXQveGRwL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTX0RJQUcpICs9IHhza19kaWFnLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MDMuODE3NzA1Mjg4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5NDc2ODUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgWERQLVNvY2tldHMgRnVuY3Rpb24gTGlzdCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBgWERQX1NPQ0tFVFNgIHNwZWNpZmljYWxseS4gVGltZSB0byBuYWlsIGRvd24gdGhlIGNvcmUgZnVuY3Rpb25zIEkgbmVlZCB0byBhbmFseXplLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3QgYSBwcmVsaW1pbmFyeSBsaXN0LCBhbmQgSSBuZWVkIHRvIHJlZmluZSBpdC4gSSdtIHRoaW5raW5nOlxuXG4qICAgYHhza190eF9jb21wbGV0ZWRgXG4qICAgYHhza190eF9jb21taXRfYmF0Y2hgXG4qICAgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYFxuKiAgIGB4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoYFxuKiAgIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgIChEdXBsaWNhdGUsIEknbGwgY2xlYW4gdGhhdCB1cCBsYXRlcilcbiogICBgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRgXG4qICAgYHhza19kcm9wX3NrYmBcbiogICBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWBcbiogICBgeHNrX2J1aWxkX3NrYmBcbiogICBgX194c2tfZ2VuZXJpY194bWl0YFxuKiAgIGB4cF9hbGxvY190eF9kZXNjc2BcblxuV2FpdCBhIG1pbnV0ZSwgYSBmZXcgb2YgdGhvc2UgYXJlIG1hcmtlZCBhcyBgc3RhdGljYDogYHhza190eF9jb21taXRfYmF0Y2hgLCBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGAsIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGAsIGFuZCBgeHNrX2Ryb3Bfc2tiYC4gVGhleSBtaWdodCBiZSBpbmxpbmVkLiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhleSdyZSBleHBsaWNpdGx5IGRlY2xhcmVkIGFzIGBzdGF0aWMgaW5saW5lYC4gQWgsIG5vLCBqdXN0IGBzdGF0aWNgLiBUaGF0IG1lYW5zIHRoZXkncmUgbG9jYWwgdG8gdGhlaXIgY29tcGlsYXRpb24gdW5pdCwgYnV0IG5vdCBuZWNlc3NhcmlseSBpbmxpbmVkLiBUaGV5IHNob3VsZCBiZSBmaW5lIHRvIGluY2x1ZGUgZm9yIGEgYnJvYWRlciB2aWV3LlxuXG5JJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IGB4cF9hbGxvY190eF9kZXNjc2AgaW4gYG5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jYCBqdXN0IHRvIGJlIHN1cmUuIEl0J3MgdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjE2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE3OjM0OjA5LjcxMjQ3NjQwMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMjAxODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhwX2FsbG9jX3R4X2Rlc2NzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jPTM1PXZvaWQgeHBfZGVzdHJveShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG4tLVxcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTQ0LVxcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jOjQ1OmludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy00Ni17XFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYz01NT1zdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbi0tXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtNzItXFx0aWYgKHhzLVxcdTAwM2V0eClcXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYzo3MzpcXHRcXHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMpKVxcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTc0LVxcdFxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxNzozNDowOS44ODU2ODQ4NDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE0MTQ0MTY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBBRl9YRFAgTXVsdGktQnVmZmVyIFRyYW5zbWlzc2lvbiBMb2dpYyBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYHhwX2FsbG9jX3R4X2Rlc2NzYCBpcyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMga2V5LiBOb3csIEkgaGF2ZSBhIHNvbGlkIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZyBiYXNlZCBvbiB0aGUgcGF0Y2gncyBzY29wZTpcblxuKiAgIGB4c2tfdHhfY29tcGxldGVkYFxuKiAgIGB4c2tfdHhfY29tbWl0X2JhdGNoYFxuKiAgIGBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGBcbiogICBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGBcbiogICBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYFxuKiAgIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGBcbiogICBgeHNrX2Ryb3Bfc2tiYFxuKiAgIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YFxuKiAgIGB4c2tfYnVpbGRfc2tiYFxuKiAgIGBfX3hza19nZW5lcmljX3htaXRgXG4qICAgYHhwX2FsbG9jX3R4X2Rlc2NzYFxuXG5Jbml0aWFsbHksIEkgaGFkIGEgcXVpY2sgY2hlY2sgb24gd2hldGhlciBgX194c2tfZ2VuZXJpY194bWl0YCB3YXMgYSBzdGF0aWMgZnVuY3Rpb24uIEl0IGlzLiBIb3dldmVyLCBJIGNvbmZpcm1lZCB0aGF0IGl0IGlzIHRoZSBnZW5lcmljIHRyYW5zbWl0IGZ1bmN0aW9uLCBhbmQgdGhlIHBhdGNoIGhhcyBtb2RpZmllZCBpdC4gYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAgaXMgYWxzbyBhIGhvdC1wYXRoIGZ1bmN0aW9uLiBUaGUgaW5zdHJ1Y3Rpb25zIGRpZCB3YXJuIGFnYWluc3QgaW5jbHVkaW5nIGdlbmVyaWMgaG90LXBhdGhzIGxpa2UgYGtmcmVlYCBvciBgc2NoZWR1bGVgLCBidXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byBBRlxcX1hEUCwgc28gdGhleSdyZSByZWxldmFudCBhbmQgZG9uJ3Qgc2tldyB0aGUgZGlzdHJpYnV0aW9uLiBJbmNsdWRpbmcgdGhlbSBpcyBhY2NlcHRhYmxlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGZvY3VzZWQgb24gdGhlIEFGXFxfWERQIG11bHRpLWJ1ZmZlciAoU0cpIHBhY2tldCB0cmFuc21pc3Npb24uIEl0J3MgaW50cm9kdWNpbmcgYmF0Y2hpbmcgYW5kIGRlc2NyaXB0b3IgcmVjbGFpbSB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgQUZcXF9YRFAgY29kZSwgc28gaXQgbWFrZXMgcGVyZmVjdCBzZW5zZSB0byBmdXp6IGl0LiBUaGUgY29kZSdzIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiBgbmV0L3hkcC94c2suY2AgYW5kIGBuZXQveGRwL3hza19xdWV1ZS5oYC5cblxuVGhlIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIGVuc3VyZSBpcyBlbmFibGVkIGZvciB0aGlzIGlzIGBYRFBfU09DS0VUU2AuIEkgYnJpZWZseSBjaGVja2VkIGlmIGBYRFBfU09DS0VUU2AgZGVwZW5kZWQgb24gYEJQRl9TWVNDQUxMYCwgYW5kIGNvbmZpcm1lZCB0aGF0IGBYRFBfU09DS0VUU2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHRvIGJlIGNoZWNrZWQuIFRoaXMgY29uZmlybXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGVuYWJsZWQgdW5kZXIgdGhlIHRhcmdldGVkIGNvbmZpZ3VyYXRpb24uXG5cblNvLCBpbiBzdW1tYXJ5LCBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLCB0aGUgcGF0Y2gncyBzY29wZSwgYW5kIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlLiBJJ20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI1MSwiT3V0cHV0VG9rZW5zIjoyNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTc6MzQ6MTkuMDI3MTI5Mzg2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwNzE0MDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza190eF9jb21wbGV0ZWRcIixcbiAgICBcInhza190eF9jb21taXRfYmF0Y2hcIixcbiAgICBcIl9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hcIixcbiAgICBcInhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkXCIsXG4gICAgXCJ4c2tfZHJvcF9za2JcIixcbiAgICBcInhza19idWlsZF9za2JfemVyb2NvcHlcIixcbiAgICBcInhza19idWlsZF9za2JcIixcbiAgICBcIl9feHNrX2dlbmVyaWNfeG1pdFwiLFxuICAgIFwieHBfYWxsb2NfdHhfZGVzY3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZfWERQIG11bHRpLWJ1ZmZlciAoU0cpIHBhY2tldCB0cmFuc21pc3Npb24gbG9naWMsIGludHJvZHVjaW5nIGJhdGNoaW5nIGFuZCByZWNsYWltIGRlc2NyaXB0b3JzIHRvIGhhbmRsZSBpbnZhbGlkIGRlc2NyaXB0b3JzIGFuZCBib3VuZGFyaWVzIGNvcnJlY3RseS4gSXQgbW9kaWZpZXMgY29yZSBYRFAgc29ja2V0IGNvZGUgaW4gbmV0L3hkcC94c2suYyBhbmQgbmV0L3hkcC94c2tfcXVldWUuaC4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfdHhfY29tcGxldGVkXCIsXG4gICAgXCJ4c2tfdHhfY29tbWl0X2JhdGNoXCIsXG4gICAgXCJfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZFwiLFxuICAgIFwieHNrX2Ryb3Bfc2tiXCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiX3plcm9jb3B5XCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiXCIsXG4gICAgXCJfX3hza19nZW5lcmljX3htaXRcIixcbiAgICBcInhwX2FsbG9jX3R4X2Rlc2NzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCBtdWx0aS1idWZmZXIgKFNHKSBwYWNrZXQgdHJhbnNtaXNzaW9uIGxvZ2ljLCBpbnRyb2R1Y2luZyBiYXRjaGluZyBhbmQgcmVjbGFpbSBkZXNjcmlwdG9ycyB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgYm91bmRhcmllcyBjb3JyZWN0bHkuIEl0IG1vZGlmaWVzIGNvcmUgWERQIHNvY2tldCBjb2RlIGluIG5ldC94ZHAveHNrLmMgYW5kIG5ldC94ZHAveHNrX3F1ZXVlLmguIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gw7f[1] Phase: Succeeded StartedAt: 2026-07-11 17:34:32 +0000 UTC FinishedAt: 2026-07-11 17:34:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 17:34:32 +0000 UTC FinishedAt: 2026-07-11 17:34:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2] Phase: Succeeded StartedAt: 2026-07-11 17:34:32 +0000 UTC FinishedAt: 2026-07-11 21:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 17:34:33 +0000 UTC FinishedAt: 2026-07-11 21:53:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 17:34:33 +0000 UTC FinishedAt: 2026-07-11 17:35:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 17:34:33 +0000 UTC FinishedAt: 2026-07-11 17:35:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-workflow7gw7f/series-workflow7gw7f-convert-artifact-3318442466/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 17:35:13 +0000 UTC FinishedAt: 2026-07-11 18:07:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 17:35:13 +0000 UTC FinishedAt: 2026-07-11 18:07:52 +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:*c3090e16-fd3e-4d0e-8418-9195925b76bf,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-workflow7gw7f/series-workflow7gw7f-convert-artifact-3318442466/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": "339ce87a-ea3d-4746-b3e0-fb95554ed4c6", "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-workflow7gw7f/series-workflow7gw7f-build-action-3577135520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 17:35:13 +0000 UTC FinishedAt: 2026-07-11 18:07:42 +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:*c3090e16-fd3e-4d0e-8418-9195925b76bf,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-workflow7gw7f/series-workflow7gw7f-convert-artifact-3318442466/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": "339ce87a-ea3d-4746-b3e0-fb95554ed4c6", "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-workflow7gw7f/series-workflow7gw7f-build-action-3577135520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:07:52 +0000 UTC FinishedAt: 2026-07-11 18:07:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:07:52 +0000 UTC FinishedAt: 2026-07-11 18:07:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:07:52 +0000 UTC FinishedAt: 2026-07-11 18:08:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:07:52 +0000 UTC FinishedAt: 2026-07-11 18:07:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-workflow7gw7f/series-workflow7gw7f-convert-artifact-2813856061/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:08:03 +0000 UTC FinishedAt: 2026-07-11 18:10:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:08:03 +0000 UTC FinishedAt: 2026-07-11 18:10:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*339ce87a-ea3d-4746-b3e0-fb95554ed4c6,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-workflow7gw7f/series-workflow7gw7f-build-action-3577135520/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-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:10:43 +0000 UTC FinishedAt: 2026-07-11 18:10:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:10:43 +0000 UTC FinishedAt: 2026-07-11 18:10:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:10:43 +0000 UTC FinishedAt: 2026-07-11 18:48:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:10:43 +0000 UTC FinishedAt: 2026-07-11 18:48:46 +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:*c3090e16-fd3e-4d0e-8418-9195925b76bf,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-workflow7gw7f/series-workflow7gw7f-convert-artifact-2813856061/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": "fe7f61e6-47f2-4795-a257-548036941c35", "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-workflow7gw7f/series-workflow7gw7f-build-action-4236683417/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:10:43 +0000 UTC FinishedAt: 2026-07-11 18:48:36 +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:*c3090e16-fd3e-4d0e-8418-9195925b76bf,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-workflow7gw7f/series-workflow7gw7f-convert-artifact-2813856061/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": "fe7f61e6-47f2-4795-a257-548036941c35", "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-workflow7gw7f/series-workflow7gw7f-build-action-4236683417/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:48:46 +0000 UTC FinishedAt: 2026-07-11 18:48:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:48:46 +0000 UTC FinishedAt: 2026-07-11 18:48:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:48:46 +0000 UTC FinishedAt: 2026-07-11 18:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:48:46 +0000 UTC FinishedAt: 2026-07-11 18:50:36 +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:*fe7f61e6-47f2-4795-a257-548036941c35,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-workflow7gw7f/series-workflow7gw7f-build-action-4236683417/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-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:50:46 +0000 UTC FinishedAt: 2026-07-11 21:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:50:46 +0000 UTC FinishedAt: 2026-07-11 21:53:26 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"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:*339ce87a-ea3d-4746-b3e0-fb95554ed4c6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe7f61e6-47f2-4795-a257-548036941c35,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-workflow7gw7f/series-workflow7gw7f-build-action-3577135520/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-workflow7gw7f/series-workflow7gw7f-build-action-4236683417/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:50:46 +0000 UTC FinishedAt: 2026-07-11 18:50:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:50:46 +0000 UTC FinishedAt: 2026-07-11 18:50:52 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"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-workflow7gw7f/series-workflow7gw7f-convert-artifact-4255390914/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:50:46 +0000 UTC FinishedAt: 2026-07-11 18:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:50:46 +0000 UTC FinishedAt: 2026-07-11 18:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:50:46 +0000 UTC FinishedAt: 2026-07-11 18:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:50:56 +0000 UTC FinishedAt: 2026-07-11 21:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gw7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_completed","xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_tx_peek_release_desc_batch","xsk_cq_submit_addr_single_locked","xsk_drop_skb","xsk_build_skb_zerocopy","xsk_build_skb","__xsk_generic_xmit","xp_alloc_tx_descs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"b6a2282b-c5f5-416d-8b7c-d3151cdc63dd","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-07-11 18:50:56 +0000 UTC FinishedAt: 2026-07-11 21:53:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*339ce87a-ea3d-4746-b3e0-fb95554ed4c6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe7f61e6-47f2-4795-a257-548036941c35,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-workflow7gw7f/series-workflow7gw7f-build-action-3577135520/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-workflow7gw7f/series-workflow7gw7f-build-action-4236683417/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-workflow7gw7f/series-workflow7gw7f-convert-artifact-4255390914/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,}