Name: series-workflow859cl Phase: Succeeded StartedAt: 2026-07-02 19:42:33 +0000 UTC FinishedAt: 2026-07-02 20:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[0] Phase: Succeeded StartedAt: 2026-07-02 19:42:33 +0000 UTC FinishedAt: 2026-07-02 19:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 19:42:33 +0000 UTC FinishedAt: 2026-07-02 19:51:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4a50a141f05a8d1737661b19ee22ff8455b94409", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT2_FS", "FAT_FS", "MSDOS_FS", "VFAT_FS", "MINIX_FS", "UDF_FS", "BFS_FS", "AFFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4a50a141f05a8d1737661b19ee22ff8455b94409", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT2_FS", "FAT_FS", "MSDOS_FS", "VFAT_FS", "MINIX_FS", "UDF_FS", "BFS_FS", "AFFS_FS" ], "series_id": "a71b0842-80ca-4520-bf44-525b2ea88c3f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__writeback_single_inode", "writeback_single_inode", "ext4_sync_inode_metadata", "ext2_sync_inode_metadata", "fat_sync_inode_metadata", "udf_sync_inode_metadata", "minix_sync_inode_metadata", "bfs_sync_inode_metadata", "simple_fsync_noflush" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "1bc13af8-2d91-4fbd-b43e-fbe72f29ca41" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUMl9GUyYjMzQ7LAogICAgJiMzNDtGQVRfRlMmIzM0OywKICAgICYjMzQ7TVNET1NfRlMmIzM0OywKICAgICYjMzQ7VkZBVF9GUyYjMzQ7LAogICAgJiMzNDtNSU5JWF9GUyYjMzQ7LAogICAgJiMzNDtVREZfRlMmIzM0OywKICAgICYjMzQ7QkZTX0ZTJiMzNDssCiAgICAmIzM0O0FGRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3dyaXRlYmFja19zaW5nbGVfaW5vZGUmIzM0OywKICAgICYjMzQ7d3JpdGViYWNrX3NpbmdsZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7ZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O2ZhdF9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3VkZl9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O21pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7YmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7c2ltcGxlX2ZzeW5jX25vZmx1c2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBWRlMgc3VwZXJfb3BlcmF0aW9ucyBjYWxsYmFjayBgc3luY19pbm9kZV9tZXRhZGF0YWAgYW5kIG1vZGlmaWVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIGV4dDIsIGZhdCwgbWluaXgsIHVkZiwgYmZzLCBhZmZzKSB0byBpbXBsZW1lbnQgYW5kIHVzZSBpdC4gSXQgYWxzbyBtb2RpZmllcyB0aGUgY29yZSB3cml0ZWJhY2sgbG9naWMgaW4gYGZzL2ZzLXdyaXRlYmFjay5jYCB0byB3YWl0IGZvciBpbm9kZSBtZXRhZGF0YSBJTy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIFZGUyBhbmQgbXVsdGlwbGUgZmlsZXN5c3RlbXMsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTUxMDQ1OGUwMmIyMzJkYmU4NzNiNzZmMTc2ZjRjMTFiNjA2MGUyN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTk6NTE6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9hZmZzLmggYi9mcy9hZmZzL2FmZnMuaFxuaW5kZXggNDRhM2Y2OWQyNzVmOTYuLmE3ZmFhOTFkZWVkNWFjIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9hZmZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvYWZmcy5oXG5AQCAtNDQsNyAmIzQzOzQ0LDYgQEAgc3RydWN0IGFmZnNfaW5vZGVfaW5mbyB7XG4gXHRzdHJ1Y3QgbXV0ZXggaV9saW5rX2xvY2s7XHRcdC8qIFByb3RlY3RzIGludGVybmFsIGlub2RlIGFjY2Vzcy4gKi9cbiBcdHN0cnVjdCBtdXRleCBpX2V4dF9sb2NrO1x0XHQvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovXG4gI2RlZmluZSBpX2hhc2hfbG9jayBpX2V4dF9sb2NrXG4tXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XG4gXHR1MzJcdCBpX2Jsa2NudDtcdFx0XHQvKiBibG9jayBjb3VudCAqL1xuIFx0dTMyXHQgaV9leHRjbnQ7XHRcdFx0LyogZXh0ZW5kZWQgYmxvY2sgY291bnQgKi9cbiBcdHUzMlx0KmlfbGM7XHRcdFx0XHQvKiBsaW5lYXIgY2FjaGUgb2YgZXh0ZW5kZWQgYmxvY2tzICovXG5AQCAtMTUyLDcgJiM0MzsxNTEsNiBAQCBleHRlcm4gYm9vbFx0YWZmc19ub2ZpbGVuYW1ldHJ1bmNhdGUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBleHRlcm4gaW50XHRhZmZzX2NoZWNrX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgaW50IGxlbixcbiBcdFx0XHRcdGJvb2wgbm90cnVuY2F0ZSk7XG4gZXh0ZXJuIGludFx0YWZmc19jb3B5X25hbWUodW5zaWduZWQgY2hhciAqYnN0ciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbi1zdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmFmZnNfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKiBiaXRtYXAuIGMgKi9cbiBcbmRpZmYgLS1naXQgYS9mcy9hZmZzL2FtaWdhZmZzLmMgYi9mcy9hZmZzL2FtaWdhZmZzLmNcbmluZGV4IGJlZDRmYzgwNWU4ZTY2Li42Y2MwZmM5YTRjYmY5MiAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvYW1pZ2FmZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9hbWlnYWZmcy5jXG5AQCAtNTcsNyAmIzQzOzU3LDcgQEAgYWZmc19pbnNlcnRfaGFzaChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiBcdFx0QUZGU19UQUlMKHNiLCBkaXJfYmgpLVx1MDAzZWhhc2hfY2hhaW4gPSBjcHVfdG9fYmUzMihpbm8pO1xuIFxuIFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oZGlyX2JoLCBpbm8pO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCwgXHUwMDI2QUZGU19JKGRpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCk7XG4gXHRhZmZzX2JyZWxzZShkaXJfYmgpO1xuIFxuIFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XG5AQCAtMTAwLDcgJiM0MzsxMDAsNyBAQCBhZmZzX3JlbW92ZV9oYXNoKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlbV9iaClcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VoYXNoX2NoYWluID0gaW5vO1xuIFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBiZTMyX3RvX2NwdShpbm8pIC0gaGFzaF9pbm8pO1xuLVx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGRpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRcdFx0QUZGU19UQUlMKHNiLCByZW1fYmgpLVx1MDAzZXBhcmVudCA9IDA7XG4gXHRcdFx0cmV0dmFsID0gMDtcbiBcdFx0XHRicmVhaztcbkBAIC0xODAsNyAmIzQzOzE4MCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkobGlua19iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoKTtcbiBcbiBcdFx0bWVtY3B5KEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZW5hbWUsIEFGRlNfVEFJTChzYiwgbGlua19iaCktXHUwMDNlbmFtZSwgMzIpO1xuIFx0XHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xuQEAgLTE4OCw3ICYjNDM7MTg4LDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRcdFx0YWZmc191bmxvY2tfZGlyKGRpcik7XG4gXHRcdFx0Z290byBkb25lO1xuIFx0XHR9XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXG4gXHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRpcHV0KGRpcik7XG5AQCAtMjAzLDcgJiM0MzsyMDMsNyBAQCBhZmZzX3JlbW92ZV9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdFx0XHRfX2JlMzIgaW5vMiA9IEFGRlNfVEFJTChzYiwgbGlua19iaCktXHUwMDNlbGlua19jaGFpbjtcbiBcdFx0XHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VsaW5rX2NoYWluID0gaW5vMjtcbiBcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShiaCwgYmUzMl90b19jcHUoaW5vMikgLSBsaW5rX2lubyk7XG4tXHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHRcdHJldHZhbCA9IDA7XG4gXHRcdFx0LyogRml4IHRoZSBsaW5rIGNvdW50LCBpZiBiaCBpcyBhIG5vcm1hbCBoZWFkZXIgYmxvY2sgd2l0aG91dCBsaW5rcyAqL1xuIFx0XHRcdHN3aXRjaCAoYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlc3R5cGUpKSB7XG5AQCAtMzA2LDcgJiM0MzszMDYsNyBAQCBhZmZzX3JlbW92ZV9oZWFkZXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dmFsID0gYWZmc19yZW1vdmVfaGFzaChkaXIsIGJoKTtcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gZG9uZV91bmxvY2s7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcbiBcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmNcbmluZGV4IDE0NGIxNzQ4MmQxMmRhLi4yM2UwODhhN2VkNGZiMyAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2ZpbGUuY1xuQEAgLTE0MCwxNCAmIzQzOzE0MCwxNCBAQCBhZmZzX2FsbG9jX2V4dGJsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHUzMiBleHQpXG4gXHRBRkZTX1RBSUwoc2IsIG5ld19iaCktXHUwMDNlcGFyZW50ID0gY3B1X3RvX2JlMzIoaW5vZGUtXHUwMDNlaV9pbm8pO1xuIFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIG5ld19iaCk7XG4gXG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkobmV3X2JoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRtYXJrX2J1ZmZlcl9kaXJ0eShuZXdfYmgpO1xuIFxuIFx0dG1wID0gYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlZXh0ZW5zaW9uKTtcbiBcdGlmICh0bXApXG4gXHRcdGFmZnNfd2FybmluZyhzYiwgXCYjMzQ7YWxsb2NfZXh0XCYjMzQ7LCBcJiMzNDtwcmV2aW91cyBleHRlbnNpb24gc2V0ICgleClcJiMzNDssIHRtcCk7XG4gXHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VleHRlbnNpb24gPSBjcHVfdG9fYmUzMihibG9ja25yKTtcbiBcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBibG9ja25yIC0gdG1wKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFxuIFx0QUZGU19JKGlub2RlKS1cdTAwM2VpX2V4dGNudCYjNDM7JiM0Mzs7XG4gXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbkBAIC01ODEsNyAmIzQzOzU4MSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0XHRtZW1zZXQoQUZGU19EQVRBKGJoKSAmIzQzOyBib2ZmLCAwLCB0bXApO1xuIFx0XHRiZTMyX2FkZF9jcHUoXHUwMDI2QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUsIHRtcCk7XG4gXHRcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRcdHNpemUgJiM0Mzs9IHRtcDtcbiBcdFx0YmlkeCYjNDM7JiM0Mzs7XG4gXHR9IGVsc2UgaWYgKGJpZHgpIHtcbkBAIC02MDMsNyAmIzQzOzYwMyw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0XHRBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7XG4gXHRcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4gXHRcdGJoLVx1MDAzZWJfc3RhdGUgXHUwMDI2PSB+KDFVTCBcdTAwM2NcdTAwM2MgQkhfTmV3KTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0aWYgKHByZXZfYmgpIHtcbiBcdFx0XHR1MzIgdG1wX25leHQgPSBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0KTtcbiBcbkBAIC02MTMsOCAmIzQzOzYxMyw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0XHRcdFx0XHQgICAgIGJpZHgsIHRtcF9uZXh0KTtcbiBcdFx0XHRBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXHUwMDNlYl9ibG9ja25yKTtcbiBcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShwcmV2X2JoLCBiaC1cdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XG4tXHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsXG4tXHRcdFx0XHRcdCAgICAgIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcbiBcdFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0fVxuIFx0XHRzaXplICYjNDM7PSBic2l6ZTtcbkBAIC03MzMsNyAmIzQzOzczMiw3IEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUgPSBjcHVfdG9fYmUzMihcbiBcdFx0XHRtYXgoYm9mZiAmIzQzOyB0bXAsIGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKGJoKS1cdTAwM2VzaXplKSkpO1xuIFx0XHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHR3cml0dGVuICYjNDM7PSB0bXA7XG4gXHRcdGZyb20gJiM0Mzs9IHRtcDtcbiBcdFx0YmlkeCYjNDM7JiM0Mzs7XG5AQCAtNzY2LDEzICYjNDM7NzY1LDEyIEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0XHRcdFx0XHQgICAgIGJpZHgsIHRtcF9uZXh0KTtcbiBcdFx0XHRcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVx1MDAzZW5leHQgPSBjcHVfdG9fYmUzMihiaC1cdTAwM2ViX2Jsb2NrbnIpO1xuIFx0XHRcdFx0YWZmc19hZGp1c3RfY2hlY2tzdW0ocHJldl9iaCwgYmgtXHUwMDNlYl9ibG9ja25yIC0gdG1wX25leHQpO1xuLVx0XHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsXG4tXHRcdFx0XHRcdFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0d3JpdHRlbiAmIzQzOz0gYnNpemU7XG4gXHRcdGZyb20gJiM0Mzs9IGJzaXplO1xuIFx0XHRiaWR4JiM0MzsmIzQzOztcbkBAIC04MDEsMTQgJiM0Mzs3OTksMTMgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdFx0XHRcdCAgICAgYmlkeCwgdG1wX25leHQpO1xuIFx0XHRcdFx0QUZGU19EQVRBX0hFQUQocHJldl9iaCktXHUwMDNlbmV4dCA9IGNwdV90b19iZTMyKGJoLVx1MDAzZWJfYmxvY2tucik7XG4gXHRcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShwcmV2X2JoLCBiaC1cdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XG4tXHRcdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCxcbi1cdFx0XHRcdFx0XHRcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoYmUzMl90b19jcHUoQUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUpIFx1MDAzYyB0bXApXG4gXHRcdFx0QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUgPSBjcHVfdG9fYmUzMih0bXApO1xuIFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0d3JpdHRlbiAmIzQzOz0gdG1wO1xuIFx0XHRmcm9tICYjNDM7PSB0bXA7XG4gXHRcdGJpZHgmIzQzOyYjNDM7O1xuQEAgLTk0NSw3ICYjNDM7OTQyLDcgQEAgYWZmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fVxuIFx0QUZGU19UQUlMKHNiLCBleHRfYmgpLVx1MDAzZWV4dGVuc2lvbiA9IDA7XG4gXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgZXh0X2JoKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShleHRfYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCk7XG4gXHRhZmZzX2JyZWxzZShleHRfYmgpO1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfc2l6ZSkge1xuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvaW5vZGUuYyBiL2ZzL2FmZnMvaW5vZGUuY1xuaW5kZXggNWRkMWIwMTZiY2IwMGEuLmQ0YTNmMzgxYzRiY2ZmIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2lub2RlLmNcbkBAIC0yMDYsNyAmIzQzOzIwNiw3IEBAIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdH1cbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGFmZnNfYnJlbHNlKGJoKTtcbiBcdGFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7XG4gXHRyZXR1cm4gMDtcbkBAIC0yNjYsMTEgJiM0MzsyNjYsOCBAQCBhZmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRpZiAoIWlub2RlLVx1MDAzZWlfbmxpbmspIHtcbiBcdFx0aW5vZGUtXHUwMDNlaV9zaXplID0gMDtcbiBcdFx0YWZmc190cnVuY2F0ZShpbm9kZSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRtbWJfc3luYyhcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdH1cbiBcbi1cdG1tYl9pbnZhbGlkYXRlKFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xuIFx0YWZmc19mcmVlX3ByZWFsbG9jKGlub2RlKTtcbiBcdGNhY2hlX3BhZ2UgPSAodW5zaWduZWQgbG9uZylBRkZTX0koaW5vZGUpLVx1MDAzZWlfbGM7XG5AQCAtMzA1LDcgJiM0MzszMDIsNyBAQCBhZmZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpcilcbiBcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XG4gXHRpZiAoIWJoKVxuIFx0XHRnb3RvIGVycl9iaDtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFxuIFx0aW5vZGUtXHUwMDNlaV91aWQgICAgID0gY3VycmVudF9mc3VpZCgpO1xuQEAgLTM5MywxNyAmIzQzOzM5MCwxNyBAQCBhZmZzX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzM1xuIFx0XHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VsaW5rX2NoYWluID0gY2hhaW47XG4gXHRcdEFGRlNfVEFJTChzYiwgaW5vZGVfYmgpLVx1MDAzZWxpbmtfY2hhaW4gPSBjcHVfdG9fYmUzMihibG9jayk7XG4gXHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGlub2RlX2JoLCBibG9jayAtIGJlMzJfdG9fY3B1KGNoYWluKSk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCk7XG4gXHRcdHNldF9ubGluayhpbm9kZSwgMik7XG4gXHRcdGlob2xkKGlub2RlKTtcbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGRlbnRyeS1cdTAwM2VkX2ZzZGF0YSA9ICh2b2lkICopKGxvbmcpYmgtXHUwMDNlYl9ibG9ja25yO1xuIFxuIFx0YWZmc19sb2NrX2RpcihkaXIpO1xuIFx0cmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChkaXIsIGJoKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc191bmxvY2tfZGlyKGRpcik7XG4gXHRhZmZzX3VubG9ja19saW5rKGlub2RlKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9hZmZzL25hbWVpLmMgYi9mcy9hZmZzL25hbWVpLmNcbmluZGV4IGMzYzY1MzJkYTRiMGRhLi41N2Q4ZDc1NWFhZGEwNSAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9uYW1laS5jXG5AQCAtMzczLDcgJiM0MzszNzMsNyBAQCBhZmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0fVxuIFx0KnAgPSAwO1xuIFx0aW5vZGUtXHUwMDNlaV9zaXplID0gaSAmIzQzOyAxO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRhZmZzX2JyZWxzZShiaCk7XG4gXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiBcbkBAIC00NDMsOCAmIzQzOzQ0Myw3IEBAIGFmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdC8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi9cbiBcbiBkb25lOlxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLFxuLVx0XHRcdFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGFmZnNfYnJlbHNlKGJoKTtcbiBcdHJldHVybiByZXR2YWw7XG4gfVxuQEAgLTQ5Nyw4ICYjNDM7NDk2LDggQEAgYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gob2xkX2RpciwgYmhfbmV3KTtcbiBcdGFmZnNfdW5sb2NrX2RpcihvbGRfZGlyKTtcbiBkb25lOlxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoX29sZCwgXHUwMDI2QUZGU19JKG5ld19kaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFx1MDAyNkFGRlNfSShvbGRfZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmhfb2xkKTtcbiYjNDM7XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcpO1xuIFx0YWZmc19icmVsc2UoYmhfb2xkKTtcbiBcdGFmZnNfYnJlbHNlKGJoX25ldyk7XG4gXHRyZXR1cm4gcmV0dmFsO1xuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvc3VwZXIuYyBiL2ZzL2FmZnMvc3VwZXIuY1xuaW5kZXggYjIzMjI1MWFhN2JiZDAuLjBhZDUxMjdlOWZiOGVlIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL3N1cGVyLmNcbkBAIC0xMDgsNyAmIzQzOzEwOCw2IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdGktXHUwMDNlaV9sYyA9IE5VTEw7XG4gXHRpLVx1MDAzZWlfZXh0X2JoID0gTlVMTDtcbiBcdGktXHUwMDNlaV9wYV9jbnQgPSAwO1xuLVx0bW1iX2luaXQoXHUwMDI2aS1cdTAwM2VpX21ldGFkYXRhX2JocywgXHUwMDI2aS1cdTAwM2V2ZnNfaW5vZGUuaV9kYXRhKTtcbiBcbiBcdHJldHVybiBcdTAwMjZpLVx1MDAzZXZmc19pbm9kZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jXG5pbmRleCA1YjQwYWIwOWE3OTZkZS4uOWIzN2VjNGJkODlhOGMgMTAwNjQ0XG4tLS0gYS9mcy9iZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Jmcy9kaXIuY1xuQEAgLTY4LDE3ICYjNDM7NjgsMTAgQEAgc3RhdGljIGludCBiZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBiZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHJldHVybiBtbWJfZnN5bmMoZmlsZSxcbi1cdFx0XHRcdTAwMjZCRlNfSShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IGJmc19yZWFkZGlyLFxuLVx0LmZzeW5jXHRcdD0gYmZzX2ZzeW5jLFxuJiM0MztcdC5mc3luY1x0XHQ9IHNpbXBsZV9mc3luYyxcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL2lub2RlLmMgYi9mcy9iZnMvaW5vZGUuY1xuaW5kZXggZTQxZWZkZDM1ZGI5ZWYuLmNhY2M3ZWZmOWMzM2NlIDEwMDY0NFxuLS0tIGEvZnMvYmZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Jmcy9pbm9kZS5jXG5AQCAtMTM2LDcgJiM0MzsxMzYsNiBAQCBzdGF0aWMgaW50IGJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdHVuc2lnbmVkIGxvbmcgaV9zYmxvY2s7XG4gXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRpbnQgZXJyID0gMDtcbiBcbiBcdGRwcmludGYoXCYjMzQ7aW5vPSUwOHhcXG5cJiMzNDssIGlubyk7XG4gXG5AQCAtMTY1LDEzICYjNDM7MTY0LDMxIEBAIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0ZGktXHUwMDNlaV9lb2Zmc2V0ID0gY3B1X3RvX2xlMzIoaV9zYmxvY2sgKiBCRlNfQlNJWkUgJiM0MzsgaW5vZGUtXHUwMDNlaV9zaXplIC0gMSk7XG4gXG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdH1cbiBcdGJyZWxzZShiaCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4mIzQzO1x0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7e1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuJiM0MztcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4mIzQzO1xuJiM0MztcdGRpID0gZmluZF9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCAodTE2KWlub2RlLVx1MDAzZWlubywgXHUwMDI2YmgpO1xuJiM0MztcdGlmIChJU19FUlIoZGkpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZGkpO1xuJiM0MztcbiYjNDM7XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4mIzQzO1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiYjNDM7XHRcdGVyciA9IC1FSU87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0ZXJyID0gbW1iX3N5bmMoXHUwMDI2QkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7b3V0OlxuJiM0MztcdGJyZWxzZShiaCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zMDIsNiAmIzQzOzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSBiZnNfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBiZnNfZnJlZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBiZnNfd3JpdGVfaW5vZGUsXG4mIzQzO1x0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBiZnNfc3luY19pbm9kZV9tZXRhZGF0YSxcbiBcdC5ldmljdF9pbm9kZVx0PSBiZnNfZXZpY3RfaW5vZGUsXG4gXHQucHV0X3N1cGVyXHQ9IGJmc19wdXRfc3VwZXIsXG4gXHQuc3RhdGZzXHRcdD0gYmZzX3N0YXRmcyxcbmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jXG5pbmRleCA5YWY1ZjA2MWExZjg1YS4uYmU4YjU3YTYzNWNkODIgMTAwNjQ0XG4tLS0gYS9mcy9idWZmZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnVmZmVyLmNcbkBAIC02MjgsNzkgJiM0Mzs2MjgsNiBAQCBpbnQgbW1iX3N5bmMoc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpXG4gfVxuIEVYUE9SVF9TWU1CT0wobW1iX3N5bmMpO1xuIFxuLS8qKlxuLSAqIG1tYl9mc3luY19ub2ZsdXNoIC0gZnN5bmMgaW1wbGVtZW50YXRpb24gZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aXRoXG4tICogXHRcdCAgICAgICBtZXRhZGF0YSBidWZmZXJzIGxpc3Rcbi0gKlxuLSAqIEBmaWxlOlx0ZmlsZSB0byBzeW5jaHJvbml6ZVxuLSAqIEBtbWI6XHRsaXN0IG9mIG1ldGFkYXRhIGJocyB0byBmbHVzaFxuLSAqIEBzdGFydDpcdHN0YXJ0IG9mZnNldCBpbiBieXRlc1xuLSAqIEBlbmQ6XHRlbmQgb2Zmc2V0IGluIGJ5dGVzIChpbmNsdXNpdmUpXG4tICogQGRhdGFzeW5jOlx0b25seSBzeW5jaHJvbml6ZSBlc3NlbnRpYWwgbWV0YWRhdGEgaWYgdHJ1ZVxuLSAqXG4tICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZnN5bmMgbWV0aG9kIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2hpY2hcbi0gKiB0cmFjayBhbGwgbm9uLWlub2RlIG1ldGFkYXRhIGluIHRoZSBidWZmZXJzIGxpc3QgaGFuZ2luZyBvZmYgdGhlIEBtbWJcbi0gKiBzdHJ1Y3R1cmUuXG4tICovXG4taW50IG1tYl9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcbi1cdFx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0aW50IGVycjtcbi1cdGludCByZXQgPSAwO1xuLVxuLVx0ZXJyID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4tXHRpZiAobW1iKVxuLVx0XHRyZXQgPSBtbWJfc3luYyhtbWIpO1xuLVx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9BTEwpKVxuLVx0XHRnb3RvIG91dDtcbi1cdGlmIChkYXRhc3luYyBcdTAwMjZcdTAwMjYgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0RBVEFTWU5DKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbi1cdGlmIChyZXQgPT0gMClcbi1cdFx0cmV0ID0gZXJyO1xuLVxuLW91dDpcbi1cdC8qIGNoZWNrIGFuZCBhZHZhbmNlIGFnYWluIHRvIGNhdGNoIGVycm9ycyBhZnRlciBzeW5jaW5nIG91dCBidWZmZXJzICovXG4tXHRlcnIgPSBmaWxlX2NoZWNrX2FuZF9hZHZhbmNlX3diX2VycihmaWxlKTtcbi1cdGlmIChyZXQgPT0gMClcbi1cdFx0cmV0ID0gZXJyO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTChtbWJfZnN5bmNfbm9mbHVzaCk7XG4tXG4tLyoqXG4tICogbW1iX2ZzeW5jIC0gZnN5bmMgaW1wbGVtZW50YXRpb24gZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aXRoIG1ldGFkYXRhXG4tICogXHQgICAgICAgYnVmZmVycyBsaXN0XG4tICpcbi0gKiBAZmlsZTpcdGZpbGUgdG8gc3luY2hyb25pemVcbi0gKiBAbW1iOlx0bGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2hcbi0gKiBAc3RhcnQ6XHRzdGFydCBvZmZzZXQgaW4gYnl0ZXNcbi0gKiBAZW5kOlx0ZW5kIG9mZnNldCBpbiBieXRlcyAoaW5jbHVzaXZlKVxuLSAqIEBkYXRhc3luYzpcdG9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWVcbi0gKlxuLSAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGZzeW5jIG1ldGhvZCBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdoaWNoXG4tICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iXG4tICogc3RydWN0dXJlLiBUaGlzIGFsc28gbWFrZXMgc3VyZSB0aGF0IGEgZGV2aWNlIGNhY2hlIGZsdXNoIG9wZXJhdGlvbiBpc1xuLSAqIGNhbGxlZCBhdCB0aGUgZW5kLlxuLSAqL1xuLWludCBtbWJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLFxuLVx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbGUsIG1tYiwgc3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuLVx0aWYgKCFyZXQpXG4tXHRcdHJldCA9IGJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldik7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1FWFBPUlRfU1lNQk9MKG1tYl9mc3luYyk7XG4tXG4gLypcbiAgKiBDYWxsZWQgd2hlbiB3ZSYjMzk7dmUgcmVjZW50bHkgd3JpdHRlbiBibG9jayBgYmJsb2NrJiMzOTssIGFuZCBpdCBpcyBrbm93biB0aGF0XG4gICogYGJibG9jayYjMzk7IHdhcyBmb3IgYSBidWZmZXJfYm91bmRhcnkoKSBidWZmZXIuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGJsb2NrIGF0XG5AQCAtMTEyMywxMiAmIzQzOzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7XG4gXG4gdm9pZCBtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbiYjNDM7XG4gXHRzZXRfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdC8qIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHNldCB0aGlzIGluIGJvdGggcGxhY2VzPyAqL1xuIFx0aWYgKGJoLVx1MDAzZWJfZm9saW8gXHUwMDI2XHUwMDI2IGJoLVx1MDAzZWJfZm9saW8tXHUwMDNlbWFwcGluZylcbiBcdFx0bWFwcGluZ19zZXRfZXJyb3IoYmgtXHUwMDNlYl9mb2xpby1cdTAwM2VtYXBwaW5nLCAtRUlPKTtcbi1cdGlmIChiaC1cdTAwM2ViX21tYilcbi1cdFx0bWFwcGluZ19zZXRfZXJyb3IoYmgtXHUwMDNlYl9tbWItXHUwMDNlbWFwcGluZywgLUVJTyk7XG4mIzQzO1x0LyogUHJvdGVjdCB1cyBmcm9tIG1tYiBcdTAwMjYgaW5vZGUgZ2V0dGluZyBmcmVlZCB3aGlsZSB3ZSB3b3JrIG9uIGl0ICovXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdG1tYiA9IFJFQURfT05DRShiaC1cdTAwM2ViX21tYik7XG4mIzQzO1x0aWYgKG1tYilcbiYjNDM7XHRcdG1hcHBpbmdfc2V0X2Vycm9yKG1tYi1cdTAwM2VtYXBwaW5nLCAtRUlPKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcik7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmNcbmluZGV4IDI3OGQ0YmU4ZWNiZTc3Li5lMTdiYmM3NTk4YzE0MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDIvZGlyLmNcbkBAIC03MzQsNiAmIzQzOzczNCw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9ucyA9IHtcbiAjaWZkZWYgQ09ORklHX0NPTVBBVFxuIFx0LmNvbXBhdF9pb2N0bFx0PSBleHQyX2NvbXBhdF9pb2N0bCxcbiAjZW5kaWZcbi1cdC5mc3luY1x0XHQ9IGV4dDJfZnN5bmMsXG4mIzQzO1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNldGxlYXNlXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXG4gfTtcbmRpZmYgLS1naXQgYS9mcy9leHQyL2V4dDIuaCBiL2ZzL2V4dDIvZXh0Mi5oXG5pbmRleCA3OWY3YjM5NTI1OGMyYS4uNTY0MjQ1MWJmMTkxNzMgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2V4dDIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9leHQyLmhcbkBAIC03MzUsNiAmIzQzOzczNSw3IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIGV4dDJfY291bnRfZnJlZSAoc3RydWN0IGJ1ZmZlcl9oZWFkICosIHVuc2lnbmVkKTtcbiAvKiBpbm9kZS5jICovXG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZXh0Ml9pZ2V0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyk7XG4gZXh0ZXJuIGludCBleHQyX3dyaXRlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuJiM0MztleHRlcm4gaW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xuIHZvaWQgZXh0Ml93cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0byk7XG4gZXh0ZXJuIGludCBleHQyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpO1xuQEAgLTc3Miw4ICYjNDM7NzczLDYgQEAgZXh0ZXJuIHZvaWQgZXh0Ml9zeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICplcyxcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2Rpcl9vcGVyYXRpb25zO1xuIFxuIC8qIGZpbGUuYyAqL1xuLWV4dGVybiBpbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLVx0XHQgICAgICBpbnQgZGF0YXN5bmMpO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfb3BlcmF0aW9ucztcbiBcbmRpZmYgLS1naXQgYS9mcy9leHQyL2ZpbGUuYyBiL2ZzL2V4dDIvZmlsZS5jXG5pbmRleCA4ZGNhOWVjNGNhY2Q5YS4uYjkwMjBkZjdkODllMDMgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9maWxlLmNcbkBAIC00NywyMSAmIzQzOzQ3LDYgQEAgc3RhdGljIGludCBleHQyX3JlbGVhc2VfZmlsZSAoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4te1xuLVx0aW50IHJldDtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXG4tXHRyZXQgPSBtbWJfZnN5bmMoZmlsZSwgXHUwMDI2RVhUMl9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tXHRpZiAocmV0ID09IC1FSU8pXG4tXHRcdC8qIFdlIGRvbiYjMzk7dCByZWFsbHkga25vdyB3aGVyZSB0aGUgSU8gZXJyb3IgaGFwcGVuZWQuLi4gKi9cbi1cdFx0ZXh0Ml9lcnJvcihzYiwgX19mdW5jX18sXG4tXHRcdFx0ICAgXCYjMzQ7ZGV0ZWN0ZWQgSU8gZXJyb3Igd2hlbiB3cml0aW5nIG1ldGFkYXRhIGJ1ZmZlcnNcJiMzNDspO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gc3RhdGljIHNzaXplX3QgZXh0Ml9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXHUwMDNla2lfZmlscDtcbkBAIC0yMTMsNyAmIzQzOzE5OCw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4gXHQub3Blblx0XHQ9IGV4dDJfZmlsZV9vcGVuLFxuIFx0LnJlbGVhc2VcdD0gZXh0Ml9yZWxlYXNlX2ZpbGUsXG4tXHQuZnN5bmNcdFx0PSBleHQyX2ZzeW5jLFxuJiM0MztcdC5mc3luY1x0XHQ9IHNpbXBsZV9mc3luYyxcbiBcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYSxcbiBcdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuIFx0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaW5vZGUuYyBiL2ZzL2V4dDIvaW5vZGUuY1xuaW5kZXggMjk4MDg2MjljY2U1NmYuLjUxNjU2NjQxYzRlNTljIDEwMDY0NFxuLS0tIGEvZnMvZXh0Mi9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL2lub2RlLmNcbkBAIC0zOSw4ICYjNDM7MzksNiBAQFxuICNpbmNsdWRlIFwmIzM0O2FjbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGF0dHIuaFwmIzM0O1xuIFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKTtcbi1cbiAvKlxuICAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay5cbiAgKi9cbkBAIC04MywxMSAmIzQzOzgxLDE2IEBAIHZvaWQgZXh0Ml9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFx1MDAyNmlub2RlLVx1MDAzZWlfZGF0YSk7XG4gXG4gXHRpZiAod2FudF9kZWxldGUpIHtcbiYjNDM7XHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7XG4mIzQzO1x0XHRcdC5zeW5jX21vZGUgPSBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSA/IFdCX1NZTkNfQUxMIDpcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICAgV0JfU1lOQ19OT05FLFxuJiM0MztcdFx0fTtcbiYjNDM7XG4gXHRcdHNiX3N0YXJ0X2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0XHQvKiBzZXQgZHRpbWUgKi9cbiBcdFx0RVhUMl9JKGlub2RlKS1cdTAwM2VpX2R0aW1lXHQ9IGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKTtcbiBcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tXHRcdF9fZXh0Ml93cml0ZV9pbm9kZShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpO1xuJiM0MztcdFx0ZXh0Ml93cml0ZV9pbm9kZShpbm9kZSwgXHUwMDI2d2JjKTtcbiBcdFx0LyogdHJ1bmNhdGUgdG8gMCAqL1xuIFx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSAwO1xuIFx0XHRpZiAoaW5vZGUtXHUwMDNlaV9ibG9ja3MpXG5AQCAtMTQ2OSw3ICYjNDM7MTQ3Miw3IEBAIHN0cnVjdCBpbm9kZSAqZXh0Ml9pZ2V0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubylcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuJiM0MztpbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4gXHRzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICplaSA9IEVYVDJfSShpbm9kZSk7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbkBAIC0xNTYwLDIyICYjNDM7MTU2MywzMiBAQCBzdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcbiBcdH0gZWxzZSBmb3IgKG4gPSAwOyBuIFx1MDAzYyBFWFQyX05fQkxPQ0tTOyBuJiM0MzsmIzQzOylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfYmxvY2tbbl0gPSBlaS1cdTAwM2VpX2RhdGFbbl07XG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAoZG9fc3luYykge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbi1cdFx0XHRwcmludGsgKFwmIzM0O0lPIGVycm9yIHN5bmNpbmcgZXh0MiBpbm9kZSBbJXM6JTA4bHhdXFxuXCYjMzQ7LFxuLVx0XHRcdFx0c2ItXHUwMDNlc19pZCwgKHVuc2lnbmVkIGxvbmcpIGlubyk7XG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdFx0fVxuLVx0fVxuIFx0ZWktXHUwMDNlaV9zdGF0ZSBcdTAwMjY9IH5FWFQyX1NUQVRFX05FVztcbiBcdGJyZWxzZSAoYmgpO1xuJiM0MztcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGV4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4mIzQzO2ludCBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuLVx0cmV0dXJuIF9fZXh0Ml93cml0ZV9pbm9kZShpbm9kZSwgd2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7XG4mIzQzO1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiYjNDM7XHRzdHJ1Y3QgZXh0Ml9pbm9kZSAqcmF3X2lub2RlID0gZXh0Ml9nZXRfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIFx1MDAyNmJoKTtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKElTX0VSUihyYXdfaW5vZGUpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuJiM0MztcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4mIzQzO1x0XHRwcmludGsoXCYjMzQ7SU8gZXJyb3Igc3luY2luZyBleHQyIGlub2RlIFslczolMDhseF1cXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2lkLCAodW5zaWduZWQgbG9uZylpbm9kZS1cdTAwM2VpX2lubyk7XG4mIzQzO1x0XHRlcnIgPSAtRUlPO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGVyciA9IG1tYl9zeW5jKFx1MDAyNkVYVDJfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnJlbHNlKGJoKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBpbnQgZXh0Ml9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbmRpZmYgLS1naXQgYS9mcy9leHQyL3N1cGVyLmMgYi9mcy9leHQyL3N1cGVyLmNcbmluZGV4IDM5OTlmOGYzYjE1NmUzLi5hNDBmNTMwODcyYTQwNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9zdXBlci5jXG5AQCAtMzYyLDYgJiM0MzszNjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0Ml9zb3BzID0ge1xuIFx0LmFsbG9jX2lub2RlXHQ9IGV4dDJfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBleHQyX2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBleHQyX3dyaXRlX2lub2RlLFxuJiM0MztcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IGV4dDJfZXZpY3RfaW5vZGUsXG4gXHQucHV0X3N1cGVyXHQ9IGV4dDJfcHV0X3N1cGVyLFxuIFx0LnN5bmNfZnNcdD0gZXh0Ml9zeW5jX2ZzLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IGIzN2MxMzZlYTNhYjMzLi44ZjM4OGUxNThkYWVlZiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTExNTEsNyAmIzQzOzExNTEsNyBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbiBcdHN0cnVjdCByd19zZW1hcGhvcmUgaV9kYXRhX3NlbTtcbiBcdHN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7XG4gXHRzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlO1xuLVx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzO1xuJiM0MztcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqaV9tZXRhZGF0YV9iaHM7XG4gXG4gXHQvKlxuIFx0ICogRmlsZSBjcmVhdGlvbiB0aW1lLiBJdHMgZnVuY3Rpb24gaXMgc2FtZSBhcyB0aGF0IG9mXG5AQCAtMzE1NSw2ICYjNDM7MzE1NSw3IEBAIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuIFx0X19leHQ0X2lnZXQoKHNiKSwgKGlubyksIChmbGFncyksIF9fZnVuY19fLCBfX0xJTkVfXylcbiBcbiBleHRlcm4gaW50ICBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7XG4mIzQzO2V4dGVybiBpbnQgIGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiBpbnQgIGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBkZW50cnkgKixcbiBcdFx0XHQgc3RydWN0IGlhdHRyICopO1xuIGV4dGVybiB1MzIgIGV4dDRfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuaW5kZXggOWE4YzIyNWYyNzUzMDkuLjc1MjMyNmYzYjY1MzZhIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0X2piZDIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuQEAgLTM1MCw2ICYjNDM7MzUwLDIxIEBAIGludCBfX2V4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGV4dDRfaW5vZGVfYXR0YWNoX21tYihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSXQmIzM5O3MgZGlmZmljdWx0IHRvIGhhbmRsZSBmYWlsdXJlIHdoZW4gbWFya2luZyBidWZmZXIgZGlydHkgd2l0aG91dFxuJiM0MztcdCAqIGxlYXZpbmcgZmlsZXN5c3RlbSBjb3JydXB0ZWRcbiYjNDM7XHQgKi9cbiYjNDM7XHRtbWIgPSBrbWFsbG9jX29iaigqbW1iLCBHRlBfTk9GUyB8IF9fR0ZQX05PRkFJTCk7XG4mIzQzO1x0bW1iX2luaXQobW1iLCBcdTAwMjZpbm9kZS1cdTAwM2VpX2RhdGEpO1xuJiM0MztcdC8qIFNvbWVvbmUgc3dhcHBlZCBhbm90aGVyIG1tYiBiZWZvcmUgdXM/ICovXG4mIzQzO1x0aWYgKGNtcHhjaGcoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2JocywgTlVMTCwgbW1iKSlcbiYjNDM7XHRcdGtmcmVlKG1tYik7XG4mIzQzO31cbiYjNDM7XG4gaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuIFx0XHRcdFx0IGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbkBAIC0zODksMTEgJiM0Mzs0MDQsMTQgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuIFx0XHRcdFx0XHQgZXJyKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGlub2RlKVxuJiM0MztcdFx0aWYgKGlub2RlKSB7XG4mIzQzO1x0XHRcdGlmICghRVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2JocylcbiYjNDM7XHRcdFx0XHRleHQ0X2lub2RlX2F0dGFjaF9tbWIoaW5vZGUpO1xuIFx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiBcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4mIzQzO1x0XHR9XG4gXHRcdGlmIChpbm9kZSBcdTAwMjZcdTAwMjYgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcbiBcdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4gXHRcdFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZnN5bmMuYyBiL2ZzL2V4dDQvZnN5bmMuY1xuaW5kZXggOTI0NzI2ZGNjODVmZjUuLjI5OTljMmNjOGZjZmEwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9mc3luYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2ZzeW5jLmNcbkBAIC02OCw5ICYjNDM7NjgsNiBAQCBzdGF0aWMgaW50IGV4dDRfc3luY19wYXJlbnQoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0ICogdGhyb3VnaCBleHQ0X2V2aWN0X2lub2RlKCkpIGFuZCBzbyB3ZSBhcmUgc2FmZSB0byBmbHVzaFxuIFx0XHQgKiBtZXRhZGF0YSBibG9ja3MgYW5kIHRoZSBpbm9kZS5cbiBcdFx0ICovXG4tXHRcdHJldCA9IG1tYl9zeW5jKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdGJyZWFrO1xuIFx0XHRyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRicmVhaztcbkBAIC04MywyMiAmIzQzOzgwLDExIEBAIHN0YXRpYyBpbnQgZXh0NF9mc3luY19ub2pvdXJuYWwoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbiBcdFx0XHRcdGludCBkYXRhc3luYywgYm9vbCAqbmVlZHNfYmFycmllcilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX2lub2RlO1xuLVx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcbi1cdFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMLFxuLVx0XHQubnJfdG9fd3JpdGUgPSAwLFxuLVx0fTtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxlLCBcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLFxuLVx0XHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuJiM0MztcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIEZvcmNlIHdyaXRlb3V0IG9mIGlub2RlIHRhYmxlIGJ1ZmZlciB0byBkaXNrICovXG4tXHRyZXQgPSBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCBcdTAwMjZ3YmMpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdHJldCA9IGV4dDRfc3luY19wYXJlbnQoaW5vZGUpO1xuIFxuIFx0aWYgKHRlc3Rfb3B0KGlub2RlLVx1MDAzZWlfc2IsIEJBUlJJRVIpKVxuQEAgLTE1Niw2ICYjNDM7MTQyLDEwIEBAIGludCBleHQ0X3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4gXHRpZiAoc2JfcmRvbmx5KGlub2RlLVx1MDAzZWlfc2IpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRyZXQgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRpZiAoIUVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKSB7XG4gXHRcdHJldCA9IGV4dDRfZnN5bmNfbm9qb3VybmFsKGZpbGUsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZuZWVkc19iYXJyaWVyKTtcbkBAIC0xNjQsMTAgJiM0MzsxNTQsNiBAQCBpbnQgZXh0NF9zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdC8qXG4gXHQgKiAgVGhlIGNhbGxlciYjMzk7cyBmaWxlbWFwX2ZkYXRhd3JpdGUoKS93YWl0IHdpbGwgc3luYyB0aGUgZGF0YS5cbiBcdCAqICBNZXRhZGF0YSBpcyBpbiB0aGUgam91cm5hbCwgd2Ugd2FpdCBmb3IgcHJvcGVyIHRyYW5zYWN0aW9uIHRvXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCBjZTk5ODA3YzVmNWIyYy4uYjYxZWU3NWVjYmRmMWEgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTE5NSw5ICYjNDM7MTk1LDggQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGlub2RlLCBcJiMzNDtkYXRhIHdpbGwgYmUgbG9zdFwmIzM0Oyk7XG4gXG4gXHRcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFx1MDAyNmlub2RlLVx1MDAzZWlfZGF0YSk7XG4tXHRcdC8qIEF2b2lkIG1iYWxsb2Mgc3BlY2lhbCBpbm9kZSB3aGljaCBoYXMgbm8gcHJvcGVyIGlvcHMgKi9cbi1cdFx0aWYgKCFFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbClcbi1cdFx0XHRtbWJfc3luYyhcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKVxuJiM0MztcdFx0XHRtbWJfc3luYyhFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdFx0Z290byBub19kZWxldGU7XG4gXHR9XG4gXG5AQCAtMzQ1Miw2ICYjNDM7MzQ1MSw3IEBAIHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KVxuIHN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbDtcbiYjNDM7XHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbiBcbiBcdGlmIChqb3VybmFsKSB7XG4gXHRcdGlmIChqYmQyX3RyYW5zYWN0aW9uX2NvbW1pdHRlZChqb3VybmFsLFxuQEAgLTM0NjIsOCAmIzQzOzM0NjIsOSBAQCBzdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuJiM0MztcdG1tYiA9IFJFQURfT05DRShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdC8qIEFueSBtZXRhZGF0YSBidWZmZXJzIHRvIHdyaXRlPyAqL1xuLVx0aWYgKG1tYl9oYXNfYnVmZmVycyhcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKSlcbiYjNDM7XHRpZiAobW1iIFx1MDAyNlx1MDAyNiBtbWJfaGFzX2J1ZmZlcnMobW1iKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRyZXR1cm4gaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQztcbiB9XG5AQCAtNTgzOCwyNCAmIzQzOzU4MzksMzYgQEAgaW50IGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdGVyciA9IGV4dDRfZmNfY29tbWl0KEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsLFxuIFx0XHRcdFx0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9zeW5jX3RpZCk7XG4gXHR9IGVsc2Uge1xuLVx0XHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4mIzQzO1x0XHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuIFxuLVx0XHRlcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcdTAwMjZpbG9jKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHQvKlxuLVx0XHQgKiBzeW5jKDIpIHdpbGwgZmx1c2ggdGhlIHdob2xlIGJ1ZmZlciBjYWNoZS4gTm8gbmVlZCB0byBkb1xuLVx0XHQgKiBpdCBoZXJlIHNlcGFyYXRlbHkgZm9yIGVhY2ggaW5vZGUuXG4tXHRcdCAqL1xuLVx0XHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcdTAwMjZcdTAwMjYgIXdiYy1cdTAwM2Vmb3Jfc3luYylcbi1cdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTtcbi1cdFx0aWYgKGJ1ZmZlcl9yZXEoaWxvYy5iaCkgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoaWxvYy5iaCkpIHtcbi1cdFx0XHRleHQ0X2Vycm9yX2lub2RlX2Jsb2NrKGlub2RlLCBpbG9jLmJoLVx1MDAzZWJfYmxvY2tuciwgRUlPLFxuLVx0XHRcdFx0XHQgICAgICAgXCYjMzQ7SU8gZXJyb3Igc3luY2luZyBpbm9kZVwmIzM0Oyk7XG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdFx0fVxuLVx0XHRicmVsc2UoaWxvYy5iaCk7XG4mIzQzO2ludCBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4mIzQzO1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LyogV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaW4gbm9qb3VybmFsIG1vZGUgKi9cbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKSlcbiYjNDM7XHRcdHJldHVybiAtRUZTQ09SUlVQVEVEO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcdTAwMjZpbG9jKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTtcbiYjNDM7XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGlsb2MuYmgpKSB7XG4mIzQzO1x0XHRleHQ0X2Vycm9yX2lub2RlX2Jsb2NrKGlub2RlLCBpbG9jLmJoLVx1MDAzZWJfYmxvY2tuciwgRUlPLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtJTyBlcnJvciBzeW5jaW5nIGlub2RlXCYjMzQ7KTtcbiYjNDM7XHRcdGVyciA9IC1FSU87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdH1cbiYjNDM7XHRtbWIgPSBSRUFEX09OQ0UoRVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0aWYgKG1tYilcbiYjNDM7XHRcdGVyciA9IG1tYl9zeW5jKG1tYik7XG4mIzQzO291dDpcbiYjNDM7XHRicmVsc2UoaWxvYy5iaCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDI0NWY2N2QxMGRlZDM0Li45MGQ2ZDZiODg2NzMwMiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtMTQzMCw3ICYjNDM7MTQzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdElOSVRfV09SSyhcdTAwMjZlaS1cdTAwM2VpX3Jzdl9jb252ZXJzaW9uX3dvcmssIGV4dDRfZW5kX2lvX3Jzdl93b3JrKTtcbiBcdGV4dDRfZmNfaW5pdF9pbm9kZShcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbi1cdG1tYl9pbml0KFx1MDAyNmVpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLCBcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUuaV9kYXRhKTtcbiYjNDM7XHRlaS1cdTAwM2VpX21ldGFkYXRhX2JocyA9IE5VTEw7XG4gI2lmZGVmIENPTkZJR19MT0NLREVQXG4gXHRsb2NrZGVwX3NldF9zdWJjbGFzcyhcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtLCBJX0RBVEFfU0VNX05PUk1BTCk7XG4gI2VuZGlmXG5AQCAtMTQ1MSw2ICYjNDM7MTQ1MSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gc3RhdGljIHZvaWQgZXh0NF9mcmVlX2luX2NvcmVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRmc2NyeXB0X2ZyZWVfaW5vZGUoaW5vZGUpO1xuJiM0MztcdGtmcmVlKEVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNihFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfbGlzdCkpKSB7XG4gXHRcdHByX3dhcm4oXCYjMzQ7JXM6IGlub2RlICVsbHUgc3RpbGwgaW4gZmMgbGlzdFwmIzM0OyxcbiBcdFx0XHRfX2Z1bmNfXywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuQEAgLTE1MzAsOCAmIzQzOzE1MzEsOCBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZClcbiB2b2lkIGV4dDRfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRleHQ0X2ZjX2RlbChpbm9kZSk7XG4tXHRpZiAoIUVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKVxuLVx0XHRtbWJfaW52YWxpZGF0ZShcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRpZiAoRVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2JocylcbiYjNDM7XHRcdG1tYl9pbnZhbGlkYXRlKEVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xuIFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbiBcdC8qXG5AQCAtMTYwNSw5ICYjNDM7MTYwNiwxMyBAQCBzdGF0aWMgaW50IGV4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcbiBcdFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMXG4gXHR9O1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHR0cmFjZV9leHQ0X25mc19jb21taXRfbWV0YWRhdGEoaW5vZGUpO1xuLVx0cmV0dXJuIGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsIFx1MDAyNndiYyk7XG4mIzQzO1x0cmV0ID0gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgXHUwMDI2d2JjKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHJldCA9IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgXHUwMDI2d2JjKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1FVT1RBXG5AQCAtMTY2NCw2ICYjNDM7MTY2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7XG4gXHQuZnJlZV9pbm9kZVx0PSBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC5kZXN0cm95X2lub2RlXHQ9IGV4dDRfZGVzdHJveV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBleHQ0X3dyaXRlX2lub2RlLFxuJiM0MztcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmRpcnR5X2lub2RlXHQ9IGV4dDRfZGlydHlfaW5vZGUsXG4gXHQuZHJvcF9pbm9kZVx0PSBleHQ0X2Ryb3BfaW5vZGUsXG4gXHQuZXZpY3RfaW5vZGVcdD0gZXh0NF9ldmljdF9pbm9kZSxcbmRpZmYgLS1naXQgYS9mcy9mYXQvZGlyLmMgYi9mcy9mYXQvZGlyLmNcbmluZGV4IDRmNmY0MmYzMzYxM2RmLi5kMzNiZjM0YmRjZTc1ZiAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2Rpci5jXG5AQCAtMTAyOCw4ICYjNDM7MTAyOCw2IEBAIHN0YXRpYyBpbnQgX19mYXRfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIGxvZmZfdCBwb3MsIGludCBucl9zbG90cylcbiBcdFx0XHRucl9zbG90cy0tO1xuIFx0XHR9XG4gXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2TVNET1NfSShkaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcbi1cdFx0XHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4gXHRcdGJyZWxzZShiaCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMTA2Myw4ICYjNDM7MTA2MSw2IEBAIGludCBmYXRfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBmYXRfc2xvdF9pbmZvICpzaW5mbylcbiBcdFx0bnJfc2xvdHMtLTtcbiBcdH1cbiBcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2TVNET1NfSShkaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbiBcdGJyZWxzZShiaCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTEwODQsMTAgJiM0MzsxMDgwLDkgQEAgaW50IGZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxuIFx0fVxuIFxuIFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0FUSU1FIHwgRkFUX1VQREFURV9DTVRJTUUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiYjNDM7XHRcdHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMTE5LDIxICYjNDM7MTExNCwxMSBAQCBzdGF0aWMgaW50IGZhdF96ZXJvZWRfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmRpciwgc2VjdG9yX3QgYmxrbnIsIGludCBucl91c2VkLFxuIFx0XHRuJiM0MzsmIzQzOztcbiBcdFx0YmxrbnImIzQzOyYjNDM7O1xuIFx0XHRpZiAobiA9PSBucl9iaHMpIHtcbi1cdFx0XHRpZiAoSVNfRElSU1lOQyhkaXIpKSB7XG4tXHRcdFx0XHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTtcbi1cdFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0fVxuIFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KVxuIFx0XHRcdFx0YnJlbHNlKGJoc1tpXSk7XG4gXHRcdFx0biA9IDA7XG4gXHRcdH1cbiBcdH1cbi1cdGlmIChJU19ESVJTWU5DKGRpcikpIHtcbi1cdFx0ZXJyID0gZmF0X3N5bmNfYmhzKGJocywgbik7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBlcnJvcjtcbi1cdH1cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KVxuIFx0XHRicmVsc2UoYmhzW2ldKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmggYi9mcy9mYXQvZmF0LmhcbmluZGV4IDk5ZWQ5MjI4YTY3N2JlLi5kY2I1YmE3NTcwNzNlZCAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9mYXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZhdC5oXG5AQCAtNDIxLDcgJiM0Mzs0MjEsNiBAQCBleHRlcm4gdm9pZCBmYXRfZGV0YWNoKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBpX3Bvcyk7XG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZmF0X2J1aWxkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0c3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGUsIGxvZmZfdCBpX3Bvcyk7XG4tZXh0ZXJuIGludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gaW50IGZhdF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0XHQgIHZvaWQgKCpzZXR1cCkoc3RydWN0IHN1cGVyX2Jsb2NrICopKTtcbiBleHRlcm4gaW50IGZhdF9maWxsX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlKTtcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuY1xuaW5kZXggMzdlNzA0OWI0YzhjNDQuLjFjODM1Y2E1ZjIxYTUxIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZpbGUuY1xuQEAgLTE5MCw4ICYjNDM7MTkwLDcgQEAgaW50IGZhdF9maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbiBcdHN0cnVjdCBpbm9kZSAqZmF0X2lub2RlID0gTVNET1NfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlZmF0X2lub2RlO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbHAsIFx1MDAyNk1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLFxuLVx0XHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuJiM0MztcdGVyciA9IHNpbXBsZV9mc3luY19ub2ZsdXNoKGZpbHAsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5AQCAtMzMyLDE1ICYjNDM7MzMxLDE1IEBAIHN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXG4gXHR9XG4gXHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX2F0dHJzIHw9IEFUVFJfQVJDSDtcbiBcdGZhdF90cnVuY2F0ZV90aW1lKGlub2RlLCBOVUxMLCBGQVRfVVBEQVRFX0NNVElNRSk7XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRpZiAod2FpdCkge1xuLVx0XHRlcnIgPSBmYXRfc3luY19pbm9kZShpbm9kZSk7XG4mIzQzO1x0XHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfc3RhcnQgPSBpX3N0YXJ0O1xuIFx0XHRcdE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbG9nc3RhcnQgPSBpX2xvZ3N0YXJ0O1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBXcml0ZSBhIG5ldyBFT0YsIGFuZCBnZXQgdGhlIHJlbWFpbmluZyBjbHVzdGVyIGNoYWluIGZvciBmcmVlaW5nLiAqL1xuIFx0aWYgKHNraXApIHtcbmRpZmYgLS1naXQgYS9mcy9mYXQvaW5vZGUuYyBiL2ZzL2ZhdC9pbm9kZS5jXG5pbmRleCAzYWE1MjQ4MWFkNWNmMy4uYzRiNGNjYWEwOTFhYTcgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2lub2RlLmNcbkBAIC02MjMsNyAmIzQzOzYyMywzNyBAQCBzdHJ1Y3QgaW5vZGUgKmZhdF9idWlsZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFxuIEVYUE9SVF9TWU1CT0xfR1BMKGZhdF9idWlsZF9pbm9kZSk7XG4gXG4tc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCk7XG4mIzQzO3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiYjNDM7XHRsb2ZmX3QgaV9wb3M7XG4mIzQzO1x0c2VjdG9yX3QgYmxvY2tucjtcbiYjNDM7XHRpbnQgb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRpZiAoaW5vZGUtXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRpX3BvcyA9IGZhdF9pX3Bvc19yZWFkKHNiaSwgaW5vZGUpO1xuJiM0MztcdGlmICghaV9wb3MpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZmF0X2dldF9ibGtucl9vZmZzZXQoc2JpLCBpX3BvcywgXHUwMDI2YmxvY2tuciwgXHUwMDI2b2Zmc2V0KTtcbiYjNDM7XHRiaCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrX25vbmF0b21pYyhpbm9kZS1cdTAwM2VpX3NiLCBibG9ja25yKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJ1ZmZlciBhbHJlYWR5IHdyaXR0ZW4/IFdlIGxlYXZlIGJ1ZmZlcl9kaXJ0eSBjaGVjayBmb3JcbiYjNDM7XHQgKiBzeW5jX2RpcnR5X2J1ZmZlcigpIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGggb25nb2luZyBJTy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWJoIHx8ICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7XG4mIzQzO1x0XHRicmVsc2UoYmgpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbiYjNDM7XHRicmVsc2UoYmgpO1xuJiM0MztcdHJldHVybiBtbWJfc3luYyhcdTAwMjZNU0RPU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO31cbiBcbiBzdGF0aWMgdm9pZCBmYXRfZnJlZV9lb2ZibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG5AQCAtNjQwLDcgJiM0Mzs2NzAsMTMgQEAgc3RhdGljIHZvaWQgZmF0X2ZyZWVfZW9mYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdCAqIGFueSBjb3JydXB0aW9uIG9uIHRoZSBuZXh0IGFjY2VzcyB0byB0aGUgY2x1c3RlclxuIFx0XHQgKiBjaGFpbiBmb3IgdGhlIGZpbGUuXG4gXHRcdCAqL1xuLVx0XHRlcnIgPSBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpO1xuJiM0MztcdFx0ZXJyID0gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUpO1xuJiM0MztcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7XG4mIzQzO1x0XHRcdFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMLFxuJiM0MztcdFx0XHR9O1xuJiM0MztcdFx0XHRlcnIgPSBmYXRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgXHUwMDI2d2JjKTtcbiYjNDM7XHRcdH1cbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGZhdF9tc2coaW5vZGUtXHUwMDNlaV9zYiwgS0VSTl9XQVJOSU5HLCBcJiMzNDtGYWlsZWQgdG8gXCYjMzQ7XG4gXHRcdFx0XHRcdFwmIzM0O3VwZGF0ZSBvbiBkaXNrIGlub2RlIGZvciB1bnVzZWQgXCYjMzQ7XG5AQCAtODU0LDcgJiM0Mzs4OTAsNyBAQCBzdGF0aWMgaW50IGZhdF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4mIzQzO3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiBcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7XG5AQCAtODYzLDcgJiM0Mzs4OTksNyBAQCBzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxuIFx0c3RydWN0IHRpbWVzcGVjNjQgbXRpbWU7XG4gXHRsb2ZmX3QgaV9wb3M7XG4gXHRzZWN0b3JfdCBibG9ja25yO1xuLVx0aW50IGVyciwgb2Zmc2V0O1xuJiM0MztcdGludCBvZmZzZXQ7XG4gXG4gXHRpZiAoaW5vZGUtXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXG4gXHRcdHJldHVybiAwO1xuQEAgLTkwNywxMSAmIzQzOzk0Myw5IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZzYmktXHUwMDNlaW5vZGVfaGFzaF9sb2NrKTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdGVyciA9IDA7XG4tXHRpZiAod2FpdClcbi1cdFx0ZXJyID0gc3luY19kaXJ0eV9idWZmZXIoYmgpO1xuIFx0YnJlbHNlKGJoKTtcbi1cdHJldHVybiBlcnI7XG4mIzQzO1x0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuQEAgLTkyNSwyMyAmIzQzOzk1OSwxNyBAQCBzdGF0aWMgaW50IGZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdFx0ZXJyID0gZmF0X2NsdXN0ZXJzX2ZsdXNoKHNiKTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNk1TRE9TX1NCKHNiKS1cdTAwM2VzX2xvY2spO1xuIFx0fSBlbHNlXG4tXHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcbiYjNDM7XHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdHJldHVybiBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgMSk7XG4tfVxuLVxuLUVYUE9SVF9TWU1CT0xfR1BMKGZhdF9zeW5jX2lub2RlKTtcbi1cbiBzdGF0aWMgaW50IGZhdF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZmF0X3NvcHMgPSB7XG4gXHQuYWxsb2NfaW5vZGVcdD0gZmF0X2FsbG9jX2lub2RlLFxuIFx0LmZyZWVfaW5vZGVcdD0gZmF0X2ZyZWVfaW5vZGUsXG4gXHQud3JpdGVfaW5vZGVcdD0gZmF0X3dyaXRlX2lub2RlLFxuJiM0MztcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGEsXG4gXHQuZXZpY3RfaW5vZGVcdD0gZmF0X2V2aWN0X2lub2RlLFxuIFx0LnB1dF9zdXBlclx0PSBmYXRfcHV0X3N1cGVyLFxuIFx0LnN0YXRmc1x0XHQ9IGZhdF9zdGF0ZnMsXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmNcbmluZGV4IDMwMjdlZjUzYWYyMTRjLi5iZTE4ZjZiNTgxOWJhNyAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9taXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9taXNjLmNcbkBAIC0xNDYsMTYgJiM0MzsxNDYsMTcgQEAgaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXG4gXHR9IGVsc2Uge1xuIFx0XHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX3N0YXJ0ID0gbmV3X2RjbHVzO1xuIFx0XHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX2xvZ3N0YXJ0ID0gbmV3X2RjbHVzO1xuJiM0MztcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRcdC8qXG4gXHRcdCAqIFNpbmNlIGdlbmVyaWNfd3JpdGVfc3luYygpIHN5bmNocm9uaXplcyByZWd1bGFyIGZpbGVzIGxhdGVyLFxuIFx0XHQgKiB3ZSBzeW5jIGhlcmUgb25seSBkaXJlY3Rvcmllcy5cbiBcdFx0ICovXG4gXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IElTX0RJUlNZTkMoaW5vZGUpKSB7XG4tXHRcdFx0cmV0ID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xuJiM0MztcdFx0XHRyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fSBlbHNlXG4tXHRcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0fVxuIFx0aWYgKG5ld19mY2x1cyAhPSAoaW5vZGUtXHUwMDNlaV9ibG9ja3MgXHUwMDNlXHUwMDNlIChzYmktXHUwMDNlY2x1c3Rlcl9iaXRzIC0gOSkpKSB7XG4gXHRcdGZhdF9mc19lcnJvcl9yYXRlbGltaXQoXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L25hbWVpX21zZG9zLmMgYi9mcy9mYXQvbmFtZWlfbXNkb3MuY1xuaW5kZXggMGZkMjk3MWFkNGIxMzEuLjQ3MmJkODQ3ZWY5Y2JiIDEwMDY0NFxuLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXG5AQCAtMjUyLDEwICYjNDM7MjUyLDkgQEAgc3RhdGljIGludCBtc2Rvc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRmYXRfdHJ1bmNhdGVfdGltZShkaXIsIHRzLCBGQVRfVVBEQVRFX0NNVElNRSk7XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xuIFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcbi1cdFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTtcbi1cdGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xuJiM0MztcdFx0c3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTQ3MywyMSAmIzQzOzQ3MiwyMSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxuIFx0XHRcdFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgfD0gQVRUUl9ISURERU47XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgXHUwMDI2PSB+QVRUUl9ISURERU47XG4mIzQzO1x0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcbiBcdFx0XHRpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSkge1xuLVx0XHRcdFx0ZXJyID0gZmF0X3N5bmNfaW5vZGUob2xkX2lub2RlKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9pbm9kZSwgMSk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRcdE1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX2F0dHJzID0gb2xkX2F0dHJzO1xuIFx0XHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRcdH1cbi1cdFx0XHR9IGVsc2Vcbi1cdFx0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcbiYjNDM7XHRcdFx0fVxuIFxuIFx0XHRcdGlub2RlX2luY19pdmVyc2lvbihvbGRfZGlyKTtcbiBcdFx0XHRmYXRfdHJ1bmNhdGVfdGltZShvbGRfZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0NNVElNRSk7XG4mIzQzO1x0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XG4gXHRcdFx0aWYgKElTX0RJUlNZTkMob2xkX2RpcikpXG4tXHRcdFx0XHQodm9pZClmYXRfc3luY19pbm9kZShvbGRfZGlyKTtcbiYjNDM7XHRcdFx0XHRzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9kaXIsIDEpO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcdH1cbkBAIC01MTgsMjYgJiM0Mzs1MTcsMjEgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSxcbiBcdFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgfD0gQVRUUl9ISURERU47XG4gXHRlbHNlXG4gXHRcdE1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX2F0dHJzIFx1MDAyNj0gfkFUVFJfSElEREVOO1xuLVx0aWYgKElTX0RJUlNZTkMobmV3X2RpcikpIHtcbi1cdFx0ZXJyID0gZmF0X3N5bmNfaW5vZGUob2xkX2lub2RlKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGVycm9yX2lub2RlO1xuLVx0fSBlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcbi1cbiBcdGlmICh1cGRhdGVfZG90ZG90KSB7XG4gXHRcdGZhdF9zZXRfc3RhcnQoZG90ZG90X2RlLCBNU0RPU19JKG5ld19kaXIpLVx1MDAzZWlfbG9nc3RhcnQpO1xuIFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoZG90ZG90X2JoLFxuIFx0XHRcdFx0ICAgICAgXHUwMDI2TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdFx0aWYgKElTX0RJUlNZTkMobmV3X2RpcikpIHtcbi1cdFx0XHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihkb3Rkb3RfYmgpO1xuLVx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRnb3RvIGVycm9yX2RvdGRvdDtcbi1cdFx0fVxuIFx0XHRkcm9wX25saW5rKG9sZF9kaXIpO1xuIFx0XHRpZiAoIW5ld19pbm9kZSlcbiBcdFx0XHRpbmNfbmxpbmsobmV3X2Rpcik7XG4gXHR9XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xuJiM0MztcdGlmIChJU19ESVJTWU5DKG5ld19kaXIpKSB7XG4mIzQzO1x0XHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9pbm9kZSwgMSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGVycm9yX2RvdGRvdDtcbiYjNDM7XHR9XG4mIzQzO1xuIFxuIFx0ZXJyID0gZmF0X3JlbW92ZV9lbnRyaWVzKG9sZF9kaXIsIFx1MDAyNm9sZF9zaW5mbyk7XHQvKiBhbmQgcmVsZWFzZXMgYmggKi9cbiBcdG9sZF9zaW5mby5iaCA9IE5VTEw7XG5AQCAtNTQ1LDEwICYjNDM7NTM5LDkgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSxcbiBcdFx0Z290byBlcnJvcl9kb3Rkb3Q7XG4gXHRpbm9kZV9pbmNfaXZlcnNpb24ob2xkX2Rpcik7XG4gXHRmYXRfdHJ1bmNhdGVfdGltZShvbGRfZGlyLCBcdTAwMjZ0cywgRkFUX1VQREFURV9DTVRJTUUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XG4gXHRpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSlcbi1cdFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUob2xkX2Rpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XG4mIzQzO1x0XHRzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9kaXIsIDEpO1xuIFxuIFx0aWYgKG5ld19pbm9kZSkge1xuIFx0XHRkcm9wX25saW5rKG5ld19pbm9kZSk7XG5AQCAtNTcxLDE0ICYjNDM7NTY0LDEzIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0XHRjb3JydXB0IHw9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XG4gXHR9XG4tZXJyb3JfaW5vZGU6XG4gXHRmYXRfZGV0YWNoKG9sZF9pbm9kZSk7XG4gXHRmYXRfYXR0YWNoKG9sZF9pbm9kZSwgb2xkX3NpbmZvLmlfcG9zKTtcbiBcdE1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX2F0dHJzID0gb2xkX2F0dHJzO1xuIFx0aWYgKG5ld19pbm9kZSkge1xuIFx0XHRmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTtcbiBcdFx0aWYgKGNvcnJ1cHQpXG4tXHRcdFx0Y29ycnVwdCB8PSBmYXRfc3luY19pbm9kZShuZXdfaW5vZGUpO1xuJiM0MztcdFx0XHRjb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIElmIG5ldyBlbnRyeSB3YXMgbm90IHNoYXJpbmcgdGhlIGRhdGEgY2x1c3RlciwgaXRcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xuaW5kZXggZTkwOTQ0Nzg3M2UzNjQuLjczMmFiZjA3MmZkZDNiIDEwMDY0NFxuLS0tIGEvZnMvZmF0L25hbWVpX3ZmYXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xuQEAgLTY3OCwxMCAmIzQzOzY3OCw5IEBAIHN0YXRpYyBpbnQgdmZhdF9hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxbmFtZSxcbiBcbiBcdC8qIHVwZGF0ZSB0aW1lc3RhbXAgKi9cbiBcdGZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTtcbiYjNDM7XHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4gXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuLVx0XHQodm9pZClmYXRfc3luY19pbm9kZShkaXIpO1xuLVx0ZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4mIzQzO1x0XHRzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7XG4gY2xlYW51cDpcbiBcdGtmcmVlKHNsb3RzKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtOTA0LDkgJiM0Mzs5MDMsOSBAQCBzdGF0aWMgaW50IHZmYXRfZ2V0X2RvdGRvdF9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCxcbiBcbiBzdGF0aWMgaW50IHZmYXRfc3luY19pcG9zKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbi1cdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdHJldHVybiBmYXRfc3luY19pbm9kZShpbm9kZSk7XG4gXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuJiM0MztcdFx0cmV0dXJuIHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTkyNSwxMCAmIzQzOzkyNCw5IEBAIHN0YXRpYyB2b2lkIHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIHtcbiBcdGlub2RlX2luY19pdmVyc2lvbihkaXIpO1xuIFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiYjNDM7XHRcdHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbiB9XG4gXG4gc3RhdGljIGludCB2ZmF0X3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG5AQCAtMTAyNSw3ICYjNDM7MTAyMyw3IEBAIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0aWYgKG5ld19pbm9kZSkge1xuIFx0XHRmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTtcbiBcdFx0aWYgKGNvcnJ1cHQpXG4tXHRcdFx0Y29ycnVwdCB8PSBmYXRfc3luY19pbm9kZShuZXdfaW5vZGUpO1xuJiM0MztcdFx0XHRjb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIElmIG5ldyBlbnRyeSB3YXMgbm90IHNoYXJpbmcgdGhlIGRhdGEgY2x1c3RlciwgaXRcbmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jXG5pbmRleCBmZGI4NzY2ZDI3NWExNy4uOWQ5NjM1NzczMWEzZDQgMTAwNjQ0XG4tLS0gYS9mcy9mcy13cml0ZWJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnMtd3JpdGViYWNrLmNcbkBAIC0xODUxLDYgJiM0MzsxODUxLDIyIEBAIF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdHJldCA9IGVycjtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPIHBvc3NpYmx5IHN1Ym1pdHRlZFxuJiM0MztcdCAqIGJ5IHByZXZpb3VzIFdCX1NZTkNfTk9ORSB3cml0ZWJhY2s/XG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgXHUwMDI2XHUwMDI2ICF3YmMtXHUwMDNlZm9yX3N5bmMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IElfTUVUQURBVEFfV1JJVEVCQUNLKSB7XG4mIzQzO1x0XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuJiM0MztcdFx0aW5vZGVfc3RhdGVfY2xlYXIoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4mIzQzO1x0XHRlcnIgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfb3AtXHUwMDNlc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgd2JjKTtcbiYjNDM7XHRcdGlmIChyZXQgPT0gMClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdH1cbiBcdHdiYy1cdTAwM2V1bnBpbm5lZF9uZXRmc193YiA9IGZhbHNlO1xuIFx0dHJhY2Vfd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjLCBucl90b193cml0ZSk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTE4OTIsMTQgJiM0MzsxOTA4LDE3IEBAIHN0YXRpYyBpbnQgd3JpdGViYWNrX3NpbmdsZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0LypcbiBcdCAqIElmIHRoZSBpbm9kZSBpcyBhbHJlYWR5IGZ1bGx5IGNsZWFuLCB0aGVuIHRoZXJlJiMzOTtzIG5vdGhpbmcgdG8gZG8uXG4gXHQgKlxuLVx0ICogRm9yIGRhdGEtaW50ZWdyaXR5IHN5bmNzIHdlIGFsc28gbmVlZCB0byBjaGVjayB3aGV0aGVyIGFueSBwYWdlcyBhcmVcbi1cdCAqIHN0aWxsIHVuZGVyIHdyaXRlYmFjaywgZS5nLiBkdWUgdG8gcHJpb3IgV0JfU1lOQ19OT05FIHdyaXRlYmFjay4gIElmXG4tXHQgKiB0aGVyZSBhcmUgYW55IHN1Y2ggcGFnZXMsIHdlJiMzOTtsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uXG4mIzQzO1x0ICogRm9yIGRhdGEtaW50ZWdyaXR5IHN5bmNzIHdlIGFsc28gbmVlZCB0byBjaGVjayB3aGV0aGVyIGFueSBmb2xpb3Mgb3JcbiYjNDM7XHQgKiBtZXRhZGF0YSBhcmUgc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkVcbiYjNDM7XHQgKiB3cml0ZWJhY2suIElmIHRoZXJlLCB3ZSYjMzk7bGwgbmVlZCB0byB3YWl0IGZvciB0aGVtLlxuIFx0ICovXG4tXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9BTEwpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICh3YmMtXHUwMDNlc3luY19tb2RlICE9IFdCX1NZTkNfQUxMIHx8XG4tXHQgICAgICFtYXBwaW5nX3RhZ2dlZChpbm9kZS1cdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSkpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0FMTCkpIHtcbiYjNDM7XHRcdGlmICh3YmMtXHUwMDNlc3luY19tb2RlICE9IFdCX1NZTkNfQUxMKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdGlmICghbWFwcGluZ190YWdnZWQoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcdTAwMjYgSV9NRVRBREFUQV9XUklURUJBQ0spKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXHRpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfU1lOQyk7XG4gXHR3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUod2JjLCBpbm9kZSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvbGliZnMuYyBiL2ZzL2xpYmZzLmNcbmluZGV4IDVhMGQyNzYzNzlkMTNiLi41N2U1OTcxYjYzMzE5NyAxMDA2NDRcbi0tLSBhL2ZzL2xpYmZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2xpYmZzLmNcbkBAIC0xNTU5LDkgJiM0MzsxNTU5LDEwIEBAIGludCBzaW1wbGVfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmICghKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IElfRElSVFlfQUxMKSlcbiYjNDM7XHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiAoSV9ESVJUWV9BTEwgfCBJX1NZTkMpKSlcbiBcdFx0Z290byBvdXQ7XG4tXHRpZiAoZGF0YXN5bmMgXHUwMDI2XHUwMDI2ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQykpXG4mIzQzO1x0aWYgKGRhdGFzeW5jIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IChJX0RJUlRZX0RBVEFTWU5DIHwgSV9TWU5DKSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0cmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZGlyLmMgYi9mcy9taW5peC9kaXIuY1xuaW5kZXggMzYxZDI2ZDg3ZDJlMmQuLjJjYTE2Zjg0OWQ1YWMwIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2Rpci5jXG5AQCAtMjMsNyAmIzQzOzIzLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfb3BlcmF0aW9ucyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IG1pbml4X3JlYWRkaXIsXG4tXHQuZnN5bmNcdFx0PSBtaW5peF9mc3luYyxcbiYjNDM7XHQuZnN5bmNcdFx0PSBzaW1wbGVfZnN5bmMsXG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggODZlNTk0M2NkMmZmNzQuLjAyYWFiYmRiNWRlYWEwIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9maWxlLmNcbkBAIC0xMCwxMyAmIzQzOzEwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7bWluaXguaFwmIzM0O1xuIFxuLWludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4te1xuLVx0cmV0dXJuIG1tYl9mc3luYyhmaWxlLFxuLVx0XHRcdFx1MDAyNm1pbml4X2koZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdCktXHUwMDNlaV9tZXRhZGF0YV9iaHMsXG4tXHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuLX1cbi1cbiAvKlxuICAqIFdlIGhhdmUgbW9zdGx5IE5VTExzIGhlcmU6IHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZSBPSyBmb3JcbiAgKiB0aGUgbWluaXggZmlsZXN5c3RlbS5cbkBAIC0yNiw3ICYjNDM7MTksNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbiBcdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuIFx0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuLVx0LmZzeW5jXHRcdD0gbWluaXhfZnN5bmMsXG4mIzQzO1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xuaW5kZXggYzMwY2M1OTA2OThkNmYuLjk1MjY3ZDkzZWYzOWRmIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaW5vZGUuY1xuQEAgLTI0LDYgJiM0MzsyNCw4IEBAXG4gXG4gc3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7XG4gXG4gdm9pZCBfX21pbml4X2Vycm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLFxuQEAgLTEyOCw2ICYjNDM7MTMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1pbml4X3NvcHMgPSB7XG4gXHQuYWxsb2NfaW5vZGVcdD0gbWluaXhfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBtaW5peF9mcmVlX2luX2NvcmVfaW5vZGUsXG4gXHQud3JpdGVfaW5vZGVcdD0gbWluaXhfd3JpdGVfaW5vZGUsXG4mIzQzO1x0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IG1pbml4X2V2aWN0X2lub2RlLFxuIFx0LnB1dF9zdXBlclx0PSBtaW5peF9wdXRfc3VwZXIsXG4gXHQuc3RhdGZzXHRcdD0gbWluaXhfc3RhdGZzLFxuQEAgLTYzMCw3ICYjNDM7NjMzLDcgQEAgc3RydWN0IGlub2RlICptaW5peF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxuIC8qXG4gICogVGhlIG1pbml4IFYxIGZ1bmN0aW9uIHRvIHN5bmNocm9uaXplIGFuIGlub2RlLlxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4mIzQzO3N0YXRpYyBpbnQgVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoO1xuIFx0c3RydWN0IG1pbml4X2lub2RlICogcmF3X2lub2RlO1xuQEAgLTYzOSw3ICYjNDM7NjQyLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYxX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcbiBcdHJhd19pbm9kZSA9IG1pbml4X1YxX3Jhd19pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBpbm9kZS1cdTAwM2VpX2lubywgXHUwMDI2YmgpO1xuIFx0aWYgKCFyYXdfaW5vZGUpXG4tXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9tb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfdWlkID0gZnNfaGlnaDJsb3d1aWQoaV91aWRfcmVhZChpbm9kZSkpO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfZ2lkID0gZnNfaGlnaDJsb3dnaWQoaV9naWRfcmVhZChpbm9kZSkpO1xuQEAgLTY1MSwxMyAmIzQzOzY1NCwxNSBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0ZWxzZSBmb3IgKGkgPSAwOyBpIFx1MDAzYyA5OyBpJiM0MzsmIzQzOylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTFfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbiYjNDM7XHRicmVsc2UoYmgpO1xuJiM0MztcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiAvKlxuICAqIFRoZSBtaW5peCBWMiBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSBhbiBpbm9kZS5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuJiM0MztzdGF0aWMgaW50IFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaDtcbiBcdHN0cnVjdCBtaW5peDJfaW5vZGUgKiByYXdfaW5vZGU7XG5AQCAtNjY2LDcgJiM0Mzs2NzEsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFxuIFx0cmF3X2lub2RlID0gbWluaXhfVjJfcmF3X2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBcdTAwMjZiaCk7XG4gXHRpZiAoIXJhd19pbm9kZSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcdHJhd19pbm9kZS1cdTAwM2VpX21vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGU7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV91aWQgPSBmc19oaWdoMmxvd3VpZChpX3VpZF9yZWFkKGlub2RlKSk7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7XG5AQCAtNjgwLDI5ICYjNDM7Njg1LDQwIEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRlbHNlIGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwOyBpJiM0MzsmIzQzOylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTJfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbiYjNDM7XHRicmVsc2UoYmgpO1xuJiM0MztcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKVxuJiM0MztcdFx0cmV0dXJuIFYxX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIFYyX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0aW50IGVyciA9IDA7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuJiM0MztcdHZvaWQgKnJhd19pbm9kZTtcbiBcbiBcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcbi1cdFx0YmggPSBWMV9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xuJiM0MztcdFx0cmF3X2lub2RlID0gbWluaXhfVjFfcmF3X2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBcdTAwMjZiaCk7XG4gXHRlbHNlXG4tXHRcdGJoID0gVjJfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTtcbi1cdGlmICghYmgpXG4mIzQzO1x0XHRyYXdfaW5vZGUgPSBtaW5peF9WMl9yYXdfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIFx1MDAyNmJoKTtcbiYjNDM7XHRpZiAoIXJhd19pbm9kZSlcbiBcdFx0cmV0dXJuIC1FSU87XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcdTAwMjZcdTAwMjYgYnVmZmVyX2RpcnR5KGJoKSkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbi1cdFx0XHRwcmludGsoXCYjMzQ7SU8gZXJyb3Igc3luY2luZyBtaW5peCBpbm9kZSBbJXM6JTA4bGx4XVxcblwmIzM0Oyxcbi1cdFx0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLVx0XHRcdGVyciA9IC1FSU87XG4tXHRcdH1cbiYjNDM7XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4mIzQzO1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiYjNDM7XHRcdHByaW50ayhcJiMzNDtJTyBlcnJvciBzeW5jaW5nIG1pbml4IGlub2RlIFslczolMDhsbHhdXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGlub2RlLVx1MDAzZWlfaW5vKTtcbiYjNDM7XHRcdGVyciA9IC1FSU87XG4gXHR9XG4tXHRicmVsc2UgKGJoKTtcbiYjNDM7XHRlcnIgPSBtbWJfc3luYyhcdTAwMjZtaW5peF9pKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO291dDpcbiYjNDM7XHRicmVsc2UoYmgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2Rpci5jIGIvZnMvdWRmL2Rpci5jXG5pbmRleCBlYmM5ZjZhMzc5ZmUzYS4uNDI1ZTNjMTYyOTM1MDQgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9kaXIuY1xuQEAgLTE1Nyw2ICYjNDM7MTU3LDYgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZGlyX29wZXJhdGlvbnMgPSB7XG4gXHQucmVhZFx0XHRcdD0gZ2VuZXJpY19yZWFkX2RpcixcbiBcdC5pdGVyYXRlX3NoYXJlZFx0XHQ9IHVkZl9yZWFkZGlyLFxuIFx0LnVubG9ja2VkX2lvY3RsXHRcdD0gdWRmX2lvY3RsLFxuLVx0LmZzeW5jXHRcdFx0PSB1ZGZfZnN5bmMsXG4mIzQzO1x0LmZzeW5jXHRcdFx0PSBzaW1wbGVfZnN5bmMsXG4gXHQuc2V0bGVhc2VcdFx0PSBnZW5lcmljX3NldGxlYXNlLFxuIH07XG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmNcbmluZGV4IGY3ZjE0MjJkZTMwZmE0Li41N2QxMTYwNmEyYTc3NiAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9maWxlLmNcbkBAIC0xOTgsMTMgJiM0MzsxOTgsNiBAQCBzdGF0aWMgaW50IHVkZl9maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCB1ZGZfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHJldHVybiBtbWJfZnN5bmMoZmlsZSxcbi1cdFx0XHRcdTAwMjZVREZfSShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5yZWFkX2l0ZXJcdFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuIFx0LnVubG9ja2VkX2lvY3RsXHRcdD0gdWRmX2lvY3RsLFxuQEAgLTIxMiw3ICYjNDM7MjA1LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZmlsZV9vcGVyYXRpb25zID0ge1xuIFx0Lm1tYXBcdFx0XHQ9IHVkZl9maWxlX21tYXAsXG4gXHQud3JpdGVfaXRlclx0XHQ9IHVkZl9maWxlX3dyaXRlX2l0ZXIsXG4gXHQucmVsZWFzZVx0XHQ9IHVkZl9yZWxlYXNlX2ZpbGUsXG4tXHQuZnN5bmNcdFx0XHQ9IHVkZl9mc3luYyxcbiYjNDM7XHQuZnN5bmNcdFx0XHQ9IHNpbXBsZV9mc3luYyxcbiBcdC5zcGxpY2VfcmVhZFx0XHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gXHQuc3BsaWNlX3dyaXRlXHRcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiBcdC5sbHNlZWtcdFx0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG5AQCAtMjUzLDYgJiM0MzsyNDYsOCBAQCBzdGF0aWMgaW50IHVkZl9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXG4gXHRzZXRhdHRyX2NvcHkoXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIGF0dHIpO1xuIFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0aWYgKElTX1NZTkMoaW5vZGUpKVxuJiM0MztcdFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuY1xuaW5kZXggNjdiY2Y4Mzc1OGM4ZmIuLmQ5OTFhNjcxYzBhNjkxIDEwMDY0NFxuLS0tIGEvZnMvdWRmL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9pbm9kZS5jXG5AQCAtNTEsOCAmIzQzOzUxLDYgQEBcbiBzdHJ1Y3QgdWRmX21hcF9ycTtcbiBcbiBzdGF0aWMgdW1vZGVfdCB1ZGZfY29udmVydF9wZXJtaXNzaW9ucyhzdHJ1Y3QgZmlsZUVudHJ5ICopO1xuLXN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcbi1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIHN0YXRpYyBpbnQgdWRmX2FsbG9jX2lfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzaXplX3Qgc2l6ZSk7XG4gc3RhdGljIGludCBpbm9kZV9nZXRibGsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHVkZl9tYXBfcnEgKm1hcCk7XG4gc3RhdGljIGludCB1ZGZfaW5zZXJ0X2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24sXG5AQCAtMTQyLDcgJiM0MzsxNDAsOSBAQCB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpZiAoIWlub2RlLVx1MDAzZWlfbmxpbmspIHtcbiBcdFx0XHR3YW50X2RlbGV0ZSA9IDE7XG4gXHRcdFx0dWRmX3NldHNpemUoaW5vZGUsIDApO1xuLVx0XHRcdHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIElTX1NZTkMoaW5vZGUpKTtcbiYjNDM7XHRcdFx0dWRmX3dyaXRlX2lub2RlKGlub2RlLCBOVUxMKTtcbiYjNDM7XHRcdFx0aWYgKElTX1NZTkMoaW5vZGUpKVxuJiM0MztcdFx0XHRcdHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCBOVUxMKTtcbiBcdFx0fVxuIFx0XHRpZiAoaWluZm8tXHUwMDNlaV9hbGxvY190eXBlICE9IElDQlRBR19GTEFHX0FEX0lOX0lDQiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGlub2RlLVx1MDAzZWlfc2l6ZSAhPSBpaW5mby1cdTAwM2VpX2xlbkV4dGVudHMpIHtcbkBAIC05MzYsOSAmIzQzOzkzNiwxMCBAQCBzdGF0aWMgaW50IGlub2RlX2dldGJsayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdWRmX21hcF9ycSAqbWFwKVxuIFx0aWluZm8tXHUwMDNlaV9uZXh0X2FsbG9jX2dvYWwgPSBuZXdibG9ja251bSAmIzQzOyAxO1xuIFx0aW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpO1xuIFxuLVx0aWYgKElTX1NZTkMoaW5vZGUpKVxuLVx0XHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XG4tXHRlbHNlXG4mIzQzO1x0aWYgKElTX1NZTkMoaW5vZGUpKSB7XG4mIzQzO1x0XHR1ZGZfd3JpdGVfaW5vZGUoaW5vZGUsIE5VTEwpO1xuJiM0MztcdFx0dWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIE5VTEwpO1xuJiM0MztcdH0gZWxzZVxuIFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiBcdHJldCA9IDA7XG4gb3V0X2ZyZWU6XG5AQCAtMTMyNiwxMCAmIzQzOzEzMjcsNyBAQCBpbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpXG4gXHR9XG4gdXBkYXRlX3RpbWU6XG4gXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKSk7XG4tXHRpZiAoSVNfU1lOQyhpbm9kZSkpXG4tXHRcdHVkZl9zeW5jX2lub2RlKGlub2RlKTtcbi1cdGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNzA1LDE0ICYjNDM7MTcwMywyOCBAQCB2b2lkIHVkZl91cGRhdGVfZXh0cmFfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSwgdW1vZGVfdCBtb2RlKVxuIFx0XHRpaW5mby1cdTAwM2VpX2V4dHJhUGVybXMgfD0gRkVfUEVSTV9PX0RFTEVURTtcbiB9XG4gXG4taW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7aW50IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbi1cdHJldHVybiB1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcbi19XG4mIzQzO1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiBcbi1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0cmV0dXJuIHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIDEpO1xuJiM0MztcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVx1MDAzZWlfc2IsXG4mIzQzO1x0XHRcdHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLVx1MDAzZWlfc2IsXG4mIzQzO1x0XHRcdFx0XHQgIFx1MDAyNlVERl9JKGlub2RlKS1cdTAwM2VpX2xvY2F0aW9uLCAwKSk7XG4mIzQzO1x0aWYgKCFiaClcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiYjNDM7XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4mIzQzO1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiYjNDM7XHRcdHVkZl93YXJuKGlub2RlLVx1MDAzZWlfc2IsIFwmIzM0O0lPIGVycm9yIHN5bmNpbmcgdWRmIGlub2RlIFslMDhsbHhdXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgaW5vZGUtXHUwMDNlaV9pbm8pO1xuJiM0MztcdFx0ZXJyID0gLUVJTztcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XHRlcnIgPSBtbWJfc3luYyhcdTAwMjZVREZfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnJlbHNlKGJoKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB1ZGZfYWRqdXN0X3RpbWUoc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgdGltZSlcbkBAIC0xNzIzLDcgJiM0MzsxNzM1LDcgQEAgc3RhdGljIHZvaWQgdWRmX2FkanVzdF90aW1lKHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8sIHN0cnVjdCB0aW1lc3BlYzY0IHRpbWVcbiBcdFx0aWluZm8tXHUwMDNlaV9jcnRpbWUgPSB0aW1lO1xuIH1cbiBcbi1zdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXG4mIzQzO2ludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmlsZUVudHJ5ICpmZTtcbkBAIC0xNzMyLDcgJiM0MzsxNzQ0LDYgQEAgc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuIFx0dWludDMyX3QgdWRmcGVybXM7XG4gXHR1aW50MTZfdCBpY2JmbGFncztcbiBcdHVpbnQxNl90IGNyY2xlbjtcbi1cdGludCBlcnIgPSAwO1xuIFx0c3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gXHR1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuIFx0c3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTtcbkBAIC0xOTM3LDE3ICYjNDM7MTk0OCwxMCBAQCBzdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXG4gXG4gXHQvKiB3cml0ZSB0aGUgZGF0YSBibG9ja3MgKi9cbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdGlmIChkb19zeW5jKSB7XG4tXHRcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbi1cdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbi1cdFx0XHR1ZGZfd2Fybihpbm9kZS1cdTAwM2VpX3NiLCBcJiMzNDtJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxcblwmIzM0Oyxcbi1cdFx0XHRcdCBpbm9kZS1cdTAwM2VpX2lubyk7XG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdFx0fVxuLVx0fVxuIFx0YnJlbHNlKGJoKTtcbiYjNDM7XHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbiBcbi1cdHJldHVybiBlcnI7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubyxcbmRpZmYgLS1naXQgYS9mcy91ZGYvc3VwZXIuYyBiL2ZzL3VkZi9zdXBlci5jXG5pbmRleCA3Yjg1ZjVhMmI3OWZjNC4uZTdlOWYyYTBkMjRlODAgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWRmL3N1cGVyLmNcbkBAIC0yMTEsNiAmIzQzOzIxMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB1ZGZfc2Jfb3BzID0ge1xuIFx0LmFsbG9jX2lub2RlXHQ9IHVkZl9hbGxvY19pbm9kZSxcbiBcdC5mcmVlX2lub2RlXHQ9IHVkZl9mcmVlX2luX2NvcmVfaW5vZGUsXG4gXHQud3JpdGVfaW5vZGVcdD0gdWRmX3dyaXRlX2lub2RlLFxuJiM0MztcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEsXG4gXHQuZXZpY3RfaW5vZGVcdD0gdWRmX2V2aWN0X2lub2RlLFxuIFx0LnB1dF9zdXBlclx0PSB1ZGZfcHV0X3N1cGVyLFxuIFx0LnN5bmNfZnNcdD0gdWRmX3N5bmNfZnMsXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZmRlY2wuaCBiL2ZzL3VkZi91ZGZkZWNsLmhcbmluZGV4IDZkOTUxZTA1YzAwNDZhLi44NmRjMmQ2YTJlZjFiOCAxMDA2NDRcbi0tLSBhL2ZzL3VkZi91ZGZkZWNsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi91ZGZkZWNsLmhcbkBAIC0xMzcsNyAmIzQzOzEzNyw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVkZl9kaXJfZW50cnlfbGVuKHN0cnVjdCBmaWxlSWRlbnREZXNjICpjZmkpXG4gXG4gLyogZmlsZS5jICovXG4gZXh0ZXJuIGxvbmcgdWRmX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XG4taW50IHVkZl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpO1xuIFxuIC8qIGlub2RlLmMgKi9cbiBleHRlcm4gc3RydWN0IGlub2RlICpfX3VkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKixcbkBAIC0xNTgsNiAmIzQzOzE1Nyw3IEBAIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVkZl9icmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1ZGZfcGJsa190IGJsb2NrLFxuIGV4dGVybiBpbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICosIGxvZmZfdCk7XG4gZXh0ZXJuIHZvaWQgdWRmX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqKTtcbiBleHRlcm4gaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuJiM0MztpbnQgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiBleHRlcm4gaW50IGlub2RlX2JtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdCAgICAgIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKnBvcywgc3RydWN0IGtlcm5lbF9sYl9hZGRyICplbG9jLFxuIFx0XHQgICAgICB1aW50MzJfdCAqZWxlbiwgc2VjdG9yX3QgKm9mZnNldCwgaW50OF90ICpldHlwZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG5pbmRleCA4YjIzYmM5YTI0NGNiMy4uZmQyYzcxMTVjMDU0MjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuQEAgLTIxMCwxMCAmIzQzOzIxMCw2IEBAIHZvaWQgYmhfZW5kX2FzeW5jX3dyaXRlKHN0cnVjdCBiaW8gKmJpbyk7XG4gXG4gLyogVGhpbmdzIHRvIGRvIHdpdGggbWV0YWRhdGEgYnVmZmVycyBsaXN0ICovXG4gdm9pZCBtbWJfbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpO1xuLWludCBtbWJfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXG4tXHRcdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYyk7XG4taW50IG1tYl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXG4tXHQgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGJvb2wgZGF0YXN5bmMpO1xuIHZvaWQgY2xlYW5fYmRldl9hbGlhc2VzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxuIFx0XHRcdHNlY3Rvcl90IGxlbik7XG4gc3RhdGljIGlubGluZSB2b2lkIGNsZWFuX2JkZXZfYmhfYWxpYXMoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IGQxMDg5N2IzYTFlMzUwLi5iMTdlMGQ0MjA3MWRmOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtNzQwLDcgJiM0Mzs3NDAsOCBAQCBlbnVtIGlub2RlX3N0YXRlX2ZsYWdzX2VudW0ge1xuIFx0SV9DUkVBVElOR1x0XHQ9ICgxVSBcdTAwM2NcdTAwM2MgMTUpLFxuIFx0SV9ET05UQ0FDSEVcdFx0PSAoMVUgXHUwMDNjXHUwMDNjIDE2KSxcbiBcdElfU1lOQ19RVUVVRURcdFx0PSAoMVUgXHUwMDNjXHUwMDNjIDE3KSxcbi1cdElfUElOTklOR19ORVRGU19XQlx0PSAoMVUgXHUwMDNjXHUwMDNjIDE4KVxuJiM0MztcdElfUElOTklOR19ORVRGU19XQlx0PSAoMVUgXHUwMDNjXHUwMDNjIDE4KSxcbiYjNDM7XHRJX01FVEFEQVRBX1dSSVRFQkFDS1x0PSAoMVUgXHUwMDNjXHUwMDNjIDE5KSxcbiB9O1xuIFxuICNkZWZpbmUgSV9ESVJUWV9JTk9ERSAoSV9ESVJUWV9TWU5DIHwgSV9ESVJUWV9EQVRBU1lOQylcbkBAIC0yMjEzLDYgJiM0MzsyMjE0LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2lub2RlX2RpcnR5X3N5bmMoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdF9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgSV9ESVJUWV9TWU5DKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiYjNDM7XHRpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogcmV0dXJucyB0aGUgcmVmY291bnQgb24gdGhlIGlub2RlLiBpdCBjYW4gY2hhbmdlIGFyYml0cmFyaWx5LlxuICAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaFxuaW5kZXggZWY3OTQxZTlkYzc5YWMuLjE3MDU2MWU4ZjJlMmM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcbkBAIC04Niw2ICYjNDM7ODYsOCBAQCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7XG4gXHR2b2lkICgqZnJlZV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXHR2b2lkICgqZGlydHlfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBmbGFncyk7XG4gXHRpbnQgKCp3cml0ZV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuJiM0MztcdGludCAoKnN5bmNfaW5vZGVfbWV0YWRhdGEpKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuIFx0aW50ICgqZHJvcF9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXHR2b2lkICgqZXZpY3RfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFx0dm9pZCAoKnB1dF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTk6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQyX0ZTJiMzNDssCiAgICAmIzM0O0ZBVF9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDssCiAgICAmIzM0O01JTklYX0ZTJiMzNDssCiAgICAmIzM0O1VERl9GUyYjMzQ7LAogICAgJiMzNDtCRlNfRlMmIzM0OywKICAgICYjMzQ7QUZGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fd3JpdGViYWNrX3NpbmdsZV9pbm9kZSYjMzQ7LAogICAgJiMzNDt3cml0ZWJhY2tfc2luZ2xlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7ZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7dWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7bWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtiZnNfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtzaW1wbGVfZnN5bmNfbm9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFZGUyBzdXBlcl9vcGVyYXRpb25zIGNhbGxiYWNrIGBzeW5jX2lub2RlX21ldGFkYXRhYCBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgZXh0MiwgZmF0LCBtaW5peCwgdWRmLCBiZnMsIGFmZnMpIHRvIGltcGxlbWVudCBhbmQgdXNlIGl0LiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb3JlIHdyaXRlYmFjayBsb2dpYyBpbiBgZnMvZnMtd3JpdGViYWNrLmNgIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgVkZTIGFuZCBtdWx0aXBsZSBmaWxlc3lzdGVtcywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE1MTA0NThlMDJiMjMyZGJlODczYjc2ZjE3NmY0YzExYjYwNjBlMjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyIDE5OjUxOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9hZmZzLmggYi9mcy9hZmZzL2FmZnMuaAppbmRleCA0NGEzZjY5ZDI3NWY5Ni4uYTdmYWE5MWRlZWQ1YWMgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvYWZmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvYWZmcy5oCkBAIC00NCw3ICYjNDM7NDQsNiBAQCBzdHJ1Y3QgYWZmc19pbm9kZV9pbmZvIHsKIAlzdHJ1Y3QgbXV0ZXggaV9saW5rX2xvY2s7CQkvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovCiAJc3RydWN0IG11dGV4IGlfZXh0X2xvY2s7CQkvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovCiAjZGVmaW5lIGlfaGFzaF9sb2NrIGlfZXh0X2xvY2sKLQlzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7CiAJdTMyCSBpX2Jsa2NudDsJCQkvKiBibG9jayBjb3VudCAqLwogCXUzMgkgaV9leHRjbnQ7CQkJLyogZXh0ZW5kZWQgYmxvY2sgY291bnQgKi8KIAl1MzIJKmlfbGM7CQkJCS8qIGxpbmVhciBjYWNoZSBvZiBleHRlbmRlZCBibG9ja3MgKi8KQEAgLTE1Miw3ICYjNDM7MTUxLDYgQEAgZXh0ZXJuIGJvb2wJYWZmc19ub2ZpbGVuYW1ldHJ1bmNhdGUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIGV4dGVybiBpbnQJYWZmc19jaGVja19uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIGludCBsZW4sCiAJCQkJYm9vbCBub3RydW5jYXRlKTsKIGV4dGVybiBpbnQJYWZmc19jb3B5X25hbWUodW5zaWduZWQgY2hhciAqYnN0ciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKLXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqYWZmc19nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiAvKiBiaXRtYXAuIGMgKi8KIApkaWZmIC0tZ2l0IGEvZnMvYWZmcy9hbWlnYWZmcy5jIGIvZnMvYWZmcy9hbWlnYWZmcy5jCmluZGV4IGJlZDRmYzgwNWU4ZTY2Li42Y2MwZmM5YTRjYmY5MiAxMDA2NDQKLS0tIGEvZnMvYWZmcy9hbWlnYWZmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvYW1pZ2FmZnMuYwpAQCAtNTcsNyAmIzQzOzU3LDcgQEAgYWZmc19pbnNlcnRfaGFzaChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIAkJQUZGU19UQUlMKHNiLCBkaXJfYmgpLSZndDtoYXNoX2NoYWluID0gY3B1X3RvX2JlMzIoaW5vKTsKIAogCWFmZnNfYWRqdXN0X2NoZWNrc3VtKGRpcl9iaCwgaW5vKTsKLQltbWJfbWFya19idWZmZXJfZGlydHkoZGlyX2JoLCAmYW1wO0FGRlNfSShkaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCk7CiAJYWZmc19icmVsc2UoZGlyX2JoKTsKIAogCWlub2RlX3NldF9tdGltZV90b190cyhkaXIsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGRpcikpOwpAQCAtMTAwLDcgJiM0MzsxMDAsNyBAQCBhZmZzX3JlbW92ZV9oYXNoKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlbV9iaCkKIAkJCWVsc2UKIAkJCQlBRkZTX1RBSUwoc2IsIGJoKS0mZ3Q7aGFzaF9jaGFpbiA9IGlubzsKIAkJCWFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBiZTMyX3RvX2NwdShpbm8pIC0gaGFzaF9pbm8pOwotCQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShkaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQkJQUZGU19UQUlMKHNiLCByZW1fYmgpLSZndDtwYXJlbnQgPSAwOwogCQkJcmV0dmFsID0gMDsKIAkJCWJyZWFrOwpAQCAtMTgwLDcgJiM0MzsxODAsNyBAQCBhZmZzX3JlbW92ZV9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAkJCWFmZnNfdW5sb2NrX2RpcihkaXIpOwogCQkJZ290byBkb25lOwogCQl9Ci0JCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCW1hcmtfYnVmZmVyX2RpcnR5KGxpbmtfYmgpOwogCiAJCW1lbWNweShBRkZTX1RBSUwoc2IsIGJoKS0mZ3Q7bmFtZSwgQUZGU19UQUlMKHNiLCBsaW5rX2JoKS0mZ3Q7bmFtZSwgMzIpOwogCQlyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpOwpAQCAtMTg4LDcgJiM0MzsxODgsNyBAQCBhZmZzX3JlbW92ZV9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAkJCWFmZnNfdW5sb2NrX2RpcihkaXIpOwogCQkJZ290byBkb25lOwogCQl9Ci0JCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAKIAkJYWZmc191bmxvY2tfZGlyKGRpcik7CiAJCWlwdXQoZGlyKTsKQEAgLTIwMyw3ICYjNDM7MjAzLDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJCQlfX2JlMzIgaW5vMiA9IEFGRlNfVEFJTChzYiwgbGlua19iaCktJmd0O2xpbmtfY2hhaW47CiAJCQlBRkZTX1RBSUwoc2IsIGJoKS0mZ3Q7bGlua19jaGFpbiA9IGlubzI7CiAJCQlhZmZzX2FkanVzdF9jaGVja3N1bShiaCwgYmUzMl90b19jcHUoaW5vMikgLSBsaW5rX2lubyk7Ci0JCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCXJldHZhbCA9IDA7CiAJCQkvKiBGaXggdGhlIGxpbmsgY291bnQsIGlmIGJoIGlzIGEgbm9ybWFsIGhlYWRlciBibG9jayB3aXRob3V0IGxpbmtzICovCiAJCQlzd2l0Y2ggKGJlMzJfdG9fY3B1KEFGRlNfVEFJTChzYiwgYmgpLSZndDtzdHlwZSkpIHsKQEAgLTMwNiw3ICYjNDM7MzA2LDcgQEAgYWZmc19yZW1vdmVfaGVhZGVyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlyZXR2YWwgPSBhZmZzX3JlbW92ZV9oYXNoKGRpciwgYmgpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZG9uZV91bmxvY2s7Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJbWFya19idWZmZXJfZGlydHkoYmgpOwogCiAJYWZmc191bmxvY2tfZGlyKGRpcik7CiAKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmMKaW5kZXggMTQ0YjE3NDgyZDEyZGEuLjIzZTA4OGE3ZWQ0ZmIzIDEwMDY0NAotLS0gYS9mcy9hZmZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2ZpbGUuYwpAQCAtMTQwLDE0ICYjNDM7MTQwLDE0IEBAIGFmZnNfYWxsb2NfZXh0YmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgdTMyIGV4dCkKIAlBRkZTX1RBSUwoc2IsIG5ld19iaCktJmd0O3BhcmVudCA9IGNwdV90b19iZTMyKGlub2RlLSZndDtpX2lubyk7CiAJYWZmc19maXhfY2hlY2tzdW0oc2IsIG5ld19iaCk7CiAKLQltbWJfbWFya19idWZmZXJfZGlydHkobmV3X2JoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJbWFya19idWZmZXJfZGlydHkobmV3X2JoKTsKIAogCXRtcCA9IGJlMzJfdG9fY3B1KEFGRlNfVEFJTChzYiwgYmgpLSZndDtleHRlbnNpb24pOwogCWlmICh0bXApCiAJCWFmZnNfd2FybmluZyhzYiwgJiMzNDthbGxvY19leHQmIzM0OywgJiMzNDtwcmV2aW91cyBleHRlbnNpb24gc2V0ICgleCkmIzM0OywgdG1wKTsKIAlBRkZTX1RBSUwoc2IsIGJoKS0mZ3Q7ZXh0ZW5zaW9uID0gY3B1X3RvX2JlMzIoYmxvY2tucik7CiAJYWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJsb2NrbnIgLSB0bXApOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAogCUFGRlNfSShpbm9kZSktJmd0O2lfZXh0Y250JiM0MzsmIzQzOzsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKQEAgLTU4MSw3ICYjNDM7NTgxLDcgQEAgYWZmc19leHRlbnRfZmlsZV9vZnMoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG5ld3NpemUpCiAJCW1lbXNldChBRkZTX0RBVEEoYmgpICYjNDM7IGJvZmYsIDAsIHRtcCk7CiAJCWJlMzJfYWRkX2NwdSgmYW1wO0FGRlNfREFUQV9IRUFEKGJoKS0mZ3Q7c2l6ZSwgdG1wKTsKIAkJYWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTsKLQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJc2l6ZSAmIzQzOz0gdG1wOwogCQliaWR4JiM0MzsmIzQzOzsKIAl9IGVsc2UgaWYgKGJpZHgpIHsKQEAgLTYwMyw3ICYjNDM7NjAzLDcgQEAgYWZmc19leHRlbnRfZmlsZV9vZnMoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG5ld3NpemUpCiAJCUFGRlNfREFUQV9IRUFEKGJoKS0mZ3Q7c2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7CiAJCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7CiAJCWJoLSZndDtiX3N0YXRlICZhbXA7PSB+KDFVTCAmbHQ7Jmx0OyBCSF9OZXcpOwotCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQlpZiAocHJldl9iaCkgewogCQkJdTMyIHRtcF9uZXh0ID0gYmUzMl90b19jcHUoQUZGU19EQVRBX0hFQUQocHJldl9iaCktJmd0O25leHQpOwogCkBAIC02MTMsOCAmIzQzOzYxMyw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKQogCQkJCQkgICAgIGJpZHgsIHRtcF9uZXh0KTsKIAkJCUFGRlNfREFUQV9IRUFEKHByZXZfYmgpLSZndDtuZXh0ID0gY3B1X3RvX2JlMzIoYmgtJmd0O2JfYmxvY2tucik7CiAJCQlhZmZzX2FkanVzdF9jaGVja3N1bShwcmV2X2JoLCBiaC0mZ3Q7Yl9ibG9ja25yIC0gdG1wX25leHQpOwotCQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsCi0JCQkJCSAgICAgICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJCW1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpOwogCQkJYWZmc19icmVsc2UocHJldl9iaCk7CiAJCX0KIAkJc2l6ZSAmIzQzOz0gYnNpemU7CkBAIC03MzMsNyAmIzQzOzczMiw3IEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAkJQUZGU19EQVRBX0hFQUQoYmgpLSZndDtzaXplID0gY3B1X3RvX2JlMzIoCiAJCQltYXgoYm9mZiAmIzQzOyB0bXAsIGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKGJoKS0mZ3Q7c2l6ZSkpKTsKIAkJYWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTsKLQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJd3JpdHRlbiAmIzQzOz0gdG1wOwogCQlmcm9tICYjNDM7PSB0bXA7CiAJCWJpZHgmIzQzOyYjNDM7OwpAQCAtNzY2LDEzICYjNDM7NzY1LDEyIEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAkJCQkJCSAgICAgYmlkeCwgdG1wX25leHQpOwogCQkJCUFGRlNfREFUQV9IRUFEKHByZXZfYmgpLSZndDtuZXh0ID0gY3B1X3RvX2JlMzIoYmgtJmd0O2JfYmxvY2tucik7CiAJCQkJYWZmc19hZGp1c3RfY2hlY2tzdW0ocHJldl9iaCwgYmgtJmd0O2JfYmxvY2tuciAtIHRtcF9uZXh0KTsKLQkJCQltbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCwKLQkJCQkJJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQkJCW1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpOwogCQkJfQogCQl9CiAJCWFmZnNfYnJlbHNlKHByZXZfYmgpOwogCQlhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpOwotCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQl3cml0dGVuICYjNDM7PSBic2l6ZTsKIAkJZnJvbSAmIzQzOz0gYnNpemU7CiAJCWJpZHgmIzQzOyYjNDM7OwpAQCAtODAxLDE0ICYjNDM7Nzk5LDEzIEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAkJCQkJCSAgICAgYmlkeCwgdG1wX25leHQpOwogCQkJCUFGRlNfREFUQV9IRUFEKHByZXZfYmgpLSZndDtuZXh0ID0gY3B1X3RvX2JlMzIoYmgtJmd0O2JfYmxvY2tucik7CiAJCQkJYWZmc19hZGp1c3RfY2hlY2tzdW0ocHJldl9iaCwgYmgtJmd0O2JfYmxvY2tuciAtIHRtcF9uZXh0KTsKLQkJCQltbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCwKLQkJCQkJCSZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJCQltYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTsKIAkJCX0KIAkJfSBlbHNlIGlmIChiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktJmd0O3NpemUpICZsdDsgdG1wKQogCQkJQUZGU19EQVRBX0hFQUQoYmgpLSZndDtzaXplID0gY3B1X3RvX2JlMzIodG1wKTsKIAkJYWZmc19icmVsc2UocHJldl9iaCk7CiAJCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7Ci0JCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCXdyaXR0ZW4gJiM0Mzs9IHRtcDsKIAkJZnJvbSAmIzQzOz0gdG1wOwogCQliaWR4JiM0MzsmIzQzOzsKQEAgLTk0NSw3ICYjNDM7OTQyLDcgQEAgYWZmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCX0KIAlBRkZTX1RBSUwoc2IsIGV4dF9iaCktJmd0O2V4dGVuc2lvbiA9IDA7CiAJYWZmc19maXhfY2hlY2tzdW0oc2IsIGV4dF9iaCk7Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCk7CiAJYWZmc19icmVsc2UoZXh0X2JoKTsKIAogCWlmIChpbm9kZS0mZ3Q7aV9zaXplKSB7CmRpZmYgLS1naXQgYS9mcy9hZmZzL2lub2RlLmMgYi9mcy9hZmZzL2lub2RlLmMKaW5kZXggNWRkMWIwMTZiY2IwMGEuLmQ0YTNmMzgxYzRiY2ZmIDEwMDY0NAotLS0gYS9mcy9hZmZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9pbm9kZS5jCkBAIC0yMDYsNyAmIzQzOzIwNiw3IEBAIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiAJCX0KIAl9CiAJYWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTsKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYWZmc19icmVsc2UoYmgpOwogCWFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7CiAJcmV0dXJuIDA7CkBAIC0yNjYsMTEgJiM0MzsyNjYsOCBAQCBhZmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJaWYgKCFpbm9kZS0mZ3Q7aV9ubGluaykgewogCQlpbm9kZS0mZ3Q7aV9zaXplID0gMDsKIAkJYWZmc190cnVuY2F0ZShpbm9kZSk7Ci0JfSBlbHNlIHsKLQkJbW1iX3N5bmMoJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiAJfQogCi0JbW1iX2ludmFsaWRhdGUoJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiAJY2xlYXJfaW5vZGUoaW5vZGUpOwogCWFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7CiAJY2FjaGVfcGFnZSA9ICh1bnNpZ25lZCBsb25nKUFGRlNfSShpbm9kZSktJmd0O2lfbGM7CkBAIC0zMDUsNyAmIzQzOzMwMiw3IEBAIGFmZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyKQogCWJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7CiAJaWYgKCFiaCkKIAkJZ290byBlcnJfYmg7Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWFmZnNfYnJlbHNlKGJoKTsKIAogCWlub2RlLSZndDtpX3VpZCAgICAgPSBjdXJyZW50X2ZzdWlkKCk7CkBAIC0zOTMsMTcgJiM0MzszOTAsMTcgQEAgYWZmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgczMKIAkJQUZGU19UQUlMKHNiLCBiaCktJmd0O2xpbmtfY2hhaW4gPSBjaGFpbjsKIAkJQUZGU19UQUlMKHNiLCBpbm9kZV9iaCktJmd0O2xpbmtfY2hhaW4gPSBjcHVfdG9fYmUzMihibG9jayk7CiAJCWFmZnNfYWRqdXN0X2NoZWNrc3VtKGlub2RlX2JoLCBibG9jayAtIGJlMzJfdG9fY3B1KGNoYWluKSk7Ci0JCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQltYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCk7CiAJCXNldF9ubGluayhpbm9kZSwgMik7CiAJCWlob2xkKGlub2RlKTsKIAl9CiAJYWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTsKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJZGVudHJ5LSZndDtkX2ZzZGF0YSA9ICh2b2lkICopKGxvbmcpYmgtJmd0O2JfYmxvY2tucjsKIAogCWFmZnNfbG9ja19kaXIoZGlyKTsKIAlyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlhZmZzX3VubG9ja19kaXIoZGlyKTsKIAlhZmZzX3VubG9ja19saW5rKGlub2RlKTsKIApkaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jCmluZGV4IGMzYzY1MzJkYTRiMGRhLi41N2Q4ZDc1NWFhZGEwNSAxMDA2NDQKLS0tIGEvZnMvYWZmcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvbmFtZWkuYwpAQCAtMzczLDcgJiM0MzszNzMsNyBAQCBhZmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCX0KIAkqcCA9IDA7CiAJaW5vZGUtJmd0O2lfc2l6ZSA9IGkgJiM0MzsgMTsKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYWZmc19icmVsc2UoYmgpOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCkBAIC00NDMsOCAmIzQzOzQ0Myw3IEBAIGFmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAkvKiBUT0RPOiBtb3ZlIGl0IGJhY2sgdG8gb2xkX2RpciwgaWYgZXJyb3I/ICovCiAKIGRvbmU6Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLAotCQkJJmFtcDtBRkZTX0kocmV0dmFsID8gb2xkX2RpciA6IG5ld19kaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlhZmZzX2JyZWxzZShiaCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTQ5Nyw4ICYjNDM7NDk2LDggQEAgYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAlyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKG9sZF9kaXIsIGJoX25ldyk7CiAJYWZmc191bmxvY2tfZGlyKG9sZF9kaXIpOwogZG9uZToKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmhfb2xkLCAmYW1wO0FGRlNfSShuZXdfZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsICZhbXA7QUZGU19JKG9sZF9kaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGJoX29sZCk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGJoX25ldyk7CiAJYWZmc19icmVsc2UoYmhfb2xkKTsKIAlhZmZzX2JyZWxzZShiaF9uZXcpOwogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9mcy9hZmZzL3N1cGVyLmMgYi9mcy9hZmZzL3N1cGVyLmMKaW5kZXggYjIzMjI1MWFhN2JiZDAuLjBhZDUxMjdlOWZiOGVlIDEwMDY0NAotLS0gYS9mcy9hZmZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9zdXBlci5jCkBAIC0xMDgsNyAmIzQzOzEwOCw2IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAlpLSZndDtpX2xjID0gTlVMTDsKIAlpLSZndDtpX2V4dF9iaCA9IE5VTEw7CiAJaS0mZ3Q7aV9wYV9jbnQgPSAwOwotCW1tYl9pbml0KCZhbXA7aS0mZ3Q7aV9tZXRhZGF0YV9iaHMsICZhbXA7aS0mZ3Q7dmZzX2lub2RlLmlfZGF0YSk7CiAKIAlyZXR1cm4gJmFtcDtpLSZndDt2ZnNfaW5vZGU7CiB9CmRpZmYgLS1naXQgYS9mcy9iZnMvZGlyLmMgYi9mcy9iZnMvZGlyLmMKaW5kZXggNWI0MGFiMDlhNzk2ZGUuLjliMzdlYzRiZDg5YThjIDEwMDY0NAotLS0gYS9mcy9iZnMvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmZzL2Rpci5jCkBAIC02OCwxNyAmIzQzOzY4LDEwIEBAIHN0YXRpYyBpbnQgYmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJmc19mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCi17Ci0JcmV0dXJuIG1tYl9mc3luYyhmaWxlLAotCQkJJmFtcDtCRlNfSShmaWxlLSZndDtmX21hcHBpbmctJmd0O2hvc3QpLSZndDtpX21ldGFkYXRhX2JocywKLQkJCXN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKLX0KLQogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnMgPSB7CiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkuaXRlcmF0ZV9zaGFyZWQJPSBiZnNfcmVhZGRpciwKLQkuZnN5bmMJCT0gYmZzX2ZzeW5jLAomIzQzOwkuZnN5bmMJCT0gc2ltcGxlX2ZzeW5jLAogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2Jmcy9pbm9kZS5jIGIvZnMvYmZzL2lub2RlLmMKaW5kZXggZTQxZWZkZDM1ZGI5ZWYuLmNhY2M3ZWZmOWMzM2NlIDEwMDY0NAotLS0gYS9mcy9iZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9iZnMvaW5vZGUuYwpAQCAtMTM2LDcgJiM0MzsxMzYsNiBAQCBzdGF0aWMgaW50IGJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIAl1bnNpZ25lZCBsb25nIGlfc2Jsb2NrOwogCXN0cnVjdCBiZnNfaW5vZGUgKmRpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JaW50IGVyciA9IDA7CiAKIAlkcHJpbnRmKCYjMzQ7aW5vPSUwOHhcbiYjMzQ7LCBpbm8pOwogCkBAIC0xNjUsMTMgJiM0MzsxNjQsMzEgQEAgc3RhdGljIGludCBiZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiAJZGktJmd0O2lfZW9mZnNldCA9IGNwdV90b19sZTMyKGlfc2Jsb2NrICogQkZTX0JTSVpFICYjNDM7IGlub2RlLSZndDtpX3NpemUgLSAxKTsKIAogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQlpZiAod2JjLSZndDtzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpIHsKLQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotCQlpZiAoYnVmZmVyX3JlcShiaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGJoKSkKLQkJCWVyciA9IC1FSU87Ci0JfQogCWJyZWxzZShiaCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwomIzQzOwlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7ewomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsJc3RydWN0IGJmc19pbm9kZSAqZGk7CiYjNDM7CXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiYjNDM7CiYjNDM7CWRpID0gZmluZF9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgKHUxNilpbm9kZS0mZ3Q7aW5vLCAmYW1wO2JoKTsKJiM0MzsJaWYgKElTX0VSUihkaSkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihkaSk7CiYjNDM7CiYjNDM7CXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKJiM0MzsJaWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHsKJiM0MzsJCWVyciA9IC1FSU87CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwllcnIgPSBtbWJfc3luYygmYW1wO0JGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzO291dDoKJiM0MzsJYnJlbHNlKGJoKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zMDIsNiAmIzQzOzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHsKIAkuYWxsb2NfaW5vZGUJPSBiZnNfYWxsb2NfaW5vZGUsCiAJLmZyZWVfaW5vZGUJPSBiZnNfZnJlZV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBiZnNfd3JpdGVfaW5vZGUsCiYjNDM7CS5zeW5jX2lub2RlX21ldGFkYXRhID0gYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEsCiAJLmV2aWN0X2lub2RlCT0gYmZzX2V2aWN0X2lub2RlLAogCS5wdXRfc3VwZXIJPSBiZnNfcHV0X3N1cGVyLAogCS5zdGF0ZnMJCT0gYmZzX3N0YXRmcywKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggOWFmNWYwNjFhMWY4NWEuLmJlOGI1N2E2MzVjZDgyIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9idWZmZXIuYwpAQCAtNjI4LDc5ICYjNDM7NjI4LDYgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKQogfQogRVhQT1JUX1NZTUJPTChtbWJfc3luYyk7CiAKLS8qKgotICogbW1iX2ZzeW5jX25vZmx1c2ggLSBmc3luYyBpbXBsZW1lbnRhdGlvbiBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdpdGgKLSAqIAkJICAgICAgIG1ldGFkYXRhIGJ1ZmZlcnMgbGlzdAotICoKLSAqIEBmaWxlOglmaWxlIHRvIHN5bmNocm9uaXplCi0gKiBAbW1iOglsaXN0IG9mIG1ldGFkYXRhIGJocyB0byBmbHVzaAotICogQHN0YXJ0OglzdGFydCBvZmZzZXQgaW4gYnl0ZXMKLSAqIEBlbmQ6CWVuZCBvZmZzZXQgaW4gYnl0ZXMgKGluY2x1c2l2ZSkKLSAqIEBkYXRhc3luYzoJb25seSBzeW5jaHJvbml6ZSBlc3NlbnRpYWwgbWV0YWRhdGEgaWYgdHJ1ZQotICoKLSAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGZzeW5jIG1ldGhvZCBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdoaWNoCi0gKiB0cmFjayBhbGwgbm9uLWlub2RlIG1ldGFkYXRhIGluIHRoZSBidWZmZXJzIGxpc3QgaGFuZ2luZyBvZmYgdGhlIEBtbWIKLSAqIHN0cnVjdHVyZS4KLSAqLwotaW50IG1tYl9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYiwKLQkJICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7Ci0JaW50IGVycjsKLQlpbnQgcmV0ID0gMDsKLQotCWVyciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmIChtbWIpCi0JCXJldCA9IG1tYl9zeW5jKG1tYik7Ci0JaWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX0RJUlRZX0FMTCkpCi0JCWdvdG8gb3V0OwotCWlmIChkYXRhc3luYyAmYW1wOyZhbXA7ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX0RJUlRZX0RBVEFTWU5DKSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IGVycjsKLQotb3V0OgotCS8qIGNoZWNrIGFuZCBhZHZhbmNlIGFnYWluIHRvIGNhdGNoIGVycm9ycyBhZnRlciBzeW5jaW5nIG91dCBidWZmZXJzICovCi0JZXJyID0gZmlsZV9jaGVja19hbmRfYWR2YW5jZV93Yl9lcnIoZmlsZSk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBlcnI7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jX25vZmx1c2gpOwotCi0vKioKLSAqIG1tYl9mc3luYyAtIGZzeW5jIGltcGxlbWVudGF0aW9uIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2l0aCBtZXRhZGF0YQotICogCSAgICAgICBidWZmZXJzIGxpc3QKLSAqCi0gKiBAZmlsZToJZmlsZSB0byBzeW5jaHJvbml6ZQotICogQG1tYjoJbGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2gKLSAqIEBzdGFydDoJc3RhcnQgb2Zmc2V0IGluIGJ5dGVzCi0gKiBAZW5kOgllbmQgb2Zmc2V0IGluIGJ5dGVzIChpbmNsdXNpdmUpCi0gKiBAZGF0YXN5bmM6CW9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWUKLSAqCi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmc3luYyBtZXRob2QgZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aGljaAotICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iCi0gKiBzdHJ1Y3R1cmUuIFRoaXMgYWxzbyBtYWtlcyBzdXJlIHRoYXQgYSBkZXZpY2UgY2FjaGUgZmx1c2ggb3BlcmF0aW9uIGlzCi0gKiBjYWxsZWQgYXQgdGhlIGVuZC4KLSAqLwotaW50IG1tYl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsCi0JICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7Ci0JaW50IHJldDsKLQotCXJldCA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbGUsIG1tYiwgc3RhcnQsIGVuZCwgZGF0YXN5bmMpOwotCWlmICghcmV0KQotCQlyZXQgPSBibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmRldik7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jKTsKLQogLyoKICAqIENhbGxlZCB3aGVuIHdlJiMzOTt2ZSByZWNlbnRseSB3cml0dGVuIGJsb2NrIGBiYmxvY2smIzM5OywgYW5kIGl0IGlzIGtub3duIHRoYXQKICAqIGBiYmxvY2smIzM5OyB3YXMgZm9yIGEgYnVmZmVyX2JvdW5kYXJ5KCkgYnVmZmVyLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBibG9jayBhdApAQCAtMTEyMywxMiAmIzQzOzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7CiAKIHZvaWQgbWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3Ioc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKJiM0MzsJc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7CiYjNDM7CiAJc2V0X2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7CiAJLyogRklYTUU6IGRvIHdlIG5lZWQgdG8gc2V0IHRoaXMgaW4gYm90aCBwbGFjZXM/ICovCiAJaWYgKGJoLSZndDtiX2ZvbGlvICZhbXA7JmFtcDsgYmgtJmd0O2JfZm9saW8tJmd0O21hcHBpbmcpCiAJCW1hcHBpbmdfc2V0X2Vycm9yKGJoLSZndDtiX2ZvbGlvLSZndDttYXBwaW5nLCAtRUlPKTsKLQlpZiAoYmgtJmd0O2JfbW1iKQotCQltYXBwaW5nX3NldF9lcnJvcihiaC0mZ3Q7Yl9tbWItJmd0O21hcHBpbmcsIC1FSU8pOwomIzQzOwkvKiBQcm90ZWN0IHVzIGZyb20gbW1iICZhbXA7IGlub2RlIGdldHRpbmcgZnJlZWQgd2hpbGUgd2Ugd29yayBvbiBpdCAqLwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW1tYiA9IFJFQURfT05DRShiaC0mZ3Q7Yl9tbWIpOwomIzQzOwlpZiAobW1iKQomIzQzOwkJbWFwcGluZ19zZXRfZXJyb3IobW1iLSZndDttYXBwaW5nLCAtRUlPKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiBFWFBPUlRfU1lNQk9MKG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmMKaW5kZXggMjc4ZDRiZThlY2JlNzcuLmUxN2JiYzc1OThjMTQzIDEwMDY0NAotLS0gYS9mcy9leHQyL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDIvZGlyLmMKQEAgLTczNCw2ICYjNDM7NzM0LDYgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2Rpcl9vcGVyYXRpb25zID0gewogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsCT0gZXh0Ml9jb21wYXRfaW9jdGwsCiAjZW5kaWYKLQkuZnN5bmMJCT0gZXh0Ml9mc3luYywKJiM0MzsJLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKIAkuc2V0bGVhc2UJPSBnZW5lcmljX3NldGxlYXNlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZXh0Mi5oIGIvZnMvZXh0Mi9leHQyLmgKaW5kZXggNzlmN2IzOTUyNThjMmEuLjU2NDI0NTFiZjE5MTczIDEwMDY0NAotLS0gYS9mcy9leHQyL2V4dDIuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL2V4dDIuaApAQCAtNzM1LDYgJiM0Mzs3MzUsNyBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBleHQyX2NvdW50X2ZyZWUgKHN0cnVjdCBidWZmZXJfaGVhZCAqLCB1bnNpZ25lZCk7CiAvKiBpbm9kZS5jICovCiBleHRlcm4gc3RydWN0IGlub2RlICpleHQyX2lnZXQgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiBpbnQgZXh0Ml93cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKJiM0MztleHRlcm4gaW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopOwogZXh0ZXJuIHZvaWQgZXh0Ml9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiB2b2lkIGV4dDJfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pOwogZXh0ZXJuIGludCBleHQyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpOwpAQCAtNzcyLDggJiM0Mzs3NzMsNiBAQCBleHRlcm4gdm9pZCBleHQyX3N5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzLAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9uczsKIAogLyogZmlsZS5jICovCi1leHRlcm4gaW50IGV4dDJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwKLQkJICAgICAgaW50IGRhdGFzeW5jKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9vcGVyYXRpb25zOwogCmRpZmYgLS1naXQgYS9mcy9leHQyL2ZpbGUuYyBiL2ZzL2V4dDIvZmlsZS5jCmluZGV4IDhkY2E5ZWM0Y2FjZDlhLi5iOTAyMGRmN2Q4OWUwMyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9maWxlLmMKQEAgLTQ3LDIxICYjNDM7NDcsNiBAQCBzdGF0aWMgaW50IGV4dDJfcmVsZWFzZV9maWxlIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQogCXJldHVybiAwOwogfQogCi1pbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0OwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQotCXJldCA9IG1tYl9mc3luYyhmaWxlLCAmYW1wO0VYVDJfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzLAotCQkJc3RhcnQsIGVuZCwgZGF0YXN5bmMpOwotCWlmIChyZXQgPT0gLUVJTykKLQkJLyogV2UgZG9uJiMzOTt0IHJlYWxseSBrbm93IHdoZXJlIHRoZSBJTyBlcnJvciBoYXBwZW5lZC4uLiAqLwotCQlleHQyX2Vycm9yKHNiLCBfX2Z1bmNfXywKLQkJCSAgICYjMzQ7ZGV0ZWN0ZWQgSU8gZXJyb3Igd2hlbiB3cml0aW5nIG1ldGFkYXRhIGJ1ZmZlcnMmIzM0Oyk7Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHNzaXplX3QgZXh0Ml9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItJmd0O2tpX2ZpbHA7CkBAIC0yMTMsNyAmIzQzOzE5OCw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9maWxlX29wZXJhdGlvbnMgPSB7CiAJLm1tYXBfcHJlcGFyZQk9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsCiAJLm9wZW4JCT0gZXh0Ml9maWxlX29wZW4sCiAJLnJlbGVhc2UJPSBleHQyX3JlbGVhc2VfZmlsZSwKLQkuZnN5bmMJCT0gZXh0Ml9mc3luYywKJiM0MzsJLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKIAkuZ2V0X3VubWFwcGVkX2FyZWEgPSB0aHBfZ2V0X3VubWFwcGVkX2FyZWEsCiAJLnNwbGljZV9yZWFkCT0gZmlsZW1hcF9zcGxpY2VfcmVhZCwKIAkuc3BsaWNlX3dyaXRlCT0gaXRlcl9maWxlX3NwbGljZV93cml0ZSwKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaW5vZGUuYyBiL2ZzL2V4dDIvaW5vZGUuYwppbmRleCAyOTgwODYyOWNjZTU2Zi4uNTE2NTY2NDFjNGU1OWMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL2lub2RlLmMKQEAgLTM5LDggJiM0MzszOSw2IEBACiAjaW5jbHVkZSAmIzM0O2FjbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGF0dHIuaCYjMzQ7CiAKLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKTsKLQogLyoKICAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay4KICAqLwpAQCAtODMsMTEgJiM0Mzs4MSwxNiBAQCB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoJmFtcDtpbm9kZS0mZ3Q7aV9kYXRhKTsKIAogCWlmICh3YW50X2RlbGV0ZSkgewomIzQzOwkJc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKJiM0MzsJCQkuc3luY19tb2RlID0gaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkgPyBXQl9TWU5DX0FMTCA6CiYjNDM7CQkJCQkJCSAgICAgICBXQl9TWU5DX05PTkUsCiYjNDM7CQl9OwomIzQzOwogCQlzYl9zdGFydF9pbnR3cml0ZShpbm9kZS0mZ3Q7aV9zYik7CiAJCS8qIHNldCBkdGltZSAqLwogCQlFWFQyX0koaW5vZGUpLSZndDtpX2R0aW1lCT0ga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpOwogCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQkJX19leHQyX3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7CiYjNDM7CQlleHQyX3dyaXRlX2lub2RlKGlub2RlLCAmYW1wO3diYyk7CiAJCS8qIHRydW5jYXRlIHRvIDAgKi8KIAkJaW5vZGUtJmd0O2lfc2l6ZSA9IDA7CiAJCWlmIChpbm9kZS0mZ3Q7aV9ibG9ja3MpCkBAIC0xNDY5LDcgJiM0MzsxNDcyLDcgQEAgc3RydWN0IGlub2RlICpleHQyX2lnZXQgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKQogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKQomIzQzO2ludCBleHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCXN0cnVjdCBleHQyX2lub2RlX2luZm8gKmVpID0gRVhUMl9JKGlub2RlKTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CkBAIC0xNTYwLDIyICYjNDM7MTU2MywzMiBAQCBzdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYykKIAl9IGVsc2UgZm9yIChuID0gMDsgbiAmbHQ7IEVYVDJfTl9CTE9DS1M7IG4mIzQzOyYjNDM7KQogCQlyYXdfaW5vZGUtJmd0O2lfYmxvY2tbbl0gPSBlaS0mZ3Q7aV9kYXRhW25dOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQlpZiAoZG9fc3luYykgewotCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7Ci0JCWlmIChidWZmZXJfcmVxKGJoKSAmYW1wOyZhbXA7ICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7Ci0JCQlwcmludGsgKCYjMzQ7SU8gZXJyb3Igc3luY2luZyBleHQyIGlub2RlIFslczolMDhseF1cbiYjMzQ7LAotCQkJCXNiLSZndDtzX2lkLCAodW5zaWduZWQgbG9uZykgaW5vKTsKLQkJCWVyciA9IC1FSU87Ci0JCX0KLQl9CiAJZWktJmd0O2lfc3RhdGUgJmFtcDs9IH5FWFQyX1NUQVRFX05FVzsKIAlicmVsc2UgKGJoKTsKJiM0MzsJc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7CiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGV4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7aW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKLQlyZXR1cm4gX19leHQyX3dyaXRlX2lub2RlKGlub2RlLCB3YmMtJmd0O3N5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7CiYjNDM7CXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiYjNDM7CXN0cnVjdCBleHQyX2lub2RlICpyYXdfaW5vZGUgPSBleHQyX2dldF9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgaW5vZGUtJmd0O2lfaW5vLAomIzQzOwkJCQkJCSAgICAgICZhbXA7YmgpOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJaWYgKElTX0VSUihyYXdfaW5vZGUpKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKJiM0MzsJaWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHsKJiM0MzsJCXByaW50aygmIzM0O0lPIGVycm9yIHN5bmNpbmcgZXh0MiBpbm9kZSBbJXM6JTA4bHhdXG4mIzM0OywKJiM0MzsJCSAgICAgICBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19pZCwgKHVuc2lnbmVkIGxvbmcpaW5vZGUtJmd0O2lfaW5vKTsKJiM0MzsJCWVyciA9IC1FSU87CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwllcnIgPSBtbWJfc3luYygmYW1wO0VYVDJfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MztvdXQ6CiYjNDM7CWJyZWxzZShiaCk7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIGludCBleHQyX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLApkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jCmluZGV4IDM5OTlmOGYzYjE1NmUzLi5hNDBmNTMwODcyYTQwNyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDIvc3VwZXIuYwpAQCAtMzYyLDYgJiM0MzszNjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0Ml9zb3BzID0gewogCS5hbGxvY19pbm9kZQk9IGV4dDJfYWxsb2NfaW5vZGUsCiAJLmZyZWVfaW5vZGUJPSBleHQyX2ZyZWVfaW5fY29yZV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBleHQyX3dyaXRlX2lub2RlLAomIzQzOwkuc3luY19pbm9kZV9tZXRhZGF0YSA9IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YSwKIAkuZXZpY3RfaW5vZGUJPSBleHQyX2V2aWN0X2lub2RlLAogCS5wdXRfc3VwZXIJPSBleHQyX3B1dF9zdXBlciwKIAkuc3luY19mcwk9IGV4dDJfc3luY19mcywKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYjM3YzEzNmVhM2FiMzMuLjhmMzg4ZTE1OGRhZWVmIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMTE1MSw3ICYjNDM7MTE1MSw3IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8gewogCXN0cnVjdCByd19zZW1hcGhvcmUgaV9kYXRhX3NlbTsKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogCXN0cnVjdCBqYmQyX2lub2RlICpqaW5vZGU7Ci0Jc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzOwomIzQzOwlzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmlfbWV0YWRhdGFfYmhzOwogCiAJLyoKIAkgKiBGaWxlIGNyZWF0aW9uIHRpbWUuIEl0cyBmdW5jdGlvbiBpcyBzYW1lIGFzIHRoYXQgb2YKQEAgLTMxNTUsNiAmIzQzOzMxNTUsNyBAQCBleHRlcm4gc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubywKIAlfX2V4dDRfaWdldCgoc2IpLCAoaW5vKSwgKGZsYWdzKSwgX19mdW5jX18sIF9fTElORV9fKQogCiBleHRlcm4gaW50ICBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7CiYjNDM7ZXh0ZXJuIGludCAgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7CiBleHRlcm4gaW50ICBleHQ0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgZGVudHJ5ICosCiAJCQkgc3RydWN0IGlhdHRyICopOwogZXh0ZXJuIHUzMiAgZXh0NF9kaW9fYWxpZ25tZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0X2piZDIuYyBiL2ZzL2V4dDQvZXh0NF9qYmQyLmMKaW5kZXggOWE4YzIyNWYyNzUzMDkuLjc1MjMyNmYzYjY1MzZhIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDRfamJkMi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NF9qYmQyLmMKQEAgLTM1MCw2ICYjNDM7MzUwLDIxIEBAIGludCBfX2V4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBleHQ0X2lub2RlX2F0dGFjaF9tbWIoc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJdCYjMzk7cyBkaWZmaWN1bHQgdG8gaGFuZGxlIGZhaWx1cmUgd2hlbiBtYXJraW5nIGJ1ZmZlciBkaXJ0eSB3aXRob3V0CiYjNDM7CSAqIGxlYXZpbmcgZmlsZXN5c3RlbSBjb3JydXB0ZWQKJiM0MzsJICovCiYjNDM7CW1tYiA9IGttYWxsb2Nfb2JqKCptbWIsIEdGUF9OT0ZTIHwgX19HRlBfTk9GQUlMKTsKJiM0MzsJbW1iX2luaXQobW1iLCAmYW1wO2lub2RlLSZndDtpX2RhdGEpOwomIzQzOwkvKiBTb21lb25lIHN3YXBwZWQgYW5vdGhlciBtbWIgYmVmb3JlIHVzPyAqLwomIzQzOwlpZiAoY21weGNoZygmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzLCBOVUxMLCBtbWIpKQomIzQzOwkJa2ZyZWUobW1iKTsKJiM0Mzt9CiYjNDM7CiBpbnQgX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsCiAJCQkJIGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCkBAIC0zODksMTEgJiM0Mzs0MDQsMTQgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLAogCQkJCQkgZXJyKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmIChpbm9kZSkKJiM0MzsJCWlmIChpbm9kZSkgewomIzQzOwkJCWlmICghRVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpCiYjNDM7CQkJCWV4dDRfaW5vZGVfYXR0YWNoX21tYihpbm9kZSk7CiAJCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsCi0JCQkJCSAgICAgICZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwotCQllbHNlCiYjNDM7CQkJCQkgICAgICBFWFQ0X0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQl9IGVsc2UgewogCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwomIzQzOwkJfQogCQlpZiAoaW5vZGUgJmFtcDsmYW1wOyBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSkgewogCQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwogCQkJaWYgKGJ1ZmZlcl9yZXEoYmgpICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZnN5bmMuYyBiL2ZzL2V4dDQvZnN5bmMuYwppbmRleCA5MjQ3MjZkY2M4NWZmNS4uMjk5OWMyY2M4ZmNmYTAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZnN5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2ZzeW5jLmMKQEAgLTY4LDkgJiM0Mzs2OCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9zeW5jX3BhcmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQkgKiB0aHJvdWdoIGV4dDRfZXZpY3RfaW5vZGUoKSkgYW5kIHNvIHdlIGFyZSBzYWZlIHRvIGZsdXNoCiAJCSAqIG1ldGFkYXRhIGJsb2NrcyBhbmQgdGhlIGlub2RlLgogCQkgKi8KLQkJcmV0ID0gbW1iX3N5bmMoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKIAkJcmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKQEAgLTgzLDIyICYjNDM7ODAsMTEgQEAgc3RhdGljIGludCBleHQ0X2ZzeW5jX25vam91cm5hbChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAogCQkJCWludCBkYXRhc3luYywgYm9vbCAqbmVlZHNfYmFycmllcikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0mZ3Q7Zl9pbm9kZTsKLQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewotCQkuc3luY19tb2RlID0gV0JfU1lOQ19BTEwsCi0JCS5ucl90b193cml0ZSA9IDAsCi0JfTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gbW1iX2ZzeW5jX25vZmx1c2goZmlsZSwgJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2JocywKLQkJCQlzdGFydCwgZW5kLCBkYXRhc3luYyk7CiYjNDM7CXJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7Ci0KLQkvKiBGb3JjZSB3cml0ZW91dCBvZiBpbm9kZSB0YWJsZSBidWZmZXIgdG8gZGlzayAqLwotCXJldCA9IGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsICZhbXA7d2JjKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJcmV0ID0gZXh0NF9zeW5jX3BhcmVudChpbm9kZSk7CiAKIAlpZiAodGVzdF9vcHQoaW5vZGUtJmd0O2lfc2IsIEJBUlJJRVIpKQpAQCAtMTU2LDYgJiM0MzsxNDIsMTAgQEAgaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYykKIAlpZiAoc2JfcmRvbmx5KGlub2RlLSZndDtpX3NiKSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJcmV0ID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCWlmICghRVhUNF9TQihpbm9kZS0mZ3Q7aV9zYiktJmd0O3Nfam91cm5hbCkgewogCQlyZXQgPSBleHQ0X2ZzeW5jX25vam91cm5hbChmaWxlLCBzdGFydCwgZW5kLCBkYXRhc3luYywKIAkJCQkJICAgJmFtcDtuZWVkc19iYXJyaWVyKTsKQEAgLTE2NCwxMCAmIzQzOzE1NCw2IEBAIGludCBleHQ0X3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KIAkvKgogCSAqICBUaGUgY2FsbGVyJiMzOTtzIGZpbGVtYXBfZmRhdGF3cml0ZSgpL3dhaXQgd2lsbCBzeW5jIHRoZSBkYXRhLgogCSAqICBNZXRhZGF0YSBpcyBpbiB0aGUgam91cm5hbCwgd2Ugd2FpdCBmb3IgcHJvcGVyIHRyYW5zYWN0aW9uIHRvCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggY2U5OTgwN2M1ZjViMmMuLmI2MWVlNzVlY2JkZjFhIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0xOTUsOSAmIzQzOzE5NSw4IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQkJZXh0NF93YXJuaW5nX2lub2RlKGlub2RlLCAmIzM0O2RhdGEgd2lsbCBiZSBsb3N0JiMzNDspOwogCiAJCXRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKCZhbXA7aW5vZGUtJmd0O2lfZGF0YSk7Ci0JCS8qIEF2b2lkIG1iYWxsb2Mgc3BlY2lhbCBpbm9kZSB3aGljaCBoYXMgbm8gcHJvcGVyIGlvcHMgKi8KLQkJaWYgKCFFWFQ0X1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c19qb3VybmFsKQotCQkJbW1iX3N5bmMoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQlpZiAoRVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpCiYjNDM7CQkJbW1iX3N5bmMoRVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwogCQlnb3RvIG5vX2RlbGV0ZTsKIAl9CiAKQEAgLTM0NTIsNiAmIzQzOzM0NTEsNyBAQCBzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdCkKIHN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQ0X1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c19qb3VybmFsOwomIzQzOwlzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjsKIAogCWlmIChqb3VybmFsKSB7CiAJCWlmIChqYmQyX3RyYW5zYWN0aW9uX2NvbW1pdHRlZChqb3VybmFsLApAQCAtMzQ2Miw4ICYjNDM7MzQ2Miw5IEBAIHN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSkKIAkJcmV0dXJuIHRydWU7CiAJfQogCiYjNDM7CW1tYiA9IFJFQURfT05DRShFWFQ0X0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiAJLyogQW55IG1ldGFkYXRhIGJ1ZmZlcnMgdG8gd3JpdGU/ICovCi0JaWYgKG1tYl9oYXNfYnVmZmVycygmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKSkKJiM0MzsJaWYgKG1tYiAmYW1wOyZhbXA7IG1tYl9oYXNfYnVmZmVycyhtbWIpKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX0RJUlRZX0RBVEFTWU5DOwogfQpAQCAtNTgzOCwyNCAmIzQzOzU4MzksMzYgQEAgaW50IGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiAJCWVyciA9IGV4dDRfZmNfY29tbWl0KEVYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2pvdXJuYWwsCiAJCQkJCQlFWFQ0X0koaW5vZGUpLSZndDtpX3N5bmNfdGlkKTsKIAl9IGVsc2UgewotCQlzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7CiYjNDM7CQlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KIAotCQllcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCAmYW1wO2lsb2MpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJLyoKLQkJICogc3luYygyKSB3aWxsIGZsdXNoIHRoZSB3aG9sZSBidWZmZXIgY2FjaGUuIE5vIG5lZWQgdG8gZG8KLQkJICogaXQgaGVyZSBzZXBhcmF0ZWx5IGZvciBlYWNoIGlub2RlLgotCQkgKi8KLQkJaWYgKHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfQUxMICZhbXA7JmFtcDsgIXdiYy0mZ3Q7Zm9yX3N5bmMpCi0JCQlzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTsKLQkJaWYgKGJ1ZmZlcl9yZXEoaWxvYy5iaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGlsb2MuYmgpKSB7Ci0JCQlleHQ0X2Vycm9yX2lub2RlX2Jsb2NrKGlub2RlLCBpbG9jLmJoLSZndDtiX2Jsb2NrbnIsIEVJTywKLQkJCQkJICAgICAgICYjMzQ7SU8gZXJyb3Igc3luY2luZyBpbm9kZSYjMzQ7KTsKLQkJCWVyciA9IC1FSU87Ci0JCX0KLQkJYnJlbHNlKGlsb2MuYmgpOwomIzQzO2ludCBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7CiYjNDM7CXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKiBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpbiBub2pvdXJuYWwgbW9kZSAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKEVYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2pvdXJuYWwpKQomIzQzOwkJcmV0dXJuIC1FRlNDT1JSVVBURUQ7CiYjNDM7CiYjNDM7CWVyciA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jX25vaW5tZW0oaW5vZGUsICZhbXA7aWxvYyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwlzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTsKJiM0MzsJaWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihpbG9jLmJoKSkgewomIzQzOwkJZXh0NF9lcnJvcl9pbm9kZV9ibG9jayhpbm9kZSwgaWxvYy5iaC0mZ3Q7Yl9ibG9ja25yLCBFSU8sCiYjNDM7CQkJCSAgICAgICAmIzM0O0lPIGVycm9yIHN5bmNpbmcgaW5vZGUmIzM0Oyk7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwkJZ290byBvdXQ7CiAJfQomIzQzOwltbWIgPSBSRUFEX09OQ0UoRVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwlpZiAobW1iKQomIzQzOwkJZXJyID0gbW1iX3N5bmMobW1iKTsKJiM0MztvdXQ6CiYjNDM7CWJyZWxzZShpbG9jLmJoKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLjkwZDZkNmI4ODY3MzAyIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jCkBAIC0xNDMwLDcgJiM0MzsxNDMwLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCUlOSVRfV09SSygmYW1wO2VpLSZndDtpX3Jzdl9jb252ZXJzaW9uX3dvcmssIGV4dDRfZW5kX2lvX3Jzdl93b3JrKTsKIAlleHQ0X2ZjX2luaXRfaW5vZGUoJmFtcDtlaS0mZ3Q7dmZzX2lub2RlKTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2VpLSZndDtpX2ZjX2xvY2spOwotCW1tYl9pbml0KCZhbXA7ZWktJmd0O2lfbWV0YWRhdGFfYmhzLCAmYW1wO2VpLSZndDt2ZnNfaW5vZGUuaV9kYXRhKTsKJiM0MzsJZWktJmd0O2lfbWV0YWRhdGFfYmhzID0gTlVMTDsKICNpZmRlZiBDT05GSUdfTE9DS0RFUAogCWxvY2tkZXBfc2V0X3N1YmNsYXNzKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0sIElfREFUQV9TRU1fTk9STUFMKTsKICNlbmRpZgpAQCAtMTQ1MSw2ICYjNDM7MTQ1MSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiBzdGF0aWMgdm9pZCBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWZzY3J5cHRfZnJlZV9pbm9kZShpbm9kZSk7CiYjNDM7CWtmcmVlKEVYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKIAlpZiAoIWxpc3RfZW1wdHkoJmFtcDsoRVhUNF9JKGlub2RlKS0mZ3Q7aV9mY19saXN0KSkpIHsKIAkJcHJfd2FybigmIzM0OyVzOiBpbm9kZSAlbGx1IHN0aWxsIGluIGZjIGxpc3QmIzM0OywKIAkJCV9fZnVuY19fLCBpbm9kZS0mZ3Q7aV9pbm8pOwpAQCAtMTUzMCw4ICYjNDM7MTUzMSw4IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQogdm9pZCBleHQ0X2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJZXh0NF9mY19kZWwoaW5vZGUpOwotCWlmICghRVhUNF9TQihpbm9kZS0mZ3Q7aV9zYiktJmd0O3Nfam91cm5hbCkKLQkJbW1iX2ludmFsaWRhdGUoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CWlmIChFWFQ0X0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2JocykKJiM0MzsJCW1tYl9pbnZhbGlkYXRlKEVYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKIAljbGVhcl9pbm9kZShpbm9kZSk7CiAJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKIAkvKgpAQCAtMTYwNSw5ICYjNDM7MTYwNiwxMyBAQCBzdGF0aWMgaW50IGV4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7CiAJCS5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTAogCX07CiYjNDM7CWludCByZXQ7CiAKIAl0cmFjZV9leHQ0X25mc19jb21taXRfbWV0YWRhdGEoaW5vZGUpOwotCXJldHVybiBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCAmYW1wO3diYyk7CiYjNDM7CXJldCA9IGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsICZhbXA7d2JjKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZXQgPSBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsICZhbXA7d2JjKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogI2lmZGVmIENPTkZJR19RVU9UQQpAQCAtMTY2NCw2ICYjNDM7MTY2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7CiAJLmZyZWVfaW5vZGUJPSBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IGV4dDRfZGVzdHJveV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBleHQ0X3dyaXRlX2lub2RlLAomIzQzOwkuc3luY19pbm9kZV9tZXRhZGF0YSA9IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YSwKIAkuZGlydHlfaW5vZGUJPSBleHQ0X2RpcnR5X2lub2RlLAogCS5kcm9wX2lub2RlCT0gZXh0NF9kcm9wX2lub2RlLAogCS5ldmljdF9pbm9kZQk9IGV4dDRfZXZpY3RfaW5vZGUsCmRpZmYgLS1naXQgYS9mcy9mYXQvZGlyLmMgYi9mcy9mYXQvZGlyLmMKaW5kZXggNGY2ZjQyZjMzNjEzZGYuLmQzM2JmMzRiZGNlNzVmIDEwMDY0NAotLS0gYS9mcy9mYXQvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2Rpci5jCkBAIC0xMDI4LDggJiM0MzsxMDI4LDYgQEAgc3RhdGljIGludCBfX2ZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgbG9mZl90IHBvcywgaW50IG5yX3Nsb3RzKQogCQkJbnJfc2xvdHMtLTsKIAkJfQogCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7TVNET1NfSShkaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JCWlmIChJU19ESVJTWU5DKGRpcikpCi0JCQllcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJCWJyZWxzZShiaCk7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKQEAgLTEwNjMsOCAmIzQzOzEwNjEsNiBAQCBpbnQgZmF0X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZmF0X3Nsb3RfaW5mbyAqc2luZm8pCiAJCW5yX3Nsb3RzLS07CiAJfQogCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtNU0RPU19JKGRpciktJmd0O2lfbWV0YWRhdGFfYmhzKTsKLQlpZiAoSVNfRElSU1lOQyhkaXIpKQotCQllcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJYnJlbHNlKGJoKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMTA4NCwxMCAmIzQzOzEwODAsOSBAQCBpbnQgZmF0X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZmF0X3Nsb3RfaW5mbyAqc2luZm8pCiAJfQogCiAJZmF0X3RydW5jYXRlX3RpbWUoZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0FUSU1FIHwgRkFUX1VQREFURV9DTVRJTUUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGRpcik7CiAJaWYgKElTX0RJUlNZTkMoZGlyKSkKLQkJKHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTsKLQllbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKJiM0MzsJCXN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTExOSwyMSAmIzQzOzExMTQsMTEgQEAgc3RhdGljIGludCBmYXRfemVyb2VkX2NsdXN0ZXIoc3RydWN0IGlub2RlICpkaXIsIHNlY3Rvcl90IGJsa25yLCBpbnQgbnJfdXNlZCwKIAkJbiYjNDM7JiM0Mzs7CiAJCWJsa25yJiM0MzsmIzQzOzsKIAkJaWYgKG4gPT0gbnJfYmhzKSB7Ci0JCQlpZiAoSVNfRElSU1lOQyhkaXIpKSB7Ci0JCQkJZXJyID0gZmF0X3N5bmNfYmhzKGJocywgbik7Ci0JCQkJaWYgKGVycikKLQkJCQkJZ290byBlcnJvcjsKLQkJCX0KIAkJCWZvciAoaSA9IDA7IGkgJmx0OyBuOyBpJiM0MzsmIzQzOykKIAkJCQlicmVsc2UoYmhzW2ldKTsKIAkJCW4gPSAwOwogCQl9CiAJfQotCWlmIChJU19ESVJTWU5DKGRpcikpIHsKLQkJZXJyID0gZmF0X3N5bmNfYmhzKGJocywgbik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycm9yOwotCX0KIAlmb3IgKGkgPSAwOyBpICZsdDsgbjsgaSYjNDM7JiM0MzspCiAJCWJyZWxzZShiaHNbaV0pOwogCmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmggYi9mcy9mYXQvZmF0LmgKaW5kZXggOTllZDkyMjhhNjc3YmUuLmRjYjViYTc1NzA3M2VkIDEwMDY0NAotLS0gYS9mcy9mYXQvZmF0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZhdC5oCkBAIC00MjEsNyAmIzQzOzQyMSw2IEBAIGV4dGVybiB2b2lkIGZhdF9kZXRhY2goc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gc3RydWN0IGlub2RlICpmYXRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb2ZmX3QgaV9wb3MpOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZmF0X2J1aWxkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQlzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSwgbG9mZl90IGlfcG9zKTsKLWV4dGVybiBpbnQgZmF0X3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gaW50IGZhdF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJCSAgdm9pZCAoKnNldHVwKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKikpOwogZXh0ZXJuIGludCBmYXRfZmlsbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSk7CmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuYwppbmRleCAzN2U3MDQ5YjRjOGM0NC4uMWM4MzVjYTVmMjFhNTEgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZpbGUuYwpAQCAtMTkwLDggJiM0MzsxOTAsNyBAQCBpbnQgZmF0X2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbHAsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKQogCXN0cnVjdCBpbm9kZSAqZmF0X2lub2RlID0gTVNET1NfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtmYXRfaW5vZGU7CiAJaW50IGVycjsKIAotCWVyciA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbHAsICZhbXA7TVNET1NfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzLAotCQkJCXN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKJiM0MzsJZXJyID0gc2ltcGxlX2ZzeW5jX25vZmx1c2goZmlscCwgc3RhcnQsIGVuZCwgZGF0YXN5bmMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTMzMiwxNSAmIzQzOzMzMSwxNSBAQCBzdGF0aWMgaW50IGZhdF9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBza2lwKQogCX0KIAlNU0RPU19JKGlub2RlKS0mZ3Q7aV9hdHRycyB8PSBBVFRSX0FSQ0g7CiAJZmF0X3RydW5jYXRlX3RpbWUoaW5vZGUsIE5VTEwsIEZBVF9VUERBVEVfQ01USU1FKTsKJiM0MzsJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJaWYgKHdhaXQpIHsKLQkJZXJyID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpOwomIzQzOwkJZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CiAJCWlmIChlcnIpIHsKIAkJCU1TRE9TX0koaW5vZGUpLSZndDtpX3N0YXJ0ID0gaV9zdGFydDsKIAkJCU1TRE9TX0koaW5vZGUpLSZndDtpX2xvZ3N0YXJ0ID0gaV9sb2dzdGFydDsKIAkJCXJldHVybiBlcnI7CiAJCX0KLQl9IGVsc2UKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CX0KIAogCS8qIFdyaXRlIGEgbmV3IEVPRiwgYW5kIGdldCB0aGUgcmVtYWluaW5nIGNsdXN0ZXIgY2hhaW4gZm9yIGZyZWVpbmcuICovCiAJaWYgKHNraXApIHsKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9pbm9kZS5jIGIvZnMvZmF0L2lub2RlLmMKaW5kZXggM2FhNTI0ODFhZDVjZjMuLmM0YjRjY2FhMDkxYWE3IDEwMDY0NAotLS0gYS9mcy9mYXQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvaW5vZGUuYwpAQCAtNjIzLDcgJiM0Mzs2MjMsMzcgQEAgc3RydWN0IGlub2RlICpmYXRfYnVpbGRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAogRVhQT1JUX1NZTUJPTF9HUEwoZmF0X2J1aWxkX2lub2RlKTsKIAotc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCk7CiYjNDM7c3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO3sKJiM0MzsJc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSA9IE1TRE9TX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKJiM0MzsJbG9mZl90IGlfcG9zOwomIzQzOwlzZWN0b3JfdCBibG9ja25yOwomIzQzOwlpbnQgb2Zmc2V0OwomIzQzOwomIzQzOwlpZiAoaW5vZGUtJmd0O2lfaW5vID09IE1TRE9TX1JPT1RfSU5PKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWlfcG9zID0gZmF0X2lfcG9zX3JlYWQoc2JpLCBpbm9kZSk7CiYjNDM7CWlmICghaV9wb3MpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZmF0X2dldF9ibGtucl9vZmZzZXQoc2JpLCBpX3BvcywgJmFtcDtibG9ja25yLCAmYW1wO29mZnNldCk7CiYjNDM7CWJoID0gc2JfZmluZF9nZXRfYmxvY2tfbm9uYXRvbWljKGlub2RlLSZndDtpX3NiLCBibG9ja25yKTsKJiM0MzsJLyoKJiM0MzsJICogQnVmZmVyIGFscmVhZHkgd3JpdHRlbj8gV2UgbGVhdmUgYnVmZmVyX2RpcnR5IGNoZWNrIGZvcgomIzQzOwkgKiBzeW5jX2RpcnR5X2J1ZmZlcigpIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGggb25nb2luZyBJTy4KJiM0MzsJICovCiYjNDM7CWlmICghYmggfHwgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKJiM0MzsJCWJyZWxzZShiaCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiYjNDM7CWJyZWxzZShiaCk7CiYjNDM7CXJldHVybiBtbWJfc3luYygmYW1wO01TRE9TX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7fQogCiBzdGF0aWMgdm9pZCBmYXRfZnJlZV9lb2ZibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIHsKQEAgLTY0MCw3ICYjNDM7NjcwLDEzIEBAIHN0YXRpYyB2b2lkIGZhdF9mcmVlX2VvZmJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQkgKiBhbnkgY29ycnVwdGlvbiBvbiB0aGUgbmV4dCBhY2Nlc3MgdG8gdGhlIGNsdXN0ZXIKIAkJICogY2hhaW4gZm9yIHRoZSBmaWxlLgogCQkgKi8KLQkJZXJyID0gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTsKJiM0MzsJCWVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlKTsKJiM0MzsJCWlmICghZXJyICZhbXA7JmFtcDsgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHsKJiM0MzsJCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewomIzQzOwkJCQkuc3luY19tb2RlID0gV0JfU1lOQ19BTEwsCiYjNDM7CQkJfTsKJiM0MzsJCQllcnIgPSBmYXRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgJmFtcDt3YmMpOwomIzQzOwkJfQogCQlpZiAoZXJyKSB7CiAJCQlmYXRfbXNnKGlub2RlLSZndDtpX3NiLCBLRVJOX1dBUk5JTkcsICYjMzQ7RmFpbGVkIHRvICYjMzQ7CiAJCQkJCSYjMzQ7dXBkYXRlIG9uIGRpc2sgaW5vZGUgZm9yIHVudXNlZCAmIzM0OwpAQCAtODU0LDcgJiM0Mzs4OTAsNyBAQCBzdGF0aWMgaW50IGZhdF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KQomIzQzO3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiAJc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSA9IE1TRE9TX1NCKHNiKTsKQEAgLTg2Myw3ICYjNDM7ODk5LDcgQEAgc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCkKIAlzdHJ1Y3QgdGltZXNwZWM2NCBtdGltZTsKIAlsb2ZmX3QgaV9wb3M7CiAJc2VjdG9yX3QgYmxvY2tucjsKLQlpbnQgZXJyLCBvZmZzZXQ7CiYjNDM7CWludCBvZmZzZXQ7CiAKIAlpZiAoaW5vZGUtJmd0O2lfaW5vID09IE1TRE9TX1JPT1RfSU5PKQogCQlyZXR1cm4gMDsKQEAgLTkwNywxMSAmIzQzOzk0Myw5IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpCiAJfQogCXNwaW5fdW5sb2NrKCZhbXA7c2JpLSZndDtpbm9kZV9oYXNoX2xvY2spOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQllcnIgPSAwOwotCWlmICh3YWl0KQotCQllcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJYnJlbHNlKGJoKTsKLQlyZXR1cm4gZXJyOwomIzQzOwlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQpAQCAtOTI1LDIzICYjNDM7OTU5LDE3IEBAIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCQllcnIgPSBmYXRfY2x1c3RlcnNfZmx1c2goc2IpOwogCQltdXRleF91bmxvY2soJmFtcDtNU0RPU19TQihzYiktJmd0O3NfbG9jayk7CiAJfSBlbHNlCi0JCWVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCB3YmMtJmd0O3N5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7CiYjNDM7CQllcnIgPSBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgZmF0X3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlyZXR1cm4gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUsIDEpOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChmYXRfc3luY19pbm9kZSk7Ci0KIHN0YXRpYyBpbnQgZmF0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGZhdF9zb3BzID0gewogCS5hbGxvY19pbm9kZQk9IGZhdF9hbGxvY19pbm9kZSwKIAkuZnJlZV9pbm9kZQk9IGZhdF9mcmVlX2lub2RlLAogCS53cml0ZV9pbm9kZQk9IGZhdF93cml0ZV9pbm9kZSwKJiM0MzsJLnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBmYXRfc3luY19pbm9kZV9tZXRhZGF0YSwKIAkuZXZpY3RfaW5vZGUJPSBmYXRfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IGZhdF9wdXRfc3VwZXIsCiAJLnN0YXRmcwkJPSBmYXRfc3RhdGZzLApkaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmMKaW5kZXggMzAyN2VmNTNhZjIxNGMuLmJlMThmNmI1ODE5YmE3IDEwMDY0NAotLS0gYS9mcy9mYXQvbWlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9taXNjLmMKQEAgLTE0NiwxNiAmIzQzOzE0NiwxNyBAQCBpbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3RlcikKIAl9IGVsc2UgewogCQlNU0RPU19JKGlub2RlKS0mZ3Q7aV9zdGFydCA9IG5ld19kY2x1czsKIAkJTVNET1NfSShpbm9kZSktJmd0O2lfbG9nc3RhcnQgPSBuZXdfZGNsdXM7CiYjNDM7CQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAkJLyoKIAkJICogU2luY2UgZ2VuZXJpY193cml0ZV9zeW5jKCkgc3luY2hyb25pemVzIHJlZ3VsYXIgZmlsZXMgbGF0ZXIsCiAJCSAqIHdlIHN5bmMgaGVyZSBvbmx5IGRpcmVjdG9yaWVzLgogCQkgKi8KIAkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkgJmFtcDsmYW1wOyBJU19ESVJTWU5DKGlub2RlKSkgewotCQkJcmV0ID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpOwomIzQzOwkJCXJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwotCQl9IGVsc2UKLQkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwkJfQomIzQzOwogCX0KIAlpZiAobmV3X2ZjbHVzICE9IChpbm9kZS0mZ3Q7aV9ibG9ja3MgJmd0OyZndDsgKHNiaS0mZ3Q7Y2x1c3Rlcl9iaXRzIC0gOSkpKSB7CiAJCWZhdF9mc19lcnJvcl9yYXRlbGltaXQoCmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfbXNkb3MuYyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jCmluZGV4IDBmZDI5NzFhZDRiMTMxLi40NzJiZDg0N2VmOWNiYiAxMDA2NDQKLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX21zZG9zLmMKQEAgLTI1MiwxMCAmIzQzOzI1Miw5IEBAIHN0YXRpYyBpbnQgbXNkb3NfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAogCQlyZXR1cm4gZXJyOwogCiAJZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGRpcik7CiAJaWYgKElTX0RJUlNZTkMoZGlyKSkKLQkJKHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTsKLQllbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKJiM0MzsJCXN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDczLDIxICYjNDM7NDcyLDIxIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsCiAJCQkJTVNET1NfSShvbGRfaW5vZGUpLSZndDtpX2F0dHJzIHw9IEFUVFJfSElEREVOOwogCQkJZWxzZQogCQkJCU1TRE9TX0kob2xkX2lub2RlKS0mZ3Q7aV9hdHRycyAmYW1wOz0gfkFUVFJfSElEREVOOwomIzQzOwkJCW1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTsKIAkJCWlmIChJU19ESVJTWU5DKG9sZF9kaXIpKSB7Ci0JCQkJZXJyID0gZmF0X3N5bmNfaW5vZGUob2xkX2lub2RlKTsKJiM0MzsJCQkJZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShvbGRfaW5vZGUsIDEpOwogCQkJCWlmIChlcnIpIHsKIAkJCQkJTVNET1NfSShvbGRfaW5vZGUpLSZndDtpX2F0dHJzID0gb2xkX2F0dHJzOwogCQkJCQlnb3RvIG91dDsKIAkJCQl9Ci0JCQl9IGVsc2UKLQkJCQltYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7CiYjNDM7CQkJfQogCiAJCQlpbm9kZV9pbmNfaXZlcnNpb24ob2xkX2Rpcik7CiAJCQlmYXRfdHJ1bmNhdGVfdGltZShvbGRfZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0NNVElNRSk7CiYjNDM7CQkJbWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTsKIAkJCWlmIChJU19ESVJTWU5DKG9sZF9kaXIpKQotCQkJCSh2b2lkKWZhdF9zeW5jX2lub2RlKG9sZF9kaXIpOwomIzQzOwkJCQlzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9kaXIsIDEpOwogCQkJZWxzZQotCQkJCW1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTUxOCwyNiAmIzQzOzUxNywyMSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLAogCQlNU0RPU19JKG9sZF9pbm9kZSktJmd0O2lfYXR0cnMgfD0gQVRUUl9ISURERU47CiAJZWxzZQogCQlNU0RPU19JKG9sZF9pbm9kZSktJmd0O2lfYXR0cnMgJmFtcDs9IH5BVFRSX0hJRERFTjsKLQlpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkgewotCQllcnIgPSBmYXRfc3luY19pbm9kZShvbGRfaW5vZGUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJvcl9pbm9kZTsKLQl9IGVsc2UKLQkJbWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpOwotCiAJaWYgKHVwZGF0ZV9kb3Rkb3QpIHsKIAkJZmF0X3NldF9zdGFydChkb3Rkb3RfZGUsIE1TRE9TX0kobmV3X2RpciktJmd0O2lfbG9nc3RhcnQpOwogCQltbWJfbWFya19idWZmZXJfZGlydHkoZG90ZG90X2JoLAogCQkJCSAgICAgICZhbXA7TVNET1NfSShvbGRfaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JCWlmIChJU19ESVJTWU5DKG5ld19kaXIpKSB7Ci0JCQllcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihkb3Rkb3RfYmgpOwotCQkJaWYgKGVycikKLQkJCQlnb3RvIGVycm9yX2RvdGRvdDsKLQkJfQogCQlkcm9wX25saW5rKG9sZF9kaXIpOwogCQlpZiAoIW5ld19pbm9kZSkKIAkJCWluY19ubGluayhuZXdfZGlyKTsKIAl9CiYjNDM7CW1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTsKJiM0MzsJaWYgKElTX0RJUlNZTkMobmV3X2RpcikpIHsKJiM0MzsJCWVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2lub2RlLCAxKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJvcl9kb3Rkb3Q7CiYjNDM7CX0KJiM0MzsKIAogCWVyciA9IGZhdF9yZW1vdmVfZW50cmllcyhvbGRfZGlyLCAmYW1wO29sZF9zaW5mbyk7CS8qIGFuZCByZWxlYXNlcyBiaCAqLwogCW9sZF9zaW5mby5iaCA9IE5VTEw7CkBAIC01NDUsMTAgJiM0Mzs1MzksOSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLAogCQlnb3RvIGVycm9yX2RvdGRvdDsKIAlpbm9kZV9pbmNfaXZlcnNpb24ob2xkX2Rpcik7CiAJZmF0X3RydW5jYXRlX3RpbWUob2xkX2RpciwgJmFtcDt0cywgRkFUX1VQREFURV9DTVRJTUUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpOwogCWlmIChJU19ESVJTWU5DKG9sZF9kaXIpKQotCQkodm9pZClmYXRfc3luY19pbm9kZShvbGRfZGlyKTsKLQllbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7CiYjNDM7CQlzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9kaXIsIDEpOwogCiAJaWYgKG5ld19pbm9kZSkgewogCQlkcm9wX25saW5rKG5ld19pbm9kZSk7CkBAIC01NzEsMTQgJiM0Mzs1NjQsMTMgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSwKIAkJCQkgICAgICAmYW1wO01TRE9TX0kob2xkX2lub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwogCQljb3JydXB0IHw9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7CiAJfQotZXJyb3JfaW5vZGU6CiAJZmF0X2RldGFjaChvbGRfaW5vZGUpOwogCWZhdF9hdHRhY2gob2xkX2lub2RlLCBvbGRfc2luZm8uaV9wb3MpOwogCU1TRE9TX0kob2xkX2lub2RlKS0mZ3Q7aV9hdHRycyA9IG9sZF9hdHRyczsKIAlpZiAobmV3X2lub2RlKSB7CiAJCWZhdF9hdHRhY2gobmV3X2lub2RlLCBuZXdfaV9wb3MpOwogCQlpZiAoY29ycnVwdCkKLQkJCWNvcnJ1cHQgfD0gZmF0X3N5bmNfaW5vZGUobmV3X2lub2RlKTsKJiM0MzsJCQljb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBJZiBuZXcgZW50cnkgd2FzIG5vdCBzaGFyaW5nIHRoZSBkYXRhIGNsdXN0ZXIsIGl0CmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuYwppbmRleCBlOTA5NDQ3ODczZTM2NC4uNzMyYWJmMDcyZmRkM2IgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX3ZmYXQuYwpAQCAtNjc4LDEwICYjNDM7Njc4LDkgQEAgc3RhdGljIGludCB2ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFuYW1lLAogCiAJLyogdXBkYXRlIHRpbWVzdGFtcCAqLwogCWZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTsKJiM0MzsJbWFya19pbm9kZV9kaXJ0eShkaXIpOwogCWlmIChJU19ESVJTWU5DKGRpcikpCi0JCSh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7Ci0JZWxzZQotCQltYXJrX2lub2RlX2RpcnR5KGRpcik7CiYjNDM7CQlzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7CiBjbGVhbnVwOgogCWtmcmVlKHNsb3RzKTsKIAlyZXR1cm4gZXJyOwpAQCAtOTA0LDkgJiM0Mzs5MDMsOSBAQCBzdGF0aWMgaW50IHZmYXRfZ2V0X2RvdGRvdF9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCwKIAogc3RhdGljIGludCB2ZmF0X3N5bmNfaXBvcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpZiAoSVNfRElSU1lOQyhkaXIpKQotCQlyZXR1cm4gZmF0X3N5bmNfaW5vZGUoaW5vZGUpOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwlpZiAoSVNfRElSU1lOQyhkaXIpKQomIzQzOwkJcmV0dXJuIHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpOwogCXJldHVybiAwOwogfQogCkBAIC05MjUsMTAgJiM0Mzs5MjQsOSBAQCBzdGF0aWMgdm9pZCB2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKIAlpbm9kZV9pbmNfaXZlcnNpb24oZGlyKTsKIAlmYXRfdHJ1bmNhdGVfdGltZShkaXIsIHRzLCBGQVRfVVBEQVRFX0NNVElNRSk7CiYjNDM7CW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKIAlpZiAoSVNfRElSU1lOQyhkaXIpKQotCQkodm9pZClmYXRfc3luY19pbm9kZShkaXIpOwotCWVsc2UKLQkJbWFya19pbm9kZV9kaXJ0eShkaXIpOwomIzQzOwkJc3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpOwogfQogCiBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKQEAgLTEwMjUsNyAmIzQzOzEwMjMsNyBAQCBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAlpZiAobmV3X2lub2RlKSB7CiAJCWZhdF9hdHRhY2gobmV3X2lub2RlLCBuZXdfaV9wb3MpOwogCQlpZiAoY29ycnVwdCkKLQkJCWNvcnJ1cHQgfD0gZmF0X3N5bmNfaW5vZGUobmV3X2lub2RlKTsKJiM0MzsJCQljb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBJZiBuZXcgZW50cnkgd2FzIG5vdCBzaGFyaW5nIHRoZSBkYXRhIGNsdXN0ZXIsIGl0CmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IGZkYjg3NjZkMjc1YTE3Li45ZDk2MzU3NzMxYTNkNCAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTE4NTEsNiAmIzQzOzE4NTEsMjIgQEAgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCQlpZiAocmV0ID09IDApCiAJCQlyZXQgPSBlcnI7CiAJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPIHBvc3NpYmx5IHN1Ym1pdHRlZAomIzQzOwkgKiBieSBwcmV2aW91cyBXQl9TWU5DX05PTkUgd3JpdGViYWNrPwomIzQzOwkgKi8KJiM0MzsJaWYgKHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfQUxMICZhbXA7JmFtcDsgIXdiYy0mZ3Q7Zm9yX3N5bmMgJmFtcDsmYW1wOwomIzQzOwkgICAgaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX01FVEFEQVRBX1dSSVRFQkFDSykgewomIzQzOwkJaW50IGVycjsKJiM0MzsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwomIzQzOwkJaW5vZGVfc3RhdGVfY2xlYXIoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7CiYjNDM7CQllcnIgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19vcC0mZ3Q7c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgd2JjKTsKJiM0MzsJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CX0KIAl3YmMtJmd0O3VucGlubmVkX25ldGZzX3diID0gZmFsc2U7CiAJdHJhY2Vfd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjLCBucl90b193cml0ZSk7CiAJcmV0dXJuIHJldDsKQEAgLTE4OTIsMTQgJiM0MzsxOTA4LDE3IEBAIHN0YXRpYyBpbnQgd3JpdGViYWNrX3NpbmdsZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCS8qCiAJICogSWYgdGhlIGlub2RlIGlzIGFscmVhZHkgZnVsbHkgY2xlYW4sIHRoZW4gdGhlcmUmIzM5O3Mgbm90aGluZyB0byBkby4KIAkgKgotCSAqIEZvciBkYXRhLWludGVncml0eSBzeW5jcyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgcGFnZXMgYXJlCi0JICogc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkUgd3JpdGViYWNrLiAgSWYKLQkgKiB0aGVyZSBhcmUgYW55IHN1Y2ggcGFnZXMsIHdlJiMzOTtsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uCiYjNDM7CSAqIEZvciBkYXRhLWludGVncml0eSBzeW5jcyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZm9saW9zIG9yCiYjNDM7CSAqIG1ldGFkYXRhIGFyZSBzdGlsbCB1bmRlciB3cml0ZWJhY2ssIGUuZy4gZHVlIHRvIHByaW9yIFdCX1NZTkNfTk9ORQomIzQzOwkgKiB3cml0ZWJhY2suIElmIHRoZXJlLCB3ZSYjMzk7bGwgbmVlZCB0byB3YWl0IGZvciB0aGVtLgogCSAqLwotCWlmICghKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpICZhbXA7IElfRElSVFlfQUxMKSAmYW1wOyZhbXA7Ci0JICAgICh3YmMtJmd0O3N5bmNfbW9kZSAhPSBXQl9TWU5DX0FMTCB8fAotCSAgICAgIW1hcHBpbmdfdGFnZ2VkKGlub2RlLSZndDtpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSkpCi0JCWdvdG8gb3V0OwomIzQzOwlpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSAmYW1wOyBJX0RJUlRZX0FMTCkpIHsKJiM0MzsJCWlmICh3YmMtJmd0O3N5bmNfbW9kZSAhPSBXQl9TWU5DX0FMTCkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCWlmICghbWFwcGluZ190YWdnZWQoaW5vZGUtJmd0O2lfbWFwcGluZywgUEFHRUNBQ0hFX1RBR19XUklURUJBQ0spICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpICZhbXA7IElfTUVUQURBVEFfV1JJVEVCQUNLKSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQogCWlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9TWU5DKTsKIAl3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUod2JjLCBpbm9kZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2xpYmZzLmMgYi9mcy9saWJmcy5jCmluZGV4IDVhMGQyNzYzNzlkMTNiLi41N2U1OTcxYjYzMzE5NyAxMDA2NDQKLS0tIGEvZnMvbGliZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9saWJmcy5jCkBAIC0xNTU5LDkgJiM0MzsxNTU5LDEwIEBAIGludCBzaW1wbGVfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpICZhbXA7IElfRElSVFlfQUxMKSkKJiM0MzsJaWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyAoSV9ESVJUWV9BTEwgfCBJX1NZTkMpKSkKIAkJZ290byBvdXQ7Ci0JaWYgKGRhdGFzeW5jICZhbXA7JmFtcDsgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpICZhbXA7IElfRElSVFlfREFUQVNZTkMpKQomIzQzOwlpZiAoZGF0YXN5bmMgJmFtcDsmYW1wOwomIzQzOwkgICAgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpICZhbXA7IChJX0RJUlRZX0RBVEFTWU5DIHwgSV9TWU5DKSkpCiAJCWdvdG8gb3V0OwogCiAJcmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CmRpZmYgLS1naXQgYS9mcy9taW5peC9kaXIuYyBiL2ZzL21pbml4L2Rpci5jCmluZGV4IDM2MWQyNmQ4N2QyZTJkLi4yY2ExNmY4NDlkNWFjMCAxMDA2NDQKLS0tIGEvZnMvbWluaXgvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvZGlyLmMKQEAgLTIzLDcgJiM0MzsyMyw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZGlyX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLml0ZXJhdGVfc2hhcmVkCT0gbWluaXhfcmVhZGRpciwKLQkuZnN5bmMJCT0gbWluaXhfZnN5bmMsCiYjNDM7CS5mc3luYwkJPSBzaW1wbGVfZnN5bmMsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jCmluZGV4IDg2ZTU5NDNjZDJmZjc0Li4wMmFhYmJkYjVkZWFhMCAxMDA2NDQKLS0tIGEvZnMvbWluaXgvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2ZpbGUuYwpAQCAtMTAsMTMgJiM0MzsxMCw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYnVmZmVyX2hlYWQuaCZndDsKICNpbmNsdWRlICYjMzQ7bWluaXguaCYjMzQ7CiAKLWludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCi17Ci0JcmV0dXJuIG1tYl9mc3luYyhmaWxlLAotCQkJJmFtcDttaW5peF9pKGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdCktJmd0O2lfbWV0YWRhdGFfYmhzLAotCQkJc3RhcnQsIGVuZCwgZGF0YXN5bmMpOwotfQotCiAvKgogICogV2UgaGF2ZSBtb3N0bHkgTlVMTHMgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIE9LIGZvcgogICogdGhlIG1pbml4IGZpbGVzeXN0ZW0uCkBAIC0yNiw3ICYjNDM7MTksNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZF9pdGVyCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKIAkud3JpdGVfaXRlcgk9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLAogCS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAotCS5mc3luYwkJPSBtaW5peF9mc3luYywKJiM0MzsJLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKIAkuc3BsaWNlX3JlYWQJPSBmaWxlbWFwX3NwbGljZV9yZWFkLAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmMKaW5kZXggYzMwY2M1OTA2OThkNmYuLjk1MjY3ZDkzZWYzOWRmIDEwMDY0NAotLS0gYS9mcy9taW5peC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lub2RlLmMKQEAgLTI0LDYgJiM0MzsyNCw4IEBACiAKIHN0YXRpYyBpbnQgbWluaXhfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwKIAkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwomIzQzO3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7CiAKIHZvaWQgX19taW5peF9lcnJvcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpmdW5jdGlvbiwKQEAgLTEyOCw2ICYjNDM7MTMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1pbml4X3NvcHMgPSB7CiAJLmFsbG9jX2lub2RlCT0gbWluaXhfYWxsb2NfaW5vZGUsCiAJLmZyZWVfaW5vZGUJPSBtaW5peF9mcmVlX2luX2NvcmVfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gbWluaXhfd3JpdGVfaW5vZGUsCiYjNDM7CS5zeW5jX2lub2RlX21ldGFkYXRhID0gbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSwKIAkuZXZpY3RfaW5vZGUJPSBtaW5peF9ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCT0gbWluaXhfcHV0X3N1cGVyLAogCS5zdGF0ZnMJCT0gbWluaXhfc3RhdGZzLApAQCAtNjMwLDcgJiM0Mzs2MzMsNyBAQCBzdHJ1Y3QgaW5vZGUgKm1pbml4X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pCiAvKgogICogVGhlIG1pbml4IFYxIGZ1bmN0aW9uIHRvIHN5bmNocm9uaXplIGFuIGlub2RlLgogICovCi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQomIzQzO3N0YXRpYyBpbnQgVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJoOwogCXN0cnVjdCBtaW5peF9pbm9kZSAqIHJhd19pbm9kZTsKQEAgLTYzOSw3ICYjNDM7NjQyLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYxX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAogCXJhd19pbm9kZSA9IG1pbml4X1YxX3Jhd19pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgaW5vZGUtJmd0O2lfaW5vLCAmYW1wO2JoKTsKIAlpZiAoIXJhd19pbm9kZSkKLQkJcmV0dXJuIE5VTEw7CiYjNDM7CQlyZXR1cm4gLUVJTzsKIAlyYXdfaW5vZGUtJmd0O2lfbW9kZSA9IGlub2RlLSZndDtpX21vZGU7CiAJcmF3X2lub2RlLSZndDtpX3VpZCA9IGZzX2hpZ2gybG93dWlkKGlfdWlkX3JlYWQoaW5vZGUpKTsKIAlyYXdfaW5vZGUtJmd0O2lfZ2lkID0gZnNfaGlnaDJsb3dnaWQoaV9naWRfcmVhZChpbm9kZSkpOwpAQCAtNjUxLDEzICYjNDM7NjU0LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiAJZWxzZSBmb3IgKGkgPSAwOyBpICZsdDsgOTsgaSYjNDM7JiM0MzspCiAJCXJhd19pbm9kZS0mZ3Q7aV96b25lW2ldID0gbWluaXhfaW5vZGUtJmd0O3UuaTFfZGF0YVtpXTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JcmV0dXJuIGJoOwomIzQzOwlicmVsc2UoYmgpOwomIzQzOwlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBUaGUgbWluaXggVjIgZnVuY3Rpb24gdG8gc3luY2hyb25pemUgYW4gaW5vZGUuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiYjNDM7c3RhdGljIGludCBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICogYmg7CiAJc3RydWN0IG1pbml4Ml9pbm9kZSAqIHJhd19pbm9kZTsKQEAgLTY2Niw3ICYjNDM7NjcxLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAogCXJhd19pbm9kZSA9IG1pbml4X1YyX3Jhd19pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgaW5vZGUtJmd0O2lfaW5vLCAmYW1wO2JoKTsKIAlpZiAoIXJhd19pbm9kZSkKLQkJcmV0dXJuIE5VTEw7CiYjNDM7CQlyZXR1cm4gLUVJTzsKIAlyYXdfaW5vZGUtJmd0O2lfbW9kZSA9IGlub2RlLSZndDtpX21vZGU7CiAJcmF3X2lub2RlLSZndDtpX3VpZCA9IGZzX2hpZ2gybG93dWlkKGlfdWlkX3JlYWQoaW5vZGUpKTsKIAlyYXdfaW5vZGUtJmd0O2lfZ2lkID0gZnNfaGlnaDJsb3dnaWQoaV9naWRfcmVhZChpbm9kZSkpOwpAQCAtNjgwLDI5ICYjNDM7Njg1LDQwIEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiAJZWxzZSBmb3IgKGkgPSAwOyBpICZsdDsgMTA7IGkmIzQzOyYjNDM7KQogCQlyYXdfaW5vZGUtJmd0O2lfem9uZVtpXSA9IG1pbml4X2lub2RlLSZndDt1LmkyX2RhdGFbaV07CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwotCXJldHVybiBiaDsKJiM0MzsJYnJlbHNlKGJoKTsKJiM0MzsJc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO3sKJiM0MzsJaWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKQomIzQzOwkJcmV0dXJuIFYxX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7CiYjNDM7CXJldHVybiBWMl9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwomIzQzOwl2b2lkICpyYXdfaW5vZGU7CiAKIAlpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpCi0JCWJoID0gVjFfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTsKJiM0MzsJCXJhd19pbm9kZSA9IG1pbml4X1YxX3Jhd19pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgaW5vZGUtJmd0O2lfaW5vLCAmYW1wO2JoKTsKIAllbHNlCi0JCWJoID0gVjJfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTsKLQlpZiAoIWJoKQomIzQzOwkJcmF3X2lub2RlID0gbWluaXhfVjJfcmF3X2lub2RlKGlub2RlLSZndDtpX3NiLCBpbm9kZS0mZ3Q7aV9pbm8sICZhbXA7YmgpOwomIzQzOwlpZiAoIXJhd19pbm9kZSkKIAkJcmV0dXJuIC1FSU87Ci0JaWYgKHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfQUxMICZhbXA7JmFtcDsgYnVmZmVyX2RpcnR5KGJoKSkgewotCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7Ci0JCWlmIChidWZmZXJfcmVxKGJoKSAmYW1wOyZhbXA7ICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7Ci0JCQlwcmludGsoJiMzNDtJTyBlcnJvciBzeW5jaW5nIG1pbml4IGlub2RlIFslczolMDhsbHhdXG4mIzM0OywKLQkJCQlpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19pZCwgaW5vZGUtJmd0O2lfaW5vKTsKLQkJCWVyciA9IC1FSU87Ci0JCX0KJiM0MzsJc3luY19kaXJ0eV9idWZmZXIoYmgpOwomIzQzOwlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkgewomIzQzOwkJcHJpbnRrKCYjMzQ7SU8gZXJyb3Igc3luY2luZyBtaW5peCBpbm9kZSBbJXM6JTA4bGx4XVxuJiMzNDssCiYjNDM7CQkJaW5vZGUtJmd0O2lfc2ItJmd0O3NfaWQsIGlub2RlLSZndDtpX2lubyk7CiYjNDM7CQllcnIgPSAtRUlPOwogCX0KLQlicmVsc2UgKGJoKTsKJiM0MzsJZXJyID0gbW1iX3N5bmMoJmFtcDttaW5peF9pKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzO291dDoKJiM0MzsJYnJlbHNlKGJoKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy91ZGYvZGlyLmMgYi9mcy91ZGYvZGlyLmMKaW5kZXggZWJjOWY2YTM3OWZlM2EuLjQyNWUzYzE2MjkzNTA0IDEwMDY0NAotLS0gYS9mcy91ZGYvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWRmL2Rpci5jCkBAIC0xNTcsNiAmIzQzOzE1Nyw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2Rpcl9vcGVyYXRpb25zID0gewogCS5yZWFkCQkJPSBnZW5lcmljX3JlYWRfZGlyLAogCS5pdGVyYXRlX3NoYXJlZAkJPSB1ZGZfcmVhZGRpciwKIAkudW5sb2NrZWRfaW9jdGwJCT0gdWRmX2lvY3RsLAotCS5mc3luYwkJCT0gdWRmX2ZzeW5jLAomIzQzOwkuZnN5bmMJCQk9IHNpbXBsZV9mc3luYywKIAkuc2V0bGVhc2UJCT0gZ2VuZXJpY19zZXRsZWFzZSwKIH07CmRpZmYgLS1naXQgYS9mcy91ZGYvZmlsZS5jIGIvZnMvdWRmL2ZpbGUuYwppbmRleCBmN2YxNDIyZGUzMGZhNC4uNTdkMTE2MDZhMmE3NzYgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWRmL2ZpbGUuYwpAQCAtMTk4LDEzICYjNDM7MTk4LDYgQEAgc3RhdGljIGludCB1ZGZfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlyZXR1cm4gMDsKIH0KIAotaW50IHVkZl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCi17Ci0JcmV0dXJuIG1tYl9mc3luYyhmaWxlLAotCQkJJmFtcDtVREZfSShmaWxlLSZndDtmX21hcHBpbmctJmd0O2hvc3QpLSZndDtpX21ldGFkYXRhX2JocywKLQkJCXN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKLX0KLQogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZmlsZV9vcGVyYXRpb25zID0gewogCS5yZWFkX2l0ZXIJCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKIAkudW5sb2NrZWRfaW9jdGwJCT0gdWRmX2lvY3RsLApAQCAtMjEyLDcgJiM0MzsyMDUsNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9maWxlX29wZXJhdGlvbnMgPSB7CiAJLm1tYXAJCQk9IHVkZl9maWxlX21tYXAsCiAJLndyaXRlX2l0ZXIJCT0gdWRmX2ZpbGVfd3JpdGVfaXRlciwKIAkucmVsZWFzZQkJPSB1ZGZfcmVsZWFzZV9maWxlLAotCS5mc3luYwkJCT0gdWRmX2ZzeW5jLAomIzQzOwkuZnN5bmMJCQk9IHNpbXBsZV9mc3luYywKIAkuc3BsaWNlX3JlYWQJCT0gZmlsZW1hcF9zcGxpY2VfcmVhZCwKIAkuc3BsaWNlX3dyaXRlCQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCiAJLmxsc2VlawkJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKQEAgLTI1Myw2ICYjNDM7MjQ2LDggQEAgc3RhdGljIGludCB1ZGZfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCiAJc2V0YXR0cl9jb3B5KCZhbXA7bm9wX21udF9pZG1hcCwgaW5vZGUsIGF0dHIpOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwlpZiAoSVNfU1lOQyhpbm9kZSkpCiYjNDM7CQlzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuYwppbmRleCA2N2JjZjgzNzU4YzhmYi4uZDk5MWE2NzFjMGE2OTEgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9pbm9kZS5jCkBAIC01MSw4ICYjNDM7NTEsNiBAQAogc3RydWN0IHVkZl9tYXBfcnE7CiAKIHN0YXRpYyB1bW9kZV90IHVkZl9jb252ZXJ0X3Blcm1pc3Npb25zKHN0cnVjdCBmaWxlRW50cnkgKik7Ci1zdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICosIGludCk7Ci1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogc3RhdGljIGludCB1ZGZfYWxsb2NfaV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCBzaXplKTsKIHN0YXRpYyBpbnQgaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB1ZGZfbWFwX3JxICptYXApOwogc3RhdGljIGludCB1ZGZfaW5zZXJ0X2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24sCkBAIC0xNDIsNyAmIzQzOzE0MCw5IEBAIHZvaWQgdWRmX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCWlmICghaW5vZGUtJmd0O2lfbmxpbmspIHsKIAkJCXdhbnRfZGVsZXRlID0gMTsKIAkJCXVkZl9zZXRzaXplKGlub2RlLCAwKTsKLQkJCXVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIElTX1NZTkMoaW5vZGUpKTsKJiM0MzsJCQl1ZGZfd3JpdGVfaW5vZGUoaW5vZGUsIE5VTEwpOwomIzQzOwkJCWlmIChJU19TWU5DKGlub2RlKSkKJiM0MzsJCQkJdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIE5VTEwpOwogCQl9CiAJCWlmIChpaW5mby0mZ3Q7aV9hbGxvY190eXBlICE9IElDQlRBR19GTEFHX0FEX0lOX0lDQiAmYW1wOyZhbXA7CiAJCSAgICBpbm9kZS0mZ3Q7aV9zaXplICE9IGlpbmZvLSZndDtpX2xlbkV4dGVudHMpIHsKQEAgLTkzNiw5ICYjNDM7OTM2LDEwIEBAIHN0YXRpYyBpbnQgaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB1ZGZfbWFwX3JxICptYXApCiAJaWluZm8tJmd0O2lfbmV4dF9hbGxvY19nb2FsID0gbmV3YmxvY2tudW0gJiM0MzsgMTsKIAlpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSk7CiAKLQlpZiAoSVNfU1lOQyhpbm9kZSkpCi0JCXVkZl9zeW5jX2lub2RlKGlub2RlKTsKLQllbHNlCiYjNDM7CWlmIChJU19TWU5DKGlub2RlKSkgewomIzQzOwkJdWRmX3dyaXRlX2lub2RlKGlub2RlLCBOVUxMKTsKJiM0MzsJCXVkZl9zeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCBOVUxMKTsKJiM0MzsJfSBlbHNlCiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCXJldCA9IDA7CiBvdXRfZnJlZToKQEAgLTEzMjYsMTAgJiM0MzsxMzI3LDcgQEAgaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKQogCX0KIHVwZGF0ZV90aW1lOgogCWlub2RlX3NldF9tdGltZV90b190cyhpbm9kZSwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpKTsKLQlpZiAoSVNfU1lOQyhpbm9kZSkpCi0JCXVkZl9zeW5jX2lub2RlKGlub2RlKTsKLQllbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNzA1LDE0ICYjNDM7MTcwMywyOCBAQCB2b2lkIHVkZl91cGRhdGVfZXh0cmFfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSwgdW1vZGVfdCBtb2RlKQogCQlpaW5mby0mZ3Q7aV9leHRyYVBlcm1zIHw9IEZFX1BFUk1fT19ERUxFVEU7CiB9CiAKLWludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7aW50IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewotCXJldHVybiB1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCB3YmMtJmd0O3N5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7Ci19CiYjNDM7CXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiYjNDM7CWludCBlcnIgPSAwOwogCi1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JcmV0dXJuIHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIDEpOwomIzQzOwliaCA9IHNiX2dldGJsayhpbm9kZS0mZ3Q7aV9zYiwKJiM0MzsJCQl1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0mZ3Q7aV9zYiwKJiM0MzsJCQkJCSAgJmFtcDtVREZfSShpbm9kZSktJmd0O2lfbG9jYXRpb24sIDApKTsKJiM0MzsJaWYgKCFiaCkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiYjNDM7CWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7CiYjNDM7CQl1ZGZfd2Fybihpbm9kZS0mZ3Q7aV9zYiwgJiMzNDtJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxuJiMzNDssCiYjNDM7CQkJIGlub2RlLSZndDtpX2lubyk7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZXJyID0gbW1iX3N5bmMoJmFtcDtVREZfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MztvdXQ6CiYjNDM7CWJyZWxzZShiaCk7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIHVkZl9hZGp1c3RfdGltZShzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvLCBzdHJ1Y3QgdGltZXNwZWM2NCB0aW1lKQpAQCAtMTcyMyw3ICYjNDM7MTczNSw3IEBAIHN0YXRpYyB2b2lkIHVkZl9hZGp1c3RfdGltZShzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvLCBzdHJ1Y3QgdGltZXNwZWM2NCB0aW1lCiAJCWlpbmZvLSZndDtpX2NydGltZSA9IHRpbWU7CiB9CiAKLXN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYykKJiM0MztpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCXN0cnVjdCBmaWxlRW50cnkgKmZlOwpAQCAtMTczMiw3ICYjNDM7MTc0NCw2IEBAIHN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYykKIAl1aW50MzJfdCB1ZGZwZXJtczsKIAl1aW50MTZfdCBpY2JmbGFnczsKIAl1aW50MTZfdCBjcmNsZW47Ci0JaW50IGVyciA9IDA7CiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtJmd0O2lfc2IpOwogCXVuc2lnbmVkIGNoYXIgYmxvY2tzaXplX2JpdHMgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemVfYml0czsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpOwpAQCAtMTkzNywxNyAmIzQzOzE5NDgsMTAgQEAgc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKQogCiAJLyogd3JpdGUgdGhlIGRhdGEgYmxvY2tzICovCiAJbWFya19idWZmZXJfZGlydHkoYmgpOwotCWlmIChkb19zeW5jKSB7Ci0JCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKLQkJaWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHsKLQkJCXVkZl93YXJuKGlub2RlLSZndDtpX3NiLCAmIzM0O0lPIGVycm9yIHN5bmNpbmcgdWRmIGlub2RlIFslMDhsbHhdXG4mIzM0OywKLQkJCQkgaW5vZGUtJmd0O2lfaW5vKTsKLQkJCWVyciA9IC1FSU87Ci0JCX0KLQl9CiAJYnJlbHNlKGJoKTsKJiM0MzsJc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7CiAKLQlyZXR1cm4gZXJyOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IGlub2RlICpfX3VkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqaW5vLApkaWZmIC0tZ2l0IGEvZnMvdWRmL3N1cGVyLmMgYi9mcy91ZGYvc3VwZXIuYwppbmRleCA3Yjg1ZjVhMmI3OWZjNC4uZTdlOWYyYTBkMjRlODAgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9zdXBlci5jCkBAIC0yMTEsNiAmIzQzOzIxMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB1ZGZfc2Jfb3BzID0gewogCS5hbGxvY19pbm9kZQk9IHVkZl9hbGxvY19pbm9kZSwKIAkuZnJlZV9pbm9kZQk9IHVkZl9mcmVlX2luX2NvcmVfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gdWRmX3dyaXRlX2lub2RlLAomIzQzOwkuc3luY19pbm9kZV9tZXRhZGF0YSA9IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhLAogCS5ldmljdF9pbm9kZQk9IHVkZl9ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCT0gdWRmX3B1dF9zdXBlciwKIAkuc3luY19mcwk9IHVkZl9zeW5jX2ZzLApkaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZmRlY2wuaCBiL2ZzL3VkZi91ZGZkZWNsLmgKaW5kZXggNmQ5NTFlMDVjMDA0NmEuLjg2ZGMyZDZhMmVmMWI4IDEwMDY0NAotLS0gYS9mcy91ZGYvdWRmZGVjbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi91ZGZkZWNsLmgKQEAgLTEzNyw3ICYjNDM7MTM3LDYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWRmX2Rpcl9lbnRyeV9sZW4oc3RydWN0IGZpbGVJZGVudERlc2MgKmNmaSkKIAogLyogZmlsZS5jICovCiBleHRlcm4gbG9uZyB1ZGZfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKLWludCB1ZGZfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTsKIAogLyogaW5vZGUuYyAqLwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICosCkBAIC0xNTgsNiAmIzQzOzE1Nyw3IEBAIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVkZl9icmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1ZGZfcGJsa190IGJsb2NrLAogZXh0ZXJuIGludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90KTsKIGV4dGVybiB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwomIzQzO2ludCB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogZXh0ZXJuIGludCBpbm9kZV9ibWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLAogCQkgICAgICBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICpwb3MsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZWxvYywKIAkJICAgICAgdWludDMyX3QgKmVsZW4sIHNlY3Rvcl90ICpvZmZzZXQsIGludDhfdCAqZXR5cGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCmluZGV4IDhiMjNiYzlhMjQ0Y2IzLi5mZDJjNzExNWMwNTQyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaApAQCAtMjEwLDEwICYjNDM7MjEwLDYgQEAgdm9pZCBiaF9lbmRfYXN5bmNfd3JpdGUoc3RydWN0IGJpbyAqYmlvKTsKIAogLyogVGhpbmdzIHRvIGRvIHdpdGggbWV0YWRhdGEgYnVmZmVycyBsaXN0ICovCiB2b2lkIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYik7Ci1pbnQgbW1iX2ZzeW5jX25vZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLAotCQkgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGJvb2wgZGF0YXN5bmMpOwotaW50IG1tYl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsCi0JICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKTsKIHZvaWQgY2xlYW5fYmRldl9hbGlhc2VzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLAogCQkJc2VjdG9yX3QgbGVuKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhbl9iZGV2X2JoX2FsaWFzKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggZDEwODk3YjNhMWUzNTAuLmIxN2UwZDQyMDcxZGY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC03NDAsNyAmIzQzOzc0MCw4IEBAIGVudW0gaW5vZGVfc3RhdGVfZmxhZ3NfZW51bSB7CiAJSV9DUkVBVElORwkJPSAoMVUgJmx0OyZsdDsgMTUpLAogCUlfRE9OVENBQ0hFCQk9ICgxVSAmbHQ7Jmx0OyAxNiksCiAJSV9TWU5DX1FVRVVFRAkJPSAoMVUgJmx0OyZsdDsgMTcpLAotCUlfUElOTklOR19ORVRGU19XQgk9ICgxVSAmbHQ7Jmx0OyAxOCkKJiM0MzsJSV9QSU5OSU5HX05FVEZTX1dCCT0gKDFVICZsdDsmbHQ7IDE4KSwKJiM0MzsJSV9NRVRBREFUQV9XUklURUJBQ0sJPSAoMVUgJmx0OyZsdDsgMTkpLAogfTsKIAogI2RlZmluZSBJX0RJUlRZX0lOT0RFIChJX0RJUlRZX1NZTkMgfCBJX0RJUlRZX0RBVEFTWU5DKQpAQCAtMjIxMyw2ICYjNDM7MjIxNCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0eV9zeW5jKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX1NZTkMpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwomIzQzOwlpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtpbm9kZS0mZ3Q7aV9sb2NrKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogcmV0dXJucyB0aGUgcmVmY291bnQgb24gdGhlIGlub2RlLiBpdCBjYW4gY2hhbmdlIGFyYml0cmFyaWx5LgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmgKaW5kZXggZWY3OTQxZTlkYzc5YWMuLjE3MDU2MWU4ZjJlMmM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oCkBAIC04Niw2ICYjNDM7ODYsOCBAQCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7CiAJdm9pZCAoKmZyZWVfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCXZvaWQgKCpkaXJ0eV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKTsKIAlpbnQgKCp3cml0ZV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwomIzQzOwlpbnQgKCpzeW5jX2lub2RlX21ldGFkYXRhKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiAJaW50ICgqZHJvcF9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSk7CiAJdm9pZCAoKmV2aWN0X2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAl2b2lkICgqcHV0X3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxNzMKCQkJCQkJCW91dHB1dDogMjgwCgkJCQkJCQl0aG91Z2h0czogMTI2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldDogYHN5bmNfaW5vZGVfbWV0YWRhdGFgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBwYXRjaCB0aGF0JiMzOTtzIGludHJvZHVjaW5nIGBzeW5jX2lub2RlX21ldGFkYXRhYCBpbnRvIGBzdXBlcl9vcGVyYXRpb25zYCBhbmQsIHNpZ25pZmljYW50bHksIG1vZGlmeWluZyBzZXZlcmFsIGZpbGVzeXN0ZW1zIHRvIHVzZSBpdC4gVGhpcyBpcyBhIHByZXR0eSBjb3JlIGNoYW5nZTsgaXQmIzM5O3MgdG91Y2hpbmcgVkZTIHdyaXRlYmFjayBsb2dpYywgYW5kIHRoYXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyByZXBsYWNpbmcgdGhlIG9sZCBgbW1iX2ZzeW5jYCBhbmQgYG1tYl9mc3luY19ub2ZsdXNoYCBpbiBgZnMvYnVmZmVyLmNgIHdpdGggYHNpbXBsZV9mc3luY2AgYW5kIG91ciBzaGlueSBuZXcgYHN5bmNfaW5vZGVfbWV0YWRhdGFgLiBUaGVyZSYjMzk7cyBhbHNvIHNvbWUgc3VwcG9ydGluZyBpbmZyYXN0cnVjdHVyZTogdGhlIGBJX01FVEFEQVRBX1dSSVRFQkFDS2AgZmxhZyBhbmQgYHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2tgIGZ1bmN0aW9uLgoKTGV0JiMzOTtzIHF1aWNrbHkgZW51bWVyYXRlIHRoZSBmaWxlc3lzdGVtcyBhZmZlY3RlZDogYWZmcywgYmZzLCBleHQyLCBleHQ0LCBmYXQsIG1pbml4LCBhbmQgdWRmLiBUaGVzZSBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cywgYW5kIHdlJiMzOTtsbCB3YW50IHRvIGVuc3VyZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlncyBhcmUgZW5hYmxlZDogYENPTkZJR19BRkZTX0ZTYCwgYENPTkZJR19CRlNfRlNgLCBgQ09ORklHX0VYVDJfRlNgLCBgQ09ORklHX0VYVDRfRlNgLCBgQ09ORklHX0ZBVF9GU2AsIGBDT05GSUdfTUlOSVhfRlNgLCBhbmQgYENPTkZJR19VREZfRlNgLgoKVGhlIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGZvY3VzIG9uIGFyZTogYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAsIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYCwgYW5kIHRoZW4gdGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBuZXcgY2FsbGJhY2s6IGBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGZhdF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYHVkZl9zeW5jX2lub2RlX21ldGFkYXRhYCwgYG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBhbmQgYHNpbXBsZV9mc3luY19ub2ZsdXNoYC4KCkkmIzM5O3ZlIGFscmVhZHkgdmVyaWZpZWQgdGhlIGNvbmZpZ3M7IHdlJiMzOTtyZSBnb29kIHRoZXJlLiBBbmQgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBGQVQsIGxldCYjMzk7cyBhbHNvIGtlZXAgYW4gZXllIG9uIGBDT05GSUdfTVNET1NfRlNgIGFuZCBgQ09ORklHX1ZGQVRfRlNgIGp1c3QgdG8gYmUgdGhvcm91Z2guCgpOb3csIGEgcXVpY2sgYGdyZXBgIGZvciBgc3luY19pbm9kZV9tZXRhZGF0YWAuLi4ganVzdCB0byBiZSBjZXJ0YWluIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gV2FpdCBhIHNlY29uZCwgdGhlIHBhdGNoICphZGRzKiBpdCB0byBgc3VwZXJfb3BlcmF0aW9uc2AtLXJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLgoKTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgZnMvZnMtd3JpdGViYWNrLmNgIGNoYW5nZXMuIEkgc2VlIHRoZSBrZXkgcGllY2U6IGEgY2hlY2sgZm9yIGBJX01FVEFEQVRBX1dSSVRFQkFDS2AgYW5kIGEgY2FsbCB0byBgc3luY19pbm9kZV9tZXRhZGF0YWAuIFRoaXMgaXMgKmRlZmluaXRlbHkqIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuCgpPa2F5LCBsZXQgbWUgbGlzdCB0aGUgZm9jdXMgc3ltYm9scyBhZ2FpbiBmb3IgY29tcGxldGVuZXNzOiBgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlYCwgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgLCBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGJmc19zeW5jX2lub2RlX21ldGFkYXRhYCwgYW5kIGBzaW1wbGVfZnN5bmNfbm9mbHVzaGAuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNoZWNrIHRoZSBzdGF0aWMtbmVzcyBvZiB0aGUgZmlsZXN5c3RlbSBjYWxsYmFja3M7IHdoaWNoIG9uZXMgYXJlIGludGVybmFsPyBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCBpcyBub3Qgc3RhdGljLiBgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhYCBpcyBub3Qgc3RhdGljLiBgZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGFgIGFyZSBzdGF0aWMuCgpBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIHdoZXJlIGBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGFgIHJlc2lkZXMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5lZCBpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpBZ2FpbiwgdGhlIGNvbmZpZ3MgYXJlOiBgRVhUNF9GU2AsIGBFWFQyX0ZTYCwgYEZBVF9GU2AsIGBNU0RPU19GU2AsIGBWRkFUX0ZTYCwgYE1JTklYX0ZTYCwgYFVERl9GU2AsIGBCRlNfRlNgLCBgQUZGU19GU2AuCgpXZSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgRkFUIGRlcGVuZGVuY2llcy4gSW4gYGZzL2ZhdC9LY29uZmlnYCwgYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgIGRlcGVuZCBvbiBgRkFUX0ZTYC4gU28gd2UgKnNob3VsZCogZW5hYmxlIHRob3NlIHR3byBhcyB3ZWxsIHdoZW4gZnV6emluZy4KCkkmIzM5O2xsIGNoZWNrIGBmcy9hZmZzL0tjb25maWdgLCBgZnMvYmZzL0tjb25maWdgLCBgZnMvbWluaXgvS2NvbmZpZ2AsIGFuZCBgZnMvdWRmL0tjb25maWdgIG5vdywganVzdCB0byBtYWtlIHN1cmUgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZW4mIzM5O3QgaGlkaW5nIGFueXRoaW5nLiBFdmVyeXRoaW5nIHNlZW1zIGZpbmUuCgpPa2F5LCB3aXRoIHRoYXQgc2FuaXR5IGNoZWNrIGNvbXBsZXRlLCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQyX0ZTJiMzNDssCiAgICAmIzM0O0ZBVF9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDssCiAgICAmIzM0O01JTklYX0ZTJiMzNDssCiAgICAmIzM0O1VERl9GUyYjMzQ7LAogICAgJiMzNDtCRlNfRlMmIzM0OywKICAgICYjMzQ7QUZGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fd3JpdGViYWNrX3NpbmdsZV9pbm9kZSYjMzQ7LAogICAgJiMzNDt3cml0ZWJhY2tfc2luZ2xlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7ZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7dWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7bWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtiZnNfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtzaW1wbGVfZnN5bmNfbm9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFZGUyBzdXBlcl9vcGVyYXRpb25zIGNhbGxiYWNrIGBzeW5jX2lub2RlX21ldGFkYXRhYCBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgZXh0MiwgZmF0LCBtaW5peCwgdWRmLCBiZnMsIGFmZnMpIHRvIGltcGxlbWVudCBhbmQgdXNlIGl0LiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb3JlIHdyaXRlYmFjayBsb2dpYyBpbiBgZnMvZnMtd3JpdGViYWNrLmNgIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgVkZTIGFuZCBtdWx0aXBsZSBmaWxlc3lzdGVtcywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUMl9GUyYjMzQ7LAogICAgJiMzNDtGQVRfRlMmIzM0OywKICAgICYjMzQ7TVNET1NfRlMmIzM0OywKICAgICYjMzQ7VkZBVF9GUyYjMzQ7LAogICAgJiMzNDtNSU5JWF9GUyYjMzQ7LAogICAgJiMzNDtVREZfRlMmIzM0OywKICAgICYjMzQ7QkZTX0ZTJiMzNDssCiAgICAmIzM0O0FGRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3dyaXRlYmFja19zaW5nbGVfaW5vZGUmIzM0OywKICAgICYjMzQ7d3JpdGViYWNrX3NpbmdsZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7ZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O2ZhdF9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3VkZl9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O21pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7YmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7c2ltcGxlX2ZzeW5jX25vZmx1c2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBWRlMgc3VwZXJfb3BlcmF0aW9ucyBjYWxsYmFjayBgc3luY19pbm9kZV9tZXRhZGF0YWAgYW5kIG1vZGlmaWVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIGV4dDIsIGZhdCwgbWluaXgsIHVkZiwgYmZzLCBhZmZzKSB0byBpbXBsZW1lbnQgYW5kIHVzZSBpdC4gSXQgYWxzbyBtb2RpZmllcyB0aGUgY29yZSB3cml0ZWJhY2sgbG9naWMgaW4gYGZzL2ZzLXdyaXRlYmFjay5jYCB0byB3YWl0IGZvciBpbm9kZSBtZXRhZGF0YSBJTy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIFZGUyBhbmQgbXVsdGlwbGUgZmlsZXN5c3RlbXMsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMTk6NTE6MDguOTE0NzAxMjk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MjQyMjc0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRVhUMl9GU1wiLFxuICAgIFwiRkFUX0ZTXCIsXG4gICAgXCJNU0RPU19GU1wiLFxuICAgIFwiVkZBVF9GU1wiLFxuICAgIFwiTUlOSVhfRlNcIixcbiAgICBcIlVERl9GU1wiLFxuICAgIFwiQkZTX0ZTXCIsXG4gICAgXCJBRkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX193cml0ZWJhY2tfc2luZ2xlX2lub2RlXCIsXG4gICAgXCJ3cml0ZWJhY2tfc2luZ2xlX2lub2RlXCIsXG4gICAgXCJleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImV4dDJfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcInVkZl9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJiZnNfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwic2ltcGxlX2ZzeW5jX25vZmx1c2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFZGUyBzdXBlcl9vcGVyYXRpb25zIGNhbGxiYWNrIGBzeW5jX2lub2RlX21ldGFkYXRhYCBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgZXh0MiwgZmF0LCBtaW5peCwgdWRmLCBiZnMsIGFmZnMpIHRvIGltcGxlbWVudCBhbmQgdXNlIGl0LiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb3JlIHdyaXRlYmFjayBsb2dpYyBpbiBgZnMvZnMtd3JpdGViYWNrLmNgIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgVkZTIGFuZCBtdWx0aXBsZSBmaWxlc3lzdGVtcywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjUxOjA4LjkxNDcwNzI0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2ODE5MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTUxMDQ1OGUwMmIyMzJkYmU4NzNiNzZmMTc2ZjRjMTFiNjA2MGUyN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyIDE5OjUxOjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmhcXG5pbmRleCA0NGEzZjY5ZDI3NWY5Ni4uYTdmYWE5MWRlZWQ1YWMgMTAwNjQ0XFxuLS0tIGEvZnMvYWZmcy9hZmZzLmhcXG4rKysgYi9mcy9hZmZzL2FmZnMuaFxcbkBAIC00NCw3ICs0NCw2IEBAIHN0cnVjdCBhZmZzX2lub2RlX2luZm8ge1xcbiBcXHRzdHJ1Y3QgbXV0ZXggaV9saW5rX2xvY2s7XFx0XFx0LyogUHJvdGVjdHMgaW50ZXJuYWwgaW5vZGUgYWNjZXNzLiAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXggaV9leHRfbG9jaztcXHRcXHQvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovXFxuICNkZWZpbmUgaV9oYXNoX2xvY2sgaV9leHRfbG9ja1xcbi1cXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XFxuIFxcdHUzMlxcdCBpX2Jsa2NudDtcXHRcXHRcXHQvKiBibG9jayBjb3VudCAqL1xcbiBcXHR1MzJcXHQgaV9leHRjbnQ7XFx0XFx0XFx0LyogZXh0ZW5kZWQgYmxvY2sgY291bnQgKi9cXG4gXFx0dTMyXFx0KmlfbGM7XFx0XFx0XFx0XFx0LyogbGluZWFyIGNhY2hlIG9mIGV4dGVuZGVkIGJsb2NrcyAqL1xcbkBAIC0xNTIsNyArMTUxLDYgQEAgZXh0ZXJuIGJvb2xcXHRhZmZzX25vZmlsZW5hbWV0cnVuY2F0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbiBleHRlcm4gaW50XFx0YWZmc19jaGVja19uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIGludCBsZW4sXFxuIFxcdFxcdFxcdFxcdGJvb2wgbm90cnVuY2F0ZSk7XFxuIGV4dGVybiBpbnRcXHRhZmZzX2NvcHlfbmFtZSh1bnNpZ25lZCBjaGFyICpic3RyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbi1zdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmFmZnNfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFxuIC8qIGJpdG1hcC4gYyAqL1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9hbWlnYWZmcy5jIGIvZnMvYWZmcy9hbWlnYWZmcy5jXFxuaW5kZXggYmVkNGZjODA1ZThlNjYuLjZjYzBmYzlhNGNiZjkyIDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvYW1pZ2FmZnMuY1xcbisrKyBiL2ZzL2FmZnMvYW1pZ2FmZnMuY1xcbkBAIC01Nyw3ICs1Nyw3IEBAIGFmZnNfaW5zZXJ0X2hhc2goc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuIFxcdFxcdEFGRlNfVEFJTChzYiwgZGlyX2JoKS1cXHUwMDNlaGFzaF9jaGFpbiA9IGNwdV90b19iZTMyKGlubyk7XFxuIFxcbiBcXHRhZmZzX2FkanVzdF9jaGVja3N1bShkaXJfYmgsIGlubyk7XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShkaXJfYmgsIFxcdTAwMjZBRkZTX0koZGlyKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShkaXJfYmgpO1xcbiBcXHRhZmZzX2JyZWxzZShkaXJfYmgpO1xcbiBcXG4gXFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XFxuQEAgLTEwMCw3ICsxMDAsNyBAQCBhZmZzX3JlbW92ZV9oYXNoKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlbV9iaClcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRBRkZTX1RBSUwoc2IsIGJoKS1cXHUwMDNlaGFzaF9jaGFpbiA9IGlubztcXG4gXFx0XFx0XFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJlMzJfdG9fY3B1KGlubykgLSBoYXNoX2lubyk7XFxuLVxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShkaXIpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0XFx0XFx0QUZGU19UQUlMKHNiLCByZW1fYmgpLVxcdTAwM2VwYXJlbnQgPSAwO1xcbiBcXHRcXHRcXHRyZXR2YWwgPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtMTgwLDcgKzE4MCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXHRcXHRcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFx0XFx0XFx0Z290byBkb25lO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoKTtcXG4gXFxuIFxcdFxcdG1lbWNweShBRkZTX1RBSUwoc2IsIGJoKS1cXHUwMDNlbmFtZSwgQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cXHUwMDNlbmFtZSwgMzIpO1xcbiBcXHRcXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xcbkBAIC0xODgsNyArMTg4LDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdFxcdFxcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xcbiBcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcbiBcXHRcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFx0XFx0aXB1dChkaXIpO1xcbkBAIC0yMDMsNyArMjAzLDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdFxcdFxcdF9fYmUzMiBpbm8yID0gQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cXHUwMDNlbGlua19jaGFpbjtcXG4gXFx0XFx0XFx0QUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZWxpbmtfY2hhaW4gPSBpbm8yO1xcbiBcXHRcXHRcXHRhZmZzX2FkanVzdF9jaGVja3N1bShiaCwgYmUzMl90b19jcHUoaW5vMikgLSBsaW5rX2lubyk7XFxuLVxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRcXHRcXHRyZXR2YWwgPSAwO1xcbiBcXHRcXHRcXHQvKiBGaXggdGhlIGxpbmsgY291bnQsIGlmIGJoIGlzIGEgbm9ybWFsIGhlYWRlciBibG9jayB3aXRob3V0IGxpbmtzICovXFxuIFxcdFxcdFxcdHN3aXRjaCAoYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZXN0eXBlKSkge1xcbkBAIC0zMDYsNyArMzA2LDcgQEAgYWZmc19yZW1vdmVfaGVhZGVyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0cmV0dmFsID0gYWZmc19yZW1vdmVfaGFzaChkaXIsIGJoKTtcXG4gXFx0aWYgKHJldHZhbClcXG4gXFx0XFx0Z290byBkb25lX3VubG9jaztcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcbiBcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmNcXG5pbmRleCAxNDRiMTc0ODJkMTJkYS4uMjNlMDg4YTdlZDRmYjMgMTAwNjQ0XFxuLS0tIGEvZnMvYWZmcy9maWxlLmNcXG4rKysgYi9mcy9hZmZzL2ZpbGUuY1xcbkBAIC0xNDAsMTQgKzE0MCwxNCBAQCBhZmZzX2FsbG9jX2V4dGJsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHUzMiBleHQpXFxuIFxcdEFGRlNfVEFJTChzYiwgbmV3X2JoKS1cXHUwMDNlcGFyZW50ID0gY3B1X3RvX2JlMzIoaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4gXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIG5ld19iaCk7XFxuIFxcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkobmV3X2JoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShuZXdfYmgpO1xcbiBcXG4gXFx0dG1wID0gYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZWV4dGVuc2lvbik7XFxuIFxcdGlmICh0bXApXFxuIFxcdFxcdGFmZnNfd2FybmluZyhzYiwgXFxcImFsbG9jX2V4dFxcXCIsIFxcXCJwcmV2aW91cyBleHRlbnNpb24gc2V0ICgleClcXFwiLCB0bXApO1xcbiBcXHRBRkZTX1RBSUwoc2IsIGJoKS1cXHUwMDNlZXh0ZW5zaW9uID0gY3B1X3RvX2JlMzIoYmxvY2tucik7XFxuIFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBibG9ja25yIC0gdG1wKTtcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcbiBcXHRBRkZTX0koaW5vZGUpLVxcdTAwM2VpX2V4dGNudCsrO1xcbiBcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG5AQCAtNTgxLDcgKzU4MSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxcbiBcXHRcXHRtZW1zZXQoQUZGU19EQVRBKGJoKSArIGJvZmYsIDAsIHRtcCk7XFxuIFxcdFxcdGJlMzJfYWRkX2NwdShcXHUwMDI2QUZGU19EQVRBX0hFQUQoYmgpLVxcdTAwM2VzaXplLCB0bXApO1xcbiBcXHRcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xcbi1cXHRcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0XFx0c2l6ZSArPSB0bXA7XFxuIFxcdFxcdGJpZHgrKztcXG4gXFx0fSBlbHNlIGlmIChiaWR4KSB7XFxuQEAgLTYwMyw3ICs2MDMsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcXG4gXFx0XFx0QUZGU19EQVRBX0hFQUQoYmgpLVxcdTAwM2VzaXplID0gY3B1X3RvX2JlMzIodG1wKTtcXG4gXFx0XFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcXG4gXFx0XFx0YmgtXFx1MDAzZWJfc3RhdGUgXFx1MDAyNj0gfigxVUwgXFx1MDAzY1xcdTAwM2MgQkhfTmV3KTtcXG4tXFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcdFxcdGlmIChwcmV2X2JoKSB7XFxuIFxcdFxcdFxcdHUzMiB0bXBfbmV4dCA9IGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVxcdTAwM2VuZXh0KTtcXG4gXFxuQEAgLTYxMyw4ICs2MTMsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBiaWR4LCB0bXBfbmV4dCk7XFxuIFxcdFxcdFxcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVxcdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXFx1MDAzZWJfYmxvY2tucik7XFxuIFxcdFxcdFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVxcdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XFxuLVxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcXG4gXFx0XFx0XFx0YWZmc19icmVsc2UocHJldl9iaCk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0c2l6ZSArPSBic2l6ZTtcXG5AQCAtNzMzLDcgKzczMiw3IEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0QUZGU19EQVRBX0hFQUQoYmgpLVxcdTAwM2VzaXplID0gY3B1X3RvX2JlMzIoXFxuIFxcdFxcdFxcdG1heChib2ZmICsgdG1wLCBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktXFx1MDAzZXNpemUpKSk7XFxuIFxcdFxcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRcXHR3cml0dGVuICs9IHRtcDtcXG4gXFx0XFx0ZnJvbSArPSB0bXA7XFxuIFxcdFxcdGJpZHgrKztcXG5AQCAtNzY2LDEzICs3NjUsMTIgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJpZHgsIHRtcF9uZXh0KTtcXG4gXFx0XFx0XFx0XFx0QUZGU19EQVRBX0hFQUQocHJldl9iaCktXFx1MDAzZW5leHQgPSBjcHVfdG9fYmUzMihiaC1cXHUwMDNlYl9ibG9ja25yKTtcXG4gXFx0XFx0XFx0XFx0YWZmc19hZGp1c3RfY2hlY2tzdW0ocHJldl9iaCwgYmgtXFx1MDAzZWJfYmxvY2tuciAtIHRtcF9uZXh0KTtcXG4tXFx0XFx0XFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdFxcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0YWZmc19icmVsc2UocHJldl9iaCk7XFxuIFxcdFxcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRcXHR3cml0dGVuICs9IGJzaXplO1xcbiBcXHRcXHRmcm9tICs9IGJzaXplO1xcbiBcXHRcXHRiaWR4Kys7XFxuQEAgLTgwMSwxNCArNzk5LDEzIEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBiaWR4LCB0bXBfbmV4dCk7XFxuIFxcdFxcdFxcdFxcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVxcdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXFx1MDAzZWJfYmxvY2tucik7XFxuIFxcdFxcdFxcdFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVxcdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XFxuLVxcdFxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2UgaWYgKGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKGJoKS1cXHUwMDNlc2l6ZSkgXFx1MDAzYyB0bXApXFxuIFxcdFxcdFxcdEFGRlNfREFUQV9IRUFEKGJoKS1cXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7XFxuIFxcdFxcdGFmZnNfYnJlbHNlKHByZXZfYmgpO1xcbiBcXHRcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xcbi1cXHRcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0XFx0d3JpdHRlbiArPSB0bXA7XFxuIFxcdFxcdGZyb20gKz0gdG1wO1xcbiBcXHRcXHRiaWR4Kys7XFxuQEAgLTk0NSw3ICs5NDIsNyBAQCBhZmZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdH1cXG4gXFx0QUZGU19UQUlMKHNiLCBleHRfYmgpLVxcdTAwM2VleHRlbnNpb24gPSAwO1xcbiBcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgZXh0X2JoKTtcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoZXh0X2JoKTtcXG4gXFx0YWZmc19icmVsc2UoZXh0X2JoKTtcXG4gXFxuIFxcdGlmIChpbm9kZS1cXHUwMDNlaV9zaXplKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvaW5vZGUuYyBiL2ZzL2FmZnMvaW5vZGUuY1xcbmluZGV4IDVkZDFiMDE2YmNiMDBhLi5kNGEzZjM4MWM0YmNmZiAxMDA2NDRcXG4tLS0gYS9mcy9hZmZzL2lub2RlLmNcXG4rKysgYi9mcy9hZmZzL2lub2RlLmNcXG5AQCAtMjA2LDcgKzIwNiw3IEBAIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0YWZmc19icmVsc2UoYmgpO1xcbiBcXHRhZmZzX2ZyZWVfcHJlYWxsb2MoaW5vZGUpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjY2LDExICsyNjYsOCBAQCBhZmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGlmICghaW5vZGUtXFx1MDAzZWlfbmxpbmspIHtcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IDA7XFxuIFxcdFxcdGFmZnNfdHJ1bmNhdGUoaW5vZGUpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRtbWJfc3luYyhcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbiBcXHR9XFxuIFxcbi1cXHRtbWJfaW52YWxpZGF0ZShcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbiBcXHRjbGVhcl9pbm9kZShpbm9kZSk7XFxuIFxcdGFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7XFxuIFxcdGNhY2hlX3BhZ2UgPSAodW5zaWduZWQgbG9uZylBRkZTX0koaW5vZGUpLVxcdTAwM2VpX2xjO1xcbkBAIC0zMDUsNyArMzAyLDcgQEAgYWZmc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIpXFxuIFxcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XFxuIFxcdGlmICghYmgpXFxuIFxcdFxcdGdvdG8gZXJyX2JoO1xcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0YWZmc19icmVsc2UoYmgpO1xcbiBcXG4gXFx0aW5vZGUtXFx1MDAzZWlfdWlkICAgICA9IGN1cnJlbnRfZnN1aWQoKTtcXG5AQCAtMzkzLDE3ICszOTAsMTcgQEAgYWZmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgczNcXG4gXFx0XFx0QUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZWxpbmtfY2hhaW4gPSBjaGFpbjtcXG4gXFx0XFx0QUZGU19UQUlMKHNiLCBpbm9kZV9iaCktXFx1MDAzZWxpbmtfY2hhaW4gPSBjcHVfdG9fYmUzMihibG9jayk7XFxuIFxcdFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGlub2RlX2JoLCBibG9jayAtIGJlMzJfdG9fY3B1KGNoYWluKSk7XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0bWFya19idWZmZXJfZGlydHkoaW5vZGVfYmgpO1xcbiBcXHRcXHRzZXRfbmxpbmsoaW5vZGUsIDIpO1xcbiBcXHRcXHRpaG9sZChpbm9kZSk7XFxuIFxcdH1cXG4gXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcdGRlbnRyeS1cXHUwMDNlZF9mc2RhdGEgPSAodm9pZCAqKShsb25nKWJoLVxcdTAwM2ViX2Jsb2NrbnI7XFxuIFxcbiBcXHRhZmZzX2xvY2tfZGlyKGRpcik7XFxuIFxcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2goZGlyLCBiaCk7XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFx0YWZmc191bmxvY2tfbGluayhpbm9kZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9hZmZzL25hbWVpLmMgYi9mcy9hZmZzL25hbWVpLmNcXG5pbmRleCBjM2M2NTMyZGE0YjBkYS4uNTdkOGQ3NTVhYWRhMDUgMTAwNjQ0XFxuLS0tIGEvZnMvYWZmcy9uYW1laS5jXFxuKysrIGIvZnMvYWZmcy9uYW1laS5jXFxuQEAgLTM3Myw3ICszNzMsNyBAQCBhZmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHR9XFxuIFxcdCpwID0gMDtcXG4gXFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IGkgKyAxO1xcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0YWZmc19icmVsc2UoYmgpO1xcbiBcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4gXFxuQEAgLTQ0Myw4ICs0NDMsNyBAQCBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuIFxcdC8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi9cXG4gXFxuIGRvbmU6XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCxcXG4tXFx0XFx0XFx0XFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRhZmZzX2JyZWxzZShiaCk7XFxuIFxcdHJldHVybiByZXR2YWw7XFxuIH1cXG5AQCAtNDk3LDggKzQ5Niw4IEBAIGFmZnNfeHJlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuIFxcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gob2xkX2RpciwgYmhfbmV3KTtcXG4gXFx0YWZmc191bmxvY2tfZGlyKG9sZF9kaXIpO1xcbiBkb25lOlxcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmhfb2xkLCBcXHUwMDI2QUZGU19JKG5ld19kaXIpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFxcdTAwMjZBRkZTX0kob2xkX2RpciktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmhfb2xkKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmhfbmV3KTtcXG4gXFx0YWZmc19icmVsc2UoYmhfb2xkKTtcXG4gXFx0YWZmc19icmVsc2UoYmhfbmV3KTtcXG4gXFx0cmV0dXJuIHJldHZhbDtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9zdXBlci5jIGIvZnMvYWZmcy9zdXBlci5jXFxuaW5kZXggYjIzMjI1MWFhN2JiZDAuLjBhZDUxMjdlOWZiOGVlIDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvc3VwZXIuY1xcbisrKyBiL2ZzL2FmZnMvc3VwZXIuY1xcbkBAIC0xMDgsNyArMTA4LDYgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqYWZmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRpLVxcdTAwM2VpX2xjID0gTlVMTDtcXG4gXFx0aS1cXHUwMDNlaV9leHRfYmggPSBOVUxMO1xcbiBcXHRpLVxcdTAwM2VpX3BhX2NudCA9IDA7XFxuLVxcdG1tYl9pbml0KFxcdTAwMjZpLVxcdTAwM2VpX21ldGFkYXRhX2JocywgXFx1MDAyNmktXFx1MDAzZXZmc19pbm9kZS5pX2RhdGEpO1xcbiBcXG4gXFx0cmV0dXJuIFxcdTAwMjZpLVxcdTAwM2V2ZnNfaW5vZGU7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jXFxuaW5kZXggNWI0MGFiMDlhNzk2ZGUuLjliMzdlYzRiZDg5YThjIDEwMDY0NFxcbi0tLSBhL2ZzL2Jmcy9kaXIuY1xcbisrKyBiL2ZzL2Jmcy9kaXIuY1xcbkBAIC02OCwxNyArNjgsMTAgQEAgc3RhdGljIGludCBiZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGJmc19mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuLXtcXG4tXFx0cmV0dXJuIG1tYl9mc3luYyhmaWxlLFxcbi1cXHRcXHRcXHRcXHUwMDI2QkZTX0koZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0KS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMsXFxuLVxcdFxcdFxcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4tfVxcbi1cXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5yZWFkXFx0XFx0PSBnZW5lcmljX3JlYWRfZGlyLFxcbiBcXHQuaXRlcmF0ZV9zaGFyZWRcXHQ9IGJmc19yZWFkZGlyLFxcbi1cXHQuZnN5bmNcXHRcXHQ9IGJmc19mc3luYyxcXG4rXFx0LmZzeW5jXFx0XFx0PSBzaW1wbGVfZnN5bmMsXFxuIFxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9iZnMvaW5vZGUuYyBiL2ZzL2Jmcy9pbm9kZS5jXFxuaW5kZXggZTQxZWZkZDM1ZGI5ZWYuLmNhY2M3ZWZmOWMzM2NlIDEwMDY0NFxcbi0tLSBhL2ZzL2Jmcy9pbm9kZS5jXFxuKysrIGIvZnMvYmZzL2lub2RlLmNcXG5AQCAtMTM2LDcgKzEzNiw2IEBAIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiBcXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrO1xcbiBcXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcXG4gXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4tXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRkcHJpbnRmKFxcXCJpbm89JTA4eFxcXFxuXFxcIiwgaW5vKTtcXG4gXFxuQEAgLTE2NSwxMyArMTY0LDMxIEBAIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiBcXHRkaS1cXHUwMDNlaV9lb2Zmc2V0ID0gY3B1X3RvX2xlMzIoaV9zYmxvY2sgKiBCRlNfQlNJWkUgKyBpbm9kZS1cXHUwMDNlaV9zaXplIC0gMSk7XFxuIFxcbiBcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuLVxcdGlmICh3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkge1xcbi1cXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuLVxcdFxcdGlmIChidWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSlcXG4tXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4tXFx0fVxcbiBcXHRicmVsc2UoYmgpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4rXFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJmc19zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbit7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcXG4rXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4rXFxuK1xcdGRpID0gZmluZF9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgKHUxNilpbm9kZS1cXHUwMDNlaW5vLCBcXHUwMDI2YmgpO1xcbitcXHRpZiAoSVNfRVJSKGRpKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoZGkpO1xcbitcXG4rXFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRlcnIgPSBtbWJfc3luYyhcXHUwMDI2QkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK291dDpcXG4rXFx0YnJlbHNlKGJoKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMzAyLDYgKzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcXG4gXFx0LmFsbG9jX2lub2RlXFx0PSBiZnNfYWxsb2NfaW5vZGUsXFxuIFxcdC5mcmVlX2lub2RlXFx0PSBiZnNfZnJlZV9pbm9kZSxcXG4gXFx0LndyaXRlX2lub2RlXFx0PSBiZnNfd3JpdGVfaW5vZGUsXFxuK1xcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEsXFxuIFxcdC5ldmljdF9pbm9kZVxcdD0gYmZzX2V2aWN0X2lub2RlLFxcbiBcXHQucHV0X3N1cGVyXFx0PSBiZnNfcHV0X3N1cGVyLFxcbiBcXHQuc3RhdGZzXFx0XFx0PSBiZnNfc3RhdGZzLFxcbmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jXFxuaW5kZXggOWFmNWYwNjFhMWY4NWEuLmJlOGI1N2E2MzVjZDgyIDEwMDY0NFxcbi0tLSBhL2ZzL2J1ZmZlci5jXFxuKysrIGIvZnMvYnVmZmVyLmNcXG5AQCAtNjI4LDc5ICs2MjgsNiBAQCBpbnQgbW1iX3N5bmMoc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChtbWJfc3luYyk7XFxuIFxcbi0vKipcXG4tICogbW1iX2ZzeW5jX25vZmx1c2ggLSBmc3luYyBpbXBsZW1lbnRhdGlvbiBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdpdGhcXG4tICogXFx0XFx0ICAgICAgIG1ldGFkYXRhIGJ1ZmZlcnMgbGlzdFxcbi0gKlxcbi0gKiBAZmlsZTpcXHRmaWxlIHRvIHN5bmNocm9uaXplXFxuLSAqIEBtbWI6XFx0bGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2hcXG4tICogQHN0YXJ0OlxcdHN0YXJ0IG9mZnNldCBpbiBieXRlc1xcbi0gKiBAZW5kOlxcdGVuZCBvZmZzZXQgaW4gYnl0ZXMgKGluY2x1c2l2ZSlcXG4tICogQGRhdGFzeW5jOlxcdG9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWVcXG4tICpcXG4tICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZnN5bmMgbWV0aG9kIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2hpY2hcXG4tICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iXFxuLSAqIHN0cnVjdHVyZS5cXG4tICovXFxuLWludCBtbWJfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXFxuLVxcdFxcdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYylcXG4te1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXHRpbnQgZXJyO1xcbi1cXHRpbnQgcmV0ID0gMDtcXG4tXFxuLVxcdGVyciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcbi1cXHRpZiAobW1iKVxcbi1cXHRcXHRyZXQgPSBtbWJfc3luYyhtbWIpO1xcbi1cXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ESVJUWV9BTEwpKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0aWYgKGRhdGFzeW5jIFxcdTAwMjZcXHUwMDI2ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcXHUwMDI2IElfRElSVFlfREFUQVNZTkMpKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xcbi1cXHRpZiAocmV0ID09IDApXFxuLVxcdFxcdHJldCA9IGVycjtcXG4tXFxuLW91dDpcXG4tXFx0LyogY2hlY2sgYW5kIGFkdmFuY2UgYWdhaW4gdG8gY2F0Y2ggZXJyb3JzIGFmdGVyIHN5bmNpbmcgb3V0IGJ1ZmZlcnMgKi9cXG4tXFx0ZXJyID0gZmlsZV9jaGVja19hbmRfYWR2YW5jZV93Yl9lcnIoZmlsZSk7XFxuLVxcdGlmIChyZXQgPT0gMClcXG4tXFx0XFx0cmV0ID0gZXJyO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jX25vZmx1c2gpO1xcbi1cXG4tLyoqXFxuLSAqIG1tYl9mc3luYyAtIGZzeW5jIGltcGxlbWVudGF0aW9uIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2l0aCBtZXRhZGF0YVxcbi0gKiBcXHQgICAgICAgYnVmZmVycyBsaXN0XFxuLSAqXFxuLSAqIEBmaWxlOlxcdGZpbGUgdG8gc3luY2hyb25pemVcXG4tICogQG1tYjpcXHRsaXN0IG9mIG1ldGFkYXRhIGJocyB0byBmbHVzaFxcbi0gKiBAc3RhcnQ6XFx0c3RhcnQgb2Zmc2V0IGluIGJ5dGVzXFxuLSAqIEBlbmQ6XFx0ZW5kIG9mZnNldCBpbiBieXRlcyAoaW5jbHVzaXZlKVxcbi0gKiBAZGF0YXN5bmM6XFx0b25seSBzeW5jaHJvbml6ZSBlc3NlbnRpYWwgbWV0YWRhdGEgaWYgdHJ1ZVxcbi0gKlxcbi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmc3luYyBtZXRob2QgZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aGljaFxcbi0gKiB0cmFjayBhbGwgbm9uLWlub2RlIG1ldGFkYXRhIGluIHRoZSBidWZmZXJzIGxpc3QgaGFuZ2luZyBvZmYgdGhlIEBtbWJcXG4tICogc3RydWN0dXJlLiBUaGlzIGFsc28gbWFrZXMgc3VyZSB0aGF0IGEgZGV2aWNlIGNhY2hlIGZsdXNoIG9wZXJhdGlvbiBpc1xcbi0gKiBjYWxsZWQgYXQgdGhlIGVuZC5cXG4tICovXFxuLWludCBtbWJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLFxcbi1cXHQgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGJvb2wgZGF0YXN5bmMpXFxuLXtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJldCA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbGUsIG1tYiwgc3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbi1cXHRpZiAoIXJldClcXG4tXFx0XFx0cmV0ID0gYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXYpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jKTtcXG4tXFxuIC8qXFxuICAqIENhbGxlZCB3aGVuIHdlJ3ZlIHJlY2VudGx5IHdyaXR0ZW4gYmxvY2sgYGJibG9jaycsIGFuZCBpdCBpcyBrbm93biB0aGF0XFxuICAqIGBiYmxvY2snIHdhcyBmb3IgYSBidWZmZXJfYm91bmRhcnkoKSBidWZmZXIuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGJsb2NrIGF0XFxuQEAgLTExMjMsMTIgKzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7XFxuIFxcbiB2b2lkIG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuIHtcXG4rXFx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XFxuK1xcbiBcXHRzZXRfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcXG4gXFx0LyogRklYTUU6IGRvIHdlIG5lZWQgdG8gc2V0IHRoaXMgaW4gYm90aCBwbGFjZXM/ICovXFxuIFxcdGlmIChiaC1cXHUwMDNlYl9mb2xpbyBcXHUwMDI2XFx1MDAyNiBiaC1cXHUwMDNlYl9mb2xpby1cXHUwMDNlbWFwcGluZylcXG4gXFx0XFx0bWFwcGluZ19zZXRfZXJyb3IoYmgtXFx1MDAzZWJfZm9saW8tXFx1MDAzZW1hcHBpbmcsIC1FSU8pO1xcbi1cXHRpZiAoYmgtXFx1MDAzZWJfbW1iKVxcbi1cXHRcXHRtYXBwaW5nX3NldF9lcnJvcihiaC1cXHUwMDNlYl9tbWItXFx1MDAzZW1hcHBpbmcsIC1FSU8pO1xcbitcXHQvKiBQcm90ZWN0IHVzIGZyb20gbW1iIFxcdTAwMjYgaW5vZGUgZ2V0dGluZyBmcmVlZCB3aGlsZSB3ZSB3b3JrIG9uIGl0ICovXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bW1iID0gUkVBRF9PTkNFKGJoLVxcdTAwM2ViX21tYik7XFxuK1xcdGlmIChtbWIpXFxuK1xcdFxcdG1hcHBpbmdfc2V0X2Vycm9yKG1tYi1cXHUwMDNlbWFwcGluZywgLUVJTyk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wobWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmNcXG5pbmRleCAyNzhkNGJlOGVjYmU3Ny4uZTE3YmJjNzU5OGMxNDMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi9kaXIuY1xcbisrKyBiL2ZzL2V4dDIvZGlyLmNcXG5AQCAtNzM0LDYgKzczNCw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9ucyA9IHtcXG4gI2lmZGVmIENPTkZJR19DT01QQVRcXG4gXFx0LmNvbXBhdF9pb2N0bFxcdD0gZXh0Ml9jb21wYXRfaW9jdGwsXFxuICNlbmRpZlxcbi1cXHQuZnN5bmNcXHRcXHQ9IGV4dDJfZnN5bmMsXFxuK1xcdC5mc3luY1xcdFxcdD0gc2ltcGxlX2ZzeW5jLFxcbiBcXHQuc2V0bGVhc2VcXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZXh0Mi5oIGIvZnMvZXh0Mi9leHQyLmhcXG5pbmRleCA3OWY3YjM5NTI1OGMyYS4uNTY0MjQ1MWJmMTkxNzMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi9leHQyLmhcXG4rKysgYi9mcy9leHQyL2V4dDIuaFxcbkBAIC03MzUsNiArNzM1LDcgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZXh0Ml9jb3VudF9mcmVlIChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgdW5zaWduZWQpO1xcbiAvKiBpbm9kZS5jICovXFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpO1xcbiBleHRlcm4gaW50IGV4dDJfd3JpdGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7XFxuK2V4dGVybiBpbnQgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7XFxuIGV4dGVybiB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xcbiB2b2lkIGV4dDJfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pO1xcbiBleHRlcm4gaW50IGV4dDJfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7XFxuQEAgLTc3Miw4ICs3NzMsNiBAQCBleHRlcm4gdm9pZCBleHQyX3N5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzLFxcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2Rpcl9vcGVyYXRpb25zO1xcbiBcXG4gLyogZmlsZS5jICovXFxuLWV4dGVybiBpbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbi1cXHRcXHQgICAgICBpbnQgZGF0YXN5bmMpO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXh0Ml9maWxlX2lub2RlX29wZXJhdGlvbnM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9vcGVyYXRpb25zO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9maWxlLmMgYi9mcy9leHQyL2ZpbGUuY1xcbmluZGV4IDhkY2E5ZWM0Y2FjZDlhLi5iOTAyMGRmN2Q4OWUwMyAxMDA2NDRcXG4tLS0gYS9mcy9leHQyL2ZpbGUuY1xcbisrKyBiL2ZzL2V4dDIvZmlsZS5jXFxuQEAgLTQ3LDIxICs0Nyw2IEBAIHN0YXRpYyBpbnQgZXh0Ml9yZWxlYXNlX2ZpbGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuLXtcXG4tXFx0aW50IHJldDtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbi1cXG4tXFx0cmV0ID0gbW1iX2ZzeW5jKGZpbGUsIFxcdTAwMjZFWFQyX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocyxcXG4tXFx0XFx0XFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbi1cXHRpZiAocmV0ID09IC1FSU8pXFxuLVxcdFxcdC8qIFdlIGRvbid0IHJlYWxseSBrbm93IHdoZXJlIHRoZSBJTyBlcnJvciBoYXBwZW5lZC4uLiAqL1xcbi1cXHRcXHRleHQyX2Vycm9yKHNiLCBfX2Z1bmNfXyxcXG4tXFx0XFx0XFx0ICAgXFxcImRldGVjdGVkIElPIGVycm9yIHdoZW4gd3JpdGluZyBtZXRhZGF0YSBidWZmZXJzXFxcIik7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuIHN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuIHtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbkBAIC0yMTMsNyArMTk4LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0Lm1tYXBfcHJlcGFyZVxcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcXG4gXFx0Lm9wZW5cXHRcXHQ9IGV4dDJfZmlsZV9vcGVuLFxcbiBcXHQucmVsZWFzZVxcdD0gZXh0Ml9yZWxlYXNlX2ZpbGUsXFxuLVxcdC5mc3luY1xcdFxcdD0gZXh0Ml9mc3luYyxcXG4rXFx0LmZzeW5jXFx0XFx0PSBzaW1wbGVfZnN5bmMsXFxuIFxcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYSxcXG4gXFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbiBcXHQuc3BsaWNlX3dyaXRlXFx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxcbmRpZmYgLS1naXQgYS9mcy9leHQyL2lub2RlLmMgYi9mcy9leHQyL2lub2RlLmNcXG5pbmRleCAyOTgwODYyOWNjZTU2Zi4uNTE2NTY2NDFjNGU1OWMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi9pbm9kZS5jXFxuKysrIGIvZnMvZXh0Mi9pbm9kZS5jXFxuQEAgLTM5LDggKzM5LDYgQEBcXG4gI2luY2x1ZGUgXFxcImFjbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGF0dHIuaFxcXCJcXG4gXFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKTtcXG4tXFxuIC8qXFxuICAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay5cXG4gICovXFxuQEAgLTgzLDExICs4MSwxNiBAQCB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuIFxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kYXRhKTtcXG4gXFxuIFxcdGlmICh3YW50X2RlbGV0ZSkge1xcbitcXHRcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0ge1xcbitcXHRcXHRcXHQuc3luY19tb2RlID0gaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkgPyBXQl9TWU5DX0FMTCA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBXQl9TWU5DX05PTkUsXFxuK1xcdFxcdH07XFxuK1xcbiBcXHRcXHRzYl9zdGFydF9pbnR3cml0ZShpbm9kZS1cXHUwMDNlaV9zYik7XFxuIFxcdFxcdC8qIHNldCBkdGltZSAqL1xcbiBcXHRcXHRFWFQyX0koaW5vZGUpLVxcdTAwM2VpX2R0aW1lXFx0PSBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCk7XFxuIFxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbi1cXHRcXHRfX2V4dDJfd3JpdGVfaW5vZGUoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcXG4rXFx0XFx0ZXh0Ml93cml0ZV9pbm9kZShpbm9kZSwgXFx1MDAyNndiYyk7XFxuIFxcdFxcdC8qIHRydW5jYXRlIHRvIDAgKi9cXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IDA7XFxuIFxcdFxcdGlmIChpbm9kZS1cXHUwMDNlaV9ibG9ja3MpXFxuQEAgLTE0NjksNyArMTQ3Miw3IEBAIHN0cnVjdCBpbm9kZSAqZXh0Ml9pZ2V0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubylcXG4gXFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX2V4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXFxuK2ludCBleHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiB7XFxuIFxcdHN0cnVjdCBleHQyX2lub2RlX2luZm8gKmVpID0gRVhUMl9JKGlub2RlKTtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbkBAIC0xNTYwLDIyICsxNTYzLDMyIEBAIHN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxcbiBcXHR9IGVsc2UgZm9yIChuID0gMDsgbiBcXHUwMDNjIEVYVDJfTl9CTE9DS1M7IG4rKylcXG4gXFx0XFx0cmF3X2lub2RlLVxcdTAwM2VpX2Jsb2NrW25dID0gZWktXFx1MDAzZWlfZGF0YVtuXTtcXG4gXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbi1cXHRpZiAoZG9fc3luYykge1xcbi1cXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuLVxcdFxcdGlmIChidWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbi1cXHRcXHRcXHRwcmludGsgKFxcXCJJTyBlcnJvciBzeW5jaW5nIGV4dDIgaW5vZGUgWyVzOiUwOGx4XVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0c2ItXFx1MDAzZXNfaWQsICh1bnNpZ25lZCBsb25nKSBpbm8pO1xcbi1cXHRcXHRcXHRlcnIgPSAtRUlPO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4gXFx0ZWktXFx1MDAzZWlfc3RhdGUgXFx1MDAyNj0gfkVYVDJfU1RBVEVfTkVXO1xcbiBcXHRicmVsc2UgKGJoKTtcXG4rXFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLWludCBleHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbitpbnQgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiB7XFxuLVxcdHJldHVybiBfX2V4dDJfd3JpdGVfaW5vZGUoaW5vZGUsIHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcXG4rXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4rXFx0c3RydWN0IGV4dDJfaW5vZGUgKnJhd19pbm9kZSA9IGV4dDJfZ2V0X2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBpbm9kZS1cXHUwMDNlaV9pbm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZiaCk7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKElTX0VSUihyYXdfaW5vZGUpKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbitcXHRcXHRwcmludGsoXFxcIklPIGVycm9yIHN5bmNpbmcgZXh0MiBpbm9kZSBbJXM6JTA4bHhdXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfaWQsICh1bnNpZ25lZCBsb25nKWlub2RlLVxcdTAwM2VpX2lubyk7XFxuK1xcdFxcdGVyciA9IC1FSU87XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGVyciA9IG1tYl9zeW5jKFxcdTAwMjZFWFQyX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK291dDpcXG4rXFx0YnJlbHNlKGJoKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gaW50IGV4dDJfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvc3VwZXIuYyBiL2ZzL2V4dDIvc3VwZXIuY1xcbmluZGV4IDM5OTlmOGYzYjE1NmUzLi5hNDBmNTMwODcyYTQwNyAxMDA2NDRcXG4tLS0gYS9mcy9leHQyL3N1cGVyLmNcXG4rKysgYi9mcy9leHQyL3N1cGVyLmNcXG5AQCAtMzYyLDYgKzM2Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQyX3NvcHMgPSB7XFxuIFxcdC5hbGxvY19pbm9kZVxcdD0gZXh0Ml9hbGxvY19pbm9kZSxcXG4gXFx0LmZyZWVfaW5vZGVcXHQ9IGV4dDJfZnJlZV9pbl9jb3JlX2lub2RlLFxcbiBcXHQud3JpdGVfaW5vZGVcXHQ9IGV4dDJfd3JpdGVfaW5vZGUsXFxuK1xcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhLFxcbiBcXHQuZXZpY3RfaW5vZGVcXHQ9IGV4dDJfZXZpY3RfaW5vZGUsXFxuIFxcdC5wdXRfc3VwZXJcXHQ9IGV4dDJfcHV0X3N1cGVyLFxcbiBcXHQuc3luY19mc1xcdD0gZXh0Ml9zeW5jX2ZzLFxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLjhmMzg4ZTE1OGRhZWVmIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcXG5AQCAtMTE1MSw3ICsxMTUxLDcgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XFxuIFxcdHN0cnVjdCByd19zZW1hcGhvcmUgaV9kYXRhX3NlbTtcXG4gXFx0c3RydWN0IGlub2RlIHZmc19pbm9kZTtcXG4gXFx0c3RydWN0IGpiZDJfaW5vZGUgKmppbm9kZTtcXG4tXFx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzO1xcbitcXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmlfbWV0YWRhdGFfYmhzO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRmlsZSBjcmVhdGlvbiB0aW1lLiBJdHMgZnVuY3Rpb24gaXMgc2FtZSBhcyB0aGF0IG9mXFxuQEAgLTMxNTUsNiArMzE1NSw3IEBAIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbiBcXHRfX2V4dDRfaWdldCgoc2IpLCAoaW5vKSwgKGZsYWdzKSwgX19mdW5jX18sIF9fTElORV9fKVxcbiBcXG4gZXh0ZXJuIGludCAgZXh0NF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xcbitleHRlcm4gaW50ICBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTtcXG4gZXh0ZXJuIGludCAgZXh0NF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGRlbnRyeSAqLFxcbiBcXHRcXHRcXHQgc3RydWN0IGlhdHRyICopO1xcbiBleHRlcm4gdTMyICBleHQ0X2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9qYmQyLmMgYi9mcy9leHQ0L2V4dDRfamJkMi5jXFxuaW5kZXggOWE4YzIyNWYyNzUzMDkuLjc1MjMyNmYzYjY1MzZhIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmNcXG4rKysgYi9mcy9leHQ0L2V4dDRfamJkMi5jXFxuQEAgLTM1MCw2ICszNTAsMjEgQEAgaW50IF9fZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGV4dDRfaW5vZGVfYXR0YWNoX21tYihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSXQncyBkaWZmaWN1bHQgdG8gaGFuZGxlIGZhaWx1cmUgd2hlbiBtYXJraW5nIGJ1ZmZlciBkaXJ0eSB3aXRob3V0XFxuK1xcdCAqIGxlYXZpbmcgZmlsZXN5c3RlbSBjb3JydXB0ZWRcXG4rXFx0ICovXFxuK1xcdG1tYiA9IGttYWxsb2Nfb2JqKCptbWIsIEdGUF9OT0ZTIHwgX19HRlBfTk9GQUlMKTtcXG4rXFx0bW1iX2luaXQobW1iLCBcXHUwMDI2aW5vZGUtXFx1MDAzZWlfZGF0YSk7XFxuK1xcdC8qIFNvbWVvbmUgc3dhcHBlZCBhbm90aGVyIG1tYiBiZWZvcmUgdXM/ICovXFxuK1xcdGlmIChjbXB4Y2hnKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocywgTlVMTCwgbW1iKSlcXG4rXFx0XFx0a2ZyZWUobW1iKTtcXG4rfVxcbitcXG4gaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxcbiBcXHRcXHRcXHRcXHQgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuQEAgLTM4OSwxMSArNDA0LDE0IEBAIGludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcXG4gXFx0XFx0XFx0XFx0XFx0IGVycik7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKGlub2RlKVxcbitcXHRcXHRpZiAoaW5vZGUpIHtcXG4rXFx0XFx0XFx0aWYgKCFFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocylcXG4rXFx0XFx0XFx0XFx0ZXh0NF9pbm9kZV9hdHRhY2hfbW1iKGlub2RlKTtcXG4gXFx0XFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbitcXHRcXHR9XFxuIFxcdFxcdGlmIChpbm9kZSBcXHUwMDI2XFx1MDAyNiBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSkge1xcbiBcXHRcXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuIFxcdFxcdFxcdGlmIChidWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZzeW5jLmMgYi9mcy9leHQ0L2ZzeW5jLmNcXG5pbmRleCA5MjQ3MjZkY2M4NWZmNS4uMjk5OWMyY2M4ZmNmYTAgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9mc3luYy5jXFxuKysrIGIvZnMvZXh0NC9mc3luYy5jXFxuQEAgLTY4LDkgKzY4LDYgQEAgc3RhdGljIGludCBleHQ0X3N5bmNfcGFyZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdFxcdCAqIHRocm91Z2ggZXh0NF9ldmljdF9pbm9kZSgpKSBhbmQgc28gd2UgYXJlIHNhZmUgdG8gZmx1c2hcXG4gXFx0XFx0ICogbWV0YWRhdGEgYmxvY2tzIGFuZCB0aGUgaW5vZGUuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRyZXQgPSBtbWJfc3luYyhcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0cmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC04MywyMiArODAsMTEgQEAgc3RhdGljIGludCBleHQ0X2ZzeW5jX25vam91cm5hbChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbiBcXHRcXHRcXHRcXHRpbnQgZGF0YXN5bmMsIGJvb2wgKm5lZWRzX2JhcnJpZXIpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfaW5vZGU7XFxuLVxcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7XFxuLVxcdFxcdC5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCxcXG4tXFx0XFx0Lm5yX3RvX3dyaXRlID0gMCxcXG4tXFx0fTtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHJldCA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbGUsIFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocyxcXG4tXFx0XFx0XFx0XFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbitcXHRyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdC8qIEZvcmNlIHdyaXRlb3V0IG9mIGlub2RlIHRhYmxlIGJ1ZmZlciB0byBkaXNrICovXFxuLVxcdHJldCA9IGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsIFxcdTAwMjZ3YmMpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4gXFx0cmV0ID0gZXh0NF9zeW5jX3BhcmVudChpbm9kZSk7XFxuIFxcbiBcXHRpZiAodGVzdF9vcHQoaW5vZGUtXFx1MDAzZWlfc2IsIEJBUlJJRVIpKVxcbkBAIC0xNTYsNiArMTQyLDEwIEBAIGludCBleHQ0X3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuIFxcdGlmIChzYl9yZG9ubHkoaW5vZGUtXFx1MDAzZWlfc2IpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0aWYgKCFFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19qb3VybmFsKSB7XFxuIFxcdFxcdHJldCA9IGV4dDRfZnN5bmNfbm9qb3VybmFsKGZpbGUsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmVlZHNfYmFycmllcik7XFxuQEAgLTE2NCwxMCArMTU0LDYgQEAgaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4gXFx0LypcXG4gXFx0ICogIFRoZSBjYWxsZXIncyBmaWxlbWFwX2ZkYXRhd3JpdGUoKS93YWl0IHdpbGwgc3luYyB0aGUgZGF0YS5cXG4gXFx0ICogIE1ldGFkYXRhIGlzIGluIHRoZSBqb3VybmFsLCB3ZSB3YWl0IGZvciBwcm9wZXIgdHJhbnNhY3Rpb24gdG9cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggY2U5OTgwN2M1ZjViMmMuLmI2MWVlNzVlY2JkZjFhIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC0xOTUsOSArMTk1LDggQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShpbm9kZSwgXFxcImRhdGEgd2lsbCBiZSBsb3N0XFxcIik7XFxuIFxcbiBcXHRcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbChcXHUwMDI2aW5vZGUtXFx1MDAzZWlfZGF0YSk7XFxuLVxcdFxcdC8qIEF2b2lkIG1iYWxsb2Mgc3BlY2lhbCBpbm9kZSB3aGljaCBoYXMgbm8gcHJvcGVyIGlvcHMgKi9cXG4tXFx0XFx0aWYgKCFFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19qb3VybmFsKVxcbi1cXHRcXHRcXHRtbWJfc3luYyhcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRpZiAoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpXFxuK1xcdFxcdFxcdG1tYl9zeW5jKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4gXFx0XFx0Z290byBub19kZWxldGU7XFxuIFxcdH1cXG4gXFxuQEAgLTM0NTIsNiArMzQ1MSw3IEBAIHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KVxcbiBzdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfam91cm5hbDtcXG4rXFx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XFxuIFxcbiBcXHRpZiAoam91cm5hbCkge1xcbiBcXHRcXHRpZiAoamJkMl90cmFuc2FjdGlvbl9jb21taXR0ZWQoam91cm5hbCxcXG5AQCAtMzQ2Miw4ICszNDYyLDkgQEAgc3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4rXFx0bW1iID0gUkVBRF9PTkNFKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4gXFx0LyogQW55IG1ldGFkYXRhIGJ1ZmZlcnMgdG8gd3JpdGU/ICovXFxuLVxcdGlmIChtbWJfaGFzX2J1ZmZlcnMoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKSlcXG4rXFx0aWYgKG1tYiBcXHUwMDI2XFx1MDAyNiBtbWJfaGFzX2J1ZmZlcnMobW1iKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdHJldHVybiBpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQztcXG4gfVxcbkBAIC01ODM4LDI0ICs1ODM5LDM2IEBAIGludCBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiBcXHRcXHRlcnIgPSBleHQ0X2ZjX2NvbW1pdChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19qb3VybmFsLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX3N5bmNfdGlkKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xcbitcXHRcXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuIFxcbi1cXHRcXHRlcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIHN5bmMoMikgd2lsbCBmbHVzaCB0aGUgd2hvbGUgYnVmZmVyIGNhY2hlLiBObyBuZWVkIHRvIGRvXFxuLVxcdFxcdCAqIGl0IGhlcmUgc2VwYXJhdGVseSBmb3IgZWFjaCBpbm9kZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmICh3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcXHUwMDI2XFx1MDAyNiAhd2JjLVxcdTAwM2Vmb3Jfc3luYylcXG4tXFx0XFx0XFx0c3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7XFxuLVxcdFxcdGlmIChidWZmZXJfcmVxKGlsb2MuYmgpIFxcdTAwMjZcXHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoaWxvYy5iaCkpIHtcXG4tXFx0XFx0XFx0ZXh0NF9lcnJvcl9pbm9kZV9ibG9jayhpbm9kZSwgaWxvYy5iaC1cXHUwMDNlYl9ibG9ja25yLCBFSU8sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiSU8gZXJyb3Igc3luY2luZyBpbm9kZVxcXCIpO1xcbi1cXHRcXHRcXHRlcnIgPSAtRUlPO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGJyZWxzZShpbG9jLmJoKTtcXG4raW50IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4re1xcbitcXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XFxuK1xcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0LyogV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaW4gbm9qb3VybmFsIG1vZGUgKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRShFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19qb3VybmFsKSlcXG4rXFx0XFx0cmV0dXJuIC1FRlNDT1JSVVBURUQ7XFxuK1xcbitcXHRlcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdHN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGlsb2MuYmgpKSB7XFxuK1xcdFxcdGV4dDRfZXJyb3JfaW5vZGVfYmxvY2soaW5vZGUsIGlsb2MuYmgtXFx1MDAzZWJfYmxvY2tuciwgRUlPLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIklPIGVycm9yIHN5bmNpbmcgaW5vZGVcXFwiKTtcXG4rXFx0XFx0ZXJyID0gLUVJTztcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4rXFx0bW1iID0gUkVBRF9PTkNFKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0aWYgKG1tYilcXG4rXFx0XFx0ZXJyID0gbW1iX3N5bmMobW1iKTtcXG4rb3V0OlxcbitcXHRicmVsc2UoaWxvYy5iaCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xcbmluZGV4IDI0NWY2N2QxMGRlZDM0Li45MGQ2ZDZiODg2NzMwMiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcXG5AQCAtMTQzMCw3ICsxNDMwLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRJTklUX1dPUksoXFx1MDAyNmVpLVxcdTAwM2VpX3Jzdl9jb252ZXJzaW9uX3dvcmssIGV4dDRfZW5kX2lvX3Jzdl93b3JrKTtcXG4gXFx0ZXh0NF9mY19pbml0X2lub2RlKFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlKTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmVpLVxcdTAwM2VpX2ZjX2xvY2spO1xcbi1cXHRtbWJfaW5pdChcXHUwMDI2ZWktXFx1MDAzZWlfbWV0YWRhdGFfYmhzLCBcXHUwMDI2ZWktXFx1MDAzZXZmc19pbm9kZS5pX2RhdGEpO1xcbitcXHRlaS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMgPSBOVUxMO1xcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4gXFx0bG9ja2RlcF9zZXRfc3ViY2xhc3MoXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtLCBJX0RBVEFfU0VNX05PUk1BTCk7XFxuICNlbmRpZlxcbkBAIC0xNDUxLDYgKzE0NTEsNyBAQCBzdGF0aWMgaW50IGV4dDRfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBzdGF0aWMgdm9pZCBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdGZzY3J5cHRfZnJlZV9pbm9kZShpbm9kZSk7XFxuK1xcdGtmcmVlKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4gXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjYoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9mY19saXN0KSkpIHtcXG4gXFx0XFx0cHJfd2FybihcXFwiJXM6IGlub2RlICVsbHUgc3RpbGwgaW4gZmMgbGlzdFxcXCIsXFxuIFxcdFxcdFxcdF9fZnVuY19fLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbkBAIC0xNTMwLDggKzE1MzEsOCBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZClcXG4gdm9pZCBleHQ0X2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0ZXh0NF9mY19kZWwoaW5vZGUpO1xcbi1cXHRpZiAoIUVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2pvdXJuYWwpXFxuLVxcdFxcdG1tYl9pbnZhbGlkYXRlKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdGlmIChFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocylcXG4rXFx0XFx0bW1iX2ludmFsaWRhdGUoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbiBcXHRjbGVhcl9pbm9kZShpbm9kZSk7XFxuIFxcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XFxuIFxcdC8qXFxuQEAgLTE2MDUsOSArMTYwNiwxMyBAQCBzdGF0aWMgaW50IGV4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0ge1xcbiBcXHRcXHQuc3luY19tb2RlID0gV0JfU1lOQ19BTExcXG4gXFx0fTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdHRyYWNlX2V4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShpbm9kZSk7XFxuLVxcdHJldHVybiBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCBcXHUwMDI2d2JjKTtcXG4rXFx0cmV0ID0gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgXFx1MDAyNndiYyk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRyZXQgPSBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIFxcdTAwMjZ3YmMpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX1FVT1RBXFxuQEAgLTE2NjQsNiArMTY2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7XFxuIFxcdC5mcmVlX2lub2RlXFx0PSBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZSxcXG4gXFx0LmRlc3Ryb3lfaW5vZGVcXHQ9IGV4dDRfZGVzdHJveV9pbm9kZSxcXG4gXFx0LndyaXRlX2lub2RlXFx0PSBleHQ0X3dyaXRlX2lub2RlLFxcbitcXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YSxcXG4gXFx0LmRpcnR5X2lub2RlXFx0PSBleHQ0X2RpcnR5X2lub2RlLFxcbiBcXHQuZHJvcF9pbm9kZVxcdD0gZXh0NF9kcm9wX2lub2RlLFxcbiBcXHQuZXZpY3RfaW5vZGVcXHQ9IGV4dDRfZXZpY3RfaW5vZGUsXFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9kaXIuYyBiL2ZzL2ZhdC9kaXIuY1xcbmluZGV4IDRmNmY0MmYzMzYxM2RmLi5kMzNiZjM0YmRjZTc1ZiAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvZGlyLmNcXG4rKysgYi9mcy9mYXQvZGlyLmNcXG5AQCAtMTAyOCw4ICsxMDI4LDYgQEAgc3RhdGljIGludCBfX2ZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgbG9mZl90IHBvcywgaW50IG5yX3Nsb3RzKVxcbiBcXHRcXHRcXHRucl9zbG90cy0tO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNk1TRE9TX0koZGlyKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRcXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxcbi1cXHRcXHRcXHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuIFxcdFxcdGJyZWxzZShiaCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xMDYzLDggKzEwNjEsNiBAQCBpbnQgZmF0X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZmF0X3Nsb3RfaW5mbyAqc2luZm8pXFxuIFxcdFxcdG5yX3Nsb3RzLS07XFxuIFxcdH1cXG4gXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2TVNET1NfSShkaXIpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuLVxcdGlmIChJU19ESVJTWU5DKGRpcikpXFxuLVxcdFxcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcXG4gXFx0YnJlbHNlKGJoKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMTA4NCwxMCArMTA4MCw5IEBAIGludCBmYXRfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBmYXRfc2xvdF9pbmZvICpzaW5mbylcXG4gXFx0fVxcbiBcXG4gXFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0FUSU1FIHwgRkFUX1VQREFURV9DTVRJTUUpO1xcbitcXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XFxuIFxcdGlmIChJU19ESVJTWU5DKGRpcikpXFxuLVxcdFxcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XFxuLVxcdGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xcbitcXHRcXHRzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0xMTE5LDIxICsxMTE0LDExIEBAIHN0YXRpYyBpbnQgZmF0X3plcm9lZF9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqZGlyLCBzZWN0b3JfdCBibGtuciwgaW50IG5yX3VzZWQsXFxuIFxcdFxcdG4rKztcXG4gXFx0XFx0YmxrbnIrKztcXG4gXFx0XFx0aWYgKG4gPT0gbnJfYmhzKSB7XFxuLVxcdFxcdFxcdGlmIChJU19ESVJTWU5DKGRpcikpIHtcXG4tXFx0XFx0XFx0XFx0ZXJyID0gZmF0X3N5bmNfYmhzKGJocywgbik7XFxuLVxcdFxcdFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuLVxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG47IGkrKylcXG4gXFx0XFx0XFx0XFx0YnJlbHNlKGJoc1tpXSk7XFxuIFxcdFxcdFxcdG4gPSAwO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0aWYgKElTX0RJUlNZTkMoZGlyKSkge1xcbi1cXHRcXHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBlcnJvcjtcXG4tXFx0fVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbjsgaSsrKVxcbiBcXHRcXHRicmVsc2UoYmhzW2ldKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaFxcbmluZGV4IDk5ZWQ5MjI4YTY3N2JlLi5kY2I1YmE3NTcwNzNlZCAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvZmF0LmhcXG4rKysgYi9mcy9mYXQvZmF0LmhcXG5AQCAtNDIxLDcgKzQyMSw2IEBAIGV4dGVybiB2b2lkIGZhdF9kZXRhY2goc3RydWN0IGlub2RlICppbm9kZSk7XFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBpX3Bvcyk7XFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9idWlsZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSwgbG9mZl90IGlfcG9zKTtcXG4tZXh0ZXJuIGludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gZXh0ZXJuIGludCBmYXRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIFxcdFxcdFxcdCAgdm9pZCAoKnNldHVwKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKikpO1xcbiBleHRlcm4gaW50IGZhdF9maWxsX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2ZpbGUuYyBiL2ZzL2ZhdC9maWxlLmNcXG5pbmRleCAzN2U3MDQ5YjRjOGM0NC4uMWM4MzVjYTVmMjFhNTEgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L2ZpbGUuY1xcbisrKyBiL2ZzL2ZhdC9maWxlLmNcXG5AQCAtMTkwLDggKzE5MCw3IEBAIGludCBmYXRfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuIFxcdHN0cnVjdCBpbm9kZSAqZmF0X2lub2RlID0gTVNET1NfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VmYXRfaW5vZGU7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRlcnIgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxwLCBcXHUwMDI2TVNET1NfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzLFxcbi1cXHRcXHRcXHRcXHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XFxuK1xcdGVyciA9IHNpbXBsZV9mc3luY19ub2ZsdXNoKGZpbHAsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTMzMiwxNSArMzMxLDE1IEBAIHN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXFxuIFxcdH1cXG4gXFx0TVNET1NfSShpbm9kZSktXFx1MDAzZWlfYXR0cnMgfD0gQVRUUl9BUkNIO1xcbiBcXHRmYXRfdHJ1bmNhdGVfdGltZShpbm9kZSwgTlVMTCwgRkFUX1VQREFURV9DTVRJTUUpO1xcbitcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4gXFx0aWYgKHdhaXQpIHtcXG4tXFx0XFx0ZXJyID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xcbitcXHRcXHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG4gXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRNU0RPU19JKGlub2RlKS1cXHUwMDNlaV9zdGFydCA9IGlfc3RhcnQ7XFxuIFxcdFxcdFxcdE1TRE9TX0koaW5vZGUpLVxcdTAwM2VpX2xvZ3N0YXJ0ID0gaV9sb2dzdGFydDtcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbi1cXHR9IGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIFdyaXRlIGEgbmV3IEVPRiwgYW5kIGdldCB0aGUgcmVtYWluaW5nIGNsdXN0ZXIgY2hhaW4gZm9yIGZyZWVpbmcuICovXFxuIFxcdGlmIChza2lwKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9pbm9kZS5jIGIvZnMvZmF0L2lub2RlLmNcXG5pbmRleCAzYWE1MjQ4MWFkNWNmMy4uYzRiNGNjYWEwOTFhYTcgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L2lub2RlLmNcXG4rKysgYi9mcy9mYXQvaW5vZGUuY1xcbkBAIC02MjMsNyArNjIzLDM3IEBAIHN0cnVjdCBpbm9kZSAqZmF0X2J1aWxkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcbiBFWFBPUlRfU1lNQk9MX0dQTChmYXRfYnVpbGRfaW5vZGUpO1xcbiBcXG4tc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCk7XFxuK3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcbitzdGF0aWMgaW50IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbit7XFxuK1xcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuK1xcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuK1xcdGxvZmZfdCBpX3BvcztcXG4rXFx0c2VjdG9yX3QgYmxvY2tucjtcXG4rXFx0aW50IG9mZnNldDtcXG4rXFxuK1xcdGlmIChpbm9kZS1cXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpX3BvcyA9IGZhdF9pX3Bvc19yZWFkKHNiaSwgaW5vZGUpO1xcbitcXHRpZiAoIWlfcG9zKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZhdF9nZXRfYmxrbnJfb2Zmc2V0KHNiaSwgaV9wb3MsIFxcdTAwMjZibG9ja25yLCBcXHUwMDI2b2Zmc2V0KTtcXG4rXFx0YmggPSBzYl9maW5kX2dldF9ibG9ja19ub25hdG9taWMoaW5vZGUtXFx1MDAzZWlfc2IsIGJsb2NrbnIpO1xcbitcXHQvKlxcbitcXHQgKiBCdWZmZXIgYWxyZWFkeSB3cml0dGVuPyBXZSBsZWF2ZSBidWZmZXJfZGlydHkgY2hlY2sgZm9yXFxuK1xcdCAqIHN5bmNfZGlydHlfYnVmZmVyKCkgZm9yIHByb3BlciBzeW5jaHJvbml6YXRpb24gd2l0aCBvbmdvaW5nIElPLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFiaCB8fCAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbitcXHRcXHRicmVsc2UoYmgpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuK1xcdGJyZWxzZShiaCk7XFxuK1xcdHJldHVybiBtbWJfc3luYyhcXHUwMDI2TVNET1NfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rfVxcbiBcXG4gc3RhdGljIHZvaWQgZmF0X2ZyZWVfZW9mYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG5AQCAtNjQwLDcgKzY3MCwxMyBAQCBzdGF0aWMgdm9pZCBmYXRfZnJlZV9lb2ZibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0ICogYW55IGNvcnJ1cHRpb24gb24gdGhlIG5leHQgYWNjZXNzIHRvIHRoZSBjbHVzdGVyXFxuIFxcdFxcdCAqIGNoYWluIGZvciB0aGUgZmlsZS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XFxuK1xcdFxcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlKTtcXG4rXFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcXG4rXFx0XFx0XFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcXG4rXFx0XFx0XFx0XFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMLFxcbitcXHRcXHRcXHR9O1xcbitcXHRcXHRcXHRlcnIgPSBmYXRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgXFx1MDAyNndiYyk7XFxuK1xcdFxcdH1cXG4gXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRmYXRfbXNnKGlub2RlLVxcdTAwM2VpX3NiLCBLRVJOX1dBUk5JTkcsIFxcXCJGYWlsZWQgdG8gXFxcIlxcbiBcXHRcXHRcXHRcXHRcXHRcXFwidXBkYXRlIG9uIGRpc2sgaW5vZGUgZm9yIHVudXNlZCBcXFwiXFxuQEAgLTg1NCw3ICs4OTAsNyBAQCBzdGF0aWMgaW50IGZhdF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcXG4rc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4gXFx0c3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSA9IE1TRE9TX1NCKHNiKTtcXG5AQCAtODYzLDcgKzg5OSw3IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXFxuIFxcdHN0cnVjdCB0aW1lc3BlYzY0IG10aW1lO1xcbiBcXHRsb2ZmX3QgaV9wb3M7XFxuIFxcdHNlY3Rvcl90IGJsb2NrbnI7XFxuLVxcdGludCBlcnIsIG9mZnNldDtcXG4rXFx0aW50IG9mZnNldDtcXG4gXFxuIFxcdGlmIChpbm9kZS1cXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC05MDcsMTEgKzk0Myw5IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXFxuIFxcdH1cXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiaS1cXHUwMDNlaW5vZGVfaGFzaF9sb2NrKTtcXG4gXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbi1cXHRlcnIgPSAwO1xcbi1cXHRpZiAod2FpdClcXG4tXFx0XFx0ZXJyID0gc3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbiBcXHRicmVsc2UoYmgpO1xcbi1cXHRyZXR1cm4gZXJyO1xcbitcXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbkBAIC05MjUsMjMgKzk1OSwxNyBAQCBzdGF0aWMgaW50IGZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4gXFx0XFx0ZXJyID0gZmF0X2NsdXN0ZXJzX2ZsdXNoKHNiKTtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZNU0RPU19TQihzYiktXFx1MDAzZXNfbG9jayk7XFxuIFxcdH0gZWxzZVxcbi1cXHRcXHRlcnIgPSBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgd2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpO1xcbitcXHRcXHRlcnIgPSBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSk7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1pbnQgZmF0X3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4te1xcbi1cXHRyZXR1cm4gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUsIDEpO1xcbi19XFxuLVxcbi1FWFBPUlRfU1lNQk9MX0dQTChmYXRfc3luY19pbm9kZSk7XFxuLVxcbiBzdGF0aWMgaW50IGZhdF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTtcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGZhdF9zb3BzID0ge1xcbiBcXHQuYWxsb2NfaW5vZGVcXHQ9IGZhdF9hbGxvY19pbm9kZSxcXG4gXFx0LmZyZWVfaW5vZGVcXHQ9IGZhdF9mcmVlX2lub2RlLFxcbiBcXHQud3JpdGVfaW5vZGVcXHQ9IGZhdF93cml0ZV9pbm9kZSxcXG4rXFx0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBmYXRfc3luY19pbm9kZV9tZXRhZGF0YSxcXG4gXFx0LmV2aWN0X2lub2RlXFx0PSBmYXRfZXZpY3RfaW5vZGUsXFxuIFxcdC5wdXRfc3VwZXJcXHQ9IGZhdF9wdXRfc3VwZXIsXFxuIFxcdC5zdGF0ZnNcXHRcXHQ9IGZhdF9zdGF0ZnMsXFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jXFxuaW5kZXggMzAyN2VmNTNhZjIxNGMuLmJlMThmNmI1ODE5YmE3IDEwMDY0NFxcbi0tLSBhL2ZzL2ZhdC9taXNjLmNcXG4rKysgYi9mcy9mYXQvbWlzYy5jXFxuQEAgLTE0NiwxNiArMTQ2LDE3IEBAIGludCBmYXRfY2hhaW5fYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZGNsdXMsIGludCBucl9jbHVzdGVyKVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRNU0RPU19JKGlub2RlKS1cXHUwMDNlaV9zdGFydCA9IG5ld19kY2x1cztcXG4gXFx0XFx0TVNET1NfSShpbm9kZSktXFx1MDAzZWlfbG9nc3RhcnQgPSBuZXdfZGNsdXM7XFxuK1xcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBTaW5jZSBnZW5lcmljX3dyaXRlX3N5bmMoKSBzeW5jaHJvbml6ZXMgcmVndWxhciBmaWxlcyBsYXRlcixcXG4gXFx0XFx0ICogd2Ugc3luYyBoZXJlIG9ubHkgZGlyZWN0b3JpZXMuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiBJU19ESVJTWU5DKGlub2RlKSkge1xcbi1cXHRcXHRcXHRyZXQgPSBmYXRfc3luY19pbm9kZShpbm9kZSk7XFxuK1xcdFxcdFxcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xcbiBcXHRcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRcXHR9IGVsc2VcXG4tXFx0XFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdH1cXG4gXFx0aWYgKG5ld19mY2x1cyAhPSAoaW5vZGUtXFx1MDAzZWlfYmxvY2tzIFxcdTAwM2VcXHUwMDNlIChzYmktXFx1MDAzZWNsdXN0ZXJfYml0cyAtIDkpKSkge1xcbiBcXHRcXHRmYXRfZnNfZXJyb3JfcmF0ZWxpbWl0KFxcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfbXNkb3MuYyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXFxuaW5kZXggMGZkMjk3MWFkNGIxMzEuLjQ3MmJkODQ3ZWY5Y2JiIDEwMDY0NFxcbi0tLSBhL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXFxuKysrIGIvZnMvZmF0L25hbWVpX21zZG9zLmNcXG5AQCAtMjUyLDEwICsyNTIsOSBAQCBzdGF0aWMgaW50IG1zZG9zX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdGZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTtcXG4rXFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xcbiBcXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxcbi1cXHRcXHQodm9pZClmYXRfc3luY19pbm9kZShkaXIpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG4rXFx0XFx0c3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNDczLDIxICs0NzIsMjEgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSxcXG4gXFx0XFx0XFx0XFx0TVNET1NfSShvbGRfaW5vZGUpLVxcdTAwM2VpX2F0dHJzIHw9IEFUVFJfSElEREVOO1xcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdE1TRE9TX0kob2xkX2lub2RlKS1cXHUwMDNlaV9hdHRycyBcXHUwMDI2PSB+QVRUUl9ISURERU47XFxuK1xcdFxcdFxcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcXG4gXFx0XFx0XFx0aWYgKElTX0RJUlNZTkMob2xkX2RpcikpIHtcXG4tXFx0XFx0XFx0XFx0ZXJyID0gZmF0X3N5bmNfaW5vZGUob2xkX2lub2RlKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShvbGRfaW5vZGUsIDEpO1xcbiBcXHRcXHRcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdFxcdFxcdE1TRE9TX0kob2xkX2lub2RlKS1cXHUwMDNlaV9hdHRycyA9IG9sZF9hdHRycztcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0fSBlbHNlXFxuLVxcdFxcdFxcdFxcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcXG4rXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0aW5vZGVfaW5jX2l2ZXJzaW9uKG9sZF9kaXIpO1xcbiBcXHRcXHRcXHRmYXRfdHJ1bmNhdGVfdGltZShvbGRfZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0NNVElNRSk7XFxuK1xcdFxcdFxcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XFxuIFxcdFxcdFxcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKVxcbi1cXHRcXHRcXHRcXHQodm9pZClmYXRfc3luY19pbm9kZShvbGRfZGlyKTtcXG4rXFx0XFx0XFx0XFx0c3luY19pbm9kZV9tZXRhZGF0YShvbGRfZGlyLCAxKTtcXG4gXFx0XFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRcXHRtYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTUxOCwyNiArNTE3LDIxIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXFxuIFxcdFxcdE1TRE9TX0kob2xkX2lub2RlKS1cXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRNU0RPU19JKG9sZF9pbm9kZSktXFx1MDAzZWlfYXR0cnMgXFx1MDAyNj0gfkFUVFJfSElEREVOO1xcbi1cXHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xcbi1cXHRcXHRlcnIgPSBmYXRfc3luY19pbm9kZShvbGRfaW5vZGUpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRnb3RvIGVycm9yX2lub2RlO1xcbi1cXHR9IGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xcbi1cXG4gXFx0aWYgKHVwZGF0ZV9kb3Rkb3QpIHtcXG4gXFx0XFx0ZmF0X3NldF9zdGFydChkb3Rkb3RfZGUsIE1TRE9TX0kobmV3X2RpciktXFx1MDAzZWlfbG9nc3RhcnQpO1xcbiBcXHRcXHRtbWJfbWFya19idWZmZXJfZGlydHkoZG90ZG90X2JoLFxcbiBcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2TVNET1NfSShvbGRfaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuLVxcdFxcdGlmIChJU19ESVJTWU5DKG5ld19kaXIpKSB7XFxuLVxcdFxcdFxcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XFxuLVxcdFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdFxcdGdvdG8gZXJyb3JfZG90ZG90O1xcbi1cXHRcXHR9XFxuIFxcdFxcdGRyb3Bfbmxpbmsob2xkX2Rpcik7XFxuIFxcdFxcdGlmICghbmV3X2lub2RlKVxcbiBcXHRcXHRcXHRpbmNfbmxpbmsobmV3X2Rpcik7XFxuIFxcdH1cXG4rXFx0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xcbitcXHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xcbitcXHRcXHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9pbm9kZSwgMSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZXJyb3JfZG90ZG90O1xcbitcXHR9XFxuK1xcbiBcXG4gXFx0ZXJyID0gZmF0X3JlbW92ZV9lbnRyaWVzKG9sZF9kaXIsIFxcdTAwMjZvbGRfc2luZm8pO1xcdC8qIGFuZCByZWxlYXNlcyBiaCAqL1xcbiBcXHRvbGRfc2luZm8uYmggPSBOVUxMO1xcbkBAIC01NDUsMTAgKzUzOSw5IEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXFxuIFxcdFxcdGdvdG8gZXJyb3JfZG90ZG90O1xcbiBcXHRpbm9kZV9pbmNfaXZlcnNpb24ob2xkX2Rpcik7XFxuIFxcdGZhdF90cnVuY2F0ZV90aW1lKG9sZF9kaXIsIFxcdTAwMjZ0cywgRkFUX1VQREFURV9DTVRJTUUpO1xcbitcXHRtYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpO1xcbiBcXHRpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSlcXG4tXFx0XFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUob2xkX2Rpcik7XFxuLVxcdGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcXG4rXFx0XFx0c3luY19pbm9kZV9tZXRhZGF0YShvbGRfZGlyLCAxKTtcXG4gXFxuIFxcdGlmIChuZXdfaW5vZGUpIHtcXG4gXFx0XFx0ZHJvcF9ubGluayhuZXdfaW5vZGUpO1xcbkBAIC01NzEsMTQgKzU2NCwxMyBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxcbiBcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2TVNET1NfSShvbGRfaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuIFxcdFxcdGNvcnJ1cHQgfD0gc3luY19kaXJ0eV9idWZmZXIoZG90ZG90X2JoKTtcXG4gXFx0fVxcbi1lcnJvcl9pbm9kZTpcXG4gXFx0ZmF0X2RldGFjaChvbGRfaW5vZGUpO1xcbiBcXHRmYXRfYXR0YWNoKG9sZF9pbm9kZSwgb2xkX3NpbmZvLmlfcG9zKTtcXG4gXFx0TVNET1NfSShvbGRfaW5vZGUpLVxcdTAwM2VpX2F0dHJzID0gb2xkX2F0dHJzO1xcbiBcXHRpZiAobmV3X2lub2RlKSB7XFxuIFxcdFxcdGZhdF9hdHRhY2gobmV3X2lub2RlLCBuZXdfaV9wb3MpO1xcbiBcXHRcXHRpZiAoY29ycnVwdClcXG4tXFx0XFx0XFx0Y29ycnVwdCB8PSBmYXRfc3luY19pbm9kZShuZXdfaW5vZGUpO1xcbitcXHRcXHRcXHRjb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogSWYgbmV3IGVudHJ5IHdhcyBub3Qgc2hhcmluZyB0aGUgZGF0YSBjbHVzdGVyLCBpdFxcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xcbmluZGV4IGU5MDk0NDc4NzNlMzY0Li43MzJhYmYwNzJmZGQzYiAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvbmFtZWlfdmZhdC5jXFxuKysrIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xcbkBAIC02NzgsMTAgKzY3OCw5IEBAIHN0YXRpYyBpbnQgdmZhdF9hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxbmFtZSxcXG4gXFxuIFxcdC8qIHVwZGF0ZSB0aW1lc3RhbXAgKi9cXG4gXFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpO1xcbitcXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XFxuIFxcdGlmIChJU19ESVJTWU5DKGRpcikpXFxuLVxcdFxcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XFxuLVxcdGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xcbitcXHRcXHRzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7XFxuIGNsZWFudXA6XFxuIFxcdGtmcmVlKHNsb3RzKTtcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtOTA0LDkgKzkwMyw5IEBAIHN0YXRpYyBpbnQgdmZhdF9nZXRfZG90ZG90X2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLFxcbiBcXG4gc3RhdGljIGludCB2ZmF0X3N5bmNfaXBvcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSlcXG4ge1xcbi1cXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxcbi1cXHRcXHRyZXR1cm4gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xcbiBcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcXG4rXFx0XFx0cmV0dXJuIHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtOTI1LDEwICs5MjQsOSBAQCBzdGF0aWMgdm9pZCB2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4ge1xcbiBcXHRpbm9kZV9pbmNfaXZlcnNpb24oZGlyKTtcXG4gXFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpO1xcbitcXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XFxuIFxcdGlmIChJU19ESVJTWU5DKGRpcikpXFxuLVxcdFxcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XFxuLVxcdGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xcbitcXHRcXHRzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbkBAIC0xMDI1LDcgKzEwMjMsNyBAQCBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4gXFx0aWYgKG5ld19pbm9kZSkge1xcbiBcXHRcXHRmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTtcXG4gXFx0XFx0aWYgKGNvcnJ1cHQpXFxuLVxcdFxcdFxcdGNvcnJ1cHQgfD0gZmF0X3N5bmNfaW5vZGUobmV3X2lub2RlKTtcXG4rXFx0XFx0XFx0Y29ycnVwdCB8PSBzeW5jX2lub2RlX21ldGFkYXRhKG5ld19pbm9kZSwgMSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIG5ldyBlbnRyeSB3YXMgbm90IHNoYXJpbmcgdGhlIGRhdGEgY2x1c3RlciwgaXRcXG5kaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suY1xcbmluZGV4IGZkYjg3NjZkMjc1YTE3Li45ZDk2MzU3NzMxYTNkNCAxMDA2NDRcXG4tLS0gYS9mcy9mcy13cml0ZWJhY2suY1xcbisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jXFxuQEAgLTE4NTEsNiArMTg1MSwyMiBAQCBfX3dyaXRlYmFja19zaW5nbGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIFxcdFxcdGlmIChyZXQgPT0gMClcXG4gXFx0XFx0XFx0cmV0ID0gZXJyO1xcbiBcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBEbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPIHBvc3NpYmx5IHN1Ym1pdHRlZFxcbitcXHQgKiBieSBwcmV2aW91cyBXQl9TWU5DX05PTkUgd3JpdGViYWNrP1xcbitcXHQgKi9cXG4rXFx0aWYgKHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMIFxcdTAwMjZcXHUwMDI2ICF3YmMtXFx1MDAzZWZvcl9zeW5jIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9NRVRBREFUQV9XUklURUJBQ0spIHtcXG4rXFx0XFx0aW50IGVycjtcXG4rXFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuK1xcdFxcdGlub2RlX3N0YXRlX2NsZWFyKGlub2RlLCBJX01FVEFEQVRBX1dSSVRFQkFDSyk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4rXFx0XFx0ZXJyID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfb3AtXFx1MDAzZXN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIHdiYyk7XFxuK1xcdFxcdGlmIChyZXQgPT0gMClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHR9XFxuIFxcdHdiYy1cXHUwMDNldW5waW5uZWRfbmV0ZnNfd2IgPSBmYWxzZTtcXG4gXFx0dHJhY2Vfd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjLCBucl90b193cml0ZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTE4OTIsMTQgKzE5MDgsMTcgQEAgc3RhdGljIGludCB3cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRoZSBpbm9kZSBpcyBhbHJlYWR5IGZ1bGx5IGNsZWFuLCB0aGVuIHRoZXJlJ3Mgbm90aGluZyB0byBkby5cXG4gXFx0ICpcXG4tXFx0ICogRm9yIGRhdGEtaW50ZWdyaXR5IHN5bmNzIHdlIGFsc28gbmVlZCB0byBjaGVjayB3aGV0aGVyIGFueSBwYWdlcyBhcmVcXG4tXFx0ICogc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkUgd3JpdGViYWNrLiAgSWZcXG4tXFx0ICogdGhlcmUgYXJlIGFueSBzdWNoIHBhZ2VzLCB3ZSdsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uXFxuK1xcdCAqIEZvciBkYXRhLWludGVncml0eSBzeW5jcyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZm9saW9zIG9yXFxuK1xcdCAqIG1ldGFkYXRhIGFyZSBzdGlsbCB1bmRlciB3cml0ZWJhY2ssIGUuZy4gZHVlIHRvIHByaW9yIFdCX1NZTkNfTk9ORVxcbitcXHQgKiB3cml0ZWJhY2suIElmIHRoZXJlLCB3ZSdsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uXFxuIFxcdCAqL1xcbi1cXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfRElSVFlfQUxMKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKHdiYy1cXHUwMDNlc3luY19tb2RlICE9IFdCX1NZTkNfQUxMIHx8XFxuLVxcdCAgICAgIW1hcHBpbmdfdGFnZ2VkKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSkpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfRElSVFlfQUxMKSkge1xcbitcXHRcXHRpZiAod2JjLVxcdTAwM2VzeW5jX21vZGUgIT0gV0JfU1lOQ19BTEwpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRpZiAoIW1hcHBpbmdfdGFnZ2VkKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfTUVUQURBVEFfV1JJVEVCQUNLKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4gXFx0aW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX1NZTkMpO1xcbiBcXHR3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUod2JjLCBpbm9kZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuY1xcbmluZGV4IDVhMGQyNzYzNzlkMTNiLi41N2U1OTcxYjYzMzE5NyAxMDA2NDRcXG4tLS0gYS9mcy9saWJmcy5jXFxuKysrIGIvZnMvbGliZnMuY1xcbkBAIC0xNTU5LDkgKzE1NTksMTAgQEAgaW50IHNpbXBsZV9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ESVJUWV9BTEwpKVxcbitcXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgKElfRElSVFlfQUxMIHwgSV9TWU5DKSkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRpZiAoZGF0YXN5bmMgXFx1MDAyNlxcdTAwMjYgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQykpXFxuK1xcdGlmIChkYXRhc3luYyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgKElfRElSVFlfREFUQVNZTkMgfCBJX1NZTkMpKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZGlyLmMgYi9mcy9taW5peC9kaXIuY1xcbmluZGV4IDM2MWQyNmQ4N2QyZTJkLi4yY2ExNmY4NDlkNWFjMCAxMDA2NDRcXG4tLS0gYS9mcy9taW5peC9kaXIuY1xcbisrKyBiL2ZzL21pbml4L2Rpci5jXFxuQEAgLTIzLDcgKzIzLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfb3BlcmF0aW9ucyA9IHtcXG4gXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4gXFx0LnJlYWRcXHRcXHQ9IGdlbmVyaWNfcmVhZF9kaXIsXFxuIFxcdC5pdGVyYXRlX3NoYXJlZFxcdD0gbWluaXhfcmVhZGRpcixcXG4tXFx0LmZzeW5jXFx0XFx0PSBtaW5peF9mc3luYyxcXG4rXFx0LmZzeW5jXFx0XFx0PSBzaW1wbGVfZnN5bmMsXFxuIH07XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9mcy9taW5peC9maWxlLmMgYi9mcy9taW5peC9maWxlLmNcXG5pbmRleCA4NmU1OTQzY2QyZmY3NC4uMDJhYWJiZGI1ZGVhYTAgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXFxuKysrIGIvZnMvbWluaXgvZmlsZS5jXFxuQEAgLTEwLDEzICsxMCw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwibWluaXguaFxcXCJcXG4gXFxuLWludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuLXtcXG4tXFx0cmV0dXJuIG1tYl9mc3luYyhmaWxlLFxcbi1cXHRcXHRcXHRcXHUwMDI2bWluaXhfaShmaWxlLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWhvc3QpLVxcdTAwM2VpX21ldGFkYXRhX2JocyxcXG4tXFx0XFx0XFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yXFxuICAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLlxcbkBAIC0yNiw3ICsxOSw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zID0ge1xcbiBcXHQucmVhZF9pdGVyXFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxcbiBcXHQud3JpdGVfaXRlclxcdD0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsXFxuIFxcdC5tbWFwX3ByZXBhcmVcXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXFxuLVxcdC5mc3luY1xcdFxcdD0gbWluaXhfZnN5bmMsXFxuK1xcdC5mc3luY1xcdFxcdD0gc2ltcGxlX2ZzeW5jLFxcbiBcXHQuc3BsaWNlX3JlYWRcXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xcbmluZGV4IGMzMGNjNTkwNjk4ZDZmLi45NTI2N2Q5M2VmMzlkZiAxMDA2NDRcXG4tLS0gYS9mcy9taW5peC9pbm9kZS5jXFxuKysrIGIvZnMvbWluaXgvaW5vZGUuY1xcbkBAIC0yNCw2ICsyNCw4IEBAXFxuIFxcbiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcXG4rc3RhdGljIGludCBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xcbiBzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpO1xcbiBcXG4gdm9pZCBfX21pbml4X2Vycm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLFxcbkBAIC0xMjgsNiArMTMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1pbml4X3NvcHMgPSB7XFxuIFxcdC5hbGxvY19pbm9kZVxcdD0gbWluaXhfYWxsb2NfaW5vZGUsXFxuIFxcdC5mcmVlX2lub2RlXFx0PSBtaW5peF9mcmVlX2luX2NvcmVfaW5vZGUsXFxuIFxcdC53cml0ZV9pbm9kZVxcdD0gbWluaXhfd3JpdGVfaW5vZGUsXFxuK1xcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSxcXG4gXFx0LmV2aWN0X2lub2RlXFx0PSBtaW5peF9ldmljdF9pbm9kZSxcXG4gXFx0LnB1dF9zdXBlclxcdD0gbWluaXhfcHV0X3N1cGVyLFxcbiBcXHQuc3RhdGZzXFx0XFx0PSBtaW5peF9zdGF0ZnMsXFxuQEAgLTYzMCw3ICs2MzMsNyBAQCBzdHJ1Y3QgaW5vZGUgKm1pbml4X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXFxuIC8qXFxuICAqIFRoZSBtaW5peCBWMSBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSBhbiBpbm9kZS5cXG4gICovXFxuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuK3N0YXRpYyBpbnQgVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoO1xcbiBcXHRzdHJ1Y3QgbWluaXhfaW5vZGUgKiByYXdfaW5vZGU7XFxuQEAgLTYzOSw3ICs2NDIsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiBcXG4gXFx0cmF3X2lub2RlID0gbWluaXhfVjFfcmF3X2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBpbm9kZS1cXHUwMDNlaV9pbm8sIFxcdTAwMjZiaCk7XFxuIFxcdGlmICghcmF3X2lub2RlKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdHJhd19pbm9kZS1cXHUwMDNlaV9tb2RlID0gaW5vZGUtXFx1MDAzZWlfbW9kZTtcXG4gXFx0cmF3X2lub2RlLVxcdTAwM2VpX3VpZCA9IGZzX2hpZ2gybG93dWlkKGlfdWlkX3JlYWQoaW5vZGUpKTtcXG4gXFx0cmF3X2lub2RlLVxcdTAwM2VpX2dpZCA9IGZzX2hpZ2gybG93Z2lkKGlfZ2lkX3JlYWQoaW5vZGUpKTtcXG5AQCAtNjUxLDEzICs2NTQsMTUgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYxX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcXG4gXFx0ZWxzZSBmb3IgKGkgPSAwOyBpIFxcdTAwM2MgOTsgaSsrKVxcbiBcXHRcXHRyYXdfaW5vZGUtXFx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVxcdTAwM2V1LmkxX2RhdGFbaV07XFxuIFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4tXFx0cmV0dXJuIGJoO1xcbitcXHRicmVsc2UoYmgpO1xcbitcXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qXFxuICAqIFRoZSBtaW5peCBWMiBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSBhbiBpbm9kZS5cXG4gICovXFxuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuK3N0YXRpYyBpbnQgVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoO1xcbiBcXHRzdHJ1Y3QgbWluaXgyX2lub2RlICogcmF3X2lub2RlO1xcbkBAIC02NjYsNyArNjcxLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcXG4gXFxuIFxcdHJhd19pbm9kZSA9IG1pbml4X1YyX3Jhd19pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUtXFx1MDAzZWlfaW5vLCBcXHUwMDI2YmgpO1xcbiBcXHRpZiAoIXJhd19pbm9kZSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRyYXdfaW5vZGUtXFx1MDAzZWlfbW9kZSA9IGlub2RlLVxcdTAwM2VpX21vZGU7XFxuIFxcdHJhd19pbm9kZS1cXHUwMDNlaV91aWQgPSBmc19oaWdoMmxvd3VpZChpX3VpZF9yZWFkKGlub2RlKSk7XFxuIFxcdHJhd19pbm9kZS1cXHUwMDNlaV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7XFxuQEAgLTY4MCwyOSArNjg1LDQwIEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuIFxcdGVsc2UgZm9yIChpID0gMDsgaSBcXHUwMDNjIDEwOyBpKyspXFxuIFxcdFxcdHJhd19pbm9kZS1cXHUwMDNlaV96b25lW2ldID0gbWluaXhfaW5vZGUtXFx1MDAzZXUuaTJfZGF0YVtpXTtcXG4gXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbi1cXHRyZXR1cm4gYmg7XFxuK1xcdGJyZWxzZShiaCk7XFxuK1xcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4re1xcbitcXHRpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpXFxuK1xcdFxcdHJldHVybiBWMV9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xcbitcXHRyZXR1cm4gVjJfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIHtcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuK1xcdHZvaWQgKnJhd19pbm9kZTtcXG4gXFxuIFxcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcXG4tXFx0XFx0YmggPSBWMV9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xcbitcXHRcXHRyYXdfaW5vZGUgPSBtaW5peF9WMV9yYXdfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGlub2RlLVxcdTAwM2VpX2lubywgXFx1MDAyNmJoKTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRiaCA9IFYyX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XFxuLVxcdGlmICghYmgpXFxuK1xcdFxcdHJhd19pbm9kZSA9IG1pbml4X1YyX3Jhd19pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUtXFx1MDAzZWlfaW5vLCBcXHUwMDI2YmgpO1xcbitcXHRpZiAoIXJhd19pbm9kZSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuLVxcdGlmICh3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcXHUwMDI2XFx1MDAyNiBidWZmZXJfZGlydHkoYmgpKSB7XFxuLVxcdFxcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcXG4tXFx0XFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFxcdTAwMjZcXHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7XFxuLVxcdFxcdFxcdHByaW50ayhcXFwiSU8gZXJyb3Igc3luY2luZyBtaW5peCBpbm9kZSBbJXM6JTA4bGx4XVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfaWQsIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLVxcdFxcdFxcdGVyciA9IC1FSU87XFxuLVxcdFxcdH1cXG4rXFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbitcXHRcXHRwcmludGsoXFxcIklPIGVycm9yIHN5bmNpbmcgbWluaXggaW5vZGUgWyVzOiUwOGxseF1cXFxcblxcXCIsXFxuK1xcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2lkLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbiBcXHR9XFxuLVxcdGJyZWxzZSAoYmgpO1xcbitcXHRlcnIgPSBtbWJfc3luYyhcXHUwMDI2bWluaXhfaShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rb3V0OlxcbitcXHRicmVsc2UoYmgpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9mcy91ZGYvZGlyLmMgYi9mcy91ZGYvZGlyLmNcXG5pbmRleCBlYmM5ZjZhMzc5ZmUzYS4uNDI1ZTNjMTYyOTM1MDQgMTAwNjQ0XFxuLS0tIGEvZnMvdWRmL2Rpci5jXFxuKysrIGIvZnMvdWRmL2Rpci5jXFxuQEAgLTE1Nyw2ICsxNTcsNiBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9kaXJfb3BlcmF0aW9ucyA9IHtcXG4gXFx0LnJlYWRcXHRcXHRcXHQ9IGdlbmVyaWNfcmVhZF9kaXIsXFxuIFxcdC5pdGVyYXRlX3NoYXJlZFxcdFxcdD0gdWRmX3JlYWRkaXIsXFxuIFxcdC51bmxvY2tlZF9pb2N0bFxcdFxcdD0gdWRmX2lvY3RsLFxcbi1cXHQuZnN5bmNcXHRcXHRcXHQ9IHVkZl9mc3luYyxcXG4rXFx0LmZzeW5jXFx0XFx0XFx0PSBzaW1wbGVfZnN5bmMsXFxuIFxcdC5zZXRsZWFzZVxcdFxcdD0gZ2VuZXJpY19zZXRsZWFzZSxcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmNcXG5pbmRleCBmN2YxNDIyZGUzMGZhNC4uNTdkMTE2MDZhMmE3NzYgMTAwNjQ0XFxuLS0tIGEvZnMvdWRmL2ZpbGUuY1xcbisrKyBiL2ZzL3VkZi9maWxlLmNcXG5AQCAtMTk4LDEzICsxOTgsNiBAQCBzdGF0aWMgaW50IHVkZl9maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4taW50IHVkZl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuLXtcXG4tXFx0cmV0dXJuIG1tYl9mc3luYyhmaWxlLFxcbi1cXHRcXHRcXHRcXHUwMDI2VURGX0koZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0KS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMsXFxuLVxcdFxcdFxcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4tfVxcbi1cXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZmlsZV9vcGVyYXRpb25zID0ge1xcbiBcXHQucmVhZF9pdGVyXFx0XFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxcbiBcXHQudW5sb2NrZWRfaW9jdGxcXHRcXHQ9IHVkZl9pb2N0bCxcXG5AQCAtMjEyLDcgKzIwNSw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0Lm1tYXBcXHRcXHRcXHQ9IHVkZl9maWxlX21tYXAsXFxuIFxcdC53cml0ZV9pdGVyXFx0XFx0PSB1ZGZfZmlsZV93cml0ZV9pdGVyLFxcbiBcXHQucmVsZWFzZVxcdFxcdD0gdWRmX3JlbGVhc2VfZmlsZSxcXG4tXFx0LmZzeW5jXFx0XFx0XFx0PSB1ZGZfZnN5bmMsXFxuK1xcdC5mc3luY1xcdFxcdFxcdD0gc2ltcGxlX2ZzeW5jLFxcbiBcXHQuc3BsaWNlX3JlYWRcXHRcXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXFxuIFxcdC5zcGxpY2Vfd3JpdGVcXHRcXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXFxuIFxcdC5sbHNlZWtcXHRcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuQEAgLTI1Myw2ICsyNDYsOCBAQCBzdGF0aWMgaW50IHVkZl9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcbiBcXHRzZXRhdHRyX2NvcHkoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlLCBhdHRyKTtcXG4gXFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdGlmIChJU19TWU5DKGlub2RlKSlcXG4rXFx0XFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9mcy91ZGYvaW5vZGUuYyBiL2ZzL3VkZi9pbm9kZS5jXFxuaW5kZXggNjdiY2Y4Mzc1OGM4ZmIuLmQ5OTFhNjcxYzBhNjkxIDEwMDY0NFxcbi0tLSBhL2ZzL3VkZi9pbm9kZS5jXFxuKysrIGIvZnMvdWRmL2lub2RlLmNcXG5AQCAtNTEsOCArNTEsNiBAQFxcbiBzdHJ1Y3QgdWRmX21hcF9ycTtcXG4gXFxuIHN0YXRpYyB1bW9kZV90IHVkZl9jb252ZXJ0X3Blcm1pc3Npb25zKHN0cnVjdCBmaWxlRW50cnkgKik7XFxuLXN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcXG4tc3RhdGljIGludCB1ZGZfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gc3RhdGljIGludCB1ZGZfYWxsb2NfaV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCBzaXplKTtcXG4gc3RhdGljIGludCBpbm9kZV9nZXRibGsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHVkZl9tYXBfcnEgKm1hcCk7XFxuIHN0YXRpYyBpbnQgdWRmX2luc2VydF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uLFxcbkBAIC0xNDIsNyArMTQwLDkgQEAgdm9pZCB1ZGZfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0aWYgKCFpbm9kZS1cXHUwMDNlaV9ubGluaykge1xcbiBcXHRcXHRcXHR3YW50X2RlbGV0ZSA9IDE7XFxuIFxcdFxcdFxcdHVkZl9zZXRzaXplKGlub2RlLCAwKTtcXG4tXFx0XFx0XFx0dWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgSVNfU1lOQyhpbm9kZSkpO1xcbitcXHRcXHRcXHR1ZGZfd3JpdGVfaW5vZGUoaW5vZGUsIE5VTEwpO1xcbitcXHRcXHRcXHRpZiAoSVNfU1lOQyhpbm9kZSkpXFxuK1xcdFxcdFxcdFxcdHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCBOVUxMKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoaWluZm8tXFx1MDAzZWlfYWxsb2NfdHlwZSAhPSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGlub2RlLVxcdTAwM2VpX3NpemUgIT0gaWluZm8tXFx1MDAzZWlfbGVuRXh0ZW50cykge1xcbkBAIC05MzYsOSArOTM2LDEwIEBAIHN0YXRpYyBpbnQgaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB1ZGZfbWFwX3JxICptYXApXFxuIFxcdGlpbmZvLVxcdTAwM2VpX25leHRfYWxsb2NfZ29hbCA9IG5ld2Jsb2NrbnVtICsgMTtcXG4gXFx0aW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpO1xcbiBcXG4tXFx0aWYgKElTX1NZTkMoaW5vZGUpKVxcbi1cXHRcXHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XFxuLVxcdGVsc2VcXG4rXFx0aWYgKElTX1NZTkMoaW5vZGUpKSB7XFxuK1xcdFxcdHVkZl93cml0ZV9pbm9kZShpbm9kZSwgTlVMTCk7XFxuK1xcdFxcdHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCBOVUxMKTtcXG4rXFx0fSBlbHNlXFxuIFxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbiBcXHRyZXQgPSAwO1xcbiBvdXRfZnJlZTpcXG5AQCAtMTMyNiwxMCArMTMyNyw3IEBAIGludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbmV3c2l6ZSlcXG4gXFx0fVxcbiB1cGRhdGVfdGltZTpcXG4gXFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGlub2RlLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSkpO1xcbi1cXHRpZiAoSVNfU1lOQyhpbm9kZSkpXFxuLVxcdFxcdHVkZl9zeW5jX2lub2RlKGlub2RlKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTE3MDUsMTQgKzE3MDMsMjggQEAgdm9pZCB1ZGZfdXBkYXRlX2V4dHJhX3Blcm1zKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVtb2RlX3QgbW9kZSlcXG4gXFx0XFx0aWluZm8tXFx1MDAzZWlfZXh0cmFQZXJtcyB8PSBGRV9QRVJNX09fREVMRVRFO1xcbiB9XFxuIFxcbi1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbitpbnQgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIHtcXG4tXFx0cmV0dXJuIHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcXG4tfVxcbitcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbitcXHRpbnQgZXJyID0gMDtcXG4gXFxuLXN0YXRpYyBpbnQgdWRmX3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4te1xcbi1cXHRyZXR1cm4gdWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgMSk7XFxuK1xcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLFxcbitcXHRcXHRcXHR1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS1cXHUwMDNlaV9zYixcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2VURGX0koaW5vZGUpLVxcdTAwM2VpX2xvY2F0aW9uLCAwKSk7XFxuK1xcdGlmICghYmgpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbitcXHRcXHR1ZGZfd2Fybihpbm9kZS1cXHUwMDNlaV9zYiwgXFxcIklPIGVycm9yIHN5bmNpbmcgdWRmIGlub2RlIFslMDhsbHhdXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4rXFx0XFx0ZXJyID0gLUVJTztcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0ZXJyID0gbW1iX3N5bmMoXFx1MDAyNlVERl9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitvdXQ6XFxuK1xcdGJyZWxzZShiaCk7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHVkZl9hZGp1c3RfdGltZShzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvLCBzdHJ1Y3QgdGltZXNwZWM2NCB0aW1lKVxcbkBAIC0xNzIzLDcgKzE3MzUsNyBAQCBzdGF0aWMgdm9pZCB1ZGZfYWRqdXN0X3RpbWUoc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgdGltZVxcbiBcXHRcXHRpaW5mby1cXHUwMDNlaV9jcnRpbWUgPSB0aW1lO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXFxuK2ludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIHtcXG4gXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBmaWxlRW50cnkgKmZlO1xcbkBAIC0xNzMyLDcgKzE3NDQsNiBAQCBzdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXFxuIFxcdHVpbnQzMl90IHVkZnBlcm1zO1xcbiBcXHR1aW50MTZfdCBpY2JmbGFncztcXG4gXFx0dWludDE2X3QgY3JjbGVuO1xcbi1cXHRpbnQgZXJyID0gMDtcXG4gXFx0c3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbiBcXHR1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XFxuIFxcdHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSShpbm9kZSk7XFxuQEAgLTE5MzcsMTcgKzE5NDgsMTAgQEAgc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxcbiBcXG4gXFx0Lyogd3JpdGUgdGhlIGRhdGEgYmxvY2tzICovXFxuIFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4tXFx0aWYgKGRvX3N5bmMpIHtcXG4tXFx0XFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbi1cXHRcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbi1cXHRcXHRcXHR1ZGZfd2Fybihpbm9kZS1cXHUwMDNlaV9zYiwgXFxcIklPIGVycm9yIHN5bmNpbmcgdWRmIGlub2RlIFslMDhsbHhdXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4tXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4tXFx0XFx0fVxcbi1cXHR9XFxuIFxcdGJyZWxzZShiaCk7XFxuK1xcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xcbiBcXG4tXFx0cmV0dXJuIGVycjtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubyxcXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL3N1cGVyLmMgYi9mcy91ZGYvc3VwZXIuY1xcbmluZGV4IDdiODVmNWEyYjc5ZmM0Li5lN2U5ZjJhMGQyNGU4MCAxMDA2NDRcXG4tLS0gYS9mcy91ZGYvc3VwZXIuY1xcbisrKyBiL2ZzL3VkZi9zdXBlci5jXFxuQEAgLTIxMSw2ICsyMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdWRmX3NiX29wcyA9IHtcXG4gXFx0LmFsbG9jX2lub2RlXFx0PSB1ZGZfYWxsb2NfaW5vZGUsXFxuIFxcdC5mcmVlX2lub2RlXFx0PSB1ZGZfZnJlZV9pbl9jb3JlX2lub2RlLFxcbiBcXHQud3JpdGVfaW5vZGVcXHQ9IHVkZl93cml0ZV9pbm9kZSxcXG4rXFx0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YSxcXG4gXFx0LmV2aWN0X2lub2RlXFx0PSB1ZGZfZXZpY3RfaW5vZGUsXFxuIFxcdC5wdXRfc3VwZXJcXHQ9IHVkZl9wdXRfc3VwZXIsXFxuIFxcdC5zeW5jX2ZzXFx0PSB1ZGZfc3luY19mcyxcXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZmRlY2wuaCBiL2ZzL3VkZi91ZGZkZWNsLmhcXG5pbmRleCA2ZDk1MWUwNWMwMDQ2YS4uODZkYzJkNmEyZWYxYjggMTAwNjQ0XFxuLS0tIGEvZnMvdWRmL3VkZmRlY2wuaFxcbisrKyBiL2ZzL3VkZi91ZGZkZWNsLmhcXG5AQCAtMTM3LDcgKzEzNyw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVkZl9kaXJfZW50cnlfbGVuKHN0cnVjdCBmaWxlSWRlbnREZXNjICpjZmkpXFxuIFxcbiAvKiBmaWxlLmMgKi9cXG4gZXh0ZXJuIGxvbmcgdWRmX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XFxuLWludCB1ZGZfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTtcXG4gXFxuIC8qIGlub2RlLmMgKi9cXG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICosXFxuQEAgLTE1OCw2ICsxNTcsNyBAQCBleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfYnJlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdWRmX3BibGtfdCBibG9jayxcXG4gZXh0ZXJuIGludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90KTtcXG4gZXh0ZXJuIHZvaWQgdWRmX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqKTtcXG4gZXh0ZXJuIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcXG4raW50IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XFxuIGV4dGVybiBpbnQgaW5vZGVfYm1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcXG4gXFx0XFx0ICAgICAgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqcG9zLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsXFxuIFxcdFxcdCAgICAgIHVpbnQzMl90ICplbGVuLCBzZWN0b3JfdCAqb2Zmc2V0LCBpbnQ4X3QgKmV0eXBlKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXFxuaW5kZXggOGIyM2JjOWEyNDRjYjMuLmZkMmM3MTE1YzA1NDI3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxcbkBAIC0yMTAsMTAgKzIxMCw2IEBAIHZvaWQgYmhfZW5kX2FzeW5jX3dyaXRlKHN0cnVjdCBiaW8gKmJpbyk7XFxuIFxcbiAvKiBUaGluZ3MgdG8gZG8gd2l0aCBtZXRhZGF0YSBidWZmZXJzIGxpc3QgKi9cXG4gdm9pZCBtbWJfbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpO1xcbi1pbnQgbW1iX2ZzeW5jX25vZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLFxcbi1cXHRcXHQgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGJvb2wgZGF0YXN5bmMpO1xcbi1pbnQgbW1iX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcXG4tXFx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKTtcXG4gdm9pZCBjbGVhbl9iZGV2X2FsaWFzZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssXFxuIFxcdFxcdFxcdHNlY3Rvcl90IGxlbik7XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhbl9iZGV2X2JoX2FsaWFzKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxcbmluZGV4IGQxMDg5N2IzYTFlMzUwLi5iMTdlMGQ0MjA3MWRmOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5AQCAtNzQwLDcgKzc0MCw4IEBAIGVudW0gaW5vZGVfc3RhdGVfZmxhZ3NfZW51bSB7XFxuIFxcdElfQ1JFQVRJTkdcXHRcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAxNSksXFxuIFxcdElfRE9OVENBQ0hFXFx0XFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMTYpLFxcbiBcXHRJX1NZTkNfUVVFVUVEXFx0XFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMTcpLFxcbi1cXHRJX1BJTk5JTkdfTkVURlNfV0JcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAxOClcXG4rXFx0SV9QSU5OSU5HX05FVEZTX1dCXFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMTgpLFxcbitcXHRJX01FVEFEQVRBX1dSSVRFQkFDS1xcdD0gKDFVIFxcdTAwM2NcXHUwMDNjIDE5KSxcXG4gfTtcXG4gXFxuICNkZWZpbmUgSV9ESVJUWV9JTk9ERSAoSV9ESVJUWV9TWU5DIHwgSV9ESVJUWV9EQVRBU1lOQylcXG5AQCAtMjIxMyw2ICsyMjE0LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2lub2RlX2RpcnR5X3N5bmMoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0X19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX1NZTkMpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuK1xcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9NRVRBREFUQV9XUklURUJBQ0spO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuK31cXG4rXFxuIC8qXFxuICAqIHJldHVybnMgdGhlIHJlZmNvdW50IG9uIHRoZSBpbm9kZS4gaXQgY2FuIGNoYW5nZSBhcmJpdHJhcmlseS5cXG4gICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaFxcbmluZGV4IGVmNzk0MWU5ZGM3OWFjLi4xNzA1NjFlOGYyZTJjNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcXG5AQCAtODYsNiArODYsOCBAQCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7XFxuIFxcdHZvaWQgKCpmcmVlX2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFx0dm9pZCAoKmRpcnR5X2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZmxhZ3MpO1xcbiBcXHRpbnQgKCp3cml0ZV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xcbitcXHRpbnQgKCpzeW5jX2lub2RlX21ldGFkYXRhKShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XFxuIFxcdGludCAoKmRyb3BfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXHR2b2lkICgqZXZpY3RfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXHR2b2lkICgqcHV0X3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTk6NTE6MDkuNzAyMzc1OTE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjYzNjU0NDYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQyX0ZTXCIsXG4gICAgXCJGQVRfRlNcIixcbiAgICBcIk1TRE9TX0ZTXCIsXG4gICAgXCJWRkFUX0ZTXCIsXG4gICAgXCJNSU5JWF9GU1wiLFxuICAgIFwiVURGX0ZTXCIsXG4gICAgXCJCRlNfRlNcIixcbiAgICBcIkFGRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcIndyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcImV4dDRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJmYXRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwidWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcIm1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImJmc19zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJzaW1wbGVfZnN5bmNfbm9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgVkZTIHN1cGVyX29wZXJhdGlvbnMgY2FsbGJhY2sgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGFuZCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBleHQyLCBmYXQsIG1pbml4LCB1ZGYsIGJmcywgYWZmcykgdG8gaW1wbGVtZW50IGFuZCB1c2UgaXQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvcmUgd3JpdGViYWNrIGxvZ2ljIGluIGBmcy9mcy13cml0ZWJhY2suY2AgdG8gd2FpdCBmb3IgaW5vZGUgbWV0YWRhdGEgSU8uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBWRlMgYW5kIG11bHRpcGxlIGZpbGVzeXN0ZW1zLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNTEwNDU4ZTAyYjIzMmRiZTg3M2I3NmYxNzZmNGMxMWI2MDYwZTI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxOTo1MTowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmhcbmluZGV4IDQ0YTNmNjlkMjc1Zjk2Li5hN2ZhYTkxZGVlZDVhYyAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvYWZmcy5oXG4rKysgYi9mcy9hZmZzL2FmZnMuaFxuQEAgLTQ0LDcgKzQ0LDYgQEAgc3RydWN0IGFmZnNfaW5vZGVfaW5mbyB7XG4gXHRzdHJ1Y3QgbXV0ZXggaV9saW5rX2xvY2s7XHRcdC8qIFByb3RlY3RzIGludGVybmFsIGlub2RlIGFjY2Vzcy4gKi9cbiBcdHN0cnVjdCBtdXRleCBpX2V4dF9sb2NrO1x0XHQvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovXG4gI2RlZmluZSBpX2hhc2hfbG9jayBpX2V4dF9sb2NrXG4tXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XG4gXHR1MzJcdCBpX2Jsa2NudDtcdFx0XHQvKiBibG9jayBjb3VudCAqL1xuIFx0dTMyXHQgaV9leHRjbnQ7XHRcdFx0LyogZXh0ZW5kZWQgYmxvY2sgY291bnQgKi9cbiBcdHUzMlx0KmlfbGM7XHRcdFx0XHQvKiBsaW5lYXIgY2FjaGUgb2YgZXh0ZW5kZWQgYmxvY2tzICovXG5AQCAtMTUyLDcgKzE1MSw2IEBAIGV4dGVybiBib29sXHRhZmZzX25vZmlsZW5hbWV0cnVuY2F0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIGV4dGVybiBpbnRcdGFmZnNfY2hlY2tfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCBpbnQgbGVuLFxuIFx0XHRcdFx0Ym9vbCBub3RydW5jYXRlKTtcbiBleHRlcm4gaW50XHRhZmZzX2NvcHlfbmFtZSh1bnNpZ25lZCBjaGFyICpic3RyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuLXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqYWZmc19nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIC8qIGJpdG1hcC4gYyAqL1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYW1pZ2FmZnMuYyBiL2ZzL2FmZnMvYW1pZ2FmZnMuY1xuaW5kZXggYmVkNGZjODA1ZThlNjYuLjZjYzBmYzlhNGNiZjkyIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9hbWlnYWZmcy5jXG4rKysgYi9mcy9hZmZzL2FtaWdhZmZzLmNcbkBAIC01Nyw3ICs1Nyw3IEBAIGFmZnNfaW5zZXJ0X2hhc2goc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gXHRcdEFGRlNfVEFJTChzYiwgZGlyX2JoKS1cdTAwM2VoYXNoX2NoYWluID0gY3B1X3RvX2JlMzIoaW5vKTtcbiBcbiBcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGRpcl9iaCwgaW5vKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShkaXJfYmgsIFx1MDAyNkFGRlNfSShkaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCk7XG4gXHRhZmZzX2JyZWxzZShkaXJfYmgpO1xuIFxuIFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XG5AQCAtMTAwLDcgKzEwMCw3IEBAIGFmZnNfcmVtb3ZlX2hhc2goc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVtX2JoKVxuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZWhhc2hfY2hhaW4gPSBpbm87XG4gXHRcdFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJlMzJfdG9fY3B1KGlubykgLSBoYXNoX2lubyk7XG4tXHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHRcdEFGRlNfVEFJTChzYiwgcmVtX2JoKS1cdTAwM2VwYXJlbnQgPSAwO1xuIFx0XHRcdHJldHZhbCA9IDA7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTgwLDcgKzE4MCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkobGlua19iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdG1hcmtfYnVmZmVyX2RpcnR5KGxpbmtfYmgpO1xuIFxuIFx0XHRtZW1jcHkoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlbmFtZSwgQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cdTAwM2VuYW1lLCAzMik7XG4gXHRcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2goZGlyLCBiaCk7XG5AQCAtMTg4LDcgKzE4OCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXG4gXHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRpcHV0KGRpcik7XG5AQCAtMjAzLDcgKzIwMyw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdF9fYmUzMiBpbm8yID0gQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cdTAwM2VsaW5rX2NoYWluO1xuIFx0XHRcdEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZWxpbmtfY2hhaW4gPSBpbm8yO1xuIFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBiZTMyX3RvX2NwdShpbm8yKSAtIGxpbmtfaW5vKTtcbi1cdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0XHRyZXR2YWwgPSAwO1xuIFx0XHRcdC8qIEZpeCB0aGUgbGluayBjb3VudCwgaWYgYmggaXMgYSBub3JtYWwgaGVhZGVyIGJsb2NrIHdpdGhvdXQgbGlua3MgKi9cbiBcdFx0XHRzd2l0Y2ggKGJlMzJfdG9fY3B1KEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZXN0eXBlKSkge1xuQEAgLTMwNiw3ICszMDYsNyBAQCBhZmZzX3JlbW92ZV9oZWFkZXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dmFsID0gYWZmc19yZW1vdmVfaGFzaChkaXIsIGJoKTtcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gZG9uZV91bmxvY2s7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFxuIFx0YWZmc191bmxvY2tfZGlyKGRpcik7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9maWxlLmMgYi9mcy9hZmZzL2ZpbGUuY1xuaW5kZXggMTQ0YjE3NDgyZDEyZGEuLjIzZTA4OGE3ZWQ0ZmIzIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9maWxlLmNcbisrKyBiL2ZzL2FmZnMvZmlsZS5jXG5AQCAtMTQwLDE0ICsxNDAsMTQgQEAgYWZmc19hbGxvY19leHRibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB1MzIgZXh0KVxuIFx0QUZGU19UQUlMKHNiLCBuZXdfYmgpLVx1MDAzZXBhcmVudCA9IGNwdV90b19iZTMyKGlub2RlLVx1MDAzZWlfaW5vKTtcbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBuZXdfYmgpO1xuIFxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KG5ld19iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtYXJrX2J1ZmZlcl9kaXJ0eShuZXdfYmgpO1xuIFxuIFx0dG1wID0gYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlZXh0ZW5zaW9uKTtcbiBcdGlmICh0bXApXG4gXHRcdGFmZnNfd2FybmluZyhzYiwgXCJhbGxvY19leHRcIiwgXCJwcmV2aW91cyBleHRlbnNpb24gc2V0ICgleClcIiwgdG1wKTtcbiBcdEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZWV4dGVuc2lvbiA9IGNwdV90b19iZTMyKGJsb2NrbnIpO1xuIFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJsb2NrbnIgLSB0bXApO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcbiBcdEFGRlNfSShpbm9kZSktXHUwMDNlaV9leHRjbnQrKztcbiBcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuQEAgLTU4MSw3ICs1ODEsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcbiBcdFx0bWVtc2V0KEFGRlNfREFUQShiaCkgKyBib2ZmLCAwLCB0bXApO1xuIFx0XHRiZTMyX2FkZF9jcHUoXHUwMDI2QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUsIHRtcCk7XG4gXHRcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0c2l6ZSArPSB0bXA7XG4gXHRcdGJpZHgrKztcbiBcdH0gZWxzZSBpZiAoYmlkeCkge1xuQEAgLTYwMyw3ICs2MDMsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcbiBcdFx0QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUgPSBjcHVfdG9fYmUzMih0bXApO1xuIFx0XHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xuIFx0XHRiaC1cdTAwM2ViX3N0YXRlIFx1MDAyNj0gfigxVUwgXHUwMDNjXHUwMDNjIEJIX05ldyk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0aWYgKHByZXZfYmgpIHtcbiBcdFx0XHR1MzIgdG1wX25leHQgPSBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0KTtcbiBcbkBAIC02MTMsOCArNjEzLDcgQEAgYWZmc19leHRlbnRfZmlsZV9vZnMoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG5ld3NpemUpXG4gXHRcdFx0XHRcdCAgICAgYmlkeCwgdG1wX25leHQpO1xuIFx0XHRcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVx1MDAzZW5leHQgPSBjcHVfdG9fYmUzMihiaC1cdTAwM2ViX2Jsb2NrbnIpO1xuIFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVx1MDAzZWJfYmxvY2tuciAtIHRtcF9uZXh0KTtcbi1cdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdFx0bWFya19idWZmZXJfZGlydHkocHJldl9iaCk7XG4gXHRcdFx0YWZmc19icmVsc2UocHJldl9iaCk7XG4gXHRcdH1cbiBcdFx0c2l6ZSArPSBic2l6ZTtcbkBAIC03MzMsNyArNzMyLDcgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKFxuIFx0XHRcdG1heChib2ZmICsgdG1wLCBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSkpKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHR3cml0dGVuICs9IHRtcDtcbiBcdFx0ZnJvbSArPSB0bXA7XG4gXHRcdGJpZHgrKztcbkBAIC03NjYsMTMgKzc2NSwxMiBAQCBzdGF0aWMgaW50IGFmZnNfd3JpdGVfZW5kX29mcyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRcdFx0XHRcdFx0ICAgICBiaWR4LCB0bXBfbmV4dCk7XG4gXHRcdFx0XHRBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXHUwMDNlYl9ibG9ja25yKTtcbiBcdFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVx1MDAzZWJfYmxvY2tuciAtIHRtcF9uZXh0KTtcbi1cdFx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoLFxuLVx0XHRcdFx0XHRcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHR3cml0dGVuICs9IGJzaXplO1xuIFx0XHRmcm9tICs9IGJzaXplO1xuIFx0XHRiaWR4Kys7XG5AQCAtODAxLDE0ICs3OTksMTMgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdFx0XHRcdCAgICAgYmlkeCwgdG1wX25leHQpO1xuIFx0XHRcdFx0QUZGU19EQVRBX0hFQUQocHJldl9iaCktXHUwMDNlbmV4dCA9IGNwdV90b19iZTMyKGJoLVx1MDAzZWJfYmxvY2tucik7XG4gXHRcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShwcmV2X2JoLCBiaC1cdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XG4tXHRcdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCxcbi1cdFx0XHRcdFx0XHRcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIGlmIChiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSkgXHUwMDNjIHRtcClcbiBcdFx0XHRBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7XG4gXHRcdGFmZnNfYnJlbHNlKHByZXZfYmgpO1xuIFx0XHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRcdHdyaXR0ZW4gKz0gdG1wO1xuIFx0XHRmcm9tICs9IHRtcDtcbiBcdFx0YmlkeCsrO1xuQEAgLTk0NSw3ICs5NDIsNyBAQCBhZmZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR9XG4gXHRBRkZTX1RBSUwoc2IsIGV4dF9iaCktXHUwMDNlZXh0ZW5zaW9uID0gMDtcbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBleHRfYmgpO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtYXJrX2J1ZmZlcl9kaXJ0eShleHRfYmgpO1xuIFx0YWZmc19icmVsc2UoZXh0X2JoKTtcbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX3NpemUpIHtcbmRpZmYgLS1naXQgYS9mcy9hZmZzL2lub2RlLmMgYi9mcy9hZmZzL2lub2RlLmNcbmluZGV4IDVkZDFiMDE2YmNiMDBhLi5kNGEzZjM4MWM0YmNmZiAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvaW5vZGUuY1xuKysrIGIvZnMvYWZmcy9pbm9kZS5jXG5AQCAtMjA2LDcgKzIwNiw3IEBAIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdH1cbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFx0YWZmc19mcmVlX3ByZWFsbG9jKGlub2RlKTtcbiBcdHJldHVybiAwO1xuQEAgLTI2NiwxMSArMjY2LDggQEAgYWZmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0aWYgKCFpbm9kZS1cdTAwM2VpX25saW5rKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfc2l6ZSA9IDA7XG4gXHRcdGFmZnNfdHJ1bmNhdGUoaW5vZGUpO1xuLVx0fSBlbHNlIHtcbi1cdFx0bW1iX3N5bmMoXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4gXHR9XG4gXG4tXHRtbWJfaW52YWxpZGF0ZShcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdGNsZWFyX2lub2RlKGlub2RlKTtcbiBcdGFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7XG4gXHRjYWNoZV9wYWdlID0gKHVuc2lnbmVkIGxvbmcpQUZGU19JKGlub2RlKS1cdTAwM2VpX2xjO1xuQEAgLTMwNSw3ICszMDIsNyBAQCBhZmZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpcilcbiBcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XG4gXHRpZiAoIWJoKVxuIFx0XHRnb3RvIGVycl9iaDtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRhZmZzX2JyZWxzZShiaCk7XG4gXG4gXHRpbm9kZS1cdTAwM2VpX3VpZCAgICAgPSBjdXJyZW50X2ZzdWlkKCk7XG5AQCAtMzkzLDE3ICszOTAsMTcgQEAgYWZmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgczNcbiBcdFx0QUZGU19UQUlMKHNiLCBiaCktXHUwMDNlbGlua19jaGFpbiA9IGNoYWluO1xuIFx0XHRBRkZTX1RBSUwoc2IsIGlub2RlX2JoKS1cdTAwM2VsaW5rX2NoYWluID0gY3B1X3RvX2JlMzIoYmxvY2spO1xuIFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShpbm9kZV9iaCwgYmxvY2sgLSBiZTMyX3RvX2NwdShjaGFpbikpO1xuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoaW5vZGVfYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCk7XG4gXHRcdHNldF9ubGluayhpbm9kZSwgMik7XG4gXHRcdGlob2xkKGlub2RlKTtcbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0ZGVudHJ5LVx1MDAzZWRfZnNkYXRhID0gKHZvaWQgKikobG9uZyliaC1cdTAwM2ViX2Jsb2NrbnI7XG4gXG4gXHRhZmZzX2xvY2tfZGlyKGRpcik7XG4gXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0YWZmc191bmxvY2tfbGluayhpbm9kZSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jXG5pbmRleCBjM2M2NTMyZGE0YjBkYS4uNTdkOGQ3NTVhYWRhMDUgMTAwNjQ0XG4tLS0gYS9mcy9hZmZzL25hbWVpLmNcbisrKyBiL2ZzL2FmZnMvbmFtZWkuY1xuQEAgLTM3Myw3ICszNzMsNyBAQCBhZmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0fVxuIFx0KnAgPSAwO1xuIFx0aW5vZGUtXHUwMDNlaV9zaXplID0gaSArIDE7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXG5AQCAtNDQzLDggKzQ0Myw3IEBAIGFmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdC8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi9cbiBcbiBkb25lOlxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLFxuLVx0XHRcdFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFx0cmV0dXJuIHJldHZhbDtcbiB9XG5AQCAtNDk3LDggKzQ5Niw4IEBAIGFmZnNfeHJlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKG9sZF9kaXIsIGJoX25ldyk7XG4gXHRhZmZzX3VubG9ja19kaXIob2xkX2Rpcik7XG4gZG9uZTpcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9vbGQsIFx1MDAyNkFGRlNfSShuZXdfZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmhfbmV3LCBcdTAwMjZBRkZTX0kob2xkX2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmhfb2xkKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGJoX25ldyk7XG4gXHRhZmZzX2JyZWxzZShiaF9vbGQpO1xuIFx0YWZmc19icmVsc2UoYmhfbmV3KTtcbiBcdHJldHVybiByZXR2YWw7XG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9zdXBlci5jIGIvZnMvYWZmcy9zdXBlci5jXG5pbmRleCBiMjMyMjUxYWE3YmJkMC4uMGFkNTEyN2U5ZmI4ZWUgMTAwNjQ0XG4tLS0gYS9mcy9hZmZzL3N1cGVyLmNcbisrKyBiL2ZzL2FmZnMvc3VwZXIuY1xuQEAgLTEwOCw3ICsxMDgsNiBAQCBzdGF0aWMgc3RydWN0IGlub2RlICphZmZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRpLVx1MDAzZWlfbGMgPSBOVUxMO1xuIFx0aS1cdTAwM2VpX2V4dF9iaCA9IE5VTEw7XG4gXHRpLVx1MDAzZWlfcGFfY250ID0gMDtcbi1cdG1tYl9pbml0KFx1MDAyNmktXHUwMDNlaV9tZXRhZGF0YV9iaHMsIFx1MDAyNmktXHUwMDNldmZzX2lub2RlLmlfZGF0YSk7XG4gXG4gXHRyZXR1cm4gXHUwMDI2aS1cdTAwM2V2ZnNfaW5vZGU7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9kaXIuYyBiL2ZzL2Jmcy9kaXIuY1xuaW5kZXggNWI0MGFiMDlhNzk2ZGUuLjliMzdlYzRiZDg5YThjIDEwMDY0NFxuLS0tIGEvZnMvYmZzL2Rpci5jXG4rKysgYi9mcy9iZnMvZGlyLmNcbkBAIC02OCwxNyArNjgsMTAgQEAgc3RhdGljIGludCBiZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBiZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHJldHVybiBtbWJfZnN5bmMoZmlsZSxcbi1cdFx0XHRcdTAwMjZCRlNfSShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IGJmc19yZWFkZGlyLFxuLVx0LmZzeW5jXHRcdD0gYmZzX2ZzeW5jLFxuK1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9mcy9iZnMvaW5vZGUuYyBiL2ZzL2Jmcy9pbm9kZS5jXG5pbmRleCBlNDFlZmRkMzVkYjllZi4uY2FjYzdlZmY5YzMzY2UgMTAwNjQ0XG4tLS0gYS9mcy9iZnMvaW5vZGUuY1xuKysrIGIvZnMvYmZzL2lub2RlLmNcbkBAIC0xMzYsNyArMTM2LDYgQEAgc3RhdGljIGludCBiZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrO1xuIFx0c3RydWN0IGJmc19pbm9kZSAqZGk7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuLVx0aW50IGVyciA9IDA7XG4gXG4gXHRkcHJpbnRmKFwiaW5vPSUwOHhcXG5cIiwgaW5vKTtcbiBcbkBAIC0xNjUsMTMgKzE2NCwzMSBAQCBzdGF0aWMgaW50IGJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdGRpLVx1MDAzZWlfZW9mZnNldCA9IGNwdV90b19sZTMyKGlfc2Jsb2NrICogQkZTX0JTSVpFICsgaW5vZGUtXHUwMDNlaV9zaXplIC0gMSk7XG4gXG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdH1cbiBcdGJyZWxzZShiaCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJmc19zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbit7XG4rXHRpbnQgZXJyID0gMDtcbitcdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuK1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbitcbitcdGRpID0gZmluZF9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCAodTE2KWlub2RlLVx1MDAzZWlubywgXHUwMDI2YmgpO1xuK1x0aWYgKElTX0VSUihkaSkpXG4rXHRcdHJldHVybiBQVFJfRVJSKGRpKTtcbitcbitcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbitcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4rXHRcdGVyciA9IC1FSU87XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZXJyID0gbW1iX3N5bmMoXHUwMDI2QkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitvdXQ6XG4rXHRicmVsc2UoYmgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMzAyLDYgKzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSBiZnNfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBiZnNfZnJlZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBiZnNfd3JpdGVfaW5vZGUsXG4rXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IGJmc19zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IGJmc19ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gYmZzX3B1dF9zdXBlcixcbiBcdC5zdGF0ZnNcdFx0PSBiZnNfc3RhdGZzLFxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcbmluZGV4IDlhZjVmMDYxYTFmODVhLi5iZThiNTdhNjM1Y2Q4MiAxMDA2NDRcbi0tLSBhL2ZzL2J1ZmZlci5jXG4rKysgYi9mcy9idWZmZXIuY1xuQEAgLTYyOCw3OSArNjI4LDYgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxuIH1cbiBFWFBPUlRfU1lNQk9MKG1tYl9zeW5jKTtcbiBcbi0vKipcbi0gKiBtbWJfZnN5bmNfbm9mbHVzaCAtIGZzeW5jIGltcGxlbWVudGF0aW9uIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2l0aFxuLSAqIFx0XHQgICAgICAgbWV0YWRhdGEgYnVmZmVycyBsaXN0XG4tICpcbi0gKiBAZmlsZTpcdGZpbGUgdG8gc3luY2hyb25pemVcbi0gKiBAbW1iOlx0bGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2hcbi0gKiBAc3RhcnQ6XHRzdGFydCBvZmZzZXQgaW4gYnl0ZXNcbi0gKiBAZW5kOlx0ZW5kIG9mZnNldCBpbiBieXRlcyAoaW5jbHVzaXZlKVxuLSAqIEBkYXRhc3luYzpcdG9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWVcbi0gKlxuLSAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGZzeW5jIG1ldGhvZCBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdoaWNoXG4tICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iXG4tICogc3RydWN0dXJlLlxuLSAqL1xuLWludCBtbWJfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXG4tXHRcdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdGludCBlcnI7XG4tXHRpbnQgcmV0ID0gMDtcbi1cbi1cdGVyciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0aWYgKG1tYilcbi1cdFx0cmV0ID0gbW1iX3N5bmMobW1iKTtcbi1cdGlmICghKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IElfRElSVFlfQUxMKSlcbi1cdFx0Z290byBvdXQ7XG4tXHRpZiAoZGF0YXN5bmMgXHUwMDI2XHUwMDI2ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQykpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4tXHRpZiAocmV0ID09IDApXG4tXHRcdHJldCA9IGVycjtcbi1cbi1vdXQ6XG4tXHQvKiBjaGVjayBhbmQgYWR2YW5jZSBhZ2FpbiB0byBjYXRjaCBlcnJvcnMgYWZ0ZXIgc3luY2luZyBvdXQgYnVmZmVycyAqL1xuLVx0ZXJyID0gZmlsZV9jaGVja19hbmRfYWR2YW5jZV93Yl9lcnIoZmlsZSk7XG4tXHRpZiAocmV0ID09IDApXG4tXHRcdHJldCA9IGVycjtcbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jX25vZmx1c2gpO1xuLVxuLS8qKlxuLSAqIG1tYl9mc3luYyAtIGZzeW5jIGltcGxlbWVudGF0aW9uIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2l0aCBtZXRhZGF0YVxuLSAqIFx0ICAgICAgIGJ1ZmZlcnMgbGlzdFxuLSAqXG4tICogQGZpbGU6XHRmaWxlIHRvIHN5bmNocm9uaXplXG4tICogQG1tYjpcdGxpc3Qgb2YgbWV0YWRhdGEgYmhzIHRvIGZsdXNoXG4tICogQHN0YXJ0Olx0c3RhcnQgb2Zmc2V0IGluIGJ5dGVzXG4tICogQGVuZDpcdGVuZCBvZmZzZXQgaW4gYnl0ZXMgKGluY2x1c2l2ZSlcbi0gKiBAZGF0YXN5bmM6XHRvbmx5IHN5bmNocm9uaXplIGVzc2VudGlhbCBtZXRhZGF0YSBpZiB0cnVlXG4tICpcbi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmc3luYyBtZXRob2QgZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aGljaFxuLSAqIHRyYWNrIGFsbCBub24taW5vZGUgbWV0YWRhdGEgaW4gdGhlIGJ1ZmZlcnMgbGlzdCBoYW5naW5nIG9mZiB0aGUgQG1tYlxuLSAqIHN0cnVjdHVyZS4gVGhpcyBhbHNvIG1ha2VzIHN1cmUgdGhhdCBhIGRldmljZSBjYWNoZSBmbHVzaCBvcGVyYXRpb24gaXNcbi0gKiBjYWxsZWQgYXQgdGhlIGVuZC5cbi0gKi9cbi1pbnQgbW1iX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcbi1cdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxlLCBtbWIsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbi1cdGlmICghcmV0KVxuLVx0XHRyZXQgPSBibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYpO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTChtbWJfZnN5bmMpO1xuLVxuIC8qXG4gICogQ2FsbGVkIHdoZW4gd2UndmUgcmVjZW50bHkgd3JpdHRlbiBibG9jayBgYmJsb2NrJywgYW5kIGl0IGlzIGtub3duIHRoYXRcbiAgKiBgYmJsb2NrJyB3YXMgZm9yIGEgYnVmZmVyX2JvdW5kYXJ5KCkgYnVmZmVyLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBibG9jayBhdFxuQEAgLTExMjMsMTIgKzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7XG4gXG4gdm9pZCBtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIHtcbitcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iO1xuK1xuIFx0c2V0X2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XG4gXHQvKiBGSVhNRTogZG8gd2UgbmVlZCB0byBzZXQgdGhpcyBpbiBib3RoIHBsYWNlcz8gKi9cbiBcdGlmIChiaC1cdTAwM2ViX2ZvbGlvIFx1MDAyNlx1MDAyNiBiaC1cdTAwM2ViX2ZvbGlvLVx1MDAzZW1hcHBpbmcpXG4gXHRcdG1hcHBpbmdfc2V0X2Vycm9yKGJoLVx1MDAzZWJfZm9saW8tXHUwMDNlbWFwcGluZywgLUVJTyk7XG4tXHRpZiAoYmgtXHUwMDNlYl9tbWIpXG4tXHRcdG1hcHBpbmdfc2V0X2Vycm9yKGJoLVx1MDAzZWJfbW1iLVx1MDAzZW1hcHBpbmcsIC1FSU8pO1xuK1x0LyogUHJvdGVjdCB1cyBmcm9tIG1tYiBcdTAwMjYgaW5vZGUgZ2V0dGluZyBmcmVlZCB3aGlsZSB3ZSB3b3JrIG9uIGl0ICovXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtbWIgPSBSRUFEX09OQ0UoYmgtXHUwMDNlYl9tbWIpO1xuK1x0aWYgKG1tYilcbitcdFx0bWFwcGluZ19zZXRfZXJyb3IobW1iLVx1MDAzZW1hcHBpbmcsIC1FSU8pO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZGlyLmMgYi9mcy9leHQyL2Rpci5jXG5pbmRleCAyNzhkNGJlOGVjYmU3Ny4uZTE3YmJjNzU5OGMxNDMgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2Rpci5jXG4rKysgYi9mcy9leHQyL2Rpci5jXG5AQCAtNzM0LDYgKzczNCw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9ucyA9IHtcbiAjaWZkZWYgQ09ORklHX0NPTVBBVFxuIFx0LmNvbXBhdF9pb2N0bFx0PSBleHQyX2NvbXBhdF9pb2N0bCxcbiAjZW5kaWZcbi1cdC5mc3luY1x0XHQ9IGV4dDJfZnN5bmMsXG4rXHQuZnN5bmNcdFx0PSBzaW1wbGVfZnN5bmMsXG4gXHQuc2V0bGVhc2VcdD0gZ2VuZXJpY19zZXRsZWFzZSxcbiB9O1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZXh0Mi5oIGIvZnMvZXh0Mi9leHQyLmhcbmluZGV4IDc5ZjdiMzk1MjU4YzJhLi41NjQyNDUxYmYxOTE3MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvZXh0Mi5oXG4rKysgYi9mcy9leHQyL2V4dDIuaFxuQEAgLTczNSw2ICs3MzUsNyBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBleHQyX2NvdW50X2ZyZWUgKHN0cnVjdCBidWZmZXJfaGVhZCAqLCB1bnNpZ25lZCk7XG4gLyogaW5vZGUuYyAqL1xuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpO1xuIGV4dGVybiBpbnQgZXh0Ml93cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTtcbitleHRlcm4gaW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xuIHZvaWQgZXh0Ml93cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0byk7XG4gZXh0ZXJuIGludCBleHQyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpO1xuQEAgLTc3Miw4ICs3NzMsNiBAQCBleHRlcm4gdm9pZCBleHQyX3N5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzLFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZGlyX29wZXJhdGlvbnM7XG4gXG4gLyogZmlsZS5jICovXG4tZXh0ZXJuIGludCBleHQyX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4tXHRcdCAgICAgIGludCBkYXRhc3luYyk7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9pbm9kZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9vcGVyYXRpb25zO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZmlsZS5jIGIvZnMvZXh0Mi9maWxlLmNcbmluZGV4IDhkY2E5ZWM0Y2FjZDlhLi5iOTAyMGRmN2Q4OWUwMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvZmlsZS5jXG4rKysgYi9mcy9leHQyL2ZpbGUuY1xuQEAgLTQ3LDIxICs0Nyw2IEBAIHN0YXRpYyBpbnQgZXh0Ml9yZWxlYXNlX2ZpbGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGV4dDJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdGludCByZXQ7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVxuLVx0cmV0ID0gbW1iX2ZzeW5jKGZpbGUsIFx1MDAyNkVYVDJfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMsXG4tXHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuLVx0aWYgKHJldCA9PSAtRUlPKVxuLVx0XHQvKiBXZSBkb24ndCByZWFsbHkga25vdyB3aGVyZSB0aGUgSU8gZXJyb3IgaGFwcGVuZWQuLi4gKi9cbi1cdFx0ZXh0Ml9lcnJvcihzYiwgX19mdW5jX18sXG4tXHRcdFx0ICAgXCJkZXRlY3RlZCBJTyBlcnJvciB3aGVuIHdyaXRpbmcgbWV0YWRhdGEgYnVmZmVyc1wiKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4ge1xuIFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG5AQCAtMjEzLDcgKzE5OCw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4gXHQub3Blblx0XHQ9IGV4dDJfZmlsZV9vcGVuLFxuIFx0LnJlbGVhc2VcdD0gZXh0Ml9yZWxlYXNlX2ZpbGUsXG4tXHQuZnN5bmNcdFx0PSBleHQyX2ZzeW5jLFxuK1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LmdldF91bm1hcHBlZF9hcmVhID0gdGhwX2dldF91bm1hcHBlZF9hcmVhLFxuIFx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9pbm9kZS5jIGIvZnMvZXh0Mi9pbm9kZS5jXG5pbmRleCAyOTgwODYyOWNjZTU2Zi4uNTE2NTY2NDFjNGU1OWMgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2lub2RlLmNcbisrKyBiL2ZzL2V4dDIvaW5vZGUuY1xuQEAgLTM5LDggKzM5LDYgQEBcbiAjaW5jbHVkZSBcImFjbC5oXCJcbiAjaW5jbHVkZSBcInhhdHRyLmhcIlxuIFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKTtcbi1cbiAvKlxuICAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay5cbiAgKi9cbkBAIC04MywxMSArODEsMTYgQEAgdm9pZCBleHQyX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhKTtcbiBcbiBcdGlmICh3YW50X2RlbGV0ZSkge1xuK1x0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0ge1xuK1x0XHRcdC5zeW5jX21vZGUgPSBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSA/IFdCX1NZTkNfQUxMIDpcbitcdFx0XHRcdFx0XHRcdCAgICAgICBXQl9TWU5DX05PTkUsXG4rXHRcdH07XG4rXG4gXHRcdHNiX3N0YXJ0X2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0XHQvKiBzZXQgZHRpbWUgKi9cbiBcdFx0RVhUMl9JKGlub2RlKS1cdTAwM2VpX2R0aW1lXHQ9IGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKTtcbiBcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tXHRcdF9fZXh0Ml93cml0ZV9pbm9kZShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpO1xuK1x0XHRleHQyX3dyaXRlX2lub2RlKGlub2RlLCBcdTAwMjZ3YmMpO1xuIFx0XHQvKiB0cnVuY2F0ZSB0byAwICovXG4gXHRcdGlub2RlLVx1MDAzZWlfc2l6ZSA9IDA7XG4gXHRcdGlmIChpbm9kZS1cdTAwM2VpX2Jsb2NrcylcbkBAIC0xNDY5LDcgKzE0NzIsNyBAQCBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXG4gXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcbitpbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4gXHRzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICplaSA9IEVYVDJfSShpbm9kZSk7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbkBAIC0xNTYwLDIyICsxNTYzLDMyIEBAIHN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuIFx0fSBlbHNlIGZvciAobiA9IDA7IG4gXHUwMDNjIEVYVDJfTl9CTE9DS1M7IG4rKylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfYmxvY2tbbl0gPSBlaS1cdTAwM2VpX2RhdGFbbl07XG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAoZG9fc3luYykge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbi1cdFx0XHRwcmludGsgKFwiSU8gZXJyb3Igc3luY2luZyBleHQyIGlub2RlIFslczolMDhseF1cXG5cIixcbi1cdFx0XHRcdHNiLVx1MDAzZXNfaWQsICh1bnNpZ25lZCBsb25nKSBpbm8pO1xuLVx0XHRcdGVyciA9IC1FSU87XG4tXHRcdH1cbi1cdH1cbiBcdGVpLVx1MDAzZWlfc3RhdGUgXHUwMDI2PSB+RVhUMl9TVEFURV9ORVc7XG4gXHRicmVsc2UgKGJoKTtcbitcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGV4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4raW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4tXHRyZXR1cm4gX19leHQyX3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcbitcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4rXHRzdHJ1Y3QgZXh0Ml9pbm9kZSAqcmF3X2lub2RlID0gZXh0Ml9nZXRfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sXG4rXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2YmgpO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoSVNfRVJSKHJhd19pbm9kZSkpXG4rXHRcdHJldHVybiAtRUlPO1xuK1x0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuK1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbitcdFx0cHJpbnRrKFwiSU8gZXJyb3Igc3luY2luZyBleHQyIGlub2RlIFslczolMDhseF1cXG5cIixcbitcdFx0ICAgICAgIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgKHVuc2lnbmVkIGxvbmcpaW5vZGUtXHUwMDNlaV9pbm8pO1xuK1x0XHRlcnIgPSAtRUlPO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGVyciA9IG1tYl9zeW5jKFx1MDAyNkVYVDJfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK291dDpcbitcdGJyZWxzZShiaCk7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBpbnQgZXh0Ml9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbmRpZmYgLS1naXQgYS9mcy9leHQyL3N1cGVyLmMgYi9mcy9leHQyL3N1cGVyLmNcbmluZGV4IDM5OTlmOGYzYjE1NmUzLi5hNDBmNTMwODcyYTQwNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvc3VwZXIuY1xuKysrIGIvZnMvZXh0Mi9zdXBlci5jXG5AQCAtMzYyLDYgKzM2Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQyX3NvcHMgPSB7XG4gXHQuYWxsb2NfaW5vZGVcdD0gZXh0Ml9hbGxvY19pbm9kZSxcbiBcdC5mcmVlX2lub2RlXHQ9IGV4dDJfZnJlZV9pbl9jb3JlX2lub2RlLFxuIFx0LndyaXRlX2lub2RlXHQ9IGV4dDJfd3JpdGVfaW5vZGUsXG4rXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YSxcbiBcdC5ldmljdF9pbm9kZVx0PSBleHQyX2V2aWN0X2lub2RlLFxuIFx0LnB1dF9zdXBlclx0PSBleHQyX3B1dF9zdXBlcixcbiBcdC5zeW5jX2ZzXHQ9IGV4dDJfc3luY19mcyxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uOGYzODhlMTU4ZGFlZWYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0xMTUxLDcgKzExNTEsNyBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbiBcdHN0cnVjdCByd19zZW1hcGhvcmUgaV9kYXRhX3NlbTtcbiBcdHN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7XG4gXHRzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlO1xuLVx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzO1xuK1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICppX21ldGFkYXRhX2JocztcbiBcbiBcdC8qXG4gXHQgKiBGaWxlIGNyZWF0aW9uIHRpbWUuIEl0cyBmdW5jdGlvbiBpcyBzYW1lIGFzIHRoYXQgb2ZcbkBAIC0zMTU1LDYgKzMxNTUsNyBAQCBleHRlcm4gc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbiBcdF9fZXh0NF9pZ2V0KChzYiksIChpbm8pLCAoZmxhZ3MpLCBfX2Z1bmNfXywgX19MSU5FX18pXG4gXG4gZXh0ZXJuIGludCAgZXh0NF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuK2V4dGVybiBpbnQgIGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiBpbnQgIGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBkZW50cnkgKixcbiBcdFx0XHQgc3RydWN0IGlhdHRyICopO1xuIGV4dGVybiB1MzIgIGV4dDRfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuaW5kZXggOWE4YzIyNWYyNzUzMDkuLjc1MjMyNmYzYjY1MzZhIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0X2piZDIuY1xuKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuQEAgLTM1MCw2ICszNTAsMjEgQEAgaW50IF9fZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBleHQ0X2lub2RlX2F0dGFjaF9tbWIoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbitcbitcdC8qXG4rXHQgKiBJdCdzIGRpZmZpY3VsdCB0byBoYW5kbGUgZmFpbHVyZSB3aGVuIG1hcmtpbmcgYnVmZmVyIGRpcnR5IHdpdGhvdXRcbitcdCAqIGxlYXZpbmcgZmlsZXN5c3RlbSBjb3JydXB0ZWRcbitcdCAqL1xuK1x0bW1iID0ga21hbGxvY19vYmooKm1tYiwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpO1xuK1x0bW1iX2luaXQobW1iLCBcdTAwMjZpbm9kZS1cdTAwM2VpX2RhdGEpO1xuK1x0LyogU29tZW9uZSBzd2FwcGVkIGFub3RoZXIgbW1iIGJlZm9yZSB1cz8gKi9cbitcdGlmIChjbXB4Y2hnKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMsIE5VTEwsIG1tYikpXG4rXHRcdGtmcmVlKG1tYik7XG4rfVxuK1xuIGludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcbiBcdFx0XHRcdCBoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG5AQCAtMzg5LDExICs0MDQsMTQgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuIFx0XHRcdFx0XHQgZXJyKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGlub2RlKVxuK1x0XHRpZiAoaW5vZGUpIHtcbitcdFx0XHRpZiAoIUVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpXG4rXHRcdFx0XHRleHQ0X2lub2RlX2F0dGFjaF9tbWIoaW5vZGUpO1xuIFx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGVsc2VcbitcdFx0XHRcdFx0ICAgICAgRVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdH0gZWxzZSB7XG4gXHRcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuK1x0XHR9XG4gXHRcdGlmIChpbm9kZSBcdTAwMjZcdTAwMjYgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcbiBcdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4gXHRcdFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZnN5bmMuYyBiL2ZzL2V4dDQvZnN5bmMuY1xuaW5kZXggOTI0NzI2ZGNjODVmZjUuLjI5OTljMmNjOGZjZmEwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9mc3luYy5jXG4rKysgYi9mcy9leHQ0L2ZzeW5jLmNcbkBAIC02OCw5ICs2OCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9zeW5jX3BhcmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHQgKiB0aHJvdWdoIGV4dDRfZXZpY3RfaW5vZGUoKSkgYW5kIHNvIHdlIGFyZSBzYWZlIHRvIGZsdXNoXG4gXHRcdCAqIG1ldGFkYXRhIGJsb2NrcyBhbmQgdGhlIGlub2RlLlxuIFx0XHQgKi9cbi1cdFx0cmV0ID0gbW1iX3N5bmMoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0YnJlYWs7XG4gXHRcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGJyZWFrO1xuQEAgLTgzLDIyICs4MCwxMSBAQCBzdGF0aWMgaW50IGV4dDRfZnN5bmNfbm9qb3VybmFsKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4gXHRcdFx0XHRpbnQgZGF0YXN5bmMsIGJvb2wgKm5lZWRzX2JhcnJpZXIpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXHUwMDNlZl9pbm9kZTtcbi1cdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7XG4tXHRcdC5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCxcbi1cdFx0Lm5yX3RvX3dyaXRlID0gMCxcbi1cdH07XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gbW1iX2ZzeW5jX25vZmx1c2goZmlsZSwgXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbitcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIEZvcmNlIHdyaXRlb3V0IG9mIGlub2RlIHRhYmxlIGJ1ZmZlciB0byBkaXNrICovXG4tXHRyZXQgPSBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCBcdTAwMjZ3YmMpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdHJldCA9IGV4dDRfc3luY19wYXJlbnQoaW5vZGUpO1xuIFxuIFx0aWYgKHRlc3Rfb3B0KGlub2RlLVx1MDAzZWlfc2IsIEJBUlJJRVIpKVxuQEAgLTE1Niw2ICsxNDIsMTAgQEAgaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbiBcdGlmIChzYl9yZG9ubHkoaW5vZGUtXHUwMDNlaV9zYikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0cmV0ID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0aWYgKCFFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbCkge1xuIFx0XHRyZXQgPSBleHQ0X2ZzeW5jX25vam91cm5hbChmaWxlLCBzdGFydCwgZW5kLCBkYXRhc3luYyxcbiBcdFx0XHRcdFx0ICAgXHUwMDI2bmVlZHNfYmFycmllcik7XG5AQCAtMTY0LDEwICsxNTQsNiBAQCBpbnQgZXh0NF9zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdC8qXG4gXHQgKiAgVGhlIGNhbGxlcidzIGZpbGVtYXBfZmRhdGF3cml0ZSgpL3dhaXQgd2lsbCBzeW5jIHRoZSBkYXRhLlxuIFx0ICogIE1ldGFkYXRhIGlzIGluIHRoZSBqb3VybmFsLCB3ZSB3YWl0IGZvciBwcm9wZXIgdHJhbnNhY3Rpb24gdG9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi5iNjFlZTc1ZWNiZGYxYSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTk1LDkgKzE5NSw4IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShpbm9kZSwgXCJkYXRhIHdpbGwgYmUgbG9zdFwiKTtcbiBcbiBcdFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhKTtcbi1cdFx0LyogQXZvaWQgbWJhbGxvYyBzcGVjaWFsIGlub2RlIHdoaWNoIGhhcyBubyBwcm9wZXIgaW9wcyAqL1xuLVx0XHRpZiAoIUVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKVxuLVx0XHRcdG1tYl9zeW5jKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRpZiAoRVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2JocylcbitcdFx0XHRtbWJfc3luYyhFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdFx0Z290byBub19kZWxldGU7XG4gXHR9XG4gXG5AQCAtMzQ1Miw2ICszNDUxLDcgQEAgc3RhdGljIGJvb2wgZXh0NF9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IHdhaXQpXG4gc3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsO1xuK1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XG4gXG4gXHRpZiAoam91cm5hbCkge1xuIFx0XHRpZiAoamJkMl90cmFuc2FjdGlvbl9jb21taXR0ZWQoam91cm5hbCxcbkBAIC0zNDYyLDggKzM0NjIsOSBAQCBzdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuK1x0bW1iID0gUkVBRF9PTkNFKEVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0LyogQW55IG1ldGFkYXRhIGJ1ZmZlcnMgdG8gd3JpdGU/ICovXG4tXHRpZiAobW1iX2hhc19idWZmZXJzKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpKVxuK1x0aWYgKG1tYiBcdTAwMjZcdTAwMjYgbW1iX2hhc19idWZmZXJzKG1tYikpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0cmV0dXJuIGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IElfRElSVFlfREFUQVNZTkM7XG4gfVxuQEAgLTU4MzgsMjQgKzU4MzksMzYgQEAgaW50IGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdGVyciA9IGV4dDRfZmNfY29tbWl0KEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsLFxuIFx0XHRcdFx0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9zeW5jX3RpZCk7XG4gXHR9IGVsc2Uge1xuLVx0XHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4rXHRcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuK1x0fVxuK1x0cmV0dXJuIGVycjtcbit9XG4gXG4tXHRcdGVyciA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jX25vaW5tZW0oaW5vZGUsIFx1MDAyNmlsb2MpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHRcdC8qXG4tXHRcdCAqIHN5bmMoMikgd2lsbCBmbHVzaCB0aGUgd2hvbGUgYnVmZmVyIGNhY2hlLiBObyBuZWVkIHRvIGRvXG4tXHRcdCAqIGl0IGhlcmUgc2VwYXJhdGVseSBmb3IgZWFjaCBpbm9kZS5cbi1cdFx0ICovXG4tXHRcdGlmICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMIFx1MDAyNlx1MDAyNiAhd2JjLVx1MDAzZWZvcl9zeW5jKVxuLVx0XHRcdHN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpO1xuLVx0XHRpZiAoYnVmZmVyX3JlcShpbG9jLmJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShpbG9jLmJoKSkge1xuLVx0XHRcdGV4dDRfZXJyb3JfaW5vZGVfYmxvY2soaW5vZGUsIGlsb2MuYmgtXHUwMDNlYl9ibG9ja25yLCBFSU8sXG4tXHRcdFx0XHRcdCAgICAgICBcIklPIGVycm9yIHN5bmNpbmcgaW5vZGVcIik7XG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdFx0fVxuLVx0XHRicmVsc2UoaWxvYy5iaCk7XG4raW50IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbit7XG4rXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4rXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbitcdGludCBlcnI7XG4rXG4rXHQvKiBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpbiBub2pvdXJuYWwgbW9kZSAqL1xuK1x0aWYgKFdBUk5fT05fT05DRShFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbCkpXG4rXHRcdHJldHVybiAtRUZTQ09SUlVQVEVEO1xuK1xuK1x0ZXJyID0gX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShpbm9kZSwgXHUwMDI2aWxvYyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0c3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7XG4rXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGlsb2MuYmgpKSB7XG4rXHRcdGV4dDRfZXJyb3JfaW5vZGVfYmxvY2soaW5vZGUsIGlsb2MuYmgtXHUwMDNlYl9ibG9ja25yLCBFSU8sXG4rXHRcdFx0XHQgICAgICAgXCJJTyBlcnJvciBzeW5jaW5nIGlub2RlXCIpO1xuK1x0XHRlcnIgPSAtRUlPO1xuK1x0XHRnb3RvIG91dDtcbiBcdH1cbitcdG1tYiA9IFJFQURfT05DRShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdGlmIChtbWIpXG4rXHRcdGVyciA9IG1tYl9zeW5jKG1tYik7XG4rb3V0OlxuK1x0YnJlbHNlKGlsb2MuYmgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uOTBkNmQ2Yjg4NjczMDIgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTE0MzAsNyArMTQzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdElOSVRfV09SSyhcdTAwMjZlaS1cdTAwM2VpX3Jzdl9jb252ZXJzaW9uX3dvcmssIGV4dDRfZW5kX2lvX3Jzdl93b3JrKTtcbiBcdGV4dDRfZmNfaW5pdF9pbm9kZShcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbi1cdG1tYl9pbml0KFx1MDAyNmVpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLCBcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUuaV9kYXRhKTtcbitcdGVpLVx1MDAzZWlfbWV0YWRhdGFfYmhzID0gTlVMTDtcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiBcdGxvY2tkZXBfc2V0X3N1YmNsYXNzKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0sIElfREFUQV9TRU1fTk9STUFMKTtcbiAjZW5kaWZcbkBAIC0xNDUxLDYgKzE0NTEsNyBAQCBzdGF0aWMgaW50IGV4dDRfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHN0YXRpYyB2b2lkIGV4dDRfZnJlZV9pbl9jb3JlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0ZnNjcnlwdF9mcmVlX2lub2RlKGlub2RlKTtcbitcdGtmcmVlKEVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNihFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfbGlzdCkpKSB7XG4gXHRcdHByX3dhcm4oXCIlczogaW5vZGUgJWxsdSBzdGlsbCBpbiBmYyBsaXN0XCIsXG4gXHRcdFx0X19mdW5jX18sIGlub2RlLVx1MDAzZWlfaW5vKTtcbkBAIC0xNTMwLDggKzE1MzEsOCBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZClcbiB2b2lkIGV4dDRfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRleHQ0X2ZjX2RlbChpbm9kZSk7XG4tXHRpZiAoIUVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKVxuLVx0XHRtbWJfaW52YWxpZGF0ZShcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKVxuK1x0XHRtbWJfaW52YWxpZGF0ZShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdGNsZWFyX2lub2RlKGlub2RlKTtcbiBcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4gXHQvKlxuQEAgLTE2MDUsOSArMTYwNiwxMyBAQCBzdGF0aWMgaW50IGV4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcbiBcdFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMXG4gXHR9O1xuK1x0aW50IHJldDtcbiBcbiBcdHRyYWNlX2V4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShpbm9kZSk7XG4tXHRyZXR1cm4gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgXHUwMDI2d2JjKTtcbitcdHJldCA9IGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsIFx1MDAyNndiYyk7XG4rXHRpZiAoIXJldClcbitcdFx0cmV0ID0gZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCBcdTAwMjZ3YmMpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19RVU9UQVxuQEAgLTE2NjQsNiArMTY2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7XG4gXHQuZnJlZV9pbm9kZVx0PSBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC5kZXN0cm95X2lub2RlXHQ9IGV4dDRfZGVzdHJveV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBleHQ0X3dyaXRlX2lub2RlLFxuK1x0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEsXG4gXHQuZGlydHlfaW5vZGVcdD0gZXh0NF9kaXJ0eV9pbm9kZSxcbiBcdC5kcm9wX2lub2RlXHQ9IGV4dDRfZHJvcF9pbm9kZSxcbiBcdC5ldmljdF9pbm9kZVx0PSBleHQ0X2V2aWN0X2lub2RlLFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9kaXIuYyBiL2ZzL2ZhdC9kaXIuY1xuaW5kZXggNGY2ZjQyZjMzNjEzZGYuLmQzM2JmMzRiZGNlNzVmIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2Rpci5jXG4rKysgYi9mcy9mYXQvZGlyLmNcbkBAIC0xMDI4LDggKzEwMjgsNiBAQCBzdGF0aWMgaW50IF9fZmF0X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCBsb2ZmX3QgcG9zLCBpbnQgbnJfc2xvdHMpXG4gXHRcdFx0bnJfc2xvdHMtLTtcbiBcdFx0fVxuIFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNk1TRE9TX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdFx0ZXJyID0gc3luY19kaXJ0eV9idWZmZXIoYmgpO1xuIFx0XHRicmVsc2UoYmgpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTEwNjMsOCArMTA2MSw2IEBAIGludCBmYXRfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBmYXRfc2xvdF9pbmZvICpzaW5mbylcbiBcdFx0bnJfc2xvdHMtLTtcbiBcdH1cbiBcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2TVNET1NfSShkaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbiBcdGJyZWxzZShiaCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTEwODQsMTAgKzEwODAsOSBAQCBpbnQgZmF0X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZmF0X3Nsb3RfaW5mbyAqc2luZm8pXG4gXHR9XG4gXG4gXHRmYXRfdHJ1bmNhdGVfdGltZShkaXIsIE5VTEwsIEZBVF9VUERBVEVfQVRJTUUgfCBGQVRfVVBEQVRFX0NNVElNRSk7XG4rXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4gXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuLVx0XHQodm9pZClmYXRfc3luY19pbm9kZShkaXIpO1xuLVx0ZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4rXHRcdHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMTE5LDIxICsxMTE0LDExIEBAIHN0YXRpYyBpbnQgZmF0X3plcm9lZF9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqZGlyLCBzZWN0b3JfdCBibGtuciwgaW50IG5yX3VzZWQsXG4gXHRcdG4rKztcbiBcdFx0YmxrbnIrKztcbiBcdFx0aWYgKG4gPT0gbnJfYmhzKSB7XG4tXHRcdFx0aWYgKElTX0RJUlNZTkMoZGlyKSkge1xuLVx0XHRcdFx0ZXJyID0gZmF0X3N5bmNfYmhzKGJocywgbik7XG4tXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRnb3RvIGVycm9yO1xuLVx0XHRcdH1cbiBcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuOyBpKyspXG4gXHRcdFx0XHRicmVsc2UoYmhzW2ldKTtcbiBcdFx0XHRuID0gMDtcbiBcdFx0fVxuIFx0fVxuLVx0aWYgKElTX0RJUlNZTkMoZGlyKSkge1xuLVx0XHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGVycm9yO1xuLVx0fVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbjsgaSsrKVxuIFx0XHRicmVsc2UoYmhzW2ldKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmggYi9mcy9mYXQvZmF0LmhcbmluZGV4IDk5ZWQ5MjI4YTY3N2JlLi5kY2I1YmE3NTcwNzNlZCAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9mYXQuaFxuKysrIGIvZnMvZmF0L2ZhdC5oXG5AQCAtNDIxLDcgKzQyMSw2IEBAIGV4dGVybiB2b2lkIGZhdF9kZXRhY2goc3RydWN0IGlub2RlICppbm9kZSk7XG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZmF0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbG9mZl90IGlfcG9zKTtcbiBleHRlcm4gc3RydWN0IGlub2RlICpmYXRfYnVpbGRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSwgbG9mZl90IGlfcG9zKTtcbi1leHRlcm4gaW50IGZhdF9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBpbnQgZmF0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRcdCAgdm9pZCAoKnNldHVwKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKikpO1xuIGV4dGVybiBpbnQgZmF0X2ZpbGxfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGUpO1xuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9maWxlLmMgYi9mcy9mYXQvZmlsZS5jXG5pbmRleCAzN2U3MDQ5YjRjOGM0NC4uMWM4MzVjYTVmMjFhNTEgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvZmlsZS5jXG4rKysgYi9mcy9mYXQvZmlsZS5jXG5AQCAtMTkwLDggKzE5MCw3IEBAIGludCBmYXRfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4gXHRzdHJ1Y3QgaW5vZGUgKmZhdF9pbm9kZSA9IE1TRE9TX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZWZhdF9pbm9kZTtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxwLCBcdTAwMjZNU0RPU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbitcdGVyciA9IHNpbXBsZV9mc3luY19ub2ZsdXNoKGZpbHAsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5AQCAtMzMyLDE1ICszMzEsMTUgQEAgc3RhdGljIGludCBmYXRfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc2tpcClcbiBcdH1cbiBcdE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfYXR0cnMgfD0gQVRUUl9BUkNIO1xuIFx0ZmF0X3RydW5jYXRlX3RpbWUoaW5vZGUsIE5VTEwsIEZBVF9VUERBVEVfQ01USU1FKTtcbitcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0aWYgKHdhaXQpIHtcbi1cdFx0ZXJyID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xuK1x0XHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfc3RhcnQgPSBpX3N0YXJ0O1xuIFx0XHRcdE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbG9nc3RhcnQgPSBpX2xvZ3N0YXJ0O1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdH1cbiBcbiBcdC8qIFdyaXRlIGEgbmV3IEVPRiwgYW5kIGdldCB0aGUgcmVtYWluaW5nIGNsdXN0ZXIgY2hhaW4gZm9yIGZyZWVpbmcuICovXG4gXHRpZiAoc2tpcCkge1xuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9pbm9kZS5jIGIvZnMvZmF0L2lub2RlLmNcbmluZGV4IDNhYTUyNDgxYWQ1Y2YzLi5jNGI0Y2NhYTA5MWFhNyAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9pbm9kZS5jXG4rKysgYi9mcy9mYXQvaW5vZGUuY1xuQEAgLTYyMyw3ICs2MjMsMzcgQEAgc3RydWN0IGlub2RlICpmYXRfYnVpbGRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcbiBFWFBPUlRfU1lNQk9MX0dQTChmYXRfYnVpbGRfaW5vZGUpO1xuIFxuLXN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpO1xuK3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4rXG4rc3RhdGljIGludCBmYXRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4re1xuK1x0c3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSA9IE1TRE9TX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbitcdGxvZmZfdCBpX3BvcztcbitcdHNlY3Rvcl90IGJsb2NrbnI7XG4rXHRpbnQgb2Zmc2V0O1xuK1xuK1x0aWYgKGlub2RlLVx1MDAzZWlfaW5vID09IE1TRE9TX1JPT1RfSU5PKVxuK1x0XHRyZXR1cm4gMDtcbitcdGlfcG9zID0gZmF0X2lfcG9zX3JlYWQoc2JpLCBpbm9kZSk7XG4rXHRpZiAoIWlfcG9zKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZhdF9nZXRfYmxrbnJfb2Zmc2V0KHNiaSwgaV9wb3MsIFx1MDAyNmJsb2NrbnIsIFx1MDAyNm9mZnNldCk7XG4rXHRiaCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrX25vbmF0b21pYyhpbm9kZS1cdTAwM2VpX3NiLCBibG9ja25yKTtcbitcdC8qXG4rXHQgKiBCdWZmZXIgYWxyZWFkeSB3cml0dGVuPyBXZSBsZWF2ZSBidWZmZXJfZGlydHkgY2hlY2sgZm9yXG4rXHQgKiBzeW5jX2RpcnR5X2J1ZmZlcigpIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGggb25nb2luZyBJTy5cbitcdCAqL1xuK1x0aWYgKCFiaCB8fCAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuK1x0XHRicmVsc2UoYmgpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbitcdGJyZWxzZShiaCk7XG4rXHRyZXR1cm4gbW1iX3N5bmMoXHUwMDI2TVNET1NfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK31cbiBcbiBzdGF0aWMgdm9pZCBmYXRfZnJlZV9lb2ZibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG5AQCAtNjQwLDcgKzY3MCwxMyBAQCBzdGF0aWMgdm9pZCBmYXRfZnJlZV9lb2ZibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0ICogYW55IGNvcnJ1cHRpb24gb24gdGhlIG5leHQgYWNjZXNzIHRvIHRoZSBjbHVzdGVyXG4gXHRcdCAqIGNoYWluIGZvciB0aGUgZmlsZS5cbiBcdFx0ICovXG4tXHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XG4rXHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlKTtcbitcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKSB7XG4rXHRcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcbitcdFx0XHRcdC5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCxcbitcdFx0XHR9O1xuK1x0XHRcdGVyciA9IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCBcdTAwMjZ3YmMpO1xuK1x0XHR9XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRmYXRfbXNnKGlub2RlLVx1MDAzZWlfc2IsIEtFUk5fV0FSTklORywgXCJGYWlsZWQgdG8gXCJcbiBcdFx0XHRcdFx0XCJ1cGRhdGUgb24gZGlzayBpbm9kZSBmb3IgdW51c2VkIFwiXG5AQCAtODU0LDcgKzg5MCw3IEBAIHN0YXRpYyBpbnQgZmF0X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcbitzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4gXHRzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0Ioc2IpO1xuQEAgLTg2Myw3ICs4OTksNyBAQCBzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxuIFx0c3RydWN0IHRpbWVzcGVjNjQgbXRpbWU7XG4gXHRsb2ZmX3QgaV9wb3M7XG4gXHRzZWN0b3JfdCBibG9ja25yO1xuLVx0aW50IGVyciwgb2Zmc2V0O1xuK1x0aW50IG9mZnNldDtcbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX2lubyA9PSBNU0RPU19ST09UX0lOTylcbiBcdFx0cmV0dXJuIDA7XG5AQCAtOTA3LDExICs5NDMsOSBAQCBzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpLVx1MDAzZWlub2RlX2hhc2hfbG9jayk7XG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRlcnIgPSAwO1xuLVx0aWYgKHdhaXQpXG4tXHRcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbiBcdGJyZWxzZShiaCk7XG4tXHRyZXR1cm4gZXJyO1xuK1x0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBmYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG5AQCAtOTI1LDIzICs5NTksMTcgQEAgc3RhdGljIGludCBmYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdGVyciA9IGZhdF9jbHVzdGVyc19mbHVzaChzYik7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZNU0RPU19TQihzYiktXHUwMDNlc19sb2NrKTtcbiBcdH0gZWxzZVxuLVx0XHRlcnIgPSBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgd2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7XG4rXHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdHJldHVybiBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgMSk7XG4tfVxuLVxuLUVYUE9SVF9TWU1CT0xfR1BMKGZhdF9zeW5jX2lub2RlKTtcbi1cbiBzdGF0aWMgaW50IGZhdF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZmF0X3NvcHMgPSB7XG4gXHQuYWxsb2NfaW5vZGVcdD0gZmF0X2FsbG9jX2lub2RlLFxuIFx0LmZyZWVfaW5vZGVcdD0gZmF0X2ZyZWVfaW5vZGUsXG4gXHQud3JpdGVfaW5vZGVcdD0gZmF0X3dyaXRlX2lub2RlLFxuK1x0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBmYXRfc3luY19pbm9kZV9tZXRhZGF0YSxcbiBcdC5ldmljdF9pbm9kZVx0PSBmYXRfZXZpY3RfaW5vZGUsXG4gXHQucHV0X3N1cGVyXHQ9IGZhdF9wdXRfc3VwZXIsXG4gXHQuc3RhdGZzXHRcdD0gZmF0X3N0YXRmcyxcbmRpZmYgLS1naXQgYS9mcy9mYXQvbWlzYy5jIGIvZnMvZmF0L21pc2MuY1xuaW5kZXggMzAyN2VmNTNhZjIxNGMuLmJlMThmNmI1ODE5YmE3IDEwMDY0NFxuLS0tIGEvZnMvZmF0L21pc2MuY1xuKysrIGIvZnMvZmF0L21pc2MuY1xuQEAgLTE0NiwxNiArMTQ2LDE3IEBAIGludCBmYXRfY2hhaW5fYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZGNsdXMsIGludCBucl9jbHVzdGVyKVxuIFx0fSBlbHNlIHtcbiBcdFx0TVNET1NfSShpbm9kZSktXHUwMDNlaV9zdGFydCA9IG5ld19kY2x1cztcbiBcdFx0TVNET1NfSShpbm9kZSktXHUwMDNlaV9sb2dzdGFydCA9IG5ld19kY2x1cztcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRcdC8qXG4gXHRcdCAqIFNpbmNlIGdlbmVyaWNfd3JpdGVfc3luYygpIHN5bmNocm9uaXplcyByZWd1bGFyIGZpbGVzIGxhdGVyLFxuIFx0XHQgKiB3ZSBzeW5jIGhlcmUgb25seSBkaXJlY3Rvcmllcy5cbiBcdFx0ICovXG4gXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IElTX0RJUlNZTkMoaW5vZGUpKSB7XG4tXHRcdFx0cmV0ID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xuK1x0XHRcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0XHRcdGlmIChyZXQpXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHR9IGVsc2Vcbi1cdFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdFx0fVxuK1xuIFx0fVxuIFx0aWYgKG5ld19mY2x1cyAhPSAoaW5vZGUtXHUwMDNlaV9ibG9ja3MgXHUwMDNlXHUwMDNlIChzYmktXHUwMDNlY2x1c3Rlcl9iaXRzIC0gOSkpKSB7XG4gXHRcdGZhdF9mc19lcnJvcl9yYXRlbGltaXQoXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L25hbWVpX21zZG9zLmMgYi9mcy9mYXQvbmFtZWlfbXNkb3MuY1xuaW5kZXggMGZkMjk3MWFkNGIxMzEuLjQ3MmJkODQ3ZWY5Y2JiIDEwMDY0NFxuLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmNcbisrKyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXG5AQCAtMjUyLDEwICsyNTIsOSBAQCBzdGF0aWMgaW50IG1zZG9zX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTtcbitcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbitcdFx0c3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTQ3MywyMSArNDcyLDIxIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXG4gXHRcdFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyBcdTAwMjY9IH5BVFRSX0hJRERFTjtcbitcdFx0XHRtYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7XG4gXHRcdFx0aWYgKElTX0RJUlNZTkMob2xkX2RpcikpIHtcbi1cdFx0XHRcdGVyciA9IGZhdF9zeW5jX2lub2RlKG9sZF9pbm9kZSk7XG4rXHRcdFx0XHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9pbm9kZSwgMSk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRcdE1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX2F0dHJzID0gb2xkX2F0dHJzO1xuIFx0XHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRcdH1cbi1cdFx0XHR9IGVsc2Vcbi1cdFx0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcbitcdFx0XHR9XG4gXG4gXHRcdFx0aW5vZGVfaW5jX2l2ZXJzaW9uKG9sZF9kaXIpO1xuIFx0XHRcdGZhdF90cnVuY2F0ZV90aW1lKG9sZF9kaXIsIE5VTEwsIEZBVF9VUERBVEVfQ01USU1FKTtcbitcdFx0XHRtYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpO1xuIFx0XHRcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKVxuLVx0XHRcdFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUob2xkX2Rpcik7XG4rXHRcdFx0XHRzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9kaXIsIDEpO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcdH1cbkBAIC01MTgsMjYgKzUxNywyMSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxuIFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcbiBcdGVsc2VcbiBcdFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgXHUwMDI2PSB+QVRUUl9ISURERU47XG4tXHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xuLVx0XHRlcnIgPSBmYXRfc3luY19pbm9kZShvbGRfaW5vZGUpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXJyb3JfaW5vZGU7XG4tXHR9IGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xuLVxuIFx0aWYgKHVwZGF0ZV9kb3Rkb3QpIHtcbiBcdFx0ZmF0X3NldF9zdGFydChkb3Rkb3RfZGUsIE1TRE9TX0kobmV3X2RpciktXHUwMDNlaV9sb2dzdGFydCk7XG4gXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShkb3Rkb3RfYmgsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0XHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xuLVx0XHRcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXJyb3JfZG90ZG90O1xuLVx0XHR9XG4gXHRcdGRyb3Bfbmxpbmsob2xkX2Rpcik7XG4gXHRcdGlmICghbmV3X2lub2RlKVxuIFx0XHRcdGluY19ubGluayhuZXdfZGlyKTtcbiBcdH1cbitcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcbitcdGlmIChJU19ESVJTWU5DKG5ld19kaXIpKSB7XG4rXHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2lub2RlLCAxKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycm9yX2RvdGRvdDtcbitcdH1cbitcbiBcbiBcdGVyciA9IGZhdF9yZW1vdmVfZW50cmllcyhvbGRfZGlyLCBcdTAwMjZvbGRfc2luZm8pO1x0LyogYW5kIHJlbGVhc2VzIGJoICovXG4gXHRvbGRfc2luZm8uYmggPSBOVUxMO1xuQEAgLTU0NSwxMCArNTM5LDkgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSxcbiBcdFx0Z290byBlcnJvcl9kb3Rkb3Q7XG4gXHRpbm9kZV9pbmNfaXZlcnNpb24ob2xkX2Rpcik7XG4gXHRmYXRfdHJ1bmNhdGVfdGltZShvbGRfZGlyLCBcdTAwMjZ0cywgRkFUX1VQREFURV9DTVRJTUUpO1xuK1x0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKVxuLVx0XHQodm9pZClmYXRfc3luY19pbm9kZShvbGRfZGlyKTtcbi1cdGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbitcdFx0c3luY19pbm9kZV9tZXRhZGF0YShvbGRfZGlyLCAxKTtcbiBcbiBcdGlmIChuZXdfaW5vZGUpIHtcbiBcdFx0ZHJvcF9ubGluayhuZXdfaW5vZGUpO1xuQEAgLTU3MSwxNCArNTY0LDEzIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0XHRjb3JydXB0IHw9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XG4gXHR9XG4tZXJyb3JfaW5vZGU6XG4gXHRmYXRfZGV0YWNoKG9sZF9pbm9kZSk7XG4gXHRmYXRfYXR0YWNoKG9sZF9pbm9kZSwgb2xkX3NpbmZvLmlfcG9zKTtcbiBcdE1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX2F0dHJzID0gb2xkX2F0dHJzO1xuIFx0aWYgKG5ld19pbm9kZSkge1xuIFx0XHRmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTtcbiBcdFx0aWYgKGNvcnJ1cHQpXG4tXHRcdFx0Y29ycnVwdCB8PSBmYXRfc3luY19pbm9kZShuZXdfaW5vZGUpO1xuK1x0XHRcdGNvcnJ1cHQgfD0gc3luY19pbm9kZV9tZXRhZGF0YShuZXdfaW5vZGUsIDEpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogSWYgbmV3IGVudHJ5IHdhcyBub3Qgc2hhcmluZyB0aGUgZGF0YSBjbHVzdGVyLCBpdFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXG5pbmRleCBlOTA5NDQ3ODczZTM2NC4uNzMyYWJmMDcyZmRkM2IgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvbmFtZWlfdmZhdC5jXG4rKysgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXG5AQCAtNjc4LDEwICs2NzgsOSBAQCBzdGF0aWMgaW50IHZmYXRfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcW5hbWUsXG4gXG4gXHQvKiB1cGRhdGUgdGltZXN0YW1wICovXG4gXHRmYXRfdHJ1bmNhdGVfdGltZShkaXIsIHRzLCBGQVRfVVBEQVRFX0NNVElNRSk7XG4rXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4gXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuLVx0XHQodm9pZClmYXRfc3luY19pbm9kZShkaXIpO1xuLVx0ZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4rXHRcdHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbiBjbGVhbnVwOlxuIFx0a2ZyZWUoc2xvdHMpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC05MDQsOSArOTAzLDkgQEAgc3RhdGljIGludCB2ZmF0X2dldF9kb3Rkb3RfZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgsXG4gXG4gc3RhdGljIGludCB2ZmF0X3N5bmNfaXBvcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4tXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuLVx0XHRyZXR1cm4gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xuIFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuK1x0XHRyZXR1cm4gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtOTI1LDEwICs5MjQsOSBAQCBzdGF0aWMgdm9pZCB2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4gXHRpbm9kZV9pbmNfaXZlcnNpb24oZGlyKTtcbiBcdGZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTtcbitcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbitcdFx0c3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbkBAIC0xMDI1LDcgKzEwMjMsNyBAQCBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdGlmIChuZXdfaW5vZGUpIHtcbiBcdFx0ZmF0X2F0dGFjaChuZXdfaW5vZGUsIG5ld19pX3Bvcyk7XG4gXHRcdGlmIChjb3JydXB0KVxuLVx0XHRcdGNvcnJ1cHQgfD0gZmF0X3N5bmNfaW5vZGUobmV3X2lub2RlKTtcbitcdFx0XHRjb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIElmIG5ldyBlbnRyeSB3YXMgbm90IHNoYXJpbmcgdGhlIGRhdGEgY2x1c3RlciwgaXRcbmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jXG5pbmRleCBmZGI4NzY2ZDI3NWExNy4uOWQ5NjM1NzczMWEzZDQgMTAwNjQ0XG4tLS0gYS9mcy9mcy13cml0ZWJhY2suY1xuKysrIGIvZnMvZnMtd3JpdGViYWNrLmNcbkBAIC0xODUxLDYgKzE4NTEsMjIgQEAgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0XHRpZiAocmV0ID09IDApXG4gXHRcdFx0cmV0ID0gZXJyO1xuIFx0fVxuK1xuK1x0LypcbitcdCAqIERvIHdlIG5lZWQgdG8gd2FpdCBmb3IgaW5vZGUgbWV0YWRhdGEgSU8gcG9zc2libHkgc3VibWl0dGVkXG4rXHQgKiBieSBwcmV2aW91cyBXQl9TWU5DX05PTkUgd3JpdGViYWNrP1xuK1x0ICovXG4rXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcdTAwMjZcdTAwMjYgIXdiYy1cdTAwM2Vmb3Jfc3luYyBcdTAwMjZcdTAwMjZcbitcdCAgICBpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX01FVEFEQVRBX1dSSVRFQkFDSykge1xuK1x0XHRpbnQgZXJyO1xuK1xuK1x0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbitcdFx0aW5vZGVfc3RhdGVfY2xlYXIoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbitcdFx0ZXJyID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX29wLVx1MDAzZXN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIHdiYyk7XG4rXHRcdGlmIChyZXQgPT0gMClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXHR9XG4gXHR3YmMtXHUwMDNldW5waW5uZWRfbmV0ZnNfd2IgPSBmYWxzZTtcbiBcdHRyYWNlX3dyaXRlYmFja19zaW5nbGVfaW5vZGUoaW5vZGUsIHdiYywgbnJfdG9fd3JpdGUpO1xuIFx0cmV0dXJuIHJldDtcbkBAIC0xODkyLDE0ICsxOTA4LDE3IEBAIHN0YXRpYyBpbnQgd3JpdGViYWNrX3NpbmdsZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0LypcbiBcdCAqIElmIHRoZSBpbm9kZSBpcyBhbHJlYWR5IGZ1bGx5IGNsZWFuLCB0aGVuIHRoZXJlJ3Mgbm90aGluZyB0byBkby5cbiBcdCAqXG4tXHQgKiBGb3IgZGF0YS1pbnRlZ3JpdHkgc3luY3Mgd2UgYWxzbyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYW55IHBhZ2VzIGFyZVxuLVx0ICogc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkUgd3JpdGViYWNrLiAgSWZcbi1cdCAqIHRoZXJlIGFyZSBhbnkgc3VjaCBwYWdlcywgd2UnbGwgbmVlZCB0byB3YWl0IGZvciB0aGVtLlxuK1x0ICogRm9yIGRhdGEtaW50ZWdyaXR5IHN5bmNzIHdlIGFsc28gbmVlZCB0byBjaGVjayB3aGV0aGVyIGFueSBmb2xpb3Mgb3JcbitcdCAqIG1ldGFkYXRhIGFyZSBzdGlsbCB1bmRlciB3cml0ZWJhY2ssIGUuZy4gZHVlIHRvIHByaW9yIFdCX1NZTkNfTk9ORVxuK1x0ICogd3JpdGViYWNrLiBJZiB0aGVyZSwgd2UnbGwgbmVlZCB0byB3YWl0IGZvciB0aGVtLlxuIFx0ICovXG4tXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9BTEwpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICh3YmMtXHUwMDNlc3luY19tb2RlICE9IFdCX1NZTkNfQUxMIHx8XG4tXHQgICAgICFtYXBwaW5nX3RhZ2dlZChpbm9kZS1cdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSkpXG4tXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZChpbm9kZSkgXHUwMDI2IElfRElSVFlfQUxMKSkge1xuK1x0XHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSAhPSBXQl9TWU5DX0FMTClcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0aWYgKCFtYXBwaW5nX3RhZ2dlZChpbm9kZS1cdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEoaW5vZGVfc3RhdGVfcmVhZChpbm9kZSkgXHUwMDI2IElfTUVUQURBVEFfV1JJVEVCQUNLKSlcbitcdFx0XHRnb3RvIG91dDtcbitcdH1cbiBcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9TWU5DKTtcbiBcdHdiY19hdHRhY2hfYW5kX3VubG9ja19pbm9kZSh3YmMsIGlub2RlKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuY1xuaW5kZXggNWEwZDI3NjM3OWQxM2IuLjU3ZTU5NzFiNjMzMTk3IDEwMDY0NFxuLS0tIGEvZnMvbGliZnMuY1xuKysrIGIvZnMvbGliZnMuY1xuQEAgLTE1NTksOSArMTU1OSwxMCBAQCBpbnQgc2ltcGxlX2ZzeW5jX25vZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0FMTCkpXG4rXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiAoSV9ESVJUWV9BTEwgfCBJX1NZTkMpKSlcbiBcdFx0Z290byBvdXQ7XG4tXHRpZiAoZGF0YXN5bmMgXHUwMDI2XHUwMDI2ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQykpXG4rXHRpZiAoZGF0YXN5bmMgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiAoSV9ESVJUWV9EQVRBU1lOQyB8IElfU1lOQykpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2Rpci5jIGIvZnMvbWluaXgvZGlyLmNcbmluZGV4IDM2MWQyNmQ4N2QyZTJkLi4yY2ExNmY4NDlkNWFjMCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2Rpci5jXG4rKysgYi9mcy9taW5peC9kaXIuY1xuQEAgLTIzLDcgKzIzLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfb3BlcmF0aW9ucyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IG1pbml4X3JlYWRkaXIsXG4tXHQuZnN5bmNcdFx0PSBtaW5peF9mc3luYyxcbitcdC5mc3luY1x0XHQ9IHNpbXBsZV9mc3luYyxcbiB9O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jXG5pbmRleCA4NmU1OTQzY2QyZmY3NC4uMDJhYWJiZGI1ZGVhYTAgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9maWxlLmNcbisrKyBiL2ZzL21pbml4L2ZpbGUuY1xuQEAgLTEwLDEzICsxMCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFwibWluaXguaFwiXG4gXG4taW50IG1pbml4X2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbi17XG4tXHRyZXR1cm4gbW1iX2ZzeW5jKGZpbGUsXG4tXHRcdFx0XHUwMDI2bWluaXhfaShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIC8qXG4gICogV2UgaGF2ZSBtb3N0bHkgTlVMTHMgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIE9LIGZvclxuICAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLlxuQEAgLTI2LDcgKzE5LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQucmVhZF9pdGVyXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4gXHQud3JpdGVfaXRlclx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcbiBcdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbi1cdC5mc3luY1x0XHQ9IG1pbml4X2ZzeW5jLFxuK1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xuaW5kZXggYzMwY2M1OTA2OThkNmYuLjk1MjY3ZDkzZWYzOWRmIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xuKysrIGIvZnMvbWluaXgvaW5vZGUuY1xuQEAgLTI0LDYgKzI0LDggQEBcbiBcbiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbitzdGF0aWMgaW50IG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7XG4gXG4gdm9pZCBfX21pbml4X2Vycm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLFxuQEAgLTEyOCw2ICsxMzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbWluaXhfc29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSBtaW5peF9hbGxvY19pbm9kZSxcbiBcdC5mcmVlX2lub2RlXHQ9IG1pbml4X2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBtaW5peF93cml0ZV9pbm9kZSxcbitcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSxcbiBcdC5ldmljdF9pbm9kZVx0PSBtaW5peF9ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gbWluaXhfcHV0X3N1cGVyLFxuIFx0LnN0YXRmc1x0XHQ9IG1pbml4X3N0YXRmcyxcbkBAIC02MzAsNyArNjMzLDcgQEAgc3RydWN0IGlub2RlICptaW5peF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxuIC8qXG4gICogVGhlIG1pbml4IFYxIGZ1bmN0aW9uIHRvIHN5bmNocm9uaXplIGFuIGlub2RlLlxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4rc3RhdGljIGludCBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4ge1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICogYmg7XG4gXHRzdHJ1Y3QgbWluaXhfaW5vZGUgKiByYXdfaW5vZGU7XG5AQCAtNjM5LDcgKzY0Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXG4gXHRyYXdfaW5vZGUgPSBtaW5peF9WMV9yYXdfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIFx1MDAyNmJoKTtcbiBcdGlmICghcmF3X2lub2RlKVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdFx0cmV0dXJuIC1FSU87XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9tb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfdWlkID0gZnNfaGlnaDJsb3d1aWQoaV91aWRfcmVhZChpbm9kZSkpO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfZ2lkID0gZnNfaGlnaDJsb3dnaWQoaV9naWRfcmVhZChpbm9kZSkpO1xuQEAgLTY1MSwxMyArNjU0LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRlbHNlIGZvciAoaSA9IDA7IGkgXHUwMDNjIDk7IGkrKylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTFfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbitcdGJyZWxzZShiaCk7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKlxuICAqIFRoZSBtaW5peCBWMiBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSBhbiBpbm9kZS5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuK3N0YXRpYyBpbnQgVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoO1xuIFx0c3RydWN0IG1pbml4Ml9pbm9kZSAqIHJhd19pbm9kZTtcbkBAIC02NjYsNyArNjcxLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcbiBcdHJhd19pbm9kZSA9IG1pbml4X1YyX3Jhd19pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBpbm9kZS1cdTAwM2VpX2lubywgXHUwMDI2YmgpO1xuIFx0aWYgKCFyYXdfaW5vZGUpXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0XHRyZXR1cm4gLUVJTztcbiBcdHJhd19pbm9kZS1cdTAwM2VpX21vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGU7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV91aWQgPSBmc19oaWdoMmxvd3VpZChpX3VpZF9yZWFkKGlub2RlKSk7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7XG5AQCAtNjgwLDI5ICs2ODUsNDAgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdGVsc2UgZm9yIChpID0gMDsgaSBcdTAwM2MgMTA7IGkrKylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTJfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbitcdGJyZWxzZShiaCk7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuK3tcbitcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcbitcdFx0cmV0dXJuIFYxX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XG4rXHRyZXR1cm4gVjJfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTtcbit9XG4rXG4rc3RhdGljIGludCBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdGludCBlcnIgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbitcdHZvaWQgKnJhd19pbm9kZTtcbiBcbiBcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcbi1cdFx0YmggPSBWMV9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xuK1x0XHRyYXdfaW5vZGUgPSBtaW5peF9WMV9yYXdfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIFx1MDAyNmJoKTtcbiBcdGVsc2Vcbi1cdFx0YmggPSBWMl9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xuLVx0aWYgKCFiaClcbitcdFx0cmF3X2lub2RlID0gbWluaXhfVjJfcmF3X2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBcdTAwMjZiaCk7XG4rXHRpZiAoIXJhd19pbm9kZSlcbiBcdFx0cmV0dXJuIC1FSU87XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcdTAwMjZcdTAwMjYgYnVmZmVyX2RpcnR5KGJoKSkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbi1cdFx0XHRwcmludGsoXCJJTyBlcnJvciBzeW5jaW5nIG1pbml4IGlub2RlIFslczolMDhsbHhdXFxuXCIsXG4tXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdFx0XHRlcnIgPSAtRUlPO1xuLVx0XHR9XG4rXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4rXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xuK1x0XHRwcmludGsoXCJJTyBlcnJvciBzeW5jaW5nIG1pbml4IGlub2RlIFslczolMDhsbHhdXFxuXCIsXG4rXHRcdFx0aW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2lkLCBpbm9kZS1cdTAwM2VpX2lubyk7XG4rXHRcdGVyciA9IC1FSU87XG4gXHR9XG4tXHRicmVsc2UgKGJoKTtcbitcdGVyciA9IG1tYl9zeW5jKFx1MDAyNm1pbml4X2koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitvdXQ6XG4rXHRicmVsc2UoYmgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2Rpci5jIGIvZnMvdWRmL2Rpci5jXG5pbmRleCBlYmM5ZjZhMzc5ZmUzYS4uNDI1ZTNjMTYyOTM1MDQgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvZGlyLmNcbisrKyBiL2ZzL3VkZi9kaXIuY1xuQEAgLTE1Nyw2ICsxNTcsNiBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9kaXJfb3BlcmF0aW9ucyA9IHtcbiBcdC5yZWFkXHRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHRcdD0gdWRmX3JlYWRkaXIsXG4gXHQudW5sb2NrZWRfaW9jdGxcdFx0PSB1ZGZfaW9jdGwsXG4tXHQuZnN5bmNcdFx0XHQ9IHVkZl9mc3luYyxcbitcdC5mc3luY1x0XHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNldGxlYXNlXHRcdD0gZ2VuZXJpY19zZXRsZWFzZSxcbiB9O1xuZGlmZiAtLWdpdCBhL2ZzL3VkZi9maWxlLmMgYi9mcy91ZGYvZmlsZS5jXG5pbmRleCBmN2YxNDIyZGUzMGZhNC4uNTdkMTE2MDZhMmE3NzYgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvZmlsZS5jXG4rKysgYi9mcy91ZGYvZmlsZS5jXG5AQCAtMTk4LDEzICsxOTgsNiBAQCBzdGF0aWMgaW50IHVkZl9maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCB1ZGZfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHJldHVybiBtbWJfZnN5bmMoZmlsZSxcbi1cdFx0XHRcdTAwMjZVREZfSShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5yZWFkX2l0ZXJcdFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuIFx0LnVubG9ja2VkX2lvY3RsXHRcdD0gdWRmX2lvY3RsLFxuQEAgLTIxMiw3ICsyMDUsNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubW1hcFx0XHRcdD0gdWRmX2ZpbGVfbW1hcCxcbiBcdC53cml0ZV9pdGVyXHRcdD0gdWRmX2ZpbGVfd3JpdGVfaXRlcixcbiBcdC5yZWxlYXNlXHRcdD0gdWRmX3JlbGVhc2VfZmlsZSxcbi1cdC5mc3luY1x0XHRcdD0gdWRmX2ZzeW5jLFxuK1x0LmZzeW5jXHRcdFx0PSBzaW1wbGVfZnN5bmMsXG4gXHQuc3BsaWNlX3JlYWRcdFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuIFx0LnNwbGljZV93cml0ZVx0XHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4gXHQubGxzZWVrXHRcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuQEAgLTI1Myw2ICsyNDYsOCBAQCBzdGF0aWMgaW50IHVkZl9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXG4gXHRzZXRhdHRyX2NvcHkoXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIGF0dHIpO1xuIFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHRpZiAoSVNfU1lOQyhpbm9kZSkpXG4rXHRcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmNcbmluZGV4IDY3YmNmODM3NThjOGZiLi5kOTkxYTY3MWMwYTY5MSAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9pbm9kZS5jXG4rKysgYi9mcy91ZGYvaW5vZGUuY1xuQEAgLTUxLDggKzUxLDYgQEBcbiBzdHJ1Y3QgdWRmX21hcF9ycTtcbiBcbiBzdGF0aWMgdW1vZGVfdCB1ZGZfY29udmVydF9wZXJtaXNzaW9ucyhzdHJ1Y3QgZmlsZUVudHJ5ICopO1xuLXN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcbi1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIHN0YXRpYyBpbnQgdWRmX2FsbG9jX2lfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzaXplX3Qgc2l6ZSk7XG4gc3RhdGljIGludCBpbm9kZV9nZXRibGsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHVkZl9tYXBfcnEgKm1hcCk7XG4gc3RhdGljIGludCB1ZGZfaW5zZXJ0X2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24sXG5AQCAtMTQyLDcgKzE0MCw5IEBAIHZvaWQgdWRmX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdGlmICghaW5vZGUtXHUwMDNlaV9ubGluaykge1xuIFx0XHRcdHdhbnRfZGVsZXRlID0gMTtcbiBcdFx0XHR1ZGZfc2V0c2l6ZShpbm9kZSwgMCk7XG4tXHRcdFx0dWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgSVNfU1lOQyhpbm9kZSkpO1xuK1x0XHRcdHVkZl93cml0ZV9pbm9kZShpbm9kZSwgTlVMTCk7XG4rXHRcdFx0aWYgKElTX1NZTkMoaW5vZGUpKVxuK1x0XHRcdFx0dWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIE5VTEwpO1xuIFx0XHR9XG4gXHRcdGlmIChpaW5mby1cdTAwM2VpX2FsbG9jX3R5cGUgIT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgaW5vZGUtXHUwMDNlaV9zaXplICE9IGlpbmZvLVx1MDAzZWlfbGVuRXh0ZW50cykge1xuQEAgLTkzNiw5ICs5MzYsMTAgQEAgc3RhdGljIGludCBpbm9kZV9nZXRibGsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHVkZl9tYXBfcnEgKm1hcClcbiBcdGlpbmZvLVx1MDAzZWlfbmV4dF9hbGxvY19nb2FsID0gbmV3YmxvY2tudW0gKyAxO1xuIFx0aW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpO1xuIFxuLVx0aWYgKElTX1NZTkMoaW5vZGUpKVxuLVx0XHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XG4tXHRlbHNlXG4rXHRpZiAoSVNfU1lOQyhpbm9kZSkpIHtcbitcdFx0dWRmX3dyaXRlX2lub2RlKGlub2RlLCBOVUxMKTtcbitcdFx0dWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIE5VTEwpO1xuK1x0fSBlbHNlXG4gXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0cmV0ID0gMDtcbiBvdXRfZnJlZTpcbkBAIC0xMzI2LDEwICsxMzI3LDcgQEAgaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKVxuIFx0fVxuIHVwZGF0ZV90aW1lOlxuIFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGlub2RlLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSkpO1xuLVx0aWYgKElTX1NZTkMoaW5vZGUpKVxuLVx0XHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNzA1LDE0ICsxNzAzLDI4IEBAIHZvaWQgdWRmX3VwZGF0ZV9leHRyYV9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bW9kZV90IG1vZGUpXG4gXHRcdGlpbmZvLVx1MDAzZWlfZXh0cmFQZXJtcyB8PSBGRV9QRVJNX09fREVMRVRFO1xuIH1cbiBcbi1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuK2ludCB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4tXHRyZXR1cm4gdWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgd2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7XG4tfVxuK1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbitcdGludCBlcnIgPSAwO1xuIFxuLXN0YXRpYyBpbnQgdWRmX3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi17XG4tXHRyZXR1cm4gdWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgMSk7XG4rXHRiaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLFxuK1x0XHRcdHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLVx1MDAzZWlfc2IsXG4rXHRcdFx0XHRcdCAgXHUwMDI2VURGX0koaW5vZGUpLVx1MDAzZWlfbG9jYXRpb24sIDApKTtcbitcdGlmICghYmgpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuK1x0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuK1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbitcdFx0dWRmX3dhcm4oaW5vZGUtXHUwMDNlaV9zYiwgXCJJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxcblwiLFxuK1x0XHRcdCBpbm9kZS1cdTAwM2VpX2lubyk7XG4rXHRcdGVyciA9IC1FSU87XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZXJyID0gbW1iX3N5bmMoXHUwMDI2VURGX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitvdXQ6XG4rXHRicmVsc2UoYmgpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdWRmX2FkanVzdF90aW1lKHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8sIHN0cnVjdCB0aW1lc3BlYzY0IHRpbWUpXG5AQCAtMTcyMyw3ICsxNzM1LDcgQEAgc3RhdGljIHZvaWQgdWRmX2FkanVzdF90aW1lKHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8sIHN0cnVjdCB0aW1lc3BlYzY0IHRpbWVcbiBcdFx0aWluZm8tXHUwMDNlaV9jcnRpbWUgPSB0aW1lO1xuIH1cbiBcbi1zdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXG4raW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbiBcdHN0cnVjdCBmaWxlRW50cnkgKmZlO1xuQEAgLTE3MzIsNyArMTc0NCw2IEBAIHN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcbiBcdHVpbnQzMl90IHVkZnBlcm1zO1xuIFx0dWludDE2X3QgaWNiZmxhZ3M7XG4gXHR1aW50MTZfdCBjcmNsZW47XG4tXHRpbnQgZXJyID0gMDtcbiBcdHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0dW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cyA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbiBcdHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSShpbm9kZSk7XG5AQCAtMTkzNywxNyArMTk0OCwxMCBAQCBzdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXG4gXG4gXHQvKiB3cml0ZSB0aGUgZGF0YSBibG9ja3MgKi9cbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdGlmIChkb19zeW5jKSB7XG4tXHRcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbi1cdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbi1cdFx0XHR1ZGZfd2Fybihpbm9kZS1cdTAwM2VpX3NiLCBcIklPIGVycm9yIHN5bmNpbmcgdWRmIGlub2RlIFslMDhsbHhdXFxuXCIsXG4tXHRcdFx0XHQgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLVx0XHRcdGVyciA9IC1FSU87XG4tXHRcdH1cbi1cdH1cbiBcdGJyZWxzZShiaCk7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbiBcbi1cdHJldHVybiBlcnI7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RydWN0IGlub2RlICpfX3VkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqaW5vLFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9zdXBlci5jIGIvZnMvdWRmL3N1cGVyLmNcbmluZGV4IDdiODVmNWEyYjc5ZmM0Li5lN2U5ZjJhMGQyNGU4MCAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9zdXBlci5jXG4rKysgYi9mcy91ZGYvc3VwZXIuY1xuQEAgLTIxMSw2ICsyMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdWRmX3NiX29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSB1ZGZfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSB1ZGZfZnJlZV9pbl9jb3JlX2lub2RlLFxuIFx0LndyaXRlX2lub2RlXHQ9IHVkZl93cml0ZV9pbm9kZSxcbitcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEsXG4gXHQuZXZpY3RfaW5vZGVcdD0gdWRmX2V2aWN0X2lub2RlLFxuIFx0LnB1dF9zdXBlclx0PSB1ZGZfcHV0X3N1cGVyLFxuIFx0LnN5bmNfZnNcdD0gdWRmX3N5bmNfZnMsXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZmRlY2wuaCBiL2ZzL3VkZi91ZGZkZWNsLmhcbmluZGV4IDZkOTUxZTA1YzAwNDZhLi44NmRjMmQ2YTJlZjFiOCAxMDA2NDRcbi0tLSBhL2ZzL3VkZi91ZGZkZWNsLmhcbisrKyBiL2ZzL3VkZi91ZGZkZWNsLmhcbkBAIC0xMzcsNyArMTM3LDYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWRmX2Rpcl9lbnRyeV9sZW4oc3RydWN0IGZpbGVJZGVudERlc2MgKmNmaSlcbiBcbiAvKiBmaWxlLmMgKi9cbiBleHRlcm4gbG9uZyB1ZGZfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTtcbi1pbnQgdWRmX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYyk7XG4gXG4gLyogaW5vZGUuYyAqL1xuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLFxuQEAgLTE1OCw2ICsxNTcsNyBAQCBleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfYnJlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdWRmX3BibGtfdCBibG9jayxcbiBleHRlcm4gaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqLCBsb2ZmX3QpO1xuIGV4dGVybiB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XG4gZXh0ZXJuIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbitpbnQgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiBleHRlcm4gaW50IGlub2RlX2JtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdCAgICAgIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKnBvcywgc3RydWN0IGtlcm5lbF9sYl9hZGRyICplbG9jLFxuIFx0XHQgICAgICB1aW50MzJfdCAqZWxlbiwgc2VjdG9yX3QgKm9mZnNldCwgaW50OF90ICpldHlwZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG5pbmRleCA4YjIzYmM5YTI0NGNiMy4uZmQyYzcxMTVjMDU0MjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuQEAgLTIxMCwxMCArMjEwLDYgQEAgdm9pZCBiaF9lbmRfYXN5bmNfd3JpdGUoc3RydWN0IGJpbyAqYmlvKTtcbiBcbiAvKiBUaGluZ3MgdG8gZG8gd2l0aCBtZXRhZGF0YSBidWZmZXJzIGxpc3QgKi9cbiB2b2lkIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYik7XG4taW50IG1tYl9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcbi1cdFx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKTtcbi1pbnQgbW1iX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcbi1cdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYyk7XG4gdm9pZCBjbGVhbl9iZGV2X2FsaWFzZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdFx0c2VjdG9yX3QgbGVuKTtcbiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYW5fYmRldl9iaF9hbGlhcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxuaW5kZXggZDEwODk3YjNhMWUzNTAuLmIxN2UwZDQyMDcxZGY4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC03NDAsNyArNzQwLDggQEAgZW51bSBpbm9kZV9zdGF0ZV9mbGFnc19lbnVtIHtcbiBcdElfQ1JFQVRJTkdcdFx0PSAoMVUgXHUwMDNjXHUwMDNjIDE1KSxcbiBcdElfRE9OVENBQ0hFXHRcdD0gKDFVIFx1MDAzY1x1MDAzYyAxNiksXG4gXHRJX1NZTkNfUVVFVUVEXHRcdD0gKDFVIFx1MDAzY1x1MDAzYyAxNyksXG4tXHRJX1BJTk5JTkdfTkVURlNfV0JcdD0gKDFVIFx1MDAzY1x1MDAzYyAxOClcbitcdElfUElOTklOR19ORVRGU19XQlx0PSAoMVUgXHUwMDNjXHUwMDNjIDE4KSxcbitcdElfTUVUQURBVEFfV1JJVEVCQUNLXHQ9ICgxVSBcdTAwM2NcdTAwM2MgMTkpLFxuIH07XG4gXG4gI2RlZmluZSBJX0RJUlRZX0lOT0RFIChJX0RJUlRZX1NZTkMgfCBJX0RJUlRZX0RBVEFTWU5DKVxuQEAgLTIyMTMsNiArMjIxNCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0eV9zeW5jKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIElfRElSVFlfU1lOQyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rXHRpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rfVxuK1xuIC8qXG4gICogcmV0dXJucyB0aGUgcmVmY291bnQgb24gdGhlIGlub2RlLiBpdCBjYW4gY2hhbmdlIGFyYml0cmFyaWx5LlxuICAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaFxuaW5kZXggZWY3OTQxZTlkYzc5YWMuLjE3MDU2MWU4ZjJlMmM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcbkBAIC04Niw2ICs4Niw4IEBAIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHtcbiBcdHZvaWQgKCpmcmVlX2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcdHZvaWQgKCpkaXJ0eV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKTtcbiBcdGludCAoKndyaXRlX2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XG4rXHRpbnQgKCpzeW5jX2lub2RlX21ldGFkYXRhKShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuIFx0aW50ICgqZHJvcF9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXHR2b2lkICgqZXZpY3RfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFx0dm9pZCAoKnB1dF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOTo1MTowOS43MDIzNzczMTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjU1NDYxNTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldDogYHN5bmNfaW5vZGVfbWV0YWRhdGFgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggdGhhdCdzIGludHJvZHVjaW5nIGBzeW5jX2lub2RlX21ldGFkYXRhYCBpbnRvIGBzdXBlcl9vcGVyYXRpb25zYCBhbmQsIHNpZ25pZmljYW50bHksIG1vZGlmeWluZyBzZXZlcmFsIGZpbGVzeXN0ZW1zIHRvIHVzZSBpdC4gVGhpcyBpcyBhIHByZXR0eSBjb3JlIGNoYW5nZTsgaXQncyB0b3VjaGluZyBWRlMgd3JpdGViYWNrIGxvZ2ljLCBhbmQgdGhhdCdzIGFsd2F5cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgcmVwbGFjaW5nIHRoZSBvbGQgYG1tYl9mc3luY2AgYW5kIGBtbWJfZnN5bmNfbm9mbHVzaGAgaW4gYGZzL2J1ZmZlci5jYCB3aXRoIGBzaW1wbGVfZnN5bmNgIGFuZCBvdXIgc2hpbnkgbmV3IGBzeW5jX2lub2RlX21ldGFkYXRhYC4gVGhlcmUncyBhbHNvIHNvbWUgc3VwcG9ydGluZyBpbmZyYXN0cnVjdHVyZTogdGhlIGBJX01FVEFEQVRBX1dSSVRFQkFDS2AgZmxhZyBhbmQgYHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2tgIGZ1bmN0aW9uLlxuXG5MZXQncyBxdWlja2x5IGVudW1lcmF0ZSB0aGUgZmlsZXN5c3RlbXMgYWZmZWN0ZWQ6IGFmZnMsIGJmcywgZXh0MiwgZXh0NCwgZmF0LCBtaW5peCwgYW5kIHVkZi4gVGhlc2UgYXJlIHRoZSBwcmltYXJ5IHRhcmdldHMsIGFuZCB3ZSdsbCB3YW50IHRvIGVuc3VyZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlncyBhcmUgZW5hYmxlZDogYENPTkZJR19BRkZTX0ZTYCwgYENPTkZJR19CRlNfRlNgLCBgQ09ORklHX0VYVDJfRlNgLCBgQ09ORklHX0VYVDRfRlNgLCBgQ09ORklHX0ZBVF9GU2AsIGBDT05GSUdfTUlOSVhfRlNgLCBhbmQgYENPTkZJR19VREZfRlNgLlxuXG5UaGUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb24gYXJlOiBgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlYCwgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgLCBhbmQgdGhlbiB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG5ldyBjYWxsYmFjazogYGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgc2ltcGxlX2ZzeW5jX25vZmx1c2hgLlxuXG5JJ3ZlIGFscmVhZHkgdmVyaWZpZWQgdGhlIGNvbmZpZ3M7IHdlJ3JlIGdvb2QgdGhlcmUuIEFuZCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggRkFULCBsZXQncyBhbHNvIGtlZXAgYW4gZXllIG9uIGBDT05GSUdfTVNET1NfRlNgIGFuZCBgQ09ORklHX1ZGQVRfRlNgIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cbk5vdywgYSBxdWljayBgZ3JlcGAgZm9yIGBzeW5jX2lub2RlX21ldGFkYXRhYC4uLiBqdXN0IHRvIGJlIGNlcnRhaW4gd2UgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIFdhaXQgYSBzZWNvbmQsIHRoZSBwYXRjaCAqYWRkcyogaXQgdG8gYHN1cGVyX29wZXJhdGlvbnNgLS1yaWdodCwgdGhhdCBtYWtlcyBzZW5zZS5cblxuTGV0J3MgZGlnIGludG8gdGhlIGBmcy9mcy13cml0ZWJhY2suY2AgY2hhbmdlcy4gSSBzZWUgdGhlIGtleSBwaWVjZTogYSBjaGVjayBmb3IgYElfTUVUQURBVEFfV1JJVEVCQUNLYCBhbmQgYSBjYWxsIHRvIGBzeW5jX2lub2RlX21ldGFkYXRhYC4gVGhpcyBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS5cblxuT2theSwgbGV0IG1lIGxpc3QgdGhlIGZvY3VzIHN5bWJvbHMgYWdhaW4gZm9yIGNvbXBsZXRlbmVzczogYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAsIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYCwgYGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgc2ltcGxlX2ZzeW5jX25vZmx1c2hgLlxuXG5Ob3csIGxldCdzIGp1c3QgY2hlY2sgdGhlIHN0YXRpYy1uZXNzIG9mIHRoZSBmaWxlc3lzdGVtIGNhbGxiYWNrczsgd2hpY2ggb25lcyBhcmUgaW50ZXJuYWw/IGBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGFgIGlzIG5vdCBzdGF0aWMuIGBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFgIGlzIG5vdCBzdGF0aWMuIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYW5kIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAgYXJlIHN0YXRpYy5cblxuQWxyaWdodCwgdGltZSB0byBjaGVjayB3aGVyZSBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCByZXNpZGVzLiBJdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCBpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhhdCdzIGdvb2QgdG8ga25vdy5cblxuQWdhaW4sIHRoZSBjb25maWdzIGFyZTogYEVYVDRfRlNgLCBgRVhUMl9GU2AsIGBGQVRfRlNgLCBgTVNET1NfRlNgLCBgVkZBVF9GU2AsIGBNSU5JWF9GU2AsIGBVREZfRlNgLCBgQkZTX0ZTYCwgYEFGRlNfRlNgLlxuXG5XZSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgRkFUIGRlcGVuZGVuY2llcy4gSW4gYGZzL2ZhdC9LY29uZmlnYCwgYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgIGRlcGVuZCBvbiBgRkFUX0ZTYC4gU28gd2UgKnNob3VsZCogZW5hYmxlIHRob3NlIHR3byBhcyB3ZWxsIHdoZW4gZnV6emluZy5cblxuSSdsbCBjaGVjayBgZnMvYWZmcy9LY29uZmlnYCwgYGZzL2Jmcy9LY29uZmlnYCwgYGZzL21pbml4L0tjb25maWdgLCBhbmQgYGZzL3VkZi9LY29uZmlnYCBub3csIGp1c3QgdG8gbWFrZSBzdXJlIHRob3NlIGRlcGVuZGVuY2llcyBhcmVuJ3QgaGlkaW5nIGFueXRoaW5nLiBFdmVyeXRoaW5nIHNlZW1zIGZpbmUuXG5cbk9rYXksIHdpdGggdGhhdCBzYW5pdHkgY2hlY2sgY29tcGxldGUsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTczLCJPdXRwdXRUb2tlbnMiOjI4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOTo1MToyNi4yNTY5OTQxNjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTIxNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQyX0ZTXCIsXG4gICAgXCJGQVRfRlNcIixcbiAgICBcIk1TRE9TX0ZTXCIsXG4gICAgXCJWRkFUX0ZTXCIsXG4gICAgXCJNSU5JWF9GU1wiLFxuICAgIFwiVURGX0ZTXCIsXG4gICAgXCJCRlNfRlNcIixcbiAgICBcIkFGRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcIndyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcImV4dDRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJmYXRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwidWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcIm1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImJmc19zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJzaW1wbGVfZnN5bmNfbm9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgVkZTIHN1cGVyX29wZXJhdGlvbnMgY2FsbGJhY2sgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGFuZCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBleHQyLCBmYXQsIG1pbml4LCB1ZGYsIGJmcywgYWZmcykgdG8gaW1wbGVtZW50IGFuZCB1c2UgaXQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvcmUgd3JpdGViYWNrIGxvZ2ljIGluIGBmcy9mcy13cml0ZWJhY2suY2AgdG8gd2FpdCBmb3IgaW5vZGUgbWV0YWRhdGEgSU8uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBWRlMgYW5kIG11bHRpcGxlIGZpbGVzeXN0ZW1zLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQyX0ZTXCIsXG4gICAgXCJGQVRfRlNcIixcbiAgICBcIk1TRE9TX0ZTXCIsXG4gICAgXCJWRkFUX0ZTXCIsXG4gICAgXCJNSU5JWF9GU1wiLFxuICAgIFwiVURGX0ZTXCIsXG4gICAgXCJCRlNfRlNcIixcbiAgICBcIkFGRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcIndyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcImV4dDRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJmYXRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwidWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcIm1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImJmc19zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJzaW1wbGVfZnN5bmNfbm9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgVkZTIHN1cGVyX29wZXJhdGlvbnMgY2FsbGJhY2sgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGFuZCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBleHQyLCBmYXQsIG1pbml4LCB1ZGYsIGJmcywgYWZmcykgdG8gaW1wbGVtZW50IGFuZCB1c2UgaXQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvcmUgd3JpdGViYWNrIGxvZ2ljIGluIGBmcy9mcy13cml0ZWJhY2suY2AgdG8gd2FpdCBmb3IgaW5vZGUgbWV0YWRhdGEgSU8uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBWRlMgYW5kIG11bHRpcGxlIGZpbGVzeXN0ZW1zLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow859cl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 19:42:33 +0000 UTC FinishedAt: 2026-07-02 19:51:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4a50a141f05a8d1737661b19ee22ff8455b94409", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT2_FS", "FAT_FS", "MSDOS_FS", "VFAT_FS", "MINIX_FS", "UDF_FS", "BFS_FS", "AFFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4a50a141f05a8d1737661b19ee22ff8455b94409", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT2_FS", "FAT_FS", "MSDOS_FS", "VFAT_FS", "MINIX_FS", "UDF_FS", "BFS_FS", "AFFS_FS" ], "series_id": "a71b0842-80ca-4520-bf44-525b2ea88c3f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__writeback_single_inode", "writeback_single_inode", "ext4_sync_inode_metadata", "ext2_sync_inode_metadata", "fat_sync_inode_metadata", "udf_sync_inode_metadata", "minix_sync_inode_metadata", "bfs_sync_inode_metadata", "simple_fsync_noflush" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "1bc13af8-2d91-4fbd-b43e-fbe72f29ca41" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUMl9GUyYjMzQ7LAogICAgJiMzNDtGQVRfRlMmIzM0OywKICAgICYjMzQ7TVNET1NfRlMmIzM0OywKICAgICYjMzQ7VkZBVF9GUyYjMzQ7LAogICAgJiMzNDtNSU5JWF9GUyYjMzQ7LAogICAgJiMzNDtVREZfRlMmIzM0OywKICAgICYjMzQ7QkZTX0ZTJiMzNDssCiAgICAmIzM0O0FGRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3dyaXRlYmFja19zaW5nbGVfaW5vZGUmIzM0OywKICAgICYjMzQ7d3JpdGViYWNrX3NpbmdsZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7ZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O2ZhdF9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3VkZl9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O21pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7YmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7c2ltcGxlX2ZzeW5jX25vZmx1c2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBWRlMgc3VwZXJfb3BlcmF0aW9ucyBjYWxsYmFjayBgc3luY19pbm9kZV9tZXRhZGF0YWAgYW5kIG1vZGlmaWVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIGV4dDIsIGZhdCwgbWluaXgsIHVkZiwgYmZzLCBhZmZzKSB0byBpbXBsZW1lbnQgYW5kIHVzZSBpdC4gSXQgYWxzbyBtb2RpZmllcyB0aGUgY29yZSB3cml0ZWJhY2sgbG9naWMgaW4gYGZzL2ZzLXdyaXRlYmFjay5jYCB0byB3YWl0IGZvciBpbm9kZSBtZXRhZGF0YSBJTy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIFZGUyBhbmQgbXVsdGlwbGUgZmlsZXN5c3RlbXMsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE5OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTUxMDQ1OGUwMmIyMzJkYmU4NzNiNzZmMTc2ZjRjMTFiNjA2MGUyN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTk6NTE6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9hZmZzLmggYi9mcy9hZmZzL2FmZnMuaFxuaW5kZXggNDRhM2Y2OWQyNzVmOTYuLmE3ZmFhOTFkZWVkNWFjIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9hZmZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvYWZmcy5oXG5AQCAtNDQsNyAmIzQzOzQ0LDYgQEAgc3RydWN0IGFmZnNfaW5vZGVfaW5mbyB7XG4gXHRzdHJ1Y3QgbXV0ZXggaV9saW5rX2xvY2s7XHRcdC8qIFByb3RlY3RzIGludGVybmFsIGlub2RlIGFjY2Vzcy4gKi9cbiBcdHN0cnVjdCBtdXRleCBpX2V4dF9sb2NrO1x0XHQvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovXG4gI2RlZmluZSBpX2hhc2hfbG9jayBpX2V4dF9sb2NrXG4tXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XG4gXHR1MzJcdCBpX2Jsa2NudDtcdFx0XHQvKiBibG9jayBjb3VudCAqL1xuIFx0dTMyXHQgaV9leHRjbnQ7XHRcdFx0LyogZXh0ZW5kZWQgYmxvY2sgY291bnQgKi9cbiBcdHUzMlx0KmlfbGM7XHRcdFx0XHQvKiBsaW5lYXIgY2FjaGUgb2YgZXh0ZW5kZWQgYmxvY2tzICovXG5AQCAtMTUyLDcgJiM0MzsxNTEsNiBAQCBleHRlcm4gYm9vbFx0YWZmc19ub2ZpbGVuYW1ldHJ1bmNhdGUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBleHRlcm4gaW50XHRhZmZzX2NoZWNrX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgaW50IGxlbixcbiBcdFx0XHRcdGJvb2wgbm90cnVuY2F0ZSk7XG4gZXh0ZXJuIGludFx0YWZmc19jb3B5X25hbWUodW5zaWduZWQgY2hhciAqYnN0ciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbi1zdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmFmZnNfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKiBiaXRtYXAuIGMgKi9cbiBcbmRpZmYgLS1naXQgYS9mcy9hZmZzL2FtaWdhZmZzLmMgYi9mcy9hZmZzL2FtaWdhZmZzLmNcbmluZGV4IGJlZDRmYzgwNWU4ZTY2Li42Y2MwZmM5YTRjYmY5MiAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvYW1pZ2FmZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9hbWlnYWZmcy5jXG5AQCAtNTcsNyAmIzQzOzU3LDcgQEAgYWZmc19pbnNlcnRfaGFzaChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiBcdFx0QUZGU19UQUlMKHNiLCBkaXJfYmgpLVx1MDAzZWhhc2hfY2hhaW4gPSBjcHVfdG9fYmUzMihpbm8pO1xuIFxuIFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oZGlyX2JoLCBpbm8pO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCwgXHUwMDI2QUZGU19JKGRpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCk7XG4gXHRhZmZzX2JyZWxzZShkaXJfYmgpO1xuIFxuIFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XG5AQCAtMTAwLDcgJiM0MzsxMDAsNyBAQCBhZmZzX3JlbW92ZV9oYXNoKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlbV9iaClcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VoYXNoX2NoYWluID0gaW5vO1xuIFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBiZTMyX3RvX2NwdShpbm8pIC0gaGFzaF9pbm8pO1xuLVx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGRpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRcdFx0QUZGU19UQUlMKHNiLCByZW1fYmgpLVx1MDAzZXBhcmVudCA9IDA7XG4gXHRcdFx0cmV0dmFsID0gMDtcbiBcdFx0XHRicmVhaztcbkBAIC0xODAsNyAmIzQzOzE4MCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkobGlua19iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoKTtcbiBcbiBcdFx0bWVtY3B5KEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZW5hbWUsIEFGRlNfVEFJTChzYiwgbGlua19iaCktXHUwMDNlbmFtZSwgMzIpO1xuIFx0XHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xuQEAgLTE4OCw3ICYjNDM7MTg4LDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRcdFx0YWZmc191bmxvY2tfZGlyKGRpcik7XG4gXHRcdFx0Z290byBkb25lO1xuIFx0XHR9XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXG4gXHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRpcHV0KGRpcik7XG5AQCAtMjAzLDcgJiM0MzsyMDMsNyBAQCBhZmZzX3JlbW92ZV9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdFx0XHRfX2JlMzIgaW5vMiA9IEFGRlNfVEFJTChzYiwgbGlua19iaCktXHUwMDNlbGlua19jaGFpbjtcbiBcdFx0XHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VsaW5rX2NoYWluID0gaW5vMjtcbiBcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShiaCwgYmUzMl90b19jcHUoaW5vMikgLSBsaW5rX2lubyk7XG4tXHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHRcdHJldHZhbCA9IDA7XG4gXHRcdFx0LyogRml4IHRoZSBsaW5rIGNvdW50LCBpZiBiaCBpcyBhIG5vcm1hbCBoZWFkZXIgYmxvY2sgd2l0aG91dCBsaW5rcyAqL1xuIFx0XHRcdHN3aXRjaCAoYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlc3R5cGUpKSB7XG5AQCAtMzA2LDcgJiM0MzszMDYsNyBAQCBhZmZzX3JlbW92ZV9oZWFkZXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dmFsID0gYWZmc19yZW1vdmVfaGFzaChkaXIsIGJoKTtcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gZG9uZV91bmxvY2s7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcbiBcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmNcbmluZGV4IDE0NGIxNzQ4MmQxMmRhLi4yM2UwODhhN2VkNGZiMyAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2ZpbGUuY1xuQEAgLTE0MCwxNCAmIzQzOzE0MCwxNCBAQCBhZmZzX2FsbG9jX2V4dGJsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHUzMiBleHQpXG4gXHRBRkZTX1RBSUwoc2IsIG5ld19iaCktXHUwMDNlcGFyZW50ID0gY3B1X3RvX2JlMzIoaW5vZGUtXHUwMDNlaV9pbm8pO1xuIFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIG5ld19iaCk7XG4gXG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkobmV3X2JoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRtYXJrX2J1ZmZlcl9kaXJ0eShuZXdfYmgpO1xuIFxuIFx0dG1wID0gYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlZXh0ZW5zaW9uKTtcbiBcdGlmICh0bXApXG4gXHRcdGFmZnNfd2FybmluZyhzYiwgXCYjMzQ7YWxsb2NfZXh0XCYjMzQ7LCBcJiMzNDtwcmV2aW91cyBleHRlbnNpb24gc2V0ICgleClcJiMzNDssIHRtcCk7XG4gXHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VleHRlbnNpb24gPSBjcHVfdG9fYmUzMihibG9ja25yKTtcbiBcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBibG9ja25yIC0gdG1wKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFxuIFx0QUZGU19JKGlub2RlKS1cdTAwM2VpX2V4dGNudCYjNDM7JiM0Mzs7XG4gXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbkBAIC01ODEsNyAmIzQzOzU4MSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0XHRtZW1zZXQoQUZGU19EQVRBKGJoKSAmIzQzOyBib2ZmLCAwLCB0bXApO1xuIFx0XHRiZTMyX2FkZF9jcHUoXHUwMDI2QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUsIHRtcCk7XG4gXHRcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRcdHNpemUgJiM0Mzs9IHRtcDtcbiBcdFx0YmlkeCYjNDM7JiM0Mzs7XG4gXHR9IGVsc2UgaWYgKGJpZHgpIHtcbkBAIC02MDMsNyAmIzQzOzYwMyw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0XHRBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7XG4gXHRcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4gXHRcdGJoLVx1MDAzZWJfc3RhdGUgXHUwMDI2PSB+KDFVTCBcdTAwM2NcdTAwM2MgQkhfTmV3KTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0aWYgKHByZXZfYmgpIHtcbiBcdFx0XHR1MzIgdG1wX25leHQgPSBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0KTtcbiBcbkBAIC02MTMsOCAmIzQzOzYxMyw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0XHRcdFx0XHQgICAgIGJpZHgsIHRtcF9uZXh0KTtcbiBcdFx0XHRBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXHUwMDNlYl9ibG9ja25yKTtcbiBcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShwcmV2X2JoLCBiaC1cdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XG4tXHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsXG4tXHRcdFx0XHRcdCAgICAgIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcbiBcdFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0fVxuIFx0XHRzaXplICYjNDM7PSBic2l6ZTtcbkBAIC03MzMsNyAmIzQzOzczMiw3IEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUgPSBjcHVfdG9fYmUzMihcbiBcdFx0XHRtYXgoYm9mZiAmIzQzOyB0bXAsIGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKGJoKS1cdTAwM2VzaXplKSkpO1xuIFx0XHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHR3cml0dGVuICYjNDM7PSB0bXA7XG4gXHRcdGZyb20gJiM0Mzs9IHRtcDtcbiBcdFx0YmlkeCYjNDM7JiM0Mzs7XG5AQCAtNzY2LDEzICYjNDM7NzY1LDEyIEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0XHRcdFx0XHQgICAgIGJpZHgsIHRtcF9uZXh0KTtcbiBcdFx0XHRcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVx1MDAzZW5leHQgPSBjcHVfdG9fYmUzMihiaC1cdTAwM2ViX2Jsb2NrbnIpO1xuIFx0XHRcdFx0YWZmc19hZGp1c3RfY2hlY2tzdW0ocHJldl9iaCwgYmgtXHUwMDNlYl9ibG9ja25yIC0gdG1wX25leHQpO1xuLVx0XHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsXG4tXHRcdFx0XHRcdFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0d3JpdHRlbiAmIzQzOz0gYnNpemU7XG4gXHRcdGZyb20gJiM0Mzs9IGJzaXplO1xuIFx0XHRiaWR4JiM0MzsmIzQzOztcbkBAIC04MDEsMTQgJiM0Mzs3OTksMTMgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdFx0XHRcdCAgICAgYmlkeCwgdG1wX25leHQpO1xuIFx0XHRcdFx0QUZGU19EQVRBX0hFQUQocHJldl9iaCktXHUwMDNlbmV4dCA9IGNwdV90b19iZTMyKGJoLVx1MDAzZWJfYmxvY2tucik7XG4gXHRcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShwcmV2X2JoLCBiaC1cdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XG4tXHRcdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCxcbi1cdFx0XHRcdFx0XHRcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoYmUzMl90b19jcHUoQUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUpIFx1MDAzYyB0bXApXG4gXHRcdFx0QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUgPSBjcHVfdG9fYmUzMih0bXApO1xuIFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0d3JpdHRlbiAmIzQzOz0gdG1wO1xuIFx0XHRmcm9tICYjNDM7PSB0bXA7XG4gXHRcdGJpZHgmIzQzOyYjNDM7O1xuQEAgLTk0NSw3ICYjNDM7OTQyLDcgQEAgYWZmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fVxuIFx0QUZGU19UQUlMKHNiLCBleHRfYmgpLVx1MDAzZWV4dGVuc2lvbiA9IDA7XG4gXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgZXh0X2JoKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShleHRfYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCk7XG4gXHRhZmZzX2JyZWxzZShleHRfYmgpO1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfc2l6ZSkge1xuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvaW5vZGUuYyBiL2ZzL2FmZnMvaW5vZGUuY1xuaW5kZXggNWRkMWIwMTZiY2IwMGEuLmQ0YTNmMzgxYzRiY2ZmIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2lub2RlLmNcbkBAIC0yMDYsNyAmIzQzOzIwNiw3IEBAIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdH1cbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGFmZnNfYnJlbHNlKGJoKTtcbiBcdGFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7XG4gXHRyZXR1cm4gMDtcbkBAIC0yNjYsMTEgJiM0MzsyNjYsOCBAQCBhZmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRpZiAoIWlub2RlLVx1MDAzZWlfbmxpbmspIHtcbiBcdFx0aW5vZGUtXHUwMDNlaV9zaXplID0gMDtcbiBcdFx0YWZmc190cnVuY2F0ZShpbm9kZSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRtbWJfc3luYyhcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdH1cbiBcbi1cdG1tYl9pbnZhbGlkYXRlKFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xuIFx0YWZmc19mcmVlX3ByZWFsbG9jKGlub2RlKTtcbiBcdGNhY2hlX3BhZ2UgPSAodW5zaWduZWQgbG9uZylBRkZTX0koaW5vZGUpLVx1MDAzZWlfbGM7XG5AQCAtMzA1LDcgJiM0MzszMDIsNyBAQCBhZmZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpcilcbiBcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XG4gXHRpZiAoIWJoKVxuIFx0XHRnb3RvIGVycl9iaDtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFxuIFx0aW5vZGUtXHUwMDNlaV91aWQgICAgID0gY3VycmVudF9mc3VpZCgpO1xuQEAgLTM5MywxNyAmIzQzOzM5MCwxNyBAQCBhZmZzX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzM1xuIFx0XHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VsaW5rX2NoYWluID0gY2hhaW47XG4gXHRcdEFGRlNfVEFJTChzYiwgaW5vZGVfYmgpLVx1MDAzZWxpbmtfY2hhaW4gPSBjcHVfdG9fYmUzMihibG9jayk7XG4gXHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGlub2RlX2JoLCBibG9jayAtIGJlMzJfdG9fY3B1KGNoYWluKSk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCk7XG4gXHRcdHNldF9ubGluayhpbm9kZSwgMik7XG4gXHRcdGlob2xkKGlub2RlKTtcbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGRlbnRyeS1cdTAwM2VkX2ZzZGF0YSA9ICh2b2lkICopKGxvbmcpYmgtXHUwMDNlYl9ibG9ja25yO1xuIFxuIFx0YWZmc19sb2NrX2RpcihkaXIpO1xuIFx0cmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChkaXIsIGJoKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc191bmxvY2tfZGlyKGRpcik7XG4gXHRhZmZzX3VubG9ja19saW5rKGlub2RlKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9hZmZzL25hbWVpLmMgYi9mcy9hZmZzL25hbWVpLmNcbmluZGV4IGMzYzY1MzJkYTRiMGRhLi41N2Q4ZDc1NWFhZGEwNSAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9uYW1laS5jXG5AQCAtMzczLDcgJiM0MzszNzMsNyBAQCBhZmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0fVxuIFx0KnAgPSAwO1xuIFx0aW5vZGUtXHUwMDNlaV9zaXplID0gaSAmIzQzOyAxO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRhZmZzX2JyZWxzZShiaCk7XG4gXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiBcbkBAIC00NDMsOCAmIzQzOzQ0Myw3IEBAIGFmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdC8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi9cbiBcbiBkb25lOlxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLFxuLVx0XHRcdFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGFmZnNfYnJlbHNlKGJoKTtcbiBcdHJldHVybiByZXR2YWw7XG4gfVxuQEAgLTQ5Nyw4ICYjNDM7NDk2LDggQEAgYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gob2xkX2RpciwgYmhfbmV3KTtcbiBcdGFmZnNfdW5sb2NrX2RpcihvbGRfZGlyKTtcbiBkb25lOlxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoX29sZCwgXHUwMDI2QUZGU19JKG5ld19kaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFx1MDAyNkFGRlNfSShvbGRfZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmhfb2xkKTtcbiYjNDM7XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcpO1xuIFx0YWZmc19icmVsc2UoYmhfb2xkKTtcbiBcdGFmZnNfYnJlbHNlKGJoX25ldyk7XG4gXHRyZXR1cm4gcmV0dmFsO1xuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvc3VwZXIuYyBiL2ZzL2FmZnMvc3VwZXIuY1xuaW5kZXggYjIzMjI1MWFhN2JiZDAuLjBhZDUxMjdlOWZiOGVlIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL3N1cGVyLmNcbkBAIC0xMDgsNyAmIzQzOzEwOCw2IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdGktXHUwMDNlaV9sYyA9IE5VTEw7XG4gXHRpLVx1MDAzZWlfZXh0X2JoID0gTlVMTDtcbiBcdGktXHUwMDNlaV9wYV9jbnQgPSAwO1xuLVx0bW1iX2luaXQoXHUwMDI2aS1cdTAwM2VpX21ldGFkYXRhX2JocywgXHUwMDI2aS1cdTAwM2V2ZnNfaW5vZGUuaV9kYXRhKTtcbiBcbiBcdHJldHVybiBcdTAwMjZpLVx1MDAzZXZmc19pbm9kZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jXG5pbmRleCA1YjQwYWIwOWE3OTZkZS4uOWIzN2VjNGJkODlhOGMgMTAwNjQ0XG4tLS0gYS9mcy9iZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Jmcy9kaXIuY1xuQEAgLTY4LDE3ICYjNDM7NjgsMTAgQEAgc3RhdGljIGludCBiZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBiZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHJldHVybiBtbWJfZnN5bmMoZmlsZSxcbi1cdFx0XHRcdTAwMjZCRlNfSShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IGJmc19yZWFkZGlyLFxuLVx0LmZzeW5jXHRcdD0gYmZzX2ZzeW5jLFxuJiM0MztcdC5mc3luY1x0XHQ9IHNpbXBsZV9mc3luYyxcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL2lub2RlLmMgYi9mcy9iZnMvaW5vZGUuY1xuaW5kZXggZTQxZWZkZDM1ZGI5ZWYuLmNhY2M3ZWZmOWMzM2NlIDEwMDY0NFxuLS0tIGEvZnMvYmZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Jmcy9pbm9kZS5jXG5AQCAtMTM2LDcgJiM0MzsxMzYsNiBAQCBzdGF0aWMgaW50IGJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdHVuc2lnbmVkIGxvbmcgaV9zYmxvY2s7XG4gXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRpbnQgZXJyID0gMDtcbiBcbiBcdGRwcmludGYoXCYjMzQ7aW5vPSUwOHhcXG5cJiMzNDssIGlubyk7XG4gXG5AQCAtMTY1LDEzICYjNDM7MTY0LDMxIEBAIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0ZGktXHUwMDNlaV9lb2Zmc2V0ID0gY3B1X3RvX2xlMzIoaV9zYmxvY2sgKiBCRlNfQlNJWkUgJiM0MzsgaW5vZGUtXHUwMDNlaV9zaXplIC0gMSk7XG4gXG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdH1cbiBcdGJyZWxzZShiaCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4mIzQzO1x0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7e1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuJiM0MztcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4mIzQzO1xuJiM0MztcdGRpID0gZmluZF9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCAodTE2KWlub2RlLVx1MDAzZWlubywgXHUwMDI2YmgpO1xuJiM0MztcdGlmIChJU19FUlIoZGkpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZGkpO1xuJiM0MztcbiYjNDM7XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4mIzQzO1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiYjNDM7XHRcdGVyciA9IC1FSU87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0ZXJyID0gbW1iX3N5bmMoXHUwMDI2QkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7b3V0OlxuJiM0MztcdGJyZWxzZShiaCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zMDIsNiAmIzQzOzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSBiZnNfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBiZnNfZnJlZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBiZnNfd3JpdGVfaW5vZGUsXG4mIzQzO1x0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBiZnNfc3luY19pbm9kZV9tZXRhZGF0YSxcbiBcdC5ldmljdF9pbm9kZVx0PSBiZnNfZXZpY3RfaW5vZGUsXG4gXHQucHV0X3N1cGVyXHQ9IGJmc19wdXRfc3VwZXIsXG4gXHQuc3RhdGZzXHRcdD0gYmZzX3N0YXRmcyxcbmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jXG5pbmRleCA5YWY1ZjA2MWExZjg1YS4uYmU4YjU3YTYzNWNkODIgMTAwNjQ0XG4tLS0gYS9mcy9idWZmZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnVmZmVyLmNcbkBAIC02MjgsNzkgJiM0Mzs2MjgsNiBAQCBpbnQgbW1iX3N5bmMoc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpXG4gfVxuIEVYUE9SVF9TWU1CT0wobW1iX3N5bmMpO1xuIFxuLS8qKlxuLSAqIG1tYl9mc3luY19ub2ZsdXNoIC0gZnN5bmMgaW1wbGVtZW50YXRpb24gZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aXRoXG4tICogXHRcdCAgICAgICBtZXRhZGF0YSBidWZmZXJzIGxpc3Rcbi0gKlxuLSAqIEBmaWxlOlx0ZmlsZSB0byBzeW5jaHJvbml6ZVxuLSAqIEBtbWI6XHRsaXN0IG9mIG1ldGFkYXRhIGJocyB0byBmbHVzaFxuLSAqIEBzdGFydDpcdHN0YXJ0IG9mZnNldCBpbiBieXRlc1xuLSAqIEBlbmQ6XHRlbmQgb2Zmc2V0IGluIGJ5dGVzIChpbmNsdXNpdmUpXG4tICogQGRhdGFzeW5jOlx0b25seSBzeW5jaHJvbml6ZSBlc3NlbnRpYWwgbWV0YWRhdGEgaWYgdHJ1ZVxuLSAqXG4tICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZnN5bmMgbWV0aG9kIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2hpY2hcbi0gKiB0cmFjayBhbGwgbm9uLWlub2RlIG1ldGFkYXRhIGluIHRoZSBidWZmZXJzIGxpc3QgaGFuZ2luZyBvZmYgdGhlIEBtbWJcbi0gKiBzdHJ1Y3R1cmUuXG4tICovXG4taW50IG1tYl9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcbi1cdFx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0aW50IGVycjtcbi1cdGludCByZXQgPSAwO1xuLVxuLVx0ZXJyID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4tXHRpZiAobW1iKVxuLVx0XHRyZXQgPSBtbWJfc3luYyhtbWIpO1xuLVx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9BTEwpKVxuLVx0XHRnb3RvIG91dDtcbi1cdGlmIChkYXRhc3luYyBcdTAwMjZcdTAwMjYgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0RBVEFTWU5DKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbi1cdGlmIChyZXQgPT0gMClcbi1cdFx0cmV0ID0gZXJyO1xuLVxuLW91dDpcbi1cdC8qIGNoZWNrIGFuZCBhZHZhbmNlIGFnYWluIHRvIGNhdGNoIGVycm9ycyBhZnRlciBzeW5jaW5nIG91dCBidWZmZXJzICovXG4tXHRlcnIgPSBmaWxlX2NoZWNrX2FuZF9hZHZhbmNlX3diX2VycihmaWxlKTtcbi1cdGlmIChyZXQgPT0gMClcbi1cdFx0cmV0ID0gZXJyO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTChtbWJfZnN5bmNfbm9mbHVzaCk7XG4tXG4tLyoqXG4tICogbW1iX2ZzeW5jIC0gZnN5bmMgaW1wbGVtZW50YXRpb24gZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aXRoIG1ldGFkYXRhXG4tICogXHQgICAgICAgYnVmZmVycyBsaXN0XG4tICpcbi0gKiBAZmlsZTpcdGZpbGUgdG8gc3luY2hyb25pemVcbi0gKiBAbW1iOlx0bGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2hcbi0gKiBAc3RhcnQ6XHRzdGFydCBvZmZzZXQgaW4gYnl0ZXNcbi0gKiBAZW5kOlx0ZW5kIG9mZnNldCBpbiBieXRlcyAoaW5jbHVzaXZlKVxuLSAqIEBkYXRhc3luYzpcdG9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWVcbi0gKlxuLSAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGZzeW5jIG1ldGhvZCBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdoaWNoXG4tICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iXG4tICogc3RydWN0dXJlLiBUaGlzIGFsc28gbWFrZXMgc3VyZSB0aGF0IGEgZGV2aWNlIGNhY2hlIGZsdXNoIG9wZXJhdGlvbiBpc1xuLSAqIGNhbGxlZCBhdCB0aGUgZW5kLlxuLSAqL1xuLWludCBtbWJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLFxuLVx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbGUsIG1tYiwgc3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuLVx0aWYgKCFyZXQpXG4tXHRcdHJldCA9IGJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldik7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1FWFBPUlRfU1lNQk9MKG1tYl9mc3luYyk7XG4tXG4gLypcbiAgKiBDYWxsZWQgd2hlbiB3ZSYjMzk7dmUgcmVjZW50bHkgd3JpdHRlbiBibG9jayBgYmJsb2NrJiMzOTssIGFuZCBpdCBpcyBrbm93biB0aGF0XG4gICogYGJibG9jayYjMzk7IHdhcyBmb3IgYSBidWZmZXJfYm91bmRhcnkoKSBidWZmZXIuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGJsb2NrIGF0XG5AQCAtMTEyMywxMiAmIzQzOzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7XG4gXG4gdm9pZCBtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbiYjNDM7XG4gXHRzZXRfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdC8qIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHNldCB0aGlzIGluIGJvdGggcGxhY2VzPyAqL1xuIFx0aWYgKGJoLVx1MDAzZWJfZm9saW8gXHUwMDI2XHUwMDI2IGJoLVx1MDAzZWJfZm9saW8tXHUwMDNlbWFwcGluZylcbiBcdFx0bWFwcGluZ19zZXRfZXJyb3IoYmgtXHUwMDNlYl9mb2xpby1cdTAwM2VtYXBwaW5nLCAtRUlPKTtcbi1cdGlmIChiaC1cdTAwM2ViX21tYilcbi1cdFx0bWFwcGluZ19zZXRfZXJyb3IoYmgtXHUwMDNlYl9tbWItXHUwMDNlbWFwcGluZywgLUVJTyk7XG4mIzQzO1x0LyogUHJvdGVjdCB1cyBmcm9tIG1tYiBcdTAwMjYgaW5vZGUgZ2V0dGluZyBmcmVlZCB3aGlsZSB3ZSB3b3JrIG9uIGl0ICovXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdG1tYiA9IFJFQURfT05DRShiaC1cdTAwM2ViX21tYik7XG4mIzQzO1x0aWYgKG1tYilcbiYjNDM7XHRcdG1hcHBpbmdfc2V0X2Vycm9yKG1tYi1cdTAwM2VtYXBwaW5nLCAtRUlPKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcik7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmNcbmluZGV4IDI3OGQ0YmU4ZWNiZTc3Li5lMTdiYmM3NTk4YzE0MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDIvZGlyLmNcbkBAIC03MzQsNiAmIzQzOzczNCw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9ucyA9IHtcbiAjaWZkZWYgQ09ORklHX0NPTVBBVFxuIFx0LmNvbXBhdF9pb2N0bFx0PSBleHQyX2NvbXBhdF9pb2N0bCxcbiAjZW5kaWZcbi1cdC5mc3luY1x0XHQ9IGV4dDJfZnN5bmMsXG4mIzQzO1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNldGxlYXNlXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXG4gfTtcbmRpZmYgLS1naXQgYS9mcy9leHQyL2V4dDIuaCBiL2ZzL2V4dDIvZXh0Mi5oXG5pbmRleCA3OWY3YjM5NTI1OGMyYS4uNTY0MjQ1MWJmMTkxNzMgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2V4dDIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9leHQyLmhcbkBAIC03MzUsNiAmIzQzOzczNSw3IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIGV4dDJfY291bnRfZnJlZSAoc3RydWN0IGJ1ZmZlcl9oZWFkICosIHVuc2lnbmVkKTtcbiAvKiBpbm9kZS5jICovXG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZXh0Ml9pZ2V0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyk7XG4gZXh0ZXJuIGludCBleHQyX3dyaXRlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuJiM0MztleHRlcm4gaW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xuIHZvaWQgZXh0Ml93cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0byk7XG4gZXh0ZXJuIGludCBleHQyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpO1xuQEAgLTc3Miw4ICYjNDM7NzczLDYgQEAgZXh0ZXJuIHZvaWQgZXh0Ml9zeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICplcyxcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2Rpcl9vcGVyYXRpb25zO1xuIFxuIC8qIGZpbGUuYyAqL1xuLWV4dGVybiBpbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLVx0XHQgICAgICBpbnQgZGF0YXN5bmMpO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfb3BlcmF0aW9ucztcbiBcbmRpZmYgLS1naXQgYS9mcy9leHQyL2ZpbGUuYyBiL2ZzL2V4dDIvZmlsZS5jXG5pbmRleCA4ZGNhOWVjNGNhY2Q5YS4uYjkwMjBkZjdkODllMDMgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9maWxlLmNcbkBAIC00NywyMSAmIzQzOzQ3LDYgQEAgc3RhdGljIGludCBleHQyX3JlbGVhc2VfZmlsZSAoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4te1xuLVx0aW50IHJldDtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXG4tXHRyZXQgPSBtbWJfZnN5bmMoZmlsZSwgXHUwMDI2RVhUMl9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tXHRpZiAocmV0ID09IC1FSU8pXG4tXHRcdC8qIFdlIGRvbiYjMzk7dCByZWFsbHkga25vdyB3aGVyZSB0aGUgSU8gZXJyb3IgaGFwcGVuZWQuLi4gKi9cbi1cdFx0ZXh0Ml9lcnJvcihzYiwgX19mdW5jX18sXG4tXHRcdFx0ICAgXCYjMzQ7ZGV0ZWN0ZWQgSU8gZXJyb3Igd2hlbiB3cml0aW5nIG1ldGFkYXRhIGJ1ZmZlcnNcJiMzNDspO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gc3RhdGljIHNzaXplX3QgZXh0Ml9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXHUwMDNla2lfZmlscDtcbkBAIC0yMTMsNyAmIzQzOzE5OCw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4gXHQub3Blblx0XHQ9IGV4dDJfZmlsZV9vcGVuLFxuIFx0LnJlbGVhc2VcdD0gZXh0Ml9yZWxlYXNlX2ZpbGUsXG4tXHQuZnN5bmNcdFx0PSBleHQyX2ZzeW5jLFxuJiM0MztcdC5mc3luY1x0XHQ9IHNpbXBsZV9mc3luYyxcbiBcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYSxcbiBcdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuIFx0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaW5vZGUuYyBiL2ZzL2V4dDIvaW5vZGUuY1xuaW5kZXggMjk4MDg2MjljY2U1NmYuLjUxNjU2NjQxYzRlNTljIDEwMDY0NFxuLS0tIGEvZnMvZXh0Mi9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL2lub2RlLmNcbkBAIC0zOSw4ICYjNDM7MzksNiBAQFxuICNpbmNsdWRlIFwmIzM0O2FjbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGF0dHIuaFwmIzM0O1xuIFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKTtcbi1cbiAvKlxuICAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay5cbiAgKi9cbkBAIC04MywxMSAmIzQzOzgxLDE2IEBAIHZvaWQgZXh0Ml9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFx1MDAyNmlub2RlLVx1MDAzZWlfZGF0YSk7XG4gXG4gXHRpZiAod2FudF9kZWxldGUpIHtcbiYjNDM7XHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7XG4mIzQzO1x0XHRcdC5zeW5jX21vZGUgPSBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSA/IFdCX1NZTkNfQUxMIDpcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICAgV0JfU1lOQ19OT05FLFxuJiM0MztcdFx0fTtcbiYjNDM7XG4gXHRcdHNiX3N0YXJ0X2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0XHQvKiBzZXQgZHRpbWUgKi9cbiBcdFx0RVhUMl9JKGlub2RlKS1cdTAwM2VpX2R0aW1lXHQ9IGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKTtcbiBcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tXHRcdF9fZXh0Ml93cml0ZV9pbm9kZShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpO1xuJiM0MztcdFx0ZXh0Ml93cml0ZV9pbm9kZShpbm9kZSwgXHUwMDI2d2JjKTtcbiBcdFx0LyogdHJ1bmNhdGUgdG8gMCAqL1xuIFx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSAwO1xuIFx0XHRpZiAoaW5vZGUtXHUwMDNlaV9ibG9ja3MpXG5AQCAtMTQ2OSw3ICYjNDM7MTQ3Miw3IEBAIHN0cnVjdCBpbm9kZSAqZXh0Ml9pZ2V0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubylcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuJiM0MztpbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4gXHRzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICplaSA9IEVYVDJfSShpbm9kZSk7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbkBAIC0xNTYwLDIyICYjNDM7MTU2MywzMiBAQCBzdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcbiBcdH0gZWxzZSBmb3IgKG4gPSAwOyBuIFx1MDAzYyBFWFQyX05fQkxPQ0tTOyBuJiM0MzsmIzQzOylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfYmxvY2tbbl0gPSBlaS1cdTAwM2VpX2RhdGFbbl07XG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAoZG9fc3luYykge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbi1cdFx0XHRwcmludGsgKFwmIzM0O0lPIGVycm9yIHN5bmNpbmcgZXh0MiBpbm9kZSBbJXM6JTA4bHhdXFxuXCYjMzQ7LFxuLVx0XHRcdFx0c2ItXHUwMDNlc19pZCwgKHVuc2lnbmVkIGxvbmcpIGlubyk7XG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdFx0fVxuLVx0fVxuIFx0ZWktXHUwMDNlaV9zdGF0ZSBcdTAwMjY9IH5FWFQyX1NUQVRFX05FVztcbiBcdGJyZWxzZSAoYmgpO1xuJiM0MztcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGV4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4mIzQzO2ludCBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuLVx0cmV0dXJuIF9fZXh0Ml93cml0ZV9pbm9kZShpbm9kZSwgd2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7XG4mIzQzO1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiYjNDM7XHRzdHJ1Y3QgZXh0Ml9pbm9kZSAqcmF3X2lub2RlID0gZXh0Ml9nZXRfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIFx1MDAyNmJoKTtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKElTX0VSUihyYXdfaW5vZGUpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuJiM0MztcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4mIzQzO1x0XHRwcmludGsoXCYjMzQ7SU8gZXJyb3Igc3luY2luZyBleHQyIGlub2RlIFslczolMDhseF1cXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2lkLCAodW5zaWduZWQgbG9uZylpbm9kZS1cdTAwM2VpX2lubyk7XG4mIzQzO1x0XHRlcnIgPSAtRUlPO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGVyciA9IG1tYl9zeW5jKFx1MDAyNkVYVDJfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnJlbHNlKGJoKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBpbnQgZXh0Ml9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbmRpZmYgLS1naXQgYS9mcy9leHQyL3N1cGVyLmMgYi9mcy9leHQyL3N1cGVyLmNcbmluZGV4IDM5OTlmOGYzYjE1NmUzLi5hNDBmNTMwODcyYTQwNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9zdXBlci5jXG5AQCAtMzYyLDYgJiM0MzszNjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0Ml9zb3BzID0ge1xuIFx0LmFsbG9jX2lub2RlXHQ9IGV4dDJfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBleHQyX2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBleHQyX3dyaXRlX2lub2RlLFxuJiM0MztcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IGV4dDJfZXZpY3RfaW5vZGUsXG4gXHQucHV0X3N1cGVyXHQ9IGV4dDJfcHV0X3N1cGVyLFxuIFx0LnN5bmNfZnNcdD0gZXh0Ml9zeW5jX2ZzLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IGIzN2MxMzZlYTNhYjMzLi44ZjM4OGUxNThkYWVlZiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTExNTEsNyAmIzQzOzExNTEsNyBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbiBcdHN0cnVjdCByd19zZW1hcGhvcmUgaV9kYXRhX3NlbTtcbiBcdHN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7XG4gXHRzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlO1xuLVx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzO1xuJiM0MztcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqaV9tZXRhZGF0YV9iaHM7XG4gXG4gXHQvKlxuIFx0ICogRmlsZSBjcmVhdGlvbiB0aW1lLiBJdHMgZnVuY3Rpb24gaXMgc2FtZSBhcyB0aGF0IG9mXG5AQCAtMzE1NSw2ICYjNDM7MzE1NSw3IEBAIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuIFx0X19leHQ0X2lnZXQoKHNiKSwgKGlubyksIChmbGFncyksIF9fZnVuY19fLCBfX0xJTkVfXylcbiBcbiBleHRlcm4gaW50ICBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7XG4mIzQzO2V4dGVybiBpbnQgIGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiBpbnQgIGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBkZW50cnkgKixcbiBcdFx0XHQgc3RydWN0IGlhdHRyICopO1xuIGV4dGVybiB1MzIgIGV4dDRfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuaW5kZXggOWE4YzIyNWYyNzUzMDkuLjc1MjMyNmYzYjY1MzZhIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0X2piZDIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuQEAgLTM1MCw2ICYjNDM7MzUwLDIxIEBAIGludCBfX2V4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGV4dDRfaW5vZGVfYXR0YWNoX21tYihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSXQmIzM5O3MgZGlmZmljdWx0IHRvIGhhbmRsZSBmYWlsdXJlIHdoZW4gbWFya2luZyBidWZmZXIgZGlydHkgd2l0aG91dFxuJiM0MztcdCAqIGxlYXZpbmcgZmlsZXN5c3RlbSBjb3JydXB0ZWRcbiYjNDM7XHQgKi9cbiYjNDM7XHRtbWIgPSBrbWFsbG9jX29iaigqbW1iLCBHRlBfTk9GUyB8IF9fR0ZQX05PRkFJTCk7XG4mIzQzO1x0bW1iX2luaXQobW1iLCBcdTAwMjZpbm9kZS1cdTAwM2VpX2RhdGEpO1xuJiM0MztcdC8qIFNvbWVvbmUgc3dhcHBlZCBhbm90aGVyIG1tYiBiZWZvcmUgdXM/ICovXG4mIzQzO1x0aWYgKGNtcHhjaGcoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2JocywgTlVMTCwgbW1iKSlcbiYjNDM7XHRcdGtmcmVlKG1tYik7XG4mIzQzO31cbiYjNDM7XG4gaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuIFx0XHRcdFx0IGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbkBAIC0zODksMTEgJiM0Mzs0MDQsMTQgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuIFx0XHRcdFx0XHQgZXJyKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGlub2RlKVxuJiM0MztcdFx0aWYgKGlub2RlKSB7XG4mIzQzO1x0XHRcdGlmICghRVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2JocylcbiYjNDM7XHRcdFx0XHRleHQ0X2lub2RlX2F0dGFjaF9tbWIoaW5vZGUpO1xuIFx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiBcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4mIzQzO1x0XHR9XG4gXHRcdGlmIChpbm9kZSBcdTAwMjZcdTAwMjYgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcbiBcdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4gXHRcdFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZnN5bmMuYyBiL2ZzL2V4dDQvZnN5bmMuY1xuaW5kZXggOTI0NzI2ZGNjODVmZjUuLjI5OTljMmNjOGZjZmEwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9mc3luYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2ZzeW5jLmNcbkBAIC02OCw5ICYjNDM7NjgsNiBAQCBzdGF0aWMgaW50IGV4dDRfc3luY19wYXJlbnQoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0ICogdGhyb3VnaCBleHQ0X2V2aWN0X2lub2RlKCkpIGFuZCBzbyB3ZSBhcmUgc2FmZSB0byBmbHVzaFxuIFx0XHQgKiBtZXRhZGF0YSBibG9ja3MgYW5kIHRoZSBpbm9kZS5cbiBcdFx0ICovXG4tXHRcdHJldCA9IG1tYl9zeW5jKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdGJyZWFrO1xuIFx0XHRyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRicmVhaztcbkBAIC04MywyMiAmIzQzOzgwLDExIEBAIHN0YXRpYyBpbnQgZXh0NF9mc3luY19ub2pvdXJuYWwoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbiBcdFx0XHRcdGludCBkYXRhc3luYywgYm9vbCAqbmVlZHNfYmFycmllcilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX2lub2RlO1xuLVx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcbi1cdFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMLFxuLVx0XHQubnJfdG9fd3JpdGUgPSAwLFxuLVx0fTtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxlLCBcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLFxuLVx0XHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuJiM0MztcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIEZvcmNlIHdyaXRlb3V0IG9mIGlub2RlIHRhYmxlIGJ1ZmZlciB0byBkaXNrICovXG4tXHRyZXQgPSBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCBcdTAwMjZ3YmMpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdHJldCA9IGV4dDRfc3luY19wYXJlbnQoaW5vZGUpO1xuIFxuIFx0aWYgKHRlc3Rfb3B0KGlub2RlLVx1MDAzZWlfc2IsIEJBUlJJRVIpKVxuQEAgLTE1Niw2ICYjNDM7MTQyLDEwIEBAIGludCBleHQ0X3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4gXHRpZiAoc2JfcmRvbmx5KGlub2RlLVx1MDAzZWlfc2IpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRyZXQgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRpZiAoIUVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKSB7XG4gXHRcdHJldCA9IGV4dDRfZnN5bmNfbm9qb3VybmFsKGZpbGUsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZuZWVkc19iYXJyaWVyKTtcbkBAIC0xNjQsMTAgJiM0MzsxNTQsNiBAQCBpbnQgZXh0NF9zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdC8qXG4gXHQgKiAgVGhlIGNhbGxlciYjMzk7cyBmaWxlbWFwX2ZkYXRhd3JpdGUoKS93YWl0IHdpbGwgc3luYyB0aGUgZGF0YS5cbiBcdCAqICBNZXRhZGF0YSBpcyBpbiB0aGUgam91cm5hbCwgd2Ugd2FpdCBmb3IgcHJvcGVyIHRyYW5zYWN0aW9uIHRvXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCBjZTk5ODA3YzVmNWIyYy4uYjYxZWU3NWVjYmRmMWEgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTE5NSw5ICYjNDM7MTk1LDggQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGlub2RlLCBcJiMzNDtkYXRhIHdpbGwgYmUgbG9zdFwmIzM0Oyk7XG4gXG4gXHRcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFx1MDAyNmlub2RlLVx1MDAzZWlfZGF0YSk7XG4tXHRcdC8qIEF2b2lkIG1iYWxsb2Mgc3BlY2lhbCBpbm9kZSB3aGljaCBoYXMgbm8gcHJvcGVyIGlvcHMgKi9cbi1cdFx0aWYgKCFFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbClcbi1cdFx0XHRtbWJfc3luYyhcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKVxuJiM0MztcdFx0XHRtbWJfc3luYyhFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdFx0Z290byBub19kZWxldGU7XG4gXHR9XG4gXG5AQCAtMzQ1Miw2ICYjNDM7MzQ1MSw3IEBAIHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KVxuIHN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbDtcbiYjNDM7XHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbiBcbiBcdGlmIChqb3VybmFsKSB7XG4gXHRcdGlmIChqYmQyX3RyYW5zYWN0aW9uX2NvbW1pdHRlZChqb3VybmFsLFxuQEAgLTM0NjIsOCAmIzQzOzM0NjIsOSBAQCBzdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuJiM0MztcdG1tYiA9IFJFQURfT05DRShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdC8qIEFueSBtZXRhZGF0YSBidWZmZXJzIHRvIHdyaXRlPyAqL1xuLVx0aWYgKG1tYl9oYXNfYnVmZmVycyhcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKSlcbiYjNDM7XHRpZiAobW1iIFx1MDAyNlx1MDAyNiBtbWJfaGFzX2J1ZmZlcnMobW1iKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRyZXR1cm4gaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQztcbiB9XG5AQCAtNTgzOCwyNCAmIzQzOzU4MzksMzYgQEAgaW50IGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdGVyciA9IGV4dDRfZmNfY29tbWl0KEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsLFxuIFx0XHRcdFx0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9zeW5jX3RpZCk7XG4gXHR9IGVsc2Uge1xuLVx0XHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4mIzQzO1x0XHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuIFxuLVx0XHRlcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcdTAwMjZpbG9jKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHQvKlxuLVx0XHQgKiBzeW5jKDIpIHdpbGwgZmx1c2ggdGhlIHdob2xlIGJ1ZmZlciBjYWNoZS4gTm8gbmVlZCB0byBkb1xuLVx0XHQgKiBpdCBoZXJlIHNlcGFyYXRlbHkgZm9yIGVhY2ggaW5vZGUuXG4tXHRcdCAqL1xuLVx0XHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcdTAwMjZcdTAwMjYgIXdiYy1cdTAwM2Vmb3Jfc3luYylcbi1cdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTtcbi1cdFx0aWYgKGJ1ZmZlcl9yZXEoaWxvYy5iaCkgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoaWxvYy5iaCkpIHtcbi1cdFx0XHRleHQ0X2Vycm9yX2lub2RlX2Jsb2NrKGlub2RlLCBpbG9jLmJoLVx1MDAzZWJfYmxvY2tuciwgRUlPLFxuLVx0XHRcdFx0XHQgICAgICAgXCYjMzQ7SU8gZXJyb3Igc3luY2luZyBpbm9kZVwmIzM0Oyk7XG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdFx0fVxuLVx0XHRicmVsc2UoaWxvYy5iaCk7XG4mIzQzO2ludCBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4mIzQzO1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LyogV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaW4gbm9qb3VybmFsIG1vZGUgKi9cbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKSlcbiYjNDM7XHRcdHJldHVybiAtRUZTQ09SUlVQVEVEO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcdTAwMjZpbG9jKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTtcbiYjNDM7XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGlsb2MuYmgpKSB7XG4mIzQzO1x0XHRleHQ0X2Vycm9yX2lub2RlX2Jsb2NrKGlub2RlLCBpbG9jLmJoLVx1MDAzZWJfYmxvY2tuciwgRUlPLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtJTyBlcnJvciBzeW5jaW5nIGlub2RlXCYjMzQ7KTtcbiYjNDM7XHRcdGVyciA9IC1FSU87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdH1cbiYjNDM7XHRtbWIgPSBSRUFEX09OQ0UoRVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0aWYgKG1tYilcbiYjNDM7XHRcdGVyciA9IG1tYl9zeW5jKG1tYik7XG4mIzQzO291dDpcbiYjNDM7XHRicmVsc2UoaWxvYy5iaCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDI0NWY2N2QxMGRlZDM0Li45MGQ2ZDZiODg2NzMwMiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtMTQzMCw3ICYjNDM7MTQzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdElOSVRfV09SSyhcdTAwMjZlaS1cdTAwM2VpX3Jzdl9jb252ZXJzaW9uX3dvcmssIGV4dDRfZW5kX2lvX3Jzdl93b3JrKTtcbiBcdGV4dDRfZmNfaW5pdF9pbm9kZShcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbi1cdG1tYl9pbml0KFx1MDAyNmVpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLCBcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUuaV9kYXRhKTtcbiYjNDM7XHRlaS1cdTAwM2VpX21ldGFkYXRhX2JocyA9IE5VTEw7XG4gI2lmZGVmIENPTkZJR19MT0NLREVQXG4gXHRsb2NrZGVwX3NldF9zdWJjbGFzcyhcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtLCBJX0RBVEFfU0VNX05PUk1BTCk7XG4gI2VuZGlmXG5AQCAtMTQ1MSw2ICYjNDM7MTQ1MSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gc3RhdGljIHZvaWQgZXh0NF9mcmVlX2luX2NvcmVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRmc2NyeXB0X2ZyZWVfaW5vZGUoaW5vZGUpO1xuJiM0MztcdGtmcmVlKEVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNihFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfbGlzdCkpKSB7XG4gXHRcdHByX3dhcm4oXCYjMzQ7JXM6IGlub2RlICVsbHUgc3RpbGwgaW4gZmMgbGlzdFwmIzM0OyxcbiBcdFx0XHRfX2Z1bmNfXywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuQEAgLTE1MzAsOCAmIzQzOzE1MzEsOCBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZClcbiB2b2lkIGV4dDRfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRleHQ0X2ZjX2RlbChpbm9kZSk7XG4tXHRpZiAoIUVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKVxuLVx0XHRtbWJfaW52YWxpZGF0ZShcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRpZiAoRVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2JocylcbiYjNDM7XHRcdG1tYl9pbnZhbGlkYXRlKEVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xuIFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbiBcdC8qXG5AQCAtMTYwNSw5ICYjNDM7MTYwNiwxMyBAQCBzdGF0aWMgaW50IGV4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcbiBcdFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMXG4gXHR9O1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHR0cmFjZV9leHQ0X25mc19jb21taXRfbWV0YWRhdGEoaW5vZGUpO1xuLVx0cmV0dXJuIGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsIFx1MDAyNndiYyk7XG4mIzQzO1x0cmV0ID0gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgXHUwMDI2d2JjKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHJldCA9IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgXHUwMDI2d2JjKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1FVT1RBXG5AQCAtMTY2NCw2ICYjNDM7MTY2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7XG4gXHQuZnJlZV9pbm9kZVx0PSBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC5kZXN0cm95X2lub2RlXHQ9IGV4dDRfZGVzdHJveV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBleHQ0X3dyaXRlX2lub2RlLFxuJiM0MztcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmRpcnR5X2lub2RlXHQ9IGV4dDRfZGlydHlfaW5vZGUsXG4gXHQuZHJvcF9pbm9kZVx0PSBleHQ0X2Ryb3BfaW5vZGUsXG4gXHQuZXZpY3RfaW5vZGVcdD0gZXh0NF9ldmljdF9pbm9kZSxcbmRpZmYgLS1naXQgYS9mcy9mYXQvZGlyLmMgYi9mcy9mYXQvZGlyLmNcbmluZGV4IDRmNmY0MmYzMzYxM2RmLi5kMzNiZjM0YmRjZTc1ZiAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2Rpci5jXG5AQCAtMTAyOCw4ICYjNDM7MTAyOCw2IEBAIHN0YXRpYyBpbnQgX19mYXRfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIGxvZmZfdCBwb3MsIGludCBucl9zbG90cylcbiBcdFx0XHRucl9zbG90cy0tO1xuIFx0XHR9XG4gXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2TVNET1NfSShkaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcbi1cdFx0XHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4gXHRcdGJyZWxzZShiaCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMTA2Myw4ICYjNDM7MTA2MSw2IEBAIGludCBmYXRfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBmYXRfc2xvdF9pbmZvICpzaW5mbylcbiBcdFx0bnJfc2xvdHMtLTtcbiBcdH1cbiBcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2TVNET1NfSShkaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbiBcdGJyZWxzZShiaCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTEwODQsMTAgJiM0MzsxMDgwLDkgQEAgaW50IGZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxuIFx0fVxuIFxuIFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0FUSU1FIHwgRkFUX1VQREFURV9DTVRJTUUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiYjNDM7XHRcdHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMTE5LDIxICYjNDM7MTExNCwxMSBAQCBzdGF0aWMgaW50IGZhdF96ZXJvZWRfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmRpciwgc2VjdG9yX3QgYmxrbnIsIGludCBucl91c2VkLFxuIFx0XHRuJiM0MzsmIzQzOztcbiBcdFx0YmxrbnImIzQzOyYjNDM7O1xuIFx0XHRpZiAobiA9PSBucl9iaHMpIHtcbi1cdFx0XHRpZiAoSVNfRElSU1lOQyhkaXIpKSB7XG4tXHRcdFx0XHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTtcbi1cdFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0fVxuIFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KVxuIFx0XHRcdFx0YnJlbHNlKGJoc1tpXSk7XG4gXHRcdFx0biA9IDA7XG4gXHRcdH1cbiBcdH1cbi1cdGlmIChJU19ESVJTWU5DKGRpcikpIHtcbi1cdFx0ZXJyID0gZmF0X3N5bmNfYmhzKGJocywgbik7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBlcnJvcjtcbi1cdH1cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KVxuIFx0XHRicmVsc2UoYmhzW2ldKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmggYi9mcy9mYXQvZmF0LmhcbmluZGV4IDk5ZWQ5MjI4YTY3N2JlLi5kY2I1YmE3NTcwNzNlZCAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9mYXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZhdC5oXG5AQCAtNDIxLDcgJiM0Mzs0MjEsNiBAQCBleHRlcm4gdm9pZCBmYXRfZGV0YWNoKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBpX3Bvcyk7XG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZmF0X2J1aWxkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0c3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGUsIGxvZmZfdCBpX3Bvcyk7XG4tZXh0ZXJuIGludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gaW50IGZhdF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0XHQgIHZvaWQgKCpzZXR1cCkoc3RydWN0IHN1cGVyX2Jsb2NrICopKTtcbiBleHRlcm4gaW50IGZhdF9maWxsX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlKTtcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuY1xuaW5kZXggMzdlNzA0OWI0YzhjNDQuLjFjODM1Y2E1ZjIxYTUxIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZpbGUuY1xuQEAgLTE5MCw4ICYjNDM7MTkwLDcgQEAgaW50IGZhdF9maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbiBcdHN0cnVjdCBpbm9kZSAqZmF0X2lub2RlID0gTVNET1NfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlZmF0X2lub2RlO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbHAsIFx1MDAyNk1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLFxuLVx0XHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuJiM0MztcdGVyciA9IHNpbXBsZV9mc3luY19ub2ZsdXNoKGZpbHAsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5AQCAtMzMyLDE1ICYjNDM7MzMxLDE1IEBAIHN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXG4gXHR9XG4gXHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX2F0dHJzIHw9IEFUVFJfQVJDSDtcbiBcdGZhdF90cnVuY2F0ZV90aW1lKGlub2RlLCBOVUxMLCBGQVRfVVBEQVRFX0NNVElNRSk7XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRpZiAod2FpdCkge1xuLVx0XHRlcnIgPSBmYXRfc3luY19pbm9kZShpbm9kZSk7XG4mIzQzO1x0XHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfc3RhcnQgPSBpX3N0YXJ0O1xuIFx0XHRcdE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbG9nc3RhcnQgPSBpX2xvZ3N0YXJ0O1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBXcml0ZSBhIG5ldyBFT0YsIGFuZCBnZXQgdGhlIHJlbWFpbmluZyBjbHVzdGVyIGNoYWluIGZvciBmcmVlaW5nLiAqL1xuIFx0aWYgKHNraXApIHtcbmRpZmYgLS1naXQgYS9mcy9mYXQvaW5vZGUuYyBiL2ZzL2ZhdC9pbm9kZS5jXG5pbmRleCAzYWE1MjQ4MWFkNWNmMy4uYzRiNGNjYWEwOTFhYTcgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2lub2RlLmNcbkBAIC02MjMsNyAmIzQzOzYyMywzNyBAQCBzdHJ1Y3QgaW5vZGUgKmZhdF9idWlsZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFxuIEVYUE9SVF9TWU1CT0xfR1BMKGZhdF9idWlsZF9pbm9kZSk7XG4gXG4tc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCk7XG4mIzQzO3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiYjNDM7XHRsb2ZmX3QgaV9wb3M7XG4mIzQzO1x0c2VjdG9yX3QgYmxvY2tucjtcbiYjNDM7XHRpbnQgb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRpZiAoaW5vZGUtXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRpX3BvcyA9IGZhdF9pX3Bvc19yZWFkKHNiaSwgaW5vZGUpO1xuJiM0MztcdGlmICghaV9wb3MpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZmF0X2dldF9ibGtucl9vZmZzZXQoc2JpLCBpX3BvcywgXHUwMDI2YmxvY2tuciwgXHUwMDI2b2Zmc2V0KTtcbiYjNDM7XHRiaCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrX25vbmF0b21pYyhpbm9kZS1cdTAwM2VpX3NiLCBibG9ja25yKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJ1ZmZlciBhbHJlYWR5IHdyaXR0ZW4/IFdlIGxlYXZlIGJ1ZmZlcl9kaXJ0eSBjaGVjayBmb3JcbiYjNDM7XHQgKiBzeW5jX2RpcnR5X2J1ZmZlcigpIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGggb25nb2luZyBJTy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWJoIHx8ICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7XG4mIzQzO1x0XHRicmVsc2UoYmgpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbiYjNDM7XHRicmVsc2UoYmgpO1xuJiM0MztcdHJldHVybiBtbWJfc3luYyhcdTAwMjZNU0RPU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO31cbiBcbiBzdGF0aWMgdm9pZCBmYXRfZnJlZV9lb2ZibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG5AQCAtNjQwLDcgJiM0Mzs2NzAsMTMgQEAgc3RhdGljIHZvaWQgZmF0X2ZyZWVfZW9mYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdCAqIGFueSBjb3JydXB0aW9uIG9uIHRoZSBuZXh0IGFjY2VzcyB0byB0aGUgY2x1c3RlclxuIFx0XHQgKiBjaGFpbiBmb3IgdGhlIGZpbGUuXG4gXHRcdCAqL1xuLVx0XHRlcnIgPSBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpO1xuJiM0MztcdFx0ZXJyID0gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUpO1xuJiM0MztcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7XG4mIzQzO1x0XHRcdFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMLFxuJiM0MztcdFx0XHR9O1xuJiM0MztcdFx0XHRlcnIgPSBmYXRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgXHUwMDI2d2JjKTtcbiYjNDM7XHRcdH1cbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGZhdF9tc2coaW5vZGUtXHUwMDNlaV9zYiwgS0VSTl9XQVJOSU5HLCBcJiMzNDtGYWlsZWQgdG8gXCYjMzQ7XG4gXHRcdFx0XHRcdFwmIzM0O3VwZGF0ZSBvbiBkaXNrIGlub2RlIGZvciB1bnVzZWQgXCYjMzQ7XG5AQCAtODU0LDcgJiM0Mzs4OTAsNyBAQCBzdGF0aWMgaW50IGZhdF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4mIzQzO3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiBcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7XG5AQCAtODYzLDcgJiM0Mzs4OTksNyBAQCBzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxuIFx0c3RydWN0IHRpbWVzcGVjNjQgbXRpbWU7XG4gXHRsb2ZmX3QgaV9wb3M7XG4gXHRzZWN0b3JfdCBibG9ja25yO1xuLVx0aW50IGVyciwgb2Zmc2V0O1xuJiM0MztcdGludCBvZmZzZXQ7XG4gXG4gXHRpZiAoaW5vZGUtXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXG4gXHRcdHJldHVybiAwO1xuQEAgLTkwNywxMSAmIzQzOzk0Myw5IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZzYmktXHUwMDNlaW5vZGVfaGFzaF9sb2NrKTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdGVyciA9IDA7XG4tXHRpZiAod2FpdClcbi1cdFx0ZXJyID0gc3luY19kaXJ0eV9idWZmZXIoYmgpO1xuIFx0YnJlbHNlKGJoKTtcbi1cdHJldHVybiBlcnI7XG4mIzQzO1x0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuQEAgLTkyNSwyMyAmIzQzOzk1OSwxNyBAQCBzdGF0aWMgaW50IGZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdFx0ZXJyID0gZmF0X2NsdXN0ZXJzX2ZsdXNoKHNiKTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNk1TRE9TX1NCKHNiKS1cdTAwM2VzX2xvY2spO1xuIFx0fSBlbHNlXG4tXHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcbiYjNDM7XHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdHJldHVybiBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgMSk7XG4tfVxuLVxuLUVYUE9SVF9TWU1CT0xfR1BMKGZhdF9zeW5jX2lub2RlKTtcbi1cbiBzdGF0aWMgaW50IGZhdF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZmF0X3NvcHMgPSB7XG4gXHQuYWxsb2NfaW5vZGVcdD0gZmF0X2FsbG9jX2lub2RlLFxuIFx0LmZyZWVfaW5vZGVcdD0gZmF0X2ZyZWVfaW5vZGUsXG4gXHQud3JpdGVfaW5vZGVcdD0gZmF0X3dyaXRlX2lub2RlLFxuJiM0MztcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGEsXG4gXHQuZXZpY3RfaW5vZGVcdD0gZmF0X2V2aWN0X2lub2RlLFxuIFx0LnB1dF9zdXBlclx0PSBmYXRfcHV0X3N1cGVyLFxuIFx0LnN0YXRmc1x0XHQ9IGZhdF9zdGF0ZnMsXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmNcbmluZGV4IDMwMjdlZjUzYWYyMTRjLi5iZTE4ZjZiNTgxOWJhNyAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9taXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9taXNjLmNcbkBAIC0xNDYsMTYgJiM0MzsxNDYsMTcgQEAgaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXG4gXHR9IGVsc2Uge1xuIFx0XHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX3N0YXJ0ID0gbmV3X2RjbHVzO1xuIFx0XHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX2xvZ3N0YXJ0ID0gbmV3X2RjbHVzO1xuJiM0MztcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRcdC8qXG4gXHRcdCAqIFNpbmNlIGdlbmVyaWNfd3JpdGVfc3luYygpIHN5bmNocm9uaXplcyByZWd1bGFyIGZpbGVzIGxhdGVyLFxuIFx0XHQgKiB3ZSBzeW5jIGhlcmUgb25seSBkaXJlY3Rvcmllcy5cbiBcdFx0ICovXG4gXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IElTX0RJUlNZTkMoaW5vZGUpKSB7XG4tXHRcdFx0cmV0ID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xuJiM0MztcdFx0XHRyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fSBlbHNlXG4tXHRcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0fVxuIFx0aWYgKG5ld19mY2x1cyAhPSAoaW5vZGUtXHUwMDNlaV9ibG9ja3MgXHUwMDNlXHUwMDNlIChzYmktXHUwMDNlY2x1c3Rlcl9iaXRzIC0gOSkpKSB7XG4gXHRcdGZhdF9mc19lcnJvcl9yYXRlbGltaXQoXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L25hbWVpX21zZG9zLmMgYi9mcy9mYXQvbmFtZWlfbXNkb3MuY1xuaW5kZXggMGZkMjk3MWFkNGIxMzEuLjQ3MmJkODQ3ZWY5Y2JiIDEwMDY0NFxuLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXG5AQCAtMjUyLDEwICYjNDM7MjUyLDkgQEAgc3RhdGljIGludCBtc2Rvc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRmYXRfdHJ1bmNhdGVfdGltZShkaXIsIHRzLCBGQVRfVVBEQVRFX0NNVElNRSk7XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xuIFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcbi1cdFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTtcbi1cdGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xuJiM0MztcdFx0c3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTQ3MywyMSAmIzQzOzQ3MiwyMSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxuIFx0XHRcdFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgfD0gQVRUUl9ISURERU47XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgXHUwMDI2PSB+QVRUUl9ISURERU47XG4mIzQzO1x0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcbiBcdFx0XHRpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSkge1xuLVx0XHRcdFx0ZXJyID0gZmF0X3N5bmNfaW5vZGUob2xkX2lub2RlKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9pbm9kZSwgMSk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRcdE1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX2F0dHJzID0gb2xkX2F0dHJzO1xuIFx0XHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRcdH1cbi1cdFx0XHR9IGVsc2Vcbi1cdFx0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcbiYjNDM7XHRcdFx0fVxuIFxuIFx0XHRcdGlub2RlX2luY19pdmVyc2lvbihvbGRfZGlyKTtcbiBcdFx0XHRmYXRfdHJ1bmNhdGVfdGltZShvbGRfZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0NNVElNRSk7XG4mIzQzO1x0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XG4gXHRcdFx0aWYgKElTX0RJUlNZTkMob2xkX2RpcikpXG4tXHRcdFx0XHQodm9pZClmYXRfc3luY19pbm9kZShvbGRfZGlyKTtcbiYjNDM7XHRcdFx0XHRzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9kaXIsIDEpO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcdH1cbkBAIC01MTgsMjYgJiM0Mzs1MTcsMjEgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSxcbiBcdFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgfD0gQVRUUl9ISURERU47XG4gXHRlbHNlXG4gXHRcdE1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX2F0dHJzIFx1MDAyNj0gfkFUVFJfSElEREVOO1xuLVx0aWYgKElTX0RJUlNZTkMobmV3X2RpcikpIHtcbi1cdFx0ZXJyID0gZmF0X3N5bmNfaW5vZGUob2xkX2lub2RlKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGVycm9yX2lub2RlO1xuLVx0fSBlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcbi1cbiBcdGlmICh1cGRhdGVfZG90ZG90KSB7XG4gXHRcdGZhdF9zZXRfc3RhcnQoZG90ZG90X2RlLCBNU0RPU19JKG5ld19kaXIpLVx1MDAzZWlfbG9nc3RhcnQpO1xuIFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoZG90ZG90X2JoLFxuIFx0XHRcdFx0ICAgICAgXHUwMDI2TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdFx0aWYgKElTX0RJUlNZTkMobmV3X2RpcikpIHtcbi1cdFx0XHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihkb3Rkb3RfYmgpO1xuLVx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRnb3RvIGVycm9yX2RvdGRvdDtcbi1cdFx0fVxuIFx0XHRkcm9wX25saW5rKG9sZF9kaXIpO1xuIFx0XHRpZiAoIW5ld19pbm9kZSlcbiBcdFx0XHRpbmNfbmxpbmsobmV3X2Rpcik7XG4gXHR9XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xuJiM0MztcdGlmIChJU19ESVJTWU5DKG5ld19kaXIpKSB7XG4mIzQzO1x0XHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9pbm9kZSwgMSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGVycm9yX2RvdGRvdDtcbiYjNDM7XHR9XG4mIzQzO1xuIFxuIFx0ZXJyID0gZmF0X3JlbW92ZV9lbnRyaWVzKG9sZF9kaXIsIFx1MDAyNm9sZF9zaW5mbyk7XHQvKiBhbmQgcmVsZWFzZXMgYmggKi9cbiBcdG9sZF9zaW5mby5iaCA9IE5VTEw7XG5AQCAtNTQ1LDEwICYjNDM7NTM5LDkgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSxcbiBcdFx0Z290byBlcnJvcl9kb3Rkb3Q7XG4gXHRpbm9kZV9pbmNfaXZlcnNpb24ob2xkX2Rpcik7XG4gXHRmYXRfdHJ1bmNhdGVfdGltZShvbGRfZGlyLCBcdTAwMjZ0cywgRkFUX1VQREFURV9DTVRJTUUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XG4gXHRpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSlcbi1cdFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUob2xkX2Rpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XG4mIzQzO1x0XHRzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9kaXIsIDEpO1xuIFxuIFx0aWYgKG5ld19pbm9kZSkge1xuIFx0XHRkcm9wX25saW5rKG5ld19pbm9kZSk7XG5AQCAtNTcxLDE0ICYjNDM7NTY0LDEzIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0XHRjb3JydXB0IHw9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XG4gXHR9XG4tZXJyb3JfaW5vZGU6XG4gXHRmYXRfZGV0YWNoKG9sZF9pbm9kZSk7XG4gXHRmYXRfYXR0YWNoKG9sZF9pbm9kZSwgb2xkX3NpbmZvLmlfcG9zKTtcbiBcdE1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX2F0dHJzID0gb2xkX2F0dHJzO1xuIFx0aWYgKG5ld19pbm9kZSkge1xuIFx0XHRmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTtcbiBcdFx0aWYgKGNvcnJ1cHQpXG4tXHRcdFx0Y29ycnVwdCB8PSBmYXRfc3luY19pbm9kZShuZXdfaW5vZGUpO1xuJiM0MztcdFx0XHRjb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIElmIG5ldyBlbnRyeSB3YXMgbm90IHNoYXJpbmcgdGhlIGRhdGEgY2x1c3RlciwgaXRcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xuaW5kZXggZTkwOTQ0Nzg3M2UzNjQuLjczMmFiZjA3MmZkZDNiIDEwMDY0NFxuLS0tIGEvZnMvZmF0L25hbWVpX3ZmYXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xuQEAgLTY3OCwxMCAmIzQzOzY3OCw5IEBAIHN0YXRpYyBpbnQgdmZhdF9hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxbmFtZSxcbiBcbiBcdC8qIHVwZGF0ZSB0aW1lc3RhbXAgKi9cbiBcdGZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTtcbiYjNDM7XHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4gXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuLVx0XHQodm9pZClmYXRfc3luY19pbm9kZShkaXIpO1xuLVx0ZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4mIzQzO1x0XHRzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7XG4gY2xlYW51cDpcbiBcdGtmcmVlKHNsb3RzKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtOTA0LDkgJiM0Mzs5MDMsOSBAQCBzdGF0aWMgaW50IHZmYXRfZ2V0X2RvdGRvdF9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCxcbiBcbiBzdGF0aWMgaW50IHZmYXRfc3luY19pcG9zKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbi1cdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdHJldHVybiBmYXRfc3luY19pbm9kZShpbm9kZSk7XG4gXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuJiM0MztcdFx0cmV0dXJuIHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTkyNSwxMCAmIzQzOzkyNCw5IEBAIHN0YXRpYyB2b2lkIHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIHtcbiBcdGlub2RlX2luY19pdmVyc2lvbihkaXIpO1xuIFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiYjNDM7XHRcdHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbiB9XG4gXG4gc3RhdGljIGludCB2ZmF0X3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG5AQCAtMTAyNSw3ICYjNDM7MTAyMyw3IEBAIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0aWYgKG5ld19pbm9kZSkge1xuIFx0XHRmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTtcbiBcdFx0aWYgKGNvcnJ1cHQpXG4tXHRcdFx0Y29ycnVwdCB8PSBmYXRfc3luY19pbm9kZShuZXdfaW5vZGUpO1xuJiM0MztcdFx0XHRjb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIElmIG5ldyBlbnRyeSB3YXMgbm90IHNoYXJpbmcgdGhlIGRhdGEgY2x1c3RlciwgaXRcbmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jXG5pbmRleCBmZGI4NzY2ZDI3NWExNy4uOWQ5NjM1NzczMWEzZDQgMTAwNjQ0XG4tLS0gYS9mcy9mcy13cml0ZWJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnMtd3JpdGViYWNrLmNcbkBAIC0xODUxLDYgJiM0MzsxODUxLDIyIEBAIF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdHJldCA9IGVycjtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPIHBvc3NpYmx5IHN1Ym1pdHRlZFxuJiM0MztcdCAqIGJ5IHByZXZpb3VzIFdCX1NZTkNfTk9ORSB3cml0ZWJhY2s/XG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgXHUwMDI2XHUwMDI2ICF3YmMtXHUwMDNlZm9yX3N5bmMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IElfTUVUQURBVEFfV1JJVEVCQUNLKSB7XG4mIzQzO1x0XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuJiM0MztcdFx0aW5vZGVfc3RhdGVfY2xlYXIoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4mIzQzO1x0XHRlcnIgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfb3AtXHUwMDNlc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgd2JjKTtcbiYjNDM7XHRcdGlmIChyZXQgPT0gMClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdH1cbiBcdHdiYy1cdTAwM2V1bnBpbm5lZF9uZXRmc193YiA9IGZhbHNlO1xuIFx0dHJhY2Vfd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjLCBucl90b193cml0ZSk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTE4OTIsMTQgJiM0MzsxOTA4LDE3IEBAIHN0YXRpYyBpbnQgd3JpdGViYWNrX3NpbmdsZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0LypcbiBcdCAqIElmIHRoZSBpbm9kZSBpcyBhbHJlYWR5IGZ1bGx5IGNsZWFuLCB0aGVuIHRoZXJlJiMzOTtzIG5vdGhpbmcgdG8gZG8uXG4gXHQgKlxuLVx0ICogRm9yIGRhdGEtaW50ZWdyaXR5IHN5bmNzIHdlIGFsc28gbmVlZCB0byBjaGVjayB3aGV0aGVyIGFueSBwYWdlcyBhcmVcbi1cdCAqIHN0aWxsIHVuZGVyIHdyaXRlYmFjaywgZS5nLiBkdWUgdG8gcHJpb3IgV0JfU1lOQ19OT05FIHdyaXRlYmFjay4gIElmXG4tXHQgKiB0aGVyZSBhcmUgYW55IHN1Y2ggcGFnZXMsIHdlJiMzOTtsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uXG4mIzQzO1x0ICogRm9yIGRhdGEtaW50ZWdyaXR5IHN5bmNzIHdlIGFsc28gbmVlZCB0byBjaGVjayB3aGV0aGVyIGFueSBmb2xpb3Mgb3JcbiYjNDM7XHQgKiBtZXRhZGF0YSBhcmUgc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkVcbiYjNDM7XHQgKiB3cml0ZWJhY2suIElmIHRoZXJlLCB3ZSYjMzk7bGwgbmVlZCB0byB3YWl0IGZvciB0aGVtLlxuIFx0ICovXG4tXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9BTEwpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICh3YmMtXHUwMDNlc3luY19tb2RlICE9IFdCX1NZTkNfQUxMIHx8XG4tXHQgICAgICFtYXBwaW5nX3RhZ2dlZChpbm9kZS1cdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSkpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0FMTCkpIHtcbiYjNDM7XHRcdGlmICh3YmMtXHUwMDNlc3luY19tb2RlICE9IFdCX1NZTkNfQUxMKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdGlmICghbWFwcGluZ190YWdnZWQoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcdTAwMjYgSV9NRVRBREFUQV9XUklURUJBQ0spKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXHRpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfU1lOQyk7XG4gXHR3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUod2JjLCBpbm9kZSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvbGliZnMuYyBiL2ZzL2xpYmZzLmNcbmluZGV4IDVhMGQyNzYzNzlkMTNiLi41N2U1OTcxYjYzMzE5NyAxMDA2NDRcbi0tLSBhL2ZzL2xpYmZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2xpYmZzLmNcbkBAIC0xNTU5LDkgJiM0MzsxNTU5LDEwIEBAIGludCBzaW1wbGVfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmICghKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IElfRElSVFlfQUxMKSlcbiYjNDM7XHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiAoSV9ESVJUWV9BTEwgfCBJX1NZTkMpKSlcbiBcdFx0Z290byBvdXQ7XG4tXHRpZiAoZGF0YXN5bmMgXHUwMDI2XHUwMDI2ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQykpXG4mIzQzO1x0aWYgKGRhdGFzeW5jIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IChJX0RJUlRZX0RBVEFTWU5DIHwgSV9TWU5DKSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0cmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZGlyLmMgYi9mcy9taW5peC9kaXIuY1xuaW5kZXggMzYxZDI2ZDg3ZDJlMmQuLjJjYTE2Zjg0OWQ1YWMwIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2Rpci5jXG5AQCAtMjMsNyAmIzQzOzIzLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfb3BlcmF0aW9ucyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IG1pbml4X3JlYWRkaXIsXG4tXHQuZnN5bmNcdFx0PSBtaW5peF9mc3luYyxcbiYjNDM7XHQuZnN5bmNcdFx0PSBzaW1wbGVfZnN5bmMsXG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggODZlNTk0M2NkMmZmNzQuLjAyYWFiYmRiNWRlYWEwIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9maWxlLmNcbkBAIC0xMCwxMyAmIzQzOzEwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7bWluaXguaFwmIzM0O1xuIFxuLWludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4te1xuLVx0cmV0dXJuIG1tYl9mc3luYyhmaWxlLFxuLVx0XHRcdFx1MDAyNm1pbml4X2koZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdCktXHUwMDNlaV9tZXRhZGF0YV9iaHMsXG4tXHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuLX1cbi1cbiAvKlxuICAqIFdlIGhhdmUgbW9zdGx5IE5VTExzIGhlcmU6IHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZSBPSyBmb3JcbiAgKiB0aGUgbWluaXggZmlsZXN5c3RlbS5cbkBAIC0yNiw3ICYjNDM7MTksNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbiBcdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuIFx0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuLVx0LmZzeW5jXHRcdD0gbWluaXhfZnN5bmMsXG4mIzQzO1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xuaW5kZXggYzMwY2M1OTA2OThkNmYuLjk1MjY3ZDkzZWYzOWRmIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaW5vZGUuY1xuQEAgLTI0LDYgJiM0MzsyNCw4IEBAXG4gXG4gc3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7XG4gXG4gdm9pZCBfX21pbml4X2Vycm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLFxuQEAgLTEyOCw2ICYjNDM7MTMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1pbml4X3NvcHMgPSB7XG4gXHQuYWxsb2NfaW5vZGVcdD0gbWluaXhfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBtaW5peF9mcmVlX2luX2NvcmVfaW5vZGUsXG4gXHQud3JpdGVfaW5vZGVcdD0gbWluaXhfd3JpdGVfaW5vZGUsXG4mIzQzO1x0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IG1pbml4X2V2aWN0X2lub2RlLFxuIFx0LnB1dF9zdXBlclx0PSBtaW5peF9wdXRfc3VwZXIsXG4gXHQuc3RhdGZzXHRcdD0gbWluaXhfc3RhdGZzLFxuQEAgLTYzMCw3ICYjNDM7NjMzLDcgQEAgc3RydWN0IGlub2RlICptaW5peF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxuIC8qXG4gICogVGhlIG1pbml4IFYxIGZ1bmN0aW9uIHRvIHN5bmNocm9uaXplIGFuIGlub2RlLlxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4mIzQzO3N0YXRpYyBpbnQgVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoO1xuIFx0c3RydWN0IG1pbml4X2lub2RlICogcmF3X2lub2RlO1xuQEAgLTYzOSw3ICYjNDM7NjQyLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYxX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcbiBcdHJhd19pbm9kZSA9IG1pbml4X1YxX3Jhd19pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBpbm9kZS1cdTAwM2VpX2lubywgXHUwMDI2YmgpO1xuIFx0aWYgKCFyYXdfaW5vZGUpXG4tXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9tb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfdWlkID0gZnNfaGlnaDJsb3d1aWQoaV91aWRfcmVhZChpbm9kZSkpO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfZ2lkID0gZnNfaGlnaDJsb3dnaWQoaV9naWRfcmVhZChpbm9kZSkpO1xuQEAgLTY1MSwxMyAmIzQzOzY1NCwxNSBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0ZWxzZSBmb3IgKGkgPSAwOyBpIFx1MDAzYyA5OyBpJiM0MzsmIzQzOylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTFfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbiYjNDM7XHRicmVsc2UoYmgpO1xuJiM0MztcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiAvKlxuICAqIFRoZSBtaW5peCBWMiBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSBhbiBpbm9kZS5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuJiM0MztzdGF0aWMgaW50IFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaDtcbiBcdHN0cnVjdCBtaW5peDJfaW5vZGUgKiByYXdfaW5vZGU7XG5AQCAtNjY2LDcgJiM0Mzs2NzEsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFxuIFx0cmF3X2lub2RlID0gbWluaXhfVjJfcmF3X2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBcdTAwMjZiaCk7XG4gXHRpZiAoIXJhd19pbm9kZSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcdHJhd19pbm9kZS1cdTAwM2VpX21vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGU7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV91aWQgPSBmc19oaWdoMmxvd3VpZChpX3VpZF9yZWFkKGlub2RlKSk7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7XG5AQCAtNjgwLDI5ICYjNDM7Njg1LDQwIEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRlbHNlIGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwOyBpJiM0MzsmIzQzOylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTJfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbiYjNDM7XHRicmVsc2UoYmgpO1xuJiM0MztcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKVxuJiM0MztcdFx0cmV0dXJuIFYxX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIFYyX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0aW50IGVyciA9IDA7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuJiM0MztcdHZvaWQgKnJhd19pbm9kZTtcbiBcbiBcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcbi1cdFx0YmggPSBWMV9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xuJiM0MztcdFx0cmF3X2lub2RlID0gbWluaXhfVjFfcmF3X2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBcdTAwMjZiaCk7XG4gXHRlbHNlXG4tXHRcdGJoID0gVjJfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTtcbi1cdGlmICghYmgpXG4mIzQzO1x0XHRyYXdfaW5vZGUgPSBtaW5peF9WMl9yYXdfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIFx1MDAyNmJoKTtcbiYjNDM7XHRpZiAoIXJhd19pbm9kZSlcbiBcdFx0cmV0dXJuIC1FSU87XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcdTAwMjZcdTAwMjYgYnVmZmVyX2RpcnR5KGJoKSkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbi1cdFx0XHRwcmludGsoXCYjMzQ7SU8gZXJyb3Igc3luY2luZyBtaW5peCBpbm9kZSBbJXM6JTA4bGx4XVxcblwmIzM0Oyxcbi1cdFx0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLVx0XHRcdGVyciA9IC1FSU87XG4tXHRcdH1cbiYjNDM7XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4mIzQzO1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiYjNDM7XHRcdHByaW50ayhcJiMzNDtJTyBlcnJvciBzeW5jaW5nIG1pbml4IGlub2RlIFslczolMDhsbHhdXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGlub2RlLVx1MDAzZWlfaW5vKTtcbiYjNDM7XHRcdGVyciA9IC1FSU87XG4gXHR9XG4tXHRicmVsc2UgKGJoKTtcbiYjNDM7XHRlcnIgPSBtbWJfc3luYyhcdTAwMjZtaW5peF9pKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO291dDpcbiYjNDM7XHRicmVsc2UoYmgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2Rpci5jIGIvZnMvdWRmL2Rpci5jXG5pbmRleCBlYmM5ZjZhMzc5ZmUzYS4uNDI1ZTNjMTYyOTM1MDQgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9kaXIuY1xuQEAgLTE1Nyw2ICYjNDM7MTU3LDYgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZGlyX29wZXJhdGlvbnMgPSB7XG4gXHQucmVhZFx0XHRcdD0gZ2VuZXJpY19yZWFkX2RpcixcbiBcdC5pdGVyYXRlX3NoYXJlZFx0XHQ9IHVkZl9yZWFkZGlyLFxuIFx0LnVubG9ja2VkX2lvY3RsXHRcdD0gdWRmX2lvY3RsLFxuLVx0LmZzeW5jXHRcdFx0PSB1ZGZfZnN5bmMsXG4mIzQzO1x0LmZzeW5jXHRcdFx0PSBzaW1wbGVfZnN5bmMsXG4gXHQuc2V0bGVhc2VcdFx0PSBnZW5lcmljX3NldGxlYXNlLFxuIH07XG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmNcbmluZGV4IGY3ZjE0MjJkZTMwZmE0Li41N2QxMTYwNmEyYTc3NiAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9maWxlLmNcbkBAIC0xOTgsMTMgJiM0MzsxOTgsNiBAQCBzdGF0aWMgaW50IHVkZl9maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCB1ZGZfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHJldHVybiBtbWJfZnN5bmMoZmlsZSxcbi1cdFx0XHRcdTAwMjZVREZfSShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5yZWFkX2l0ZXJcdFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuIFx0LnVubG9ja2VkX2lvY3RsXHRcdD0gdWRmX2lvY3RsLFxuQEAgLTIxMiw3ICYjNDM7MjA1LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZmlsZV9vcGVyYXRpb25zID0ge1xuIFx0Lm1tYXBcdFx0XHQ9IHVkZl9maWxlX21tYXAsXG4gXHQud3JpdGVfaXRlclx0XHQ9IHVkZl9maWxlX3dyaXRlX2l0ZXIsXG4gXHQucmVsZWFzZVx0XHQ9IHVkZl9yZWxlYXNlX2ZpbGUsXG4tXHQuZnN5bmNcdFx0XHQ9IHVkZl9mc3luYyxcbiYjNDM7XHQuZnN5bmNcdFx0XHQ9IHNpbXBsZV9mc3luYyxcbiBcdC5zcGxpY2VfcmVhZFx0XHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gXHQuc3BsaWNlX3dyaXRlXHRcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiBcdC5sbHNlZWtcdFx0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG5AQCAtMjUzLDYgJiM0MzsyNDYsOCBAQCBzdGF0aWMgaW50IHVkZl9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXG4gXHRzZXRhdHRyX2NvcHkoXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIGF0dHIpO1xuIFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0aWYgKElTX1NZTkMoaW5vZGUpKVxuJiM0MztcdFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuY1xuaW5kZXggNjdiY2Y4Mzc1OGM4ZmIuLmQ5OTFhNjcxYzBhNjkxIDEwMDY0NFxuLS0tIGEvZnMvdWRmL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9pbm9kZS5jXG5AQCAtNTEsOCAmIzQzOzUxLDYgQEBcbiBzdHJ1Y3QgdWRmX21hcF9ycTtcbiBcbiBzdGF0aWMgdW1vZGVfdCB1ZGZfY29udmVydF9wZXJtaXNzaW9ucyhzdHJ1Y3QgZmlsZUVudHJ5ICopO1xuLXN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcbi1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIHN0YXRpYyBpbnQgdWRmX2FsbG9jX2lfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzaXplX3Qgc2l6ZSk7XG4gc3RhdGljIGludCBpbm9kZV9nZXRibGsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHVkZl9tYXBfcnEgKm1hcCk7XG4gc3RhdGljIGludCB1ZGZfaW5zZXJ0X2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24sXG5AQCAtMTQyLDcgJiM0MzsxNDAsOSBAQCB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpZiAoIWlub2RlLVx1MDAzZWlfbmxpbmspIHtcbiBcdFx0XHR3YW50X2RlbGV0ZSA9IDE7XG4gXHRcdFx0dWRmX3NldHNpemUoaW5vZGUsIDApO1xuLVx0XHRcdHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIElTX1NZTkMoaW5vZGUpKTtcbiYjNDM7XHRcdFx0dWRmX3dyaXRlX2lub2RlKGlub2RlLCBOVUxMKTtcbiYjNDM7XHRcdFx0aWYgKElTX1NZTkMoaW5vZGUpKVxuJiM0MztcdFx0XHRcdHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCBOVUxMKTtcbiBcdFx0fVxuIFx0XHRpZiAoaWluZm8tXHUwMDNlaV9hbGxvY190eXBlICE9IElDQlRBR19GTEFHX0FEX0lOX0lDQiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGlub2RlLVx1MDAzZWlfc2l6ZSAhPSBpaW5mby1cdTAwM2VpX2xlbkV4dGVudHMpIHtcbkBAIC05MzYsOSAmIzQzOzkzNiwxMCBAQCBzdGF0aWMgaW50IGlub2RlX2dldGJsayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdWRmX21hcF9ycSAqbWFwKVxuIFx0aWluZm8tXHUwMDNlaV9uZXh0X2FsbG9jX2dvYWwgPSBuZXdibG9ja251bSAmIzQzOyAxO1xuIFx0aW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpO1xuIFxuLVx0aWYgKElTX1NZTkMoaW5vZGUpKVxuLVx0XHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XG4tXHRlbHNlXG4mIzQzO1x0aWYgKElTX1NZTkMoaW5vZGUpKSB7XG4mIzQzO1x0XHR1ZGZfd3JpdGVfaW5vZGUoaW5vZGUsIE5VTEwpO1xuJiM0MztcdFx0dWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIE5VTEwpO1xuJiM0MztcdH0gZWxzZVxuIFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiBcdHJldCA9IDA7XG4gb3V0X2ZyZWU6XG5AQCAtMTMyNiwxMCAmIzQzOzEzMjcsNyBAQCBpbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpXG4gXHR9XG4gdXBkYXRlX3RpbWU6XG4gXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKSk7XG4tXHRpZiAoSVNfU1lOQyhpbm9kZSkpXG4tXHRcdHVkZl9zeW5jX2lub2RlKGlub2RlKTtcbi1cdGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNzA1LDE0ICYjNDM7MTcwMywyOCBAQCB2b2lkIHVkZl91cGRhdGVfZXh0cmFfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSwgdW1vZGVfdCBtb2RlKVxuIFx0XHRpaW5mby1cdTAwM2VpX2V4dHJhUGVybXMgfD0gRkVfUEVSTV9PX0RFTEVURTtcbiB9XG4gXG4taW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7aW50IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbi1cdHJldHVybiB1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcbi19XG4mIzQzO1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiBcbi1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0cmV0dXJuIHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIDEpO1xuJiM0MztcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVx1MDAzZWlfc2IsXG4mIzQzO1x0XHRcdHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLVx1MDAzZWlfc2IsXG4mIzQzO1x0XHRcdFx0XHQgIFx1MDAyNlVERl9JKGlub2RlKS1cdTAwM2VpX2xvY2F0aW9uLCAwKSk7XG4mIzQzO1x0aWYgKCFiaClcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiYjNDM7XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4mIzQzO1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiYjNDM7XHRcdHVkZl93YXJuKGlub2RlLVx1MDAzZWlfc2IsIFwmIzM0O0lPIGVycm9yIHN5bmNpbmcgdWRmIGlub2RlIFslMDhsbHhdXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgaW5vZGUtXHUwMDNlaV9pbm8pO1xuJiM0MztcdFx0ZXJyID0gLUVJTztcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XHRlcnIgPSBtbWJfc3luYyhcdTAwMjZVREZfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnJlbHNlKGJoKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB1ZGZfYWRqdXN0X3RpbWUoc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgdGltZSlcbkBAIC0xNzIzLDcgJiM0MzsxNzM1LDcgQEAgc3RhdGljIHZvaWQgdWRmX2FkanVzdF90aW1lKHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8sIHN0cnVjdCB0aW1lc3BlYzY0IHRpbWVcbiBcdFx0aWluZm8tXHUwMDNlaV9jcnRpbWUgPSB0aW1lO1xuIH1cbiBcbi1zdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXG4mIzQzO2ludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmlsZUVudHJ5ICpmZTtcbkBAIC0xNzMyLDcgJiM0MzsxNzQ0LDYgQEAgc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuIFx0dWludDMyX3QgdWRmcGVybXM7XG4gXHR1aW50MTZfdCBpY2JmbGFncztcbiBcdHVpbnQxNl90IGNyY2xlbjtcbi1cdGludCBlcnIgPSAwO1xuIFx0c3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gXHR1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuIFx0c3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTtcbkBAIC0xOTM3LDE3ICYjNDM7MTk0OCwxMCBAQCBzdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXG4gXG4gXHQvKiB3cml0ZSB0aGUgZGF0YSBibG9ja3MgKi9cbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdGlmIChkb19zeW5jKSB7XG4tXHRcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbi1cdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbi1cdFx0XHR1ZGZfd2Fybihpbm9kZS1cdTAwM2VpX3NiLCBcJiMzNDtJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxcblwmIzM0Oyxcbi1cdFx0XHRcdCBpbm9kZS1cdTAwM2VpX2lubyk7XG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdFx0fVxuLVx0fVxuIFx0YnJlbHNlKGJoKTtcbiYjNDM7XHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbiBcbi1cdHJldHVybiBlcnI7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubyxcbmRpZmYgLS1naXQgYS9mcy91ZGYvc3VwZXIuYyBiL2ZzL3VkZi9zdXBlci5jXG5pbmRleCA3Yjg1ZjVhMmI3OWZjNC4uZTdlOWYyYTBkMjRlODAgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWRmL3N1cGVyLmNcbkBAIC0yMTEsNiAmIzQzOzIxMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB1ZGZfc2Jfb3BzID0ge1xuIFx0LmFsbG9jX2lub2RlXHQ9IHVkZl9hbGxvY19pbm9kZSxcbiBcdC5mcmVlX2lub2RlXHQ9IHVkZl9mcmVlX2luX2NvcmVfaW5vZGUsXG4gXHQud3JpdGVfaW5vZGVcdD0gdWRmX3dyaXRlX2lub2RlLFxuJiM0MztcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEsXG4gXHQuZXZpY3RfaW5vZGVcdD0gdWRmX2V2aWN0X2lub2RlLFxuIFx0LnB1dF9zdXBlclx0PSB1ZGZfcHV0X3N1cGVyLFxuIFx0LnN5bmNfZnNcdD0gdWRmX3N5bmNfZnMsXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZmRlY2wuaCBiL2ZzL3VkZi91ZGZkZWNsLmhcbmluZGV4IDZkOTUxZTA1YzAwNDZhLi44NmRjMmQ2YTJlZjFiOCAxMDA2NDRcbi0tLSBhL2ZzL3VkZi91ZGZkZWNsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi91ZGZkZWNsLmhcbkBAIC0xMzcsNyAmIzQzOzEzNyw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVkZl9kaXJfZW50cnlfbGVuKHN0cnVjdCBmaWxlSWRlbnREZXNjICpjZmkpXG4gXG4gLyogZmlsZS5jICovXG4gZXh0ZXJuIGxvbmcgdWRmX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XG4taW50IHVkZl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpO1xuIFxuIC8qIGlub2RlLmMgKi9cbiBleHRlcm4gc3RydWN0IGlub2RlICpfX3VkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKixcbkBAIC0xNTgsNiAmIzQzOzE1Nyw3IEBAIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVkZl9icmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1ZGZfcGJsa190IGJsb2NrLFxuIGV4dGVybiBpbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICosIGxvZmZfdCk7XG4gZXh0ZXJuIHZvaWQgdWRmX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqKTtcbiBleHRlcm4gaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuJiM0MztpbnQgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiBleHRlcm4gaW50IGlub2RlX2JtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdCAgICAgIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKnBvcywgc3RydWN0IGtlcm5lbF9sYl9hZGRyICplbG9jLFxuIFx0XHQgICAgICB1aW50MzJfdCAqZWxlbiwgc2VjdG9yX3QgKm9mZnNldCwgaW50OF90ICpldHlwZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG5pbmRleCA4YjIzYmM5YTI0NGNiMy4uZmQyYzcxMTVjMDU0MjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuQEAgLTIxMCwxMCAmIzQzOzIxMCw2IEBAIHZvaWQgYmhfZW5kX2FzeW5jX3dyaXRlKHN0cnVjdCBiaW8gKmJpbyk7XG4gXG4gLyogVGhpbmdzIHRvIGRvIHdpdGggbWV0YWRhdGEgYnVmZmVycyBsaXN0ICovXG4gdm9pZCBtbWJfbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpO1xuLWludCBtbWJfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXG4tXHRcdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYyk7XG4taW50IG1tYl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXG4tXHQgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGJvb2wgZGF0YXN5bmMpO1xuIHZvaWQgY2xlYW5fYmRldl9hbGlhc2VzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxuIFx0XHRcdHNlY3Rvcl90IGxlbik7XG4gc3RhdGljIGlubGluZSB2b2lkIGNsZWFuX2JkZXZfYmhfYWxpYXMoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IGQxMDg5N2IzYTFlMzUwLi5iMTdlMGQ0MjA3MWRmOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtNzQwLDcgJiM0Mzs3NDAsOCBAQCBlbnVtIGlub2RlX3N0YXRlX2ZsYWdzX2VudW0ge1xuIFx0SV9DUkVBVElOR1x0XHQ9ICgxVSBcdTAwM2NcdTAwM2MgMTUpLFxuIFx0SV9ET05UQ0FDSEVcdFx0PSAoMVUgXHUwMDNjXHUwMDNjIDE2KSxcbiBcdElfU1lOQ19RVUVVRURcdFx0PSAoMVUgXHUwMDNjXHUwMDNjIDE3KSxcbi1cdElfUElOTklOR19ORVRGU19XQlx0PSAoMVUgXHUwMDNjXHUwMDNjIDE4KVxuJiM0MztcdElfUElOTklOR19ORVRGU19XQlx0PSAoMVUgXHUwMDNjXHUwMDNjIDE4KSxcbiYjNDM7XHRJX01FVEFEQVRBX1dSSVRFQkFDS1x0PSAoMVUgXHUwMDNjXHUwMDNjIDE5KSxcbiB9O1xuIFxuICNkZWZpbmUgSV9ESVJUWV9JTk9ERSAoSV9ESVJUWV9TWU5DIHwgSV9ESVJUWV9EQVRBU1lOQylcbkBAIC0yMjEzLDYgJiM0MzsyMjE0LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2lub2RlX2RpcnR5X3N5bmMoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdF9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgSV9ESVJUWV9TWU5DKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiYjNDM7XHRpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogcmV0dXJucyB0aGUgcmVmY291bnQgb24gdGhlIGlub2RlLiBpdCBjYW4gY2hhbmdlIGFyYml0cmFyaWx5LlxuICAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaFxuaW5kZXggZWY3OTQxZTlkYzc5YWMuLjE3MDU2MWU4ZjJlMmM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcbkBAIC04Niw2ICYjNDM7ODYsOCBAQCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7XG4gXHR2b2lkICgqZnJlZV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXHR2b2lkICgqZGlydHlfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBmbGFncyk7XG4gXHRpbnQgKCp3cml0ZV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuJiM0MztcdGludCAoKnN5bmNfaW5vZGVfbWV0YWRhdGEpKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuIFx0aW50ICgqZHJvcF9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXHR2b2lkICgqZXZpY3RfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFx0dm9pZCAoKnB1dF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTk6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQyX0ZTJiMzNDssCiAgICAmIzM0O0ZBVF9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDssCiAgICAmIzM0O01JTklYX0ZTJiMzNDssCiAgICAmIzM0O1VERl9GUyYjMzQ7LAogICAgJiMzNDtCRlNfRlMmIzM0OywKICAgICYjMzQ7QUZGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fd3JpdGViYWNrX3NpbmdsZV9pbm9kZSYjMzQ7LAogICAgJiMzNDt3cml0ZWJhY2tfc2luZ2xlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7ZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7dWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7bWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtiZnNfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtzaW1wbGVfZnN5bmNfbm9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFZGUyBzdXBlcl9vcGVyYXRpb25zIGNhbGxiYWNrIGBzeW5jX2lub2RlX21ldGFkYXRhYCBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgZXh0MiwgZmF0LCBtaW5peCwgdWRmLCBiZnMsIGFmZnMpIHRvIGltcGxlbWVudCBhbmQgdXNlIGl0LiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb3JlIHdyaXRlYmFjayBsb2dpYyBpbiBgZnMvZnMtd3JpdGViYWNrLmNgIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgVkZTIGFuZCBtdWx0aXBsZSBmaWxlc3lzdGVtcywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE1MTA0NThlMDJiMjMyZGJlODczYjc2ZjE3NmY0YzExYjYwNjBlMjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyIDE5OjUxOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9hZmZzLmggYi9mcy9hZmZzL2FmZnMuaAppbmRleCA0NGEzZjY5ZDI3NWY5Ni4uYTdmYWE5MWRlZWQ1YWMgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvYWZmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvYWZmcy5oCkBAIC00NCw3ICYjNDM7NDQsNiBAQCBzdHJ1Y3QgYWZmc19pbm9kZV9pbmZvIHsKIAlzdHJ1Y3QgbXV0ZXggaV9saW5rX2xvY2s7CQkvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovCiAJc3RydWN0IG11dGV4IGlfZXh0X2xvY2s7CQkvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovCiAjZGVmaW5lIGlfaGFzaF9sb2NrIGlfZXh0X2xvY2sKLQlzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7CiAJdTMyCSBpX2Jsa2NudDsJCQkvKiBibG9jayBjb3VudCAqLwogCXUzMgkgaV9leHRjbnQ7CQkJLyogZXh0ZW5kZWQgYmxvY2sgY291bnQgKi8KIAl1MzIJKmlfbGM7CQkJCS8qIGxpbmVhciBjYWNoZSBvZiBleHRlbmRlZCBibG9ja3MgKi8KQEAgLTE1Miw3ICYjNDM7MTUxLDYgQEAgZXh0ZXJuIGJvb2wJYWZmc19ub2ZpbGVuYW1ldHJ1bmNhdGUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIGV4dGVybiBpbnQJYWZmc19jaGVja19uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIGludCBsZW4sCiAJCQkJYm9vbCBub3RydW5jYXRlKTsKIGV4dGVybiBpbnQJYWZmc19jb3B5X25hbWUodW5zaWduZWQgY2hhciAqYnN0ciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKLXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqYWZmc19nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiAvKiBiaXRtYXAuIGMgKi8KIApkaWZmIC0tZ2l0IGEvZnMvYWZmcy9hbWlnYWZmcy5jIGIvZnMvYWZmcy9hbWlnYWZmcy5jCmluZGV4IGJlZDRmYzgwNWU4ZTY2Li42Y2MwZmM5YTRjYmY5MiAxMDA2NDQKLS0tIGEvZnMvYWZmcy9hbWlnYWZmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvYW1pZ2FmZnMuYwpAQCAtNTcsNyAmIzQzOzU3LDcgQEAgYWZmc19pbnNlcnRfaGFzaChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIAkJQUZGU19UQUlMKHNiLCBkaXJfYmgpLSZndDtoYXNoX2NoYWluID0gY3B1X3RvX2JlMzIoaW5vKTsKIAogCWFmZnNfYWRqdXN0X2NoZWNrc3VtKGRpcl9iaCwgaW5vKTsKLQltbWJfbWFya19idWZmZXJfZGlydHkoZGlyX2JoLCAmYW1wO0FGRlNfSShkaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCk7CiAJYWZmc19icmVsc2UoZGlyX2JoKTsKIAogCWlub2RlX3NldF9tdGltZV90b190cyhkaXIsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGRpcikpOwpAQCAtMTAwLDcgJiM0MzsxMDAsNyBAQCBhZmZzX3JlbW92ZV9oYXNoKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlbV9iaCkKIAkJCWVsc2UKIAkJCQlBRkZTX1RBSUwoc2IsIGJoKS0mZ3Q7aGFzaF9jaGFpbiA9IGlubzsKIAkJCWFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBiZTMyX3RvX2NwdShpbm8pIC0gaGFzaF9pbm8pOwotCQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShkaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQkJQUZGU19UQUlMKHNiLCByZW1fYmgpLSZndDtwYXJlbnQgPSAwOwogCQkJcmV0dmFsID0gMDsKIAkJCWJyZWFrOwpAQCAtMTgwLDcgJiM0MzsxODAsNyBAQCBhZmZzX3JlbW92ZV9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAkJCWFmZnNfdW5sb2NrX2RpcihkaXIpOwogCQkJZ290byBkb25lOwogCQl9Ci0JCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCW1hcmtfYnVmZmVyX2RpcnR5KGxpbmtfYmgpOwogCiAJCW1lbWNweShBRkZTX1RBSUwoc2IsIGJoKS0mZ3Q7bmFtZSwgQUZGU19UQUlMKHNiLCBsaW5rX2JoKS0mZ3Q7bmFtZSwgMzIpOwogCQlyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpOwpAQCAtMTg4LDcgJiM0MzsxODgsNyBAQCBhZmZzX3JlbW92ZV9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAkJCWFmZnNfdW5sb2NrX2RpcihkaXIpOwogCQkJZ290byBkb25lOwogCQl9Ci0JCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAKIAkJYWZmc191bmxvY2tfZGlyKGRpcik7CiAJCWlwdXQoZGlyKTsKQEAgLTIwMyw3ICYjNDM7MjAzLDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJCQlfX2JlMzIgaW5vMiA9IEFGRlNfVEFJTChzYiwgbGlua19iaCktJmd0O2xpbmtfY2hhaW47CiAJCQlBRkZTX1RBSUwoc2IsIGJoKS0mZ3Q7bGlua19jaGFpbiA9IGlubzI7CiAJCQlhZmZzX2FkanVzdF9jaGVja3N1bShiaCwgYmUzMl90b19jcHUoaW5vMikgLSBsaW5rX2lubyk7Ci0JCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCXJldHZhbCA9IDA7CiAJCQkvKiBGaXggdGhlIGxpbmsgY291bnQsIGlmIGJoIGlzIGEgbm9ybWFsIGhlYWRlciBibG9jayB3aXRob3V0IGxpbmtzICovCiAJCQlzd2l0Y2ggKGJlMzJfdG9fY3B1KEFGRlNfVEFJTChzYiwgYmgpLSZndDtzdHlwZSkpIHsKQEAgLTMwNiw3ICYjNDM7MzA2LDcgQEAgYWZmc19yZW1vdmVfaGVhZGVyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlyZXR2YWwgPSBhZmZzX3JlbW92ZV9oYXNoKGRpciwgYmgpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZG9uZV91bmxvY2s7Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJbWFya19idWZmZXJfZGlydHkoYmgpOwogCiAJYWZmc191bmxvY2tfZGlyKGRpcik7CiAKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmMKaW5kZXggMTQ0YjE3NDgyZDEyZGEuLjIzZTA4OGE3ZWQ0ZmIzIDEwMDY0NAotLS0gYS9mcy9hZmZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2ZpbGUuYwpAQCAtMTQwLDE0ICYjNDM7MTQwLDE0IEBAIGFmZnNfYWxsb2NfZXh0YmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgdTMyIGV4dCkKIAlBRkZTX1RBSUwoc2IsIG5ld19iaCktJmd0O3BhcmVudCA9IGNwdV90b19iZTMyKGlub2RlLSZndDtpX2lubyk7CiAJYWZmc19maXhfY2hlY2tzdW0oc2IsIG5ld19iaCk7CiAKLQltbWJfbWFya19idWZmZXJfZGlydHkobmV3X2JoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJbWFya19idWZmZXJfZGlydHkobmV3X2JoKTsKIAogCXRtcCA9IGJlMzJfdG9fY3B1KEFGRlNfVEFJTChzYiwgYmgpLSZndDtleHRlbnNpb24pOwogCWlmICh0bXApCiAJCWFmZnNfd2FybmluZyhzYiwgJiMzNDthbGxvY19leHQmIzM0OywgJiMzNDtwcmV2aW91cyBleHRlbnNpb24gc2V0ICgleCkmIzM0OywgdG1wKTsKIAlBRkZTX1RBSUwoc2IsIGJoKS0mZ3Q7ZXh0ZW5zaW9uID0gY3B1X3RvX2JlMzIoYmxvY2tucik7CiAJYWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJsb2NrbnIgLSB0bXApOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAogCUFGRlNfSShpbm9kZSktJmd0O2lfZXh0Y250JiM0MzsmIzQzOzsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKQEAgLTU4MSw3ICYjNDM7NTgxLDcgQEAgYWZmc19leHRlbnRfZmlsZV9vZnMoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG5ld3NpemUpCiAJCW1lbXNldChBRkZTX0RBVEEoYmgpICYjNDM7IGJvZmYsIDAsIHRtcCk7CiAJCWJlMzJfYWRkX2NwdSgmYW1wO0FGRlNfREFUQV9IRUFEKGJoKS0mZ3Q7c2l6ZSwgdG1wKTsKIAkJYWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTsKLQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJc2l6ZSAmIzQzOz0gdG1wOwogCQliaWR4JiM0MzsmIzQzOzsKIAl9IGVsc2UgaWYgKGJpZHgpIHsKQEAgLTYwMyw3ICYjNDM7NjAzLDcgQEAgYWZmc19leHRlbnRfZmlsZV9vZnMoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG5ld3NpemUpCiAJCUFGRlNfREFUQV9IRUFEKGJoKS0mZ3Q7c2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7CiAJCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7CiAJCWJoLSZndDtiX3N0YXRlICZhbXA7PSB+KDFVTCAmbHQ7Jmx0OyBCSF9OZXcpOwotCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQlpZiAocHJldl9iaCkgewogCQkJdTMyIHRtcF9uZXh0ID0gYmUzMl90b19jcHUoQUZGU19EQVRBX0hFQUQocHJldl9iaCktJmd0O25leHQpOwogCkBAIC02MTMsOCAmIzQzOzYxMyw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKQogCQkJCQkgICAgIGJpZHgsIHRtcF9uZXh0KTsKIAkJCUFGRlNfREFUQV9IRUFEKHByZXZfYmgpLSZndDtuZXh0ID0gY3B1X3RvX2JlMzIoYmgtJmd0O2JfYmxvY2tucik7CiAJCQlhZmZzX2FkanVzdF9jaGVja3N1bShwcmV2X2JoLCBiaC0mZ3Q7Yl9ibG9ja25yIC0gdG1wX25leHQpOwotCQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsCi0JCQkJCSAgICAgICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJCW1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpOwogCQkJYWZmc19icmVsc2UocHJldl9iaCk7CiAJCX0KIAkJc2l6ZSAmIzQzOz0gYnNpemU7CkBAIC03MzMsNyAmIzQzOzczMiw3IEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAkJQUZGU19EQVRBX0hFQUQoYmgpLSZndDtzaXplID0gY3B1X3RvX2JlMzIoCiAJCQltYXgoYm9mZiAmIzQzOyB0bXAsIGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKGJoKS0mZ3Q7c2l6ZSkpKTsKIAkJYWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTsKLQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJd3JpdHRlbiAmIzQzOz0gdG1wOwogCQlmcm9tICYjNDM7PSB0bXA7CiAJCWJpZHgmIzQzOyYjNDM7OwpAQCAtNzY2LDEzICYjNDM7NzY1LDEyIEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAkJCQkJCSAgICAgYmlkeCwgdG1wX25leHQpOwogCQkJCUFGRlNfREFUQV9IRUFEKHByZXZfYmgpLSZndDtuZXh0ID0gY3B1X3RvX2JlMzIoYmgtJmd0O2JfYmxvY2tucik7CiAJCQkJYWZmc19hZGp1c3RfY2hlY2tzdW0ocHJldl9iaCwgYmgtJmd0O2JfYmxvY2tuciAtIHRtcF9uZXh0KTsKLQkJCQltbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCwKLQkJCQkJJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQkJCW1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpOwogCQkJfQogCQl9CiAJCWFmZnNfYnJlbHNlKHByZXZfYmgpOwogCQlhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpOwotCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQl3cml0dGVuICYjNDM7PSBic2l6ZTsKIAkJZnJvbSAmIzQzOz0gYnNpemU7CiAJCWJpZHgmIzQzOyYjNDM7OwpAQCAtODAxLDE0ICYjNDM7Nzk5LDEzIEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAkJCQkJCSAgICAgYmlkeCwgdG1wX25leHQpOwogCQkJCUFGRlNfREFUQV9IRUFEKHByZXZfYmgpLSZndDtuZXh0ID0gY3B1X3RvX2JlMzIoYmgtJmd0O2JfYmxvY2tucik7CiAJCQkJYWZmc19hZGp1c3RfY2hlY2tzdW0ocHJldl9iaCwgYmgtJmd0O2JfYmxvY2tuciAtIHRtcF9uZXh0KTsKLQkJCQltbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCwKLQkJCQkJCSZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJCQltYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTsKIAkJCX0KIAkJfSBlbHNlIGlmIChiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktJmd0O3NpemUpICZsdDsgdG1wKQogCQkJQUZGU19EQVRBX0hFQUQoYmgpLSZndDtzaXplID0gY3B1X3RvX2JlMzIodG1wKTsKIAkJYWZmc19icmVsc2UocHJldl9iaCk7CiAJCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7Ci0JCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCXdyaXR0ZW4gJiM0Mzs9IHRtcDsKIAkJZnJvbSAmIzQzOz0gdG1wOwogCQliaWR4JiM0MzsmIzQzOzsKQEAgLTk0NSw3ICYjNDM7OTQyLDcgQEAgYWZmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCX0KIAlBRkZTX1RBSUwoc2IsIGV4dF9iaCktJmd0O2V4dGVuc2lvbiA9IDA7CiAJYWZmc19maXhfY2hlY2tzdW0oc2IsIGV4dF9iaCk7Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCk7CiAJYWZmc19icmVsc2UoZXh0X2JoKTsKIAogCWlmIChpbm9kZS0mZ3Q7aV9zaXplKSB7CmRpZmYgLS1naXQgYS9mcy9hZmZzL2lub2RlLmMgYi9mcy9hZmZzL2lub2RlLmMKaW5kZXggNWRkMWIwMTZiY2IwMGEuLmQ0YTNmMzgxYzRiY2ZmIDEwMDY0NAotLS0gYS9mcy9hZmZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9pbm9kZS5jCkBAIC0yMDYsNyAmIzQzOzIwNiw3IEBAIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiAJCX0KIAl9CiAJYWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTsKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYWZmc19icmVsc2UoYmgpOwogCWFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7CiAJcmV0dXJuIDA7CkBAIC0yNjYsMTEgJiM0MzsyNjYsOCBAQCBhZmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJaWYgKCFpbm9kZS0mZ3Q7aV9ubGluaykgewogCQlpbm9kZS0mZ3Q7aV9zaXplID0gMDsKIAkJYWZmc190cnVuY2F0ZShpbm9kZSk7Ci0JfSBlbHNlIHsKLQkJbW1iX3N5bmMoJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiAJfQogCi0JbW1iX2ludmFsaWRhdGUoJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiAJY2xlYXJfaW5vZGUoaW5vZGUpOwogCWFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7CiAJY2FjaGVfcGFnZSA9ICh1bnNpZ25lZCBsb25nKUFGRlNfSShpbm9kZSktJmd0O2lfbGM7CkBAIC0zMDUsNyAmIzQzOzMwMiw3IEBAIGFmZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyKQogCWJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7CiAJaWYgKCFiaCkKIAkJZ290byBlcnJfYmg7Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWFmZnNfYnJlbHNlKGJoKTsKIAogCWlub2RlLSZndDtpX3VpZCAgICAgPSBjdXJyZW50X2ZzdWlkKCk7CkBAIC0zOTMsMTcgJiM0MzszOTAsMTcgQEAgYWZmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgczMKIAkJQUZGU19UQUlMKHNiLCBiaCktJmd0O2xpbmtfY2hhaW4gPSBjaGFpbjsKIAkJQUZGU19UQUlMKHNiLCBpbm9kZV9iaCktJmd0O2xpbmtfY2hhaW4gPSBjcHVfdG9fYmUzMihibG9jayk7CiAJCWFmZnNfYWRqdXN0X2NoZWNrc3VtKGlub2RlX2JoLCBibG9jayAtIGJlMzJfdG9fY3B1KGNoYWluKSk7Ci0JCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQltYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCk7CiAJCXNldF9ubGluayhpbm9kZSwgMik7CiAJCWlob2xkKGlub2RlKTsKIAl9CiAJYWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTsKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJZGVudHJ5LSZndDtkX2ZzZGF0YSA9ICh2b2lkICopKGxvbmcpYmgtJmd0O2JfYmxvY2tucjsKIAogCWFmZnNfbG9ja19kaXIoZGlyKTsKIAlyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlhZmZzX3VubG9ja19kaXIoZGlyKTsKIAlhZmZzX3VubG9ja19saW5rKGlub2RlKTsKIApkaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jCmluZGV4IGMzYzY1MzJkYTRiMGRhLi41N2Q4ZDc1NWFhZGEwNSAxMDA2NDQKLS0tIGEvZnMvYWZmcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvbmFtZWkuYwpAQCAtMzczLDcgJiM0MzszNzMsNyBAQCBhZmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCX0KIAkqcCA9IDA7CiAJaW5vZGUtJmd0O2lfc2l6ZSA9IGkgJiM0MzsgMTsKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYWZmc19icmVsc2UoYmgpOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCkBAIC00NDMsOCAmIzQzOzQ0Myw3IEBAIGFmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAkvKiBUT0RPOiBtb3ZlIGl0IGJhY2sgdG8gb2xkX2RpciwgaWYgZXJyb3I/ICovCiAKIGRvbmU6Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLAotCQkJJmFtcDtBRkZTX0kocmV0dmFsID8gb2xkX2RpciA6IG5ld19kaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlhZmZzX2JyZWxzZShiaCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTQ5Nyw4ICYjNDM7NDk2LDggQEAgYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAlyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKG9sZF9kaXIsIGJoX25ldyk7CiAJYWZmc191bmxvY2tfZGlyKG9sZF9kaXIpOwogZG9uZToKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmhfb2xkLCAmYW1wO0FGRlNfSShuZXdfZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsICZhbXA7QUZGU19JKG9sZF9kaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGJoX29sZCk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGJoX25ldyk7CiAJYWZmc19icmVsc2UoYmhfb2xkKTsKIAlhZmZzX2JyZWxzZShiaF9uZXcpOwogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9mcy9hZmZzL3N1cGVyLmMgYi9mcy9hZmZzL3N1cGVyLmMKaW5kZXggYjIzMjI1MWFhN2JiZDAuLjBhZDUxMjdlOWZiOGVlIDEwMDY0NAotLS0gYS9mcy9hZmZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9zdXBlci5jCkBAIC0xMDgsNyAmIzQzOzEwOCw2IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAlpLSZndDtpX2xjID0gTlVMTDsKIAlpLSZndDtpX2V4dF9iaCA9IE5VTEw7CiAJaS0mZ3Q7aV9wYV9jbnQgPSAwOwotCW1tYl9pbml0KCZhbXA7aS0mZ3Q7aV9tZXRhZGF0YV9iaHMsICZhbXA7aS0mZ3Q7dmZzX2lub2RlLmlfZGF0YSk7CiAKIAlyZXR1cm4gJmFtcDtpLSZndDt2ZnNfaW5vZGU7CiB9CmRpZmYgLS1naXQgYS9mcy9iZnMvZGlyLmMgYi9mcy9iZnMvZGlyLmMKaW5kZXggNWI0MGFiMDlhNzk2ZGUuLjliMzdlYzRiZDg5YThjIDEwMDY0NAotLS0gYS9mcy9iZnMvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmZzL2Rpci5jCkBAIC02OCwxNyAmIzQzOzY4LDEwIEBAIHN0YXRpYyBpbnQgYmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJmc19mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCi17Ci0JcmV0dXJuIG1tYl9mc3luYyhmaWxlLAotCQkJJmFtcDtCRlNfSShmaWxlLSZndDtmX21hcHBpbmctJmd0O2hvc3QpLSZndDtpX21ldGFkYXRhX2JocywKLQkJCXN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKLX0KLQogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnMgPSB7CiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkuaXRlcmF0ZV9zaGFyZWQJPSBiZnNfcmVhZGRpciwKLQkuZnN5bmMJCT0gYmZzX2ZzeW5jLAomIzQzOwkuZnN5bmMJCT0gc2ltcGxlX2ZzeW5jLAogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2Jmcy9pbm9kZS5jIGIvZnMvYmZzL2lub2RlLmMKaW5kZXggZTQxZWZkZDM1ZGI5ZWYuLmNhY2M3ZWZmOWMzM2NlIDEwMDY0NAotLS0gYS9mcy9iZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9iZnMvaW5vZGUuYwpAQCAtMTM2LDcgJiM0MzsxMzYsNiBAQCBzdGF0aWMgaW50IGJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIAl1bnNpZ25lZCBsb25nIGlfc2Jsb2NrOwogCXN0cnVjdCBiZnNfaW5vZGUgKmRpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JaW50IGVyciA9IDA7CiAKIAlkcHJpbnRmKCYjMzQ7aW5vPSUwOHhcbiYjMzQ7LCBpbm8pOwogCkBAIC0xNjUsMTMgJiM0MzsxNjQsMzEgQEAgc3RhdGljIGludCBiZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiAJZGktJmd0O2lfZW9mZnNldCA9IGNwdV90b19sZTMyKGlfc2Jsb2NrICogQkZTX0JTSVpFICYjNDM7IGlub2RlLSZndDtpX3NpemUgLSAxKTsKIAogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQlpZiAod2JjLSZndDtzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpIHsKLQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotCQlpZiAoYnVmZmVyX3JlcShiaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGJoKSkKLQkJCWVyciA9IC1FSU87Ci0JfQogCWJyZWxzZShiaCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7aW5mby0mZ3Q7YmZzX2xvY2spOwomIzQzOwlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7ewomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsJc3RydWN0IGJmc19pbm9kZSAqZGk7CiYjNDM7CXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiYjNDM7CiYjNDM7CWRpID0gZmluZF9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgKHUxNilpbm9kZS0mZ3Q7aW5vLCAmYW1wO2JoKTsKJiM0MzsJaWYgKElTX0VSUihkaSkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihkaSk7CiYjNDM7CiYjNDM7CXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKJiM0MzsJaWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHsKJiM0MzsJCWVyciA9IC1FSU87CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwllcnIgPSBtbWJfc3luYygmYW1wO0JGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzO291dDoKJiM0MzsJYnJlbHNlKGJoKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zMDIsNiAmIzQzOzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHsKIAkuYWxsb2NfaW5vZGUJPSBiZnNfYWxsb2NfaW5vZGUsCiAJLmZyZWVfaW5vZGUJPSBiZnNfZnJlZV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBiZnNfd3JpdGVfaW5vZGUsCiYjNDM7CS5zeW5jX2lub2RlX21ldGFkYXRhID0gYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEsCiAJLmV2aWN0X2lub2RlCT0gYmZzX2V2aWN0X2lub2RlLAogCS5wdXRfc3VwZXIJPSBiZnNfcHV0X3N1cGVyLAogCS5zdGF0ZnMJCT0gYmZzX3N0YXRmcywKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggOWFmNWYwNjFhMWY4NWEuLmJlOGI1N2E2MzVjZDgyIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9idWZmZXIuYwpAQCAtNjI4LDc5ICYjNDM7NjI4LDYgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKQogfQogRVhQT1JUX1NZTUJPTChtbWJfc3luYyk7CiAKLS8qKgotICogbW1iX2ZzeW5jX25vZmx1c2ggLSBmc3luYyBpbXBsZW1lbnRhdGlvbiBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdpdGgKLSAqIAkJICAgICAgIG1ldGFkYXRhIGJ1ZmZlcnMgbGlzdAotICoKLSAqIEBmaWxlOglmaWxlIHRvIHN5bmNocm9uaXplCi0gKiBAbW1iOglsaXN0IG9mIG1ldGFkYXRhIGJocyB0byBmbHVzaAotICogQHN0YXJ0OglzdGFydCBvZmZzZXQgaW4gYnl0ZXMKLSAqIEBlbmQ6CWVuZCBvZmZzZXQgaW4gYnl0ZXMgKGluY2x1c2l2ZSkKLSAqIEBkYXRhc3luYzoJb25seSBzeW5jaHJvbml6ZSBlc3NlbnRpYWwgbWV0YWRhdGEgaWYgdHJ1ZQotICoKLSAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGZzeW5jIG1ldGhvZCBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdoaWNoCi0gKiB0cmFjayBhbGwgbm9uLWlub2RlIG1ldGFkYXRhIGluIHRoZSBidWZmZXJzIGxpc3QgaGFuZ2luZyBvZmYgdGhlIEBtbWIKLSAqIHN0cnVjdHVyZS4KLSAqLwotaW50IG1tYl9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYiwKLQkJICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7Ci0JaW50IGVycjsKLQlpbnQgcmV0ID0gMDsKLQotCWVyciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmIChtbWIpCi0JCXJldCA9IG1tYl9zeW5jKG1tYik7Ci0JaWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX0RJUlRZX0FMTCkpCi0JCWdvdG8gb3V0OwotCWlmIChkYXRhc3luYyAmYW1wOyZhbXA7ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX0RJUlRZX0RBVEFTWU5DKSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IGVycjsKLQotb3V0OgotCS8qIGNoZWNrIGFuZCBhZHZhbmNlIGFnYWluIHRvIGNhdGNoIGVycm9ycyBhZnRlciBzeW5jaW5nIG91dCBidWZmZXJzICovCi0JZXJyID0gZmlsZV9jaGVja19hbmRfYWR2YW5jZV93Yl9lcnIoZmlsZSk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBlcnI7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jX25vZmx1c2gpOwotCi0vKioKLSAqIG1tYl9mc3luYyAtIGZzeW5jIGltcGxlbWVudGF0aW9uIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2l0aCBtZXRhZGF0YQotICogCSAgICAgICBidWZmZXJzIGxpc3QKLSAqCi0gKiBAZmlsZToJZmlsZSB0byBzeW5jaHJvbml6ZQotICogQG1tYjoJbGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2gKLSAqIEBzdGFydDoJc3RhcnQgb2Zmc2V0IGluIGJ5dGVzCi0gKiBAZW5kOgllbmQgb2Zmc2V0IGluIGJ5dGVzIChpbmNsdXNpdmUpCi0gKiBAZGF0YXN5bmM6CW9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWUKLSAqCi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmc3luYyBtZXRob2QgZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aGljaAotICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iCi0gKiBzdHJ1Y3R1cmUuIFRoaXMgYWxzbyBtYWtlcyBzdXJlIHRoYXQgYSBkZXZpY2UgY2FjaGUgZmx1c2ggb3BlcmF0aW9uIGlzCi0gKiBjYWxsZWQgYXQgdGhlIGVuZC4KLSAqLwotaW50IG1tYl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsCi0JICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7Ci0JaW50IHJldDsKLQotCXJldCA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbGUsIG1tYiwgc3RhcnQsIGVuZCwgZGF0YXN5bmMpOwotCWlmICghcmV0KQotCQlyZXQgPSBibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmRldik7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jKTsKLQogLyoKICAqIENhbGxlZCB3aGVuIHdlJiMzOTt2ZSByZWNlbnRseSB3cml0dGVuIGJsb2NrIGBiYmxvY2smIzM5OywgYW5kIGl0IGlzIGtub3duIHRoYXQKICAqIGBiYmxvY2smIzM5OyB3YXMgZm9yIGEgYnVmZmVyX2JvdW5kYXJ5KCkgYnVmZmVyLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBibG9jayBhdApAQCAtMTEyMywxMiAmIzQzOzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7CiAKIHZvaWQgbWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3Ioc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKJiM0MzsJc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7CiYjNDM7CiAJc2V0X2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7CiAJLyogRklYTUU6IGRvIHdlIG5lZWQgdG8gc2V0IHRoaXMgaW4gYm90aCBwbGFjZXM/ICovCiAJaWYgKGJoLSZndDtiX2ZvbGlvICZhbXA7JmFtcDsgYmgtJmd0O2JfZm9saW8tJmd0O21hcHBpbmcpCiAJCW1hcHBpbmdfc2V0X2Vycm9yKGJoLSZndDtiX2ZvbGlvLSZndDttYXBwaW5nLCAtRUlPKTsKLQlpZiAoYmgtJmd0O2JfbW1iKQotCQltYXBwaW5nX3NldF9lcnJvcihiaC0mZ3Q7Yl9tbWItJmd0O21hcHBpbmcsIC1FSU8pOwomIzQzOwkvKiBQcm90ZWN0IHVzIGZyb20gbW1iICZhbXA7IGlub2RlIGdldHRpbmcgZnJlZWQgd2hpbGUgd2Ugd29yayBvbiBpdCAqLwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW1tYiA9IFJFQURfT05DRShiaC0mZ3Q7Yl9tbWIpOwomIzQzOwlpZiAobW1iKQomIzQzOwkJbWFwcGluZ19zZXRfZXJyb3IobW1iLSZndDttYXBwaW5nLCAtRUlPKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiBFWFBPUlRfU1lNQk9MKG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmMKaW5kZXggMjc4ZDRiZThlY2JlNzcuLmUxN2JiYzc1OThjMTQzIDEwMDY0NAotLS0gYS9mcy9leHQyL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDIvZGlyLmMKQEAgLTczNCw2ICYjNDM7NzM0LDYgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2Rpcl9vcGVyYXRpb25zID0gewogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsCT0gZXh0Ml9jb21wYXRfaW9jdGwsCiAjZW5kaWYKLQkuZnN5bmMJCT0gZXh0Ml9mc3luYywKJiM0MzsJLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKIAkuc2V0bGVhc2UJPSBnZW5lcmljX3NldGxlYXNlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZXh0Mi5oIGIvZnMvZXh0Mi9leHQyLmgKaW5kZXggNzlmN2IzOTUyNThjMmEuLjU2NDI0NTFiZjE5MTczIDEwMDY0NAotLS0gYS9mcy9leHQyL2V4dDIuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL2V4dDIuaApAQCAtNzM1LDYgJiM0Mzs3MzUsNyBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBleHQyX2NvdW50X2ZyZWUgKHN0cnVjdCBidWZmZXJfaGVhZCAqLCB1bnNpZ25lZCk7CiAvKiBpbm9kZS5jICovCiBleHRlcm4gc3RydWN0IGlub2RlICpleHQyX2lnZXQgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiBpbnQgZXh0Ml93cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKJiM0MztleHRlcm4gaW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopOwogZXh0ZXJuIHZvaWQgZXh0Ml9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiB2b2lkIGV4dDJfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pOwogZXh0ZXJuIGludCBleHQyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpOwpAQCAtNzcyLDggJiM0Mzs3NzMsNiBAQCBleHRlcm4gdm9pZCBleHQyX3N5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzLAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9uczsKIAogLyogZmlsZS5jICovCi1leHRlcm4gaW50IGV4dDJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwKLQkJICAgICAgaW50IGRhdGFzeW5jKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9vcGVyYXRpb25zOwogCmRpZmYgLS1naXQgYS9mcy9leHQyL2ZpbGUuYyBiL2ZzL2V4dDIvZmlsZS5jCmluZGV4IDhkY2E5ZWM0Y2FjZDlhLi5iOTAyMGRmN2Q4OWUwMyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9maWxlLmMKQEAgLTQ3LDIxICYjNDM7NDcsNiBAQCBzdGF0aWMgaW50IGV4dDJfcmVsZWFzZV9maWxlIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQogCXJldHVybiAwOwogfQogCi1pbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0OwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQotCXJldCA9IG1tYl9mc3luYyhmaWxlLCAmYW1wO0VYVDJfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzLAotCQkJc3RhcnQsIGVuZCwgZGF0YXN5bmMpOwotCWlmIChyZXQgPT0gLUVJTykKLQkJLyogV2UgZG9uJiMzOTt0IHJlYWxseSBrbm93IHdoZXJlIHRoZSBJTyBlcnJvciBoYXBwZW5lZC4uLiAqLwotCQlleHQyX2Vycm9yKHNiLCBfX2Z1bmNfXywKLQkJCSAgICYjMzQ7ZGV0ZWN0ZWQgSU8gZXJyb3Igd2hlbiB3cml0aW5nIG1ldGFkYXRhIGJ1ZmZlcnMmIzM0Oyk7Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHNzaXplX3QgZXh0Ml9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItJmd0O2tpX2ZpbHA7CkBAIC0yMTMsNyAmIzQzOzE5OCw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9maWxlX29wZXJhdGlvbnMgPSB7CiAJLm1tYXBfcHJlcGFyZQk9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsCiAJLm9wZW4JCT0gZXh0Ml9maWxlX29wZW4sCiAJLnJlbGVhc2UJPSBleHQyX3JlbGVhc2VfZmlsZSwKLQkuZnN5bmMJCT0gZXh0Ml9mc3luYywKJiM0MzsJLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKIAkuZ2V0X3VubWFwcGVkX2FyZWEgPSB0aHBfZ2V0X3VubWFwcGVkX2FyZWEsCiAJLnNwbGljZV9yZWFkCT0gZmlsZW1hcF9zcGxpY2VfcmVhZCwKIAkuc3BsaWNlX3dyaXRlCT0gaXRlcl9maWxlX3NwbGljZV93cml0ZSwKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaW5vZGUuYyBiL2ZzL2V4dDIvaW5vZGUuYwppbmRleCAyOTgwODYyOWNjZTU2Zi4uNTE2NTY2NDFjNGU1OWMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL2lub2RlLmMKQEAgLTM5LDggJiM0MzszOSw2IEBACiAjaW5jbHVkZSAmIzM0O2FjbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGF0dHIuaCYjMzQ7CiAKLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKTsKLQogLyoKICAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay4KICAqLwpAQCAtODMsMTEgJiM0Mzs4MSwxNiBAQCB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoJmFtcDtpbm9kZS0mZ3Q7aV9kYXRhKTsKIAogCWlmICh3YW50X2RlbGV0ZSkgewomIzQzOwkJc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKJiM0MzsJCQkuc3luY19tb2RlID0gaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkgPyBXQl9TWU5DX0FMTCA6CiYjNDM7CQkJCQkJCSAgICAgICBXQl9TWU5DX05PTkUsCiYjNDM7CQl9OwomIzQzOwogCQlzYl9zdGFydF9pbnR3cml0ZShpbm9kZS0mZ3Q7aV9zYik7CiAJCS8qIHNldCBkdGltZSAqLwogCQlFWFQyX0koaW5vZGUpLSZndDtpX2R0aW1lCT0ga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpOwogCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQkJX19leHQyX3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7CiYjNDM7CQlleHQyX3dyaXRlX2lub2RlKGlub2RlLCAmYW1wO3diYyk7CiAJCS8qIHRydW5jYXRlIHRvIDAgKi8KIAkJaW5vZGUtJmd0O2lfc2l6ZSA9IDA7CiAJCWlmIChpbm9kZS0mZ3Q7aV9ibG9ja3MpCkBAIC0xNDY5LDcgJiM0MzsxNDcyLDcgQEAgc3RydWN0IGlub2RlICpleHQyX2lnZXQgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKQogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKQomIzQzO2ludCBleHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCXN0cnVjdCBleHQyX2lub2RlX2luZm8gKmVpID0gRVhUMl9JKGlub2RlKTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CkBAIC0xNTYwLDIyICYjNDM7MTU2MywzMiBAQCBzdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYykKIAl9IGVsc2UgZm9yIChuID0gMDsgbiAmbHQ7IEVYVDJfTl9CTE9DS1M7IG4mIzQzOyYjNDM7KQogCQlyYXdfaW5vZGUtJmd0O2lfYmxvY2tbbl0gPSBlaS0mZ3Q7aV9kYXRhW25dOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQlpZiAoZG9fc3luYykgewotCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7Ci0JCWlmIChidWZmZXJfcmVxKGJoKSAmYW1wOyZhbXA7ICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7Ci0JCQlwcmludGsgKCYjMzQ7SU8gZXJyb3Igc3luY2luZyBleHQyIGlub2RlIFslczolMDhseF1cbiYjMzQ7LAotCQkJCXNiLSZndDtzX2lkLCAodW5zaWduZWQgbG9uZykgaW5vKTsKLQkJCWVyciA9IC1FSU87Ci0JCX0KLQl9CiAJZWktJmd0O2lfc3RhdGUgJmFtcDs9IH5FWFQyX1NUQVRFX05FVzsKIAlicmVsc2UgKGJoKTsKJiM0MzsJc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7CiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGV4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7aW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKLQlyZXR1cm4gX19leHQyX3dyaXRlX2lub2RlKGlub2RlLCB3YmMtJmd0O3N5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7CiYjNDM7CXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiYjNDM7CXN0cnVjdCBleHQyX2lub2RlICpyYXdfaW5vZGUgPSBleHQyX2dldF9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgaW5vZGUtJmd0O2lfaW5vLAomIzQzOwkJCQkJCSAgICAgICZhbXA7YmgpOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJaWYgKElTX0VSUihyYXdfaW5vZGUpKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKJiM0MzsJaWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHsKJiM0MzsJCXByaW50aygmIzM0O0lPIGVycm9yIHN5bmNpbmcgZXh0MiBpbm9kZSBbJXM6JTA4bHhdXG4mIzM0OywKJiM0MzsJCSAgICAgICBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19pZCwgKHVuc2lnbmVkIGxvbmcpaW5vZGUtJmd0O2lfaW5vKTsKJiM0MzsJCWVyciA9IC1FSU87CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwllcnIgPSBtbWJfc3luYygmYW1wO0VYVDJfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MztvdXQ6CiYjNDM7CWJyZWxzZShiaCk7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIGludCBleHQyX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLApkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jCmluZGV4IDM5OTlmOGYzYjE1NmUzLi5hNDBmNTMwODcyYTQwNyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDIvc3VwZXIuYwpAQCAtMzYyLDYgJiM0MzszNjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0Ml9zb3BzID0gewogCS5hbGxvY19pbm9kZQk9IGV4dDJfYWxsb2NfaW5vZGUsCiAJLmZyZWVfaW5vZGUJPSBleHQyX2ZyZWVfaW5fY29yZV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBleHQyX3dyaXRlX2lub2RlLAomIzQzOwkuc3luY19pbm9kZV9tZXRhZGF0YSA9IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YSwKIAkuZXZpY3RfaW5vZGUJPSBleHQyX2V2aWN0X2lub2RlLAogCS5wdXRfc3VwZXIJPSBleHQyX3B1dF9zdXBlciwKIAkuc3luY19mcwk9IGV4dDJfc3luY19mcywKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYjM3YzEzNmVhM2FiMzMuLjhmMzg4ZTE1OGRhZWVmIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMTE1MSw3ICYjNDM7MTE1MSw3IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8gewogCXN0cnVjdCByd19zZW1hcGhvcmUgaV9kYXRhX3NlbTsKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogCXN0cnVjdCBqYmQyX2lub2RlICpqaW5vZGU7Ci0Jc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzOwomIzQzOwlzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmlfbWV0YWRhdGFfYmhzOwogCiAJLyoKIAkgKiBGaWxlIGNyZWF0aW9uIHRpbWUuIEl0cyBmdW5jdGlvbiBpcyBzYW1lIGFzIHRoYXQgb2YKQEAgLTMxNTUsNiAmIzQzOzMxNTUsNyBAQCBleHRlcm4gc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubywKIAlfX2V4dDRfaWdldCgoc2IpLCAoaW5vKSwgKGZsYWdzKSwgX19mdW5jX18sIF9fTElORV9fKQogCiBleHRlcm4gaW50ICBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7CiYjNDM7ZXh0ZXJuIGludCAgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7CiBleHRlcm4gaW50ICBleHQ0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgZGVudHJ5ICosCiAJCQkgc3RydWN0IGlhdHRyICopOwogZXh0ZXJuIHUzMiAgZXh0NF9kaW9fYWxpZ25tZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0X2piZDIuYyBiL2ZzL2V4dDQvZXh0NF9qYmQyLmMKaW5kZXggOWE4YzIyNWYyNzUzMDkuLjc1MjMyNmYzYjY1MzZhIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDRfamJkMi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NF9qYmQyLmMKQEAgLTM1MCw2ICYjNDM7MzUwLDIxIEBAIGludCBfX2V4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBleHQ0X2lub2RlX2F0dGFjaF9tbWIoc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJdCYjMzk7cyBkaWZmaWN1bHQgdG8gaGFuZGxlIGZhaWx1cmUgd2hlbiBtYXJraW5nIGJ1ZmZlciBkaXJ0eSB3aXRob3V0CiYjNDM7CSAqIGxlYXZpbmcgZmlsZXN5c3RlbSBjb3JydXB0ZWQKJiM0MzsJICovCiYjNDM7CW1tYiA9IGttYWxsb2Nfb2JqKCptbWIsIEdGUF9OT0ZTIHwgX19HRlBfTk9GQUlMKTsKJiM0MzsJbW1iX2luaXQobW1iLCAmYW1wO2lub2RlLSZndDtpX2RhdGEpOwomIzQzOwkvKiBTb21lb25lIHN3YXBwZWQgYW5vdGhlciBtbWIgYmVmb3JlIHVzPyAqLwomIzQzOwlpZiAoY21weGNoZygmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzLCBOVUxMLCBtbWIpKQomIzQzOwkJa2ZyZWUobW1iKTsKJiM0Mzt9CiYjNDM7CiBpbnQgX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsCiAJCQkJIGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCkBAIC0zODksMTEgJiM0Mzs0MDQsMTQgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLAogCQkJCQkgZXJyKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmIChpbm9kZSkKJiM0MzsJCWlmIChpbm9kZSkgewomIzQzOwkJCWlmICghRVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpCiYjNDM7CQkJCWV4dDRfaW5vZGVfYXR0YWNoX21tYihpbm9kZSk7CiAJCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsCi0JCQkJCSAgICAgICZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwotCQllbHNlCiYjNDM7CQkJCQkgICAgICBFWFQ0X0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQl9IGVsc2UgewogCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwomIzQzOwkJfQogCQlpZiAoaW5vZGUgJmFtcDsmYW1wOyBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSkgewogCQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwogCQkJaWYgKGJ1ZmZlcl9yZXEoYmgpICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZnN5bmMuYyBiL2ZzL2V4dDQvZnN5bmMuYwppbmRleCA5MjQ3MjZkY2M4NWZmNS4uMjk5OWMyY2M4ZmNmYTAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZnN5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2ZzeW5jLmMKQEAgLTY4LDkgJiM0Mzs2OCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9zeW5jX3BhcmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQkgKiB0aHJvdWdoIGV4dDRfZXZpY3RfaW5vZGUoKSkgYW5kIHNvIHdlIGFyZSBzYWZlIHRvIGZsdXNoCiAJCSAqIG1ldGFkYXRhIGJsb2NrcyBhbmQgdGhlIGlub2RlLgogCQkgKi8KLQkJcmV0ID0gbW1iX3N5bmMoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKIAkJcmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKQEAgLTgzLDIyICYjNDM7ODAsMTEgQEAgc3RhdGljIGludCBleHQ0X2ZzeW5jX25vam91cm5hbChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAogCQkJCWludCBkYXRhc3luYywgYm9vbCAqbmVlZHNfYmFycmllcikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0mZ3Q7Zl9pbm9kZTsKLQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewotCQkuc3luY19tb2RlID0gV0JfU1lOQ19BTEwsCi0JCS5ucl90b193cml0ZSA9IDAsCi0JfTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gbW1iX2ZzeW5jX25vZmx1c2goZmlsZSwgJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2JocywKLQkJCQlzdGFydCwgZW5kLCBkYXRhc3luYyk7CiYjNDM7CXJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7Ci0KLQkvKiBGb3JjZSB3cml0ZW91dCBvZiBpbm9kZSB0YWJsZSBidWZmZXIgdG8gZGlzayAqLwotCXJldCA9IGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsICZhbXA7d2JjKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJcmV0ID0gZXh0NF9zeW5jX3BhcmVudChpbm9kZSk7CiAKIAlpZiAodGVzdF9vcHQoaW5vZGUtJmd0O2lfc2IsIEJBUlJJRVIpKQpAQCAtMTU2LDYgJiM0MzsxNDIsMTAgQEAgaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYykKIAlpZiAoc2JfcmRvbmx5KGlub2RlLSZndDtpX3NiKSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJcmV0ID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCWlmICghRVhUNF9TQihpbm9kZS0mZ3Q7aV9zYiktJmd0O3Nfam91cm5hbCkgewogCQlyZXQgPSBleHQ0X2ZzeW5jX25vam91cm5hbChmaWxlLCBzdGFydCwgZW5kLCBkYXRhc3luYywKIAkJCQkJICAgJmFtcDtuZWVkc19iYXJyaWVyKTsKQEAgLTE2NCwxMCAmIzQzOzE1NCw2IEBAIGludCBleHQ0X3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KIAkvKgogCSAqICBUaGUgY2FsbGVyJiMzOTtzIGZpbGVtYXBfZmRhdGF3cml0ZSgpL3dhaXQgd2lsbCBzeW5jIHRoZSBkYXRhLgogCSAqICBNZXRhZGF0YSBpcyBpbiB0aGUgam91cm5hbCwgd2Ugd2FpdCBmb3IgcHJvcGVyIHRyYW5zYWN0aW9uIHRvCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggY2U5OTgwN2M1ZjViMmMuLmI2MWVlNzVlY2JkZjFhIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0xOTUsOSAmIzQzOzE5NSw4IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQkJZXh0NF93YXJuaW5nX2lub2RlKGlub2RlLCAmIzM0O2RhdGEgd2lsbCBiZSBsb3N0JiMzNDspOwogCiAJCXRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKCZhbXA7aW5vZGUtJmd0O2lfZGF0YSk7Ci0JCS8qIEF2b2lkIG1iYWxsb2Mgc3BlY2lhbCBpbm9kZSB3aGljaCBoYXMgbm8gcHJvcGVyIGlvcHMgKi8KLQkJaWYgKCFFWFQ0X1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c19qb3VybmFsKQotCQkJbW1iX3N5bmMoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQlpZiAoRVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpCiYjNDM7CQkJbW1iX3N5bmMoRVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwogCQlnb3RvIG5vX2RlbGV0ZTsKIAl9CiAKQEAgLTM0NTIsNiAmIzQzOzM0NTEsNyBAQCBzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdCkKIHN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQ0X1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c19qb3VybmFsOwomIzQzOwlzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjsKIAogCWlmIChqb3VybmFsKSB7CiAJCWlmIChqYmQyX3RyYW5zYWN0aW9uX2NvbW1pdHRlZChqb3VybmFsLApAQCAtMzQ2Miw4ICYjNDM7MzQ2Miw5IEBAIHN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSkKIAkJcmV0dXJuIHRydWU7CiAJfQogCiYjNDM7CW1tYiA9IFJFQURfT05DRShFWFQ0X0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiAJLyogQW55IG1ldGFkYXRhIGJ1ZmZlcnMgdG8gd3JpdGU/ICovCi0JaWYgKG1tYl9oYXNfYnVmZmVycygmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKSkKJiM0MzsJaWYgKG1tYiAmYW1wOyZhbXA7IG1tYl9oYXNfYnVmZmVycyhtbWIpKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX0RJUlRZX0RBVEFTWU5DOwogfQpAQCAtNTgzOCwyNCAmIzQzOzU4MzksMzYgQEAgaW50IGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiAJCWVyciA9IGV4dDRfZmNfY29tbWl0KEVYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2pvdXJuYWwsCiAJCQkJCQlFWFQ0X0koaW5vZGUpLSZndDtpX3N5bmNfdGlkKTsKIAl9IGVsc2UgewotCQlzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7CiYjNDM7CQlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KIAotCQllcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCAmYW1wO2lsb2MpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJLyoKLQkJICogc3luYygyKSB3aWxsIGZsdXNoIHRoZSB3aG9sZSBidWZmZXIgY2FjaGUuIE5vIG5lZWQgdG8gZG8KLQkJICogaXQgaGVyZSBzZXBhcmF0ZWx5IGZvciBlYWNoIGlub2RlLgotCQkgKi8KLQkJaWYgKHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfQUxMICZhbXA7JmFtcDsgIXdiYy0mZ3Q7Zm9yX3N5bmMpCi0JCQlzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTsKLQkJaWYgKGJ1ZmZlcl9yZXEoaWxvYy5iaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGlsb2MuYmgpKSB7Ci0JCQlleHQ0X2Vycm9yX2lub2RlX2Jsb2NrKGlub2RlLCBpbG9jLmJoLSZndDtiX2Jsb2NrbnIsIEVJTywKLQkJCQkJICAgICAgICYjMzQ7SU8gZXJyb3Igc3luY2luZyBpbm9kZSYjMzQ7KTsKLQkJCWVyciA9IC1FSU87Ci0JCX0KLQkJYnJlbHNlKGlsb2MuYmgpOwomIzQzO2ludCBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7CiYjNDM7CXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKiBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpbiBub2pvdXJuYWwgbW9kZSAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKEVYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2pvdXJuYWwpKQomIzQzOwkJcmV0dXJuIC1FRlNDT1JSVVBURUQ7CiYjNDM7CiYjNDM7CWVyciA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jX25vaW5tZW0oaW5vZGUsICZhbXA7aWxvYyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwlzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTsKJiM0MzsJaWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihpbG9jLmJoKSkgewomIzQzOwkJZXh0NF9lcnJvcl9pbm9kZV9ibG9jayhpbm9kZSwgaWxvYy5iaC0mZ3Q7Yl9ibG9ja25yLCBFSU8sCiYjNDM7CQkJCSAgICAgICAmIzM0O0lPIGVycm9yIHN5bmNpbmcgaW5vZGUmIzM0Oyk7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwkJZ290byBvdXQ7CiAJfQomIzQzOwltbWIgPSBSRUFEX09OQ0UoRVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwlpZiAobW1iKQomIzQzOwkJZXJyID0gbW1iX3N5bmMobW1iKTsKJiM0MztvdXQ6CiYjNDM7CWJyZWxzZShpbG9jLmJoKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLjkwZDZkNmI4ODY3MzAyIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jCkBAIC0xNDMwLDcgJiM0MzsxNDMwLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCUlOSVRfV09SSygmYW1wO2VpLSZndDtpX3Jzdl9jb252ZXJzaW9uX3dvcmssIGV4dDRfZW5kX2lvX3Jzdl93b3JrKTsKIAlleHQ0X2ZjX2luaXRfaW5vZGUoJmFtcDtlaS0mZ3Q7dmZzX2lub2RlKTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2VpLSZndDtpX2ZjX2xvY2spOwotCW1tYl9pbml0KCZhbXA7ZWktJmd0O2lfbWV0YWRhdGFfYmhzLCAmYW1wO2VpLSZndDt2ZnNfaW5vZGUuaV9kYXRhKTsKJiM0MzsJZWktJmd0O2lfbWV0YWRhdGFfYmhzID0gTlVMTDsKICNpZmRlZiBDT05GSUdfTE9DS0RFUAogCWxvY2tkZXBfc2V0X3N1YmNsYXNzKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0sIElfREFUQV9TRU1fTk9STUFMKTsKICNlbmRpZgpAQCAtMTQ1MSw2ICYjNDM7MTQ1MSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiBzdGF0aWMgdm9pZCBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWZzY3J5cHRfZnJlZV9pbm9kZShpbm9kZSk7CiYjNDM7CWtmcmVlKEVYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKIAlpZiAoIWxpc3RfZW1wdHkoJmFtcDsoRVhUNF9JKGlub2RlKS0mZ3Q7aV9mY19saXN0KSkpIHsKIAkJcHJfd2FybigmIzM0OyVzOiBpbm9kZSAlbGx1IHN0aWxsIGluIGZjIGxpc3QmIzM0OywKIAkJCV9fZnVuY19fLCBpbm9kZS0mZ3Q7aV9pbm8pOwpAQCAtMTUzMCw4ICYjNDM7MTUzMSw4IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQogdm9pZCBleHQ0X2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJZXh0NF9mY19kZWwoaW5vZGUpOwotCWlmICghRVhUNF9TQihpbm9kZS0mZ3Q7aV9zYiktJmd0O3Nfam91cm5hbCkKLQkJbW1iX2ludmFsaWRhdGUoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CWlmIChFWFQ0X0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2JocykKJiM0MzsJCW1tYl9pbnZhbGlkYXRlKEVYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKIAljbGVhcl9pbm9kZShpbm9kZSk7CiAJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKIAkvKgpAQCAtMTYwNSw5ICYjNDM7MTYwNiwxMyBAQCBzdGF0aWMgaW50IGV4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7CiAJCS5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTAogCX07CiYjNDM7CWludCByZXQ7CiAKIAl0cmFjZV9leHQ0X25mc19jb21taXRfbWV0YWRhdGEoaW5vZGUpOwotCXJldHVybiBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCAmYW1wO3diYyk7CiYjNDM7CXJldCA9IGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsICZhbXA7d2JjKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZXQgPSBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsICZhbXA7d2JjKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogI2lmZGVmIENPTkZJR19RVU9UQQpAQCAtMTY2NCw2ICYjNDM7MTY2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7CiAJLmZyZWVfaW5vZGUJPSBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IGV4dDRfZGVzdHJveV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBleHQ0X3dyaXRlX2lub2RlLAomIzQzOwkuc3luY19pbm9kZV9tZXRhZGF0YSA9IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YSwKIAkuZGlydHlfaW5vZGUJPSBleHQ0X2RpcnR5X2lub2RlLAogCS5kcm9wX2lub2RlCT0gZXh0NF9kcm9wX2lub2RlLAogCS5ldmljdF9pbm9kZQk9IGV4dDRfZXZpY3RfaW5vZGUsCmRpZmYgLS1naXQgYS9mcy9mYXQvZGlyLmMgYi9mcy9mYXQvZGlyLmMKaW5kZXggNGY2ZjQyZjMzNjEzZGYuLmQzM2JmMzRiZGNlNzVmIDEwMDY0NAotLS0gYS9mcy9mYXQvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2Rpci5jCkBAIC0xMDI4LDggJiM0MzsxMDI4LDYgQEAgc3RhdGljIGludCBfX2ZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgbG9mZl90IHBvcywgaW50IG5yX3Nsb3RzKQogCQkJbnJfc2xvdHMtLTsKIAkJfQogCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7TVNET1NfSShkaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JCWlmIChJU19ESVJTWU5DKGRpcikpCi0JCQllcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJCWJyZWxzZShiaCk7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKQEAgLTEwNjMsOCAmIzQzOzEwNjEsNiBAQCBpbnQgZmF0X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZmF0X3Nsb3RfaW5mbyAqc2luZm8pCiAJCW5yX3Nsb3RzLS07CiAJfQogCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtNU0RPU19JKGRpciktJmd0O2lfbWV0YWRhdGFfYmhzKTsKLQlpZiAoSVNfRElSU1lOQyhkaXIpKQotCQllcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJYnJlbHNlKGJoKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMTA4NCwxMCAmIzQzOzEwODAsOSBAQCBpbnQgZmF0X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZmF0X3Nsb3RfaW5mbyAqc2luZm8pCiAJfQogCiAJZmF0X3RydW5jYXRlX3RpbWUoZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0FUSU1FIHwgRkFUX1VQREFURV9DTVRJTUUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGRpcik7CiAJaWYgKElTX0RJUlNZTkMoZGlyKSkKLQkJKHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTsKLQllbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKJiM0MzsJCXN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTExOSwyMSAmIzQzOzExMTQsMTEgQEAgc3RhdGljIGludCBmYXRfemVyb2VkX2NsdXN0ZXIoc3RydWN0IGlub2RlICpkaXIsIHNlY3Rvcl90IGJsa25yLCBpbnQgbnJfdXNlZCwKIAkJbiYjNDM7JiM0Mzs7CiAJCWJsa25yJiM0MzsmIzQzOzsKIAkJaWYgKG4gPT0gbnJfYmhzKSB7Ci0JCQlpZiAoSVNfRElSU1lOQyhkaXIpKSB7Ci0JCQkJZXJyID0gZmF0X3N5bmNfYmhzKGJocywgbik7Ci0JCQkJaWYgKGVycikKLQkJCQkJZ290byBlcnJvcjsKLQkJCX0KIAkJCWZvciAoaSA9IDA7IGkgJmx0OyBuOyBpJiM0MzsmIzQzOykKIAkJCQlicmVsc2UoYmhzW2ldKTsKIAkJCW4gPSAwOwogCQl9CiAJfQotCWlmIChJU19ESVJTWU5DKGRpcikpIHsKLQkJZXJyID0gZmF0X3N5bmNfYmhzKGJocywgbik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycm9yOwotCX0KIAlmb3IgKGkgPSAwOyBpICZsdDsgbjsgaSYjNDM7JiM0MzspCiAJCWJyZWxzZShiaHNbaV0pOwogCmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmggYi9mcy9mYXQvZmF0LmgKaW5kZXggOTllZDkyMjhhNjc3YmUuLmRjYjViYTc1NzA3M2VkIDEwMDY0NAotLS0gYS9mcy9mYXQvZmF0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZhdC5oCkBAIC00MjEsNyAmIzQzOzQyMSw2IEBAIGV4dGVybiB2b2lkIGZhdF9kZXRhY2goc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gc3RydWN0IGlub2RlICpmYXRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb2ZmX3QgaV9wb3MpOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZmF0X2J1aWxkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQlzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSwgbG9mZl90IGlfcG9zKTsKLWV4dGVybiBpbnQgZmF0X3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gaW50IGZhdF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJCSAgdm9pZCAoKnNldHVwKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKikpOwogZXh0ZXJuIGludCBmYXRfZmlsbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSk7CmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuYwppbmRleCAzN2U3MDQ5YjRjOGM0NC4uMWM4MzVjYTVmMjFhNTEgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZpbGUuYwpAQCAtMTkwLDggJiM0MzsxOTAsNyBAQCBpbnQgZmF0X2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbHAsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKQogCXN0cnVjdCBpbm9kZSAqZmF0X2lub2RlID0gTVNET1NfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtmYXRfaW5vZGU7CiAJaW50IGVycjsKIAotCWVyciA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbHAsICZhbXA7TVNET1NfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzLAotCQkJCXN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKJiM0MzsJZXJyID0gc2ltcGxlX2ZzeW5jX25vZmx1c2goZmlscCwgc3RhcnQsIGVuZCwgZGF0YXN5bmMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTMzMiwxNSAmIzQzOzMzMSwxNSBAQCBzdGF0aWMgaW50IGZhdF9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBza2lwKQogCX0KIAlNU0RPU19JKGlub2RlKS0mZ3Q7aV9hdHRycyB8PSBBVFRSX0FSQ0g7CiAJZmF0X3RydW5jYXRlX3RpbWUoaW5vZGUsIE5VTEwsIEZBVF9VUERBVEVfQ01USU1FKTsKJiM0MzsJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJaWYgKHdhaXQpIHsKLQkJZXJyID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpOwomIzQzOwkJZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CiAJCWlmIChlcnIpIHsKIAkJCU1TRE9TX0koaW5vZGUpLSZndDtpX3N0YXJ0ID0gaV9zdGFydDsKIAkJCU1TRE9TX0koaW5vZGUpLSZndDtpX2xvZ3N0YXJ0ID0gaV9sb2dzdGFydDsKIAkJCXJldHVybiBlcnI7CiAJCX0KLQl9IGVsc2UKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CX0KIAogCS8qIFdyaXRlIGEgbmV3IEVPRiwgYW5kIGdldCB0aGUgcmVtYWluaW5nIGNsdXN0ZXIgY2hhaW4gZm9yIGZyZWVpbmcuICovCiAJaWYgKHNraXApIHsKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9pbm9kZS5jIGIvZnMvZmF0L2lub2RlLmMKaW5kZXggM2FhNTI0ODFhZDVjZjMuLmM0YjRjY2FhMDkxYWE3IDEwMDY0NAotLS0gYS9mcy9mYXQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvaW5vZGUuYwpAQCAtNjIzLDcgJiM0Mzs2MjMsMzcgQEAgc3RydWN0IGlub2RlICpmYXRfYnVpbGRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAogRVhQT1JUX1NZTUJPTF9HUEwoZmF0X2J1aWxkX2lub2RlKTsKIAotc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCk7CiYjNDM7c3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO3sKJiM0MzsJc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSA9IE1TRE9TX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKJiM0MzsJbG9mZl90IGlfcG9zOwomIzQzOwlzZWN0b3JfdCBibG9ja25yOwomIzQzOwlpbnQgb2Zmc2V0OwomIzQzOwomIzQzOwlpZiAoaW5vZGUtJmd0O2lfaW5vID09IE1TRE9TX1JPT1RfSU5PKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWlfcG9zID0gZmF0X2lfcG9zX3JlYWQoc2JpLCBpbm9kZSk7CiYjNDM7CWlmICghaV9wb3MpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZmF0X2dldF9ibGtucl9vZmZzZXQoc2JpLCBpX3BvcywgJmFtcDtibG9ja25yLCAmYW1wO29mZnNldCk7CiYjNDM7CWJoID0gc2JfZmluZF9nZXRfYmxvY2tfbm9uYXRvbWljKGlub2RlLSZndDtpX3NiLCBibG9ja25yKTsKJiM0MzsJLyoKJiM0MzsJICogQnVmZmVyIGFscmVhZHkgd3JpdHRlbj8gV2UgbGVhdmUgYnVmZmVyX2RpcnR5IGNoZWNrIGZvcgomIzQzOwkgKiBzeW5jX2RpcnR5X2J1ZmZlcigpIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGggb25nb2luZyBJTy4KJiM0MzsJICovCiYjNDM7CWlmICghYmggfHwgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKJiM0MzsJCWJyZWxzZShiaCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiYjNDM7CWJyZWxzZShiaCk7CiYjNDM7CXJldHVybiBtbWJfc3luYygmYW1wO01TRE9TX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7fQogCiBzdGF0aWMgdm9pZCBmYXRfZnJlZV9lb2ZibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIHsKQEAgLTY0MCw3ICYjNDM7NjcwLDEzIEBAIHN0YXRpYyB2b2lkIGZhdF9mcmVlX2VvZmJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQkgKiBhbnkgY29ycnVwdGlvbiBvbiB0aGUgbmV4dCBhY2Nlc3MgdG8gdGhlIGNsdXN0ZXIKIAkJICogY2hhaW4gZm9yIHRoZSBmaWxlLgogCQkgKi8KLQkJZXJyID0gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTsKJiM0MzsJCWVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlKTsKJiM0MzsJCWlmICghZXJyICZhbXA7JmFtcDsgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHsKJiM0MzsJCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewomIzQzOwkJCQkuc3luY19tb2RlID0gV0JfU1lOQ19BTEwsCiYjNDM7CQkJfTsKJiM0MzsJCQllcnIgPSBmYXRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgJmFtcDt3YmMpOwomIzQzOwkJfQogCQlpZiAoZXJyKSB7CiAJCQlmYXRfbXNnKGlub2RlLSZndDtpX3NiLCBLRVJOX1dBUk5JTkcsICYjMzQ7RmFpbGVkIHRvICYjMzQ7CiAJCQkJCSYjMzQ7dXBkYXRlIG9uIGRpc2sgaW5vZGUgZm9yIHVudXNlZCAmIzM0OwpAQCAtODU0LDcgJiM0Mzs4OTAsNyBAQCBzdGF0aWMgaW50IGZhdF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KQomIzQzO3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiAJc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSA9IE1TRE9TX1NCKHNiKTsKQEAgLTg2Myw3ICYjNDM7ODk5LDcgQEAgc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCkKIAlzdHJ1Y3QgdGltZXNwZWM2NCBtdGltZTsKIAlsb2ZmX3QgaV9wb3M7CiAJc2VjdG9yX3QgYmxvY2tucjsKLQlpbnQgZXJyLCBvZmZzZXQ7CiYjNDM7CWludCBvZmZzZXQ7CiAKIAlpZiAoaW5vZGUtJmd0O2lfaW5vID09IE1TRE9TX1JPT1RfSU5PKQogCQlyZXR1cm4gMDsKQEAgLTkwNywxMSAmIzQzOzk0Myw5IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpCiAJfQogCXNwaW5fdW5sb2NrKCZhbXA7c2JpLSZndDtpbm9kZV9oYXNoX2xvY2spOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQllcnIgPSAwOwotCWlmICh3YWl0KQotCQllcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJYnJlbHNlKGJoKTsKLQlyZXR1cm4gZXJyOwomIzQzOwlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQpAQCAtOTI1LDIzICYjNDM7OTU5LDE3IEBAIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCQllcnIgPSBmYXRfY2x1c3RlcnNfZmx1c2goc2IpOwogCQltdXRleF91bmxvY2soJmFtcDtNU0RPU19TQihzYiktJmd0O3NfbG9jayk7CiAJfSBlbHNlCi0JCWVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCB3YmMtJmd0O3N5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7CiYjNDM7CQllcnIgPSBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgZmF0X3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlyZXR1cm4gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUsIDEpOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChmYXRfc3luY19pbm9kZSk7Ci0KIHN0YXRpYyBpbnQgZmF0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGZhdF9zb3BzID0gewogCS5hbGxvY19pbm9kZQk9IGZhdF9hbGxvY19pbm9kZSwKIAkuZnJlZV9pbm9kZQk9IGZhdF9mcmVlX2lub2RlLAogCS53cml0ZV9pbm9kZQk9IGZhdF93cml0ZV9pbm9kZSwKJiM0MzsJLnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBmYXRfc3luY19pbm9kZV9tZXRhZGF0YSwKIAkuZXZpY3RfaW5vZGUJPSBmYXRfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IGZhdF9wdXRfc3VwZXIsCiAJLnN0YXRmcwkJPSBmYXRfc3RhdGZzLApkaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmMKaW5kZXggMzAyN2VmNTNhZjIxNGMuLmJlMThmNmI1ODE5YmE3IDEwMDY0NAotLS0gYS9mcy9mYXQvbWlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9taXNjLmMKQEAgLTE0NiwxNiAmIzQzOzE0NiwxNyBAQCBpbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3RlcikKIAl9IGVsc2UgewogCQlNU0RPU19JKGlub2RlKS0mZ3Q7aV9zdGFydCA9IG5ld19kY2x1czsKIAkJTVNET1NfSShpbm9kZSktJmd0O2lfbG9nc3RhcnQgPSBuZXdfZGNsdXM7CiYjNDM7CQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAkJLyoKIAkJICogU2luY2UgZ2VuZXJpY193cml0ZV9zeW5jKCkgc3luY2hyb25pemVzIHJlZ3VsYXIgZmlsZXMgbGF0ZXIsCiAJCSAqIHdlIHN5bmMgaGVyZSBvbmx5IGRpcmVjdG9yaWVzLgogCQkgKi8KIAkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkgJmFtcDsmYW1wOyBJU19ESVJTWU5DKGlub2RlKSkgewotCQkJcmV0ID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpOwomIzQzOwkJCXJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwotCQl9IGVsc2UKLQkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwkJfQomIzQzOwogCX0KIAlpZiAobmV3X2ZjbHVzICE9IChpbm9kZS0mZ3Q7aV9ibG9ja3MgJmd0OyZndDsgKHNiaS0mZ3Q7Y2x1c3Rlcl9iaXRzIC0gOSkpKSB7CiAJCWZhdF9mc19lcnJvcl9yYXRlbGltaXQoCmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfbXNkb3MuYyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jCmluZGV4IDBmZDI5NzFhZDRiMTMxLi40NzJiZDg0N2VmOWNiYiAxMDA2NDQKLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX21zZG9zLmMKQEAgLTI1MiwxMCAmIzQzOzI1Miw5IEBAIHN0YXRpYyBpbnQgbXNkb3NfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAogCQlyZXR1cm4gZXJyOwogCiAJZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGRpcik7CiAJaWYgKElTX0RJUlNZTkMoZGlyKSkKLQkJKHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTsKLQllbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKJiM0MzsJCXN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDczLDIxICYjNDM7NDcyLDIxIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsCiAJCQkJTVNET1NfSShvbGRfaW5vZGUpLSZndDtpX2F0dHJzIHw9IEFUVFJfSElEREVOOwogCQkJZWxzZQogCQkJCU1TRE9TX0kob2xkX2lub2RlKS0mZ3Q7aV9hdHRycyAmYW1wOz0gfkFUVFJfSElEREVOOwomIzQzOwkJCW1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTsKIAkJCWlmIChJU19ESVJTWU5DKG9sZF9kaXIpKSB7Ci0JCQkJZXJyID0gZmF0X3N5bmNfaW5vZGUob2xkX2lub2RlKTsKJiM0MzsJCQkJZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShvbGRfaW5vZGUsIDEpOwogCQkJCWlmIChlcnIpIHsKIAkJCQkJTVNET1NfSShvbGRfaW5vZGUpLSZndDtpX2F0dHJzID0gb2xkX2F0dHJzOwogCQkJCQlnb3RvIG91dDsKIAkJCQl9Ci0JCQl9IGVsc2UKLQkJCQltYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7CiYjNDM7CQkJfQogCiAJCQlpbm9kZV9pbmNfaXZlcnNpb24ob2xkX2Rpcik7CiAJCQlmYXRfdHJ1bmNhdGVfdGltZShvbGRfZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0NNVElNRSk7CiYjNDM7CQkJbWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTsKIAkJCWlmIChJU19ESVJTWU5DKG9sZF9kaXIpKQotCQkJCSh2b2lkKWZhdF9zeW5jX2lub2RlKG9sZF9kaXIpOwomIzQzOwkJCQlzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9kaXIsIDEpOwogCQkJZWxzZQotCQkJCW1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTUxOCwyNiAmIzQzOzUxNywyMSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLAogCQlNU0RPU19JKG9sZF9pbm9kZSktJmd0O2lfYXR0cnMgfD0gQVRUUl9ISURERU47CiAJZWxzZQogCQlNU0RPU19JKG9sZF9pbm9kZSktJmd0O2lfYXR0cnMgJmFtcDs9IH5BVFRSX0hJRERFTjsKLQlpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkgewotCQllcnIgPSBmYXRfc3luY19pbm9kZShvbGRfaW5vZGUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJvcl9pbm9kZTsKLQl9IGVsc2UKLQkJbWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpOwotCiAJaWYgKHVwZGF0ZV9kb3Rkb3QpIHsKIAkJZmF0X3NldF9zdGFydChkb3Rkb3RfZGUsIE1TRE9TX0kobmV3X2RpciktJmd0O2lfbG9nc3RhcnQpOwogCQltbWJfbWFya19idWZmZXJfZGlydHkoZG90ZG90X2JoLAogCQkJCSAgICAgICZhbXA7TVNET1NfSShvbGRfaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JCWlmIChJU19ESVJTWU5DKG5ld19kaXIpKSB7Ci0JCQllcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihkb3Rkb3RfYmgpOwotCQkJaWYgKGVycikKLQkJCQlnb3RvIGVycm9yX2RvdGRvdDsKLQkJfQogCQlkcm9wX25saW5rKG9sZF9kaXIpOwogCQlpZiAoIW5ld19pbm9kZSkKIAkJCWluY19ubGluayhuZXdfZGlyKTsKIAl9CiYjNDM7CW1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTsKJiM0MzsJaWYgKElTX0RJUlNZTkMobmV3X2RpcikpIHsKJiM0MzsJCWVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2lub2RlLCAxKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJvcl9kb3Rkb3Q7CiYjNDM7CX0KJiM0MzsKIAogCWVyciA9IGZhdF9yZW1vdmVfZW50cmllcyhvbGRfZGlyLCAmYW1wO29sZF9zaW5mbyk7CS8qIGFuZCByZWxlYXNlcyBiaCAqLwogCW9sZF9zaW5mby5iaCA9IE5VTEw7CkBAIC01NDUsMTAgJiM0Mzs1MzksOSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLAogCQlnb3RvIGVycm9yX2RvdGRvdDsKIAlpbm9kZV9pbmNfaXZlcnNpb24ob2xkX2Rpcik7CiAJZmF0X3RydW5jYXRlX3RpbWUob2xkX2RpciwgJmFtcDt0cywgRkFUX1VQREFURV9DTVRJTUUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpOwogCWlmIChJU19ESVJTWU5DKG9sZF9kaXIpKQotCQkodm9pZClmYXRfc3luY19pbm9kZShvbGRfZGlyKTsKLQllbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7CiYjNDM7CQlzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9kaXIsIDEpOwogCiAJaWYgKG5ld19pbm9kZSkgewogCQlkcm9wX25saW5rKG5ld19pbm9kZSk7CkBAIC01NzEsMTQgJiM0Mzs1NjQsMTMgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSwKIAkJCQkgICAgICAmYW1wO01TRE9TX0kob2xkX2lub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwogCQljb3JydXB0IHw9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7CiAJfQotZXJyb3JfaW5vZGU6CiAJZmF0X2RldGFjaChvbGRfaW5vZGUpOwogCWZhdF9hdHRhY2gob2xkX2lub2RlLCBvbGRfc2luZm8uaV9wb3MpOwogCU1TRE9TX0kob2xkX2lub2RlKS0mZ3Q7aV9hdHRycyA9IG9sZF9hdHRyczsKIAlpZiAobmV3X2lub2RlKSB7CiAJCWZhdF9hdHRhY2gobmV3X2lub2RlLCBuZXdfaV9wb3MpOwogCQlpZiAoY29ycnVwdCkKLQkJCWNvcnJ1cHQgfD0gZmF0X3N5bmNfaW5vZGUobmV3X2lub2RlKTsKJiM0MzsJCQljb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBJZiBuZXcgZW50cnkgd2FzIG5vdCBzaGFyaW5nIHRoZSBkYXRhIGNsdXN0ZXIsIGl0CmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuYwppbmRleCBlOTA5NDQ3ODczZTM2NC4uNzMyYWJmMDcyZmRkM2IgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX3ZmYXQuYwpAQCAtNjc4LDEwICYjNDM7Njc4LDkgQEAgc3RhdGljIGludCB2ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFuYW1lLAogCiAJLyogdXBkYXRlIHRpbWVzdGFtcCAqLwogCWZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTsKJiM0MzsJbWFya19pbm9kZV9kaXJ0eShkaXIpOwogCWlmIChJU19ESVJTWU5DKGRpcikpCi0JCSh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7Ci0JZWxzZQotCQltYXJrX2lub2RlX2RpcnR5KGRpcik7CiYjNDM7CQlzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7CiBjbGVhbnVwOgogCWtmcmVlKHNsb3RzKTsKIAlyZXR1cm4gZXJyOwpAQCAtOTA0LDkgJiM0Mzs5MDMsOSBAQCBzdGF0aWMgaW50IHZmYXRfZ2V0X2RvdGRvdF9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCwKIAogc3RhdGljIGludCB2ZmF0X3N5bmNfaXBvcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpZiAoSVNfRElSU1lOQyhkaXIpKQotCQlyZXR1cm4gZmF0X3N5bmNfaW5vZGUoaW5vZGUpOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwlpZiAoSVNfRElSU1lOQyhkaXIpKQomIzQzOwkJcmV0dXJuIHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpOwogCXJldHVybiAwOwogfQogCkBAIC05MjUsMTAgJiM0Mzs5MjQsOSBAQCBzdGF0aWMgdm9pZCB2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKIAlpbm9kZV9pbmNfaXZlcnNpb24oZGlyKTsKIAlmYXRfdHJ1bmNhdGVfdGltZShkaXIsIHRzLCBGQVRfVVBEQVRFX0NNVElNRSk7CiYjNDM7CW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKIAlpZiAoSVNfRElSU1lOQyhkaXIpKQotCQkodm9pZClmYXRfc3luY19pbm9kZShkaXIpOwotCWVsc2UKLQkJbWFya19pbm9kZV9kaXJ0eShkaXIpOwomIzQzOwkJc3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpOwogfQogCiBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKQEAgLTEwMjUsNyAmIzQzOzEwMjMsNyBAQCBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAlpZiAobmV3X2lub2RlKSB7CiAJCWZhdF9hdHRhY2gobmV3X2lub2RlLCBuZXdfaV9wb3MpOwogCQlpZiAoY29ycnVwdCkKLQkJCWNvcnJ1cHQgfD0gZmF0X3N5bmNfaW5vZGUobmV3X2lub2RlKTsKJiM0MzsJCQljb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBJZiBuZXcgZW50cnkgd2FzIG5vdCBzaGFyaW5nIHRoZSBkYXRhIGNsdXN0ZXIsIGl0CmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IGZkYjg3NjZkMjc1YTE3Li45ZDk2MzU3NzMxYTNkNCAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTE4NTEsNiAmIzQzOzE4NTEsMjIgQEAgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCQlpZiAocmV0ID09IDApCiAJCQlyZXQgPSBlcnI7CiAJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPIHBvc3NpYmx5IHN1Ym1pdHRlZAomIzQzOwkgKiBieSBwcmV2aW91cyBXQl9TWU5DX05PTkUgd3JpdGViYWNrPwomIzQzOwkgKi8KJiM0MzsJaWYgKHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfQUxMICZhbXA7JmFtcDsgIXdiYy0mZ3Q7Zm9yX3N5bmMgJmFtcDsmYW1wOwomIzQzOwkgICAgaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX01FVEFEQVRBX1dSSVRFQkFDSykgewomIzQzOwkJaW50IGVycjsKJiM0MzsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwomIzQzOwkJaW5vZGVfc3RhdGVfY2xlYXIoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7CiYjNDM7CQllcnIgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19vcC0mZ3Q7c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgd2JjKTsKJiM0MzsJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CX0KIAl3YmMtJmd0O3VucGlubmVkX25ldGZzX3diID0gZmFsc2U7CiAJdHJhY2Vfd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjLCBucl90b193cml0ZSk7CiAJcmV0dXJuIHJldDsKQEAgLTE4OTIsMTQgJiM0MzsxOTA4LDE3IEBAIHN0YXRpYyBpbnQgd3JpdGViYWNrX3NpbmdsZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCS8qCiAJICogSWYgdGhlIGlub2RlIGlzIGFscmVhZHkgZnVsbHkgY2xlYW4sIHRoZW4gdGhlcmUmIzM5O3Mgbm90aGluZyB0byBkby4KIAkgKgotCSAqIEZvciBkYXRhLWludGVncml0eSBzeW5jcyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgcGFnZXMgYXJlCi0JICogc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkUgd3JpdGViYWNrLiAgSWYKLQkgKiB0aGVyZSBhcmUgYW55IHN1Y2ggcGFnZXMsIHdlJiMzOTtsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uCiYjNDM7CSAqIEZvciBkYXRhLWludGVncml0eSBzeW5jcyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZm9saW9zIG9yCiYjNDM7CSAqIG1ldGFkYXRhIGFyZSBzdGlsbCB1bmRlciB3cml0ZWJhY2ssIGUuZy4gZHVlIHRvIHByaW9yIFdCX1NZTkNfTk9ORQomIzQzOwkgKiB3cml0ZWJhY2suIElmIHRoZXJlLCB3ZSYjMzk7bGwgbmVlZCB0byB3YWl0IGZvciB0aGVtLgogCSAqLwotCWlmICghKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpICZhbXA7IElfRElSVFlfQUxMKSAmYW1wOyZhbXA7Ci0JICAgICh3YmMtJmd0O3N5bmNfbW9kZSAhPSBXQl9TWU5DX0FMTCB8fAotCSAgICAgIW1hcHBpbmdfdGFnZ2VkKGlub2RlLSZndDtpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSkpCi0JCWdvdG8gb3V0OwomIzQzOwlpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSAmYW1wOyBJX0RJUlRZX0FMTCkpIHsKJiM0MzsJCWlmICh3YmMtJmd0O3N5bmNfbW9kZSAhPSBXQl9TWU5DX0FMTCkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCWlmICghbWFwcGluZ190YWdnZWQoaW5vZGUtJmd0O2lfbWFwcGluZywgUEFHRUNBQ0hFX1RBR19XUklURUJBQ0spICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpICZhbXA7IElfTUVUQURBVEFfV1JJVEVCQUNLKSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQogCWlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9TWU5DKTsKIAl3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUod2JjLCBpbm9kZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2xpYmZzLmMgYi9mcy9saWJmcy5jCmluZGV4IDVhMGQyNzYzNzlkMTNiLi41N2U1OTcxYjYzMzE5NyAxMDA2NDQKLS0tIGEvZnMvbGliZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9saWJmcy5jCkBAIC0xNTU5LDkgJiM0MzsxNTU5LDEwIEBAIGludCBzaW1wbGVfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpICZhbXA7IElfRElSVFlfQUxMKSkKJiM0MzsJaWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyAoSV9ESVJUWV9BTEwgfCBJX1NZTkMpKSkKIAkJZ290byBvdXQ7Ci0JaWYgKGRhdGFzeW5jICZhbXA7JmFtcDsgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpICZhbXA7IElfRElSVFlfREFUQVNZTkMpKQomIzQzOwlpZiAoZGF0YXN5bmMgJmFtcDsmYW1wOwomIzQzOwkgICAgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpICZhbXA7IChJX0RJUlRZX0RBVEFTWU5DIHwgSV9TWU5DKSkpCiAJCWdvdG8gb3V0OwogCiAJcmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CmRpZmYgLS1naXQgYS9mcy9taW5peC9kaXIuYyBiL2ZzL21pbml4L2Rpci5jCmluZGV4IDM2MWQyNmQ4N2QyZTJkLi4yY2ExNmY4NDlkNWFjMCAxMDA2NDQKLS0tIGEvZnMvbWluaXgvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvZGlyLmMKQEAgLTIzLDcgJiM0MzsyMyw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZGlyX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLml0ZXJhdGVfc2hhcmVkCT0gbWluaXhfcmVhZGRpciwKLQkuZnN5bmMJCT0gbWluaXhfZnN5bmMsCiYjNDM7CS5mc3luYwkJPSBzaW1wbGVfZnN5bmMsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jCmluZGV4IDg2ZTU5NDNjZDJmZjc0Li4wMmFhYmJkYjVkZWFhMCAxMDA2NDQKLS0tIGEvZnMvbWluaXgvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2ZpbGUuYwpAQCAtMTAsMTMgJiM0MzsxMCw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYnVmZmVyX2hlYWQuaCZndDsKICNpbmNsdWRlICYjMzQ7bWluaXguaCYjMzQ7CiAKLWludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCi17Ci0JcmV0dXJuIG1tYl9mc3luYyhmaWxlLAotCQkJJmFtcDttaW5peF9pKGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdCktJmd0O2lfbWV0YWRhdGFfYmhzLAotCQkJc3RhcnQsIGVuZCwgZGF0YXN5bmMpOwotfQotCiAvKgogICogV2UgaGF2ZSBtb3N0bHkgTlVMTHMgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIE9LIGZvcgogICogdGhlIG1pbml4IGZpbGVzeXN0ZW0uCkBAIC0yNiw3ICYjNDM7MTksNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZF9pdGVyCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKIAkud3JpdGVfaXRlcgk9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLAogCS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAotCS5mc3luYwkJPSBtaW5peF9mc3luYywKJiM0MzsJLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKIAkuc3BsaWNlX3JlYWQJPSBmaWxlbWFwX3NwbGljZV9yZWFkLAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmMKaW5kZXggYzMwY2M1OTA2OThkNmYuLjk1MjY3ZDkzZWYzOWRmIDEwMDY0NAotLS0gYS9mcy9taW5peC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lub2RlLmMKQEAgLTI0LDYgJiM0MzsyNCw4IEBACiAKIHN0YXRpYyBpbnQgbWluaXhfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwKIAkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwomIzQzO3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7CiAKIHZvaWQgX19taW5peF9lcnJvcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpmdW5jdGlvbiwKQEAgLTEyOCw2ICYjNDM7MTMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1pbml4X3NvcHMgPSB7CiAJLmFsbG9jX2lub2RlCT0gbWluaXhfYWxsb2NfaW5vZGUsCiAJLmZyZWVfaW5vZGUJPSBtaW5peF9mcmVlX2luX2NvcmVfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gbWluaXhfd3JpdGVfaW5vZGUsCiYjNDM7CS5zeW5jX2lub2RlX21ldGFkYXRhID0gbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSwKIAkuZXZpY3RfaW5vZGUJPSBtaW5peF9ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCT0gbWluaXhfcHV0X3N1cGVyLAogCS5zdGF0ZnMJCT0gbWluaXhfc3RhdGZzLApAQCAtNjMwLDcgJiM0Mzs2MzMsNyBAQCBzdHJ1Y3QgaW5vZGUgKm1pbml4X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pCiAvKgogICogVGhlIG1pbml4IFYxIGZ1bmN0aW9uIHRvIHN5bmNocm9uaXplIGFuIGlub2RlLgogICovCi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQomIzQzO3N0YXRpYyBpbnQgVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJoOwogCXN0cnVjdCBtaW5peF9pbm9kZSAqIHJhd19pbm9kZTsKQEAgLTYzOSw3ICYjNDM7NjQyLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYxX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAogCXJhd19pbm9kZSA9IG1pbml4X1YxX3Jhd19pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgaW5vZGUtJmd0O2lfaW5vLCAmYW1wO2JoKTsKIAlpZiAoIXJhd19pbm9kZSkKLQkJcmV0dXJuIE5VTEw7CiYjNDM7CQlyZXR1cm4gLUVJTzsKIAlyYXdfaW5vZGUtJmd0O2lfbW9kZSA9IGlub2RlLSZndDtpX21vZGU7CiAJcmF3X2lub2RlLSZndDtpX3VpZCA9IGZzX2hpZ2gybG93dWlkKGlfdWlkX3JlYWQoaW5vZGUpKTsKIAlyYXdfaW5vZGUtJmd0O2lfZ2lkID0gZnNfaGlnaDJsb3dnaWQoaV9naWRfcmVhZChpbm9kZSkpOwpAQCAtNjUxLDEzICYjNDM7NjU0LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiAJZWxzZSBmb3IgKGkgPSAwOyBpICZsdDsgOTsgaSYjNDM7JiM0MzspCiAJCXJhd19pbm9kZS0mZ3Q7aV96b25lW2ldID0gbWluaXhfaW5vZGUtJmd0O3UuaTFfZGF0YVtpXTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JcmV0dXJuIGJoOwomIzQzOwlicmVsc2UoYmgpOwomIzQzOwlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBUaGUgbWluaXggVjIgZnVuY3Rpb24gdG8gc3luY2hyb25pemUgYW4gaW5vZGUuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiYjNDM7c3RhdGljIGludCBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICogYmg7CiAJc3RydWN0IG1pbml4Ml9pbm9kZSAqIHJhd19pbm9kZTsKQEAgLTY2Niw3ICYjNDM7NjcxLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAogCXJhd19pbm9kZSA9IG1pbml4X1YyX3Jhd19pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgaW5vZGUtJmd0O2lfaW5vLCAmYW1wO2JoKTsKIAlpZiAoIXJhd19pbm9kZSkKLQkJcmV0dXJuIE5VTEw7CiYjNDM7CQlyZXR1cm4gLUVJTzsKIAlyYXdfaW5vZGUtJmd0O2lfbW9kZSA9IGlub2RlLSZndDtpX21vZGU7CiAJcmF3X2lub2RlLSZndDtpX3VpZCA9IGZzX2hpZ2gybG93dWlkKGlfdWlkX3JlYWQoaW5vZGUpKTsKIAlyYXdfaW5vZGUtJmd0O2lfZ2lkID0gZnNfaGlnaDJsb3dnaWQoaV9naWRfcmVhZChpbm9kZSkpOwpAQCAtNjgwLDI5ICYjNDM7Njg1LDQwIEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiAJZWxzZSBmb3IgKGkgPSAwOyBpICZsdDsgMTA7IGkmIzQzOyYjNDM7KQogCQlyYXdfaW5vZGUtJmd0O2lfem9uZVtpXSA9IG1pbml4X2lub2RlLSZndDt1LmkyX2RhdGFbaV07CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwotCXJldHVybiBiaDsKJiM0MzsJYnJlbHNlKGJoKTsKJiM0MzsJc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO3sKJiM0MzsJaWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKQomIzQzOwkJcmV0dXJuIFYxX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7CiYjNDM7CXJldHVybiBWMl9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwomIzQzOwl2b2lkICpyYXdfaW5vZGU7CiAKIAlpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpCi0JCWJoID0gVjFfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTsKJiM0MzsJCXJhd19pbm9kZSA9IG1pbml4X1YxX3Jhd19pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgaW5vZGUtJmd0O2lfaW5vLCAmYW1wO2JoKTsKIAllbHNlCi0JCWJoID0gVjJfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTsKLQlpZiAoIWJoKQomIzQzOwkJcmF3X2lub2RlID0gbWluaXhfVjJfcmF3X2lub2RlKGlub2RlLSZndDtpX3NiLCBpbm9kZS0mZ3Q7aV9pbm8sICZhbXA7YmgpOwomIzQzOwlpZiAoIXJhd19pbm9kZSkKIAkJcmV0dXJuIC1FSU87Ci0JaWYgKHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfQUxMICZhbXA7JmFtcDsgYnVmZmVyX2RpcnR5KGJoKSkgewotCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7Ci0JCWlmIChidWZmZXJfcmVxKGJoKSAmYW1wOyZhbXA7ICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7Ci0JCQlwcmludGsoJiMzNDtJTyBlcnJvciBzeW5jaW5nIG1pbml4IGlub2RlIFslczolMDhsbHhdXG4mIzM0OywKLQkJCQlpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19pZCwgaW5vZGUtJmd0O2lfaW5vKTsKLQkJCWVyciA9IC1FSU87Ci0JCX0KJiM0MzsJc3luY19kaXJ0eV9idWZmZXIoYmgpOwomIzQzOwlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkgewomIzQzOwkJcHJpbnRrKCYjMzQ7SU8gZXJyb3Igc3luY2luZyBtaW5peCBpbm9kZSBbJXM6JTA4bGx4XVxuJiMzNDssCiYjNDM7CQkJaW5vZGUtJmd0O2lfc2ItJmd0O3NfaWQsIGlub2RlLSZndDtpX2lubyk7CiYjNDM7CQllcnIgPSAtRUlPOwogCX0KLQlicmVsc2UgKGJoKTsKJiM0MzsJZXJyID0gbW1iX3N5bmMoJmFtcDttaW5peF9pKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzO291dDoKJiM0MzsJYnJlbHNlKGJoKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy91ZGYvZGlyLmMgYi9mcy91ZGYvZGlyLmMKaW5kZXggZWJjOWY2YTM3OWZlM2EuLjQyNWUzYzE2MjkzNTA0IDEwMDY0NAotLS0gYS9mcy91ZGYvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWRmL2Rpci5jCkBAIC0xNTcsNiAmIzQzOzE1Nyw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2Rpcl9vcGVyYXRpb25zID0gewogCS5yZWFkCQkJPSBnZW5lcmljX3JlYWRfZGlyLAogCS5pdGVyYXRlX3NoYXJlZAkJPSB1ZGZfcmVhZGRpciwKIAkudW5sb2NrZWRfaW9jdGwJCT0gdWRmX2lvY3RsLAotCS5mc3luYwkJCT0gdWRmX2ZzeW5jLAomIzQzOwkuZnN5bmMJCQk9IHNpbXBsZV9mc3luYywKIAkuc2V0bGVhc2UJCT0gZ2VuZXJpY19zZXRsZWFzZSwKIH07CmRpZmYgLS1naXQgYS9mcy91ZGYvZmlsZS5jIGIvZnMvdWRmL2ZpbGUuYwppbmRleCBmN2YxNDIyZGUzMGZhNC4uNTdkMTE2MDZhMmE3NzYgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWRmL2ZpbGUuYwpAQCAtMTk4LDEzICYjNDM7MTk4LDYgQEAgc3RhdGljIGludCB1ZGZfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlyZXR1cm4gMDsKIH0KIAotaW50IHVkZl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCi17Ci0JcmV0dXJuIG1tYl9mc3luYyhmaWxlLAotCQkJJmFtcDtVREZfSShmaWxlLSZndDtmX21hcHBpbmctJmd0O2hvc3QpLSZndDtpX21ldGFkYXRhX2JocywKLQkJCXN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKLX0KLQogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZmlsZV9vcGVyYXRpb25zID0gewogCS5yZWFkX2l0ZXIJCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKIAkudW5sb2NrZWRfaW9jdGwJCT0gdWRmX2lvY3RsLApAQCAtMjEyLDcgJiM0MzsyMDUsNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9maWxlX29wZXJhdGlvbnMgPSB7CiAJLm1tYXAJCQk9IHVkZl9maWxlX21tYXAsCiAJLndyaXRlX2l0ZXIJCT0gdWRmX2ZpbGVfd3JpdGVfaXRlciwKIAkucmVsZWFzZQkJPSB1ZGZfcmVsZWFzZV9maWxlLAotCS5mc3luYwkJCT0gdWRmX2ZzeW5jLAomIzQzOwkuZnN5bmMJCQk9IHNpbXBsZV9mc3luYywKIAkuc3BsaWNlX3JlYWQJCT0gZmlsZW1hcF9zcGxpY2VfcmVhZCwKIAkuc3BsaWNlX3dyaXRlCQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCiAJLmxsc2VlawkJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKQEAgLTI1Myw2ICYjNDM7MjQ2LDggQEAgc3RhdGljIGludCB1ZGZfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCiAJc2V0YXR0cl9jb3B5KCZhbXA7bm9wX21udF9pZG1hcCwgaW5vZGUsIGF0dHIpOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwlpZiAoSVNfU1lOQyhpbm9kZSkpCiYjNDM7CQlzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuYwppbmRleCA2N2JjZjgzNzU4YzhmYi4uZDk5MWE2NzFjMGE2OTEgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9pbm9kZS5jCkBAIC01MSw4ICYjNDM7NTEsNiBAQAogc3RydWN0IHVkZl9tYXBfcnE7CiAKIHN0YXRpYyB1bW9kZV90IHVkZl9jb252ZXJ0X3Blcm1pc3Npb25zKHN0cnVjdCBmaWxlRW50cnkgKik7Ci1zdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICosIGludCk7Ci1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogc3RhdGljIGludCB1ZGZfYWxsb2NfaV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCBzaXplKTsKIHN0YXRpYyBpbnQgaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB1ZGZfbWFwX3JxICptYXApOwogc3RhdGljIGludCB1ZGZfaW5zZXJ0X2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24sCkBAIC0xNDIsNyAmIzQzOzE0MCw5IEBAIHZvaWQgdWRmX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCWlmICghaW5vZGUtJmd0O2lfbmxpbmspIHsKIAkJCXdhbnRfZGVsZXRlID0gMTsKIAkJCXVkZl9zZXRzaXplKGlub2RlLCAwKTsKLQkJCXVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIElTX1NZTkMoaW5vZGUpKTsKJiM0MzsJCQl1ZGZfd3JpdGVfaW5vZGUoaW5vZGUsIE5VTEwpOwomIzQzOwkJCWlmIChJU19TWU5DKGlub2RlKSkKJiM0MzsJCQkJdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIE5VTEwpOwogCQl9CiAJCWlmIChpaW5mby0mZ3Q7aV9hbGxvY190eXBlICE9IElDQlRBR19GTEFHX0FEX0lOX0lDQiAmYW1wOyZhbXA7CiAJCSAgICBpbm9kZS0mZ3Q7aV9zaXplICE9IGlpbmZvLSZndDtpX2xlbkV4dGVudHMpIHsKQEAgLTkzNiw5ICYjNDM7OTM2LDEwIEBAIHN0YXRpYyBpbnQgaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB1ZGZfbWFwX3JxICptYXApCiAJaWluZm8tJmd0O2lfbmV4dF9hbGxvY19nb2FsID0gbmV3YmxvY2tudW0gJiM0MzsgMTsKIAlpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSk7CiAKLQlpZiAoSVNfU1lOQyhpbm9kZSkpCi0JCXVkZl9zeW5jX2lub2RlKGlub2RlKTsKLQllbHNlCiYjNDM7CWlmIChJU19TWU5DKGlub2RlKSkgewomIzQzOwkJdWRmX3dyaXRlX2lub2RlKGlub2RlLCBOVUxMKTsKJiM0MzsJCXVkZl9zeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCBOVUxMKTsKJiM0MzsJfSBlbHNlCiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCXJldCA9IDA7CiBvdXRfZnJlZToKQEAgLTEzMjYsMTAgJiM0MzsxMzI3LDcgQEAgaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKQogCX0KIHVwZGF0ZV90aW1lOgogCWlub2RlX3NldF9tdGltZV90b190cyhpbm9kZSwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpKTsKLQlpZiAoSVNfU1lOQyhpbm9kZSkpCi0JCXVkZl9zeW5jX2lub2RlKGlub2RlKTsKLQllbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNzA1LDE0ICYjNDM7MTcwMywyOCBAQCB2b2lkIHVkZl91cGRhdGVfZXh0cmFfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSwgdW1vZGVfdCBtb2RlKQogCQlpaW5mby0mZ3Q7aV9leHRyYVBlcm1zIHw9IEZFX1BFUk1fT19ERUxFVEU7CiB9CiAKLWludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7aW50IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewotCXJldHVybiB1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCB3YmMtJmd0O3N5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7Ci19CiYjNDM7CXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiYjNDM7CWludCBlcnIgPSAwOwogCi1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JcmV0dXJuIHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIDEpOwomIzQzOwliaCA9IHNiX2dldGJsayhpbm9kZS0mZ3Q7aV9zYiwKJiM0MzsJCQl1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0mZ3Q7aV9zYiwKJiM0MzsJCQkJCSAgJmFtcDtVREZfSShpbm9kZSktJmd0O2lfbG9jYXRpb24sIDApKTsKJiM0MzsJaWYgKCFiaCkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiYjNDM7CWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7CiYjNDM7CQl1ZGZfd2Fybihpbm9kZS0mZ3Q7aV9zYiwgJiMzNDtJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxuJiMzNDssCiYjNDM7CQkJIGlub2RlLSZndDtpX2lubyk7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZXJyID0gbW1iX3N5bmMoJmFtcDtVREZfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MztvdXQ6CiYjNDM7CWJyZWxzZShiaCk7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIHVkZl9hZGp1c3RfdGltZShzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvLCBzdHJ1Y3QgdGltZXNwZWM2NCB0aW1lKQpAQCAtMTcyMyw3ICYjNDM7MTczNSw3IEBAIHN0YXRpYyB2b2lkIHVkZl9hZGp1c3RfdGltZShzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvLCBzdHJ1Y3QgdGltZXNwZWM2NCB0aW1lCiAJCWlpbmZvLSZndDtpX2NydGltZSA9IHRpbWU7CiB9CiAKLXN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYykKJiM0MztpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCXN0cnVjdCBmaWxlRW50cnkgKmZlOwpAQCAtMTczMiw3ICYjNDM7MTc0NCw2IEBAIHN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYykKIAl1aW50MzJfdCB1ZGZwZXJtczsKIAl1aW50MTZfdCBpY2JmbGFnczsKIAl1aW50MTZfdCBjcmNsZW47Ci0JaW50IGVyciA9IDA7CiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtJmd0O2lfc2IpOwogCXVuc2lnbmVkIGNoYXIgYmxvY2tzaXplX2JpdHMgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemVfYml0czsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpOwpAQCAtMTkzNywxNyAmIzQzOzE5NDgsMTAgQEAgc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKQogCiAJLyogd3JpdGUgdGhlIGRhdGEgYmxvY2tzICovCiAJbWFya19idWZmZXJfZGlydHkoYmgpOwotCWlmIChkb19zeW5jKSB7Ci0JCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKLQkJaWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHsKLQkJCXVkZl93YXJuKGlub2RlLSZndDtpX3NiLCAmIzM0O0lPIGVycm9yIHN5bmNpbmcgdWRmIGlub2RlIFslMDhsbHhdXG4mIzM0OywKLQkJCQkgaW5vZGUtJmd0O2lfaW5vKTsKLQkJCWVyciA9IC1FSU87Ci0JCX0KLQl9CiAJYnJlbHNlKGJoKTsKJiM0MzsJc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7CiAKLQlyZXR1cm4gZXJyOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IGlub2RlICpfX3VkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqaW5vLApkaWZmIC0tZ2l0IGEvZnMvdWRmL3N1cGVyLmMgYi9mcy91ZGYvc3VwZXIuYwppbmRleCA3Yjg1ZjVhMmI3OWZjNC4uZTdlOWYyYTBkMjRlODAgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9zdXBlci5jCkBAIC0yMTEsNiAmIzQzOzIxMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB1ZGZfc2Jfb3BzID0gewogCS5hbGxvY19pbm9kZQk9IHVkZl9hbGxvY19pbm9kZSwKIAkuZnJlZV9pbm9kZQk9IHVkZl9mcmVlX2luX2NvcmVfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gdWRmX3dyaXRlX2lub2RlLAomIzQzOwkuc3luY19pbm9kZV9tZXRhZGF0YSA9IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhLAogCS5ldmljdF9pbm9kZQk9IHVkZl9ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCT0gdWRmX3B1dF9zdXBlciwKIAkuc3luY19mcwk9IHVkZl9zeW5jX2ZzLApkaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZmRlY2wuaCBiL2ZzL3VkZi91ZGZkZWNsLmgKaW5kZXggNmQ5NTFlMDVjMDA0NmEuLjg2ZGMyZDZhMmVmMWI4IDEwMDY0NAotLS0gYS9mcy91ZGYvdWRmZGVjbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi91ZGZkZWNsLmgKQEAgLTEzNyw3ICYjNDM7MTM3LDYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWRmX2Rpcl9lbnRyeV9sZW4oc3RydWN0IGZpbGVJZGVudERlc2MgKmNmaSkKIAogLyogZmlsZS5jICovCiBleHRlcm4gbG9uZyB1ZGZfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKLWludCB1ZGZfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTsKIAogLyogaW5vZGUuYyAqLwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICosCkBAIC0xNTgsNiAmIzQzOzE1Nyw3IEBAIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVkZl9icmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1ZGZfcGJsa190IGJsb2NrLAogZXh0ZXJuIGludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90KTsKIGV4dGVybiB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwomIzQzO2ludCB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogZXh0ZXJuIGludCBpbm9kZV9ibWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLAogCQkgICAgICBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICpwb3MsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZWxvYywKIAkJICAgICAgdWludDMyX3QgKmVsZW4sIHNlY3Rvcl90ICpvZmZzZXQsIGludDhfdCAqZXR5cGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCmluZGV4IDhiMjNiYzlhMjQ0Y2IzLi5mZDJjNzExNWMwNTQyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaApAQCAtMjEwLDEwICYjNDM7MjEwLDYgQEAgdm9pZCBiaF9lbmRfYXN5bmNfd3JpdGUoc3RydWN0IGJpbyAqYmlvKTsKIAogLyogVGhpbmdzIHRvIGRvIHdpdGggbWV0YWRhdGEgYnVmZmVycyBsaXN0ICovCiB2b2lkIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYik7Ci1pbnQgbW1iX2ZzeW5jX25vZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLAotCQkgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGJvb2wgZGF0YXN5bmMpOwotaW50IG1tYl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsCi0JICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKTsKIHZvaWQgY2xlYW5fYmRldl9hbGlhc2VzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLAogCQkJc2VjdG9yX3QgbGVuKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhbl9iZGV2X2JoX2FsaWFzKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggZDEwODk3YjNhMWUzNTAuLmIxN2UwZDQyMDcxZGY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC03NDAsNyAmIzQzOzc0MCw4IEBAIGVudW0gaW5vZGVfc3RhdGVfZmxhZ3NfZW51bSB7CiAJSV9DUkVBVElORwkJPSAoMVUgJmx0OyZsdDsgMTUpLAogCUlfRE9OVENBQ0hFCQk9ICgxVSAmbHQ7Jmx0OyAxNiksCiAJSV9TWU5DX1FVRVVFRAkJPSAoMVUgJmx0OyZsdDsgMTcpLAotCUlfUElOTklOR19ORVRGU19XQgk9ICgxVSAmbHQ7Jmx0OyAxOCkKJiM0MzsJSV9QSU5OSU5HX05FVEZTX1dCCT0gKDFVICZsdDsmbHQ7IDE4KSwKJiM0MzsJSV9NRVRBREFUQV9XUklURUJBQ0sJPSAoMVUgJmx0OyZsdDsgMTkpLAogfTsKIAogI2RlZmluZSBJX0RJUlRZX0lOT0RFIChJX0RJUlRZX1NZTkMgfCBJX0RJUlRZX0RBVEFTWU5DKQpAQCAtMjIxMyw2ICYjNDM7MjIxNCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0eV9zeW5jKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX1NZTkMpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwomIzQzOwlpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtpbm9kZS0mZ3Q7aV9sb2NrKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogcmV0dXJucyB0aGUgcmVmY291bnQgb24gdGhlIGlub2RlLiBpdCBjYW4gY2hhbmdlIGFyYml0cmFyaWx5LgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmgKaW5kZXggZWY3OTQxZTlkYzc5YWMuLjE3MDU2MWU4ZjJlMmM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oCkBAIC04Niw2ICYjNDM7ODYsOCBAQCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7CiAJdm9pZCAoKmZyZWVfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCXZvaWQgKCpkaXJ0eV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKTsKIAlpbnQgKCp3cml0ZV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwomIzQzOwlpbnQgKCpzeW5jX2lub2RlX21ldGFkYXRhKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiAJaW50ICgqZHJvcF9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSk7CiAJdm9pZCAoKmV2aWN0X2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAl2b2lkICgqcHV0X3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxNzMKCQkJCQkJCW91dHB1dDogMjgwCgkJCQkJCQl0aG91Z2h0czogMTI2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldDogYHN5bmNfaW5vZGVfbWV0YWRhdGFgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBwYXRjaCB0aGF0JiMzOTtzIGludHJvZHVjaW5nIGBzeW5jX2lub2RlX21ldGFkYXRhYCBpbnRvIGBzdXBlcl9vcGVyYXRpb25zYCBhbmQsIHNpZ25pZmljYW50bHksIG1vZGlmeWluZyBzZXZlcmFsIGZpbGVzeXN0ZW1zIHRvIHVzZSBpdC4gVGhpcyBpcyBhIHByZXR0eSBjb3JlIGNoYW5nZTsgaXQmIzM5O3MgdG91Y2hpbmcgVkZTIHdyaXRlYmFjayBsb2dpYywgYW5kIHRoYXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyByZXBsYWNpbmcgdGhlIG9sZCBgbW1iX2ZzeW5jYCBhbmQgYG1tYl9mc3luY19ub2ZsdXNoYCBpbiBgZnMvYnVmZmVyLmNgIHdpdGggYHNpbXBsZV9mc3luY2AgYW5kIG91ciBzaGlueSBuZXcgYHN5bmNfaW5vZGVfbWV0YWRhdGFgLiBUaGVyZSYjMzk7cyBhbHNvIHNvbWUgc3VwcG9ydGluZyBpbmZyYXN0cnVjdHVyZTogdGhlIGBJX01FVEFEQVRBX1dSSVRFQkFDS2AgZmxhZyBhbmQgYHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2tgIGZ1bmN0aW9uLgoKTGV0JiMzOTtzIHF1aWNrbHkgZW51bWVyYXRlIHRoZSBmaWxlc3lzdGVtcyBhZmZlY3RlZDogYWZmcywgYmZzLCBleHQyLCBleHQ0LCBmYXQsIG1pbml4LCBhbmQgdWRmLiBUaGVzZSBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cywgYW5kIHdlJiMzOTtsbCB3YW50IHRvIGVuc3VyZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlncyBhcmUgZW5hYmxlZDogYENPTkZJR19BRkZTX0ZTYCwgYENPTkZJR19CRlNfRlNgLCBgQ09ORklHX0VYVDJfRlNgLCBgQ09ORklHX0VYVDRfRlNgLCBgQ09ORklHX0ZBVF9GU2AsIGBDT05GSUdfTUlOSVhfRlNgLCBhbmQgYENPTkZJR19VREZfRlNgLgoKVGhlIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGZvY3VzIG9uIGFyZTogYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAsIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYCwgYW5kIHRoZW4gdGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBuZXcgY2FsbGJhY2s6IGBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGZhdF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYHVkZl9zeW5jX2lub2RlX21ldGFkYXRhYCwgYG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBhbmQgYHNpbXBsZV9mc3luY19ub2ZsdXNoYC4KCkkmIzM5O3ZlIGFscmVhZHkgdmVyaWZpZWQgdGhlIGNvbmZpZ3M7IHdlJiMzOTtyZSBnb29kIHRoZXJlLiBBbmQgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBGQVQsIGxldCYjMzk7cyBhbHNvIGtlZXAgYW4gZXllIG9uIGBDT05GSUdfTVNET1NfRlNgIGFuZCBgQ09ORklHX1ZGQVRfRlNgIGp1c3QgdG8gYmUgdGhvcm91Z2guCgpOb3csIGEgcXVpY2sgYGdyZXBgIGZvciBgc3luY19pbm9kZV9tZXRhZGF0YWAuLi4ganVzdCB0byBiZSBjZXJ0YWluIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gV2FpdCBhIHNlY29uZCwgdGhlIHBhdGNoICphZGRzKiBpdCB0byBgc3VwZXJfb3BlcmF0aW9uc2AtLXJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLgoKTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgZnMvZnMtd3JpdGViYWNrLmNgIGNoYW5nZXMuIEkgc2VlIHRoZSBrZXkgcGllY2U6IGEgY2hlY2sgZm9yIGBJX01FVEFEQVRBX1dSSVRFQkFDS2AgYW5kIGEgY2FsbCB0byBgc3luY19pbm9kZV9tZXRhZGF0YWAuIFRoaXMgaXMgKmRlZmluaXRlbHkqIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuCgpPa2F5LCBsZXQgbWUgbGlzdCB0aGUgZm9jdXMgc3ltYm9scyBhZ2FpbiBmb3IgY29tcGxldGVuZXNzOiBgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlYCwgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgLCBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGJmc19zeW5jX2lub2RlX21ldGFkYXRhYCwgYW5kIGBzaW1wbGVfZnN5bmNfbm9mbHVzaGAuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNoZWNrIHRoZSBzdGF0aWMtbmVzcyBvZiB0aGUgZmlsZXN5c3RlbSBjYWxsYmFja3M7IHdoaWNoIG9uZXMgYXJlIGludGVybmFsPyBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCBpcyBub3Qgc3RhdGljLiBgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhYCBpcyBub3Qgc3RhdGljLiBgZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGFgIGFyZSBzdGF0aWMuCgpBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIHdoZXJlIGBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGFgIHJlc2lkZXMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5lZCBpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpBZ2FpbiwgdGhlIGNvbmZpZ3MgYXJlOiBgRVhUNF9GU2AsIGBFWFQyX0ZTYCwgYEZBVF9GU2AsIGBNU0RPU19GU2AsIGBWRkFUX0ZTYCwgYE1JTklYX0ZTYCwgYFVERl9GU2AsIGBCRlNfRlNgLCBgQUZGU19GU2AuCgpXZSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgRkFUIGRlcGVuZGVuY2llcy4gSW4gYGZzL2ZhdC9LY29uZmlnYCwgYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgIGRlcGVuZCBvbiBgRkFUX0ZTYC4gU28gd2UgKnNob3VsZCogZW5hYmxlIHRob3NlIHR3byBhcyB3ZWxsIHdoZW4gZnV6emluZy4KCkkmIzM5O2xsIGNoZWNrIGBmcy9hZmZzL0tjb25maWdgLCBgZnMvYmZzL0tjb25maWdgLCBgZnMvbWluaXgvS2NvbmZpZ2AsIGFuZCBgZnMvdWRmL0tjb25maWdgIG5vdywganVzdCB0byBtYWtlIHN1cmUgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZW4mIzM5O3QgaGlkaW5nIGFueXRoaW5nLiBFdmVyeXRoaW5nIHNlZW1zIGZpbmUuCgpPa2F5LCB3aXRoIHRoYXQgc2FuaXR5IGNoZWNrIGNvbXBsZXRlLCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQyX0ZTJiMzNDssCiAgICAmIzM0O0ZBVF9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDssCiAgICAmIzM0O01JTklYX0ZTJiMzNDssCiAgICAmIzM0O1VERl9GUyYjMzQ7LAogICAgJiMzNDtCRlNfRlMmIzM0OywKICAgICYjMzQ7QUZGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fd3JpdGViYWNrX3NpbmdsZV9pbm9kZSYjMzQ7LAogICAgJiMzNDt3cml0ZWJhY2tfc2luZ2xlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7ZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7dWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7bWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtiZnNfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtzaW1wbGVfZnN5bmNfbm9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFZGUyBzdXBlcl9vcGVyYXRpb25zIGNhbGxiYWNrIGBzeW5jX2lub2RlX21ldGFkYXRhYCBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgZXh0MiwgZmF0LCBtaW5peCwgdWRmLCBiZnMsIGFmZnMpIHRvIGltcGxlbWVudCBhbmQgdXNlIGl0LiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb3JlIHdyaXRlYmFjayBsb2dpYyBpbiBgZnMvZnMtd3JpdGViYWNrLmNgIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgVkZTIGFuZCBtdWx0aXBsZSBmaWxlc3lzdGVtcywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUMl9GUyYjMzQ7LAogICAgJiMzNDtGQVRfRlMmIzM0OywKICAgICYjMzQ7TVNET1NfRlMmIzM0OywKICAgICYjMzQ7VkZBVF9GUyYjMzQ7LAogICAgJiMzNDtNSU5JWF9GUyYjMzQ7LAogICAgJiMzNDtVREZfRlMmIzM0OywKICAgICYjMzQ7QkZTX0ZTJiMzNDssCiAgICAmIzM0O0FGRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3dyaXRlYmFja19zaW5nbGVfaW5vZGUmIzM0OywKICAgICYjMzQ7d3JpdGViYWNrX3NpbmdsZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7ZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O2ZhdF9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3VkZl9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O21pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7YmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7c2ltcGxlX2ZzeW5jX25vZmx1c2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBWRlMgc3VwZXJfb3BlcmF0aW9ucyBjYWxsYmFjayBgc3luY19pbm9kZV9tZXRhZGF0YWAgYW5kIG1vZGlmaWVzIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIGV4dDIsIGZhdCwgbWluaXgsIHVkZiwgYmZzLCBhZmZzKSB0byBpbXBsZW1lbnQgYW5kIHVzZSBpdC4gSXQgYWxzbyBtb2RpZmllcyB0aGUgY29yZSB3cml0ZWJhY2sgbG9naWMgaW4gYGZzL2ZzLXdyaXRlYmFjay5jYCB0byB3YWl0IGZvciBpbm9kZSBtZXRhZGF0YSBJTy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIFZGUyBhbmQgbXVsdGlwbGUgZmlsZXN5c3RlbXMsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMTk6NTE6MDguOTE0NzAxMjk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MjQyMjc0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRVhUMl9GU1wiLFxuICAgIFwiRkFUX0ZTXCIsXG4gICAgXCJNU0RPU19GU1wiLFxuICAgIFwiVkZBVF9GU1wiLFxuICAgIFwiTUlOSVhfRlNcIixcbiAgICBcIlVERl9GU1wiLFxuICAgIFwiQkZTX0ZTXCIsXG4gICAgXCJBRkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX193cml0ZWJhY2tfc2luZ2xlX2lub2RlXCIsXG4gICAgXCJ3cml0ZWJhY2tfc2luZ2xlX2lub2RlXCIsXG4gICAgXCJleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImV4dDJfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcInVkZl9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJiZnNfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwic2ltcGxlX2ZzeW5jX25vZmx1c2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFZGUyBzdXBlcl9vcGVyYXRpb25zIGNhbGxiYWNrIGBzeW5jX2lub2RlX21ldGFkYXRhYCBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgZXh0MiwgZmF0LCBtaW5peCwgdWRmLCBiZnMsIGFmZnMpIHRvIGltcGxlbWVudCBhbmQgdXNlIGl0LiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb3JlIHdyaXRlYmFjayBsb2dpYyBpbiBgZnMvZnMtd3JpdGViYWNrLmNgIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgVkZTIGFuZCBtdWx0aXBsZSBmaWxlc3lzdGVtcywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE5OjUxOjA4LjkxNDcwNzI0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2ODE5MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTUxMDQ1OGUwMmIyMzJkYmU4NzNiNzZmMTc2ZjRjMTFiNjA2MGUyN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyIDE5OjUxOjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmhcXG5pbmRleCA0NGEzZjY5ZDI3NWY5Ni4uYTdmYWE5MWRlZWQ1YWMgMTAwNjQ0XFxuLS0tIGEvZnMvYWZmcy9hZmZzLmhcXG4rKysgYi9mcy9hZmZzL2FmZnMuaFxcbkBAIC00NCw3ICs0NCw2IEBAIHN0cnVjdCBhZmZzX2lub2RlX2luZm8ge1xcbiBcXHRzdHJ1Y3QgbXV0ZXggaV9saW5rX2xvY2s7XFx0XFx0LyogUHJvdGVjdHMgaW50ZXJuYWwgaW5vZGUgYWNjZXNzLiAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXggaV9leHRfbG9jaztcXHRcXHQvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovXFxuICNkZWZpbmUgaV9oYXNoX2xvY2sgaV9leHRfbG9ja1xcbi1cXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XFxuIFxcdHUzMlxcdCBpX2Jsa2NudDtcXHRcXHRcXHQvKiBibG9jayBjb3VudCAqL1xcbiBcXHR1MzJcXHQgaV9leHRjbnQ7XFx0XFx0XFx0LyogZXh0ZW5kZWQgYmxvY2sgY291bnQgKi9cXG4gXFx0dTMyXFx0KmlfbGM7XFx0XFx0XFx0XFx0LyogbGluZWFyIGNhY2hlIG9mIGV4dGVuZGVkIGJsb2NrcyAqL1xcbkBAIC0xNTIsNyArMTUxLDYgQEAgZXh0ZXJuIGJvb2xcXHRhZmZzX25vZmlsZW5hbWV0cnVuY2F0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbiBleHRlcm4gaW50XFx0YWZmc19jaGVja19uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIGludCBsZW4sXFxuIFxcdFxcdFxcdFxcdGJvb2wgbm90cnVuY2F0ZSk7XFxuIGV4dGVybiBpbnRcXHRhZmZzX2NvcHlfbmFtZSh1bnNpZ25lZCBjaGFyICpic3RyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbi1zdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmFmZnNfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFxuIC8qIGJpdG1hcC4gYyAqL1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9hbWlnYWZmcy5jIGIvZnMvYWZmcy9hbWlnYWZmcy5jXFxuaW5kZXggYmVkNGZjODA1ZThlNjYuLjZjYzBmYzlhNGNiZjkyIDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvYW1pZ2FmZnMuY1xcbisrKyBiL2ZzL2FmZnMvYW1pZ2FmZnMuY1xcbkBAIC01Nyw3ICs1Nyw3IEBAIGFmZnNfaW5zZXJ0X2hhc2goc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuIFxcdFxcdEFGRlNfVEFJTChzYiwgZGlyX2JoKS1cXHUwMDNlaGFzaF9jaGFpbiA9IGNwdV90b19iZTMyKGlubyk7XFxuIFxcbiBcXHRhZmZzX2FkanVzdF9jaGVja3N1bShkaXJfYmgsIGlubyk7XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShkaXJfYmgsIFxcdTAwMjZBRkZTX0koZGlyKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShkaXJfYmgpO1xcbiBcXHRhZmZzX2JyZWxzZShkaXJfYmgpO1xcbiBcXG4gXFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XFxuQEAgLTEwMCw3ICsxMDAsNyBAQCBhZmZzX3JlbW92ZV9oYXNoKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlbV9iaClcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRBRkZTX1RBSUwoc2IsIGJoKS1cXHUwMDNlaGFzaF9jaGFpbiA9IGlubztcXG4gXFx0XFx0XFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJlMzJfdG9fY3B1KGlubykgLSBoYXNoX2lubyk7XFxuLVxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShkaXIpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0XFx0XFx0QUZGU19UQUlMKHNiLCByZW1fYmgpLVxcdTAwM2VwYXJlbnQgPSAwO1xcbiBcXHRcXHRcXHRyZXR2YWwgPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtMTgwLDcgKzE4MCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXHRcXHRcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFx0XFx0XFx0Z290byBkb25lO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoKTtcXG4gXFxuIFxcdFxcdG1lbWNweShBRkZTX1RBSUwoc2IsIGJoKS1cXHUwMDNlbmFtZSwgQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cXHUwMDNlbmFtZSwgMzIpO1xcbiBcXHRcXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xcbkBAIC0xODgsNyArMTg4LDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdFxcdFxcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xcbiBcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcbiBcXHRcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFx0XFx0aXB1dChkaXIpO1xcbkBAIC0yMDMsNyArMjAzLDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdFxcdFxcdF9fYmUzMiBpbm8yID0gQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cXHUwMDNlbGlua19jaGFpbjtcXG4gXFx0XFx0XFx0QUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZWxpbmtfY2hhaW4gPSBpbm8yO1xcbiBcXHRcXHRcXHRhZmZzX2FkanVzdF9jaGVja3N1bShiaCwgYmUzMl90b19jcHUoaW5vMikgLSBsaW5rX2lubyk7XFxuLVxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRcXHRcXHRyZXR2YWwgPSAwO1xcbiBcXHRcXHRcXHQvKiBGaXggdGhlIGxpbmsgY291bnQsIGlmIGJoIGlzIGEgbm9ybWFsIGhlYWRlciBibG9jayB3aXRob3V0IGxpbmtzICovXFxuIFxcdFxcdFxcdHN3aXRjaCAoYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZXN0eXBlKSkge1xcbkBAIC0zMDYsNyArMzA2LDcgQEAgYWZmc19yZW1vdmVfaGVhZGVyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0cmV0dmFsID0gYWZmc19yZW1vdmVfaGFzaChkaXIsIGJoKTtcXG4gXFx0aWYgKHJldHZhbClcXG4gXFx0XFx0Z290byBkb25lX3VubG9jaztcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcbiBcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmNcXG5pbmRleCAxNDRiMTc0ODJkMTJkYS4uMjNlMDg4YTdlZDRmYjMgMTAwNjQ0XFxuLS0tIGEvZnMvYWZmcy9maWxlLmNcXG4rKysgYi9mcy9hZmZzL2ZpbGUuY1xcbkBAIC0xNDAsMTQgKzE0MCwxNCBAQCBhZmZzX2FsbG9jX2V4dGJsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHUzMiBleHQpXFxuIFxcdEFGRlNfVEFJTChzYiwgbmV3X2JoKS1cXHUwMDNlcGFyZW50ID0gY3B1X3RvX2JlMzIoaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4gXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIG5ld19iaCk7XFxuIFxcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkobmV3X2JoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShuZXdfYmgpO1xcbiBcXG4gXFx0dG1wID0gYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZWV4dGVuc2lvbik7XFxuIFxcdGlmICh0bXApXFxuIFxcdFxcdGFmZnNfd2FybmluZyhzYiwgXFxcImFsbG9jX2V4dFxcXCIsIFxcXCJwcmV2aW91cyBleHRlbnNpb24gc2V0ICgleClcXFwiLCB0bXApO1xcbiBcXHRBRkZTX1RBSUwoc2IsIGJoKS1cXHUwMDNlZXh0ZW5zaW9uID0gY3B1X3RvX2JlMzIoYmxvY2tucik7XFxuIFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBibG9ja25yIC0gdG1wKTtcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcbiBcXHRBRkZTX0koaW5vZGUpLVxcdTAwM2VpX2V4dGNudCsrO1xcbiBcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG5AQCAtNTgxLDcgKzU4MSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxcbiBcXHRcXHRtZW1zZXQoQUZGU19EQVRBKGJoKSArIGJvZmYsIDAsIHRtcCk7XFxuIFxcdFxcdGJlMzJfYWRkX2NwdShcXHUwMDI2QUZGU19EQVRBX0hFQUQoYmgpLVxcdTAwM2VzaXplLCB0bXApO1xcbiBcXHRcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xcbi1cXHRcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0XFx0c2l6ZSArPSB0bXA7XFxuIFxcdFxcdGJpZHgrKztcXG4gXFx0fSBlbHNlIGlmIChiaWR4KSB7XFxuQEAgLTYwMyw3ICs2MDMsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcXG4gXFx0XFx0QUZGU19EQVRBX0hFQUQoYmgpLVxcdTAwM2VzaXplID0gY3B1X3RvX2JlMzIodG1wKTtcXG4gXFx0XFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcXG4gXFx0XFx0YmgtXFx1MDAzZWJfc3RhdGUgXFx1MDAyNj0gfigxVUwgXFx1MDAzY1xcdTAwM2MgQkhfTmV3KTtcXG4tXFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcdFxcdGlmIChwcmV2X2JoKSB7XFxuIFxcdFxcdFxcdHUzMiB0bXBfbmV4dCA9IGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVxcdTAwM2VuZXh0KTtcXG4gXFxuQEAgLTYxMyw4ICs2MTMsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBiaWR4LCB0bXBfbmV4dCk7XFxuIFxcdFxcdFxcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVxcdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXFx1MDAzZWJfYmxvY2tucik7XFxuIFxcdFxcdFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVxcdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XFxuLVxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcXG4gXFx0XFx0XFx0YWZmc19icmVsc2UocHJldl9iaCk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0c2l6ZSArPSBic2l6ZTtcXG5AQCAtNzMzLDcgKzczMiw3IEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0QUZGU19EQVRBX0hFQUQoYmgpLVxcdTAwM2VzaXplID0gY3B1X3RvX2JlMzIoXFxuIFxcdFxcdFxcdG1heChib2ZmICsgdG1wLCBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktXFx1MDAzZXNpemUpKSk7XFxuIFxcdFxcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRcXHR3cml0dGVuICs9IHRtcDtcXG4gXFx0XFx0ZnJvbSArPSB0bXA7XFxuIFxcdFxcdGJpZHgrKztcXG5AQCAtNzY2LDEzICs3NjUsMTIgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJpZHgsIHRtcF9uZXh0KTtcXG4gXFx0XFx0XFx0XFx0QUZGU19EQVRBX0hFQUQocHJldl9iaCktXFx1MDAzZW5leHQgPSBjcHVfdG9fYmUzMihiaC1cXHUwMDNlYl9ibG9ja25yKTtcXG4gXFx0XFx0XFx0XFx0YWZmc19hZGp1c3RfY2hlY2tzdW0ocHJldl9iaCwgYmgtXFx1MDAzZWJfYmxvY2tuciAtIHRtcF9uZXh0KTtcXG4tXFx0XFx0XFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdFxcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0YWZmc19icmVsc2UocHJldl9iaCk7XFxuIFxcdFxcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRcXHR3cml0dGVuICs9IGJzaXplO1xcbiBcXHRcXHRmcm9tICs9IGJzaXplO1xcbiBcXHRcXHRiaWR4Kys7XFxuQEAgLTgwMSwxNCArNzk5LDEzIEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBiaWR4LCB0bXBfbmV4dCk7XFxuIFxcdFxcdFxcdFxcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVxcdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXFx1MDAzZWJfYmxvY2tucik7XFxuIFxcdFxcdFxcdFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVxcdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XFxuLVxcdFxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2UgaWYgKGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKGJoKS1cXHUwMDNlc2l6ZSkgXFx1MDAzYyB0bXApXFxuIFxcdFxcdFxcdEFGRlNfREFUQV9IRUFEKGJoKS1cXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7XFxuIFxcdFxcdGFmZnNfYnJlbHNlKHByZXZfYmgpO1xcbiBcXHRcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xcbi1cXHRcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0XFx0d3JpdHRlbiArPSB0bXA7XFxuIFxcdFxcdGZyb20gKz0gdG1wO1xcbiBcXHRcXHRiaWR4Kys7XFxuQEAgLTk0NSw3ICs5NDIsNyBAQCBhZmZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdH1cXG4gXFx0QUZGU19UQUlMKHNiLCBleHRfYmgpLVxcdTAwM2VleHRlbnNpb24gPSAwO1xcbiBcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgZXh0X2JoKTtcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoZXh0X2JoKTtcXG4gXFx0YWZmc19icmVsc2UoZXh0X2JoKTtcXG4gXFxuIFxcdGlmIChpbm9kZS1cXHUwMDNlaV9zaXplKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvaW5vZGUuYyBiL2ZzL2FmZnMvaW5vZGUuY1xcbmluZGV4IDVkZDFiMDE2YmNiMDBhLi5kNGEzZjM4MWM0YmNmZiAxMDA2NDRcXG4tLS0gYS9mcy9hZmZzL2lub2RlLmNcXG4rKysgYi9mcy9hZmZzL2lub2RlLmNcXG5AQCAtMjA2LDcgKzIwNiw3IEBAIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0YWZmc19icmVsc2UoYmgpO1xcbiBcXHRhZmZzX2ZyZWVfcHJlYWxsb2MoaW5vZGUpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjY2LDExICsyNjYsOCBAQCBhZmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGlmICghaW5vZGUtXFx1MDAzZWlfbmxpbmspIHtcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IDA7XFxuIFxcdFxcdGFmZnNfdHJ1bmNhdGUoaW5vZGUpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRtbWJfc3luYyhcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbiBcXHR9XFxuIFxcbi1cXHRtbWJfaW52YWxpZGF0ZShcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbiBcXHRjbGVhcl9pbm9kZShpbm9kZSk7XFxuIFxcdGFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7XFxuIFxcdGNhY2hlX3BhZ2UgPSAodW5zaWduZWQgbG9uZylBRkZTX0koaW5vZGUpLVxcdTAwM2VpX2xjO1xcbkBAIC0zMDUsNyArMzAyLDcgQEAgYWZmc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIpXFxuIFxcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XFxuIFxcdGlmICghYmgpXFxuIFxcdFxcdGdvdG8gZXJyX2JoO1xcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0YWZmc19icmVsc2UoYmgpO1xcbiBcXG4gXFx0aW5vZGUtXFx1MDAzZWlfdWlkICAgICA9IGN1cnJlbnRfZnN1aWQoKTtcXG5AQCAtMzkzLDE3ICszOTAsMTcgQEAgYWZmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgczNcXG4gXFx0XFx0QUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZWxpbmtfY2hhaW4gPSBjaGFpbjtcXG4gXFx0XFx0QUZGU19UQUlMKHNiLCBpbm9kZV9iaCktXFx1MDAzZWxpbmtfY2hhaW4gPSBjcHVfdG9fYmUzMihibG9jayk7XFxuIFxcdFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGlub2RlX2JoLCBibG9jayAtIGJlMzJfdG9fY3B1KGNoYWluKSk7XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0bWFya19idWZmZXJfZGlydHkoaW5vZGVfYmgpO1xcbiBcXHRcXHRzZXRfbmxpbmsoaW5vZGUsIDIpO1xcbiBcXHRcXHRpaG9sZChpbm9kZSk7XFxuIFxcdH1cXG4gXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcdGRlbnRyeS1cXHUwMDNlZF9mc2RhdGEgPSAodm9pZCAqKShsb25nKWJoLVxcdTAwM2ViX2Jsb2NrbnI7XFxuIFxcbiBcXHRhZmZzX2xvY2tfZGlyKGRpcik7XFxuIFxcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2goZGlyLCBiaCk7XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFx0YWZmc191bmxvY2tfbGluayhpbm9kZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9hZmZzL25hbWVpLmMgYi9mcy9hZmZzL25hbWVpLmNcXG5pbmRleCBjM2M2NTMyZGE0YjBkYS4uNTdkOGQ3NTVhYWRhMDUgMTAwNjQ0XFxuLS0tIGEvZnMvYWZmcy9uYW1laS5jXFxuKysrIGIvZnMvYWZmcy9uYW1laS5jXFxuQEAgLTM3Myw3ICszNzMsNyBAQCBhZmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHR9XFxuIFxcdCpwID0gMDtcXG4gXFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IGkgKyAxO1xcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0YWZmc19icmVsc2UoYmgpO1xcbiBcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4gXFxuQEAgLTQ0Myw4ICs0NDMsNyBAQCBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuIFxcdC8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi9cXG4gXFxuIGRvbmU6XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCxcXG4tXFx0XFx0XFx0XFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRhZmZzX2JyZWxzZShiaCk7XFxuIFxcdHJldHVybiByZXR2YWw7XFxuIH1cXG5AQCAtNDk3LDggKzQ5Niw4IEBAIGFmZnNfeHJlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuIFxcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gob2xkX2RpciwgYmhfbmV3KTtcXG4gXFx0YWZmc191bmxvY2tfZGlyKG9sZF9kaXIpO1xcbiBkb25lOlxcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmhfb2xkLCBcXHUwMDI2QUZGU19JKG5ld19kaXIpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFxcdTAwMjZBRkZTX0kob2xkX2RpciktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmhfb2xkKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmhfbmV3KTtcXG4gXFx0YWZmc19icmVsc2UoYmhfb2xkKTtcXG4gXFx0YWZmc19icmVsc2UoYmhfbmV3KTtcXG4gXFx0cmV0dXJuIHJldHZhbDtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9zdXBlci5jIGIvZnMvYWZmcy9zdXBlci5jXFxuaW5kZXggYjIzMjI1MWFhN2JiZDAuLjBhZDUxMjdlOWZiOGVlIDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvc3VwZXIuY1xcbisrKyBiL2ZzL2FmZnMvc3VwZXIuY1xcbkBAIC0xMDgsNyArMTA4LDYgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqYWZmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRpLVxcdTAwM2VpX2xjID0gTlVMTDtcXG4gXFx0aS1cXHUwMDNlaV9leHRfYmggPSBOVUxMO1xcbiBcXHRpLVxcdTAwM2VpX3BhX2NudCA9IDA7XFxuLVxcdG1tYl9pbml0KFxcdTAwMjZpLVxcdTAwM2VpX21ldGFkYXRhX2JocywgXFx1MDAyNmktXFx1MDAzZXZmc19pbm9kZS5pX2RhdGEpO1xcbiBcXG4gXFx0cmV0dXJuIFxcdTAwMjZpLVxcdTAwM2V2ZnNfaW5vZGU7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jXFxuaW5kZXggNWI0MGFiMDlhNzk2ZGUuLjliMzdlYzRiZDg5YThjIDEwMDY0NFxcbi0tLSBhL2ZzL2Jmcy9kaXIuY1xcbisrKyBiL2ZzL2Jmcy9kaXIuY1xcbkBAIC02OCwxNyArNjgsMTAgQEAgc3RhdGljIGludCBiZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGJmc19mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuLXtcXG4tXFx0cmV0dXJuIG1tYl9mc3luYyhmaWxlLFxcbi1cXHRcXHRcXHRcXHUwMDI2QkZTX0koZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0KS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMsXFxuLVxcdFxcdFxcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4tfVxcbi1cXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5yZWFkXFx0XFx0PSBnZW5lcmljX3JlYWRfZGlyLFxcbiBcXHQuaXRlcmF0ZV9zaGFyZWRcXHQ9IGJmc19yZWFkZGlyLFxcbi1cXHQuZnN5bmNcXHRcXHQ9IGJmc19mc3luYyxcXG4rXFx0LmZzeW5jXFx0XFx0PSBzaW1wbGVfZnN5bmMsXFxuIFxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9iZnMvaW5vZGUuYyBiL2ZzL2Jmcy9pbm9kZS5jXFxuaW5kZXggZTQxZWZkZDM1ZGI5ZWYuLmNhY2M3ZWZmOWMzM2NlIDEwMDY0NFxcbi0tLSBhL2ZzL2Jmcy9pbm9kZS5jXFxuKysrIGIvZnMvYmZzL2lub2RlLmNcXG5AQCAtMTM2LDcgKzEzNiw2IEBAIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiBcXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrO1xcbiBcXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcXG4gXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4tXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRkcHJpbnRmKFxcXCJpbm89JTA4eFxcXFxuXFxcIiwgaW5vKTtcXG4gXFxuQEAgLTE2NSwxMyArMTY0LDMxIEBAIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiBcXHRkaS1cXHUwMDNlaV9lb2Zmc2V0ID0gY3B1X3RvX2xlMzIoaV9zYmxvY2sgKiBCRlNfQlNJWkUgKyBpbm9kZS1cXHUwMDNlaV9zaXplIC0gMSk7XFxuIFxcbiBcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuLVxcdGlmICh3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkge1xcbi1cXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuLVxcdFxcdGlmIChidWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSlcXG4tXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4tXFx0fVxcbiBcXHRicmVsc2UoYmgpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4rXFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJmc19zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbit7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcXG4rXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4rXFxuK1xcdGRpID0gZmluZF9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgKHUxNilpbm9kZS1cXHUwMDNlaW5vLCBcXHUwMDI2YmgpO1xcbitcXHRpZiAoSVNfRVJSKGRpKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoZGkpO1xcbitcXG4rXFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRlcnIgPSBtbWJfc3luYyhcXHUwMDI2QkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK291dDpcXG4rXFx0YnJlbHNlKGJoKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMzAyLDYgKzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcXG4gXFx0LmFsbG9jX2lub2RlXFx0PSBiZnNfYWxsb2NfaW5vZGUsXFxuIFxcdC5mcmVlX2lub2RlXFx0PSBiZnNfZnJlZV9pbm9kZSxcXG4gXFx0LndyaXRlX2lub2RlXFx0PSBiZnNfd3JpdGVfaW5vZGUsXFxuK1xcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEsXFxuIFxcdC5ldmljdF9pbm9kZVxcdD0gYmZzX2V2aWN0X2lub2RlLFxcbiBcXHQucHV0X3N1cGVyXFx0PSBiZnNfcHV0X3N1cGVyLFxcbiBcXHQuc3RhdGZzXFx0XFx0PSBiZnNfc3RhdGZzLFxcbmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jXFxuaW5kZXggOWFmNWYwNjFhMWY4NWEuLmJlOGI1N2E2MzVjZDgyIDEwMDY0NFxcbi0tLSBhL2ZzL2J1ZmZlci5jXFxuKysrIGIvZnMvYnVmZmVyLmNcXG5AQCAtNjI4LDc5ICs2MjgsNiBAQCBpbnQgbW1iX3N5bmMoc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChtbWJfc3luYyk7XFxuIFxcbi0vKipcXG4tICogbW1iX2ZzeW5jX25vZmx1c2ggLSBmc3luYyBpbXBsZW1lbnRhdGlvbiBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdpdGhcXG4tICogXFx0XFx0ICAgICAgIG1ldGFkYXRhIGJ1ZmZlcnMgbGlzdFxcbi0gKlxcbi0gKiBAZmlsZTpcXHRmaWxlIHRvIHN5bmNocm9uaXplXFxuLSAqIEBtbWI6XFx0bGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2hcXG4tICogQHN0YXJ0OlxcdHN0YXJ0IG9mZnNldCBpbiBieXRlc1xcbi0gKiBAZW5kOlxcdGVuZCBvZmZzZXQgaW4gYnl0ZXMgKGluY2x1c2l2ZSlcXG4tICogQGRhdGFzeW5jOlxcdG9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWVcXG4tICpcXG4tICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZnN5bmMgbWV0aG9kIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2hpY2hcXG4tICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iXFxuLSAqIHN0cnVjdHVyZS5cXG4tICovXFxuLWludCBtbWJfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXFxuLVxcdFxcdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYylcXG4te1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXHRpbnQgZXJyO1xcbi1cXHRpbnQgcmV0ID0gMDtcXG4tXFxuLVxcdGVyciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcbi1cXHRpZiAobW1iKVxcbi1cXHRcXHRyZXQgPSBtbWJfc3luYyhtbWIpO1xcbi1cXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ESVJUWV9BTEwpKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0aWYgKGRhdGFzeW5jIFxcdTAwMjZcXHUwMDI2ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcXHUwMDI2IElfRElSVFlfREFUQVNZTkMpKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xcbi1cXHRpZiAocmV0ID09IDApXFxuLVxcdFxcdHJldCA9IGVycjtcXG4tXFxuLW91dDpcXG4tXFx0LyogY2hlY2sgYW5kIGFkdmFuY2UgYWdhaW4gdG8gY2F0Y2ggZXJyb3JzIGFmdGVyIHN5bmNpbmcgb3V0IGJ1ZmZlcnMgKi9cXG4tXFx0ZXJyID0gZmlsZV9jaGVja19hbmRfYWR2YW5jZV93Yl9lcnIoZmlsZSk7XFxuLVxcdGlmIChyZXQgPT0gMClcXG4tXFx0XFx0cmV0ID0gZXJyO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jX25vZmx1c2gpO1xcbi1cXG4tLyoqXFxuLSAqIG1tYl9mc3luYyAtIGZzeW5jIGltcGxlbWVudGF0aW9uIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2l0aCBtZXRhZGF0YVxcbi0gKiBcXHQgICAgICAgYnVmZmVycyBsaXN0XFxuLSAqXFxuLSAqIEBmaWxlOlxcdGZpbGUgdG8gc3luY2hyb25pemVcXG4tICogQG1tYjpcXHRsaXN0IG9mIG1ldGFkYXRhIGJocyB0byBmbHVzaFxcbi0gKiBAc3RhcnQ6XFx0c3RhcnQgb2Zmc2V0IGluIGJ5dGVzXFxuLSAqIEBlbmQ6XFx0ZW5kIG9mZnNldCBpbiBieXRlcyAoaW5jbHVzaXZlKVxcbi0gKiBAZGF0YXN5bmM6XFx0b25seSBzeW5jaHJvbml6ZSBlc3NlbnRpYWwgbWV0YWRhdGEgaWYgdHJ1ZVxcbi0gKlxcbi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmc3luYyBtZXRob2QgZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aGljaFxcbi0gKiB0cmFjayBhbGwgbm9uLWlub2RlIG1ldGFkYXRhIGluIHRoZSBidWZmZXJzIGxpc3QgaGFuZ2luZyBvZmYgdGhlIEBtbWJcXG4tICogc3RydWN0dXJlLiBUaGlzIGFsc28gbWFrZXMgc3VyZSB0aGF0IGEgZGV2aWNlIGNhY2hlIGZsdXNoIG9wZXJhdGlvbiBpc1xcbi0gKiBjYWxsZWQgYXQgdGhlIGVuZC5cXG4tICovXFxuLWludCBtbWJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLFxcbi1cXHQgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGJvb2wgZGF0YXN5bmMpXFxuLXtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJldCA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbGUsIG1tYiwgc3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbi1cXHRpZiAoIXJldClcXG4tXFx0XFx0cmV0ID0gYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXYpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jKTtcXG4tXFxuIC8qXFxuICAqIENhbGxlZCB3aGVuIHdlJ3ZlIHJlY2VudGx5IHdyaXR0ZW4gYmxvY2sgYGJibG9jaycsIGFuZCBpdCBpcyBrbm93biB0aGF0XFxuICAqIGBiYmxvY2snIHdhcyBmb3IgYSBidWZmZXJfYm91bmRhcnkoKSBidWZmZXIuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGJsb2NrIGF0XFxuQEAgLTExMjMsMTIgKzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7XFxuIFxcbiB2b2lkIG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuIHtcXG4rXFx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XFxuK1xcbiBcXHRzZXRfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcXG4gXFx0LyogRklYTUU6IGRvIHdlIG5lZWQgdG8gc2V0IHRoaXMgaW4gYm90aCBwbGFjZXM/ICovXFxuIFxcdGlmIChiaC1cXHUwMDNlYl9mb2xpbyBcXHUwMDI2XFx1MDAyNiBiaC1cXHUwMDNlYl9mb2xpby1cXHUwMDNlbWFwcGluZylcXG4gXFx0XFx0bWFwcGluZ19zZXRfZXJyb3IoYmgtXFx1MDAzZWJfZm9saW8tXFx1MDAzZW1hcHBpbmcsIC1FSU8pO1xcbi1cXHRpZiAoYmgtXFx1MDAzZWJfbW1iKVxcbi1cXHRcXHRtYXBwaW5nX3NldF9lcnJvcihiaC1cXHUwMDNlYl9tbWItXFx1MDAzZW1hcHBpbmcsIC1FSU8pO1xcbitcXHQvKiBQcm90ZWN0IHVzIGZyb20gbW1iIFxcdTAwMjYgaW5vZGUgZ2V0dGluZyBmcmVlZCB3aGlsZSB3ZSB3b3JrIG9uIGl0ICovXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bW1iID0gUkVBRF9PTkNFKGJoLVxcdTAwM2ViX21tYik7XFxuK1xcdGlmIChtbWIpXFxuK1xcdFxcdG1hcHBpbmdfc2V0X2Vycm9yKG1tYi1cXHUwMDNlbWFwcGluZywgLUVJTyk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wobWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmNcXG5pbmRleCAyNzhkNGJlOGVjYmU3Ny4uZTE3YmJjNzU5OGMxNDMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi9kaXIuY1xcbisrKyBiL2ZzL2V4dDIvZGlyLmNcXG5AQCAtNzM0LDYgKzczNCw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9ucyA9IHtcXG4gI2lmZGVmIENPTkZJR19DT01QQVRcXG4gXFx0LmNvbXBhdF9pb2N0bFxcdD0gZXh0Ml9jb21wYXRfaW9jdGwsXFxuICNlbmRpZlxcbi1cXHQuZnN5bmNcXHRcXHQ9IGV4dDJfZnN5bmMsXFxuK1xcdC5mc3luY1xcdFxcdD0gc2ltcGxlX2ZzeW5jLFxcbiBcXHQuc2V0bGVhc2VcXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZXh0Mi5oIGIvZnMvZXh0Mi9leHQyLmhcXG5pbmRleCA3OWY3YjM5NTI1OGMyYS4uNTY0MjQ1MWJmMTkxNzMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi9leHQyLmhcXG4rKysgYi9mcy9leHQyL2V4dDIuaFxcbkBAIC03MzUsNiArNzM1LDcgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZXh0Ml9jb3VudF9mcmVlIChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgdW5zaWduZWQpO1xcbiAvKiBpbm9kZS5jICovXFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpO1xcbiBleHRlcm4gaW50IGV4dDJfd3JpdGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7XFxuK2V4dGVybiBpbnQgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7XFxuIGV4dGVybiB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xcbiB2b2lkIGV4dDJfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pO1xcbiBleHRlcm4gaW50IGV4dDJfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7XFxuQEAgLTc3Miw4ICs3NzMsNiBAQCBleHRlcm4gdm9pZCBleHQyX3N5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzLFxcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2Rpcl9vcGVyYXRpb25zO1xcbiBcXG4gLyogZmlsZS5jICovXFxuLWV4dGVybiBpbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbi1cXHRcXHQgICAgICBpbnQgZGF0YXN5bmMpO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXh0Ml9maWxlX2lub2RlX29wZXJhdGlvbnM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9vcGVyYXRpb25zO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9maWxlLmMgYi9mcy9leHQyL2ZpbGUuY1xcbmluZGV4IDhkY2E5ZWM0Y2FjZDlhLi5iOTAyMGRmN2Q4OWUwMyAxMDA2NDRcXG4tLS0gYS9mcy9leHQyL2ZpbGUuY1xcbisrKyBiL2ZzL2V4dDIvZmlsZS5jXFxuQEAgLTQ3LDIxICs0Nyw2IEBAIHN0YXRpYyBpbnQgZXh0Ml9yZWxlYXNlX2ZpbGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuLXtcXG4tXFx0aW50IHJldDtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbi1cXG4tXFx0cmV0ID0gbW1iX2ZzeW5jKGZpbGUsIFxcdTAwMjZFWFQyX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocyxcXG4tXFx0XFx0XFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbi1cXHRpZiAocmV0ID09IC1FSU8pXFxuLVxcdFxcdC8qIFdlIGRvbid0IHJlYWxseSBrbm93IHdoZXJlIHRoZSBJTyBlcnJvciBoYXBwZW5lZC4uLiAqL1xcbi1cXHRcXHRleHQyX2Vycm9yKHNiLCBfX2Z1bmNfXyxcXG4tXFx0XFx0XFx0ICAgXFxcImRldGVjdGVkIElPIGVycm9yIHdoZW4gd3JpdGluZyBtZXRhZGF0YSBidWZmZXJzXFxcIik7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuIHN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuIHtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbkBAIC0yMTMsNyArMTk4LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0Lm1tYXBfcHJlcGFyZVxcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcXG4gXFx0Lm9wZW5cXHRcXHQ9IGV4dDJfZmlsZV9vcGVuLFxcbiBcXHQucmVsZWFzZVxcdD0gZXh0Ml9yZWxlYXNlX2ZpbGUsXFxuLVxcdC5mc3luY1xcdFxcdD0gZXh0Ml9mc3luYyxcXG4rXFx0LmZzeW5jXFx0XFx0PSBzaW1wbGVfZnN5bmMsXFxuIFxcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYSxcXG4gXFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbiBcXHQuc3BsaWNlX3dyaXRlXFx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxcbmRpZmYgLS1naXQgYS9mcy9leHQyL2lub2RlLmMgYi9mcy9leHQyL2lub2RlLmNcXG5pbmRleCAyOTgwODYyOWNjZTU2Zi4uNTE2NTY2NDFjNGU1OWMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi9pbm9kZS5jXFxuKysrIGIvZnMvZXh0Mi9pbm9kZS5jXFxuQEAgLTM5LDggKzM5LDYgQEBcXG4gI2luY2x1ZGUgXFxcImFjbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGF0dHIuaFxcXCJcXG4gXFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKTtcXG4tXFxuIC8qXFxuICAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay5cXG4gICovXFxuQEAgLTgzLDExICs4MSwxNiBAQCB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuIFxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kYXRhKTtcXG4gXFxuIFxcdGlmICh3YW50X2RlbGV0ZSkge1xcbitcXHRcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0ge1xcbitcXHRcXHRcXHQuc3luY19tb2RlID0gaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkgPyBXQl9TWU5DX0FMTCA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBXQl9TWU5DX05PTkUsXFxuK1xcdFxcdH07XFxuK1xcbiBcXHRcXHRzYl9zdGFydF9pbnR3cml0ZShpbm9kZS1cXHUwMDNlaV9zYik7XFxuIFxcdFxcdC8qIHNldCBkdGltZSAqL1xcbiBcXHRcXHRFWFQyX0koaW5vZGUpLVxcdTAwM2VpX2R0aW1lXFx0PSBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCk7XFxuIFxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbi1cXHRcXHRfX2V4dDJfd3JpdGVfaW5vZGUoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcXG4rXFx0XFx0ZXh0Ml93cml0ZV9pbm9kZShpbm9kZSwgXFx1MDAyNndiYyk7XFxuIFxcdFxcdC8qIHRydW5jYXRlIHRvIDAgKi9cXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IDA7XFxuIFxcdFxcdGlmIChpbm9kZS1cXHUwMDNlaV9ibG9ja3MpXFxuQEAgLTE0NjksNyArMTQ3Miw3IEBAIHN0cnVjdCBpbm9kZSAqZXh0Ml9pZ2V0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubylcXG4gXFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX2V4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXFxuK2ludCBleHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiB7XFxuIFxcdHN0cnVjdCBleHQyX2lub2RlX2luZm8gKmVpID0gRVhUMl9JKGlub2RlKTtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbkBAIC0xNTYwLDIyICsxNTYzLDMyIEBAIHN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxcbiBcXHR9IGVsc2UgZm9yIChuID0gMDsgbiBcXHUwMDNjIEVYVDJfTl9CTE9DS1M7IG4rKylcXG4gXFx0XFx0cmF3X2lub2RlLVxcdTAwM2VpX2Jsb2NrW25dID0gZWktXFx1MDAzZWlfZGF0YVtuXTtcXG4gXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbi1cXHRpZiAoZG9fc3luYykge1xcbi1cXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuLVxcdFxcdGlmIChidWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbi1cXHRcXHRcXHRwcmludGsgKFxcXCJJTyBlcnJvciBzeW5jaW5nIGV4dDIgaW5vZGUgWyVzOiUwOGx4XVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0c2ItXFx1MDAzZXNfaWQsICh1bnNpZ25lZCBsb25nKSBpbm8pO1xcbi1cXHRcXHRcXHRlcnIgPSAtRUlPO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4gXFx0ZWktXFx1MDAzZWlfc3RhdGUgXFx1MDAyNj0gfkVYVDJfU1RBVEVfTkVXO1xcbiBcXHRicmVsc2UgKGJoKTtcXG4rXFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLWludCBleHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbitpbnQgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiB7XFxuLVxcdHJldHVybiBfX2V4dDJfd3JpdGVfaW5vZGUoaW5vZGUsIHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcXG4rXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4rXFx0c3RydWN0IGV4dDJfaW5vZGUgKnJhd19pbm9kZSA9IGV4dDJfZ2V0X2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBpbm9kZS1cXHUwMDNlaV9pbm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZiaCk7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKElTX0VSUihyYXdfaW5vZGUpKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbitcXHRcXHRwcmludGsoXFxcIklPIGVycm9yIHN5bmNpbmcgZXh0MiBpbm9kZSBbJXM6JTA4bHhdXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfaWQsICh1bnNpZ25lZCBsb25nKWlub2RlLVxcdTAwM2VpX2lubyk7XFxuK1xcdFxcdGVyciA9IC1FSU87XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGVyciA9IG1tYl9zeW5jKFxcdTAwMjZFWFQyX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK291dDpcXG4rXFx0YnJlbHNlKGJoKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gaW50IGV4dDJfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvc3VwZXIuYyBiL2ZzL2V4dDIvc3VwZXIuY1xcbmluZGV4IDM5OTlmOGYzYjE1NmUzLi5hNDBmNTMwODcyYTQwNyAxMDA2NDRcXG4tLS0gYS9mcy9leHQyL3N1cGVyLmNcXG4rKysgYi9mcy9leHQyL3N1cGVyLmNcXG5AQCAtMzYyLDYgKzM2Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQyX3NvcHMgPSB7XFxuIFxcdC5hbGxvY19pbm9kZVxcdD0gZXh0Ml9hbGxvY19pbm9kZSxcXG4gXFx0LmZyZWVfaW5vZGVcXHQ9IGV4dDJfZnJlZV9pbl9jb3JlX2lub2RlLFxcbiBcXHQud3JpdGVfaW5vZGVcXHQ9IGV4dDJfd3JpdGVfaW5vZGUsXFxuK1xcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhLFxcbiBcXHQuZXZpY3RfaW5vZGVcXHQ9IGV4dDJfZXZpY3RfaW5vZGUsXFxuIFxcdC5wdXRfc3VwZXJcXHQ9IGV4dDJfcHV0X3N1cGVyLFxcbiBcXHQuc3luY19mc1xcdD0gZXh0Ml9zeW5jX2ZzLFxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLjhmMzg4ZTE1OGRhZWVmIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcXG5AQCAtMTE1MSw3ICsxMTUxLDcgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XFxuIFxcdHN0cnVjdCByd19zZW1hcGhvcmUgaV9kYXRhX3NlbTtcXG4gXFx0c3RydWN0IGlub2RlIHZmc19pbm9kZTtcXG4gXFx0c3RydWN0IGpiZDJfaW5vZGUgKmppbm9kZTtcXG4tXFx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzO1xcbitcXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmlfbWV0YWRhdGFfYmhzO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRmlsZSBjcmVhdGlvbiB0aW1lLiBJdHMgZnVuY3Rpb24gaXMgc2FtZSBhcyB0aGF0IG9mXFxuQEAgLTMxNTUsNiArMzE1NSw3IEBAIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbiBcXHRfX2V4dDRfaWdldCgoc2IpLCAoaW5vKSwgKGZsYWdzKSwgX19mdW5jX18sIF9fTElORV9fKVxcbiBcXG4gZXh0ZXJuIGludCAgZXh0NF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xcbitleHRlcm4gaW50ICBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTtcXG4gZXh0ZXJuIGludCAgZXh0NF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGRlbnRyeSAqLFxcbiBcXHRcXHRcXHQgc3RydWN0IGlhdHRyICopO1xcbiBleHRlcm4gdTMyICBleHQ0X2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9qYmQyLmMgYi9mcy9leHQ0L2V4dDRfamJkMi5jXFxuaW5kZXggOWE4YzIyNWYyNzUzMDkuLjc1MjMyNmYzYjY1MzZhIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmNcXG4rKysgYi9mcy9leHQ0L2V4dDRfamJkMi5jXFxuQEAgLTM1MCw2ICszNTAsMjEgQEAgaW50IF9fZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGV4dDRfaW5vZGVfYXR0YWNoX21tYihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSXQncyBkaWZmaWN1bHQgdG8gaGFuZGxlIGZhaWx1cmUgd2hlbiBtYXJraW5nIGJ1ZmZlciBkaXJ0eSB3aXRob3V0XFxuK1xcdCAqIGxlYXZpbmcgZmlsZXN5c3RlbSBjb3JydXB0ZWRcXG4rXFx0ICovXFxuK1xcdG1tYiA9IGttYWxsb2Nfb2JqKCptbWIsIEdGUF9OT0ZTIHwgX19HRlBfTk9GQUlMKTtcXG4rXFx0bW1iX2luaXQobW1iLCBcXHUwMDI2aW5vZGUtXFx1MDAzZWlfZGF0YSk7XFxuK1xcdC8qIFNvbWVvbmUgc3dhcHBlZCBhbm90aGVyIG1tYiBiZWZvcmUgdXM/ICovXFxuK1xcdGlmIChjbXB4Y2hnKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocywgTlVMTCwgbW1iKSlcXG4rXFx0XFx0a2ZyZWUobW1iKTtcXG4rfVxcbitcXG4gaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxcbiBcXHRcXHRcXHRcXHQgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuQEAgLTM4OSwxMSArNDA0LDE0IEBAIGludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcXG4gXFx0XFx0XFx0XFx0XFx0IGVycik7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKGlub2RlKVxcbitcXHRcXHRpZiAoaW5vZGUpIHtcXG4rXFx0XFx0XFx0aWYgKCFFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocylcXG4rXFx0XFx0XFx0XFx0ZXh0NF9pbm9kZV9hdHRhY2hfbW1iKGlub2RlKTtcXG4gXFx0XFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbitcXHRcXHR9XFxuIFxcdFxcdGlmIChpbm9kZSBcXHUwMDI2XFx1MDAyNiBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSkge1xcbiBcXHRcXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuIFxcdFxcdFxcdGlmIChidWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZzeW5jLmMgYi9mcy9leHQ0L2ZzeW5jLmNcXG5pbmRleCA5MjQ3MjZkY2M4NWZmNS4uMjk5OWMyY2M4ZmNmYTAgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9mc3luYy5jXFxuKysrIGIvZnMvZXh0NC9mc3luYy5jXFxuQEAgLTY4LDkgKzY4LDYgQEAgc3RhdGljIGludCBleHQ0X3N5bmNfcGFyZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdFxcdCAqIHRocm91Z2ggZXh0NF9ldmljdF9pbm9kZSgpKSBhbmQgc28gd2UgYXJlIHNhZmUgdG8gZmx1c2hcXG4gXFx0XFx0ICogbWV0YWRhdGEgYmxvY2tzIGFuZCB0aGUgaW5vZGUuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRyZXQgPSBtbWJfc3luYyhcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0cmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC04MywyMiArODAsMTEgQEAgc3RhdGljIGludCBleHQ0X2ZzeW5jX25vam91cm5hbChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbiBcXHRcXHRcXHRcXHRpbnQgZGF0YXN5bmMsIGJvb2wgKm5lZWRzX2JhcnJpZXIpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfaW5vZGU7XFxuLVxcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7XFxuLVxcdFxcdC5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCxcXG4tXFx0XFx0Lm5yX3RvX3dyaXRlID0gMCxcXG4tXFx0fTtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHJldCA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbGUsIFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocyxcXG4tXFx0XFx0XFx0XFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbitcXHRyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdC8qIEZvcmNlIHdyaXRlb3V0IG9mIGlub2RlIHRhYmxlIGJ1ZmZlciB0byBkaXNrICovXFxuLVxcdHJldCA9IGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsIFxcdTAwMjZ3YmMpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4gXFx0cmV0ID0gZXh0NF9zeW5jX3BhcmVudChpbm9kZSk7XFxuIFxcbiBcXHRpZiAodGVzdF9vcHQoaW5vZGUtXFx1MDAzZWlfc2IsIEJBUlJJRVIpKVxcbkBAIC0xNTYsNiArMTQyLDEwIEBAIGludCBleHQ0X3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuIFxcdGlmIChzYl9yZG9ubHkoaW5vZGUtXFx1MDAzZWlfc2IpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0aWYgKCFFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19qb3VybmFsKSB7XFxuIFxcdFxcdHJldCA9IGV4dDRfZnN5bmNfbm9qb3VybmFsKGZpbGUsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmVlZHNfYmFycmllcik7XFxuQEAgLTE2NCwxMCArMTU0LDYgQEAgaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4gXFx0LypcXG4gXFx0ICogIFRoZSBjYWxsZXIncyBmaWxlbWFwX2ZkYXRhd3JpdGUoKS93YWl0IHdpbGwgc3luYyB0aGUgZGF0YS5cXG4gXFx0ICogIE1ldGFkYXRhIGlzIGluIHRoZSBqb3VybmFsLCB3ZSB3YWl0IGZvciBwcm9wZXIgdHJhbnNhY3Rpb24gdG9cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggY2U5OTgwN2M1ZjViMmMuLmI2MWVlNzVlY2JkZjFhIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC0xOTUsOSArMTk1LDggQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShpbm9kZSwgXFxcImRhdGEgd2lsbCBiZSBsb3N0XFxcIik7XFxuIFxcbiBcXHRcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbChcXHUwMDI2aW5vZGUtXFx1MDAzZWlfZGF0YSk7XFxuLVxcdFxcdC8qIEF2b2lkIG1iYWxsb2Mgc3BlY2lhbCBpbm9kZSB3aGljaCBoYXMgbm8gcHJvcGVyIGlvcHMgKi9cXG4tXFx0XFx0aWYgKCFFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19qb3VybmFsKVxcbi1cXHRcXHRcXHRtbWJfc3luYyhcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRpZiAoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpXFxuK1xcdFxcdFxcdG1tYl9zeW5jKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4gXFx0XFx0Z290byBub19kZWxldGU7XFxuIFxcdH1cXG4gXFxuQEAgLTM0NTIsNiArMzQ1MSw3IEBAIHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KVxcbiBzdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfam91cm5hbDtcXG4rXFx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XFxuIFxcbiBcXHRpZiAoam91cm5hbCkge1xcbiBcXHRcXHRpZiAoamJkMl90cmFuc2FjdGlvbl9jb21taXR0ZWQoam91cm5hbCxcXG5AQCAtMzQ2Miw4ICszNDYyLDkgQEAgc3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4rXFx0bW1iID0gUkVBRF9PTkNFKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4gXFx0LyogQW55IG1ldGFkYXRhIGJ1ZmZlcnMgdG8gd3JpdGU/ICovXFxuLVxcdGlmIChtbWJfaGFzX2J1ZmZlcnMoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKSlcXG4rXFx0aWYgKG1tYiBcXHUwMDI2XFx1MDAyNiBtbWJfaGFzX2J1ZmZlcnMobW1iKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdHJldHVybiBpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQztcXG4gfVxcbkBAIC01ODM4LDI0ICs1ODM5LDM2IEBAIGludCBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiBcXHRcXHRlcnIgPSBleHQ0X2ZjX2NvbW1pdChFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19qb3VybmFsLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX3N5bmNfdGlkKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xcbitcXHRcXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuIFxcbi1cXHRcXHRlcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIHN5bmMoMikgd2lsbCBmbHVzaCB0aGUgd2hvbGUgYnVmZmVyIGNhY2hlLiBObyBuZWVkIHRvIGRvXFxuLVxcdFxcdCAqIGl0IGhlcmUgc2VwYXJhdGVseSBmb3IgZWFjaCBpbm9kZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmICh3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcXHUwMDI2XFx1MDAyNiAhd2JjLVxcdTAwM2Vmb3Jfc3luYylcXG4tXFx0XFx0XFx0c3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7XFxuLVxcdFxcdGlmIChidWZmZXJfcmVxKGlsb2MuYmgpIFxcdTAwMjZcXHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoaWxvYy5iaCkpIHtcXG4tXFx0XFx0XFx0ZXh0NF9lcnJvcl9pbm9kZV9ibG9jayhpbm9kZSwgaWxvYy5iaC1cXHUwMDNlYl9ibG9ja25yLCBFSU8sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiSU8gZXJyb3Igc3luY2luZyBpbm9kZVxcXCIpO1xcbi1cXHRcXHRcXHRlcnIgPSAtRUlPO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGJyZWxzZShpbG9jLmJoKTtcXG4raW50IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4re1xcbitcXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XFxuK1xcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0LyogV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaW4gbm9qb3VybmFsIG1vZGUgKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRShFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19qb3VybmFsKSlcXG4rXFx0XFx0cmV0dXJuIC1FRlNDT1JSVVBURUQ7XFxuK1xcbitcXHRlcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdHN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGlsb2MuYmgpKSB7XFxuK1xcdFxcdGV4dDRfZXJyb3JfaW5vZGVfYmxvY2soaW5vZGUsIGlsb2MuYmgtXFx1MDAzZWJfYmxvY2tuciwgRUlPLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIklPIGVycm9yIHN5bmNpbmcgaW5vZGVcXFwiKTtcXG4rXFx0XFx0ZXJyID0gLUVJTztcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4rXFx0bW1iID0gUkVBRF9PTkNFKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0aWYgKG1tYilcXG4rXFx0XFx0ZXJyID0gbW1iX3N5bmMobW1iKTtcXG4rb3V0OlxcbitcXHRicmVsc2UoaWxvYy5iaCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xcbmluZGV4IDI0NWY2N2QxMGRlZDM0Li45MGQ2ZDZiODg2NzMwMiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcXG5AQCAtMTQzMCw3ICsxNDMwLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRJTklUX1dPUksoXFx1MDAyNmVpLVxcdTAwM2VpX3Jzdl9jb252ZXJzaW9uX3dvcmssIGV4dDRfZW5kX2lvX3Jzdl93b3JrKTtcXG4gXFx0ZXh0NF9mY19pbml0X2lub2RlKFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlKTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmVpLVxcdTAwM2VpX2ZjX2xvY2spO1xcbi1cXHRtbWJfaW5pdChcXHUwMDI2ZWktXFx1MDAzZWlfbWV0YWRhdGFfYmhzLCBcXHUwMDI2ZWktXFx1MDAzZXZmc19pbm9kZS5pX2RhdGEpO1xcbitcXHRlaS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMgPSBOVUxMO1xcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4gXFx0bG9ja2RlcF9zZXRfc3ViY2xhc3MoXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtLCBJX0RBVEFfU0VNX05PUk1BTCk7XFxuICNlbmRpZlxcbkBAIC0xNDUxLDYgKzE0NTEsNyBAQCBzdGF0aWMgaW50IGV4dDRfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBzdGF0aWMgdm9pZCBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdGZzY3J5cHRfZnJlZV9pbm9kZShpbm9kZSk7XFxuK1xcdGtmcmVlKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4gXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjYoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9mY19saXN0KSkpIHtcXG4gXFx0XFx0cHJfd2FybihcXFwiJXM6IGlub2RlICVsbHUgc3RpbGwgaW4gZmMgbGlzdFxcXCIsXFxuIFxcdFxcdFxcdF9fZnVuY19fLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbkBAIC0xNTMwLDggKzE1MzEsOCBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZClcXG4gdm9pZCBleHQ0X2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0ZXh0NF9mY19kZWwoaW5vZGUpO1xcbi1cXHRpZiAoIUVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2pvdXJuYWwpXFxuLVxcdFxcdG1tYl9pbnZhbGlkYXRlKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdGlmIChFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocylcXG4rXFx0XFx0bW1iX2ludmFsaWRhdGUoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbiBcXHRjbGVhcl9pbm9kZShpbm9kZSk7XFxuIFxcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XFxuIFxcdC8qXFxuQEAgLTE2MDUsOSArMTYwNiwxMyBAQCBzdGF0aWMgaW50IGV4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0ge1xcbiBcXHRcXHQuc3luY19tb2RlID0gV0JfU1lOQ19BTExcXG4gXFx0fTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdHRyYWNlX2V4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShpbm9kZSk7XFxuLVxcdHJldHVybiBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCBcXHUwMDI2d2JjKTtcXG4rXFx0cmV0ID0gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgXFx1MDAyNndiYyk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRyZXQgPSBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIFxcdTAwMjZ3YmMpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX1FVT1RBXFxuQEAgLTE2NjQsNiArMTY2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7XFxuIFxcdC5mcmVlX2lub2RlXFx0PSBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZSxcXG4gXFx0LmRlc3Ryb3lfaW5vZGVcXHQ9IGV4dDRfZGVzdHJveV9pbm9kZSxcXG4gXFx0LndyaXRlX2lub2RlXFx0PSBleHQ0X3dyaXRlX2lub2RlLFxcbitcXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YSxcXG4gXFx0LmRpcnR5X2lub2RlXFx0PSBleHQ0X2RpcnR5X2lub2RlLFxcbiBcXHQuZHJvcF9pbm9kZVxcdD0gZXh0NF9kcm9wX2lub2RlLFxcbiBcXHQuZXZpY3RfaW5vZGVcXHQ9IGV4dDRfZXZpY3RfaW5vZGUsXFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9kaXIuYyBiL2ZzL2ZhdC9kaXIuY1xcbmluZGV4IDRmNmY0MmYzMzYxM2RmLi5kMzNiZjM0YmRjZTc1ZiAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvZGlyLmNcXG4rKysgYi9mcy9mYXQvZGlyLmNcXG5AQCAtMTAyOCw4ICsxMDI4LDYgQEAgc3RhdGljIGludCBfX2ZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgbG9mZl90IHBvcywgaW50IG5yX3Nsb3RzKVxcbiBcXHRcXHRcXHRucl9zbG90cy0tO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNk1TRE9TX0koZGlyKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRcXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxcbi1cXHRcXHRcXHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuIFxcdFxcdGJyZWxzZShiaCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xMDYzLDggKzEwNjEsNiBAQCBpbnQgZmF0X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZmF0X3Nsb3RfaW5mbyAqc2luZm8pXFxuIFxcdFxcdG5yX3Nsb3RzLS07XFxuIFxcdH1cXG4gXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2TVNET1NfSShkaXIpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuLVxcdGlmIChJU19ESVJTWU5DKGRpcikpXFxuLVxcdFxcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcXG4gXFx0YnJlbHNlKGJoKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMTA4NCwxMCArMTA4MCw5IEBAIGludCBmYXRfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBmYXRfc2xvdF9pbmZvICpzaW5mbylcXG4gXFx0fVxcbiBcXG4gXFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0FUSU1FIHwgRkFUX1VQREFURV9DTVRJTUUpO1xcbitcXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XFxuIFxcdGlmIChJU19ESVJTWU5DKGRpcikpXFxuLVxcdFxcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XFxuLVxcdGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xcbitcXHRcXHRzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0xMTE5LDIxICsxMTE0LDExIEBAIHN0YXRpYyBpbnQgZmF0X3plcm9lZF9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqZGlyLCBzZWN0b3JfdCBibGtuciwgaW50IG5yX3VzZWQsXFxuIFxcdFxcdG4rKztcXG4gXFx0XFx0YmxrbnIrKztcXG4gXFx0XFx0aWYgKG4gPT0gbnJfYmhzKSB7XFxuLVxcdFxcdFxcdGlmIChJU19ESVJTWU5DKGRpcikpIHtcXG4tXFx0XFx0XFx0XFx0ZXJyID0gZmF0X3N5bmNfYmhzKGJocywgbik7XFxuLVxcdFxcdFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuLVxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG47IGkrKylcXG4gXFx0XFx0XFx0XFx0YnJlbHNlKGJoc1tpXSk7XFxuIFxcdFxcdFxcdG4gPSAwO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0aWYgKElTX0RJUlNZTkMoZGlyKSkge1xcbi1cXHRcXHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBlcnJvcjtcXG4tXFx0fVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbjsgaSsrKVxcbiBcXHRcXHRicmVsc2UoYmhzW2ldKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaFxcbmluZGV4IDk5ZWQ5MjI4YTY3N2JlLi5kY2I1YmE3NTcwNzNlZCAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvZmF0LmhcXG4rKysgYi9mcy9mYXQvZmF0LmhcXG5AQCAtNDIxLDcgKzQyMSw2IEBAIGV4dGVybiB2b2lkIGZhdF9kZXRhY2goc3RydWN0IGlub2RlICppbm9kZSk7XFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBpX3Bvcyk7XFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9idWlsZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSwgbG9mZl90IGlfcG9zKTtcXG4tZXh0ZXJuIGludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gZXh0ZXJuIGludCBmYXRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIFxcdFxcdFxcdCAgdm9pZCAoKnNldHVwKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKikpO1xcbiBleHRlcm4gaW50IGZhdF9maWxsX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2ZpbGUuYyBiL2ZzL2ZhdC9maWxlLmNcXG5pbmRleCAzN2U3MDQ5YjRjOGM0NC4uMWM4MzVjYTVmMjFhNTEgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L2ZpbGUuY1xcbisrKyBiL2ZzL2ZhdC9maWxlLmNcXG5AQCAtMTkwLDggKzE5MCw3IEBAIGludCBmYXRfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuIFxcdHN0cnVjdCBpbm9kZSAqZmF0X2lub2RlID0gTVNET1NfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VmYXRfaW5vZGU7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRlcnIgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxwLCBcXHUwMDI2TVNET1NfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzLFxcbi1cXHRcXHRcXHRcXHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XFxuK1xcdGVyciA9IHNpbXBsZV9mc3luY19ub2ZsdXNoKGZpbHAsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTMzMiwxNSArMzMxLDE1IEBAIHN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXFxuIFxcdH1cXG4gXFx0TVNET1NfSShpbm9kZSktXFx1MDAzZWlfYXR0cnMgfD0gQVRUUl9BUkNIO1xcbiBcXHRmYXRfdHJ1bmNhdGVfdGltZShpbm9kZSwgTlVMTCwgRkFUX1VQREFURV9DTVRJTUUpO1xcbitcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4gXFx0aWYgKHdhaXQpIHtcXG4tXFx0XFx0ZXJyID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xcbitcXHRcXHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG4gXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRNU0RPU19JKGlub2RlKS1cXHUwMDNlaV9zdGFydCA9IGlfc3RhcnQ7XFxuIFxcdFxcdFxcdE1TRE9TX0koaW5vZGUpLVxcdTAwM2VpX2xvZ3N0YXJ0ID0gaV9sb2dzdGFydDtcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbi1cXHR9IGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIFdyaXRlIGEgbmV3IEVPRiwgYW5kIGdldCB0aGUgcmVtYWluaW5nIGNsdXN0ZXIgY2hhaW4gZm9yIGZyZWVpbmcuICovXFxuIFxcdGlmIChza2lwKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9pbm9kZS5jIGIvZnMvZmF0L2lub2RlLmNcXG5pbmRleCAzYWE1MjQ4MWFkNWNmMy4uYzRiNGNjYWEwOTFhYTcgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L2lub2RlLmNcXG4rKysgYi9mcy9mYXQvaW5vZGUuY1xcbkBAIC02MjMsNyArNjIzLDM3IEBAIHN0cnVjdCBpbm9kZSAqZmF0X2J1aWxkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcbiBFWFBPUlRfU1lNQk9MX0dQTChmYXRfYnVpbGRfaW5vZGUpO1xcbiBcXG4tc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCk7XFxuK3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcbitzdGF0aWMgaW50IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbit7XFxuK1xcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuK1xcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuK1xcdGxvZmZfdCBpX3BvcztcXG4rXFx0c2VjdG9yX3QgYmxvY2tucjtcXG4rXFx0aW50IG9mZnNldDtcXG4rXFxuK1xcdGlmIChpbm9kZS1cXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpX3BvcyA9IGZhdF9pX3Bvc19yZWFkKHNiaSwgaW5vZGUpO1xcbitcXHRpZiAoIWlfcG9zKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZhdF9nZXRfYmxrbnJfb2Zmc2V0KHNiaSwgaV9wb3MsIFxcdTAwMjZibG9ja25yLCBcXHUwMDI2b2Zmc2V0KTtcXG4rXFx0YmggPSBzYl9maW5kX2dldF9ibG9ja19ub25hdG9taWMoaW5vZGUtXFx1MDAzZWlfc2IsIGJsb2NrbnIpO1xcbitcXHQvKlxcbitcXHQgKiBCdWZmZXIgYWxyZWFkeSB3cml0dGVuPyBXZSBsZWF2ZSBidWZmZXJfZGlydHkgY2hlY2sgZm9yXFxuK1xcdCAqIHN5bmNfZGlydHlfYnVmZmVyKCkgZm9yIHByb3BlciBzeW5jaHJvbml6YXRpb24gd2l0aCBvbmdvaW5nIElPLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFiaCB8fCAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbitcXHRcXHRicmVsc2UoYmgpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuK1xcdGJyZWxzZShiaCk7XFxuK1xcdHJldHVybiBtbWJfc3luYyhcXHUwMDI2TVNET1NfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rfVxcbiBcXG4gc3RhdGljIHZvaWQgZmF0X2ZyZWVfZW9mYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG5AQCAtNjQwLDcgKzY3MCwxMyBAQCBzdGF0aWMgdm9pZCBmYXRfZnJlZV9lb2ZibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0ICogYW55IGNvcnJ1cHRpb24gb24gdGhlIG5leHQgYWNjZXNzIHRvIHRoZSBjbHVzdGVyXFxuIFxcdFxcdCAqIGNoYWluIGZvciB0aGUgZmlsZS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XFxuK1xcdFxcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlKTtcXG4rXFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcXG4rXFx0XFx0XFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcXG4rXFx0XFx0XFx0XFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMLFxcbitcXHRcXHRcXHR9O1xcbitcXHRcXHRcXHRlcnIgPSBmYXRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgXFx1MDAyNndiYyk7XFxuK1xcdFxcdH1cXG4gXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRmYXRfbXNnKGlub2RlLVxcdTAwM2VpX3NiLCBLRVJOX1dBUk5JTkcsIFxcXCJGYWlsZWQgdG8gXFxcIlxcbiBcXHRcXHRcXHRcXHRcXHRcXFwidXBkYXRlIG9uIGRpc2sgaW5vZGUgZm9yIHVudXNlZCBcXFwiXFxuQEAgLTg1NCw3ICs4OTAsNyBAQCBzdGF0aWMgaW50IGZhdF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcXG4rc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4gXFx0c3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSA9IE1TRE9TX1NCKHNiKTtcXG5AQCAtODYzLDcgKzg5OSw3IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXFxuIFxcdHN0cnVjdCB0aW1lc3BlYzY0IG10aW1lO1xcbiBcXHRsb2ZmX3QgaV9wb3M7XFxuIFxcdHNlY3Rvcl90IGJsb2NrbnI7XFxuLVxcdGludCBlcnIsIG9mZnNldDtcXG4rXFx0aW50IG9mZnNldDtcXG4gXFxuIFxcdGlmIChpbm9kZS1cXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC05MDcsMTEgKzk0Myw5IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXFxuIFxcdH1cXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiaS1cXHUwMDNlaW5vZGVfaGFzaF9sb2NrKTtcXG4gXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbi1cXHRlcnIgPSAwO1xcbi1cXHRpZiAod2FpdClcXG4tXFx0XFx0ZXJyID0gc3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbiBcXHRicmVsc2UoYmgpO1xcbi1cXHRyZXR1cm4gZXJyO1xcbitcXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbkBAIC05MjUsMjMgKzk1OSwxNyBAQCBzdGF0aWMgaW50IGZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4gXFx0XFx0ZXJyID0gZmF0X2NsdXN0ZXJzX2ZsdXNoKHNiKTtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZNU0RPU19TQihzYiktXFx1MDAzZXNfbG9jayk7XFxuIFxcdH0gZWxzZVxcbi1cXHRcXHRlcnIgPSBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgd2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpO1xcbitcXHRcXHRlcnIgPSBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSk7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1pbnQgZmF0X3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4te1xcbi1cXHRyZXR1cm4gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUsIDEpO1xcbi19XFxuLVxcbi1FWFBPUlRfU1lNQk9MX0dQTChmYXRfc3luY19pbm9kZSk7XFxuLVxcbiBzdGF0aWMgaW50IGZhdF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTtcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGZhdF9zb3BzID0ge1xcbiBcXHQuYWxsb2NfaW5vZGVcXHQ9IGZhdF9hbGxvY19pbm9kZSxcXG4gXFx0LmZyZWVfaW5vZGVcXHQ9IGZhdF9mcmVlX2lub2RlLFxcbiBcXHQud3JpdGVfaW5vZGVcXHQ9IGZhdF93cml0ZV9pbm9kZSxcXG4rXFx0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBmYXRfc3luY19pbm9kZV9tZXRhZGF0YSxcXG4gXFx0LmV2aWN0X2lub2RlXFx0PSBmYXRfZXZpY3RfaW5vZGUsXFxuIFxcdC5wdXRfc3VwZXJcXHQ9IGZhdF9wdXRfc3VwZXIsXFxuIFxcdC5zdGF0ZnNcXHRcXHQ9IGZhdF9zdGF0ZnMsXFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jXFxuaW5kZXggMzAyN2VmNTNhZjIxNGMuLmJlMThmNmI1ODE5YmE3IDEwMDY0NFxcbi0tLSBhL2ZzL2ZhdC9taXNjLmNcXG4rKysgYi9mcy9mYXQvbWlzYy5jXFxuQEAgLTE0NiwxNiArMTQ2LDE3IEBAIGludCBmYXRfY2hhaW5fYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZGNsdXMsIGludCBucl9jbHVzdGVyKVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRNU0RPU19JKGlub2RlKS1cXHUwMDNlaV9zdGFydCA9IG5ld19kY2x1cztcXG4gXFx0XFx0TVNET1NfSShpbm9kZSktXFx1MDAzZWlfbG9nc3RhcnQgPSBuZXdfZGNsdXM7XFxuK1xcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBTaW5jZSBnZW5lcmljX3dyaXRlX3N5bmMoKSBzeW5jaHJvbml6ZXMgcmVndWxhciBmaWxlcyBsYXRlcixcXG4gXFx0XFx0ICogd2Ugc3luYyBoZXJlIG9ubHkgZGlyZWN0b3JpZXMuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiBJU19ESVJTWU5DKGlub2RlKSkge1xcbi1cXHRcXHRcXHRyZXQgPSBmYXRfc3luY19pbm9kZShpbm9kZSk7XFxuK1xcdFxcdFxcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xcbiBcXHRcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRcXHR9IGVsc2VcXG4tXFx0XFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdH1cXG4gXFx0aWYgKG5ld19mY2x1cyAhPSAoaW5vZGUtXFx1MDAzZWlfYmxvY2tzIFxcdTAwM2VcXHUwMDNlIChzYmktXFx1MDAzZWNsdXN0ZXJfYml0cyAtIDkpKSkge1xcbiBcXHRcXHRmYXRfZnNfZXJyb3JfcmF0ZWxpbWl0KFxcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfbXNkb3MuYyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXFxuaW5kZXggMGZkMjk3MWFkNGIxMzEuLjQ3MmJkODQ3ZWY5Y2JiIDEwMDY0NFxcbi0tLSBhL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXFxuKysrIGIvZnMvZmF0L25hbWVpX21zZG9zLmNcXG5AQCAtMjUyLDEwICsyNTIsOSBAQCBzdGF0aWMgaW50IG1zZG9zX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdGZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTtcXG4rXFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xcbiBcXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxcbi1cXHRcXHQodm9pZClmYXRfc3luY19pbm9kZShkaXIpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG4rXFx0XFx0c3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNDczLDIxICs0NzIsMjEgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSxcXG4gXFx0XFx0XFx0XFx0TVNET1NfSShvbGRfaW5vZGUpLVxcdTAwM2VpX2F0dHJzIHw9IEFUVFJfSElEREVOO1xcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdE1TRE9TX0kob2xkX2lub2RlKS1cXHUwMDNlaV9hdHRycyBcXHUwMDI2PSB+QVRUUl9ISURERU47XFxuK1xcdFxcdFxcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcXG4gXFx0XFx0XFx0aWYgKElTX0RJUlNZTkMob2xkX2RpcikpIHtcXG4tXFx0XFx0XFx0XFx0ZXJyID0gZmF0X3N5bmNfaW5vZGUob2xkX2lub2RlKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShvbGRfaW5vZGUsIDEpO1xcbiBcXHRcXHRcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdFxcdFxcdE1TRE9TX0kob2xkX2lub2RlKS1cXHUwMDNlaV9hdHRycyA9IG9sZF9hdHRycztcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0fSBlbHNlXFxuLVxcdFxcdFxcdFxcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcXG4rXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0aW5vZGVfaW5jX2l2ZXJzaW9uKG9sZF9kaXIpO1xcbiBcXHRcXHRcXHRmYXRfdHJ1bmNhdGVfdGltZShvbGRfZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0NNVElNRSk7XFxuK1xcdFxcdFxcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XFxuIFxcdFxcdFxcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKVxcbi1cXHRcXHRcXHRcXHQodm9pZClmYXRfc3luY19pbm9kZShvbGRfZGlyKTtcXG4rXFx0XFx0XFx0XFx0c3luY19pbm9kZV9tZXRhZGF0YShvbGRfZGlyLCAxKTtcXG4gXFx0XFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRcXHRtYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTUxOCwyNiArNTE3LDIxIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXFxuIFxcdFxcdE1TRE9TX0kob2xkX2lub2RlKS1cXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRNU0RPU19JKG9sZF9pbm9kZSktXFx1MDAzZWlfYXR0cnMgXFx1MDAyNj0gfkFUVFJfSElEREVOO1xcbi1cXHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xcbi1cXHRcXHRlcnIgPSBmYXRfc3luY19pbm9kZShvbGRfaW5vZGUpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRnb3RvIGVycm9yX2lub2RlO1xcbi1cXHR9IGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xcbi1cXG4gXFx0aWYgKHVwZGF0ZV9kb3Rkb3QpIHtcXG4gXFx0XFx0ZmF0X3NldF9zdGFydChkb3Rkb3RfZGUsIE1TRE9TX0kobmV3X2RpciktXFx1MDAzZWlfbG9nc3RhcnQpO1xcbiBcXHRcXHRtbWJfbWFya19idWZmZXJfZGlydHkoZG90ZG90X2JoLFxcbiBcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2TVNET1NfSShvbGRfaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuLVxcdFxcdGlmIChJU19ESVJTWU5DKG5ld19kaXIpKSB7XFxuLVxcdFxcdFxcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XFxuLVxcdFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdFxcdGdvdG8gZXJyb3JfZG90ZG90O1xcbi1cXHRcXHR9XFxuIFxcdFxcdGRyb3Bfbmxpbmsob2xkX2Rpcik7XFxuIFxcdFxcdGlmICghbmV3X2lub2RlKVxcbiBcXHRcXHRcXHRpbmNfbmxpbmsobmV3X2Rpcik7XFxuIFxcdH1cXG4rXFx0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xcbitcXHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xcbitcXHRcXHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9pbm9kZSwgMSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZXJyb3JfZG90ZG90O1xcbitcXHR9XFxuK1xcbiBcXG4gXFx0ZXJyID0gZmF0X3JlbW92ZV9lbnRyaWVzKG9sZF9kaXIsIFxcdTAwMjZvbGRfc2luZm8pO1xcdC8qIGFuZCByZWxlYXNlcyBiaCAqL1xcbiBcXHRvbGRfc2luZm8uYmggPSBOVUxMO1xcbkBAIC01NDUsMTAgKzUzOSw5IEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXFxuIFxcdFxcdGdvdG8gZXJyb3JfZG90ZG90O1xcbiBcXHRpbm9kZV9pbmNfaXZlcnNpb24ob2xkX2Rpcik7XFxuIFxcdGZhdF90cnVuY2F0ZV90aW1lKG9sZF9kaXIsIFxcdTAwMjZ0cywgRkFUX1VQREFURV9DTVRJTUUpO1xcbitcXHRtYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpO1xcbiBcXHRpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSlcXG4tXFx0XFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUob2xkX2Rpcik7XFxuLVxcdGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcXG4rXFx0XFx0c3luY19pbm9kZV9tZXRhZGF0YShvbGRfZGlyLCAxKTtcXG4gXFxuIFxcdGlmIChuZXdfaW5vZGUpIHtcXG4gXFx0XFx0ZHJvcF9ubGluayhuZXdfaW5vZGUpO1xcbkBAIC01NzEsMTQgKzU2NCwxMyBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxcbiBcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2TVNET1NfSShvbGRfaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuIFxcdFxcdGNvcnJ1cHQgfD0gc3luY19kaXJ0eV9idWZmZXIoZG90ZG90X2JoKTtcXG4gXFx0fVxcbi1lcnJvcl9pbm9kZTpcXG4gXFx0ZmF0X2RldGFjaChvbGRfaW5vZGUpO1xcbiBcXHRmYXRfYXR0YWNoKG9sZF9pbm9kZSwgb2xkX3NpbmZvLmlfcG9zKTtcXG4gXFx0TVNET1NfSShvbGRfaW5vZGUpLVxcdTAwM2VpX2F0dHJzID0gb2xkX2F0dHJzO1xcbiBcXHRpZiAobmV3X2lub2RlKSB7XFxuIFxcdFxcdGZhdF9hdHRhY2gobmV3X2lub2RlLCBuZXdfaV9wb3MpO1xcbiBcXHRcXHRpZiAoY29ycnVwdClcXG4tXFx0XFx0XFx0Y29ycnVwdCB8PSBmYXRfc3luY19pbm9kZShuZXdfaW5vZGUpO1xcbitcXHRcXHRcXHRjb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogSWYgbmV3IGVudHJ5IHdhcyBub3Qgc2hhcmluZyB0aGUgZGF0YSBjbHVzdGVyLCBpdFxcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xcbmluZGV4IGU5MDk0NDc4NzNlMzY0Li43MzJhYmYwNzJmZGQzYiAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvbmFtZWlfdmZhdC5jXFxuKysrIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xcbkBAIC02NzgsMTAgKzY3OCw5IEBAIHN0YXRpYyBpbnQgdmZhdF9hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxbmFtZSxcXG4gXFxuIFxcdC8qIHVwZGF0ZSB0aW1lc3RhbXAgKi9cXG4gXFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpO1xcbitcXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XFxuIFxcdGlmIChJU19ESVJTWU5DKGRpcikpXFxuLVxcdFxcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XFxuLVxcdGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xcbitcXHRcXHRzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7XFxuIGNsZWFudXA6XFxuIFxcdGtmcmVlKHNsb3RzKTtcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtOTA0LDkgKzkwMyw5IEBAIHN0YXRpYyBpbnQgdmZhdF9nZXRfZG90ZG90X2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLFxcbiBcXG4gc3RhdGljIGludCB2ZmF0X3N5bmNfaXBvcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSlcXG4ge1xcbi1cXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxcbi1cXHRcXHRyZXR1cm4gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xcbiBcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcXG4rXFx0XFx0cmV0dXJuIHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtOTI1LDEwICs5MjQsOSBAQCBzdGF0aWMgdm9pZCB2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4ge1xcbiBcXHRpbm9kZV9pbmNfaXZlcnNpb24oZGlyKTtcXG4gXFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpO1xcbitcXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XFxuIFxcdGlmIChJU19ESVJTWU5DKGRpcikpXFxuLVxcdFxcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XFxuLVxcdGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xcbitcXHRcXHRzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbkBAIC0xMDI1LDcgKzEwMjMsNyBAQCBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4gXFx0aWYgKG5ld19pbm9kZSkge1xcbiBcXHRcXHRmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTtcXG4gXFx0XFx0aWYgKGNvcnJ1cHQpXFxuLVxcdFxcdFxcdGNvcnJ1cHQgfD0gZmF0X3N5bmNfaW5vZGUobmV3X2lub2RlKTtcXG4rXFx0XFx0XFx0Y29ycnVwdCB8PSBzeW5jX2lub2RlX21ldGFkYXRhKG5ld19pbm9kZSwgMSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIG5ldyBlbnRyeSB3YXMgbm90IHNoYXJpbmcgdGhlIGRhdGEgY2x1c3RlciwgaXRcXG5kaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suY1xcbmluZGV4IGZkYjg3NjZkMjc1YTE3Li45ZDk2MzU3NzMxYTNkNCAxMDA2NDRcXG4tLS0gYS9mcy9mcy13cml0ZWJhY2suY1xcbisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jXFxuQEAgLTE4NTEsNiArMTg1MSwyMiBAQCBfX3dyaXRlYmFja19zaW5nbGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIFxcdFxcdGlmIChyZXQgPT0gMClcXG4gXFx0XFx0XFx0cmV0ID0gZXJyO1xcbiBcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBEbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPIHBvc3NpYmx5IHN1Ym1pdHRlZFxcbitcXHQgKiBieSBwcmV2aW91cyBXQl9TWU5DX05PTkUgd3JpdGViYWNrP1xcbitcXHQgKi9cXG4rXFx0aWYgKHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMIFxcdTAwMjZcXHUwMDI2ICF3YmMtXFx1MDAzZWZvcl9zeW5jIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9NRVRBREFUQV9XUklURUJBQ0spIHtcXG4rXFx0XFx0aW50IGVycjtcXG4rXFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuK1xcdFxcdGlub2RlX3N0YXRlX2NsZWFyKGlub2RlLCBJX01FVEFEQVRBX1dSSVRFQkFDSyk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4rXFx0XFx0ZXJyID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfb3AtXFx1MDAzZXN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIHdiYyk7XFxuK1xcdFxcdGlmIChyZXQgPT0gMClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHR9XFxuIFxcdHdiYy1cXHUwMDNldW5waW5uZWRfbmV0ZnNfd2IgPSBmYWxzZTtcXG4gXFx0dHJhY2Vfd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjLCBucl90b193cml0ZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTE4OTIsMTQgKzE5MDgsMTcgQEAgc3RhdGljIGludCB3cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRoZSBpbm9kZSBpcyBhbHJlYWR5IGZ1bGx5IGNsZWFuLCB0aGVuIHRoZXJlJ3Mgbm90aGluZyB0byBkby5cXG4gXFx0ICpcXG4tXFx0ICogRm9yIGRhdGEtaW50ZWdyaXR5IHN5bmNzIHdlIGFsc28gbmVlZCB0byBjaGVjayB3aGV0aGVyIGFueSBwYWdlcyBhcmVcXG4tXFx0ICogc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkUgd3JpdGViYWNrLiAgSWZcXG4tXFx0ICogdGhlcmUgYXJlIGFueSBzdWNoIHBhZ2VzLCB3ZSdsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uXFxuK1xcdCAqIEZvciBkYXRhLWludGVncml0eSBzeW5jcyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZm9saW9zIG9yXFxuK1xcdCAqIG1ldGFkYXRhIGFyZSBzdGlsbCB1bmRlciB3cml0ZWJhY2ssIGUuZy4gZHVlIHRvIHByaW9yIFdCX1NZTkNfTk9ORVxcbitcXHQgKiB3cml0ZWJhY2suIElmIHRoZXJlLCB3ZSdsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uXFxuIFxcdCAqL1xcbi1cXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfRElSVFlfQUxMKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKHdiYy1cXHUwMDNlc3luY19tb2RlICE9IFdCX1NZTkNfQUxMIHx8XFxuLVxcdCAgICAgIW1hcHBpbmdfdGFnZ2VkKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSkpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfRElSVFlfQUxMKSkge1xcbitcXHRcXHRpZiAod2JjLVxcdTAwM2VzeW5jX21vZGUgIT0gV0JfU1lOQ19BTEwpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRpZiAoIW1hcHBpbmdfdGFnZ2VkKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfTUVUQURBVEFfV1JJVEVCQUNLKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4gXFx0aW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX1NZTkMpO1xcbiBcXHR3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUod2JjLCBpbm9kZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuY1xcbmluZGV4IDVhMGQyNzYzNzlkMTNiLi41N2U1OTcxYjYzMzE5NyAxMDA2NDRcXG4tLS0gYS9mcy9saWJmcy5jXFxuKysrIGIvZnMvbGliZnMuY1xcbkBAIC0xNTU5LDkgKzE1NTksMTAgQEAgaW50IHNpbXBsZV9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ESVJUWV9BTEwpKVxcbitcXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgKElfRElSVFlfQUxMIHwgSV9TWU5DKSkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRpZiAoZGF0YXN5bmMgXFx1MDAyNlxcdTAwMjYgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQykpXFxuK1xcdGlmIChkYXRhc3luYyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgKElfRElSVFlfREFUQVNZTkMgfCBJX1NZTkMpKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZGlyLmMgYi9mcy9taW5peC9kaXIuY1xcbmluZGV4IDM2MWQyNmQ4N2QyZTJkLi4yY2ExNmY4NDlkNWFjMCAxMDA2NDRcXG4tLS0gYS9mcy9taW5peC9kaXIuY1xcbisrKyBiL2ZzL21pbml4L2Rpci5jXFxuQEAgLTIzLDcgKzIzLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfb3BlcmF0aW9ucyA9IHtcXG4gXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4gXFx0LnJlYWRcXHRcXHQ9IGdlbmVyaWNfcmVhZF9kaXIsXFxuIFxcdC5pdGVyYXRlX3NoYXJlZFxcdD0gbWluaXhfcmVhZGRpcixcXG4tXFx0LmZzeW5jXFx0XFx0PSBtaW5peF9mc3luYyxcXG4rXFx0LmZzeW5jXFx0XFx0PSBzaW1wbGVfZnN5bmMsXFxuIH07XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9mcy9taW5peC9maWxlLmMgYi9mcy9taW5peC9maWxlLmNcXG5pbmRleCA4NmU1OTQzY2QyZmY3NC4uMDJhYWJiZGI1ZGVhYTAgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXFxuKysrIGIvZnMvbWluaXgvZmlsZS5jXFxuQEAgLTEwLDEzICsxMCw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwibWluaXguaFxcXCJcXG4gXFxuLWludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuLXtcXG4tXFx0cmV0dXJuIG1tYl9mc3luYyhmaWxlLFxcbi1cXHRcXHRcXHRcXHUwMDI2bWluaXhfaShmaWxlLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWhvc3QpLVxcdTAwM2VpX21ldGFkYXRhX2JocyxcXG4tXFx0XFx0XFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yXFxuICAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLlxcbkBAIC0yNiw3ICsxOSw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zID0ge1xcbiBcXHQucmVhZF9pdGVyXFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxcbiBcXHQud3JpdGVfaXRlclxcdD0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsXFxuIFxcdC5tbWFwX3ByZXBhcmVcXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXFxuLVxcdC5mc3luY1xcdFxcdD0gbWluaXhfZnN5bmMsXFxuK1xcdC5mc3luY1xcdFxcdD0gc2ltcGxlX2ZzeW5jLFxcbiBcXHQuc3BsaWNlX3JlYWRcXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xcbmluZGV4IGMzMGNjNTkwNjk4ZDZmLi45NTI2N2Q5M2VmMzlkZiAxMDA2NDRcXG4tLS0gYS9mcy9taW5peC9pbm9kZS5jXFxuKysrIGIvZnMvbWluaXgvaW5vZGUuY1xcbkBAIC0yNCw2ICsyNCw4IEBAXFxuIFxcbiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcXG4rc3RhdGljIGludCBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xcbiBzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpO1xcbiBcXG4gdm9pZCBfX21pbml4X2Vycm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLFxcbkBAIC0xMjgsNiArMTMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1pbml4X3NvcHMgPSB7XFxuIFxcdC5hbGxvY19pbm9kZVxcdD0gbWluaXhfYWxsb2NfaW5vZGUsXFxuIFxcdC5mcmVlX2lub2RlXFx0PSBtaW5peF9mcmVlX2luX2NvcmVfaW5vZGUsXFxuIFxcdC53cml0ZV9pbm9kZVxcdD0gbWluaXhfd3JpdGVfaW5vZGUsXFxuK1xcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSxcXG4gXFx0LmV2aWN0X2lub2RlXFx0PSBtaW5peF9ldmljdF9pbm9kZSxcXG4gXFx0LnB1dF9zdXBlclxcdD0gbWluaXhfcHV0X3N1cGVyLFxcbiBcXHQuc3RhdGZzXFx0XFx0PSBtaW5peF9zdGF0ZnMsXFxuQEAgLTYzMCw3ICs2MzMsNyBAQCBzdHJ1Y3QgaW5vZGUgKm1pbml4X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXFxuIC8qXFxuICAqIFRoZSBtaW5peCBWMSBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSBhbiBpbm9kZS5cXG4gICovXFxuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuK3N0YXRpYyBpbnQgVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoO1xcbiBcXHRzdHJ1Y3QgbWluaXhfaW5vZGUgKiByYXdfaW5vZGU7XFxuQEAgLTYzOSw3ICs2NDIsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiBcXG4gXFx0cmF3X2lub2RlID0gbWluaXhfVjFfcmF3X2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBpbm9kZS1cXHUwMDNlaV9pbm8sIFxcdTAwMjZiaCk7XFxuIFxcdGlmICghcmF3X2lub2RlKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdHJhd19pbm9kZS1cXHUwMDNlaV9tb2RlID0gaW5vZGUtXFx1MDAzZWlfbW9kZTtcXG4gXFx0cmF3X2lub2RlLVxcdTAwM2VpX3VpZCA9IGZzX2hpZ2gybG93dWlkKGlfdWlkX3JlYWQoaW5vZGUpKTtcXG4gXFx0cmF3X2lub2RlLVxcdTAwM2VpX2dpZCA9IGZzX2hpZ2gybG93Z2lkKGlfZ2lkX3JlYWQoaW5vZGUpKTtcXG5AQCAtNjUxLDEzICs2NTQsMTUgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYxX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcXG4gXFx0ZWxzZSBmb3IgKGkgPSAwOyBpIFxcdTAwM2MgOTsgaSsrKVxcbiBcXHRcXHRyYXdfaW5vZGUtXFx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVxcdTAwM2V1LmkxX2RhdGFbaV07XFxuIFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4tXFx0cmV0dXJuIGJoO1xcbitcXHRicmVsc2UoYmgpO1xcbitcXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qXFxuICAqIFRoZSBtaW5peCBWMiBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSBhbiBpbm9kZS5cXG4gICovXFxuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuK3N0YXRpYyBpbnQgVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoO1xcbiBcXHRzdHJ1Y3QgbWluaXgyX2lub2RlICogcmF3X2lub2RlO1xcbkBAIC02NjYsNyArNjcxLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcXG4gXFxuIFxcdHJhd19pbm9kZSA9IG1pbml4X1YyX3Jhd19pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUtXFx1MDAzZWlfaW5vLCBcXHUwMDI2YmgpO1xcbiBcXHRpZiAoIXJhd19pbm9kZSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRyYXdfaW5vZGUtXFx1MDAzZWlfbW9kZSA9IGlub2RlLVxcdTAwM2VpX21vZGU7XFxuIFxcdHJhd19pbm9kZS1cXHUwMDNlaV91aWQgPSBmc19oaWdoMmxvd3VpZChpX3VpZF9yZWFkKGlub2RlKSk7XFxuIFxcdHJhd19pbm9kZS1cXHUwMDNlaV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7XFxuQEAgLTY4MCwyOSArNjg1LDQwIEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuIFxcdGVsc2UgZm9yIChpID0gMDsgaSBcXHUwMDNjIDEwOyBpKyspXFxuIFxcdFxcdHJhd19pbm9kZS1cXHUwMDNlaV96b25lW2ldID0gbWluaXhfaW5vZGUtXFx1MDAzZXUuaTJfZGF0YVtpXTtcXG4gXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbi1cXHRyZXR1cm4gYmg7XFxuK1xcdGJyZWxzZShiaCk7XFxuK1xcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4re1xcbitcXHRpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpXFxuK1xcdFxcdHJldHVybiBWMV9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xcbitcXHRyZXR1cm4gVjJfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIHtcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuK1xcdHZvaWQgKnJhd19pbm9kZTtcXG4gXFxuIFxcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcXG4tXFx0XFx0YmggPSBWMV9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xcbitcXHRcXHRyYXdfaW5vZGUgPSBtaW5peF9WMV9yYXdfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGlub2RlLVxcdTAwM2VpX2lubywgXFx1MDAyNmJoKTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRiaCA9IFYyX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XFxuLVxcdGlmICghYmgpXFxuK1xcdFxcdHJhd19pbm9kZSA9IG1pbml4X1YyX3Jhd19pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUtXFx1MDAzZWlfaW5vLCBcXHUwMDI2YmgpO1xcbitcXHRpZiAoIXJhd19pbm9kZSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuLVxcdGlmICh3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcXHUwMDI2XFx1MDAyNiBidWZmZXJfZGlydHkoYmgpKSB7XFxuLVxcdFxcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcXG4tXFx0XFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFxcdTAwMjZcXHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7XFxuLVxcdFxcdFxcdHByaW50ayhcXFwiSU8gZXJyb3Igc3luY2luZyBtaW5peCBpbm9kZSBbJXM6JTA4bGx4XVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfaWQsIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLVxcdFxcdFxcdGVyciA9IC1FSU87XFxuLVxcdFxcdH1cXG4rXFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbitcXHRcXHRwcmludGsoXFxcIklPIGVycm9yIHN5bmNpbmcgbWluaXggaW5vZGUgWyVzOiUwOGxseF1cXFxcblxcXCIsXFxuK1xcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2lkLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbiBcXHR9XFxuLVxcdGJyZWxzZSAoYmgpO1xcbitcXHRlcnIgPSBtbWJfc3luYyhcXHUwMDI2bWluaXhfaShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rb3V0OlxcbitcXHRicmVsc2UoYmgpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9mcy91ZGYvZGlyLmMgYi9mcy91ZGYvZGlyLmNcXG5pbmRleCBlYmM5ZjZhMzc5ZmUzYS4uNDI1ZTNjMTYyOTM1MDQgMTAwNjQ0XFxuLS0tIGEvZnMvdWRmL2Rpci5jXFxuKysrIGIvZnMvdWRmL2Rpci5jXFxuQEAgLTE1Nyw2ICsxNTcsNiBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9kaXJfb3BlcmF0aW9ucyA9IHtcXG4gXFx0LnJlYWRcXHRcXHRcXHQ9IGdlbmVyaWNfcmVhZF9kaXIsXFxuIFxcdC5pdGVyYXRlX3NoYXJlZFxcdFxcdD0gdWRmX3JlYWRkaXIsXFxuIFxcdC51bmxvY2tlZF9pb2N0bFxcdFxcdD0gdWRmX2lvY3RsLFxcbi1cXHQuZnN5bmNcXHRcXHRcXHQ9IHVkZl9mc3luYyxcXG4rXFx0LmZzeW5jXFx0XFx0XFx0PSBzaW1wbGVfZnN5bmMsXFxuIFxcdC5zZXRsZWFzZVxcdFxcdD0gZ2VuZXJpY19zZXRsZWFzZSxcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmNcXG5pbmRleCBmN2YxNDIyZGUzMGZhNC4uNTdkMTE2MDZhMmE3NzYgMTAwNjQ0XFxuLS0tIGEvZnMvdWRmL2ZpbGUuY1xcbisrKyBiL2ZzL3VkZi9maWxlLmNcXG5AQCAtMTk4LDEzICsxOTgsNiBAQCBzdGF0aWMgaW50IHVkZl9maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4taW50IHVkZl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuLXtcXG4tXFx0cmV0dXJuIG1tYl9mc3luYyhmaWxlLFxcbi1cXHRcXHRcXHRcXHUwMDI2VURGX0koZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0KS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMsXFxuLVxcdFxcdFxcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4tfVxcbi1cXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZmlsZV9vcGVyYXRpb25zID0ge1xcbiBcXHQucmVhZF9pdGVyXFx0XFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxcbiBcXHQudW5sb2NrZWRfaW9jdGxcXHRcXHQ9IHVkZl9pb2N0bCxcXG5AQCAtMjEyLDcgKzIwNSw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0Lm1tYXBcXHRcXHRcXHQ9IHVkZl9maWxlX21tYXAsXFxuIFxcdC53cml0ZV9pdGVyXFx0XFx0PSB1ZGZfZmlsZV93cml0ZV9pdGVyLFxcbiBcXHQucmVsZWFzZVxcdFxcdD0gdWRmX3JlbGVhc2VfZmlsZSxcXG4tXFx0LmZzeW5jXFx0XFx0XFx0PSB1ZGZfZnN5bmMsXFxuK1xcdC5mc3luY1xcdFxcdFxcdD0gc2ltcGxlX2ZzeW5jLFxcbiBcXHQuc3BsaWNlX3JlYWRcXHRcXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXFxuIFxcdC5zcGxpY2Vfd3JpdGVcXHRcXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXFxuIFxcdC5sbHNlZWtcXHRcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuQEAgLTI1Myw2ICsyNDYsOCBAQCBzdGF0aWMgaW50IHVkZl9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcbiBcXHRzZXRhdHRyX2NvcHkoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlLCBhdHRyKTtcXG4gXFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdGlmIChJU19TWU5DKGlub2RlKSlcXG4rXFx0XFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9mcy91ZGYvaW5vZGUuYyBiL2ZzL3VkZi9pbm9kZS5jXFxuaW5kZXggNjdiY2Y4Mzc1OGM4ZmIuLmQ5OTFhNjcxYzBhNjkxIDEwMDY0NFxcbi0tLSBhL2ZzL3VkZi9pbm9kZS5jXFxuKysrIGIvZnMvdWRmL2lub2RlLmNcXG5AQCAtNTEsOCArNTEsNiBAQFxcbiBzdHJ1Y3QgdWRmX21hcF9ycTtcXG4gXFxuIHN0YXRpYyB1bW9kZV90IHVkZl9jb252ZXJ0X3Blcm1pc3Npb25zKHN0cnVjdCBmaWxlRW50cnkgKik7XFxuLXN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcXG4tc3RhdGljIGludCB1ZGZfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gc3RhdGljIGludCB1ZGZfYWxsb2NfaV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCBzaXplKTtcXG4gc3RhdGljIGludCBpbm9kZV9nZXRibGsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHVkZl9tYXBfcnEgKm1hcCk7XFxuIHN0YXRpYyBpbnQgdWRmX2luc2VydF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uLFxcbkBAIC0xNDIsNyArMTQwLDkgQEAgdm9pZCB1ZGZfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0aWYgKCFpbm9kZS1cXHUwMDNlaV9ubGluaykge1xcbiBcXHRcXHRcXHR3YW50X2RlbGV0ZSA9IDE7XFxuIFxcdFxcdFxcdHVkZl9zZXRzaXplKGlub2RlLCAwKTtcXG4tXFx0XFx0XFx0dWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgSVNfU1lOQyhpbm9kZSkpO1xcbitcXHRcXHRcXHR1ZGZfd3JpdGVfaW5vZGUoaW5vZGUsIE5VTEwpO1xcbitcXHRcXHRcXHRpZiAoSVNfU1lOQyhpbm9kZSkpXFxuK1xcdFxcdFxcdFxcdHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCBOVUxMKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoaWluZm8tXFx1MDAzZWlfYWxsb2NfdHlwZSAhPSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGlub2RlLVxcdTAwM2VpX3NpemUgIT0gaWluZm8tXFx1MDAzZWlfbGVuRXh0ZW50cykge1xcbkBAIC05MzYsOSArOTM2LDEwIEBAIHN0YXRpYyBpbnQgaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB1ZGZfbWFwX3JxICptYXApXFxuIFxcdGlpbmZvLVxcdTAwM2VpX25leHRfYWxsb2NfZ29hbCA9IG5ld2Jsb2NrbnVtICsgMTtcXG4gXFx0aW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpO1xcbiBcXG4tXFx0aWYgKElTX1NZTkMoaW5vZGUpKVxcbi1cXHRcXHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XFxuLVxcdGVsc2VcXG4rXFx0aWYgKElTX1NZTkMoaW5vZGUpKSB7XFxuK1xcdFxcdHVkZl93cml0ZV9pbm9kZShpbm9kZSwgTlVMTCk7XFxuK1xcdFxcdHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCBOVUxMKTtcXG4rXFx0fSBlbHNlXFxuIFxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbiBcXHRyZXQgPSAwO1xcbiBvdXRfZnJlZTpcXG5AQCAtMTMyNiwxMCArMTMyNyw3IEBAIGludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbmV3c2l6ZSlcXG4gXFx0fVxcbiB1cGRhdGVfdGltZTpcXG4gXFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGlub2RlLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSkpO1xcbi1cXHRpZiAoSVNfU1lOQyhpbm9kZSkpXFxuLVxcdFxcdHVkZl9zeW5jX2lub2RlKGlub2RlKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTE3MDUsMTQgKzE3MDMsMjggQEAgdm9pZCB1ZGZfdXBkYXRlX2V4dHJhX3Blcm1zKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVtb2RlX3QgbW9kZSlcXG4gXFx0XFx0aWluZm8tXFx1MDAzZWlfZXh0cmFQZXJtcyB8PSBGRV9QRVJNX09fREVMRVRFO1xcbiB9XFxuIFxcbi1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbitpbnQgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIHtcXG4tXFx0cmV0dXJuIHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcXG4tfVxcbitcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbitcXHRpbnQgZXJyID0gMDtcXG4gXFxuLXN0YXRpYyBpbnQgdWRmX3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4te1xcbi1cXHRyZXR1cm4gdWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgMSk7XFxuK1xcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLFxcbitcXHRcXHRcXHR1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS1cXHUwMDNlaV9zYixcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2VURGX0koaW5vZGUpLVxcdTAwM2VpX2xvY2F0aW9uLCAwKSk7XFxuK1xcdGlmICghYmgpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbitcXHRcXHR1ZGZfd2Fybihpbm9kZS1cXHUwMDNlaV9zYiwgXFxcIklPIGVycm9yIHN5bmNpbmcgdWRmIGlub2RlIFslMDhsbHhdXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4rXFx0XFx0ZXJyID0gLUVJTztcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0ZXJyID0gbW1iX3N5bmMoXFx1MDAyNlVERl9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitvdXQ6XFxuK1xcdGJyZWxzZShiaCk7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHVkZl9hZGp1c3RfdGltZShzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvLCBzdHJ1Y3QgdGltZXNwZWM2NCB0aW1lKVxcbkBAIC0xNzIzLDcgKzE3MzUsNyBAQCBzdGF0aWMgdm9pZCB1ZGZfYWRqdXN0X3RpbWUoc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgdGltZVxcbiBcXHRcXHRpaW5mby1cXHUwMDNlaV9jcnRpbWUgPSB0aW1lO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXFxuK2ludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIHtcXG4gXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBmaWxlRW50cnkgKmZlO1xcbkBAIC0xNzMyLDcgKzE3NDQsNiBAQCBzdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXFxuIFxcdHVpbnQzMl90IHVkZnBlcm1zO1xcbiBcXHR1aW50MTZfdCBpY2JmbGFncztcXG4gXFx0dWludDE2X3QgY3JjbGVuO1xcbi1cXHRpbnQgZXJyID0gMDtcXG4gXFx0c3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbiBcXHR1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XFxuIFxcdHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSShpbm9kZSk7XFxuQEAgLTE5MzcsMTcgKzE5NDgsMTAgQEAgc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxcbiBcXG4gXFx0Lyogd3JpdGUgdGhlIGRhdGEgYmxvY2tzICovXFxuIFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4tXFx0aWYgKGRvX3N5bmMpIHtcXG4tXFx0XFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbi1cXHRcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbi1cXHRcXHRcXHR1ZGZfd2Fybihpbm9kZS1cXHUwMDNlaV9zYiwgXFxcIklPIGVycm9yIHN5bmNpbmcgdWRmIGlub2RlIFslMDhsbHhdXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4tXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4tXFx0XFx0fVxcbi1cXHR9XFxuIFxcdGJyZWxzZShiaCk7XFxuK1xcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xcbiBcXG4tXFx0cmV0dXJuIGVycjtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubyxcXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL3N1cGVyLmMgYi9mcy91ZGYvc3VwZXIuY1xcbmluZGV4IDdiODVmNWEyYjc5ZmM0Li5lN2U5ZjJhMGQyNGU4MCAxMDA2NDRcXG4tLS0gYS9mcy91ZGYvc3VwZXIuY1xcbisrKyBiL2ZzL3VkZi9zdXBlci5jXFxuQEAgLTIxMSw2ICsyMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdWRmX3NiX29wcyA9IHtcXG4gXFx0LmFsbG9jX2lub2RlXFx0PSB1ZGZfYWxsb2NfaW5vZGUsXFxuIFxcdC5mcmVlX2lub2RlXFx0PSB1ZGZfZnJlZV9pbl9jb3JlX2lub2RlLFxcbiBcXHQud3JpdGVfaW5vZGVcXHQ9IHVkZl93cml0ZV9pbm9kZSxcXG4rXFx0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YSxcXG4gXFx0LmV2aWN0X2lub2RlXFx0PSB1ZGZfZXZpY3RfaW5vZGUsXFxuIFxcdC5wdXRfc3VwZXJcXHQ9IHVkZl9wdXRfc3VwZXIsXFxuIFxcdC5zeW5jX2ZzXFx0PSB1ZGZfc3luY19mcyxcXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZmRlY2wuaCBiL2ZzL3VkZi91ZGZkZWNsLmhcXG5pbmRleCA2ZDk1MWUwNWMwMDQ2YS4uODZkYzJkNmEyZWYxYjggMTAwNjQ0XFxuLS0tIGEvZnMvdWRmL3VkZmRlY2wuaFxcbisrKyBiL2ZzL3VkZi91ZGZkZWNsLmhcXG5AQCAtMTM3LDcgKzEzNyw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVkZl9kaXJfZW50cnlfbGVuKHN0cnVjdCBmaWxlSWRlbnREZXNjICpjZmkpXFxuIFxcbiAvKiBmaWxlLmMgKi9cXG4gZXh0ZXJuIGxvbmcgdWRmX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XFxuLWludCB1ZGZfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTtcXG4gXFxuIC8qIGlub2RlLmMgKi9cXG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICosXFxuQEAgLTE1OCw2ICsxNTcsNyBAQCBleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfYnJlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdWRmX3BibGtfdCBibG9jayxcXG4gZXh0ZXJuIGludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90KTtcXG4gZXh0ZXJuIHZvaWQgdWRmX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqKTtcXG4gZXh0ZXJuIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcXG4raW50IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XFxuIGV4dGVybiBpbnQgaW5vZGVfYm1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcXG4gXFx0XFx0ICAgICAgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqcG9zLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsXFxuIFxcdFxcdCAgICAgIHVpbnQzMl90ICplbGVuLCBzZWN0b3JfdCAqb2Zmc2V0LCBpbnQ4X3QgKmV0eXBlKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXFxuaW5kZXggOGIyM2JjOWEyNDRjYjMuLmZkMmM3MTE1YzA1NDI3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxcbkBAIC0yMTAsMTAgKzIxMCw2IEBAIHZvaWQgYmhfZW5kX2FzeW5jX3dyaXRlKHN0cnVjdCBiaW8gKmJpbyk7XFxuIFxcbiAvKiBUaGluZ3MgdG8gZG8gd2l0aCBtZXRhZGF0YSBidWZmZXJzIGxpc3QgKi9cXG4gdm9pZCBtbWJfbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpO1xcbi1pbnQgbW1iX2ZzeW5jX25vZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLFxcbi1cXHRcXHQgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGJvb2wgZGF0YXN5bmMpO1xcbi1pbnQgbW1iX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcXG4tXFx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKTtcXG4gdm9pZCBjbGVhbl9iZGV2X2FsaWFzZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssXFxuIFxcdFxcdFxcdHNlY3Rvcl90IGxlbik7XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhbl9iZGV2X2JoX2FsaWFzKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxcbmluZGV4IGQxMDg5N2IzYTFlMzUwLi5iMTdlMGQ0MjA3MWRmOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5AQCAtNzQwLDcgKzc0MCw4IEBAIGVudW0gaW5vZGVfc3RhdGVfZmxhZ3NfZW51bSB7XFxuIFxcdElfQ1JFQVRJTkdcXHRcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAxNSksXFxuIFxcdElfRE9OVENBQ0hFXFx0XFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMTYpLFxcbiBcXHRJX1NZTkNfUVVFVUVEXFx0XFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMTcpLFxcbi1cXHRJX1BJTk5JTkdfTkVURlNfV0JcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAxOClcXG4rXFx0SV9QSU5OSU5HX05FVEZTX1dCXFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMTgpLFxcbitcXHRJX01FVEFEQVRBX1dSSVRFQkFDS1xcdD0gKDFVIFxcdTAwM2NcXHUwMDNjIDE5KSxcXG4gfTtcXG4gXFxuICNkZWZpbmUgSV9ESVJUWV9JTk9ERSAoSV9ESVJUWV9TWU5DIHwgSV9ESVJUWV9EQVRBU1lOQylcXG5AQCAtMjIxMyw2ICsyMjE0LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2lub2RlX2RpcnR5X3N5bmMoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0X19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX1NZTkMpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuK1xcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9NRVRBREFUQV9XUklURUJBQ0spO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuK31cXG4rXFxuIC8qXFxuICAqIHJldHVybnMgdGhlIHJlZmNvdW50IG9uIHRoZSBpbm9kZS4gaXQgY2FuIGNoYW5nZSBhcmJpdHJhcmlseS5cXG4gICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaFxcbmluZGV4IGVmNzk0MWU5ZGM3OWFjLi4xNzA1NjFlOGYyZTJjNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcXG5AQCAtODYsNiArODYsOCBAQCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7XFxuIFxcdHZvaWQgKCpmcmVlX2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFx0dm9pZCAoKmRpcnR5X2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZmxhZ3MpO1xcbiBcXHRpbnQgKCp3cml0ZV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xcbitcXHRpbnQgKCpzeW5jX2lub2RlX21ldGFkYXRhKShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XFxuIFxcdGludCAoKmRyb3BfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXHR2b2lkICgqZXZpY3RfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXHR2b2lkICgqcHV0X3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTk6NTE6MDkuNzAyMzc1OTE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjYzNjU0NDYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQyX0ZTXCIsXG4gICAgXCJGQVRfRlNcIixcbiAgICBcIk1TRE9TX0ZTXCIsXG4gICAgXCJWRkFUX0ZTXCIsXG4gICAgXCJNSU5JWF9GU1wiLFxuICAgIFwiVURGX0ZTXCIsXG4gICAgXCJCRlNfRlNcIixcbiAgICBcIkFGRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcIndyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcImV4dDRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJmYXRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwidWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcIm1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImJmc19zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJzaW1wbGVfZnN5bmNfbm9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgVkZTIHN1cGVyX29wZXJhdGlvbnMgY2FsbGJhY2sgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGFuZCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBleHQyLCBmYXQsIG1pbml4LCB1ZGYsIGJmcywgYWZmcykgdG8gaW1wbGVtZW50IGFuZCB1c2UgaXQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvcmUgd3JpdGViYWNrIGxvZ2ljIGluIGBmcy9mcy13cml0ZWJhY2suY2AgdG8gd2FpdCBmb3IgaW5vZGUgbWV0YWRhdGEgSU8uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBWRlMgYW5kIG11bHRpcGxlIGZpbGVzeXN0ZW1zLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNTEwNDU4ZTAyYjIzMmRiZTg3M2I3NmYxNzZmNGMxMWI2MDYwZTI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxOTo1MTowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmhcbmluZGV4IDQ0YTNmNjlkMjc1Zjk2Li5hN2ZhYTkxZGVlZDVhYyAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvYWZmcy5oXG4rKysgYi9mcy9hZmZzL2FmZnMuaFxuQEAgLTQ0LDcgKzQ0LDYgQEAgc3RydWN0IGFmZnNfaW5vZGVfaW5mbyB7XG4gXHRzdHJ1Y3QgbXV0ZXggaV9saW5rX2xvY2s7XHRcdC8qIFByb3RlY3RzIGludGVybmFsIGlub2RlIGFjY2Vzcy4gKi9cbiBcdHN0cnVjdCBtdXRleCBpX2V4dF9sb2NrO1x0XHQvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovXG4gI2RlZmluZSBpX2hhc2hfbG9jayBpX2V4dF9sb2NrXG4tXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XG4gXHR1MzJcdCBpX2Jsa2NudDtcdFx0XHQvKiBibG9jayBjb3VudCAqL1xuIFx0dTMyXHQgaV9leHRjbnQ7XHRcdFx0LyogZXh0ZW5kZWQgYmxvY2sgY291bnQgKi9cbiBcdHUzMlx0KmlfbGM7XHRcdFx0XHQvKiBsaW5lYXIgY2FjaGUgb2YgZXh0ZW5kZWQgYmxvY2tzICovXG5AQCAtMTUyLDcgKzE1MSw2IEBAIGV4dGVybiBib29sXHRhZmZzX25vZmlsZW5hbWV0cnVuY2F0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIGV4dGVybiBpbnRcdGFmZnNfY2hlY2tfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCBpbnQgbGVuLFxuIFx0XHRcdFx0Ym9vbCBub3RydW5jYXRlKTtcbiBleHRlcm4gaW50XHRhZmZzX2NvcHlfbmFtZSh1bnNpZ25lZCBjaGFyICpic3RyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuLXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqYWZmc19nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIC8qIGJpdG1hcC4gYyAqL1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYW1pZ2FmZnMuYyBiL2ZzL2FmZnMvYW1pZ2FmZnMuY1xuaW5kZXggYmVkNGZjODA1ZThlNjYuLjZjYzBmYzlhNGNiZjkyIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9hbWlnYWZmcy5jXG4rKysgYi9mcy9hZmZzL2FtaWdhZmZzLmNcbkBAIC01Nyw3ICs1Nyw3IEBAIGFmZnNfaW5zZXJ0X2hhc2goc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gXHRcdEFGRlNfVEFJTChzYiwgZGlyX2JoKS1cdTAwM2VoYXNoX2NoYWluID0gY3B1X3RvX2JlMzIoaW5vKTtcbiBcbiBcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGRpcl9iaCwgaW5vKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShkaXJfYmgsIFx1MDAyNkFGRlNfSShkaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCk7XG4gXHRhZmZzX2JyZWxzZShkaXJfYmgpO1xuIFxuIFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XG5AQCAtMTAwLDcgKzEwMCw3IEBAIGFmZnNfcmVtb3ZlX2hhc2goc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVtX2JoKVxuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZWhhc2hfY2hhaW4gPSBpbm87XG4gXHRcdFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJlMzJfdG9fY3B1KGlubykgLSBoYXNoX2lubyk7XG4tXHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHRcdEFGRlNfVEFJTChzYiwgcmVtX2JoKS1cdTAwM2VwYXJlbnQgPSAwO1xuIFx0XHRcdHJldHZhbCA9IDA7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTgwLDcgKzE4MCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkobGlua19iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdG1hcmtfYnVmZmVyX2RpcnR5KGxpbmtfYmgpO1xuIFxuIFx0XHRtZW1jcHkoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlbmFtZSwgQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cdTAwM2VuYW1lLCAzMik7XG4gXHRcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2goZGlyLCBiaCk7XG5AQCAtMTg4LDcgKzE4OCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXG4gXHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRpcHV0KGRpcik7XG5AQCAtMjAzLDcgKzIwMyw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdF9fYmUzMiBpbm8yID0gQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cdTAwM2VsaW5rX2NoYWluO1xuIFx0XHRcdEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZWxpbmtfY2hhaW4gPSBpbm8yO1xuIFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBiZTMyX3RvX2NwdShpbm8yKSAtIGxpbmtfaW5vKTtcbi1cdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0XHRyZXR2YWwgPSAwO1xuIFx0XHRcdC8qIEZpeCB0aGUgbGluayBjb3VudCwgaWYgYmggaXMgYSBub3JtYWwgaGVhZGVyIGJsb2NrIHdpdGhvdXQgbGlua3MgKi9cbiBcdFx0XHRzd2l0Y2ggKGJlMzJfdG9fY3B1KEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZXN0eXBlKSkge1xuQEAgLTMwNiw3ICszMDYsNyBAQCBhZmZzX3JlbW92ZV9oZWFkZXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dmFsID0gYWZmc19yZW1vdmVfaGFzaChkaXIsIGJoKTtcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gZG9uZV91bmxvY2s7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFxuIFx0YWZmc191bmxvY2tfZGlyKGRpcik7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9maWxlLmMgYi9mcy9hZmZzL2ZpbGUuY1xuaW5kZXggMTQ0YjE3NDgyZDEyZGEuLjIzZTA4OGE3ZWQ0ZmIzIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9maWxlLmNcbisrKyBiL2ZzL2FmZnMvZmlsZS5jXG5AQCAtMTQwLDE0ICsxNDAsMTQgQEAgYWZmc19hbGxvY19leHRibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB1MzIgZXh0KVxuIFx0QUZGU19UQUlMKHNiLCBuZXdfYmgpLVx1MDAzZXBhcmVudCA9IGNwdV90b19iZTMyKGlub2RlLVx1MDAzZWlfaW5vKTtcbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBuZXdfYmgpO1xuIFxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KG5ld19iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtYXJrX2J1ZmZlcl9kaXJ0eShuZXdfYmgpO1xuIFxuIFx0dG1wID0gYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlZXh0ZW5zaW9uKTtcbiBcdGlmICh0bXApXG4gXHRcdGFmZnNfd2FybmluZyhzYiwgXCJhbGxvY19leHRcIiwgXCJwcmV2aW91cyBleHRlbnNpb24gc2V0ICgleClcIiwgdG1wKTtcbiBcdEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZWV4dGVuc2lvbiA9IGNwdV90b19iZTMyKGJsb2NrbnIpO1xuIFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJsb2NrbnIgLSB0bXApO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcbiBcdEFGRlNfSShpbm9kZSktXHUwMDNlaV9leHRjbnQrKztcbiBcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuQEAgLTU4MSw3ICs1ODEsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcbiBcdFx0bWVtc2V0KEFGRlNfREFUQShiaCkgKyBib2ZmLCAwLCB0bXApO1xuIFx0XHRiZTMyX2FkZF9jcHUoXHUwMDI2QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUsIHRtcCk7XG4gXHRcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0c2l6ZSArPSB0bXA7XG4gXHRcdGJpZHgrKztcbiBcdH0gZWxzZSBpZiAoYmlkeCkge1xuQEAgLTYwMyw3ICs2MDMsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcbiBcdFx0QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUgPSBjcHVfdG9fYmUzMih0bXApO1xuIFx0XHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xuIFx0XHRiaC1cdTAwM2ViX3N0YXRlIFx1MDAyNj0gfigxVUwgXHUwMDNjXHUwMDNjIEJIX05ldyk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0aWYgKHByZXZfYmgpIHtcbiBcdFx0XHR1MzIgdG1wX25leHQgPSBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0KTtcbiBcbkBAIC02MTMsOCArNjEzLDcgQEAgYWZmc19leHRlbnRfZmlsZV9vZnMoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG5ld3NpemUpXG4gXHRcdFx0XHRcdCAgICAgYmlkeCwgdG1wX25leHQpO1xuIFx0XHRcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVx1MDAzZW5leHQgPSBjcHVfdG9fYmUzMihiaC1cdTAwM2ViX2Jsb2NrbnIpO1xuIFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVx1MDAzZWJfYmxvY2tuciAtIHRtcF9uZXh0KTtcbi1cdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdFx0bWFya19idWZmZXJfZGlydHkocHJldl9iaCk7XG4gXHRcdFx0YWZmc19icmVsc2UocHJldl9iaCk7XG4gXHRcdH1cbiBcdFx0c2l6ZSArPSBic2l6ZTtcbkBAIC03MzMsNyArNzMyLDcgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKFxuIFx0XHRcdG1heChib2ZmICsgdG1wLCBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSkpKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHR3cml0dGVuICs9IHRtcDtcbiBcdFx0ZnJvbSArPSB0bXA7XG4gXHRcdGJpZHgrKztcbkBAIC03NjYsMTMgKzc2NSwxMiBAQCBzdGF0aWMgaW50IGFmZnNfd3JpdGVfZW5kX29mcyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRcdFx0XHRcdFx0ICAgICBiaWR4LCB0bXBfbmV4dCk7XG4gXHRcdFx0XHRBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXHUwMDNlYl9ibG9ja25yKTtcbiBcdFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVx1MDAzZWJfYmxvY2tuciAtIHRtcF9uZXh0KTtcbi1cdFx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoLFxuLVx0XHRcdFx0XHRcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHR3cml0dGVuICs9IGJzaXplO1xuIFx0XHRmcm9tICs9IGJzaXplO1xuIFx0XHRiaWR4Kys7XG5AQCAtODAxLDE0ICs3OTksMTMgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdFx0XHRcdCAgICAgYmlkeCwgdG1wX25leHQpO1xuIFx0XHRcdFx0QUZGU19EQVRBX0hFQUQocHJldl9iaCktXHUwMDNlbmV4dCA9IGNwdV90b19iZTMyKGJoLVx1MDAzZWJfYmxvY2tucik7XG4gXHRcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShwcmV2X2JoLCBiaC1cdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XG4tXHRcdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCxcbi1cdFx0XHRcdFx0XHRcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIGlmIChiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSkgXHUwMDNjIHRtcClcbiBcdFx0XHRBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7XG4gXHRcdGFmZnNfYnJlbHNlKHByZXZfYmgpO1xuIFx0XHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRcdHdyaXR0ZW4gKz0gdG1wO1xuIFx0XHRmcm9tICs9IHRtcDtcbiBcdFx0YmlkeCsrO1xuQEAgLTk0NSw3ICs5NDIsNyBAQCBhZmZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR9XG4gXHRBRkZTX1RBSUwoc2IsIGV4dF9iaCktXHUwMDNlZXh0ZW5zaW9uID0gMDtcbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBleHRfYmgpO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtYXJrX2J1ZmZlcl9kaXJ0eShleHRfYmgpO1xuIFx0YWZmc19icmVsc2UoZXh0X2JoKTtcbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX3NpemUpIHtcbmRpZmYgLS1naXQgYS9mcy9hZmZzL2lub2RlLmMgYi9mcy9hZmZzL2lub2RlLmNcbmluZGV4IDVkZDFiMDE2YmNiMDBhLi5kNGEzZjM4MWM0YmNmZiAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvaW5vZGUuY1xuKysrIGIvZnMvYWZmcy9pbm9kZS5jXG5AQCAtMjA2LDcgKzIwNiw3IEBAIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdH1cbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFx0YWZmc19mcmVlX3ByZWFsbG9jKGlub2RlKTtcbiBcdHJldHVybiAwO1xuQEAgLTI2NiwxMSArMjY2LDggQEAgYWZmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0aWYgKCFpbm9kZS1cdTAwM2VpX25saW5rKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfc2l6ZSA9IDA7XG4gXHRcdGFmZnNfdHJ1bmNhdGUoaW5vZGUpO1xuLVx0fSBlbHNlIHtcbi1cdFx0bW1iX3N5bmMoXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4gXHR9XG4gXG4tXHRtbWJfaW52YWxpZGF0ZShcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdGNsZWFyX2lub2RlKGlub2RlKTtcbiBcdGFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7XG4gXHRjYWNoZV9wYWdlID0gKHVuc2lnbmVkIGxvbmcpQUZGU19JKGlub2RlKS1cdTAwM2VpX2xjO1xuQEAgLTMwNSw3ICszMDIsNyBAQCBhZmZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpcilcbiBcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XG4gXHRpZiAoIWJoKVxuIFx0XHRnb3RvIGVycl9iaDtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRhZmZzX2JyZWxzZShiaCk7XG4gXG4gXHRpbm9kZS1cdTAwM2VpX3VpZCAgICAgPSBjdXJyZW50X2ZzdWlkKCk7XG5AQCAtMzkzLDE3ICszOTAsMTcgQEAgYWZmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgczNcbiBcdFx0QUZGU19UQUlMKHNiLCBiaCktXHUwMDNlbGlua19jaGFpbiA9IGNoYWluO1xuIFx0XHRBRkZTX1RBSUwoc2IsIGlub2RlX2JoKS1cdTAwM2VsaW5rX2NoYWluID0gY3B1X3RvX2JlMzIoYmxvY2spO1xuIFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShpbm9kZV9iaCwgYmxvY2sgLSBiZTMyX3RvX2NwdShjaGFpbikpO1xuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoaW5vZGVfYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCk7XG4gXHRcdHNldF9ubGluayhpbm9kZSwgMik7XG4gXHRcdGlob2xkKGlub2RlKTtcbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0ZGVudHJ5LVx1MDAzZWRfZnNkYXRhID0gKHZvaWQgKikobG9uZyliaC1cdTAwM2ViX2Jsb2NrbnI7XG4gXG4gXHRhZmZzX2xvY2tfZGlyKGRpcik7XG4gXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0YWZmc191bmxvY2tfbGluayhpbm9kZSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jXG5pbmRleCBjM2M2NTMyZGE0YjBkYS4uNTdkOGQ3NTVhYWRhMDUgMTAwNjQ0XG4tLS0gYS9mcy9hZmZzL25hbWVpLmNcbisrKyBiL2ZzL2FmZnMvbmFtZWkuY1xuQEAgLTM3Myw3ICszNzMsNyBAQCBhZmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0fVxuIFx0KnAgPSAwO1xuIFx0aW5vZGUtXHUwMDNlaV9zaXplID0gaSArIDE7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXG5AQCAtNDQzLDggKzQ0Myw3IEBAIGFmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdC8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi9cbiBcbiBkb25lOlxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLFxuLVx0XHRcdFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFx0cmV0dXJuIHJldHZhbDtcbiB9XG5AQCAtNDk3LDggKzQ5Niw4IEBAIGFmZnNfeHJlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKG9sZF9kaXIsIGJoX25ldyk7XG4gXHRhZmZzX3VubG9ja19kaXIob2xkX2Rpcik7XG4gZG9uZTpcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9vbGQsIFx1MDAyNkFGRlNfSShuZXdfZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmhfbmV3LCBcdTAwMjZBRkZTX0kob2xkX2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmhfb2xkKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGJoX25ldyk7XG4gXHRhZmZzX2JyZWxzZShiaF9vbGQpO1xuIFx0YWZmc19icmVsc2UoYmhfbmV3KTtcbiBcdHJldHVybiByZXR2YWw7XG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9zdXBlci5jIGIvZnMvYWZmcy9zdXBlci5jXG5pbmRleCBiMjMyMjUxYWE3YmJkMC4uMGFkNTEyN2U5ZmI4ZWUgMTAwNjQ0XG4tLS0gYS9mcy9hZmZzL3N1cGVyLmNcbisrKyBiL2ZzL2FmZnMvc3VwZXIuY1xuQEAgLTEwOCw3ICsxMDgsNiBAQCBzdGF0aWMgc3RydWN0IGlub2RlICphZmZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRpLVx1MDAzZWlfbGMgPSBOVUxMO1xuIFx0aS1cdTAwM2VpX2V4dF9iaCA9IE5VTEw7XG4gXHRpLVx1MDAzZWlfcGFfY250ID0gMDtcbi1cdG1tYl9pbml0KFx1MDAyNmktXHUwMDNlaV9tZXRhZGF0YV9iaHMsIFx1MDAyNmktXHUwMDNldmZzX2lub2RlLmlfZGF0YSk7XG4gXG4gXHRyZXR1cm4gXHUwMDI2aS1cdTAwM2V2ZnNfaW5vZGU7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9kaXIuYyBiL2ZzL2Jmcy9kaXIuY1xuaW5kZXggNWI0MGFiMDlhNzk2ZGUuLjliMzdlYzRiZDg5YThjIDEwMDY0NFxuLS0tIGEvZnMvYmZzL2Rpci5jXG4rKysgYi9mcy9iZnMvZGlyLmNcbkBAIC02OCwxNyArNjgsMTAgQEAgc3RhdGljIGludCBiZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBiZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHJldHVybiBtbWJfZnN5bmMoZmlsZSxcbi1cdFx0XHRcdTAwMjZCRlNfSShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IGJmc19yZWFkZGlyLFxuLVx0LmZzeW5jXHRcdD0gYmZzX2ZzeW5jLFxuK1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9mcy9iZnMvaW5vZGUuYyBiL2ZzL2Jmcy9pbm9kZS5jXG5pbmRleCBlNDFlZmRkMzVkYjllZi4uY2FjYzdlZmY5YzMzY2UgMTAwNjQ0XG4tLS0gYS9mcy9iZnMvaW5vZGUuY1xuKysrIGIvZnMvYmZzL2lub2RlLmNcbkBAIC0xMzYsNyArMTM2LDYgQEAgc3RhdGljIGludCBiZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrO1xuIFx0c3RydWN0IGJmc19pbm9kZSAqZGk7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuLVx0aW50IGVyciA9IDA7XG4gXG4gXHRkcHJpbnRmKFwiaW5vPSUwOHhcXG5cIiwgaW5vKTtcbiBcbkBAIC0xNjUsMTMgKzE2NCwzMSBAQCBzdGF0aWMgaW50IGJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdGRpLVx1MDAzZWlfZW9mZnNldCA9IGNwdV90b19sZTMyKGlfc2Jsb2NrICogQkZTX0JTSVpFICsgaW5vZGUtXHUwMDNlaV9zaXplIC0gMSk7XG4gXG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdH1cbiBcdGJyZWxzZShiaCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJmc19zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbit7XG4rXHRpbnQgZXJyID0gMDtcbitcdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuK1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbitcbitcdGRpID0gZmluZF9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCAodTE2KWlub2RlLVx1MDAzZWlubywgXHUwMDI2YmgpO1xuK1x0aWYgKElTX0VSUihkaSkpXG4rXHRcdHJldHVybiBQVFJfRVJSKGRpKTtcbitcbitcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbitcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4rXHRcdGVyciA9IC1FSU87XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZXJyID0gbW1iX3N5bmMoXHUwMDI2QkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitvdXQ6XG4rXHRicmVsc2UoYmgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMzAyLDYgKzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSBiZnNfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBiZnNfZnJlZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBiZnNfd3JpdGVfaW5vZGUsXG4rXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IGJmc19zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IGJmc19ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gYmZzX3B1dF9zdXBlcixcbiBcdC5zdGF0ZnNcdFx0PSBiZnNfc3RhdGZzLFxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcbmluZGV4IDlhZjVmMDYxYTFmODVhLi5iZThiNTdhNjM1Y2Q4MiAxMDA2NDRcbi0tLSBhL2ZzL2J1ZmZlci5jXG4rKysgYi9mcy9idWZmZXIuY1xuQEAgLTYyOCw3OSArNjI4LDYgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxuIH1cbiBFWFBPUlRfU1lNQk9MKG1tYl9zeW5jKTtcbiBcbi0vKipcbi0gKiBtbWJfZnN5bmNfbm9mbHVzaCAtIGZzeW5jIGltcGxlbWVudGF0aW9uIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2l0aFxuLSAqIFx0XHQgICAgICAgbWV0YWRhdGEgYnVmZmVycyBsaXN0XG4tICpcbi0gKiBAZmlsZTpcdGZpbGUgdG8gc3luY2hyb25pemVcbi0gKiBAbW1iOlx0bGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2hcbi0gKiBAc3RhcnQ6XHRzdGFydCBvZmZzZXQgaW4gYnl0ZXNcbi0gKiBAZW5kOlx0ZW5kIG9mZnNldCBpbiBieXRlcyAoaW5jbHVzaXZlKVxuLSAqIEBkYXRhc3luYzpcdG9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWVcbi0gKlxuLSAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGZzeW5jIG1ldGhvZCBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdoaWNoXG4tICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iXG4tICogc3RydWN0dXJlLlxuLSAqL1xuLWludCBtbWJfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXG4tXHRcdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdGludCBlcnI7XG4tXHRpbnQgcmV0ID0gMDtcbi1cbi1cdGVyciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0aWYgKG1tYilcbi1cdFx0cmV0ID0gbW1iX3N5bmMobW1iKTtcbi1cdGlmICghKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IElfRElSVFlfQUxMKSlcbi1cdFx0Z290byBvdXQ7XG4tXHRpZiAoZGF0YXN5bmMgXHUwMDI2XHUwMDI2ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQykpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4tXHRpZiAocmV0ID09IDApXG4tXHRcdHJldCA9IGVycjtcbi1cbi1vdXQ6XG4tXHQvKiBjaGVjayBhbmQgYWR2YW5jZSBhZ2FpbiB0byBjYXRjaCBlcnJvcnMgYWZ0ZXIgc3luY2luZyBvdXQgYnVmZmVycyAqL1xuLVx0ZXJyID0gZmlsZV9jaGVja19hbmRfYWR2YW5jZV93Yl9lcnIoZmlsZSk7XG4tXHRpZiAocmV0ID09IDApXG4tXHRcdHJldCA9IGVycjtcbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jX25vZmx1c2gpO1xuLVxuLS8qKlxuLSAqIG1tYl9mc3luYyAtIGZzeW5jIGltcGxlbWVudGF0aW9uIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2l0aCBtZXRhZGF0YVxuLSAqIFx0ICAgICAgIGJ1ZmZlcnMgbGlzdFxuLSAqXG4tICogQGZpbGU6XHRmaWxlIHRvIHN5bmNocm9uaXplXG4tICogQG1tYjpcdGxpc3Qgb2YgbWV0YWRhdGEgYmhzIHRvIGZsdXNoXG4tICogQHN0YXJ0Olx0c3RhcnQgb2Zmc2V0IGluIGJ5dGVzXG4tICogQGVuZDpcdGVuZCBvZmZzZXQgaW4gYnl0ZXMgKGluY2x1c2l2ZSlcbi0gKiBAZGF0YXN5bmM6XHRvbmx5IHN5bmNocm9uaXplIGVzc2VudGlhbCBtZXRhZGF0YSBpZiB0cnVlXG4tICpcbi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmc3luYyBtZXRob2QgZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aGljaFxuLSAqIHRyYWNrIGFsbCBub24taW5vZGUgbWV0YWRhdGEgaW4gdGhlIGJ1ZmZlcnMgbGlzdCBoYW5naW5nIG9mZiB0aGUgQG1tYlxuLSAqIHN0cnVjdHVyZS4gVGhpcyBhbHNvIG1ha2VzIHN1cmUgdGhhdCBhIGRldmljZSBjYWNoZSBmbHVzaCBvcGVyYXRpb24gaXNcbi0gKiBjYWxsZWQgYXQgdGhlIGVuZC5cbi0gKi9cbi1pbnQgbW1iX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcbi1cdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxlLCBtbWIsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbi1cdGlmICghcmV0KVxuLVx0XHRyZXQgPSBibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYpO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTChtbWJfZnN5bmMpO1xuLVxuIC8qXG4gICogQ2FsbGVkIHdoZW4gd2UndmUgcmVjZW50bHkgd3JpdHRlbiBibG9jayBgYmJsb2NrJywgYW5kIGl0IGlzIGtub3duIHRoYXRcbiAgKiBgYmJsb2NrJyB3YXMgZm9yIGEgYnVmZmVyX2JvdW5kYXJ5KCkgYnVmZmVyLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBibG9jayBhdFxuQEAgLTExMjMsMTIgKzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7XG4gXG4gdm9pZCBtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIHtcbitcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iO1xuK1xuIFx0c2V0X2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XG4gXHQvKiBGSVhNRTogZG8gd2UgbmVlZCB0byBzZXQgdGhpcyBpbiBib3RoIHBsYWNlcz8gKi9cbiBcdGlmIChiaC1cdTAwM2ViX2ZvbGlvIFx1MDAyNlx1MDAyNiBiaC1cdTAwM2ViX2ZvbGlvLVx1MDAzZW1hcHBpbmcpXG4gXHRcdG1hcHBpbmdfc2V0X2Vycm9yKGJoLVx1MDAzZWJfZm9saW8tXHUwMDNlbWFwcGluZywgLUVJTyk7XG4tXHRpZiAoYmgtXHUwMDNlYl9tbWIpXG4tXHRcdG1hcHBpbmdfc2V0X2Vycm9yKGJoLVx1MDAzZWJfbW1iLVx1MDAzZW1hcHBpbmcsIC1FSU8pO1xuK1x0LyogUHJvdGVjdCB1cyBmcm9tIG1tYiBcdTAwMjYgaW5vZGUgZ2V0dGluZyBmcmVlZCB3aGlsZSB3ZSB3b3JrIG9uIGl0ICovXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtbWIgPSBSRUFEX09OQ0UoYmgtXHUwMDNlYl9tbWIpO1xuK1x0aWYgKG1tYilcbitcdFx0bWFwcGluZ19zZXRfZXJyb3IobW1iLVx1MDAzZW1hcHBpbmcsIC1FSU8pO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZGlyLmMgYi9mcy9leHQyL2Rpci5jXG5pbmRleCAyNzhkNGJlOGVjYmU3Ny4uZTE3YmJjNzU5OGMxNDMgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2Rpci5jXG4rKysgYi9mcy9leHQyL2Rpci5jXG5AQCAtNzM0LDYgKzczNCw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9ucyA9IHtcbiAjaWZkZWYgQ09ORklHX0NPTVBBVFxuIFx0LmNvbXBhdF9pb2N0bFx0PSBleHQyX2NvbXBhdF9pb2N0bCxcbiAjZW5kaWZcbi1cdC5mc3luY1x0XHQ9IGV4dDJfZnN5bmMsXG4rXHQuZnN5bmNcdFx0PSBzaW1wbGVfZnN5bmMsXG4gXHQuc2V0bGVhc2VcdD0gZ2VuZXJpY19zZXRsZWFzZSxcbiB9O1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZXh0Mi5oIGIvZnMvZXh0Mi9leHQyLmhcbmluZGV4IDc5ZjdiMzk1MjU4YzJhLi41NjQyNDUxYmYxOTE3MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvZXh0Mi5oXG4rKysgYi9mcy9leHQyL2V4dDIuaFxuQEAgLTczNSw2ICs3MzUsNyBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBleHQyX2NvdW50X2ZyZWUgKHN0cnVjdCBidWZmZXJfaGVhZCAqLCB1bnNpZ25lZCk7XG4gLyogaW5vZGUuYyAqL1xuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpO1xuIGV4dGVybiBpbnQgZXh0Ml93cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTtcbitleHRlcm4gaW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xuIHZvaWQgZXh0Ml93cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0byk7XG4gZXh0ZXJuIGludCBleHQyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpO1xuQEAgLTc3Miw4ICs3NzMsNiBAQCBleHRlcm4gdm9pZCBleHQyX3N5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzLFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZGlyX29wZXJhdGlvbnM7XG4gXG4gLyogZmlsZS5jICovXG4tZXh0ZXJuIGludCBleHQyX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4tXHRcdCAgICAgIGludCBkYXRhc3luYyk7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9pbm9kZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9vcGVyYXRpb25zO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZmlsZS5jIGIvZnMvZXh0Mi9maWxlLmNcbmluZGV4IDhkY2E5ZWM0Y2FjZDlhLi5iOTAyMGRmN2Q4OWUwMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvZmlsZS5jXG4rKysgYi9mcy9leHQyL2ZpbGUuY1xuQEAgLTQ3LDIxICs0Nyw2IEBAIHN0YXRpYyBpbnQgZXh0Ml9yZWxlYXNlX2ZpbGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGV4dDJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdGludCByZXQ7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVxuLVx0cmV0ID0gbW1iX2ZzeW5jKGZpbGUsIFx1MDAyNkVYVDJfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMsXG4tXHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuLVx0aWYgKHJldCA9PSAtRUlPKVxuLVx0XHQvKiBXZSBkb24ndCByZWFsbHkga25vdyB3aGVyZSB0aGUgSU8gZXJyb3IgaGFwcGVuZWQuLi4gKi9cbi1cdFx0ZXh0Ml9lcnJvcihzYiwgX19mdW5jX18sXG4tXHRcdFx0ICAgXCJkZXRlY3RlZCBJTyBlcnJvciB3aGVuIHdyaXRpbmcgbWV0YWRhdGEgYnVmZmVyc1wiKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4ge1xuIFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG5AQCAtMjEzLDcgKzE5OCw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4gXHQub3Blblx0XHQ9IGV4dDJfZmlsZV9vcGVuLFxuIFx0LnJlbGVhc2VcdD0gZXh0Ml9yZWxlYXNlX2ZpbGUsXG4tXHQuZnN5bmNcdFx0PSBleHQyX2ZzeW5jLFxuK1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LmdldF91bm1hcHBlZF9hcmVhID0gdGhwX2dldF91bm1hcHBlZF9hcmVhLFxuIFx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9pbm9kZS5jIGIvZnMvZXh0Mi9pbm9kZS5jXG5pbmRleCAyOTgwODYyOWNjZTU2Zi4uNTE2NTY2NDFjNGU1OWMgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2lub2RlLmNcbisrKyBiL2ZzL2V4dDIvaW5vZGUuY1xuQEAgLTM5LDggKzM5LDYgQEBcbiAjaW5jbHVkZSBcImFjbC5oXCJcbiAjaW5jbHVkZSBcInhhdHRyLmhcIlxuIFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKTtcbi1cbiAvKlxuICAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay5cbiAgKi9cbkBAIC04MywxMSArODEsMTYgQEAgdm9pZCBleHQyX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhKTtcbiBcbiBcdGlmICh3YW50X2RlbGV0ZSkge1xuK1x0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0ge1xuK1x0XHRcdC5zeW5jX21vZGUgPSBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSA/IFdCX1NZTkNfQUxMIDpcbitcdFx0XHRcdFx0XHRcdCAgICAgICBXQl9TWU5DX05PTkUsXG4rXHRcdH07XG4rXG4gXHRcdHNiX3N0YXJ0X2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0XHQvKiBzZXQgZHRpbWUgKi9cbiBcdFx0RVhUMl9JKGlub2RlKS1cdTAwM2VpX2R0aW1lXHQ9IGt0aW1lX2dldF9yZWFsX3NlY29uZHMoKTtcbiBcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tXHRcdF9fZXh0Ml93cml0ZV9pbm9kZShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpO1xuK1x0XHRleHQyX3dyaXRlX2lub2RlKGlub2RlLCBcdTAwMjZ3YmMpO1xuIFx0XHQvKiB0cnVuY2F0ZSB0byAwICovXG4gXHRcdGlub2RlLVx1MDAzZWlfc2l6ZSA9IDA7XG4gXHRcdGlmIChpbm9kZS1cdTAwM2VpX2Jsb2NrcylcbkBAIC0xNDY5LDcgKzE0NzIsNyBAQCBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXG4gXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcbitpbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4gXHRzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICplaSA9IEVYVDJfSShpbm9kZSk7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbkBAIC0xNTYwLDIyICsxNTYzLDMyIEBAIHN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuIFx0fSBlbHNlIGZvciAobiA9IDA7IG4gXHUwMDNjIEVYVDJfTl9CTE9DS1M7IG4rKylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfYmxvY2tbbl0gPSBlaS1cdTAwM2VpX2RhdGFbbl07XG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAoZG9fc3luYykge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbi1cdFx0XHRwcmludGsgKFwiSU8gZXJyb3Igc3luY2luZyBleHQyIGlub2RlIFslczolMDhseF1cXG5cIixcbi1cdFx0XHRcdHNiLVx1MDAzZXNfaWQsICh1bnNpZ25lZCBsb25nKSBpbm8pO1xuLVx0XHRcdGVyciA9IC1FSU87XG4tXHRcdH1cbi1cdH1cbiBcdGVpLVx1MDAzZWlfc3RhdGUgXHUwMDI2PSB+RVhUMl9TVEFURV9ORVc7XG4gXHRicmVsc2UgKGJoKTtcbitcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGV4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4raW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4tXHRyZXR1cm4gX19leHQyX3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcbitcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4rXHRzdHJ1Y3QgZXh0Ml9pbm9kZSAqcmF3X2lub2RlID0gZXh0Ml9nZXRfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sXG4rXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2YmgpO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoSVNfRVJSKHJhd19pbm9kZSkpXG4rXHRcdHJldHVybiAtRUlPO1xuK1x0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuK1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbitcdFx0cHJpbnRrKFwiSU8gZXJyb3Igc3luY2luZyBleHQyIGlub2RlIFslczolMDhseF1cXG5cIixcbitcdFx0ICAgICAgIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgKHVuc2lnbmVkIGxvbmcpaW5vZGUtXHUwMDNlaV9pbm8pO1xuK1x0XHRlcnIgPSAtRUlPO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGVyciA9IG1tYl9zeW5jKFx1MDAyNkVYVDJfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK291dDpcbitcdGJyZWxzZShiaCk7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBpbnQgZXh0Ml9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbmRpZmYgLS1naXQgYS9mcy9leHQyL3N1cGVyLmMgYi9mcy9leHQyL3N1cGVyLmNcbmluZGV4IDM5OTlmOGYzYjE1NmUzLi5hNDBmNTMwODcyYTQwNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvc3VwZXIuY1xuKysrIGIvZnMvZXh0Mi9zdXBlci5jXG5AQCAtMzYyLDYgKzM2Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQyX3NvcHMgPSB7XG4gXHQuYWxsb2NfaW5vZGVcdD0gZXh0Ml9hbGxvY19pbm9kZSxcbiBcdC5mcmVlX2lub2RlXHQ9IGV4dDJfZnJlZV9pbl9jb3JlX2lub2RlLFxuIFx0LndyaXRlX2lub2RlXHQ9IGV4dDJfd3JpdGVfaW5vZGUsXG4rXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YSxcbiBcdC5ldmljdF9pbm9kZVx0PSBleHQyX2V2aWN0X2lub2RlLFxuIFx0LnB1dF9zdXBlclx0PSBleHQyX3B1dF9zdXBlcixcbiBcdC5zeW5jX2ZzXHQ9IGV4dDJfc3luY19mcyxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uOGYzODhlMTU4ZGFlZWYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0xMTUxLDcgKzExNTEsNyBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbiBcdHN0cnVjdCByd19zZW1hcGhvcmUgaV9kYXRhX3NlbTtcbiBcdHN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7XG4gXHRzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlO1xuLVx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzO1xuK1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICppX21ldGFkYXRhX2JocztcbiBcbiBcdC8qXG4gXHQgKiBGaWxlIGNyZWF0aW9uIHRpbWUuIEl0cyBmdW5jdGlvbiBpcyBzYW1lIGFzIHRoYXQgb2ZcbkBAIC0zMTU1LDYgKzMxNTUsNyBAQCBleHRlcm4gc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbiBcdF9fZXh0NF9pZ2V0KChzYiksIChpbm8pLCAoZmxhZ3MpLCBfX2Z1bmNfXywgX19MSU5FX18pXG4gXG4gZXh0ZXJuIGludCAgZXh0NF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuK2V4dGVybiBpbnQgIGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiBpbnQgIGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBkZW50cnkgKixcbiBcdFx0XHQgc3RydWN0IGlhdHRyICopO1xuIGV4dGVybiB1MzIgIGV4dDRfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuaW5kZXggOWE4YzIyNWYyNzUzMDkuLjc1MjMyNmYzYjY1MzZhIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0X2piZDIuY1xuKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuQEAgLTM1MCw2ICszNTAsMjEgQEAgaW50IF9fZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBleHQ0X2lub2RlX2F0dGFjaF9tbWIoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbitcbitcdC8qXG4rXHQgKiBJdCdzIGRpZmZpY3VsdCB0byBoYW5kbGUgZmFpbHVyZSB3aGVuIG1hcmtpbmcgYnVmZmVyIGRpcnR5IHdpdGhvdXRcbitcdCAqIGxlYXZpbmcgZmlsZXN5c3RlbSBjb3JydXB0ZWRcbitcdCAqL1xuK1x0bW1iID0ga21hbGxvY19vYmooKm1tYiwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpO1xuK1x0bW1iX2luaXQobW1iLCBcdTAwMjZpbm9kZS1cdTAwM2VpX2RhdGEpO1xuK1x0LyogU29tZW9uZSBzd2FwcGVkIGFub3RoZXIgbW1iIGJlZm9yZSB1cz8gKi9cbitcdGlmIChjbXB4Y2hnKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMsIE5VTEwsIG1tYikpXG4rXHRcdGtmcmVlKG1tYik7XG4rfVxuK1xuIGludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcbiBcdFx0XHRcdCBoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG5AQCAtMzg5LDExICs0MDQsMTQgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuIFx0XHRcdFx0XHQgZXJyKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGlub2RlKVxuK1x0XHRpZiAoaW5vZGUpIHtcbitcdFx0XHRpZiAoIUVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpXG4rXHRcdFx0XHRleHQ0X2lub2RlX2F0dGFjaF9tbWIoaW5vZGUpO1xuIFx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGVsc2VcbitcdFx0XHRcdFx0ICAgICAgRVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdH0gZWxzZSB7XG4gXHRcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuK1x0XHR9XG4gXHRcdGlmIChpbm9kZSBcdTAwMjZcdTAwMjYgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcbiBcdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4gXHRcdFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZnN5bmMuYyBiL2ZzL2V4dDQvZnN5bmMuY1xuaW5kZXggOTI0NzI2ZGNjODVmZjUuLjI5OTljMmNjOGZjZmEwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9mc3luYy5jXG4rKysgYi9mcy9leHQ0L2ZzeW5jLmNcbkBAIC02OCw5ICs2OCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9zeW5jX3BhcmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHQgKiB0aHJvdWdoIGV4dDRfZXZpY3RfaW5vZGUoKSkgYW5kIHNvIHdlIGFyZSBzYWZlIHRvIGZsdXNoXG4gXHRcdCAqIG1ldGFkYXRhIGJsb2NrcyBhbmQgdGhlIGlub2RlLlxuIFx0XHQgKi9cbi1cdFx0cmV0ID0gbW1iX3N5bmMoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0YnJlYWs7XG4gXHRcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGJyZWFrO1xuQEAgLTgzLDIyICs4MCwxMSBAQCBzdGF0aWMgaW50IGV4dDRfZnN5bmNfbm9qb3VybmFsKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4gXHRcdFx0XHRpbnQgZGF0YXN5bmMsIGJvb2wgKm5lZWRzX2JhcnJpZXIpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXHUwMDNlZl9pbm9kZTtcbi1cdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7XG4tXHRcdC5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCxcbi1cdFx0Lm5yX3RvX3dyaXRlID0gMCxcbi1cdH07XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gbW1iX2ZzeW5jX25vZmx1c2goZmlsZSwgXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbitcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIEZvcmNlIHdyaXRlb3V0IG9mIGlub2RlIHRhYmxlIGJ1ZmZlciB0byBkaXNrICovXG4tXHRyZXQgPSBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCBcdTAwMjZ3YmMpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdHJldCA9IGV4dDRfc3luY19wYXJlbnQoaW5vZGUpO1xuIFxuIFx0aWYgKHRlc3Rfb3B0KGlub2RlLVx1MDAzZWlfc2IsIEJBUlJJRVIpKVxuQEAgLTE1Niw2ICsxNDIsMTAgQEAgaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbiBcdGlmIChzYl9yZG9ubHkoaW5vZGUtXHUwMDNlaV9zYikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0cmV0ID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0aWYgKCFFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbCkge1xuIFx0XHRyZXQgPSBleHQ0X2ZzeW5jX25vam91cm5hbChmaWxlLCBzdGFydCwgZW5kLCBkYXRhc3luYyxcbiBcdFx0XHRcdFx0ICAgXHUwMDI2bmVlZHNfYmFycmllcik7XG5AQCAtMTY0LDEwICsxNTQsNiBAQCBpbnQgZXh0NF9zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdC8qXG4gXHQgKiAgVGhlIGNhbGxlcidzIGZpbGVtYXBfZmRhdGF3cml0ZSgpL3dhaXQgd2lsbCBzeW5jIHRoZSBkYXRhLlxuIFx0ICogIE1ldGFkYXRhIGlzIGluIHRoZSBqb3VybmFsLCB3ZSB3YWl0IGZvciBwcm9wZXIgdHJhbnNhY3Rpb24gdG9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi5iNjFlZTc1ZWNiZGYxYSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTk1LDkgKzE5NSw4IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShpbm9kZSwgXCJkYXRhIHdpbGwgYmUgbG9zdFwiKTtcbiBcbiBcdFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhKTtcbi1cdFx0LyogQXZvaWQgbWJhbGxvYyBzcGVjaWFsIGlub2RlIHdoaWNoIGhhcyBubyBwcm9wZXIgaW9wcyAqL1xuLVx0XHRpZiAoIUVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKVxuLVx0XHRcdG1tYl9zeW5jKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRpZiAoRVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2JocylcbitcdFx0XHRtbWJfc3luYyhFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdFx0Z290byBub19kZWxldGU7XG4gXHR9XG4gXG5AQCAtMzQ1Miw2ICszNDUxLDcgQEAgc3RhdGljIGJvb2wgZXh0NF9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IHdhaXQpXG4gc3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdGpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsO1xuK1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XG4gXG4gXHRpZiAoam91cm5hbCkge1xuIFx0XHRpZiAoamJkMl90cmFuc2FjdGlvbl9jb21taXR0ZWQoam91cm5hbCxcbkBAIC0zNDYyLDggKzM0NjIsOSBAQCBzdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuK1x0bW1iID0gUkVBRF9PTkNFKEVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0LyogQW55IG1ldGFkYXRhIGJ1ZmZlcnMgdG8gd3JpdGU/ICovXG4tXHRpZiAobW1iX2hhc19idWZmZXJzKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpKVxuK1x0aWYgKG1tYiBcdTAwMjZcdTAwMjYgbW1iX2hhc19idWZmZXJzKG1tYikpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0cmV0dXJuIGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IElfRElSVFlfREFUQVNZTkM7XG4gfVxuQEAgLTU4MzgsMjQgKzU4MzksMzYgQEAgaW50IGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdGVyciA9IGV4dDRfZmNfY29tbWl0KEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsLFxuIFx0XHRcdFx0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9zeW5jX3RpZCk7XG4gXHR9IGVsc2Uge1xuLVx0XHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4rXHRcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuK1x0fVxuK1x0cmV0dXJuIGVycjtcbit9XG4gXG4tXHRcdGVyciA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jX25vaW5tZW0oaW5vZGUsIFx1MDAyNmlsb2MpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHRcdC8qXG4tXHRcdCAqIHN5bmMoMikgd2lsbCBmbHVzaCB0aGUgd2hvbGUgYnVmZmVyIGNhY2hlLiBObyBuZWVkIHRvIGRvXG4tXHRcdCAqIGl0IGhlcmUgc2VwYXJhdGVseSBmb3IgZWFjaCBpbm9kZS5cbi1cdFx0ICovXG4tXHRcdGlmICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMIFx1MDAyNlx1MDAyNiAhd2JjLVx1MDAzZWZvcl9zeW5jKVxuLVx0XHRcdHN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpO1xuLVx0XHRpZiAoYnVmZmVyX3JlcShpbG9jLmJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShpbG9jLmJoKSkge1xuLVx0XHRcdGV4dDRfZXJyb3JfaW5vZGVfYmxvY2soaW5vZGUsIGlsb2MuYmgtXHUwMDNlYl9ibG9ja25yLCBFSU8sXG4tXHRcdFx0XHRcdCAgICAgICBcIklPIGVycm9yIHN5bmNpbmcgaW5vZGVcIik7XG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdFx0fVxuLVx0XHRicmVsc2UoaWxvYy5iaCk7XG4raW50IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbit7XG4rXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4rXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbitcdGludCBlcnI7XG4rXG4rXHQvKiBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpbiBub2pvdXJuYWwgbW9kZSAqL1xuK1x0aWYgKFdBUk5fT05fT05DRShFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbCkpXG4rXHRcdHJldHVybiAtRUZTQ09SUlVQVEVEO1xuK1xuK1x0ZXJyID0gX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShpbm9kZSwgXHUwMDI2aWxvYyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0c3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7XG4rXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGlsb2MuYmgpKSB7XG4rXHRcdGV4dDRfZXJyb3JfaW5vZGVfYmxvY2soaW5vZGUsIGlsb2MuYmgtXHUwMDNlYl9ibG9ja25yLCBFSU8sXG4rXHRcdFx0XHQgICAgICAgXCJJTyBlcnJvciBzeW5jaW5nIGlub2RlXCIpO1xuK1x0XHRlcnIgPSAtRUlPO1xuK1x0XHRnb3RvIG91dDtcbiBcdH1cbitcdG1tYiA9IFJFQURfT05DRShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdGlmIChtbWIpXG4rXHRcdGVyciA9IG1tYl9zeW5jKG1tYik7XG4rb3V0OlxuK1x0YnJlbHNlKGlsb2MuYmgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uOTBkNmQ2Yjg4NjczMDIgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTE0MzAsNyArMTQzMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdElOSVRfV09SSyhcdTAwMjZlaS1cdTAwM2VpX3Jzdl9jb252ZXJzaW9uX3dvcmssIGV4dDRfZW5kX2lvX3Jzdl93b3JrKTtcbiBcdGV4dDRfZmNfaW5pdF9pbm9kZShcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbi1cdG1tYl9pbml0KFx1MDAyNmVpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLCBcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUuaV9kYXRhKTtcbitcdGVpLVx1MDAzZWlfbWV0YWRhdGFfYmhzID0gTlVMTDtcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiBcdGxvY2tkZXBfc2V0X3N1YmNsYXNzKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0sIElfREFUQV9TRU1fTk9STUFMKTtcbiAjZW5kaWZcbkBAIC0xNDUxLDYgKzE0NTEsNyBAQCBzdGF0aWMgaW50IGV4dDRfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHN0YXRpYyB2b2lkIGV4dDRfZnJlZV9pbl9jb3JlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0ZnNjcnlwdF9mcmVlX2lub2RlKGlub2RlKTtcbitcdGtmcmVlKEVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNihFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfbGlzdCkpKSB7XG4gXHRcdHByX3dhcm4oXCIlczogaW5vZGUgJWxsdSBzdGlsbCBpbiBmYyBsaXN0XCIsXG4gXHRcdFx0X19mdW5jX18sIGlub2RlLVx1MDAzZWlfaW5vKTtcbkBAIC0xNTMwLDggKzE1MzEsOCBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZClcbiB2b2lkIGV4dDRfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRleHQ0X2ZjX2RlbChpbm9kZSk7XG4tXHRpZiAoIUVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKVxuLVx0XHRtbWJfaW52YWxpZGF0ZShcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKVxuK1x0XHRtbWJfaW52YWxpZGF0ZShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdGNsZWFyX2lub2RlKGlub2RlKTtcbiBcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4gXHQvKlxuQEAgLTE2MDUsOSArMTYwNiwxMyBAQCBzdGF0aWMgaW50IGV4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcbiBcdFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMXG4gXHR9O1xuK1x0aW50IHJldDtcbiBcbiBcdHRyYWNlX2V4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShpbm9kZSk7XG4tXHRyZXR1cm4gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgXHUwMDI2d2JjKTtcbitcdHJldCA9IGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsIFx1MDAyNndiYyk7XG4rXHRpZiAoIXJldClcbitcdFx0cmV0ID0gZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCBcdTAwMjZ3YmMpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19RVU9UQVxuQEAgLTE2NjQsNiArMTY2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7XG4gXHQuZnJlZV9pbm9kZVx0PSBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC5kZXN0cm95X2lub2RlXHQ9IGV4dDRfZGVzdHJveV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBleHQ0X3dyaXRlX2lub2RlLFxuK1x0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEsXG4gXHQuZGlydHlfaW5vZGVcdD0gZXh0NF9kaXJ0eV9pbm9kZSxcbiBcdC5kcm9wX2lub2RlXHQ9IGV4dDRfZHJvcF9pbm9kZSxcbiBcdC5ldmljdF9pbm9kZVx0PSBleHQ0X2V2aWN0X2lub2RlLFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9kaXIuYyBiL2ZzL2ZhdC9kaXIuY1xuaW5kZXggNGY2ZjQyZjMzNjEzZGYuLmQzM2JmMzRiZGNlNzVmIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2Rpci5jXG4rKysgYi9mcy9mYXQvZGlyLmNcbkBAIC0xMDI4LDggKzEwMjgsNiBAQCBzdGF0aWMgaW50IF9fZmF0X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCBsb2ZmX3QgcG9zLCBpbnQgbnJfc2xvdHMpXG4gXHRcdFx0bnJfc2xvdHMtLTtcbiBcdFx0fVxuIFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNk1TRE9TX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdFx0ZXJyID0gc3luY19kaXJ0eV9idWZmZXIoYmgpO1xuIFx0XHRicmVsc2UoYmgpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTEwNjMsOCArMTA2MSw2IEBAIGludCBmYXRfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBmYXRfc2xvdF9pbmZvICpzaW5mbylcbiBcdFx0bnJfc2xvdHMtLTtcbiBcdH1cbiBcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2TVNET1NfSShkaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbiBcdGJyZWxzZShiaCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTEwODQsMTAgKzEwODAsOSBAQCBpbnQgZmF0X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZmF0X3Nsb3RfaW5mbyAqc2luZm8pXG4gXHR9XG4gXG4gXHRmYXRfdHJ1bmNhdGVfdGltZShkaXIsIE5VTEwsIEZBVF9VUERBVEVfQVRJTUUgfCBGQVRfVVBEQVRFX0NNVElNRSk7XG4rXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4gXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuLVx0XHQodm9pZClmYXRfc3luY19pbm9kZShkaXIpO1xuLVx0ZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4rXHRcdHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMTE5LDIxICsxMTE0LDExIEBAIHN0YXRpYyBpbnQgZmF0X3plcm9lZF9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqZGlyLCBzZWN0b3JfdCBibGtuciwgaW50IG5yX3VzZWQsXG4gXHRcdG4rKztcbiBcdFx0YmxrbnIrKztcbiBcdFx0aWYgKG4gPT0gbnJfYmhzKSB7XG4tXHRcdFx0aWYgKElTX0RJUlNZTkMoZGlyKSkge1xuLVx0XHRcdFx0ZXJyID0gZmF0X3N5bmNfYmhzKGJocywgbik7XG4tXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRnb3RvIGVycm9yO1xuLVx0XHRcdH1cbiBcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuOyBpKyspXG4gXHRcdFx0XHRicmVsc2UoYmhzW2ldKTtcbiBcdFx0XHRuID0gMDtcbiBcdFx0fVxuIFx0fVxuLVx0aWYgKElTX0RJUlNZTkMoZGlyKSkge1xuLVx0XHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGVycm9yO1xuLVx0fVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbjsgaSsrKVxuIFx0XHRicmVsc2UoYmhzW2ldKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmggYi9mcy9mYXQvZmF0LmhcbmluZGV4IDk5ZWQ5MjI4YTY3N2JlLi5kY2I1YmE3NTcwNzNlZCAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9mYXQuaFxuKysrIGIvZnMvZmF0L2ZhdC5oXG5AQCAtNDIxLDcgKzQyMSw2IEBAIGV4dGVybiB2b2lkIGZhdF9kZXRhY2goc3RydWN0IGlub2RlICppbm9kZSk7XG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZmF0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbG9mZl90IGlfcG9zKTtcbiBleHRlcm4gc3RydWN0IGlub2RlICpmYXRfYnVpbGRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSwgbG9mZl90IGlfcG9zKTtcbi1leHRlcm4gaW50IGZhdF9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBpbnQgZmF0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRcdCAgdm9pZCAoKnNldHVwKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKikpO1xuIGV4dGVybiBpbnQgZmF0X2ZpbGxfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGUpO1xuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9maWxlLmMgYi9mcy9mYXQvZmlsZS5jXG5pbmRleCAzN2U3MDQ5YjRjOGM0NC4uMWM4MzVjYTVmMjFhNTEgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvZmlsZS5jXG4rKysgYi9mcy9mYXQvZmlsZS5jXG5AQCAtMTkwLDggKzE5MCw3IEBAIGludCBmYXRfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4gXHRzdHJ1Y3QgaW5vZGUgKmZhdF9pbm9kZSA9IE1TRE9TX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZWZhdF9pbm9kZTtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxwLCBcdTAwMjZNU0RPU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbitcdGVyciA9IHNpbXBsZV9mc3luY19ub2ZsdXNoKGZpbHAsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5AQCAtMzMyLDE1ICszMzEsMTUgQEAgc3RhdGljIGludCBmYXRfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc2tpcClcbiBcdH1cbiBcdE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfYXR0cnMgfD0gQVRUUl9BUkNIO1xuIFx0ZmF0X3RydW5jYXRlX3RpbWUoaW5vZGUsIE5VTEwsIEZBVF9VUERBVEVfQ01USU1FKTtcbitcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0aWYgKHdhaXQpIHtcbi1cdFx0ZXJyID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xuK1x0XHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfc3RhcnQgPSBpX3N0YXJ0O1xuIFx0XHRcdE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbG9nc3RhcnQgPSBpX2xvZ3N0YXJ0O1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdH1cbiBcbiBcdC8qIFdyaXRlIGEgbmV3IEVPRiwgYW5kIGdldCB0aGUgcmVtYWluaW5nIGNsdXN0ZXIgY2hhaW4gZm9yIGZyZWVpbmcuICovXG4gXHRpZiAoc2tpcCkge1xuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9pbm9kZS5jIGIvZnMvZmF0L2lub2RlLmNcbmluZGV4IDNhYTUyNDgxYWQ1Y2YzLi5jNGI0Y2NhYTA5MWFhNyAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9pbm9kZS5jXG4rKysgYi9mcy9mYXQvaW5vZGUuY1xuQEAgLTYyMyw3ICs2MjMsMzcgQEAgc3RydWN0IGlub2RlICpmYXRfYnVpbGRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcbiBFWFBPUlRfU1lNQk9MX0dQTChmYXRfYnVpbGRfaW5vZGUpO1xuIFxuLXN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpO1xuK3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4rXG4rc3RhdGljIGludCBmYXRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4re1xuK1x0c3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSA9IE1TRE9TX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbitcdGxvZmZfdCBpX3BvcztcbitcdHNlY3Rvcl90IGJsb2NrbnI7XG4rXHRpbnQgb2Zmc2V0O1xuK1xuK1x0aWYgKGlub2RlLVx1MDAzZWlfaW5vID09IE1TRE9TX1JPT1RfSU5PKVxuK1x0XHRyZXR1cm4gMDtcbitcdGlfcG9zID0gZmF0X2lfcG9zX3JlYWQoc2JpLCBpbm9kZSk7XG4rXHRpZiAoIWlfcG9zKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZhdF9nZXRfYmxrbnJfb2Zmc2V0KHNiaSwgaV9wb3MsIFx1MDAyNmJsb2NrbnIsIFx1MDAyNm9mZnNldCk7XG4rXHRiaCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrX25vbmF0b21pYyhpbm9kZS1cdTAwM2VpX3NiLCBibG9ja25yKTtcbitcdC8qXG4rXHQgKiBCdWZmZXIgYWxyZWFkeSB3cml0dGVuPyBXZSBsZWF2ZSBidWZmZXJfZGlydHkgY2hlY2sgZm9yXG4rXHQgKiBzeW5jX2RpcnR5X2J1ZmZlcigpIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGggb25nb2luZyBJTy5cbitcdCAqL1xuK1x0aWYgKCFiaCB8fCAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuK1x0XHRicmVsc2UoYmgpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbitcdGJyZWxzZShiaCk7XG4rXHRyZXR1cm4gbW1iX3N5bmMoXHUwMDI2TVNET1NfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK31cbiBcbiBzdGF0aWMgdm9pZCBmYXRfZnJlZV9lb2ZibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG5AQCAtNjQwLDcgKzY3MCwxMyBAQCBzdGF0aWMgdm9pZCBmYXRfZnJlZV9lb2ZibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0ICogYW55IGNvcnJ1cHRpb24gb24gdGhlIG5leHQgYWNjZXNzIHRvIHRoZSBjbHVzdGVyXG4gXHRcdCAqIGNoYWluIGZvciB0aGUgZmlsZS5cbiBcdFx0ICovXG4tXHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XG4rXHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlKTtcbitcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKSB7XG4rXHRcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcbitcdFx0XHRcdC5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCxcbitcdFx0XHR9O1xuK1x0XHRcdGVyciA9IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCBcdTAwMjZ3YmMpO1xuK1x0XHR9XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRmYXRfbXNnKGlub2RlLVx1MDAzZWlfc2IsIEtFUk5fV0FSTklORywgXCJGYWlsZWQgdG8gXCJcbiBcdFx0XHRcdFx0XCJ1cGRhdGUgb24gZGlzayBpbm9kZSBmb3IgdW51c2VkIFwiXG5AQCAtODU0LDcgKzg5MCw3IEBAIHN0YXRpYyBpbnQgZmF0X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcbitzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4gXHRzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0Ioc2IpO1xuQEAgLTg2Myw3ICs4OTksNyBAQCBzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxuIFx0c3RydWN0IHRpbWVzcGVjNjQgbXRpbWU7XG4gXHRsb2ZmX3QgaV9wb3M7XG4gXHRzZWN0b3JfdCBibG9ja25yO1xuLVx0aW50IGVyciwgb2Zmc2V0O1xuK1x0aW50IG9mZnNldDtcbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX2lubyA9PSBNU0RPU19ST09UX0lOTylcbiBcdFx0cmV0dXJuIDA7XG5AQCAtOTA3LDExICs5NDMsOSBAQCBzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpLVx1MDAzZWlub2RlX2hhc2hfbG9jayk7XG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRlcnIgPSAwO1xuLVx0aWYgKHdhaXQpXG4tXHRcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbiBcdGJyZWxzZShiaCk7XG4tXHRyZXR1cm4gZXJyO1xuK1x0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBmYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG5AQCAtOTI1LDIzICs5NTksMTcgQEAgc3RhdGljIGludCBmYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdGVyciA9IGZhdF9jbHVzdGVyc19mbHVzaChzYik7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZNU0RPU19TQihzYiktXHUwMDNlc19sb2NrKTtcbiBcdH0gZWxzZVxuLVx0XHRlcnIgPSBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgd2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7XG4rXHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdHJldHVybiBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgMSk7XG4tfVxuLVxuLUVYUE9SVF9TWU1CT0xfR1BMKGZhdF9zeW5jX2lub2RlKTtcbi1cbiBzdGF0aWMgaW50IGZhdF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZmF0X3NvcHMgPSB7XG4gXHQuYWxsb2NfaW5vZGVcdD0gZmF0X2FsbG9jX2lub2RlLFxuIFx0LmZyZWVfaW5vZGVcdD0gZmF0X2ZyZWVfaW5vZGUsXG4gXHQud3JpdGVfaW5vZGVcdD0gZmF0X3dyaXRlX2lub2RlLFxuK1x0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBmYXRfc3luY19pbm9kZV9tZXRhZGF0YSxcbiBcdC5ldmljdF9pbm9kZVx0PSBmYXRfZXZpY3RfaW5vZGUsXG4gXHQucHV0X3N1cGVyXHQ9IGZhdF9wdXRfc3VwZXIsXG4gXHQuc3RhdGZzXHRcdD0gZmF0X3N0YXRmcyxcbmRpZmYgLS1naXQgYS9mcy9mYXQvbWlzYy5jIGIvZnMvZmF0L21pc2MuY1xuaW5kZXggMzAyN2VmNTNhZjIxNGMuLmJlMThmNmI1ODE5YmE3IDEwMDY0NFxuLS0tIGEvZnMvZmF0L21pc2MuY1xuKysrIGIvZnMvZmF0L21pc2MuY1xuQEAgLTE0NiwxNiArMTQ2LDE3IEBAIGludCBmYXRfY2hhaW5fYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZGNsdXMsIGludCBucl9jbHVzdGVyKVxuIFx0fSBlbHNlIHtcbiBcdFx0TVNET1NfSShpbm9kZSktXHUwMDNlaV9zdGFydCA9IG5ld19kY2x1cztcbiBcdFx0TVNET1NfSShpbm9kZSktXHUwMDNlaV9sb2dzdGFydCA9IG5ld19kY2x1cztcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRcdC8qXG4gXHRcdCAqIFNpbmNlIGdlbmVyaWNfd3JpdGVfc3luYygpIHN5bmNocm9uaXplcyByZWd1bGFyIGZpbGVzIGxhdGVyLFxuIFx0XHQgKiB3ZSBzeW5jIGhlcmUgb25seSBkaXJlY3Rvcmllcy5cbiBcdFx0ICovXG4gXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IElTX0RJUlNZTkMoaW5vZGUpKSB7XG4tXHRcdFx0cmV0ID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xuK1x0XHRcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0XHRcdGlmIChyZXQpXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHR9IGVsc2Vcbi1cdFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdFx0fVxuK1xuIFx0fVxuIFx0aWYgKG5ld19mY2x1cyAhPSAoaW5vZGUtXHUwMDNlaV9ibG9ja3MgXHUwMDNlXHUwMDNlIChzYmktXHUwMDNlY2x1c3Rlcl9iaXRzIC0gOSkpKSB7XG4gXHRcdGZhdF9mc19lcnJvcl9yYXRlbGltaXQoXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L25hbWVpX21zZG9zLmMgYi9mcy9mYXQvbmFtZWlfbXNkb3MuY1xuaW5kZXggMGZkMjk3MWFkNGIxMzEuLjQ3MmJkODQ3ZWY5Y2JiIDEwMDY0NFxuLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmNcbisrKyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXG5AQCAtMjUyLDEwICsyNTIsOSBAQCBzdGF0aWMgaW50IG1zZG9zX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTtcbitcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbitcdFx0c3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTQ3MywyMSArNDcyLDIxIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXG4gXHRcdFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyBcdTAwMjY9IH5BVFRSX0hJRERFTjtcbitcdFx0XHRtYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7XG4gXHRcdFx0aWYgKElTX0RJUlNZTkMob2xkX2RpcikpIHtcbi1cdFx0XHRcdGVyciA9IGZhdF9zeW5jX2lub2RlKG9sZF9pbm9kZSk7XG4rXHRcdFx0XHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9pbm9kZSwgMSk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRcdE1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX2F0dHJzID0gb2xkX2F0dHJzO1xuIFx0XHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRcdH1cbi1cdFx0XHR9IGVsc2Vcbi1cdFx0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcbitcdFx0XHR9XG4gXG4gXHRcdFx0aW5vZGVfaW5jX2l2ZXJzaW9uKG9sZF9kaXIpO1xuIFx0XHRcdGZhdF90cnVuY2F0ZV90aW1lKG9sZF9kaXIsIE5VTEwsIEZBVF9VUERBVEVfQ01USU1FKTtcbitcdFx0XHRtYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpO1xuIFx0XHRcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKVxuLVx0XHRcdFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUob2xkX2Rpcik7XG4rXHRcdFx0XHRzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9kaXIsIDEpO1xuIFx0XHRcdGVsc2Vcbi1cdFx0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcdH1cbkBAIC01MTgsMjYgKzUxNywyMSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxuIFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcbiBcdGVsc2VcbiBcdFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgXHUwMDI2PSB+QVRUUl9ISURERU47XG4tXHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xuLVx0XHRlcnIgPSBmYXRfc3luY19pbm9kZShvbGRfaW5vZGUpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXJyb3JfaW5vZGU7XG4tXHR9IGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xuLVxuIFx0aWYgKHVwZGF0ZV9kb3Rkb3QpIHtcbiBcdFx0ZmF0X3NldF9zdGFydChkb3Rkb3RfZGUsIE1TRE9TX0kobmV3X2RpciktXHUwMDNlaV9sb2dzdGFydCk7XG4gXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShkb3Rkb3RfYmgsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0XHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xuLVx0XHRcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXJyb3JfZG90ZG90O1xuLVx0XHR9XG4gXHRcdGRyb3Bfbmxpbmsob2xkX2Rpcik7XG4gXHRcdGlmICghbmV3X2lub2RlKVxuIFx0XHRcdGluY19ubGluayhuZXdfZGlyKTtcbiBcdH1cbitcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcbitcdGlmIChJU19ESVJTWU5DKG5ld19kaXIpKSB7XG4rXHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2lub2RlLCAxKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycm9yX2RvdGRvdDtcbitcdH1cbitcbiBcbiBcdGVyciA9IGZhdF9yZW1vdmVfZW50cmllcyhvbGRfZGlyLCBcdTAwMjZvbGRfc2luZm8pO1x0LyogYW5kIHJlbGVhc2VzIGJoICovXG4gXHRvbGRfc2luZm8uYmggPSBOVUxMO1xuQEAgLTU0NSwxMCArNTM5LDkgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSxcbiBcdFx0Z290byBlcnJvcl9kb3Rkb3Q7XG4gXHRpbm9kZV9pbmNfaXZlcnNpb24ob2xkX2Rpcik7XG4gXHRmYXRfdHJ1bmNhdGVfdGltZShvbGRfZGlyLCBcdTAwMjZ0cywgRkFUX1VQREFURV9DTVRJTUUpO1xuK1x0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKVxuLVx0XHQodm9pZClmYXRfc3luY19pbm9kZShvbGRfZGlyKTtcbi1cdGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbitcdFx0c3luY19pbm9kZV9tZXRhZGF0YShvbGRfZGlyLCAxKTtcbiBcbiBcdGlmIChuZXdfaW5vZGUpIHtcbiBcdFx0ZHJvcF9ubGluayhuZXdfaW5vZGUpO1xuQEAgLTU3MSwxNCArNTY0LDEzIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0XHRjb3JydXB0IHw9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XG4gXHR9XG4tZXJyb3JfaW5vZGU6XG4gXHRmYXRfZGV0YWNoKG9sZF9pbm9kZSk7XG4gXHRmYXRfYXR0YWNoKG9sZF9pbm9kZSwgb2xkX3NpbmZvLmlfcG9zKTtcbiBcdE1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX2F0dHJzID0gb2xkX2F0dHJzO1xuIFx0aWYgKG5ld19pbm9kZSkge1xuIFx0XHRmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTtcbiBcdFx0aWYgKGNvcnJ1cHQpXG4tXHRcdFx0Y29ycnVwdCB8PSBmYXRfc3luY19pbm9kZShuZXdfaW5vZGUpO1xuK1x0XHRcdGNvcnJ1cHQgfD0gc3luY19pbm9kZV9tZXRhZGF0YShuZXdfaW5vZGUsIDEpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogSWYgbmV3IGVudHJ5IHdhcyBub3Qgc2hhcmluZyB0aGUgZGF0YSBjbHVzdGVyLCBpdFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXG5pbmRleCBlOTA5NDQ3ODczZTM2NC4uNzMyYWJmMDcyZmRkM2IgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvbmFtZWlfdmZhdC5jXG4rKysgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXG5AQCAtNjc4LDEwICs2NzgsOSBAQCBzdGF0aWMgaW50IHZmYXRfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcW5hbWUsXG4gXG4gXHQvKiB1cGRhdGUgdGltZXN0YW1wICovXG4gXHRmYXRfdHJ1bmNhdGVfdGltZShkaXIsIHRzLCBGQVRfVVBEQVRFX0NNVElNRSk7XG4rXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4gXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuLVx0XHQodm9pZClmYXRfc3luY19pbm9kZShkaXIpO1xuLVx0ZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4rXHRcdHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbiBjbGVhbnVwOlxuIFx0a2ZyZWUoc2xvdHMpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC05MDQsOSArOTAzLDkgQEAgc3RhdGljIGludCB2ZmF0X2dldF9kb3Rkb3RfZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgsXG4gXG4gc3RhdGljIGludCB2ZmF0X3N5bmNfaXBvcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4tXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuLVx0XHRyZXR1cm4gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xuIFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuK1x0XHRyZXR1cm4gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtOTI1LDEwICs5MjQsOSBAQCBzdGF0aWMgdm9pZCB2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4gXHRpbm9kZV9pbmNfaXZlcnNpb24oZGlyKTtcbiBcdGZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTtcbitcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbitcdFx0c3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbkBAIC0xMDI1LDcgKzEwMjMsNyBAQCBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdGlmIChuZXdfaW5vZGUpIHtcbiBcdFx0ZmF0X2F0dGFjaChuZXdfaW5vZGUsIG5ld19pX3Bvcyk7XG4gXHRcdGlmIChjb3JydXB0KVxuLVx0XHRcdGNvcnJ1cHQgfD0gZmF0X3N5bmNfaW5vZGUobmV3X2lub2RlKTtcbitcdFx0XHRjb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIElmIG5ldyBlbnRyeSB3YXMgbm90IHNoYXJpbmcgdGhlIGRhdGEgY2x1c3RlciwgaXRcbmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jXG5pbmRleCBmZGI4NzY2ZDI3NWExNy4uOWQ5NjM1NzczMWEzZDQgMTAwNjQ0XG4tLS0gYS9mcy9mcy13cml0ZWJhY2suY1xuKysrIGIvZnMvZnMtd3JpdGViYWNrLmNcbkBAIC0xODUxLDYgKzE4NTEsMjIgQEAgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0XHRpZiAocmV0ID09IDApXG4gXHRcdFx0cmV0ID0gZXJyO1xuIFx0fVxuK1xuK1x0LypcbitcdCAqIERvIHdlIG5lZWQgdG8gd2FpdCBmb3IgaW5vZGUgbWV0YWRhdGEgSU8gcG9zc2libHkgc3VibWl0dGVkXG4rXHQgKiBieSBwcmV2aW91cyBXQl9TWU5DX05PTkUgd3JpdGViYWNrP1xuK1x0ICovXG4rXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcdTAwMjZcdTAwMjYgIXdiYy1cdTAwM2Vmb3Jfc3luYyBcdTAwMjZcdTAwMjZcbitcdCAgICBpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX01FVEFEQVRBX1dSSVRFQkFDSykge1xuK1x0XHRpbnQgZXJyO1xuK1xuK1x0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbitcdFx0aW5vZGVfc3RhdGVfY2xlYXIoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbitcdFx0ZXJyID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX29wLVx1MDAzZXN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIHdiYyk7XG4rXHRcdGlmIChyZXQgPT0gMClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXHR9XG4gXHR3YmMtXHUwMDNldW5waW5uZWRfbmV0ZnNfd2IgPSBmYWxzZTtcbiBcdHRyYWNlX3dyaXRlYmFja19zaW5nbGVfaW5vZGUoaW5vZGUsIHdiYywgbnJfdG9fd3JpdGUpO1xuIFx0cmV0dXJuIHJldDtcbkBAIC0xODkyLDE0ICsxOTA4LDE3IEBAIHN0YXRpYyBpbnQgd3JpdGViYWNrX3NpbmdsZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0LypcbiBcdCAqIElmIHRoZSBpbm9kZSBpcyBhbHJlYWR5IGZ1bGx5IGNsZWFuLCB0aGVuIHRoZXJlJ3Mgbm90aGluZyB0byBkby5cbiBcdCAqXG4tXHQgKiBGb3IgZGF0YS1pbnRlZ3JpdHkgc3luY3Mgd2UgYWxzbyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYW55IHBhZ2VzIGFyZVxuLVx0ICogc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkUgd3JpdGViYWNrLiAgSWZcbi1cdCAqIHRoZXJlIGFyZSBhbnkgc3VjaCBwYWdlcywgd2UnbGwgbmVlZCB0byB3YWl0IGZvciB0aGVtLlxuK1x0ICogRm9yIGRhdGEtaW50ZWdyaXR5IHN5bmNzIHdlIGFsc28gbmVlZCB0byBjaGVjayB3aGV0aGVyIGFueSBmb2xpb3Mgb3JcbitcdCAqIG1ldGFkYXRhIGFyZSBzdGlsbCB1bmRlciB3cml0ZWJhY2ssIGUuZy4gZHVlIHRvIHByaW9yIFdCX1NZTkNfTk9ORVxuK1x0ICogd3JpdGViYWNrLiBJZiB0aGVyZSwgd2UnbGwgbmVlZCB0byB3YWl0IGZvciB0aGVtLlxuIFx0ICovXG4tXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9BTEwpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICh3YmMtXHUwMDNlc3luY19tb2RlICE9IFdCX1NZTkNfQUxMIHx8XG4tXHQgICAgICFtYXBwaW5nX3RhZ2dlZChpbm9kZS1cdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSkpXG4tXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZChpbm9kZSkgXHUwMDI2IElfRElSVFlfQUxMKSkge1xuK1x0XHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSAhPSBXQl9TWU5DX0FMTClcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0aWYgKCFtYXBwaW5nX3RhZ2dlZChpbm9kZS1cdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEoaW5vZGVfc3RhdGVfcmVhZChpbm9kZSkgXHUwMDI2IElfTUVUQURBVEFfV1JJVEVCQUNLKSlcbitcdFx0XHRnb3RvIG91dDtcbitcdH1cbiBcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9TWU5DKTtcbiBcdHdiY19hdHRhY2hfYW5kX3VubG9ja19pbm9kZSh3YmMsIGlub2RlKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuY1xuaW5kZXggNWEwZDI3NjM3OWQxM2IuLjU3ZTU5NzFiNjMzMTk3IDEwMDY0NFxuLS0tIGEvZnMvbGliZnMuY1xuKysrIGIvZnMvbGliZnMuY1xuQEAgLTE1NTksOSArMTU1OSwxMCBAQCBpbnQgc2ltcGxlX2ZzeW5jX25vZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0FMTCkpXG4rXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiAoSV9ESVJUWV9BTEwgfCBJX1NZTkMpKSlcbiBcdFx0Z290byBvdXQ7XG4tXHRpZiAoZGF0YXN5bmMgXHUwMDI2XHUwMDI2ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQykpXG4rXHRpZiAoZGF0YXN5bmMgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiAoSV9ESVJUWV9EQVRBU1lOQyB8IElfU1lOQykpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2Rpci5jIGIvZnMvbWluaXgvZGlyLmNcbmluZGV4IDM2MWQyNmQ4N2QyZTJkLi4yY2ExNmY4NDlkNWFjMCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2Rpci5jXG4rKysgYi9mcy9taW5peC9kaXIuY1xuQEAgLTIzLDcgKzIzLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfb3BlcmF0aW9ucyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IG1pbml4X3JlYWRkaXIsXG4tXHQuZnN5bmNcdFx0PSBtaW5peF9mc3luYyxcbitcdC5mc3luY1x0XHQ9IHNpbXBsZV9mc3luYyxcbiB9O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jXG5pbmRleCA4NmU1OTQzY2QyZmY3NC4uMDJhYWJiZGI1ZGVhYTAgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9maWxlLmNcbisrKyBiL2ZzL21pbml4L2ZpbGUuY1xuQEAgLTEwLDEzICsxMCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFwibWluaXguaFwiXG4gXG4taW50IG1pbml4X2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbi17XG4tXHRyZXR1cm4gbW1iX2ZzeW5jKGZpbGUsXG4tXHRcdFx0XHUwMDI2bWluaXhfaShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIC8qXG4gICogV2UgaGF2ZSBtb3N0bHkgTlVMTHMgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIE9LIGZvclxuICAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLlxuQEAgLTI2LDcgKzE5LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQucmVhZF9pdGVyXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4gXHQud3JpdGVfaXRlclx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcbiBcdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbi1cdC5mc3luY1x0XHQ9IG1pbml4X2ZzeW5jLFxuK1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xuaW5kZXggYzMwY2M1OTA2OThkNmYuLjk1MjY3ZDkzZWYzOWRmIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xuKysrIGIvZnMvbWluaXgvaW5vZGUuY1xuQEAgLTI0LDYgKzI0LDggQEBcbiBcbiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbitzdGF0aWMgaW50IG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7XG4gXG4gdm9pZCBfX21pbml4X2Vycm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLFxuQEAgLTEyOCw2ICsxMzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbWluaXhfc29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSBtaW5peF9hbGxvY19pbm9kZSxcbiBcdC5mcmVlX2lub2RlXHQ9IG1pbml4X2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBtaW5peF93cml0ZV9pbm9kZSxcbitcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSxcbiBcdC5ldmljdF9pbm9kZVx0PSBtaW5peF9ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gbWluaXhfcHV0X3N1cGVyLFxuIFx0LnN0YXRmc1x0XHQ9IG1pbml4X3N0YXRmcyxcbkBAIC02MzAsNyArNjMzLDcgQEAgc3RydWN0IGlub2RlICptaW5peF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxuIC8qXG4gICogVGhlIG1pbml4IFYxIGZ1bmN0aW9uIHRvIHN5bmNocm9uaXplIGFuIGlub2RlLlxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4rc3RhdGljIGludCBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4ge1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICogYmg7XG4gXHRzdHJ1Y3QgbWluaXhfaW5vZGUgKiByYXdfaW5vZGU7XG5AQCAtNjM5LDcgKzY0Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXG4gXHRyYXdfaW5vZGUgPSBtaW5peF9WMV9yYXdfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIFx1MDAyNmJoKTtcbiBcdGlmICghcmF3X2lub2RlKVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdFx0cmV0dXJuIC1FSU87XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9tb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfdWlkID0gZnNfaGlnaDJsb3d1aWQoaV91aWRfcmVhZChpbm9kZSkpO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfZ2lkID0gZnNfaGlnaDJsb3dnaWQoaV9naWRfcmVhZChpbm9kZSkpO1xuQEAgLTY1MSwxMyArNjU0LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRlbHNlIGZvciAoaSA9IDA7IGkgXHUwMDNjIDk7IGkrKylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTFfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbitcdGJyZWxzZShiaCk7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKlxuICAqIFRoZSBtaW5peCBWMiBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSBhbiBpbm9kZS5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuK3N0YXRpYyBpbnQgVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoO1xuIFx0c3RydWN0IG1pbml4Ml9pbm9kZSAqIHJhd19pbm9kZTtcbkBAIC02NjYsNyArNjcxLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcbiBcdHJhd19pbm9kZSA9IG1pbml4X1YyX3Jhd19pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBpbm9kZS1cdTAwM2VpX2lubywgXHUwMDI2YmgpO1xuIFx0aWYgKCFyYXdfaW5vZGUpXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0XHRyZXR1cm4gLUVJTztcbiBcdHJhd19pbm9kZS1cdTAwM2VpX21vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGU7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV91aWQgPSBmc19oaWdoMmxvd3VpZChpX3VpZF9yZWFkKGlub2RlKSk7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7XG5AQCAtNjgwLDI5ICs2ODUsNDAgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdGVsc2UgZm9yIChpID0gMDsgaSBcdTAwM2MgMTA7IGkrKylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTJfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbitcdGJyZWxzZShiaCk7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuK3tcbitcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcbitcdFx0cmV0dXJuIFYxX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XG4rXHRyZXR1cm4gVjJfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTtcbit9XG4rXG4rc3RhdGljIGludCBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdGludCBlcnIgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbitcdHZvaWQgKnJhd19pbm9kZTtcbiBcbiBcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcbi1cdFx0YmggPSBWMV9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xuK1x0XHRyYXdfaW5vZGUgPSBtaW5peF9WMV9yYXdfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIFx1MDAyNmJoKTtcbiBcdGVsc2Vcbi1cdFx0YmggPSBWMl9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xuLVx0aWYgKCFiaClcbitcdFx0cmF3X2lub2RlID0gbWluaXhfVjJfcmF3X2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBcdTAwMjZiaCk7XG4rXHRpZiAoIXJhd19pbm9kZSlcbiBcdFx0cmV0dXJuIC1FSU87XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcdTAwMjZcdTAwMjYgYnVmZmVyX2RpcnR5KGJoKSkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbi1cdFx0XHRwcmludGsoXCJJTyBlcnJvciBzeW5jaW5nIG1pbml4IGlub2RlIFslczolMDhsbHhdXFxuXCIsXG4tXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdFx0XHRlcnIgPSAtRUlPO1xuLVx0XHR9XG4rXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4rXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xuK1x0XHRwcmludGsoXCJJTyBlcnJvciBzeW5jaW5nIG1pbml4IGlub2RlIFslczolMDhsbHhdXFxuXCIsXG4rXHRcdFx0aW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2lkLCBpbm9kZS1cdTAwM2VpX2lubyk7XG4rXHRcdGVyciA9IC1FSU87XG4gXHR9XG4tXHRicmVsc2UgKGJoKTtcbitcdGVyciA9IG1tYl9zeW5jKFx1MDAyNm1pbml4X2koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitvdXQ6XG4rXHRicmVsc2UoYmgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2Rpci5jIGIvZnMvdWRmL2Rpci5jXG5pbmRleCBlYmM5ZjZhMzc5ZmUzYS4uNDI1ZTNjMTYyOTM1MDQgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvZGlyLmNcbisrKyBiL2ZzL3VkZi9kaXIuY1xuQEAgLTE1Nyw2ICsxNTcsNiBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9kaXJfb3BlcmF0aW9ucyA9IHtcbiBcdC5yZWFkXHRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHRcdD0gdWRmX3JlYWRkaXIsXG4gXHQudW5sb2NrZWRfaW9jdGxcdFx0PSB1ZGZfaW9jdGwsXG4tXHQuZnN5bmNcdFx0XHQ9IHVkZl9mc3luYyxcbitcdC5mc3luY1x0XHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNldGxlYXNlXHRcdD0gZ2VuZXJpY19zZXRsZWFzZSxcbiB9O1xuZGlmZiAtLWdpdCBhL2ZzL3VkZi9maWxlLmMgYi9mcy91ZGYvZmlsZS5jXG5pbmRleCBmN2YxNDIyZGUzMGZhNC4uNTdkMTE2MDZhMmE3NzYgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvZmlsZS5jXG4rKysgYi9mcy91ZGYvZmlsZS5jXG5AQCAtMTk4LDEzICsxOTgsNiBAQCBzdGF0aWMgaW50IHVkZl9maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCB1ZGZfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHJldHVybiBtbWJfZnN5bmMoZmlsZSxcbi1cdFx0XHRcdTAwMjZVREZfSShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5yZWFkX2l0ZXJcdFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuIFx0LnVubG9ja2VkX2lvY3RsXHRcdD0gdWRmX2lvY3RsLFxuQEAgLTIxMiw3ICsyMDUsNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubW1hcFx0XHRcdD0gdWRmX2ZpbGVfbW1hcCxcbiBcdC53cml0ZV9pdGVyXHRcdD0gdWRmX2ZpbGVfd3JpdGVfaXRlcixcbiBcdC5yZWxlYXNlXHRcdD0gdWRmX3JlbGVhc2VfZmlsZSxcbi1cdC5mc3luY1x0XHRcdD0gdWRmX2ZzeW5jLFxuK1x0LmZzeW5jXHRcdFx0PSBzaW1wbGVfZnN5bmMsXG4gXHQuc3BsaWNlX3JlYWRcdFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuIFx0LnNwbGljZV93cml0ZVx0XHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4gXHQubGxzZWVrXHRcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuQEAgLTI1Myw2ICsyNDYsOCBAQCBzdGF0aWMgaW50IHVkZl9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXG4gXHRzZXRhdHRyX2NvcHkoXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIGF0dHIpO1xuIFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHRpZiAoSVNfU1lOQyhpbm9kZSkpXG4rXHRcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmNcbmluZGV4IDY3YmNmODM3NThjOGZiLi5kOTkxYTY3MWMwYTY5MSAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9pbm9kZS5jXG4rKysgYi9mcy91ZGYvaW5vZGUuY1xuQEAgLTUxLDggKzUxLDYgQEBcbiBzdHJ1Y3QgdWRmX21hcF9ycTtcbiBcbiBzdGF0aWMgdW1vZGVfdCB1ZGZfY29udmVydF9wZXJtaXNzaW9ucyhzdHJ1Y3QgZmlsZUVudHJ5ICopO1xuLXN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcbi1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIHN0YXRpYyBpbnQgdWRmX2FsbG9jX2lfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzaXplX3Qgc2l6ZSk7XG4gc3RhdGljIGludCBpbm9kZV9nZXRibGsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHVkZl9tYXBfcnEgKm1hcCk7XG4gc3RhdGljIGludCB1ZGZfaW5zZXJ0X2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24sXG5AQCAtMTQyLDcgKzE0MCw5IEBAIHZvaWQgdWRmX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdGlmICghaW5vZGUtXHUwMDNlaV9ubGluaykge1xuIFx0XHRcdHdhbnRfZGVsZXRlID0gMTtcbiBcdFx0XHR1ZGZfc2V0c2l6ZShpbm9kZSwgMCk7XG4tXHRcdFx0dWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgSVNfU1lOQyhpbm9kZSkpO1xuK1x0XHRcdHVkZl93cml0ZV9pbm9kZShpbm9kZSwgTlVMTCk7XG4rXHRcdFx0aWYgKElTX1NZTkMoaW5vZGUpKVxuK1x0XHRcdFx0dWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIE5VTEwpO1xuIFx0XHR9XG4gXHRcdGlmIChpaW5mby1cdTAwM2VpX2FsbG9jX3R5cGUgIT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgaW5vZGUtXHUwMDNlaV9zaXplICE9IGlpbmZvLVx1MDAzZWlfbGVuRXh0ZW50cykge1xuQEAgLTkzNiw5ICs5MzYsMTAgQEAgc3RhdGljIGludCBpbm9kZV9nZXRibGsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHVkZl9tYXBfcnEgKm1hcClcbiBcdGlpbmZvLVx1MDAzZWlfbmV4dF9hbGxvY19nb2FsID0gbmV3YmxvY2tudW0gKyAxO1xuIFx0aW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpO1xuIFxuLVx0aWYgKElTX1NZTkMoaW5vZGUpKVxuLVx0XHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XG4tXHRlbHNlXG4rXHRpZiAoSVNfU1lOQyhpbm9kZSkpIHtcbitcdFx0dWRmX3dyaXRlX2lub2RlKGlub2RlLCBOVUxMKTtcbitcdFx0dWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIE5VTEwpO1xuK1x0fSBlbHNlXG4gXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0cmV0ID0gMDtcbiBvdXRfZnJlZTpcbkBAIC0xMzI2LDEwICsxMzI3LDcgQEAgaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKVxuIFx0fVxuIHVwZGF0ZV90aW1lOlxuIFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGlub2RlLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSkpO1xuLVx0aWYgKElTX1NZTkMoaW5vZGUpKVxuLVx0XHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNzA1LDE0ICsxNzAzLDI4IEBAIHZvaWQgdWRmX3VwZGF0ZV9leHRyYV9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bW9kZV90IG1vZGUpXG4gXHRcdGlpbmZvLVx1MDAzZWlfZXh0cmFQZXJtcyB8PSBGRV9QRVJNX09fREVMRVRFO1xuIH1cbiBcbi1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuK2ludCB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4tXHRyZXR1cm4gdWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgd2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7XG4tfVxuK1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbitcdGludCBlcnIgPSAwO1xuIFxuLXN0YXRpYyBpbnQgdWRmX3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi17XG4tXHRyZXR1cm4gdWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgMSk7XG4rXHRiaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLFxuK1x0XHRcdHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLVx1MDAzZWlfc2IsXG4rXHRcdFx0XHRcdCAgXHUwMDI2VURGX0koaW5vZGUpLVx1MDAzZWlfbG9jYXRpb24sIDApKTtcbitcdGlmICghYmgpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuK1x0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuK1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbitcdFx0dWRmX3dhcm4oaW5vZGUtXHUwMDNlaV9zYiwgXCJJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxcblwiLFxuK1x0XHRcdCBpbm9kZS1cdTAwM2VpX2lubyk7XG4rXHRcdGVyciA9IC1FSU87XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZXJyID0gbW1iX3N5bmMoXHUwMDI2VURGX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitvdXQ6XG4rXHRicmVsc2UoYmgpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdWRmX2FkanVzdF90aW1lKHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8sIHN0cnVjdCB0aW1lc3BlYzY0IHRpbWUpXG5AQCAtMTcyMyw3ICsxNzM1LDcgQEAgc3RhdGljIHZvaWQgdWRmX2FkanVzdF90aW1lKHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8sIHN0cnVjdCB0aW1lc3BlYzY0IHRpbWVcbiBcdFx0aWluZm8tXHUwMDNlaV9jcnRpbWUgPSB0aW1lO1xuIH1cbiBcbi1zdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXG4raW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbiBcdHN0cnVjdCBmaWxlRW50cnkgKmZlO1xuQEAgLTE3MzIsNyArMTc0NCw2IEBAIHN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcbiBcdHVpbnQzMl90IHVkZnBlcm1zO1xuIFx0dWludDE2X3QgaWNiZmxhZ3M7XG4gXHR1aW50MTZfdCBjcmNsZW47XG4tXHRpbnQgZXJyID0gMDtcbiBcdHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0dW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cyA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbiBcdHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSShpbm9kZSk7XG5AQCAtMTkzNywxNyArMTk0OCwxMCBAQCBzdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXG4gXG4gXHQvKiB3cml0ZSB0aGUgZGF0YSBibG9ja3MgKi9cbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdGlmIChkb19zeW5jKSB7XG4tXHRcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbi1cdFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbi1cdFx0XHR1ZGZfd2Fybihpbm9kZS1cdTAwM2VpX3NiLCBcIklPIGVycm9yIHN5bmNpbmcgdWRmIGlub2RlIFslMDhsbHhdXFxuXCIsXG4tXHRcdFx0XHQgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLVx0XHRcdGVyciA9IC1FSU87XG4tXHRcdH1cbi1cdH1cbiBcdGJyZWxzZShiaCk7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbiBcbi1cdHJldHVybiBlcnI7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RydWN0IGlub2RlICpfX3VkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqaW5vLFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9zdXBlci5jIGIvZnMvdWRmL3N1cGVyLmNcbmluZGV4IDdiODVmNWEyYjc5ZmM0Li5lN2U5ZjJhMGQyNGU4MCAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9zdXBlci5jXG4rKysgYi9mcy91ZGYvc3VwZXIuY1xuQEAgLTIxMSw2ICsyMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdWRmX3NiX29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSB1ZGZfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSB1ZGZfZnJlZV9pbl9jb3JlX2lub2RlLFxuIFx0LndyaXRlX2lub2RlXHQ9IHVkZl93cml0ZV9pbm9kZSxcbitcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEsXG4gXHQuZXZpY3RfaW5vZGVcdD0gdWRmX2V2aWN0X2lub2RlLFxuIFx0LnB1dF9zdXBlclx0PSB1ZGZfcHV0X3N1cGVyLFxuIFx0LnN5bmNfZnNcdD0gdWRmX3N5bmNfZnMsXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZmRlY2wuaCBiL2ZzL3VkZi91ZGZkZWNsLmhcbmluZGV4IDZkOTUxZTA1YzAwNDZhLi44NmRjMmQ2YTJlZjFiOCAxMDA2NDRcbi0tLSBhL2ZzL3VkZi91ZGZkZWNsLmhcbisrKyBiL2ZzL3VkZi91ZGZkZWNsLmhcbkBAIC0xMzcsNyArMTM3LDYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWRmX2Rpcl9lbnRyeV9sZW4oc3RydWN0IGZpbGVJZGVudERlc2MgKmNmaSlcbiBcbiAvKiBmaWxlLmMgKi9cbiBleHRlcm4gbG9uZyB1ZGZfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTtcbi1pbnQgdWRmX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYyk7XG4gXG4gLyogaW5vZGUuYyAqL1xuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLFxuQEAgLTE1OCw2ICsxNTcsNyBAQCBleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfYnJlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdWRmX3BibGtfdCBibG9jayxcbiBleHRlcm4gaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqLCBsb2ZmX3QpO1xuIGV4dGVybiB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XG4gZXh0ZXJuIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbitpbnQgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiBleHRlcm4gaW50IGlub2RlX2JtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdCAgICAgIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKnBvcywgc3RydWN0IGtlcm5lbF9sYl9hZGRyICplbG9jLFxuIFx0XHQgICAgICB1aW50MzJfdCAqZWxlbiwgc2VjdG9yX3QgKm9mZnNldCwgaW50OF90ICpldHlwZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG5pbmRleCA4YjIzYmM5YTI0NGNiMy4uZmQyYzcxMTVjMDU0MjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuQEAgLTIxMCwxMCArMjEwLDYgQEAgdm9pZCBiaF9lbmRfYXN5bmNfd3JpdGUoc3RydWN0IGJpbyAqYmlvKTtcbiBcbiAvKiBUaGluZ3MgdG8gZG8gd2l0aCBtZXRhZGF0YSBidWZmZXJzIGxpc3QgKi9cbiB2b2lkIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYik7XG4taW50IG1tYl9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcbi1cdFx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKTtcbi1pbnQgbW1iX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcbi1cdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYyk7XG4gdm9pZCBjbGVhbl9iZGV2X2FsaWFzZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdFx0c2VjdG9yX3QgbGVuKTtcbiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYW5fYmRldl9iaF9hbGlhcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxuaW5kZXggZDEwODk3YjNhMWUzNTAuLmIxN2UwZDQyMDcxZGY4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC03NDAsNyArNzQwLDggQEAgZW51bSBpbm9kZV9zdGF0ZV9mbGFnc19lbnVtIHtcbiBcdElfQ1JFQVRJTkdcdFx0PSAoMVUgXHUwMDNjXHUwMDNjIDE1KSxcbiBcdElfRE9OVENBQ0hFXHRcdD0gKDFVIFx1MDAzY1x1MDAzYyAxNiksXG4gXHRJX1NZTkNfUVVFVUVEXHRcdD0gKDFVIFx1MDAzY1x1MDAzYyAxNyksXG4tXHRJX1BJTk5JTkdfTkVURlNfV0JcdD0gKDFVIFx1MDAzY1x1MDAzYyAxOClcbitcdElfUElOTklOR19ORVRGU19XQlx0PSAoMVUgXHUwMDNjXHUwMDNjIDE4KSxcbitcdElfTUVUQURBVEFfV1JJVEVCQUNLXHQ9ICgxVSBcdTAwM2NcdTAwM2MgMTkpLFxuIH07XG4gXG4gI2RlZmluZSBJX0RJUlRZX0lOT0RFIChJX0RJUlRZX1NZTkMgfCBJX0RJUlRZX0RBVEFTWU5DKVxuQEAgLTIyMTMsNiArMjIxNCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0eV9zeW5jKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIElfRElSVFlfU1lOQyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rXHRpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rfVxuK1xuIC8qXG4gICogcmV0dXJucyB0aGUgcmVmY291bnQgb24gdGhlIGlub2RlLiBpdCBjYW4gY2hhbmdlIGFyYml0cmFyaWx5LlxuICAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaFxuaW5kZXggZWY3OTQxZTlkYzc5YWMuLjE3MDU2MWU4ZjJlMmM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcbkBAIC04Niw2ICs4Niw4IEBAIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHtcbiBcdHZvaWQgKCpmcmVlX2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcdHZvaWQgKCpkaXJ0eV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKTtcbiBcdGludCAoKndyaXRlX2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XG4rXHRpbnQgKCpzeW5jX2lub2RlX21ldGFkYXRhKShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuIFx0aW50ICgqZHJvcF9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXHR2b2lkICgqZXZpY3RfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFx0dm9pZCAoKnB1dF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOTo1MTowOS43MDIzNzczMTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjU1NDYxNTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldDogYHN5bmNfaW5vZGVfbWV0YWRhdGFgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggdGhhdCdzIGludHJvZHVjaW5nIGBzeW5jX2lub2RlX21ldGFkYXRhYCBpbnRvIGBzdXBlcl9vcGVyYXRpb25zYCBhbmQsIHNpZ25pZmljYW50bHksIG1vZGlmeWluZyBzZXZlcmFsIGZpbGVzeXN0ZW1zIHRvIHVzZSBpdC4gVGhpcyBpcyBhIHByZXR0eSBjb3JlIGNoYW5nZTsgaXQncyB0b3VjaGluZyBWRlMgd3JpdGViYWNrIGxvZ2ljLCBhbmQgdGhhdCdzIGFsd2F5cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgcmVwbGFjaW5nIHRoZSBvbGQgYG1tYl9mc3luY2AgYW5kIGBtbWJfZnN5bmNfbm9mbHVzaGAgaW4gYGZzL2J1ZmZlci5jYCB3aXRoIGBzaW1wbGVfZnN5bmNgIGFuZCBvdXIgc2hpbnkgbmV3IGBzeW5jX2lub2RlX21ldGFkYXRhYC4gVGhlcmUncyBhbHNvIHNvbWUgc3VwcG9ydGluZyBpbmZyYXN0cnVjdHVyZTogdGhlIGBJX01FVEFEQVRBX1dSSVRFQkFDS2AgZmxhZyBhbmQgYHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2tgIGZ1bmN0aW9uLlxuXG5MZXQncyBxdWlja2x5IGVudW1lcmF0ZSB0aGUgZmlsZXN5c3RlbXMgYWZmZWN0ZWQ6IGFmZnMsIGJmcywgZXh0MiwgZXh0NCwgZmF0LCBtaW5peCwgYW5kIHVkZi4gVGhlc2UgYXJlIHRoZSBwcmltYXJ5IHRhcmdldHMsIGFuZCB3ZSdsbCB3YW50IHRvIGVuc3VyZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlncyBhcmUgZW5hYmxlZDogYENPTkZJR19BRkZTX0ZTYCwgYENPTkZJR19CRlNfRlNgLCBgQ09ORklHX0VYVDJfRlNgLCBgQ09ORklHX0VYVDRfRlNgLCBgQ09ORklHX0ZBVF9GU2AsIGBDT05GSUdfTUlOSVhfRlNgLCBhbmQgYENPTkZJR19VREZfRlNgLlxuXG5UaGUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb24gYXJlOiBgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlYCwgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgLCBhbmQgdGhlbiB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG5ldyBjYWxsYmFjazogYGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgc2ltcGxlX2ZzeW5jX25vZmx1c2hgLlxuXG5JJ3ZlIGFscmVhZHkgdmVyaWZpZWQgdGhlIGNvbmZpZ3M7IHdlJ3JlIGdvb2QgdGhlcmUuIEFuZCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggRkFULCBsZXQncyBhbHNvIGtlZXAgYW4gZXllIG9uIGBDT05GSUdfTVNET1NfRlNgIGFuZCBgQ09ORklHX1ZGQVRfRlNgIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cbk5vdywgYSBxdWljayBgZ3JlcGAgZm9yIGBzeW5jX2lub2RlX21ldGFkYXRhYC4uLiBqdXN0IHRvIGJlIGNlcnRhaW4gd2UgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIFdhaXQgYSBzZWNvbmQsIHRoZSBwYXRjaCAqYWRkcyogaXQgdG8gYHN1cGVyX29wZXJhdGlvbnNgLS1yaWdodCwgdGhhdCBtYWtlcyBzZW5zZS5cblxuTGV0J3MgZGlnIGludG8gdGhlIGBmcy9mcy13cml0ZWJhY2suY2AgY2hhbmdlcy4gSSBzZWUgdGhlIGtleSBwaWVjZTogYSBjaGVjayBmb3IgYElfTUVUQURBVEFfV1JJVEVCQUNLYCBhbmQgYSBjYWxsIHRvIGBzeW5jX2lub2RlX21ldGFkYXRhYC4gVGhpcyBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS5cblxuT2theSwgbGV0IG1lIGxpc3QgdGhlIGZvY3VzIHN5bWJvbHMgYWdhaW4gZm9yIGNvbXBsZXRlbmVzczogYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAsIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYCwgYGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgc2ltcGxlX2ZzeW5jX25vZmx1c2hgLlxuXG5Ob3csIGxldCdzIGp1c3QgY2hlY2sgdGhlIHN0YXRpYy1uZXNzIG9mIHRoZSBmaWxlc3lzdGVtIGNhbGxiYWNrczsgd2hpY2ggb25lcyBhcmUgaW50ZXJuYWw/IGBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGFgIGlzIG5vdCBzdGF0aWMuIGBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFgIGlzIG5vdCBzdGF0aWMuIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYW5kIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAgYXJlIHN0YXRpYy5cblxuQWxyaWdodCwgdGltZSB0byBjaGVjayB3aGVyZSBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCByZXNpZGVzLiBJdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCBpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhhdCdzIGdvb2QgdG8ga25vdy5cblxuQWdhaW4sIHRoZSBjb25maWdzIGFyZTogYEVYVDRfRlNgLCBgRVhUMl9GU2AsIGBGQVRfRlNgLCBgTVNET1NfRlNgLCBgVkZBVF9GU2AsIGBNSU5JWF9GU2AsIGBVREZfRlNgLCBgQkZTX0ZTYCwgYEFGRlNfRlNgLlxuXG5XZSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgRkFUIGRlcGVuZGVuY2llcy4gSW4gYGZzL2ZhdC9LY29uZmlnYCwgYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgIGRlcGVuZCBvbiBgRkFUX0ZTYC4gU28gd2UgKnNob3VsZCogZW5hYmxlIHRob3NlIHR3byBhcyB3ZWxsIHdoZW4gZnV6emluZy5cblxuSSdsbCBjaGVjayBgZnMvYWZmcy9LY29uZmlnYCwgYGZzL2Jmcy9LY29uZmlnYCwgYGZzL21pbml4L0tjb25maWdgLCBhbmQgYGZzL3VkZi9LY29uZmlnYCBub3csIGp1c3QgdG8gbWFrZSBzdXJlIHRob3NlIGRlcGVuZGVuY2llcyBhcmVuJ3QgaGlkaW5nIGFueXRoaW5nLiBFdmVyeXRoaW5nIHNlZW1zIGZpbmUuXG5cbk9rYXksIHdpdGggdGhhdCBzYW5pdHkgY2hlY2sgY29tcGxldGUsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTczLCJPdXRwdXRUb2tlbnMiOjI4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxOTo1MToyNi4yNTY5OTQxNjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTIxNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQyX0ZTXCIsXG4gICAgXCJGQVRfRlNcIixcbiAgICBcIk1TRE9TX0ZTXCIsXG4gICAgXCJWRkFUX0ZTXCIsXG4gICAgXCJNSU5JWF9GU1wiLFxuICAgIFwiVURGX0ZTXCIsXG4gICAgXCJCRlNfRlNcIixcbiAgICBcIkFGRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcIndyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcImV4dDRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJmYXRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwidWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcIm1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImJmc19zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJzaW1wbGVfZnN5bmNfbm9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgVkZTIHN1cGVyX29wZXJhdGlvbnMgY2FsbGJhY2sgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGFuZCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBleHQyLCBmYXQsIG1pbml4LCB1ZGYsIGJmcywgYWZmcykgdG8gaW1wbGVtZW50IGFuZCB1c2UgaXQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvcmUgd3JpdGViYWNrIGxvZ2ljIGluIGBmcy9mcy13cml0ZWJhY2suY2AgdG8gd2FpdCBmb3IgaW5vZGUgbWV0YWRhdGEgSU8uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBWRlMgYW5kIG11bHRpcGxlIGZpbGVzeXN0ZW1zLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQyX0ZTXCIsXG4gICAgXCJGQVRfRlNcIixcbiAgICBcIk1TRE9TX0ZTXCIsXG4gICAgXCJWRkFUX0ZTXCIsXG4gICAgXCJNSU5JWF9GU1wiLFxuICAgIFwiVURGX0ZTXCIsXG4gICAgXCJCRlNfRlNcIixcbiAgICBcIkFGRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcIndyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcImV4dDRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJmYXRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwidWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcIm1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImJmc19zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJzaW1wbGVfZnN5bmNfbm9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgVkZTIHN1cGVyX29wZXJhdGlvbnMgY2FsbGJhY2sgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGFuZCBtb2RpZmllcyBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBleHQyLCBmYXQsIG1pbml4LCB1ZGYsIGJmcywgYWZmcykgdG8gaW1wbGVtZW50IGFuZCB1c2UgaXQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvcmUgd3JpdGViYWNrIGxvZ2ljIGluIGBmcy9mcy13cml0ZWJhY2suY2AgdG8gd2FpdCBmb3IgaW5vZGUgbWV0YWRhdGEgSU8uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBWRlMgYW5kIG11bHRpcGxlIGZpbGVzeXN0ZW1zLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow859cl[1] Phase: Succeeded StartedAt: 2026-07-02 19:51:38 +0000 UTC FinishedAt: 2026-07-02 19:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 19:51:38 +0000 UTC FinishedAt: 2026-07-02 19:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[2] Phase: Succeeded StartedAt: 2026-07-02 19:51:38 +0000 UTC FinishedAt: 2026-07-02 20:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN) Phase: Failed StartedAt: 2026-07-02 19:51:38 +0000 UTC FinishedAt: 2026-07-02 20:30:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 19:51:38 +0000 UTC FinishedAt: 2026-07-02 19:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 19:51:38 +0000 UTC FinishedAt: 2026-07-02 19:51:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow859cl/series-workflow859cl-convert-artifact-2691871335/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 19:51:48 +0000 UTC FinishedAt: 2026-07-02 20:13:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 19:51:48 +0000 UTC FinishedAt: 2026-07-02 20:13:32 +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:*6f572b13-9120-4ef8-aa7c-11cacb0ed8e4,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-workflow859cl/series-workflow859cl-convert-artifact-2691871335/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": "38140c4f-f773-4ce9-9c99-d7200e569192", "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-workflow859cl/series-workflow859cl-build-action-2670569725/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 19:51:48 +0000 UTC FinishedAt: 2026-07-02 20:13:22 +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:*6f572b13-9120-4ef8-aa7c-11cacb0ed8e4,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-workflow859cl/series-workflow859cl-convert-artifact-2691871335/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": "38140c4f-f773-4ce9-9c99-d7200e569192", "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-workflow859cl/series-workflow859cl-build-action-2670569725/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 20:13:32 +0000 UTC FinishedAt: 2026-07-02 20:13:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 20:13:32 +0000 UTC FinishedAt: 2026-07-02 20:13:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 20:13:32 +0000 UTC FinishedAt: 2026-07-02 20:13:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 20:13:32 +0000 UTC FinishedAt: 2026-07-02 20:13:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow859cl/series-workflow859cl-convert-artifact-1093047318/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 20:13:42 +0000 UTC FinishedAt: 2026-07-02 20:15:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 20:13:42 +0000 UTC FinishedAt: 2026-07-02 20:15:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*38140c4f-f773-4ce9-9c99-d7200e569192,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-workflow859cl/series-workflow859cl-build-action-2670569725/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-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 20:15:52 +0000 UTC FinishedAt: 2026-07-02 20:15:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 20:15:52 +0000 UTC FinishedAt: 2026-07-02 20:15:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 20:15:52 +0000 UTC FinishedAt: 2026-07-02 20:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 20:15:52 +0000 UTC FinishedAt: 2026-07-02 20:30:21 +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:*6f572b13-9120-4ef8-aa7c-11cacb0ed8e4,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-workflow859cl/series-workflow859cl-convert-artifact-1093047318/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": "44a56ebd-5735-4ac4-8072-f7df3748e13e", "success": false },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-workflow859cl/series-workflow859cl-build-action-2872399130/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 20:15:52 +0000 UTC FinishedAt: 2026-07-02 20:30:11 +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:*6f572b13-9120-4ef8-aa7c-11cacb0ed8e4,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-workflow859cl/series-workflow859cl-convert-artifact-1093047318/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": "44a56ebd-5735-4ac4-8072-f7df3748e13e", "success": false },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-workflow859cl/series-workflow859cl-build-action-2872399130/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[7] Phase: Failed StartedAt: 2026-07-02 20:30:21 +0000 UTC FinishedAt: 2026-07-02 20:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow859cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","udf_sync_inode_metadata","minix_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","FAT_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"a71b0842-80ca-4520-bf44-525b2ea88c3f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-07-02 20:30:21 +0000 UTC FinishedAt: 2026-07-02 20:30:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}