Name: series-workflowfkgnk Phase: Succeeded StartedAt: 2026-06-25 22:01:43 +0000 UTC FinishedAt: 2026-06-26 02:08:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[0] Phase: Succeeded StartedAt: 2026-06-25 22:01:43 +0000 UTC FinishedAt: 2026-06-25 22:11:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[0].run-triage Phase: Succeeded StartedAt: 2026-06-25 22:01:43 +0000 UTC FinishedAt: 2026-06-25 22:11:48 +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": "ab9de95c9cf952332ab79453b4b5d1bfca8e514f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MINIX_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ab9de95c9cf952332ab79453b4b5d1bfca8e514f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MINIX_FS" ], "series_id": "5741f2fe-e35f-460c-b8ae-d02789a43a3a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "minix_dio_read_iter", "minix_dio_write_end_io", "minix_dio_write_iter", "minix_file_read_iter", "minix_file_write_iter", "minix_file_open", "minix_writeback_range", "minix_writepages", "minix_read_folio", "minix_readahead", "minix_bmap", "minix_iomap_begin", "minix_iomap_end", "V1_minix_iomap_begin", "V2_minix_iomap_begin" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JTklYX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWluaXhfZGlvX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9kaW9fd3JpdGVfZW5kX2lvJiMzNDssCiAgICAmIzM0O21pbml4X2Rpb193cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9maWxlX29wZW4mIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGViYWNrX3JhbmdlJiMzNDssCiAgICAmIzM0O21pbml4X3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bWluaXhfcmVhZF9mb2xpbyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkYWhlYWQmIzM0OywKICAgICYjMzQ7bWluaXhfYm1hcCYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9lbmQmIzM0OywKICAgICYjMzQ7VjFfbWluaXhfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7VjJfbWluaXhfaW9tYXBfYmVnaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBpb21hcCBzdXBwb3J0IGZvciB0aGUgbWluaXggZmlsZXN5c3RlbSwgcmVwbGFjaW5nIG9sZGVyIGJ1ZmZlcl9oZWFkLWJhc2VkIG9wZXJhdGlvbnMgZm9yIHJlZ3VsYXIgZmlsZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSByZWFkL3dyaXRlL21tYXAgbG9naWMgb2YgdGhlIG1pbml4IGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmRkZWQ5YWUyMjNlYjc4ZjQ4NWUxZDAzZDIwM2VhMzg4YjI0YmNhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDIyOjExOjIwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggODZlNTk0M2NkMmZmNzQuLjFmNDIxNzExNTQwMThkIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9maWxlLmNcbkBAIC0xNywxNyAmIzQzOzE3LDE2MiBAQCBpbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuIFx0XHRcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2Rpb19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XG4mIzQzO1x0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBvcHMsIE5VTEwsIDAsIE5VTEwsIDApO1xuJiM0MztcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwgaW50IGVycm9yLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XHRsb2ZmX3QgcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4mIzQzO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0cG9zICYjNDM7PSBzaXplO1xuJiM0MztcdGlmIChzaXplIFx1MDAyNlx1MDAyNiBwb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuJiM0MztcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBwb3MpO1xuJiM0MztcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgbWluaXhfZGlvX3dyaXRlX29wcyA9IHtcbiYjNDM7XHQuZW5kX2lvID0gbWluaXhfZGlvX3dyaXRlX2VuZF9pbyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYmxvY2tzaXplID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aW5vZGVfbG9jayhpbm9kZSk7XG4mIzQzO1x0cmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBpb3ZfaXRlcl9jb3VudChmcm9tKSBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpIHx8XG4mIzQzO1x0XHQhSVNfQUxJR05FRChpb2NiLVx1MDAzZWtpX3BvcyB8IGlvdl9pdGVyX2FsaWdubWVudChmcm9tKSwgYmxvY2tzaXplKSlcbiYjNDM7XHRcdGZsYWdzIHw9IElPTUFQX0RJT19GT1JDRV9XQUlUO1xuJiM0MztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIG9wcyxcbiYjNDM7XHRcdFx1MDAyNm1pbml4X2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTtcbiYjNDM7XHRpZiAocmV0ID09IC1FTk9UQkxLKVxuJiM0MztcdFx0cmV0ID0gMDsgLyogZmFsbGJhY2sgdG8gYnVmZmVyZWQgKi9cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4mIzQzO1x0XHRsb2ZmX3QgcG9zO1xuJiM0MztcdFx0bG9mZl90IGVuZGJ5dGU7XG4mIzQzO1x0XHRzc2l6ZV90IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuJiM0MztcdFx0cG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4mIzQzO1x0XHRzdGF0dXMgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcyxcbiYjNDM7XHRcdFx0TlVMTCwgTlVMTCk7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAzYyAwKSkge1xuJiM0MztcdFx0XHRyZXQgPSBzdGF0dXM7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXQgJiM0Mzs9IHN0YXR1cztcbiYjNDM7XHRcdGVuZGJ5dGUgPSBwb3MgJiM0Mzsgc3RhdHVzIC0gMTtcbiYjNDM7XHRcdHN0YXR1cyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MsIGVuZGJ5dGUpO1xuJiM0MztcdFx0aWYgKCFzdGF0dXMpIHtcbiYjNDM7XHRcdFx0aW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlub2RlLVx1MDAzZWlfbWFwcGluZyxcbiYjNDM7XHRcdFx0XHRwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4mIzQzO1x0XHRcdFx0ZW5kYnl0ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyZXQgPSBzdGF0dXM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRpbm9kZV91bmxvY2soaW5vZGUpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbiYjNDM7e1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVClcbiYjNDM7XHRcdHJldHVybiBtaW5peF9kaW9fcmVhZF9pdGVyKGlvY2IsIHRvKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBtaW5peF9kaW9fd3JpdGVfaXRlciBhbHNvIGxvY2tzIHRoZSBpbm9kZSBhbmQgYXBwZWFycyB0byBkbyB0aGUgc2FtZVxuJiM0MztcdCAqIGdlbmVyYWwgc29ydHMgb2YgY2hlY2tzIGFzIHRoaXMsIHNvIGp1c3QgcmV0dXJuIGRpcmVjdGx5IGZyb20gdGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuJiM0MztcdFx0cmV0dXJuIG1pbml4X2Rpb193cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuJiM0MztcbiYjNDM7XHRpbm9kZV9sb2NrKGlub2RlKTtcbiYjNDM7XHRyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBmaWxlX21vZGlmaWVkKGlvY2ItXHUwMDNla2lfZmlscCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLCBvcHMsXG4mIzQzO1x0XHRcdE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1pbml4X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiYjNDM7e1xuJiM0MztcdGZpbHAtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xuJiM0MztcdHJldHVybiBnZW5lcmljX2ZpbGVfb3Blbihpbm9kZSwgZmlscCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yXG4tICogdGhlIG1pbml4IGZpbGVzeXN0ZW0uXG4mIzQzOyAqIFdlIHN0aWxsIGhhdmUgc29tZSBOVUxMcyBoZXJlLCBidXQgbm90IGFzIG1hbnkgb2YgdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlXG4mIzQzOyAqIHN0aWxsIE9LIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS5cbiAgKi9cbiYjNDM7XG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi1cdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbi1cdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuJiM0MztcdC5yZWFkX2l0ZXJcdD0gbWluaXhfZmlsZV9yZWFkX2l0ZXIsXG4mIzQzO1x0LndyaXRlX2l0ZXJcdD0gbWluaXhfZmlsZV93cml0ZV9pdGVyLFxuIFx0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuJiM0MztcdC5vcGVuXHRcdD0gbWluaXhfZmlsZV9vcGVuLFxuIFx0LmZzeW5jXHRcdD0gbWluaXhfZnN5bmMsXG4gXHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbiYjNDM7XHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4gfTtcbiBcbiBzdGF0aWMgaW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmNcbmluZGV4IGMzMGNjNTkwNjk4ZDZmLi5jZDEyZTU5Y2U5YjlkMiAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lub2RlLmNcbkBAIC00MzYsNiAmIzQzOzQzNiwzMSBAQCBzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuJiM0MztcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBwb3MsIHVuc2lnbmVkIGludCBsZW4sIHU2NCBlbmRfcG9zKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycm9yO1xuJiM0MztcbiYjNDM7XHRpZiAocG9zIFx1MDAzYyB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0IHx8XG4mIzQzO1x0XHRcdHBvcyBcdTAwM2U9IHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgJiM0Mzsgd3BjLVx1MDAzZWlvbWFwLmxlbmd0aCkge1xuJiM0MztcdFx0aWYgKElOT0RFX1ZFUlNJT04od3BjLVx1MDAzZWlub2RlKSA9PSBNSU5JWF9WMSlcbiYjNDM7XHRcdFx0ZXJyb3IgPSBWMV9taW5peF9pb21hcF9iZWdpbih3cGMtXHUwMDNlaW5vZGUsIHBvcywgbGVuLCAwLFxuJiM0MztcdFx0XHRcdFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgTlVMTCk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGVycm9yID0gVjJfbWluaXhfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLCBwb3MsIGxlbiwgMCxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIE5VTEwpO1xuJiM0MztcdFx0aWYgKGVycm9yKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIHBvcywgZW5kX3BvcywgbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIG1pbml4X3dyaXRlYmFja19vcHMgPSB7XG4mIzQzO1x0LndyaXRlYmFja19yYW5nZSA9IG1pbml4X3dyaXRlYmFja19yYW5nZSxcbiYjNDM7XHQud3JpdGViYWNrX3N1Ym1pdCA9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxuIFx0XHQgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG4ge1xuQEAgLTQ0NSwxNyAmIzQzOzQ3MCw0NSBAQCBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbiBcdFx0cmV0dXJuIFYyX21pbml4X2dldF9ibG9jayhpbm9kZSwgYmxvY2ssIGJoX3Jlc3VsdCwgY3JlYXRlKTtcbiB9XG4gXG4tc3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuJiM0MzsvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfYmxvY2tfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBtaW5peF9nZXRfYmxvY2spO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuJiM0MztcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCB3cGMgPSB7XG4mIzQzO1x0XHQuaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3QsXG4mIzQzO1x0XHQud2JjID0gd2JjLFxuJiM0MztcdFx0Lm9wcyA9IFx1MDAyNm1pbml4X3dyaXRlYmFja19vcHMsXG4mIzQzO1x0fTtcbiYjNDM7XHRyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhcdTAwMjZ3cGMpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoZmlsZS1cdTAwM2VmX2lub2RlKTtcbiYjNDM7XG4mIzQzO1x0aW9tYXBfYmlvX3JlYWRfZm9saW8oZm9saW8sIG9wcyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSBvbGQgbWluaXhfcmVhZF9mb2xpbywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi9cbiYjNDM7c3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBtaW5peF9yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKHJhYy1cdTAwM2VmaWxlLVx1MDAzZWZfaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRpb21hcF9iaW9fcmVhZGFoZWFkKHJhYywgb3BzKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pXG4ge1xuIFx0cmV0dXJuIF9fYmxvY2tfd3JpdGVfYmVnaW4oZm9saW8sIHBvcywgbGVuLCBtaW5peF9nZXRfYmxvY2spO1xuQEAgLTQ4NywxOSAmIzQzOzU0MCwzNiBAQCBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcbiBzdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXG4ge1xuLVx0cmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihtYXBwaW5nLVx1MDAzZWhvc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9tYXBfYm1hcChtYXBwaW5nLCBibG9jaywgb3BzKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfYW9wcyA9IHtcbi1cdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbi1cdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbiYjNDM7XHQuZGlydHlfZm9saW9cdD0gaW9tYXBfZGlydHlfZm9saW8sXG4mIzQzO1x0LmludmFsaWRhdGVfZm9saW8gPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxuIFx0LnJlYWRfZm9saW8gPSBtaW5peF9yZWFkX2ZvbGlvLFxuJiM0MztcdC5yZWFkYWhlYWQgPSBtaW5peF9yZWFkYWhlYWQsXG4gXHQud3JpdGVwYWdlcyA9IG1pbml4X3dyaXRlcGFnZXMsXG4mIzQzO1x0Lm1pZ3JhdGVfZm9saW8gPSBmaWxlbWFwX21pZ3JhdGVfZm9saW8sXG4mIzQzO1x0LmJtYXAgPSBtaW5peF9ibWFwLFxuJiM0MztcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsXG4mIzQzO1x0LnJlbGVhc2VfZm9saW8gPSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxuJiM0MztcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIEEgc3BlY2lhbCBhb3BzIGZvciBkaXJlY3RvcmllcyB0aGF0IGtlZXBzIHVzaW5nIHRoZSBidWZmZXIgaGVhZCBjaHVua3MsIGF0XG4mIzQzOyAqIGxlYXN0IGZvciB0aGUgdGltZSBiZWluZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9hb3BzID0ge1xuJiM0MztcdC5kaXJ0eV9mb2xpbyA9IGJsb2NrX2RpcnR5X2ZvbGlvLFxuJiM0MztcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbiYjNDM7XHQucmVhZF9mb2xpbyA9IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8sXG4gXHQud3JpdGVfYmVnaW4gPSBtaW5peF93cml0ZV9iZWdpbixcbiBcdC53cml0ZV9lbmQgPSBnZW5lcmljX3dyaXRlX2VuZCxcbiBcdC5taWdyYXRlX2ZvbGlvID0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXG4gXHQuYm1hcCA9IG1pbml4X2JtYXAsXG4tXHQuZGlyZWN0X0lPID0gbm9vcF9kaXJlY3RfSU9cbiYjNDM7XHQud3JpdGVwYWdlcyA9IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuQEAgLTUxNiw3ICYjNDM7NTg2LDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcbiBcdH0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZtaW5peF9kaXJfb3BlcmF0aW9ucztcbi1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bWluaXhfYW9wcztcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNm1pbml4X2Rpcl9hb3BzO1xuIFx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNm1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbkBAIC03NjgsNCAmIzQzOzgzOCwzIEBAIG1vZHVsZV9pbml0KGluaXRfbWluaXhfZnMpXG4gbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcylcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TWluaXggZmlsZSBzeXN0ZW1cJiMzNDspO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4tXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW9tYXAuYyBiL2ZzL21pbml4L2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uN2JiMDQzOWUzNjY5OTZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lvbWFwLmNcbkBAIC0wLDAgJiM0MzsxLDExNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIGlvbWFwIGZ1bmN0aW9ucyBmb3IgbWluaXguIEF0IGxlYXN0IHRoZSBmaXJzdCBwYXNzIG9mIHRoaXMgZmlsZSB3YXMgdGFrZW5cbiYjNDM7ICogZnJvbSB0aGUgeGlhZnMgaW9tYXAuYywgd2hpY2ggaXMgZml0dGluZyBzaW5jZSB0aGUgeGlhZnMgbW9kdWxlIGluIHR1cm5cbiYjNDM7ICogYm9ycm93ZWQgaGVhdmlseSBmcm9tIHRoZSBtb2Rlcm5pemVkIG1pbml4IGZzIGtlcm5lbCBtb2R1bGUuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogbWluaXhfaW9tYXBfYmVnaW4gLSBtYXAgYSBmaWxlIHJhbmdlIHRvIGRpc2sgYmxvY2tzLiBJdCBhY3RzIGFzIGEgcmVwbGFjZW1lbnRcbiYjNDM7ICogZm9yIGdldF9ibG9jayBpbiBpdHJlZV9jb21tb24uYywgYXQgbGVhc3QgaW4gdGhlIGltcG9ydGFudCB3YXlzLCBhbmQgaXNcbiYjNDM7ICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLiBUaGlzIGlzIHRha2VuXG4mIzQzOyAqIGRpcmVjdGx5IGZyb20gdGhlIG91dC1vZi10cmVlIHhpYWZzIGlvbWFwIGNoYW5nZXMsIGFuZCB0aGUgZXhmYXQgaW9tYXBcbiYjNDM7ICogY2hhbmdlcyB3ZXJlIGFuIGluc3BpcmF0aW9uIGZvciB0aGF0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBtaW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuJiM0MztcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4mIzQzO1x0c2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuJiM0MztcdGludCBjcmVhdGUgPSBmbGFncyBcdTAwMjYgSU9NQVBfV1JJVEU7XG4mIzQzO1xuJiM0MztcdC8qIE1vc3RseSB0YWtlbiBmcm9tIG1vZGVybi14aWFmcyBpdHJlZS5jIGdldF9ibG9jayB3aXRoIGVsZW1lbnRzIGZyb21cbiYjNDM7XHQgKiBzaW1pbGFyIGV4ZmF0IG9wZXJhdGlvbnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50IG9mZnNldHNbREVQVEhdO1xuJiM0MztcdEluZGlyZWN0IGNoYWluW0RFUFRIXTtcbiYjNDM7XHRJbmRpcmVjdCAqcGFydGlhbDtcbiYjNDM7XHRpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpO1xuJiM0MztcdGludCBsZWZ0O1xuJiM0MztcdGludCBlcnIgPSAtRUlPO1xuJiM0MztcbiYjNDM7XHRzZWN0b3JfdCBwaHlzO1xuJiM0MztcbiYjNDM7XHQvKiBibG9jayBpcyBiZXlvbmQgbWF4IGZpbGUgc2l6ZSAqL1xuJiM0MztcdGlmIChkZXB0aCA9PSAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlvbWFwLVx1MDAzZWJkZXYgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldjtcbiYjNDM7XG4mIzQzO3JlcmVhZDpcbiYjNDM7XHRwYXJ0aWFsID0gZ2V0X2JyYW5jaChpbm9kZSwgZGVwdGgsIG9mZnNldHMsIGNoYWluLCBcdTAwMjZlcnIpO1xuJiM0MztcbiYjNDM7XHQvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovXG4mIzQzO1x0aWYgKCFwYXJ0aWFsKSB7XG4mIzQzO1x0XHQvKiBCaXQgb2YgYSB3ZWlyZCBvcmRlciwgYnV0IGl0JiMzOTtsbCBtYWtlIHNlbnNlIHdoZW4geW91IGdldCB0b1xuJiM0MztcdFx0ICogdGhlIGJvdHRvbS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX01FUkdFRDtcbiYjNDM7Z290X2l0OlxuJiM0MztcdFx0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XG4mIzQzO1x0XHRwYXJ0aWFsID0gY2hhaW4mIzQzO2RlcHRoLTE7XG4mIzQzO1x0XHQvKiBTZXQgdXAgdGhlIGlvbWFwIHN0cnVjdCBiZWZvcmUgY2xlYW5pbmcgdXAgKi9cbiYjNDM7XHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2VhZGRyID0gKHU2NClwaHlzIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuJiM0MztcdFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gMSBcdTAwM2NcdTAwM2MgYmxrYml0cztcbiYjNDM7XHRcdGlvbWFwLVx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogTmV4dCBzaW1wbGUgY2FzZSAtIHBsYWluIGxvb2t1cCBvciBmYWlsZWQgcmVhZCBvZiBpbmRpcmVjdCBibG9jayAqL1xuJiM0MztcdGlmICghY3JlYXRlIHx8IGVyciA9PSAtRUlPKSB7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2V0eXBlID0gSU9NQVBfSE9MRTtcbiYjNDM7XHRcdGlvbWFwLVx1MDAzZWFkZHIgPSBJT01BUF9OVUxMX0FERFI7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2VsZW5ndGggPSAxIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuJiM0MztcdFx0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gKHU2NClpYmxvY2sgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2VmbGFncyA9IDA7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0XHR3aGlsZSAocGFydGlhbCBcdTAwM2UgY2hhaW4pIHtcbiYjNDM7XHRcdFx0YnJlbHNlKHBhcnRpYWwtXHUwMDNlYmgpO1xuJiM0MztcdFx0XHRwYXJ0aWFsLS07XG4mIzQzO1x0XHR9XG4mIzQzO291dDpcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEluZGlyZWN0IGJsb2NrIG1pZ2h0IGJlIHJlbW92ZWQgYnkgdHJ1bmNhdGUgd2hpbGUgd2Ugd2VyZVxuJiM0MztcdCAqIHJlYWRpbmcgaXQuIEhhbmRsaW5nIG9mIHRoYXQgY2FzZSAoZm9yZ2V0IHdoYXQgd2UmIzM5O3ZlIGdvdCBhbmRcbiYjNDM7XHQgKiByZXJlYWQpIGlzIHRha2VuIG91dCBvZiB0aGUgbWFpbiBwYXRoLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChlcnIgPT0gLUVBR0FJTilcbiYjNDM7XHRcdGdvdG8gY2hhbmdlZDtcbiYjNDM7XG4mIzQzO1x0bGVmdCA9IChjaGFpbiAmIzQzOyBkZXB0aCkgLSBwYXJ0aWFsO1xuJiM0MztcdGVyciA9IGFsbG9jX2JyYW5jaChpbm9kZSwgbGVmdCwgb2Zmc2V0cyAmIzQzOyAocGFydGlhbCAtIGNoYWluKSwgcGFydGlhbCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNwbGljZV9icmFuY2goaW5vZGUsIGNoYWluLCBwYXJ0aWFsLCBsZWZ0KSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gY2hhbmdlZDtcbiYjNDM7XG4mIzQzO1x0LyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqL1xuJiM0MztcdGlvbWFwLVx1MDAzZWZsYWdzID0gSU9NQVBfRl9ORVc7XG4mIzQzO1x0Z290byBnb3RfaXQ7XG4mIzQzO1xuJiM0MztjaGFuZ2VkOlxuJiM0MztcdHdoaWxlIChwYXJ0aWFsIFx1MDAzZSBjaGFpbikge1xuJiM0MztcdFx0YnJlbHNlKHBhcnRpYWwtXHUwMDNlYmgpO1xuJiM0MztcdFx0cGFydGlhbC0tO1xuJiM0MztcdH1cbiYjNDM7XHRnb3RvIHJlcmVhZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogbWluaXhfaW9tYXBfZW5kIGVuZHMgdXAgYmVpbmcgYSBub3A7IHNpbmNlIG1pbml4IGRvZXNuJiMzOTt0IGhhdmUgYW55IGV4dGVudHMgb3JcbiYjNDM7ICogdHJhbnNhY3Rpb25zIHRvIHdvcnJ5IGFib3V0LCB0aGVyZSBpc24mIzM5O3QgYW55dGhpbmcgdG8gdXBkYXRlIGhlcmUuIFRoZSBvbi1kaXNrXG4mIzQzOyAqIGluZGlyZWN0IGJsb2NrcyBnZXQgZGlydGllZCBpbiBtaW5peF9pb21hcF9iZWdpbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4mIzQzO1x0c3NpemVfdCB3cml0dGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YxLmMgYi9mcy9taW5peC9pdHJlZV92MS5jXG5pbmRleCAxZmVkOTA2MDQyYWE4NC4uNThjMjlmNDQ0M2QzNzIgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pdHJlZV92MS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV92MS5jXG5AQCAtNDksNiAmIzQzOzQ5LDE4IEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKVxuIH1cbiBcbiAjaW5jbHVkZSBcJiMzNDtpdHJlZV9jb21tb24uY1wmIzM0O1xuJiM0MzsvKiBOT1RBIEJFTkU6XG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgaXMgaWNreSB0byBtZSwgYnV0IGF0IHRoZSBzYW1lIHRpbWUgaGF2aW5nIGl0IGJlIGEgc3RhbmRhbG9uZSBDIGZpbGVcbiYjNDM7ICogdGhhdCYjMzk7cyBjb21waWxlZCB0byBvYmplY3QgZm9ybSBhbmQgbGlua2VkIHNlcGFyYXRlbHkgbGlrZSBpdCBpcyBpbiB4aWFmcyBpc1xuJiM0MzsgKiBtdWNoIG5hc3RpZXIgaW4gbWluaXggYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBtaW5peCBmcyB0aGF0XG4mIzQzOyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJiMzOTt0XG4mIzQzOyAqIGxpa2UgaXQsIGJ1dCBzaW5jZSBtaW5peCBhbHJlYWR5IGhhcyB0aGlzIHBhdHRlcm4gd2hlcmUgYSBjb21tb24gaXRyZWUgZmlsZVxuJiM0MzsgKiBpcyBpbmNsdWRlZCBpbiB0aGUgaXRyZWVfdjEgYW5kIGl0cmVlX3YyKGFuZCB2MykgZmlsZXMsIEkmIzM5O20gaW5jbHVkaW5nIGlvbWFwLmNcbiYjNDM7ICogaW4gdGhlc2UgZmlsZXMgYXMgd2VsbC4gSXQgZG9lcyBhdCBsZWFzdCBhdm9pZCBleHBvcnRpbmcgc29tZSBjdXJyZW50bHlcbiYjNDM7ICogc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3QgbmVlZGVkIGFueXdoZXJlIGJ1dCBpdHJlZV9jb21tb24uYyBhbmQgaW9tYXAuYy5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2lvbWFwLmNcJiMzNDtcbiBcbiBpbnQgVjFfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLFxuIFx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuQEAgLTYxLDcgJiM0Mzs3MywxOCBAQCB2b2lkIFYxX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0dHJ1bmNhdGUoaW5vZGUpO1xuIH1cbiBcbi11bnNpZ25lZCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4mIzQzO3Vuc2lnbmVkIGludCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuIFx0cmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpO1xuIH1cbiYjNDM7XG4mIzQzO2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuJiM0MztcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbWluaXhfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsIHNyY21hcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjFfbWluaXhfaW9tYXBfb3BzID0ge1xuJiM0MztcdC5pb21hcF9iZWdpbiA9IFYxX21pbml4X2lvbWFwX2JlZ2luLFxuJiM0MztcdC5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV92Mi5jIGIvZnMvbWluaXgvaXRyZWVfdjIuY1xuaW5kZXggOWQwMGYzMWEyZDlkMTUuLmZjN2E1YWU4ZmExY2EzIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaXRyZWVfdjIuY1xuQEAgLTU3LDYgJiM0Mzs1NywxMCBAQCBzdGF0aWMgaW50IGJsb2NrX3RvX3BhdGgoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssIGludCBvZmZzZXRzW0RFUFRIXSlcbiB9XG4gXG4gI2luY2x1ZGUgXCYjMzQ7aXRyZWVfY29tbW9uLmNcJiMzNDtcbiYjNDM7LyogU2VlIHRoZSBub3RlIGluIGl0cmVlX3YxIGluIGEgY29tbWVudCB0aGF0IHN0YXJ0cyBcJiMzNDtOT1RBIEJFTkVcJiMzNDsgZm9yIGFuXG4mIzQzOyAqIGV4cGxhbmF0aW9uIGZvciB3aHkgaW9tYXAuYyBpcyBpbmNsdWRlZCBoZXJlLlxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW9tYXAuY1wmIzM0O1xuIFxuIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXG4gXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG5AQCAtNjksNyAmIzQzOzczLDE4IEBAIHZvaWQgVjJfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHR0cnVuY2F0ZShpbm9kZSk7XG4gfVxuIFxuLXVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiYjNDM7dW5zaWduZWQgaW50IFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XG4gfVxuJiM0MztcbiYjNDM7aW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4mIzQzO1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHMgPSB7XG4mIzQzO1x0LmlvbWFwX2JlZ2luID0gVjJfbWluaXhfaW9tYXBfYmVnaW4sXG4mIzQzO1x0LmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L21pbml4LmggYi9mcy9taW5peC9taW5peC5oXG5pbmRleCBmMjAyNWM5YjU4MjUyZi4uZmFjZTc0MTAwMzQ2MDIgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9taW5peC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9taW5peC5oXG5AQCAtNSw2ICYjNDM7NSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pbml4X2ZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuICNkZWZpbmUgSU5PREVfVkVSU0lPTihpbm9kZSlcdG1pbml4X3NiKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfdmVyc2lvblxuICNkZWZpbmUgTUlOSVhfVjFcdFx0MHgwMDAxXHRcdC8qIG9yaWdpbmFsIG1pbml4IGZzICovXG5AQCAtNTYsNyAmIzQzOzU3LDcgQEAgaW50IG1pbml4X25ld19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiB2b2lkIG1pbml4X2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibG9jayk7XG4gdW5zaWduZWQgbG9uZyBtaW5peF9jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosXG4tXHRcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkIGludCk7XG4mIzQzO1x0XHRzdHJ1Y3Qga3N0YXQgKiwgdTMyLCB1bnNpZ25lZCk7XG4gaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKTtcbiBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1pbml4X2dldF9tZXRhZGF0YV9iaHMoc3RydWN0IGlub2RlICppbm9kZSk7XG4gaW50IG1pbml4X2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYyk7XG5AQCAtODAsMTAgJiM0Mzs4MSwxOSBAQCBpbnQgbWluaXhfc2V0X2xpbmsoc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZG90ZG90KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmb2xpbyAqKik7XG4gaW5vX3QgbWluaXhfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgZGVudHJ5Kik7XG4gXG4mIzQzO2V4dGVybiBpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbiYjNDM7XHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXG4mIzQzO1x0c3RydWN0IGlvbWFwICpzcmNtYXApO1xuJiM0MztleHRlcm4gaW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLFxuJiM0MztcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcbiYjNDM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcztcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9zYl9pbmZvICptaW5peF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbkBAIC05NSwxMSAmIzQzOzEwNSwxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSlcbiB7XG4gXHRyZXR1cm4gRElWX1JPVU5EX1VQKGJpdHMsIGJsb2Nrc2l6ZSAqIDgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICptaW5peF9pb21hcF9vcHNfdmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSA/XG4mIzQzO1x0XHRcdTAwMjZWMV9taW5peF9pb21hcF9vcHMgOiBcdTAwMjZWMl9taW5peF9pb21hcF9vcHM7XG4mIzQzO31cbiYjNDM7XG4gI2lmIGRlZmluZWQoQ09ORklHX01JTklYX0ZTX05BVElWRV9FTkRJQU4pIFx1MDAyNlx1MDAyNiBcXFxuIFx0ZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEKVxuIFxuQEAgLTEyOSw3ICYjNDM7MTQ1LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbiAgKiBiaWctZW5kaWFuIDE2Yml0IGluZGV4ZWQgYml0bWFwc1xuICAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwID0gdmFkZHIsICphZGRyID0gdmFkZHI7XG4gXHR1bnNpZ25lZCBzaG9ydCBudW07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlOSVhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaW5peF9kaW9fcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2Rpb193cml0ZV9lbmRfaW8mIzM0OywKICAgICYjMzQ7bWluaXhfZGlvX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfZmlsZV9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfb3BlbiYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZWJhY2tfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkX2ZvbGlvJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDttaW5peF9ibWFwJiMzNDssCiAgICAmIzM0O21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21pbml4X2lvbWFwX2VuZCYjMzQ7LAogICAgJiMzNDtWMV9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtWMl9taW5peF9pb21hcF9iZWdpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGlvbWFwIHN1cHBvcnQgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLCByZXBsYWNpbmcgb2xkZXIgYnVmZmVyX2hlYWQtYmFzZWQgb3BlcmF0aW9ucyBmb3IgcmVndWxhciBmaWxlcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHJlYWQvd3JpdGUvbW1hcCBsb2dpYyBvZiB0aGUgbWluaXggZmlsZXN5c3RlbSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJkZGVkOWFlMjIzZWI3OGY0ODVlMWQwM2QyMDNlYTM4OGIyNGJjYWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1biAyNSAyMjoxMToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuYwppbmRleCA4NmU1OTQzY2QyZmY3NC4uMWY0MjE3MTE1NDAxOGQgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9maWxlLmMKQEAgLTE3LDE3ICYjNDM7MTcsMTYyIEBAIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCiAJCQlzdGFydCwgZW5kLCBkYXRhc3luYyk7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpOwomIzQzOwomIzQzOwlyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIG9wcywgTlVMTCwgMCwgTlVMTCwgMCk7CiYjNDM7CWlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1pbml4X2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsIGludCBlcnJvciwKJiM0MzsJCXVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlsb2ZmX3QgcG9zID0gaW9jYi0mZ3Q7a2lfcG9zOwomIzQzOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CXBvcyAmIzQzOz0gc2l6ZTsKJiM0MzsJaWYgKHNpemUgJmFtcDsmYW1wOyBwb3MgJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKJiM0MzsJCWlfc2l6ZV93cml0ZShpbm9kZSwgcG9zKTsKJiM0MzsJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgbWluaXhfZGlvX3dyaXRlX29wcyA9IHsKJiM0MzsJLmVuZF9pbyA9IG1pbml4X2Rpb193cml0ZV9lbmRfaW8sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGJsb2Nrc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKJiM0MzsKJiM0MzsJaW5vZGVfbG9jayhpbm9kZSk7CiYjNDM7CXJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CiYjNDM7CXJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGlvdl9pdGVyX2NvdW50KGZyb20pICZndDsgaV9zaXplX3JlYWQoaW5vZGUpIHx8CiYjNDM7CQkhSVNfQUxJR05FRChpb2NiLSZndDtraV9wb3MgfCBpb3ZfaXRlcl9hbGlnbm1lbnQoZnJvbSksIGJsb2Nrc2l6ZSkpCiYjNDM7CQlmbGFncyB8PSBJT01BUF9ESU9fRk9SQ0VfV0FJVDsKJiM0MzsKJiM0MzsJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSk7CiYjNDM7CiYjNDM7CXJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBvcHMsCiYjNDM7CQkmYW1wO21pbml4X2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTsKJiM0MzsJaWYgKHJldCA9PSAtRU5PVEJMSykKJiM0MzsJCXJldCA9IDA7IC8qIGZhbGxiYWNrIHRvIGJ1ZmZlcmVkICovCiYjNDM7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7CiYjNDM7CQlsb2ZmX3QgcG9zOwomIzQzOwkJbG9mZl90IGVuZGJ5dGU7CiYjNDM7CQlzc2l6ZV90IHN0YXR1czsKJiM0MzsKJiM0MzsJCWlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7PSB+SU9DQl9ESVJFQ1Q7CiYjNDM7CQlwb3MgPSBpb2NiLSZndDtraV9wb3M7CiYjNDM7CQlzdGF0dXMgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcywKJiM0MzsJCQlOVUxMLCBOVUxMKTsKJiM0MzsJCWlmICh1bmxpa2VseShzdGF0dXMgJmx0OyAwKSkgewomIzQzOwkJCXJldCA9IHN0YXR1czsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXQgJiM0Mzs9IHN0YXR1czsKJiM0MzsJCWVuZGJ5dGUgPSBwb3MgJiM0Mzsgc3RhdHVzIC0gMTsKJiM0MzsJCXN0YXR1cyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgcG9zLCBlbmRieXRlKTsKJiM0MzsJCWlmICghc3RhdHVzKSB7CiYjNDM7CQkJaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlub2RlLSZndDtpX21hcHBpbmcsCiYjNDM7CQkJCXBvcyAmZ3Q7Jmd0OyBQQUdFX1NISUZULAomIzQzOwkJCQllbmRieXRlICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwkJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCQlyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0ID0gc3RhdHVzOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJaW5vZGVfdW5sb2NrKGlub2RlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKQomIzQzO3sKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKQomIzQzOwkJcmV0dXJuIG1pbml4X2Rpb19yZWFkX2l0ZXIoaW9jYiwgdG8pOwomIzQzOwomIzQzOwlyZXR1cm4gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwkvKiBtaW5peF9kaW9fd3JpdGVfaXRlciBhbHNvIGxvY2tzIHRoZSBpbm9kZSBhbmQgYXBwZWFycyB0byBkbyB0aGUgc2FtZQomIzQzOwkgKiBnZW5lcmFsIHNvcnRzIG9mIGNoZWNrcyBhcyB0aGlzLCBzbyBqdXN0IHJldHVybiBkaXJlY3RseSBmcm9tIHRoZXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKQomIzQzOwkJcmV0dXJuIG1pbml4X2Rpb193cml0ZV9pdGVyKGlvY2IsIGZyb20pOwomIzQzOwomIzQzOwlpbm9kZV9sb2NrKGlub2RlKTsKJiM0MzsJcmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlyZXQgPSBmaWxlX21vZGlmaWVkKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpOwomIzQzOwomIzQzOwlyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcywKJiM0MzsJCQlOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmZ3Q7IDApCiYjNDM7CQlyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTsKJiM0MzsKJiM0Mzt1bmxvY2s6CiYjNDM7CWlub2RlX3VubG9jayhpbm9kZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWluaXhfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQomIzQzO3sKJiM0MzsJZmlscC0mZ3Q7Zl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUOwomIzQzOwlyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbHApOwomIzQzO30KJiM0MzsKIC8qCi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yCi0gKiB0aGUgbWluaXggZmlsZXN5c3RlbS4KJiM0MzsgKiBXZSBzdGlsbCBoYXZlIHNvbWUgTlVMTHMgaGVyZSwgYnV0IG5vdCBhcyBtYW55IG9mIHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZQomIzQzOyAqIHN0aWxsIE9LIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS4KICAqLwomIzQzOwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAotCS5yZWFkX2l0ZXIJPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLAotCS53cml0ZV9pdGVyCT0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsCiYjNDM7CS5yZWFkX2l0ZXIJPSBtaW5peF9maWxlX3JlYWRfaXRlciwKJiM0MzsJLndyaXRlX2l0ZXIJPSBtaW5peF9maWxlX3dyaXRlX2l0ZXIsCiAJLm1tYXBfcHJlcGFyZQk9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsCiYjNDM7CS5vcGVuCQk9IG1pbml4X2ZpbGVfb3BlbiwKIAkuZnN5bmMJCT0gbWluaXhfZnN5bmMsCiAJLnNwbGljZV9yZWFkCT0gZmlsZW1hcF9zcGxpY2VfcmVhZCwKJiM0MzsJLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCiB9OwogCiBzdGF0aWMgaW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuYwppbmRleCBjMzBjYzU5MDY5OGQ2Zi4uY2QxMmU1OWNlOWI5ZDIgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaW5vZGUuYwpAQCAtNDM2LDYgJiM0Mzs0MzYsMzEgQEAgc3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHNzaXplX3QgbWluaXhfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsCiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBwb3MsIHVuc2lnbmVkIGludCBsZW4sIHU2NCBlbmRfcG9zKQomIzQzO3sKJiM0MzsJaW50IGVycm9yOwomIzQzOwomIzQzOwlpZiAocG9zICZsdDsgd3BjLSZndDtpb21hcC5vZmZzZXQgfHwKJiM0MzsJCQlwb3MgJmd0Oz0gd3BjLSZndDtpb21hcC5vZmZzZXQgJiM0Mzsgd3BjLSZndDtpb21hcC5sZW5ndGgpIHsKJiM0MzsJCWlmIChJTk9ERV9WRVJTSU9OKHdwYy0mZ3Q7aW5vZGUpID09IE1JTklYX1YxKQomIzQzOwkJCWVycm9yID0gVjFfbWluaXhfaW9tYXBfYmVnaW4od3BjLSZndDtpbm9kZSwgcG9zLCBsZW4sIDAsCiYjNDM7CQkJCSZhbXA7d3BjLSZndDtpb21hcCwgTlVMTCk7CiYjNDM7CQllbHNlCiYjNDM7CQkJZXJyb3IgPSBWMl9taW5peF9pb21hcF9iZWdpbih3cGMtJmd0O2lub2RlLCBwb3MsIGxlbiwgMCwKJiM0MzsJCQkJJmFtcDt3cGMtJmd0O2lvbWFwLCBOVUxMKTsKJiM0MzsJCWlmIChlcnJvcikKJiM0MzsJCQlyZXR1cm4gZXJyb3I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBwb3MsIGVuZF9wb3MsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBtaW5peF93cml0ZWJhY2tfb3BzID0gewomIzQzOwkud3JpdGViYWNrX3JhbmdlID0gbWluaXhfd3JpdGViYWNrX3JhbmdlLAomIzQzOwkud3JpdGViYWNrX3N1Ym1pdCA9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLAogCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCiB7CkBAIC00NDUsMTcgJiM0Mzs0NzAsNDUgQEAgc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCiAJCXJldHVybiBWMl9taW5peF9nZXRfYmxvY2soaW5vZGUsIGJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovCiYjNDM7c3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7CQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHsKJiM0MzsJCS5pbm9kZSA9IG1hcHBpbmctJmd0O2hvc3QsCiYjNDM7CQkud2JjID0gd2JjLAomIzQzOwkJLm9wcyA9ICZhbXA7bWluaXhfd3JpdGViYWNrX29wcywKJiM0MzsJfTsKJiM0MzsJcmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoJmFtcDt3cGMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoZmlsZS0mZ3Q7Zl9pbm9kZSk7CiYjNDM7CiYjNDM7CWlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBvcHMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIG9sZCBtaW5peF9yZWFkX2ZvbGlvLCBwcmVzZXJ2ZWQgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zLiAqLwomIzQzO3N0YXRpYyBpbnQgbWluaXhfYmxvY2tfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBtaW5peF9nZXRfYmxvY2spOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbWluaXhfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihyYWMtJmd0O2ZpbGUtJmd0O2ZfaW5vZGUpOwomIzQzOwomIzQzOwlpb21hcF9iaW9fcmVhZGFoZWFkKHJhYywgb3BzKTsKJiM0Mzt9CiYjNDM7CiBpbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pCiB7CiAJcmV0dXJuIF9fYmxvY2tfd3JpdGVfYmVnaW4oZm9saW8sIHBvcywgbGVuLCBtaW5peF9nZXRfYmxvY2spOwpAQCAtNDg3LDE5ICYjNDM7NTQwLDM2IEBAIHN0YXRpYyBpbnQgbWluaXhfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLAogCiBzdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCiB7Ci0JcmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIobWFwcGluZy0mZ3Q7aG9zdCk7CiYjNDM7CiYjNDM7CXJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCBvcHMpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzID0gewotCS5kaXJ0eV9mb2xpbwk9IGJsb2NrX2RpcnR5X2ZvbGlvLAotCS5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbywKJiM0MzsJLmRpcnR5X2ZvbGlvCT0gaW9tYXBfZGlydHlfZm9saW8sCiYjNDM7CS5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbywKIAkucmVhZF9mb2xpbyA9IG1pbml4X3JlYWRfZm9saW8sCiYjNDM7CS5yZWFkYWhlYWQgPSBtaW5peF9yZWFkYWhlYWQsCiAJLndyaXRlcGFnZXMgPSBtaW5peF93cml0ZXBhZ2VzLAomIzQzOwkubWlncmF0ZV9mb2xpbyA9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbywKJiM0MzsJLmJtYXAgPSBtaW5peF9ibWFwLAomIzQzOwkuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLAomIzQzOwkucmVsZWFzZV9mb2xpbyA9IGlvbWFwX3JlbGVhc2VfZm9saW8sCiYjNDM7CS5lcnJvcl9yZW1vdmVfZm9saW8gPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbywKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEEgc3BlY2lhbCBhb3BzIGZvciBkaXJlY3RvcmllcyB0aGF0IGtlZXBzIHVzaW5nIHRoZSBidWZmZXIgaGVhZCBjaHVua3MsIGF0CiYjNDM7ICogbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9hb3BzID0gewomIzQzOwkuZGlydHlfZm9saW8gPSBibG9ja19kaXJ0eV9mb2xpbywKJiM0MzsJLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAomIzQzOwkucmVhZF9mb2xpbyA9IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8sCiAJLndyaXRlX2JlZ2luID0gbWluaXhfd3JpdGVfYmVnaW4sCiAJLndyaXRlX2VuZCA9IGdlbmVyaWNfd3JpdGVfZW5kLAogCS5taWdyYXRlX2ZvbGlvID0gYnVmZmVyX21pZ3JhdGVfZm9saW8sCiAJLmJtYXAgPSBtaW5peF9ibWFwLAotCS5kaXJlY3RfSU8gPSBub29wX2RpcmVjdF9JTwomIzQzOwkud3JpdGVwYWdlcyA9IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0gewpAQCAtNTE2LDcgJiM0Mzs1ODYsNyBAQCB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KQogCX0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7bWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAJCWlub2RlLSZndDtpX2ZvcCA9ICZhbXA7bWluaXhfZGlyX29wZXJhdGlvbnM7Ci0JCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDttaW5peF9hb3BzOwomIzQzOwkJaW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPSAmYW1wO21pbml4X2Rpcl9hb3BzOwogCX0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7bWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZV9ub2hpZ2htZW0oaW5vZGUpOwpAQCAtNzY4LDQgJiM0Mzs4MzgsMyBAQCBtb2R1bGVfaW5pdChpbml0X21pbml4X2ZzKQogbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcykKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O01pbml4IGZpbGUgc3lzdGVtJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7Ci0KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lvbWFwLmMgYi9mcy9taW5peC9pb21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi43YmIwNDM5ZTM2Njk5NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lvbWFwLmMKQEAgLTAsMCAmIzQzOzEsMTE0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogaW9tYXAgZnVuY3Rpb25zIGZvciBtaW5peC4gQXQgbGVhc3QgdGhlIGZpcnN0IHBhc3Mgb2YgdGhpcyBmaWxlIHdhcyB0YWtlbgomIzQzOyAqIGZyb20gdGhlIHhpYWZzIGlvbWFwLmMsIHdoaWNoIGlzIGZpdHRpbmcgc2luY2UgdGhlIHhpYWZzIG1vZHVsZSBpbiB0dXJuCiYjNDM7ICogYm9ycm93ZWQgaGVhdmlseSBmcm9tIHRoZSBtb2Rlcm5pemVkIG1pbml4IGZzIGtlcm5lbCBtb2R1bGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtaW5peF9pb21hcF9iZWdpbiAtIG1hcCBhIGZpbGUgcmFuZ2UgdG8gZGlzayBibG9ja3MuIEl0IGFjdHMgYXMgYSByZXBsYWNlbWVudAomIzQzOyAqIGZvciBnZXRfYmxvY2sgaW4gaXRyZWVfY29tbW9uLmMsIGF0IGxlYXN0IGluIHRoZSBpbXBvcnRhbnQgd2F5cywgYW5kIGlzCiYjNDM7ICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLiBUaGlzIGlzIHRha2VuCiYjNDM7ICogZGlyZWN0bHkgZnJvbSB0aGUgb3V0LW9mLXRyZWUgeGlhZnMgaW9tYXAgY2hhbmdlcywgYW5kIHRoZSBleGZhdCBpb21hcAomIzQzOyAqIGNoYW5nZXMgd2VyZSBhbiBpbnNwaXJhdGlvbiBmb3IgdGhhdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsCiYjNDM7CXVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiYjNDM7CXVuc2lnbmVkIGludCBibGtiaXRzID0gc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7CiYjNDM7CXNlY3Rvcl90IGlibG9jayA9IG9mZnNldCAmZ3Q7Jmd0OyBibGtiaXRzOwomIzQzOwlpbnQgY3JlYXRlID0gZmxhZ3MgJmFtcDsgSU9NQVBfV1JJVEU7CiYjNDM7CiYjNDM7CS8qIE1vc3RseSB0YWtlbiBmcm9tIG1vZGVybi14aWFmcyBpdHJlZS5jIGdldF9ibG9jayB3aXRoIGVsZW1lbnRzIGZyb20KJiM0MzsJICogc2ltaWxhciBleGZhdCBvcGVyYXRpb25zLgomIzQzOwkgKi8KJiM0MzsJaW50IG9mZnNldHNbREVQVEhdOwomIzQzOwlJbmRpcmVjdCBjaGFpbltERVBUSF07CiYjNDM7CUluZGlyZWN0ICpwYXJ0aWFsOwomIzQzOwlpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpOwomIzQzOwlpbnQgbGVmdDsKJiM0MzsJaW50IGVyciA9IC1FSU87CiYjNDM7CiYjNDM7CXNlY3Rvcl90IHBoeXM7CiYjNDM7CiYjNDM7CS8qIGJsb2NrIGlzIGJleW9uZCBtYXggZmlsZSBzaXplICovCiYjNDM7CWlmIChkZXB0aCA9PSAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlvbWFwLSZndDtiZGV2ID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmRldjsKJiM0MzsKJiM0MztyZXJlYWQ6CiYjNDM7CXBhcnRpYWwgPSBnZXRfYnJhbmNoKGlub2RlLCBkZXB0aCwgb2Zmc2V0cywgY2hhaW4sICZhbXA7ZXJyKTsKJiM0MzsKJiM0MzsJLyogU2ltcGxlc3QgY2FzZSAtIGJsb2NrIGZvdW5kLCBubyBhbGxvY2F0aW9uIG5lZWRlZCAqLwomIzQzOwlpZiAoIXBhcnRpYWwpIHsKJiM0MzsJCS8qIEJpdCBvZiBhIHdlaXJkIG9yZGVyLCBidXQgaXQmIzM5O2xsIG1ha2Ugc2Vuc2Ugd2hlbiB5b3UgZ2V0IHRvCiYjNDM7CQkgKiB0aGUgYm90dG9tLgomIzQzOwkJICovCiYjNDM7CQlpb21hcC0mZ3Q7ZmxhZ3MgPSBJT01BUF9GX01FUkdFRDsKJiM0Mztnb3RfaXQ6CiYjNDM7CQlwaHlzID0gYmxvY2tfdG9fY3B1KGNoYWluW2RlcHRoIC0gMV0ua2V5KTsKJiM0MzsJCXBhcnRpYWwgPSBjaGFpbiYjNDM7ZGVwdGgtMTsKJiM0MzsJCS8qIFNldCB1cCB0aGUgaW9tYXAgc3RydWN0IGJlZm9yZSBjbGVhbmluZyB1cCAqLwomIzQzOwkJaW9tYXAtJmd0O3R5cGUgPSBJT01BUF9NQVBQRUQ7CiYjNDM7CQlpb21hcC0mZ3Q7YWRkciA9ICh1NjQpcGh5cyAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzOwkJaW9tYXAtJmd0O2xlbmd0aCA9IDEgJmx0OyZsdDsgYmxrYml0czsKJiM0MzsJCWlvbWFwLSZndDtvZmZzZXQgPSAodTY0KWlibG9jayAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE5leHQgc2ltcGxlIGNhc2UgLSBwbGFpbiBsb29rdXAgb3IgZmFpbGVkIHJlYWQgb2YgaW5kaXJlY3QgYmxvY2sgKi8KJiM0MzsJaWYgKCFjcmVhdGUgfHwgZXJyID09IC1FSU8pIHsKJiM0MzsJCWlvbWFwLSZndDt0eXBlID0gSU9NQVBfSE9MRTsKJiM0MzsJCWlvbWFwLSZndDthZGRyID0gSU9NQVBfTlVMTF9BRERSOwomIzQzOwkJaW9tYXAtJmd0O2xlbmd0aCA9IDEgJmx0OyZsdDsgYmxrYml0czsKJiM0MzsJCWlvbWFwLSZndDtvZmZzZXQgPSAodTY0KWlibG9jayAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzOwkJaW9tYXAtJmd0O2ZsYWdzID0gMDsKJiM0MztjbGVhbnVwOgomIzQzOwkJd2hpbGUgKHBhcnRpYWwgJmd0OyBjaGFpbikgewomIzQzOwkJCWJyZWxzZShwYXJ0aWFsLSZndDtiaCk7CiYjNDM7CQkJcGFydGlhbC0tOwomIzQzOwkJfQomIzQzO291dDoKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSW5kaXJlY3QgYmxvY2sgbWlnaHQgYmUgcmVtb3ZlZCBieSB0cnVuY2F0ZSB3aGlsZSB3ZSB3ZXJlCiYjNDM7CSAqIHJlYWRpbmcgaXQuIEhhbmRsaW5nIG9mIHRoYXQgY2FzZSAoZm9yZ2V0IHdoYXQgd2UmIzM5O3ZlIGdvdCBhbmQKJiM0MzsJICogcmVyZWFkKSBpcyB0YWtlbiBvdXQgb2YgdGhlIG1haW4gcGF0aC4KJiM0MzsJICovCiYjNDM7CWlmIChlcnIgPT0gLUVBR0FJTikKJiM0MzsJCWdvdG8gY2hhbmdlZDsKJiM0MzsKJiM0MzsJbGVmdCA9IChjaGFpbiAmIzQzOyBkZXB0aCkgLSBwYXJ0aWFsOwomIzQzOwllcnIgPSBhbGxvY19icmFuY2goaW5vZGUsIGxlZnQsIG9mZnNldHMgJiM0MzsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoc3BsaWNlX2JyYW5jaChpbm9kZSwgY2hhaW4sIHBhcnRpYWwsIGxlZnQpICZsdDsgMCkKJiM0MzsJCWdvdG8gY2hhbmdlZDsKJiM0MzsKJiM0MzsJLyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqLwomIzQzOwlpb21hcC0mZ3Q7ZmxhZ3MgPSBJT01BUF9GX05FVzsKJiM0MzsJZ290byBnb3RfaXQ7CiYjNDM7CiYjNDM7Y2hhbmdlZDoKJiM0MzsJd2hpbGUgKHBhcnRpYWwgJmd0OyBjaGFpbikgewomIzQzOwkJYnJlbHNlKHBhcnRpYWwtJmd0O2JoKTsKJiM0MzsJCXBhcnRpYWwtLTsKJiM0MzsJfQomIzQzOwlnb3RvIHJlcmVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtaW5peF9pb21hcF9lbmQgZW5kcyB1cCBiZWluZyBhIG5vcDsgc2luY2UgbWluaXggZG9lc24mIzM5O3QgaGF2ZSBhbnkgZXh0ZW50cyBvcgomIzQzOyAqIHRyYW5zYWN0aW9ucyB0byB3b3JyeSBhYm91dCwgdGhlcmUgaXNuJiMzOTt0IGFueXRoaW5nIHRvIHVwZGF0ZSBoZXJlLiBUaGUgb24tZGlzawomIzQzOyAqIGluZGlyZWN0IGJsb2NrcyBnZXQgZGlydGllZCBpbiBtaW5peF9pb21hcF9iZWdpbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwlzc2l6ZV90IHdyaXR0ZW4sIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YxLmMgYi9mcy9taW5peC9pdHJlZV92MS5jCmluZGV4IDFmZWQ5MDYwNDJhYTg0Li41OGMyOWY0NDQzZDM3MiAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV92MS5jCkBAIC00OSw2ICYjNDM7NDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pCiB9CiAKICNpbmNsdWRlICYjMzQ7aXRyZWVfY29tbW9uLmMmIzM0OwomIzQzOy8qIE5PVEEgQkVORToKJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgaWNreSB0byBtZSwgYnV0IGF0IHRoZSBzYW1lIHRpbWUgaGF2aW5nIGl0IGJlIGEgc3RhbmRhbG9uZSBDIGZpbGUKJiM0MzsgKiB0aGF0JiMzOTtzIGNvbXBpbGVkIHRvIG9iamVjdCBmb3JtIGFuZCBsaW5rZWQgc2VwYXJhdGVseSBsaWtlIGl0IGlzIGluIHhpYWZzIGlzCiYjNDM7ICogbXVjaCBuYXN0aWVyIGluIG1pbml4IGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgbWluaXggZnMgdGhhdAomIzQzOyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJiMzOTt0CiYjNDM7ICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlCiYjNDM7ICogaXMgaW5jbHVkZWQgaW4gdGhlIGl0cmVlX3YxIGFuZCBpdHJlZV92MihhbmQgdjMpIGZpbGVzLCBJJiMzOTttIGluY2x1ZGluZyBpb21hcC5jCiYjNDM7ICogaW4gdGhlc2UgZmlsZXMgYXMgd2VsbC4gSXQgZG9lcyBhdCBsZWFzdCBhdm9pZCBleHBvcnRpbmcgc29tZSBjdXJyZW50bHkKJiM0MzsgKiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBuZWVkZWQgYW55d2hlcmUgYnV0IGl0cmVlX2NvbW1vbi5jIGFuZCBpb21hcC5jLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuYyYjMzQ7CiAKIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssCiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKQEAgLTYxLDcgJiM0Mzs3MywxOCBAQCB2b2lkIFYxX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCXRydW5jYXRlKGlub2RlKTsKIH0KIAotdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQomIzQzO3Vuc2lnbmVkIGludCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpOwogfQomIzQzOwomIzQzO2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcyA9IHsKJiM0MzsJLmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sCiYjNDM7CS5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjIuYyBiL2ZzL21pbml4L2l0cmVlX3YyLmMKaW5kZXggOWQwMGYzMWEyZDlkMTUuLmZjN2E1YWU4ZmExY2EzIDEwMDY0NAotLS0gYS9mcy9taW5peC9pdHJlZV92Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2l0cmVlX3YyLmMKQEAgLTU3LDYgJiM0Mzs1NywxMCBAQCBzdGF0aWMgaW50IGJsb2NrX3RvX3BhdGgoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssIGludCBvZmZzZXRzW0RFUFRIXSkKIH0KIAogI2luY2x1ZGUgJiMzNDtpdHJlZV9jb21tb24uYyYjMzQ7CiYjNDM7LyogU2VlIHRoZSBub3RlIGluIGl0cmVlX3YxIGluIGEgY29tbWVudCB0aGF0IHN0YXJ0cyAmIzM0O05PVEEgQkVORSYjMzQ7IGZvciBhbgomIzQzOyAqIGV4cGxhbmF0aW9uIGZvciB3aHkgaW9tYXAuYyBpcyBpbmNsdWRlZCBoZXJlLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuYyYjMzQ7CiAKIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssCiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKQEAgLTY5LDcgJiM0Mzs3MywxOCBAQCB2b2lkIFYyX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCXRydW5jYXRlKGlub2RlKTsKIH0KIAotdW5zaWduZWQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQomIzQzO3Vuc2lnbmVkIGludCBWMl9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpOwogfQomIzQzOwomIzQzO2ludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcyA9IHsKJiM0MzsJLmlvbWFwX2JlZ2luID0gVjJfbWluaXhfaW9tYXBfYmVnaW4sCiYjNDM7CS5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvbWluaXguaCBiL2ZzL21pbml4L21pbml4LmgKaW5kZXggZjIwMjVjOWI1ODI1MmYuLmZhY2U3NDEwMDM0NjAyIDEwMDY0NAotLS0gYS9mcy9taW5peC9taW5peC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L21pbml4LmgKQEAgLTUsNiAmIzQzOzUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21pbml4X2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKICNkZWZpbmUgSU5PREVfVkVSU0lPTihpbm9kZSkJbWluaXhfc2IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX3ZlcnNpb24KICNkZWZpbmUgTUlOSVhfVjEJCTB4MDAwMQkJLyogb3JpZ2luYWwgbWluaXggZnMgKi8KQEAgLTU2LDcgJiM0Mzs1Nyw3IEBAIGludCBtaW5peF9uZXdfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSk7CiB2b2lkIG1pbml4X2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibG9jayk7CiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogaW50IG1pbml4X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqLCBjb25zdCBzdHJ1Y3QgcGF0aCAqLAotCQlzdHJ1Y3Qga3N0YXQgKiwgdTMyLCB1bnNpZ25lZCBpbnQpOwomIzQzOwkJc3RydWN0IGtzdGF0ICosIHUzMiwgdW5zaWduZWQpOwogaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKTsKIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbWluaXhfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpOwpAQCAtODAsMTAgJiM0Mzs4MSwxOSBAQCBpbnQgbWluaXhfc2V0X2xpbmsoc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiBzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9kb3Rkb3Qoc3RydWN0IGlub2RlKiwgc3RydWN0IGZvbGlvICoqKTsKIGlub190IG1pbml4X2lub2RlX2J5X25hbWUoc3RydWN0IGRlbnRyeSopOwogCiYjNDM7ZXh0ZXJuIGludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAomIzQzOwlsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsCiYjNDM7CXN0cnVjdCBpb21hcCAqc3JjbWFwKTsKJiM0MztleHRlcm4gaW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCiYjNDM7CWxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwKJiM0MzsJc3RydWN0IGlvbWFwICpzcmNtYXApOwomIzQzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wczsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHM7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1pbml4X3NiX2luZm8gKm1pbml4X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CkBAIC05NSwxMSAmIzQzOzEwNSwxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IG1pbml4X2lub2RlX2luZm8sIHZmc19pbm9kZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBiaXRzLCB1bnNpZ25lZCBibG9ja3NpemUpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSkKIHsKIAlyZXR1cm4gRElWX1JPVU5EX1VQKGJpdHMsIGJsb2Nrc2l6ZSAqIDgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICptaW5peF9pb21hcF9vcHNfdmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSA/CiYjNDM7CQkmYW1wO1YxX21pbml4X2lvbWFwX29wcyA6ICZhbXA7VjJfbWluaXhfaW9tYXBfb3BzOwomIzQzO30KJiM0MzsKICNpZiBkZWZpbmVkKENPTkZJR19NSU5JWF9GU19OQVRJVkVfRU5ESUFOKSAmYW1wOyZhbXA7IFwKIAlkZWZpbmVkKENPTkZJR19NSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRUQpCiAKQEAgLTEyOSw3ICYjNDM7MTQ1LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSkKICAqIGJpZy1lbmRpYW4gMTZiaXQgaW5kZXhlZCBiaXRtYXBzCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKIAljb25zdCB1bnNpZ25lZCBzaG9ydCAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyOwogCXVuc2lnbmVkIHNob3J0IG51bTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkzMAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNaW5peCBJb21hcCBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBpbnRyb2R1Y2luZyBpb21hcCBzdXBwb3J0IGludG8gdGhlIE1pbml4IGZpbGVzeXN0ZW0sIGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGlzIGlzIHRoZSByZXBsYWNlbWVudCBvZiB0aGUgZXhpc3RpbmcgYnVmZmVyX2hlYWQtYmFzZWQgb3BlcmF0aW9ucyB3aXRoIGlvbWFwIHByaW1pdGl2ZXMsIHNwZWNpZmljYWxseSBmb3IgcmVndWxhciBmaWxlcy4gRGlyZWN0b3JpZXMgYXJlIHN0YXlpbmcgd2l0aCB0aGUgYnVmZmVyX2hlYWQgYXBwcm9hY2ggZm9yIG5vdywgd2hpY2ggaXMgYSBzZW5zaWJsZSwgaW5jcmVtZW50YWwgY2hhbmdlLiBUaGV5JiMzOTt2ZSBhZGRlZCBhIHNsZXcgb2YgbmV3IGZ1bmN0aW9uczogYG1pbml4X2Rpb19yZWFkX2l0ZXJgLCBgbWluaXhfZGlvX3dyaXRlX2l0ZXJgLCB0aGUgc3RhbmRhcmQgZmlsZSBpdGVyYXRvcnMsIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGFuZCB0aGUgZm9saW8gZnVuY3Rpb25zLiBBZGRpdGlvbmFsbHksIHdlIGhhdmUgYG1pbml4X2JtYXBgIOKAkyB0aGUgYmxvY2sgbWFwcGluZyBmdW5jdGlvbiwgd2hpY2ggd2lsbCBiZSBpbnRlcmVzdGluZyB0byByZXZpZXcuIExvb2tzIGxpa2UgdGhleSYjMzk7dmUgc3B1biB1cCBhIG5ldyBgZnMvbWluaXgvaW9tYXAuY2AgZmlsZSB3aXRoIGBtaW5peF9pb21hcF9iZWdpbmAgYW5kIGBtaW5peF9pb21hcF9lbmRgLCB3aGljaCBhcmUgdGhlIHN0YW5kYXJkIGJlZ2luL2VuZCBwb2ludHMgZm9yIGlvbWFwIG9wZXJhdGlvbnMsIGFuZCBwcm9iYWJseSB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLgoKVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIE1pbml4JiMzOTtzIElPIHBhdGguIEdpdmVuIHRoZSBkZXB0aCBvZiB0aGlzIGNoYW5nZSwgSSAqZGVmaW5pdGVseSogbmVlZCB0byBlYXJtYXJrIHRoaXMgZm9yIGZ1enppbmcuIFdlJiMzOTtyZSB0b3VjaGluZyBjcml0aWNhbCBjb2RlIHRoYXQgZGVhbHMgd2l0aCBkYXRhIGFjY2VzcywgYW5kIGFueSBzdWJ0bGUgYnVnIGhlcmUgY291bGQgaGF2ZSBzZXJpb3VzIGNvbnNlcXVlbmNlcy4KCk5vdywgbGV0JiMzOTtzIGdldCBhIGhhbmRsZSBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBlbmFibGVkLiBUaW1lIHRvIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIHRoZSBLY29uZmlnIGZpbGVzLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBNSU5JWGAgd2l0aGluIHRoZSBmaWxlc3lzdGVtIHNvdXJjZSBkaXJlY3RvcnksIHBhcnRpY3VsYXJseSBpbiBgZnMvbWluaXgvS2NvbmZpZ2Agb3IgYW55dGhpbmcgc2ltaWxhcmx5IG5hbWVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBleHBvc2VkIHNvIHRoYXQgSSB1bmRlcnN0YW5kIHdoZXJlIGFuZCB3aGVuIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNSU5JWF9GUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9taW5peC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9taW5peC9LY29uZmlnOjI6Y29uZmlnIE1JTklYX0ZTXG5mcy9taW5peC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNaW5peCBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbWluaXgvS2NvbmZpZy0yMC1cbmZzL21pbml4L0tjb25maWc6MjE6Y29uZmlnIE1JTklYX0ZTX05BVElWRV9FTkRJQU5cbmZzL21pbml4L0tjb25maWctMjItXHRkZWZfYm9vbCBNSU5JWF9GU1xuLS1cbmZzL21pbml4L0tjb25maWctMjQtXG5mcy9taW5peC9LY29uZmlnOjI1OmNvbmZpZyBNSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRURcbmZzL21pbml4L0tjb25maWctMjYtXHRkZWZfYm9vbCBNSU5JWF9GU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NTcKCQkJCQkJCW91dHB1dDogMjU3CgkJCQkJCQl0aG91Z2h0czogMzc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWluaXggRlMgUGF0Y2gqKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5pdGVseSB0YXJnZXRpbmcgYE1JTklYX0ZTYC4gTXkgZm9jdXMgaGVyZSBpcyB0byBpZGVudGlmeSBrZXkgc3ltYm9scyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2gsIHRoZSBvbmVzIG1vc3QgbGlrZWx5IHRvIHlpZWxkIGludGVyZXN0aW5nIGZ1enppbmcgdGFyZ2V0cy4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkmIzM5O3ZlIGdvdCBhIHNvbGlkIGxpc3Qgb2YgcG90ZW50aWFsIGZ1bmN0aW9ucyB0byBpbmNsdWRlIGluIG15IGBGb2N1c1N5bWJvbHNgOiBgbWluaXhfZGlvX3JlYWRfaXRlcmAsIGBtaW5peF9kaW9fd3JpdGVfaXRlcmAsIGBtaW5peF9maWxlX3JlYWRfaXRlcmAsIGBtaW5peF9maWxlX3dyaXRlX2l0ZXJgLCBgbWluaXhfd3JpdGViYWNrX3JhbmdlYCwgYG1pbml4X3dyaXRlcGFnZXNgLCBgbWluaXhfcmVhZF9mb2xpb2AsIGBtaW5peF9yZWFkYWhlYWRgLCBgbWluaXhfYm1hcGAsIGBtaW5peF9pb21hcF9iZWdpbmAsIGBtaW5peF9pb21hcF9lbmRgLCBgVjFfbWluaXhfaW9tYXBfYmVnaW5gLCBhbmQgYFYyX21pbml4X2lvbWFwX2JlZ2luYC4gSSYjMzk7dmUgcXVpY2tseSBjb25maXJtZWQgdGhlIGZ1bmN0aW9uIG5hbWVzIGFnYWluc3QgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMsIGp1c3QgdG8gZW5zdXJlIGFjY3VyYWN5LgoKQmFzZWQgb24gdGhpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zIHJlcHJlc2VudCBlbnRyeSBwb2ludHMgb3IgY3JpdGljYWwgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIE1pbml4IGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24uIFRoZXkmIzM5O3JlIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBkZXRhaWxlZCBmdXp6aW5nIGFuYWx5c2lzIGJlY2F1c2UgdGhleSBhcmUgbmV3bHkgaW50cm9kdWNlZCBvciBhbHRlcmVkLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciB1bmNvdmVyaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE5vdywgSSYjMzk7bSByZWFkeSB0byBtb3ZlIGZvcndhcmQgYW5kIHNldCB0aGUgcmVzdWx0cyBhY2NvcmRpbmdseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlOSVhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaW5peF9kaW9fcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2Rpb193cml0ZV9lbmRfaW8mIzM0OywKICAgICYjMzQ7bWluaXhfZGlvX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfZmlsZV9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfb3BlbiYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZWJhY2tfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkX2ZvbGlvJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDttaW5peF9ibWFwJiMzNDssCiAgICAmIzM0O21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21pbml4X2lvbWFwX2VuZCYjMzQ7LAogICAgJiMzNDtWMV9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtWMl9taW5peF9pb21hcF9iZWdpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGlvbWFwIHN1cHBvcnQgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLCByZXBsYWNpbmcgb2xkZXIgYnVmZmVyX2hlYWQtYmFzZWQgb3BlcmF0aW9ucyBmb3IgcmVndWxhciBmaWxlcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHJlYWQvd3JpdGUvbW1hcCBsb2dpYyBvZiB0aGUgbWluaXggZmlsZXN5c3RlbSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JTklYX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWluaXhfZGlvX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9kaW9fd3JpdGVfZW5kX2lvJiMzNDssCiAgICAmIzM0O21pbml4X2Rpb193cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9maWxlX29wZW4mIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGViYWNrX3JhbmdlJiMzNDssCiAgICAmIzM0O21pbml4X3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bWluaXhfcmVhZF9mb2xpbyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkYWhlYWQmIzM0OywKICAgICYjMzQ7bWluaXhfYm1hcCYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9lbmQmIzM0OywKICAgICYjMzQ7VjFfbWluaXhfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7VjJfbWluaXhfaW9tYXBfYmVnaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBpb21hcCBzdXBwb3J0IGZvciB0aGUgbWluaXggZmlsZXN5c3RlbSwgcmVwbGFjaW5nIG9sZGVyIGJ1ZmZlcl9oZWFkLWJhc2VkIG9wZXJhdGlvbnMgZm9yIHJlZ3VsYXIgZmlsZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSByZWFkL3dyaXRlL21tYXAgbG9naWMgb2YgdGhlIG1pbml4IGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6MTE6MjEuNTA0MDEwMzM3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MDQwMjIyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlOSVhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaW5peF9kaW9fcmVhZF9pdGVyXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfZW5kX2lvXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZmlsZV9yZWFkX2l0ZXJcIixcbiAgICBcIm1pbml4X2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZmlsZV9vcGVuXCIsXG4gICAgXCJtaW5peF93cml0ZWJhY2tfcmFuZ2VcIixcbiAgICBcIm1pbml4X3dyaXRlcGFnZXNcIixcbiAgICBcIm1pbml4X3JlYWRfZm9saW9cIixcbiAgICBcIm1pbml4X3JlYWRhaGVhZFwiLFxuICAgIFwibWluaXhfYm1hcFwiLFxuICAgIFwibWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIm1pbml4X2lvbWFwX2VuZFwiLFxuICAgIFwiVjFfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIlYyX21pbml4X2lvbWFwX2JlZ2luXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBpb21hcCBzdXBwb3J0IGZvciB0aGUgbWluaXggZmlsZXN5c3RlbSwgcmVwbGFjaW5nIG9sZGVyIGJ1ZmZlcl9oZWFkLWJhc2VkIG9wZXJhdGlvbnMgZm9yIHJlZ3VsYXIgZmlsZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSByZWFkL3dyaXRlL21tYXAgbG9naWMgb2YgdGhlIG1pbml4IGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjoxMToyMS41MDQwMTU2NTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDQ1ODE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJkZGVkOWFlMjIzZWI3OGY0ODVlMWQwM2QyMDNlYTM4OGIyNGJjYWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdW4gMjUgMjI6MTE6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jXFxuaW5kZXggODZlNTk0M2NkMmZmNzQuLjFmNDIxNzExNTQwMThkIDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L2ZpbGUuY1xcbisrKyBiL2ZzL21pbml4L2ZpbGUuY1xcbkBAIC0xNywxNyArMTcsMTYyIEBAIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuIFxcdFxcdFxcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4gfVxcbiBcXG4rc3RhdGljIHNzaXplX3QgbWluaXhfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcbitcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcXG4rXFxuK1xcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgb3BzLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG4rXFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWluaXhfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwgaW50IGVycm9yLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcdGxvZmZfdCBwb3MgPSBpb2NiLVxcdTAwM2VraV9wb3M7XFxuK1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdHBvcyArPSBzaXplO1xcbitcXHRpZiAoc2l6ZSBcXHUwMDI2XFx1MDAyNiBwb3MgXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcXG4rXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBwb3MpO1xcbitcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIG1pbml4X2Rpb193cml0ZV9vcHMgPSB7XFxuK1xcdC5lbmRfaW8gPSBtaW5peF9kaW9fd3JpdGVfZW5kX2lvLFxcbit9O1xcbitcXG4rc3RhdGljIHNzaXplX3QgbWluaXhfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcdHVuc2lnbmVkIGludCBmbGFncyA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYmxvY2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbitcXG4rXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuK1xcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK1xcdHJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbitcXHRpZiAoaW9jYi1cXHUwMDNla2lfcG9zICsgaW92X2l0ZXJfY291bnQoZnJvbSkgXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkgfHxcXG4rXFx0XFx0IUlTX0FMSUdORUQoaW9jYi1cXHUwMDNla2lfcG9zIHwgaW92X2l0ZXJfYWxpZ25tZW50KGZyb20pLCBibG9ja3NpemUpKVxcbitcXHRcXHRmbGFncyB8PSBJT01BUF9ESU9fRk9SQ0VfV0FJVDtcXG4rXFxuK1xcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpO1xcbitcXG4rXFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIG9wcyxcXG4rXFx0XFx0XFx1MDAyNm1pbml4X2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTtcXG4rXFx0aWYgKHJldCA9PSAtRU5PVEJMSylcXG4rXFx0XFx0cmV0ID0gMDsgLyogZmFsbGJhY2sgdG8gYnVmZmVyZWQgKi9cXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBpb3ZfaXRlcl9jb3VudChmcm9tKSkge1xcbitcXHRcXHRsb2ZmX3QgcG9zO1xcbitcXHRcXHRsb2ZmX3QgZW5kYnl0ZTtcXG4rXFx0XFx0c3NpemVfdCBzdGF0dXM7XFxuK1xcbitcXHRcXHRpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XFxuK1xcdFxcdHBvcyA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4rXFx0XFx0c3RhdHVzID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLCBvcHMsXFxuK1xcdFxcdFxcdE5VTEwsIE5VTEwpO1xcbitcXHRcXHRpZiAodW5saWtlbHkoc3RhdHVzIFxcdTAwM2MgMCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gc3RhdHVzO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldCArPSBzdGF0dXM7XFxuK1xcdFxcdGVuZGJ5dGUgPSBwb3MgKyBzdGF0dXMgLSAxO1xcbitcXHRcXHRzdGF0dXMgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIHBvcywgZW5kYnl0ZSk7XFxuK1xcdFxcdGlmICghc3RhdHVzKSB7XFxuK1xcdFxcdFxcdGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLFxcbitcXHRcXHRcXHRcXHRwb3MgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4rXFx0XFx0XFx0XFx0ZW5kYnl0ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdFxcdHJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXQgPSBzdGF0dXM7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rb3V0X3VubG9jazpcXG4rXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbit7XFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKVxcbitcXHRcXHRyZXR1cm4gbWluaXhfZGlvX3JlYWRfaXRlcihpb2NiLCB0byk7XFxuK1xcbitcXHRyZXR1cm4gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7XFxuK31cXG4rXFxuK3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0O1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdC8qIG1pbml4X2Rpb193cml0ZV9pdGVyIGFsc28gbG9ja3MgdGhlIGlub2RlIGFuZCBhcHBlYXJzIHRvIGRvIHRoZSBzYW1lXFxuK1xcdCAqIGdlbmVyYWwgc29ydHMgb2YgY2hlY2tzIGFzIHRoaXMsIHNvIGp1c3QgcmV0dXJuIGRpcmVjdGx5IGZyb20gdGhlcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RJUkVDVClcXG4rXFx0XFx0cmV0dXJuIG1pbml4X2Rpb193cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbitcXG4rXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuK1xcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcXG4rXFxuK1xcdHJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLFxcbitcXHRcXHRcXHROVUxMLCBOVUxMKTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTtcXG4rXFxuK3VubG9jazpcXG4rXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtaW5peF9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuK3tcXG4rXFx0ZmlscC1cXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xcbitcXHRyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbHApO1xcbit9XFxuK1xcbiAvKlxcbi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yXFxuLSAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLlxcbisgKiBXZSBzdGlsbCBoYXZlIHNvbWUgTlVMTHMgaGVyZSwgYnV0IG5vdCBhcyBtYW55IG9mIHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZVxcbisgKiBzdGlsbCBPSyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0uXFxuICAqL1xcbitcXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuLVxcdC5yZWFkX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuLVxcdC53cml0ZV9pdGVyXFx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcXG4rXFx0LnJlYWRfaXRlclxcdD0gbWluaXhfZmlsZV9yZWFkX2l0ZXIsXFxuK1xcdC53cml0ZV9pdGVyXFx0PSBtaW5peF9maWxlX3dyaXRlX2l0ZXIsXFxuIFxcdC5tbWFwX3ByZXBhcmVcXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXFxuK1xcdC5vcGVuXFx0XFx0PSBtaW5peF9maWxlX29wZW4sXFxuIFxcdC5mc3luY1xcdFxcdD0gbWluaXhfZnN5bmMsXFxuIFxcdC5zcGxpY2VfcmVhZFxcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcXG4rXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmNcXG5pbmRleCBjMzBjYzU5MDY5OGQ2Zi4uY2QxMmU1OWNlOWI5ZDIgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xcbisrKyBiL2ZzL21pbml4L2lub2RlLmNcXG5AQCAtNDM2LDYgKzQzNiwzMSBAQCBzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgc3NpemVfdCBtaW5peF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXFxuK3tcXG4rXFx0aW50IGVycm9yO1xcbitcXG4rXFx0aWYgKHBvcyBcXHUwMDNjIHdwYy1cXHUwMDNlaW9tYXAub2Zmc2V0IHx8XFxuK1xcdFxcdFxcdHBvcyBcXHUwMDNlPSB3cGMtXFx1MDAzZWlvbWFwLm9mZnNldCArIHdwYy1cXHUwMDNlaW9tYXAubGVuZ3RoKSB7XFxuK1xcdFxcdGlmIChJTk9ERV9WRVJTSU9OKHdwYy1cXHUwMDNlaW5vZGUpID09IE1JTklYX1YxKVxcbitcXHRcXHRcXHRlcnJvciA9IFYxX21pbml4X2lvbWFwX2JlZ2luKHdwYy1cXHUwMDNlaW5vZGUsIHBvcywgbGVuLCAwLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgTlVMTCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0ZXJyb3IgPSBWMl9taW5peF9pb21hcF9iZWdpbih3cGMtXFx1MDAzZWlub2RlLCBwb3MsIGxlbiwgMCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNndwYy1cXHUwMDNlaW9tYXAsIE5VTEwpO1xcbitcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBwb3MsIGVuZF9wb3MsIGxlbik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBtaW5peF93cml0ZWJhY2tfb3BzID0ge1xcbitcXHQud3JpdGViYWNrX3JhbmdlID0gbWluaXhfd3JpdGViYWNrX3JhbmdlLFxcbitcXHQud3JpdGViYWNrX3N1Ym1pdCA9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsXFxuK307XFxuK1xcbiBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcXG4gXFx0XFx0ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbiB7XFxuQEAgLTQ0NSwxNyArNDcwLDQ1IEBAIHN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxcbiBcXHRcXHRyZXR1cm4gVjJfbWluaXhfZ2V0X2Jsb2NrKGlub2RlLCBibG9jaywgYmhfcmVzdWx0LCBjcmVhdGUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuKy8qIFRoZSBvbGQgbWluaXhfd3JpdGVwYWdlcywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi9cXG4rc3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4ge1xcbiBcXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4rXFx0XFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuK3tcXG4rXFx0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xcbitcXHRcXHQuaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0LFxcbitcXHRcXHQud2JjID0gd2JjLFxcbitcXHRcXHQub3BzID0gXFx1MDAyNm1pbml4X3dyaXRlYmFja19vcHMsXFxuK1xcdH07XFxuK1xcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFxcdTAwMjZ3cGMpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1pbml4X3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihmaWxlLVxcdTAwM2VmX2lub2RlKTtcXG4rXFxuK1xcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBvcHMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogVGhlIG9sZCBtaW5peF9yZWFkX2ZvbGlvLCBwcmVzZXJ2ZWQgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zLiAqL1xcbitzdGF0aWMgaW50IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgbWluaXhfZ2V0X2Jsb2NrKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbWluaXhfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIocmFjLVxcdTAwM2VmaWxlLVxcdTAwM2VmX2lub2RlKTtcXG4rXFxuK1xcdGlvbWFwX2Jpb19yZWFkYWhlYWQocmFjLCBvcHMpO1xcbit9XFxuK1xcbiBpbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pXFxuIHtcXG4gXFx0cmV0dXJuIF9fYmxvY2tfd3JpdGVfYmVnaW4oZm9saW8sIHBvcywgbGVuLCBtaW5peF9nZXRfYmxvY2spO1xcbkBAIC00ODcsMTkgKzU0MCwzNiBAQCBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFxuIHN0YXRpYyBzZWN0b3JfdCBtaW5peF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcXG4ge1xcbi1cXHRyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsYmxvY2ssbWluaXhfZ2V0X2Jsb2NrKTtcXG4rXFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihtYXBwaW5nLVxcdTAwM2Vob3N0KTtcXG4rXFxuK1xcdHJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCBvcHMpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzID0ge1xcbi1cXHQuZGlydHlfZm9saW9cXHQ9IGJsb2NrX2RpcnR5X2ZvbGlvLFxcbi1cXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXFxuK1xcdC5kaXJ0eV9mb2xpb1xcdD0gaW9tYXBfZGlydHlfZm9saW8sXFxuK1xcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcXG4gXFx0LnJlYWRfZm9saW8gPSBtaW5peF9yZWFkX2ZvbGlvLFxcbitcXHQucmVhZGFoZWFkID0gbWluaXhfcmVhZGFoZWFkLFxcbiBcXHQud3JpdGVwYWdlcyA9IG1pbml4X3dyaXRlcGFnZXMsXFxuK1xcdC5taWdyYXRlX2ZvbGlvID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLFxcbitcXHQuYm1hcCA9IG1pbml4X2JtYXAsXFxuK1xcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsXFxuK1xcdC5yZWxlYXNlX2ZvbGlvID0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcXG4rXFx0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxcbit9O1xcbitcXG4rLyogQSBzcGVjaWFsIGFvcHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQga2VlcHMgdXNpbmcgdGhlIGJ1ZmZlciBoZWFkIGNodW5rcywgYXRcXG4rICogbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfZGlyX2FvcHMgPSB7XFxuK1xcdC5kaXJ0eV9mb2xpbyA9IGJsb2NrX2RpcnR5X2ZvbGlvLFxcbitcXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXFxuK1xcdC5yZWFkX2ZvbGlvID0gbWluaXhfYmxvY2tfcmVhZF9mb2xpbyxcXG4gXFx0LndyaXRlX2JlZ2luID0gbWluaXhfd3JpdGVfYmVnaW4sXFxuIFxcdC53cml0ZV9lbmQgPSBnZW5lcmljX3dyaXRlX2VuZCxcXG4gXFx0Lm1pZ3JhdGVfZm9saW8gPSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcXG4gXFx0LmJtYXAgPSBtaW5peF9ibWFwLFxcbi1cXHQuZGlyZWN0X0lPID0gbm9vcF9kaXJlY3RfSU9cXG4rXFx0LndyaXRlcGFnZXMgPSBtaW5peF9ibG9ja193cml0ZXBhZ2VzLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5AQCAtNTE2LDcgKzU4Niw3IEBAIHZvaWQgbWluaXhfc2V0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGRldl90IHJkZXYpXFxuIFxcdH0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbiBcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfZm9wID0gXFx1MDAyNm1pbml4X2Rpcl9vcGVyYXRpb25zO1xcbi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZtaW5peF9hb3BzO1xcbitcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZtaW5peF9kaXJfYW9wcztcXG4gXFx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuIFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNm1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcXG4gXFx0XFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG5AQCAtNzY4LDQgKzgzOCwzIEBAIG1vZHVsZV9pbml0KGluaXRfbWluaXhfZnMpXFxuIG1vZHVsZV9leGl0KGV4aXRfbWluaXhfZnMpXFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiTWluaXggZmlsZSBzeXN0ZW1cXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbi1cXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW9tYXAuYyBiL2ZzL21pbml4L2lvbWFwLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43YmIwNDM5ZTM2Njk5Nlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9mcy9taW5peC9pb21hcC5jXFxuQEAgLTAsMCArMSwxMTQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBpb21hcCBmdW5jdGlvbnMgZm9yIG1pbml4LiBBdCBsZWFzdCB0aGUgZmlyc3QgcGFzcyBvZiB0aGlzIGZpbGUgd2FzIHRha2VuXFxuKyAqIGZyb20gdGhlIHhpYWZzIGlvbWFwLmMsIHdoaWNoIGlzIGZpdHRpbmcgc2luY2UgdGhlIHhpYWZzIG1vZHVsZSBpbiB0dXJuXFxuKyAqIGJvcnJvd2VkIGhlYXZpbHkgZnJvbSB0aGUgbW9kZXJuaXplZCBtaW5peCBmcyBrZXJuZWwgbW9kdWxlLlxcbisgKi9cXG4rXFxuKy8qXFxuKyAqIG1pbml4X2lvbWFwX2JlZ2luIC0gbWFwIGEgZmlsZSByYW5nZSB0byBkaXNrIGJsb2Nrcy4gSXQgYWN0cyBhcyBhIHJlcGxhY2VtZW50XFxuKyAqIGZvciBnZXRfYmxvY2sgaW4gaXRyZWVfY29tbW9uLmMsIGF0IGxlYXN0IGluIHRoZSBpbXBvcnRhbnQgd2F5cywgYW5kIGlzXFxuKyAqIGFkYXB0ZWQgZnJvbSBpdCwgYnV0IGl0IHVzZXMgaW9tYXAgaW5zdGVhZCBvZiBidWZmZXJfaGVhZC4gVGhpcyBpcyB0YWtlblxcbisgKiBkaXJlY3RseSBmcm9tIHRoZSBvdXQtb2YtdHJlZSB4aWFmcyBpb21hcCBjaGFuZ2VzLCBhbmQgdGhlIGV4ZmF0IGlvbWFwXFxuKyAqIGNoYW5nZXMgd2VyZSBhbiBpbnNwaXJhdGlvbiBmb3IgdGhhdC5cXG4rICovXFxuK3N0YXRpYyBpbnQgbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcXG4rXFx0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcXG4re1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuK1xcdHVuc2lnbmVkIGludCBibGtiaXRzID0gc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XFxuK1xcdHNlY3Rvcl90IGlibG9jayA9IG9mZnNldCBcXHUwMDNlXFx1MDAzZSBibGtiaXRzO1xcbitcXHRpbnQgY3JlYXRlID0gZmxhZ3MgXFx1MDAyNiBJT01BUF9XUklURTtcXG4rXFxuK1xcdC8qIE1vc3RseSB0YWtlbiBmcm9tIG1vZGVybi14aWFmcyBpdHJlZS5jIGdldF9ibG9jayB3aXRoIGVsZW1lbnRzIGZyb21cXG4rXFx0ICogc2ltaWxhciBleGZhdCBvcGVyYXRpb25zLlxcbitcXHQgKi9cXG4rXFx0aW50IG9mZnNldHNbREVQVEhdO1xcbitcXHRJbmRpcmVjdCBjaGFpbltERVBUSF07XFxuK1xcdEluZGlyZWN0ICpwYXJ0aWFsO1xcbitcXHRpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpO1xcbitcXHRpbnQgbGVmdDtcXG4rXFx0aW50IGVyciA9IC1FSU87XFxuK1xcbitcXHRzZWN0b3JfdCBwaHlzO1xcbitcXG4rXFx0LyogYmxvY2sgaXMgYmV5b25kIG1heCBmaWxlIHNpemUgKi9cXG4rXFx0aWYgKGRlcHRoID09IDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aW9tYXAtXFx1MDAzZWJkZXYgPSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19iZGV2O1xcbitcXG4rcmVyZWFkOlxcbitcXHRwYXJ0aWFsID0gZ2V0X2JyYW5jaChpbm9kZSwgZGVwdGgsIG9mZnNldHMsIGNoYWluLCBcXHUwMDI2ZXJyKTtcXG4rXFxuK1xcdC8qIFNpbXBsZXN0IGNhc2UgLSBibG9jayBmb3VuZCwgbm8gYWxsb2NhdGlvbiBuZWVkZWQgKi9cXG4rXFx0aWYgKCFwYXJ0aWFsKSB7XFxuK1xcdFxcdC8qIEJpdCBvZiBhIHdlaXJkIG9yZGVyLCBidXQgaXQnbGwgbWFrZSBzZW5zZSB3aGVuIHlvdSBnZXQgdG9cXG4rXFx0XFx0ICogdGhlIGJvdHRvbS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlvbWFwLVxcdTAwM2VmbGFncyA9IElPTUFQX0ZfTUVSR0VEO1xcbitnb3RfaXQ6XFxuK1xcdFxcdHBoeXMgPSBibG9ja190b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpO1xcbitcXHRcXHRwYXJ0aWFsID0gY2hhaW4rZGVwdGgtMTtcXG4rXFx0XFx0LyogU2V0IHVwIHRoZSBpb21hcCBzdHJ1Y3QgYmVmb3JlIGNsZWFuaW5nIHVwICovXFxuK1xcdFxcdGlvbWFwLVxcdTAwM2V0eXBlID0gSU9NQVBfTUFQUEVEO1xcbitcXHRcXHRpb21hcC1cXHUwMDNlYWRkciA9ICh1NjQpcGh5cyBcXHUwMDNjXFx1MDAzYyBibGtiaXRzO1xcbitcXHRcXHRpb21hcC1cXHUwMDNlbGVuZ3RoID0gMSBcXHUwMDNjXFx1MDAzYyBibGtiaXRzO1xcbitcXHRcXHRpb21hcC1cXHUwMDNlb2Zmc2V0ID0gKHU2NClpYmxvY2sgXFx1MDAzY1xcdTAwM2MgYmxrYml0cztcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBOZXh0IHNpbXBsZSBjYXNlIC0gcGxhaW4gbG9va3VwIG9yIGZhaWxlZCByZWFkIG9mIGluZGlyZWN0IGJsb2NrICovXFxuK1xcdGlmICghY3JlYXRlIHx8IGVyciA9PSAtRUlPKSB7XFxuK1xcdFxcdGlvbWFwLVxcdTAwM2V0eXBlID0gSU9NQVBfSE9MRTtcXG4rXFx0XFx0aW9tYXAtXFx1MDAzZWFkZHIgPSBJT01BUF9OVUxMX0FERFI7XFxuK1xcdFxcdGlvbWFwLVxcdTAwM2VsZW5ndGggPSAxIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHM7XFxuK1xcdFxcdGlvbWFwLVxcdTAwM2VvZmZzZXQgPSAodTY0KWlibG9jayBcXHUwMDNjXFx1MDAzYyBibGtiaXRzO1xcbitcXHRcXHRpb21hcC1cXHUwMDNlZmxhZ3MgPSAwO1xcbitjbGVhbnVwOlxcbitcXHRcXHR3aGlsZSAocGFydGlhbCBcXHUwMDNlIGNoYWluKSB7XFxuK1xcdFxcdFxcdGJyZWxzZShwYXJ0aWFsLVxcdTAwM2ViaCk7XFxuK1xcdFxcdFxcdHBhcnRpYWwtLTtcXG4rXFx0XFx0fVxcbitvdXQ6XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEluZGlyZWN0IGJsb2NrIG1pZ2h0IGJlIHJlbW92ZWQgYnkgdHJ1bmNhdGUgd2hpbGUgd2Ugd2VyZVxcbitcXHQgKiByZWFkaW5nIGl0LiBIYW5kbGluZyBvZiB0aGF0IGNhc2UgKGZvcmdldCB3aGF0IHdlJ3ZlIGdvdCBhbmRcXG4rXFx0ICogcmVyZWFkKSBpcyB0YWtlbiBvdXQgb2YgdGhlIG1haW4gcGF0aC5cXG4rXFx0ICovXFxuK1xcdGlmIChlcnIgPT0gLUVBR0FJTilcXG4rXFx0XFx0Z290byBjaGFuZ2VkO1xcbitcXG4rXFx0bGVmdCA9IChjaGFpbiArIGRlcHRoKSAtIHBhcnRpYWw7XFxuK1xcdGVyciA9IGFsbG9jX2JyYW5jaChpbm9kZSwgbGVmdCwgb2Zmc2V0cyArIChwYXJ0aWFsIC0gY2hhaW4pLCBwYXJ0aWFsKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0aWYgKHNwbGljZV9icmFuY2goaW5vZGUsIGNoYWluLCBwYXJ0aWFsLCBsZWZ0KSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gY2hhbmdlZDtcXG4rXFxuK1xcdC8qIFN1Y2Nlc3NmdWwgYWxsb2NhdGlvbiwgbWFwcGluZyBpdC4gKi9cXG4rXFx0aW9tYXAtXFx1MDAzZWZsYWdzID0gSU9NQVBfRl9ORVc7XFxuK1xcdGdvdG8gZ290X2l0O1xcbitcXG4rY2hhbmdlZDpcXG4rXFx0d2hpbGUgKHBhcnRpYWwgXFx1MDAzZSBjaGFpbikge1xcbitcXHRcXHRicmVsc2UocGFydGlhbC1cXHUwMDNlYmgpO1xcbitcXHRcXHRwYXJ0aWFsLS07XFxuK1xcdH1cXG4rXFx0Z290byByZXJlYWQ7XFxuK31cXG4rXFxuKy8qXFxuKyAqIG1pbml4X2lvbWFwX2VuZCBlbmRzIHVwIGJlaW5nIGEgbm9wOyBzaW5jZSBtaW5peCBkb2Vzbid0IGhhdmUgYW55IGV4dGVudHMgb3JcXG4rICogdHJhbnNhY3Rpb25zIHRvIHdvcnJ5IGFib3V0LCB0aGVyZSBpc24ndCBhbnl0aGluZyB0byB1cGRhdGUgaGVyZS4gVGhlIG9uLWRpc2tcXG4rICogaW5kaXJlY3QgYmxvY2tzIGdldCBkaXJ0aWVkIGluIG1pbml4X2lvbWFwX2JlZ2luLlxcbisgKi9cXG4rc3RhdGljIGludCBtaW5peF9pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcXG4rXFx0c3NpemVfdCB3cml0dGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjEuYyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcXG5pbmRleCAxZmVkOTA2MDQyYWE4NC4uNThjMjlmNDQ0M2QzNzIgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuY1xcbisrKyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcXG5AQCAtNDksNiArNDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXFxuIH1cXG4gXFxuICNpbmNsdWRlIFxcXCJpdHJlZV9jb21tb24uY1xcXCJcXG4rLyogTk9UQSBCRU5FOlxcbisgKlxcbisgKiBUaGlzIGlzIGlja3kgdG8gbWUsIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIGhhdmluZyBpdCBiZSBhIHN0YW5kYWxvbmUgQyBmaWxlXFxuKyAqIHRoYXQncyBjb21waWxlZCB0byBvYmplY3QgZm9ybSBhbmQgbGlua2VkIHNlcGFyYXRlbHkgbGlrZSBpdCBpcyBpbiB4aWFmcyBpc1xcbisgKiBtdWNoIG5hc3RpZXIgaW4gbWluaXggYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBtaW5peCBmcyB0aGF0XFxuKyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJ3RcXG4rICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlXFxuKyAqIGlzIGluY2x1ZGVkIGluIHRoZSBpdHJlZV92MSBhbmQgaXRyZWVfdjIoYW5kIHYzKSBmaWxlcywgSSdtIGluY2x1ZGluZyBpb21hcC5jXFxuKyAqIGluIHRoZXNlIGZpbGVzIGFzIHdlbGwuIEl0IGRvZXMgYXQgbGVhc3QgYXZvaWQgZXhwb3J0aW5nIHNvbWUgY3VycmVudGx5XFxuKyAqIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgbmVlZGVkIGFueXdoZXJlIGJ1dCBpdHJlZV9jb21tb24uYyBhbmQgaW9tYXAuYy5cXG4rICovXFxuKyNpbmNsdWRlIFxcXCJpb21hcC5jXFxcIlxcbiBcXG4gaW50IFYxX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jayxcXG4gXFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXFxuQEAgLTYxLDcgKzczLDE4IEBAIHZvaWQgVjFfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuIFxcdHRydW5jYXRlKGlub2RlKTtcXG4gfVxcbiBcXG4tdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbit1bnNpZ25lZCBpbnQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiB7XFxuIFxcdHJldHVybiBuYmxvY2tzKHNpemUsIHNiKTtcXG4gfVxcbitcXG4raW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuK1xcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXFxuK3tcXG4rXFx0cmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcyA9IHtcXG4rXFx0LmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sXFxuK1xcdC5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjIuYyBiL2ZzL21pbml4L2l0cmVlX3YyLmNcXG5pbmRleCA5ZDAwZjMxYTJkOWQxNS4uZmM3YTVhZThmYTFjYTMgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjIuY1xcbisrKyBiL2ZzL21pbml4L2l0cmVlX3YyLmNcXG5AQCAtNTcsNiArNTcsMTAgQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXFxuIH1cXG4gXFxuICNpbmNsdWRlIFxcXCJpdHJlZV9jb21tb24uY1xcXCJcXG4rLyogU2VlIHRoZSBub3RlIGluIGl0cmVlX3YxIGluIGEgY29tbWVudCB0aGF0IHN0YXJ0cyBcXFwiTk9UQSBCRU5FXFxcIiBmb3IgYW5cXG4rICogZXhwbGFuYXRpb24gZm9yIHdoeSBpb21hcC5jIGlzIGluY2x1ZGVkIGhlcmUuXFxuKyAqL1xcbisjaW5jbHVkZSBcXFwiaW9tYXAuY1xcXCJcXG4gXFxuIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXFxuIFxcdFxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbkBAIC02OSw3ICs3MywxOCBAQCB2b2lkIFYyX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiBcXHR0cnVuY2F0ZShpbm9kZSk7XFxuIH1cXG4gXFxuLXVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4rdW5zaWduZWQgaW50IFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbiBcXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XFxuIH1cXG4rXFxuK2ludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxcbitcXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxcbit7XFxuK1xcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHMgPSB7XFxuK1xcdC5pb21hcF9iZWdpbiA9IFYyX21pbml4X2lvbWFwX2JlZ2luLFxcbitcXHQuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsXFxuK307XFxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L21pbml4LmggYi9mcy9taW5peC9taW5peC5oXFxuaW5kZXggZjIwMjVjOWI1ODI1MmYuLmZhY2U3NDEwMDM0NjAyIDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L21pbml4LmhcXG4rKysgYi9mcy9taW5peC9taW5peC5oXFxuQEAgLTUsNiArNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWluaXhfZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbWFwLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIElOT0RFX1ZFUlNJT04oaW5vZGUpXFx0bWluaXhfc2IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX3ZlcnNpb25cXG4gI2RlZmluZSBNSU5JWF9WMVxcdFxcdDB4MDAwMVxcdFxcdC8qIG9yaWdpbmFsIG1pbml4IGZzICovXFxuQEAgLTU2LDcgKzU3LDcgQEAgaW50IG1pbml4X25ld19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gdm9pZCBtaW5peF9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxvY2spO1xcbiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosXFxuLVxcdFxcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkIGludCk7XFxuK1xcdFxcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkKTtcXG4gaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKTtcXG4gc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptaW5peF9nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBpbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTtcXG5AQCAtODAsMTAgKzgxLDE5IEBAIGludCBtaW5peF9zZXRfbGluayhzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICpkZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZG90ZG90KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmb2xpbyAqKik7XFxuIGlub190IG1pbml4X2lub2RlX2J5X25hbWUoc3RydWN0IGRlbnRyeSopO1xcbiBcXG4rZXh0ZXJuIGludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbitcXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXFxuK1xcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcXG4rZXh0ZXJuIGludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbitcXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXFxuK1xcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcXG4rXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX2lub2RlX29wZXJhdGlvbnM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfb3BlcmF0aW9ucztcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjFfbWluaXhfaW9tYXBfb3BzO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHM7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9zYl9pbmZvICptaW5peF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiB7XFxuQEAgLTk1LDExICsxMDUsMTcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbyAqbWluaXhfaShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSlcXG4ge1xcbiBcXHRyZXR1cm4gRElWX1JPVU5EX1VQKGJpdHMsIGJsb2Nrc2l6ZSAqIDgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm1pbml4X2lvbWFwX29wc192ZXIoc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRyZXR1cm4gKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSA/XFxuK1xcdFxcdFxcdTAwMjZWMV9taW5peF9pb21hcF9vcHMgOiBcXHUwMDI2VjJfbWluaXhfaW9tYXBfb3BzO1xcbit9XFxuK1xcbiAjaWYgZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfTkFUSVZFX0VORElBTikgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiBcXHRkZWZpbmVkKENPTkZJR19NSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRUQpXFxuIFxcbkBAIC0xMjksNyArMTQ1LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcXG4gICogYmlnLWVuZGlhbiAxNmJpdCBpbmRleGVkIGJpdG1hcHNcXG4gICovXFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBzaXplKVxcbitzdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4ge1xcbiBcXHRjb25zdCB1bnNpZ25lZCBzaG9ydCAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyO1xcbiBcXHR1bnNpZ25lZCBzaG9ydCBudW07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjExOjIyLjAwOTI1MTg4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUxOTg3NjYyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlOSVhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaW5peF9kaW9fcmVhZF9pdGVyXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfZW5kX2lvXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZmlsZV9yZWFkX2l0ZXJcIixcbiAgICBcIm1pbml4X2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZmlsZV9vcGVuXCIsXG4gICAgXCJtaW5peF93cml0ZWJhY2tfcmFuZ2VcIixcbiAgICBcIm1pbml4X3dyaXRlcGFnZXNcIixcbiAgICBcIm1pbml4X3JlYWRfZm9saW9cIixcbiAgICBcIm1pbml4X3JlYWRhaGVhZFwiLFxuICAgIFwibWluaXhfYm1hcFwiLFxuICAgIFwibWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIm1pbml4X2lvbWFwX2VuZFwiLFxuICAgIFwiVjFfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIlYyX21pbml4X2lvbWFwX2JlZ2luXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBpb21hcCBzdXBwb3J0IGZvciB0aGUgbWluaXggZmlsZXN5c3RlbSwgcmVwbGFjaW5nIG9sZGVyIGJ1ZmZlcl9oZWFkLWJhc2VkIG9wZXJhdGlvbnMgZm9yIHJlZ3VsYXIgZmlsZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSByZWFkL3dyaXRlL21tYXAgbG9naWMgb2YgdGhlIG1pbml4IGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJkZGVkOWFlMjIzZWI3OGY0ODVlMWQwM2QyMDNlYTM4OGIyNGJjYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAyMjoxMToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggODZlNTk0M2NkMmZmNzQuLjFmNDIxNzExNTQwMThkIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXG4rKysgYi9mcy9taW5peC9maWxlLmNcbkBAIC0xNywxNyArMTcsMTYyIEBAIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4gXHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuIH1cbiBcbitzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbitcbitcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgb3BzLCBOVUxMLCAwLCBOVUxMLCAwKTtcbitcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBtaW5peF9kaW9fd3JpdGVfZW5kX2lvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3NpemVfdCBzaXplLCBpbnQgZXJyb3IsXG4rXHRcdHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0bG9mZl90IHBvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuK1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRwb3MgKz0gc2l6ZTtcbitcdGlmIChzaXplIFx1MDAyNlx1MDAyNiBwb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuK1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIHBvcyk7XG4rXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBtaW5peF9kaW9fd3JpdGVfb3BzID0ge1xuK1x0LmVuZF9pbyA9IG1pbml4X2Rpb193cml0ZV9lbmRfaW8sXG4rfTtcbitcbitzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1x0c3NpemVfdCByZXQ7XG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBibG9ja3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1xuK1x0aW5vZGVfbG9jayhpbm9kZSk7XG4rXHRyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXG4rXHRyZXQgPSBraW9jYl9tb2RpZmllZChpb2NiKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcbitcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyArIGlvdl9pdGVyX2NvdW50KGZyb20pIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkgfHxcbitcdFx0IUlTX0FMSUdORUQoaW9jYi1cdTAwM2VraV9wb3MgfCBpb3ZfaXRlcl9hbGlnbm1lbnQoZnJvbSksIGJsb2Nrc2l6ZSkpXG4rXHRcdGZsYWdzIHw9IElPTUFQX0RJT19GT1JDRV9XQUlUO1xuK1xuK1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSk7XG4rXG4rXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgb3BzLFxuK1x0XHRcdTAwMjZtaW5peF9kaW9fd3JpdGVfb3BzLCBmbGFncywgTlVMTCwgMCk7XG4rXHRpZiAocmV0ID09IC1FTk9UQkxLKVxuK1x0XHRyZXQgPSAwOyAvKiBmYWxsYmFjayB0byBidWZmZXJlZCAqL1xuK1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4rXHRcdGxvZmZfdCBwb3M7XG4rXHRcdGxvZmZfdCBlbmRieXRlO1xuK1x0XHRzc2l6ZV90IHN0YXR1cztcbitcbitcdFx0aW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjY9IH5JT0NCX0RJUkVDVDtcbitcdFx0cG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4rXHRcdHN0YXR1cyA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLFxuK1x0XHRcdE5VTEwsIE5VTEwpO1xuK1x0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAzYyAwKSkge1xuK1x0XHRcdHJldCA9IHN0YXR1cztcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0cmV0ICs9IHN0YXR1cztcbitcdFx0ZW5kYnl0ZSA9IHBvcyArIHN0YXR1cyAtIDE7XG4rXHRcdHN0YXR1cyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MsIGVuZGJ5dGUpO1xuK1x0XHRpZiAoIXN0YXR1cykge1xuK1x0XHRcdGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpbm9kZS1cdTAwM2VpX21hcHBpbmcsXG4rXHRcdFx0XHRwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4rXHRcdFx0XHRlbmRieXRlIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gc3RhdHVzO1xuK1x0XHR9XG4rXHR9XG4rXG4rb3V0X3VubG9jazpcbitcdGlub2RlX3VubG9jayhpbm9kZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgc3NpemVfdCBtaW5peF9maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4re1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuK1x0XHRyZXR1cm4gbWluaXhfZGlvX3JlYWRfaXRlcihpb2NiLCB0byk7XG4rXG4rXHRyZXR1cm4gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHQvKiBtaW5peF9kaW9fd3JpdGVfaXRlciBhbHNvIGxvY2tzIHRoZSBpbm9kZSBhbmQgYXBwZWFycyB0byBkbyB0aGUgc2FtZVxuK1x0ICogZ2VuZXJhbCBzb3J0cyBvZiBjaGVja3MgYXMgdGhpcywgc28ganVzdCByZXR1cm4gZGlyZWN0bHkgZnJvbSB0aGVyZS5cbitcdCAqL1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuK1x0XHRyZXR1cm4gbWluaXhfZGlvX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XG4rXG4rXHRpbm9kZV9sb2NrKGlub2RlKTtcbitcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbitcbitcdHJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLFxuK1x0XHRcdE5VTEwsIE5VTEwpO1xuK1xuK1x0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4rXG4rdW5sb2NrOlxuK1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWluaXhfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuK3tcbitcdGZpbHAtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xuK1x0cmV0dXJuIGdlbmVyaWNfZmlsZV9vcGVuKGlub2RlLCBmaWxwKTtcbit9XG4rXG4gLypcbi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yXG4tICogdGhlIG1pbml4IGZpbGVzeXN0ZW0uXG4rICogV2Ugc3RpbGwgaGF2ZSBzb21lIE5VTExzIGhlcmUsIGJ1dCBub3QgYXMgbWFueSBvZiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmVcbisgKiBzdGlsbCBPSyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0uXG4gICovXG4rXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi1cdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbi1cdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuK1x0LnJlYWRfaXRlclx0PSBtaW5peF9maWxlX3JlYWRfaXRlcixcbitcdC53cml0ZV9pdGVyXHQ9IG1pbml4X2ZpbGVfd3JpdGVfaXRlcixcbiBcdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbitcdC5vcGVuXHRcdD0gbWluaXhfZmlsZV9vcGVuLFxuIFx0LmZzeW5jXHRcdD0gbWluaXhfZnN5bmMsXG4gXHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbitcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xuaW5kZXggYzMwY2M1OTA2OThkNmYuLmNkMTJlNTljZTliOWQyIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xuKysrIGIvZnMvbWluaXgvaW5vZGUuY1xuQEAgLTQzNiw2ICs0MzYsMzEgQEAgc3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IG1pbml4X3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuK1x0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXG4re1xuK1x0aW50IGVycm9yO1xuK1xuK1x0aWYgKHBvcyBcdTAwM2Mgd3BjLVx1MDAzZWlvbWFwLm9mZnNldCB8fFxuK1x0XHRcdHBvcyBcdTAwM2U9IHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgKyB3cGMtXHUwMDNlaW9tYXAubGVuZ3RoKSB7XG4rXHRcdGlmIChJTk9ERV9WRVJTSU9OKHdwYy1cdTAwM2Vpbm9kZSkgPT0gTUlOSVhfVjEpXG4rXHRcdFx0ZXJyb3IgPSBWMV9taW5peF9pb21hcF9iZWdpbih3cGMtXHUwMDNlaW5vZGUsIHBvcywgbGVuLCAwLFxuK1x0XHRcdFx0XHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBOVUxMKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVycm9yID0gVjJfbWluaXhfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLCBwb3MsIGxlbiwgMCxcbitcdFx0XHRcdFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgTlVMTCk7XG4rXHRcdGlmIChlcnJvcilcbitcdFx0XHRyZXR1cm4gZXJyb3I7XG4rXHR9XG4rXG4rXHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIHBvcywgZW5kX3BvcywgbGVuKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIG1pbml4X3dyaXRlYmFja19vcHMgPSB7XG4rXHQud3JpdGViYWNrX3JhbmdlID0gbWluaXhfd3JpdGViYWNrX3JhbmdlLFxuK1x0LndyaXRlYmFja19zdWJtaXQgPSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxuK307XG4rXG4gc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbiB7XG5AQCAtNDQ1LDE3ICs0NzAsNDUgQEAgc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdHJldHVybiBWMl9taW5peF9nZXRfYmxvY2soaW5vZGUsIGJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbisvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4rc3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4gXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbitcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4re1xuK1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuK1x0XHQuaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3QsXG4rXHRcdC53YmMgPSB3YmMsXG4rXHRcdC5vcHMgPSBcdTAwMjZtaW5peF93cml0ZWJhY2tfb3BzLFxuK1x0fTtcbitcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFx1MDAyNndwYyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGZpbGUtXHUwMDNlZl9pbm9kZSk7XG4rXG4rXHRpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgb3BzKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBUaGUgb2xkIG1pbml4X3JlYWRfZm9saW8sIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4rc3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG1pbml4X3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKHJhYy1cdTAwM2VmaWxlLVx1MDAzZWZfaW5vZGUpO1xuK1xuK1x0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIG9wcyk7XG4rfVxuK1xuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbilcbiB7XG4gXHRyZXR1cm4gX19ibG9ja193cml0ZV9iZWdpbihmb2xpbywgcG9zLCBsZW4sIG1pbml4X2dldF9ibG9jayk7XG5AQCAtNDg3LDE5ICs1NDAsMzYgQEAgc3RhdGljIGludCBtaW5peF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXG4gc3RhdGljIHNlY3Rvcl90IG1pbml4X2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuIHtcbi1cdHJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZyxibG9jayxtaW5peF9nZXRfYmxvY2spO1xuK1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihtYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1xuK1x0cmV0dXJuIGlvbWFwX2JtYXAobWFwcGluZywgYmxvY2ssIG9wcyk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHMgPSB7XG4tXHQuZGlydHlfZm9saW9cdD0gYmxvY2tfZGlydHlfZm9saW8sXG4tXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXG4rXHQuZGlydHlfZm9saW9cdD0gaW9tYXBfZGlydHlfZm9saW8sXG4rXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4gXHQucmVhZF9mb2xpbyA9IG1pbml4X3JlYWRfZm9saW8sXG4rXHQucmVhZGFoZWFkID0gbWluaXhfcmVhZGFoZWFkLFxuIFx0LndyaXRlcGFnZXMgPSBtaW5peF93cml0ZXBhZ2VzLFxuK1x0Lm1pZ3JhdGVfZm9saW8gPSBmaWxlbWFwX21pZ3JhdGVfZm9saW8sXG4rXHQuYm1hcCA9IG1pbml4X2JtYXAsXG4rXHQuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLFxuK1x0LnJlbGVhc2VfZm9saW8gPSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxuK1x0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxuK307XG4rXG4rLyogQSBzcGVjaWFsIGFvcHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQga2VlcHMgdXNpbmcgdGhlIGJ1ZmZlciBoZWFkIGNodW5rcywgYXRcbisgKiBsZWFzdCBmb3IgdGhlIHRpbWUgYmVpbmcuXG4rICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfZGlyX2FvcHMgPSB7XG4rXHQuZGlydHlfZm9saW8gPSBibG9ja19kaXJ0eV9mb2xpbyxcbitcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbitcdC5yZWFkX2ZvbGlvID0gbWluaXhfYmxvY2tfcmVhZF9mb2xpbyxcbiBcdC53cml0ZV9iZWdpbiA9IG1pbml4X3dyaXRlX2JlZ2luLFxuIFx0LndyaXRlX2VuZCA9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0Lm1pZ3JhdGVfZm9saW8gPSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcbiBcdC5ibWFwID0gbWluaXhfYm1hcCxcbi1cdC5kaXJlY3RfSU8gPSBub29wX2RpcmVjdF9JT1xuK1x0LndyaXRlcGFnZXMgPSBtaW5peF9ibG9ja193cml0ZXBhZ2VzLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbkBAIC01MTYsNyArNTg2LDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcbiBcdH0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZtaW5peF9kaXJfb3BlcmF0aW9ucztcbi1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bWluaXhfYW9wcztcbitcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bWluaXhfZGlyX2FvcHM7XG4gXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuIFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2bWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuQEAgLTc2OCw0ICs4MzgsMyBAQCBtb2R1bGVfaW5pdChpbml0X21pbml4X2ZzKVxuIG1vZHVsZV9leGl0KGV4aXRfbWluaXhfZnMpXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiTWluaXggZmlsZSBzeXN0ZW1cIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4tXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW9tYXAuYyBiL2ZzL21pbml4L2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uN2JiMDQzOWUzNjY5OTZcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL21pbml4L2lvbWFwLmNcbkBAIC0wLDAgKzEsMTE0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogaW9tYXAgZnVuY3Rpb25zIGZvciBtaW5peC4gQXQgbGVhc3QgdGhlIGZpcnN0IHBhc3Mgb2YgdGhpcyBmaWxlIHdhcyB0YWtlblxuKyAqIGZyb20gdGhlIHhpYWZzIGlvbWFwLmMsIHdoaWNoIGlzIGZpdHRpbmcgc2luY2UgdGhlIHhpYWZzIG1vZHVsZSBpbiB0dXJuXG4rICogYm9ycm93ZWQgaGVhdmlseSBmcm9tIHRoZSBtb2Rlcm5pemVkIG1pbml4IGZzIGtlcm5lbCBtb2R1bGUuXG4rICovXG4rXG4rLypcbisgKiBtaW5peF9pb21hcF9iZWdpbiAtIG1hcCBhIGZpbGUgcmFuZ2UgdG8gZGlzayBibG9ja3MuIEl0IGFjdHMgYXMgYSByZXBsYWNlbWVudFxuKyAqIGZvciBnZXRfYmxvY2sgaW4gaXRyZWVfY29tbW9uLmMsIGF0IGxlYXN0IGluIHRoZSBpbXBvcnRhbnQgd2F5cywgYW5kIGlzXG4rICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLiBUaGlzIGlzIHRha2VuXG4rICogZGlyZWN0bHkgZnJvbSB0aGUgb3V0LW9mLXRyZWUgeGlhZnMgaW9tYXAgY2hhbmdlcywgYW5kIHRoZSBleGZhdCBpb21hcFxuKyAqIGNoYW5nZXMgd2VyZSBhbiBpbnNwaXJhdGlvbiBmb3IgdGhhdC5cbisgKi9cbitzdGF0aWMgaW50IG1pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuK3tcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuK1x0dW5zaWduZWQgaW50IGJsa2JpdHMgPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuK1x0c2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuK1x0aW50IGNyZWF0ZSA9IGZsYWdzIFx1MDAyNiBJT01BUF9XUklURTtcbitcbitcdC8qIE1vc3RseSB0YWtlbiBmcm9tIG1vZGVybi14aWFmcyBpdHJlZS5jIGdldF9ibG9jayB3aXRoIGVsZW1lbnRzIGZyb21cbitcdCAqIHNpbWlsYXIgZXhmYXQgb3BlcmF0aW9ucy5cbitcdCAqL1xuK1x0aW50IG9mZnNldHNbREVQVEhdO1xuK1x0SW5kaXJlY3QgY2hhaW5bREVQVEhdO1xuK1x0SW5kaXJlY3QgKnBhcnRpYWw7XG4rXHRpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpO1xuK1x0aW50IGxlZnQ7XG4rXHRpbnQgZXJyID0gLUVJTztcbitcbitcdHNlY3Rvcl90IHBoeXM7XG4rXG4rXHQvKiBibG9jayBpcyBiZXlvbmQgbWF4IGZpbGUgc2l6ZSAqL1xuK1x0aWYgKGRlcHRoID09IDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aW9tYXAtXHUwMDNlYmRldiA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19iZGV2O1xuK1xuK3JlcmVhZDpcbitcdHBhcnRpYWwgPSBnZXRfYnJhbmNoKGlub2RlLCBkZXB0aCwgb2Zmc2V0cywgY2hhaW4sIFx1MDAyNmVycik7XG4rXG4rXHQvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovXG4rXHRpZiAoIXBhcnRpYWwpIHtcbitcdFx0LyogQml0IG9mIGEgd2VpcmQgb3JkZXIsIGJ1dCBpdCdsbCBtYWtlIHNlbnNlIHdoZW4geW91IGdldCB0b1xuK1x0XHQgKiB0aGUgYm90dG9tLlxuK1x0XHQgKi9cbitcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX01FUkdFRDtcbitnb3RfaXQ6XG4rXHRcdHBoeXMgPSBibG9ja190b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpO1xuK1x0XHRwYXJ0aWFsID0gY2hhaW4rZGVwdGgtMTtcbitcdFx0LyogU2V0IHVwIHRoZSBpb21hcCBzdHJ1Y3QgYmVmb3JlIGNsZWFuaW5nIHVwICovXG4rXHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4rXHRcdGlvbWFwLVx1MDAzZWFkZHIgPSAodTY0KXBoeXMgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rXHRcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IDEgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rXHRcdGlvbWFwLVx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHQvKiBOZXh0IHNpbXBsZSBjYXNlIC0gcGxhaW4gbG9va3VwIG9yIGZhaWxlZCByZWFkIG9mIGluZGlyZWN0IGJsb2NrICovXG4rXHRpZiAoIWNyZWF0ZSB8fCBlcnIgPT0gLUVJTykge1xuK1x0XHRpb21hcC1cdTAwM2V0eXBlID0gSU9NQVBfSE9MRTtcbitcdFx0aW9tYXAtXHUwMDNlYWRkciA9IElPTUFQX05VTExfQUREUjtcbitcdFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gMSBcdTAwM2NcdTAwM2MgYmxrYml0cztcbitcdFx0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gKHU2NClpYmxvY2sgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rXHRcdGlvbWFwLVx1MDAzZWZsYWdzID0gMDtcbitjbGVhbnVwOlxuK1x0XHR3aGlsZSAocGFydGlhbCBcdTAwM2UgY2hhaW4pIHtcbitcdFx0XHRicmVsc2UocGFydGlhbC1cdTAwM2ViaCk7XG4rXHRcdFx0cGFydGlhbC0tO1xuK1x0XHR9XG4rb3V0OlxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIEluZGlyZWN0IGJsb2NrIG1pZ2h0IGJlIHJlbW92ZWQgYnkgdHJ1bmNhdGUgd2hpbGUgd2Ugd2VyZVxuK1x0ICogcmVhZGluZyBpdC4gSGFuZGxpbmcgb2YgdGhhdCBjYXNlIChmb3JnZXQgd2hhdCB3ZSd2ZSBnb3QgYW5kXG4rXHQgKiByZXJlYWQpIGlzIHRha2VuIG91dCBvZiB0aGUgbWFpbiBwYXRoLlxuK1x0ICovXG4rXHRpZiAoZXJyID09IC1FQUdBSU4pXG4rXHRcdGdvdG8gY2hhbmdlZDtcbitcbitcdGxlZnQgPSAoY2hhaW4gKyBkZXB0aCkgLSBwYXJ0aWFsO1xuK1x0ZXJyID0gYWxsb2NfYnJhbmNoKGlub2RlLCBsZWZ0LCBvZmZzZXRzICsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKHNwbGljZV9icmFuY2goaW5vZGUsIGNoYWluLCBwYXJ0aWFsLCBsZWZ0KSBcdTAwM2MgMClcbitcdFx0Z290byBjaGFuZ2VkO1xuK1xuK1x0LyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqL1xuK1x0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX05FVztcbitcdGdvdG8gZ290X2l0O1xuK1xuK2NoYW5nZWQ6XG4rXHR3aGlsZSAocGFydGlhbCBcdTAwM2UgY2hhaW4pIHtcbitcdFx0YnJlbHNlKHBhcnRpYWwtXHUwMDNlYmgpO1xuK1x0XHRwYXJ0aWFsLS07XG4rXHR9XG4rXHRnb3RvIHJlcmVhZDtcbit9XG4rXG4rLypcbisgKiBtaW5peF9pb21hcF9lbmQgZW5kcyB1cCBiZWluZyBhIG5vcDsgc2luY2UgbWluaXggZG9lc24ndCBoYXZlIGFueSBleHRlbnRzIG9yXG4rICogdHJhbnNhY3Rpb25zIHRvIHdvcnJ5IGFib3V0LCB0aGVyZSBpc24ndCBhbnl0aGluZyB0byB1cGRhdGUgaGVyZS4gVGhlIG9uLWRpc2tcbisgKiBpbmRpcmVjdCBibG9ja3MgZ2V0IGRpcnRpZWQgaW4gbWluaXhfaW9tYXBfYmVnaW4uXG4rICovXG4rc3RhdGljIGludCBtaW5peF9pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbitcdHNzaXplX3Qgd3JpdHRlbiwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxuK3tcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV92MS5jIGIvZnMvbWluaXgvaXRyZWVfdjEuY1xuaW5kZXggMWZlZDkwNjA0MmFhODQuLjU4YzI5ZjQ0NDNkMzcyIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuY1xuKysrIGIvZnMvbWluaXgvaXRyZWVfdjEuY1xuQEAgLTQ5LDYgKzQ5LDE4IEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKVxuIH1cbiBcbiAjaW5jbHVkZSBcIml0cmVlX2NvbW1vbi5jXCJcbisvKiBOT1RBIEJFTkU6XG4rICpcbisgKiBUaGlzIGlzIGlja3kgdG8gbWUsIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIGhhdmluZyBpdCBiZSBhIHN0YW5kYWxvbmUgQyBmaWxlXG4rICogdGhhdCdzIGNvbXBpbGVkIHRvIG9iamVjdCBmb3JtIGFuZCBsaW5rZWQgc2VwYXJhdGVseSBsaWtlIGl0IGlzIGluIHhpYWZzIGlzXG4rICogbXVjaCBuYXN0aWVyIGluIG1pbml4IGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgbWluaXggZnMgdGhhdFxuKyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJ3RcbisgKiBsaWtlIGl0LCBidXQgc2luY2UgbWluaXggYWxyZWFkeSBoYXMgdGhpcyBwYXR0ZXJuIHdoZXJlIGEgY29tbW9uIGl0cmVlIGZpbGVcbisgKiBpcyBpbmNsdWRlZCBpbiB0aGUgaXRyZWVfdjEgYW5kIGl0cmVlX3YyKGFuZCB2MykgZmlsZXMsIEknbSBpbmNsdWRpbmcgaW9tYXAuY1xuKyAqIGluIHRoZXNlIGZpbGVzIGFzIHdlbGwuIEl0IGRvZXMgYXQgbGVhc3QgYXZvaWQgZXhwb3J0aW5nIHNvbWUgY3VycmVudGx5XG4rICogc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCBuZWVkZWQgYW55d2hlcmUgYnV0IGl0cmVlX2NvbW1vbi5jIGFuZCBpb21hcC5jLlxuKyAqL1xuKyNpbmNsdWRlIFwiaW9tYXAuY1wiXG4gXG4gaW50IFYxX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jayxcbiBcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbkBAIC02MSw3ICs3MywxOCBAQCB2b2lkIFYxX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0dHJ1bmNhdGUoaW5vZGUpO1xuIH1cbiBcbi11bnNpZ25lZCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4rdW5zaWduZWQgaW50IFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XG4gfVxuK1xuK2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuK1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbit7XG4rXHRyZXR1cm4gbWluaXhfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsIHNyY21hcCk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjFfbWluaXhfaW9tYXBfb3BzID0ge1xuK1x0LmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sXG4rXHQuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsXG4rfTtcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV92Mi5jIGIvZnMvbWluaXgvaXRyZWVfdjIuY1xuaW5kZXggOWQwMGYzMWEyZDlkMTUuLmZjN2E1YWU4ZmExY2EzIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjIuY1xuKysrIGIvZnMvbWluaXgvaXRyZWVfdjIuY1xuQEAgLTU3LDYgKzU3LDEwIEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKVxuIH1cbiBcbiAjaW5jbHVkZSBcIml0cmVlX2NvbW1vbi5jXCJcbisvKiBTZWUgdGhlIG5vdGUgaW4gaXRyZWVfdjEgaW4gYSBjb21tZW50IHRoYXQgc3RhcnRzIFwiTk9UQSBCRU5FXCIgZm9yIGFuXG4rICogZXhwbGFuYXRpb24gZm9yIHdoeSBpb21hcC5jIGlzIGluY2x1ZGVkIGhlcmUuXG4rICovXG4rI2luY2x1ZGUgXCJpb21hcC5jXCJcbiBcbiBpbnQgVjJfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLFxuIFx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuQEAgLTY5LDcgKzczLDE4IEBAIHZvaWQgVjJfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHR0cnVuY2F0ZShpbm9kZSk7XG4gfVxuIFxuLXVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbit1bnNpZ25lZCBpbnQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbiBcdHJldHVybiBuYmxvY2tzKHNpemUsIHNiKTtcbiB9XG4rXG4raW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuK3tcbitcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHMgPSB7XG4rXHQuaW9tYXBfYmVnaW4gPSBWMl9taW5peF9pb21hcF9iZWdpbixcbitcdC5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCxcbit9O1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L21pbml4LmggYi9mcy9taW5peC9taW5peC5oXG5pbmRleCBmMjAyNWM5YjU4MjUyZi4uZmFjZTc0MTAwMzQ2MDIgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9taW5peC5oXG4rKysgYi9mcy9taW5peC9taW5peC5oXG5AQCAtNSw2ICs1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWluaXhfZnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIElOT0RFX1ZFUlNJT04oaW5vZGUpXHRtaW5peF9zYihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX3ZlcnNpb25cbiAjZGVmaW5lIE1JTklYX1YxXHRcdDB4MDAwMVx0XHQvKiBvcmlnaW5hbCBtaW5peCBmcyAqL1xuQEAgLTU2LDcgKzU3LDcgQEAgaW50IG1pbml4X25ld19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiB2b2lkIG1pbml4X2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibG9jayk7XG4gdW5zaWduZWQgbG9uZyBtaW5peF9jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosXG4tXHRcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkIGludCk7XG4rXHRcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkKTtcbiBpbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pO1xuIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbWluaXhfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTtcbkBAIC04MCwxMCArODEsMTkgQEAgaW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2RvdGRvdChzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZm9saW8gKiopO1xuIGlub190IG1pbml4X2lub2RlX2J5X25hbWUoc3RydWN0IGRlbnRyeSopO1xuIFxuK2V4dGVybiBpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbitcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCxcbitcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcbitleHRlcm4gaW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXG4rXHRzdHJ1Y3QgaW9tYXAgKnNyY21hcCk7XG4rXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcztcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHM7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqbWluaXhfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG5AQCAtOTUsMTEgKzEwNSwxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplKVxuIHtcbiBcdHJldHVybiBESVZfUk9VTkRfVVAoYml0cywgYmxvY2tzaXplICogOCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqbWluaXhfaW9tYXBfb3BzX3ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHJldHVybiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpID9cbitcdFx0XHUwMDI2VjFfbWluaXhfaW9tYXBfb3BzIDogXHUwMDI2VjJfbWluaXhfaW9tYXBfb3BzO1xuK31cbitcbiAjaWYgZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfTkFUSVZFX0VORElBTikgXHUwMDI2XHUwMDI2IFxcXG4gXHRkZWZpbmVkKENPTkZJR19NSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRUQpXG4gXG5AQCAtMTI5LDcgKzE0NSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBiaXRzLCB1bnNpZ25lZCBibG9ja3NpemUpXG4gICogYmlnLWVuZGlhbiAxNmJpdCBpbmRleGVkIGJpdG1hcHNcbiAgKi9cbiBcbi1zdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBzaXplKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwID0gdmFkZHIsICphZGRyID0gdmFkZHI7XG4gXHR1bnNpZ25lZCBzaG9ydCBudW07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjoxMToyMi4wMDkyNTQwMThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjA0MjkxNjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1pbml4IElvbWFwIFBhdGNoKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggaGVyZSBpbnRyb2R1Y2luZyBpb21hcCBzdXBwb3J0IGludG8gdGhlIE1pbml4IGZpbGVzeXN0ZW0sIGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGlzIGlzIHRoZSByZXBsYWNlbWVudCBvZiB0aGUgZXhpc3RpbmcgYnVmZmVyX2hlYWQtYmFzZWQgb3BlcmF0aW9ucyB3aXRoIGlvbWFwIHByaW1pdGl2ZXMsIHNwZWNpZmljYWxseSBmb3IgcmVndWxhciBmaWxlcy4gRGlyZWN0b3JpZXMgYXJlIHN0YXlpbmcgd2l0aCB0aGUgYnVmZmVyX2hlYWQgYXBwcm9hY2ggZm9yIG5vdywgd2hpY2ggaXMgYSBzZW5zaWJsZSwgaW5jcmVtZW50YWwgY2hhbmdlLiBUaGV5J3ZlIGFkZGVkIGEgc2xldyBvZiBuZXcgZnVuY3Rpb25zOiBgbWluaXhfZGlvX3JlYWRfaXRlcmAsIGBtaW5peF9kaW9fd3JpdGVfaXRlcmAsIHRoZSBzdGFuZGFyZCBmaWxlIGl0ZXJhdG9ycywgYG1pbml4X3dyaXRlYmFja19yYW5nZWAsIGBtaW5peF93cml0ZXBhZ2VzYCwgYW5kIHRoZSBmb2xpbyBmdW5jdGlvbnMuIEFkZGl0aW9uYWxseSwgd2UgaGF2ZSBgbWluaXhfYm1hcGAg4oCTIHRoZSBibG9jayBtYXBwaW5nIGZ1bmN0aW9uLCB3aGljaCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIHJldmlldy4gTG9va3MgbGlrZSB0aGV5J3ZlIHNwdW4gdXAgYSBuZXcgYGZzL21pbml4L2lvbWFwLmNgIGZpbGUgd2l0aCBgbWluaXhfaW9tYXBfYmVnaW5gIGFuZCBgbWluaXhfaW9tYXBfZW5kYCwgd2hpY2ggYXJlIHRoZSBzdGFuZGFyZCBiZWdpbi9lbmQgcG9pbnRzIGZvciBpb21hcCBvcGVyYXRpb25zLCBhbmQgcHJvYmFibHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcy5cblxuVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIE1pbml4J3MgSU8gcGF0aC4gR2l2ZW4gdGhlIGRlcHRoIG9mIHRoaXMgY2hhbmdlLCBJICpkZWZpbml0ZWx5KiBuZWVkIHRvIGVhcm1hcmsgdGhpcyBmb3IgZnV6emluZy4gV2UncmUgdG91Y2hpbmcgY3JpdGljYWwgY29kZSB0aGF0IGRlYWxzIHdpdGggZGF0YSBhY2Nlc3MsIGFuZCBhbnkgc3VidGxlIGJ1ZyBoZXJlIGNvdWxkIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMuXG5cbk5vdywgbGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFzcGVjdHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGVuYWJsZWQuIFRpbWUgdG8gdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggdGhlIEtjb25maWcgZmlsZXMuIEknbGwgc2VhcmNoIGZvciBgTUlOSVhgIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSBzb3VyY2UgZGlyZWN0b3J5LCBwYXJ0aWN1bGFybHkgaW4gYGZzL21pbml4L0tjb25maWdgIG9yIGFueXRoaW5nIHNpbWlsYXJseSBuYW1lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgZXhwb3NlZCBzbyB0aGF0IEkgdW5kZXJzdGFuZCB3aGVyZSBhbmQgd2hlbiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkzMCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjExOjI3LjYxMzU0Nzk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mzc3NTg2NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1JTklYX0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL21pbml4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9taW5peC9LY29uZmlnOjI6Y29uZmlnIE1JTklYX0ZTXFxuZnMvbWluaXgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNaW5peCBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbWluaXgvS2NvbmZpZy0yMC1cXG5mcy9taW5peC9LY29uZmlnOjIxOmNvbmZpZyBNSU5JWF9GU19OQVRJVkVfRU5ESUFOXFxuZnMvbWluaXgvS2NvbmZpZy0yMi1cXHRkZWZfYm9vbCBNSU5JWF9GU1xcbi0tXFxuZnMvbWluaXgvS2NvbmZpZy0yNC1cXG5mcy9taW5peC9LY29uZmlnOjI1OmNvbmZpZyBNSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRURcXG5mcy9taW5peC9LY29uZmlnLTI2LVxcdGRlZl9ib29sIE1JTklYX0ZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjExOjMwLjI1MTMxMjc0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NzY4MzE3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNaW5peCBGUyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGlzIGRlZmluaXRlbHkgdGFyZ2V0aW5nIGBNSU5JWF9GU2AuIE15IGZvY3VzIGhlcmUgaXMgdG8gaWRlbnRpZnkga2V5IHN5bWJvbHMgaW50cm9kdWNlZCBvciBtb2RpZmllZCBieSB0aGlzIHBhdGNoLCB0aGUgb25lcyBtb3N0IGxpa2VseSB0byB5aWVsZCBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldHMuXG5cbkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkndmUgZ290IGEgc29saWQgbGlzdCBvZiBwb3RlbnRpYWwgZnVuY3Rpb25zIHRvIGluY2x1ZGUgaW4gbXkgYEZvY3VzU3ltYm9sc2A6IGBtaW5peF9kaW9fcmVhZF9pdGVyYCwgYG1pbml4X2Rpb193cml0ZV9pdGVyYCwgYG1pbml4X2ZpbGVfcmVhZF9pdGVyYCwgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAsIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGBtaW5peF9yZWFkX2ZvbGlvYCwgYG1pbml4X3JlYWRhaGVhZGAsIGBtaW5peF9ibWFwYCwgYG1pbml4X2lvbWFwX2JlZ2luYCwgYG1pbml4X2lvbWFwX2VuZGAsIGBWMV9taW5peF9pb21hcF9iZWdpbmAsIGFuZCBgVjJfbWluaXhfaW9tYXBfYmVnaW5gLiBJJ3ZlIHF1aWNrbHkgY29uZmlybWVkIHRoZSBmdW5jdGlvbiBuYW1lcyBhZ2FpbnN0IHRoZSBwYXRjaCdzIGNoYW5nZXMsIGp1c3QgdG8gZW5zdXJlIGFjY3VyYWN5LlxuXG5CYXNlZCBvbiB0aGlzLCBJJ20gY29uZmlkZW50IHRoYXQgYWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyByZXByZXNlbnQgZW50cnkgcG9pbnRzIG9yIGNyaXRpY2FsIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBNaW5peCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBUaGV5J3JlIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBkZXRhaWxlZCBmdXp6aW5nIGFuYWx5c2lzIGJlY2F1c2UgdGhleSBhcmUgbmV3bHkgaW50cm9kdWNlZCBvciBhbHRlcmVkLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciB1bmNvdmVyaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE5vdywgSSdtIHJlYWR5IHRvIG1vdmUgZm9yd2FyZCBhbmQgc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzU3LCJPdXRwdXRUb2tlbnMiOjI1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjoxMTozNy4xMjgxNDY0ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODY3MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNSU5JWF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pbml4X2Rpb19yZWFkX2l0ZXJcIixcbiAgICBcIm1pbml4X2Rpb193cml0ZV9lbmRfaW9cIixcbiAgICBcIm1pbml4X2Rpb193cml0ZV9pdGVyXCIsXG4gICAgXCJtaW5peF9maWxlX3JlYWRfaXRlclwiLFxuICAgIFwibWluaXhfZmlsZV93cml0ZV9pdGVyXCIsXG4gICAgXCJtaW5peF9maWxlX29wZW5cIixcbiAgICBcIm1pbml4X3dyaXRlYmFja19yYW5nZVwiLFxuICAgIFwibWluaXhfd3JpdGVwYWdlc1wiLFxuICAgIFwibWluaXhfcmVhZF9mb2xpb1wiLFxuICAgIFwibWluaXhfcmVhZGFoZWFkXCIsXG4gICAgXCJtaW5peF9ibWFwXCIsXG4gICAgXCJtaW5peF9pb21hcF9iZWdpblwiLFxuICAgIFwibWluaXhfaW9tYXBfZW5kXCIsXG4gICAgXCJWMV9taW5peF9pb21hcF9iZWdpblwiLFxuICAgIFwiVjJfbWluaXhfaW9tYXBfYmVnaW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGlvbWFwIHN1cHBvcnQgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLCByZXBsYWNpbmcgb2xkZXIgYnVmZmVyX2hlYWQtYmFzZWQgb3BlcmF0aW9ucyBmb3IgcmVndWxhciBmaWxlcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHJlYWQvd3JpdGUvbW1hcCBsb2dpYyBvZiB0aGUgbWluaXggZmlsZXN5c3RlbSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlOSVhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaW5peF9kaW9fcmVhZF9pdGVyXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfZW5kX2lvXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZmlsZV9yZWFkX2l0ZXJcIixcbiAgICBcIm1pbml4X2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZmlsZV9vcGVuXCIsXG4gICAgXCJtaW5peF93cml0ZWJhY2tfcmFuZ2VcIixcbiAgICBcIm1pbml4X3dyaXRlcGFnZXNcIixcbiAgICBcIm1pbml4X3JlYWRfZm9saW9cIixcbiAgICBcIm1pbml4X3JlYWRhaGVhZFwiLFxuICAgIFwibWluaXhfYm1hcFwiLFxuICAgIFwibWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIm1pbml4X2lvbWFwX2VuZFwiLFxuICAgIFwiVjFfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIlYyX21pbml4X2lvbWFwX2JlZ2luXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBpb21hcCBzdXBwb3J0IGZvciB0aGUgbWluaXggZmlsZXN5c3RlbSwgcmVwbGFjaW5nIG9sZGVyIGJ1ZmZlcl9oZWFkLWJhc2VkIG9wZXJhdGlvbnMgZm9yIHJlZ3VsYXIgZmlsZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSByZWFkL3dyaXRlL21tYXAgbG9naWMgb2YgdGhlIG1pbml4IGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkgnk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-25 22:01:43 +0000 UTC FinishedAt: 2026-06-25 22:11: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": "ab9de95c9cf952332ab79453b4b5d1bfca8e514f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MINIX_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ab9de95c9cf952332ab79453b4b5d1bfca8e514f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MINIX_FS" ], "series_id": "5741f2fe-e35f-460c-b8ae-d02789a43a3a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "minix_dio_read_iter", "minix_dio_write_end_io", "minix_dio_write_iter", "minix_file_read_iter", "minix_file_write_iter", "minix_file_open", "minix_writeback_range", "minix_writepages", "minix_read_folio", "minix_readahead", "minix_bmap", "minix_iomap_begin", "minix_iomap_end", "V1_minix_iomap_begin", "V2_minix_iomap_begin" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JTklYX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWluaXhfZGlvX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9kaW9fd3JpdGVfZW5kX2lvJiMzNDssCiAgICAmIzM0O21pbml4X2Rpb193cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9maWxlX29wZW4mIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGViYWNrX3JhbmdlJiMzNDssCiAgICAmIzM0O21pbml4X3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bWluaXhfcmVhZF9mb2xpbyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkYWhlYWQmIzM0OywKICAgICYjMzQ7bWluaXhfYm1hcCYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9lbmQmIzM0OywKICAgICYjMzQ7VjFfbWluaXhfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7VjJfbWluaXhfaW9tYXBfYmVnaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBpb21hcCBzdXBwb3J0IGZvciB0aGUgbWluaXggZmlsZXN5c3RlbSwgcmVwbGFjaW5nIG9sZGVyIGJ1ZmZlcl9oZWFkLWJhc2VkIG9wZXJhdGlvbnMgZm9yIHJlZ3VsYXIgZmlsZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSByZWFkL3dyaXRlL21tYXAgbG9naWMgb2YgdGhlIG1pbml4IGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmRkZWQ5YWUyMjNlYjc4ZjQ4NWUxZDAzZDIwM2VhMzg4YjI0YmNhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDIyOjExOjIwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggODZlNTk0M2NkMmZmNzQuLjFmNDIxNzExNTQwMThkIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9maWxlLmNcbkBAIC0xNywxNyAmIzQzOzE3LDE2MiBAQCBpbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuIFx0XHRcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2Rpb19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XG4mIzQzO1x0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIHRvLCBvcHMsIE5VTEwsIDAsIE5VTEwsIDApO1xuJiM0MztcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwgaW50IGVycm9yLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XHRsb2ZmX3QgcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4mIzQzO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0cG9zICYjNDM7PSBzaXplO1xuJiM0MztcdGlmIChzaXplIFx1MDAyNlx1MDAyNiBwb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuJiM0MztcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBwb3MpO1xuJiM0MztcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgbWluaXhfZGlvX3dyaXRlX29wcyA9IHtcbiYjNDM7XHQuZW5kX2lvID0gbWluaXhfZGlvX3dyaXRlX2VuZF9pbyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYmxvY2tzaXplID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aW5vZGVfbG9jayhpbm9kZSk7XG4mIzQzO1x0cmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBpb3ZfaXRlcl9jb3VudChmcm9tKSBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpIHx8XG4mIzQzO1x0XHQhSVNfQUxJR05FRChpb2NiLVx1MDAzZWtpX3BvcyB8IGlvdl9pdGVyX2FsaWdubWVudChmcm9tKSwgYmxvY2tzaXplKSlcbiYjNDM7XHRcdGZsYWdzIHw9IElPTUFQX0RJT19GT1JDRV9XQUlUO1xuJiM0MztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIG9wcyxcbiYjNDM7XHRcdFx1MDAyNm1pbml4X2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTtcbiYjNDM7XHRpZiAocmV0ID09IC1FTk9UQkxLKVxuJiM0MztcdFx0cmV0ID0gMDsgLyogZmFsbGJhY2sgdG8gYnVmZmVyZWQgKi9cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4mIzQzO1x0XHRsb2ZmX3QgcG9zO1xuJiM0MztcdFx0bG9mZl90IGVuZGJ5dGU7XG4mIzQzO1x0XHRzc2l6ZV90IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuJiM0MztcdFx0cG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4mIzQzO1x0XHRzdGF0dXMgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcyxcbiYjNDM7XHRcdFx0TlVMTCwgTlVMTCk7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAzYyAwKSkge1xuJiM0MztcdFx0XHRyZXQgPSBzdGF0dXM7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXQgJiM0Mzs9IHN0YXR1cztcbiYjNDM7XHRcdGVuZGJ5dGUgPSBwb3MgJiM0Mzsgc3RhdHVzIC0gMTtcbiYjNDM7XHRcdHN0YXR1cyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MsIGVuZGJ5dGUpO1xuJiM0MztcdFx0aWYgKCFzdGF0dXMpIHtcbiYjNDM7XHRcdFx0aW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlub2RlLVx1MDAzZWlfbWFwcGluZyxcbiYjNDM7XHRcdFx0XHRwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4mIzQzO1x0XHRcdFx0ZW5kYnl0ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyZXQgPSBzdGF0dXM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRpbm9kZV91bmxvY2soaW5vZGUpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbiYjNDM7e1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVClcbiYjNDM7XHRcdHJldHVybiBtaW5peF9kaW9fcmVhZF9pdGVyKGlvY2IsIHRvKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBtaW5peF9kaW9fd3JpdGVfaXRlciBhbHNvIGxvY2tzIHRoZSBpbm9kZSBhbmQgYXBwZWFycyB0byBkbyB0aGUgc2FtZVxuJiM0MztcdCAqIGdlbmVyYWwgc29ydHMgb2YgY2hlY2tzIGFzIHRoaXMsIHNvIGp1c3QgcmV0dXJuIGRpcmVjdGx5IGZyb20gdGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuJiM0MztcdFx0cmV0dXJuIG1pbml4X2Rpb193cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuJiM0MztcbiYjNDM7XHRpbm9kZV9sb2NrKGlub2RlKTtcbiYjNDM7XHRyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBmaWxlX21vZGlmaWVkKGlvY2ItXHUwMDNla2lfZmlscCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLCBvcHMsXG4mIzQzO1x0XHRcdE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1pbml4X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiYjNDM7e1xuJiM0MztcdGZpbHAtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xuJiM0MztcdHJldHVybiBnZW5lcmljX2ZpbGVfb3Blbihpbm9kZSwgZmlscCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yXG4tICogdGhlIG1pbml4IGZpbGVzeXN0ZW0uXG4mIzQzOyAqIFdlIHN0aWxsIGhhdmUgc29tZSBOVUxMcyBoZXJlLCBidXQgbm90IGFzIG1hbnkgb2YgdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlXG4mIzQzOyAqIHN0aWxsIE9LIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS5cbiAgKi9cbiYjNDM7XG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi1cdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbi1cdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuJiM0MztcdC5yZWFkX2l0ZXJcdD0gbWluaXhfZmlsZV9yZWFkX2l0ZXIsXG4mIzQzO1x0LndyaXRlX2l0ZXJcdD0gbWluaXhfZmlsZV93cml0ZV9pdGVyLFxuIFx0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuJiM0MztcdC5vcGVuXHRcdD0gbWluaXhfZmlsZV9vcGVuLFxuIFx0LmZzeW5jXHRcdD0gbWluaXhfZnN5bmMsXG4gXHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbiYjNDM7XHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4gfTtcbiBcbiBzdGF0aWMgaW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmNcbmluZGV4IGMzMGNjNTkwNjk4ZDZmLi5jZDEyZTU5Y2U5YjlkMiAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lub2RlLmNcbkBAIC00MzYsNiAmIzQzOzQzNiwzMSBAQCBzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuJiM0MztcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBwb3MsIHVuc2lnbmVkIGludCBsZW4sIHU2NCBlbmRfcG9zKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycm9yO1xuJiM0MztcbiYjNDM7XHRpZiAocG9zIFx1MDAzYyB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0IHx8XG4mIzQzO1x0XHRcdHBvcyBcdTAwM2U9IHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgJiM0Mzsgd3BjLVx1MDAzZWlvbWFwLmxlbmd0aCkge1xuJiM0MztcdFx0aWYgKElOT0RFX1ZFUlNJT04od3BjLVx1MDAzZWlub2RlKSA9PSBNSU5JWF9WMSlcbiYjNDM7XHRcdFx0ZXJyb3IgPSBWMV9taW5peF9pb21hcF9iZWdpbih3cGMtXHUwMDNlaW5vZGUsIHBvcywgbGVuLCAwLFxuJiM0MztcdFx0XHRcdFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgTlVMTCk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGVycm9yID0gVjJfbWluaXhfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLCBwb3MsIGxlbiwgMCxcbiYjNDM7XHRcdFx0XHRcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIE5VTEwpO1xuJiM0MztcdFx0aWYgKGVycm9yKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIHBvcywgZW5kX3BvcywgbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIG1pbml4X3dyaXRlYmFja19vcHMgPSB7XG4mIzQzO1x0LndyaXRlYmFja19yYW5nZSA9IG1pbml4X3dyaXRlYmFja19yYW5nZSxcbiYjNDM7XHQud3JpdGViYWNrX3N1Ym1pdCA9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxuIFx0XHQgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG4ge1xuQEAgLTQ0NSwxNyAmIzQzOzQ3MCw0NSBAQCBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcbiBcdFx0cmV0dXJuIFYyX21pbml4X2dldF9ibG9jayhpbm9kZSwgYmxvY2ssIGJoX3Jlc3VsdCwgY3JlYXRlKTtcbiB9XG4gXG4tc3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuJiM0MzsvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfYmxvY2tfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBtaW5peF9nZXRfYmxvY2spO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBtaW5peF93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuJiM0MztcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCB3cGMgPSB7XG4mIzQzO1x0XHQuaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3QsXG4mIzQzO1x0XHQud2JjID0gd2JjLFxuJiM0MztcdFx0Lm9wcyA9IFx1MDAyNm1pbml4X3dyaXRlYmFja19vcHMsXG4mIzQzO1x0fTtcbiYjNDM7XHRyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhcdTAwMjZ3cGMpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoZmlsZS1cdTAwM2VmX2lub2RlKTtcbiYjNDM7XG4mIzQzO1x0aW9tYXBfYmlvX3JlYWRfZm9saW8oZm9saW8sIG9wcyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSBvbGQgbWluaXhfcmVhZF9mb2xpbywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi9cbiYjNDM7c3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBtaW5peF9yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKHJhYy1cdTAwM2VmaWxlLVx1MDAzZWZfaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRpb21hcF9iaW9fcmVhZGFoZWFkKHJhYywgb3BzKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pXG4ge1xuIFx0cmV0dXJuIF9fYmxvY2tfd3JpdGVfYmVnaW4oZm9saW8sIHBvcywgbGVuLCBtaW5peF9nZXRfYmxvY2spO1xuQEAgLTQ4NywxOSAmIzQzOzU0MCwzNiBAQCBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcbiBzdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXG4ge1xuLVx0cmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihtYXBwaW5nLVx1MDAzZWhvc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9tYXBfYm1hcChtYXBwaW5nLCBibG9jaywgb3BzKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfYW9wcyA9IHtcbi1cdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbi1cdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbiYjNDM7XHQuZGlydHlfZm9saW9cdD0gaW9tYXBfZGlydHlfZm9saW8sXG4mIzQzO1x0LmludmFsaWRhdGVfZm9saW8gPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxuIFx0LnJlYWRfZm9saW8gPSBtaW5peF9yZWFkX2ZvbGlvLFxuJiM0MztcdC5yZWFkYWhlYWQgPSBtaW5peF9yZWFkYWhlYWQsXG4gXHQud3JpdGVwYWdlcyA9IG1pbml4X3dyaXRlcGFnZXMsXG4mIzQzO1x0Lm1pZ3JhdGVfZm9saW8gPSBmaWxlbWFwX21pZ3JhdGVfZm9saW8sXG4mIzQzO1x0LmJtYXAgPSBtaW5peF9ibWFwLFxuJiM0MztcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsXG4mIzQzO1x0LnJlbGVhc2VfZm9saW8gPSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxuJiM0MztcdC5lcnJvcl9yZW1vdmVfZm9saW8gPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIEEgc3BlY2lhbCBhb3BzIGZvciBkaXJlY3RvcmllcyB0aGF0IGtlZXBzIHVzaW5nIHRoZSBidWZmZXIgaGVhZCBjaHVua3MsIGF0XG4mIzQzOyAqIGxlYXN0IGZvciB0aGUgdGltZSBiZWluZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9hb3BzID0ge1xuJiM0MztcdC5kaXJ0eV9mb2xpbyA9IGJsb2NrX2RpcnR5X2ZvbGlvLFxuJiM0MztcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbiYjNDM7XHQucmVhZF9mb2xpbyA9IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8sXG4gXHQud3JpdGVfYmVnaW4gPSBtaW5peF93cml0ZV9iZWdpbixcbiBcdC53cml0ZV9lbmQgPSBnZW5lcmljX3dyaXRlX2VuZCxcbiBcdC5taWdyYXRlX2ZvbGlvID0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXG4gXHQuYm1hcCA9IG1pbml4X2JtYXAsXG4tXHQuZGlyZWN0X0lPID0gbm9vcF9kaXJlY3RfSU9cbiYjNDM7XHQud3JpdGVwYWdlcyA9IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuQEAgLTUxNiw3ICYjNDM7NTg2LDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcbiBcdH0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZtaW5peF9kaXJfb3BlcmF0aW9ucztcbi1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bWluaXhfYW9wcztcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNm1pbml4X2Rpcl9hb3BzO1xuIFx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNm1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbkBAIC03NjgsNCAmIzQzOzgzOCwzIEBAIG1vZHVsZV9pbml0KGluaXRfbWluaXhfZnMpXG4gbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcylcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TWluaXggZmlsZSBzeXN0ZW1cJiMzNDspO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4tXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW9tYXAuYyBiL2ZzL21pbml4L2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uN2JiMDQzOWUzNjY5OTZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lvbWFwLmNcbkBAIC0wLDAgJiM0MzsxLDExNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIGlvbWFwIGZ1bmN0aW9ucyBmb3IgbWluaXguIEF0IGxlYXN0IHRoZSBmaXJzdCBwYXNzIG9mIHRoaXMgZmlsZSB3YXMgdGFrZW5cbiYjNDM7ICogZnJvbSB0aGUgeGlhZnMgaW9tYXAuYywgd2hpY2ggaXMgZml0dGluZyBzaW5jZSB0aGUgeGlhZnMgbW9kdWxlIGluIHR1cm5cbiYjNDM7ICogYm9ycm93ZWQgaGVhdmlseSBmcm9tIHRoZSBtb2Rlcm5pemVkIG1pbml4IGZzIGtlcm5lbCBtb2R1bGUuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogbWluaXhfaW9tYXBfYmVnaW4gLSBtYXAgYSBmaWxlIHJhbmdlIHRvIGRpc2sgYmxvY2tzLiBJdCBhY3RzIGFzIGEgcmVwbGFjZW1lbnRcbiYjNDM7ICogZm9yIGdldF9ibG9jayBpbiBpdHJlZV9jb21tb24uYywgYXQgbGVhc3QgaW4gdGhlIGltcG9ydGFudCB3YXlzLCBhbmQgaXNcbiYjNDM7ICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLiBUaGlzIGlzIHRha2VuXG4mIzQzOyAqIGRpcmVjdGx5IGZyb20gdGhlIG91dC1vZi10cmVlIHhpYWZzIGlvbWFwIGNoYW5nZXMsIGFuZCB0aGUgZXhmYXQgaW9tYXBcbiYjNDM7ICogY2hhbmdlcyB3ZXJlIGFuIGluc3BpcmF0aW9uIGZvciB0aGF0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBtaW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuJiM0MztcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4mIzQzO1x0c2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuJiM0MztcdGludCBjcmVhdGUgPSBmbGFncyBcdTAwMjYgSU9NQVBfV1JJVEU7XG4mIzQzO1xuJiM0MztcdC8qIE1vc3RseSB0YWtlbiBmcm9tIG1vZGVybi14aWFmcyBpdHJlZS5jIGdldF9ibG9jayB3aXRoIGVsZW1lbnRzIGZyb21cbiYjNDM7XHQgKiBzaW1pbGFyIGV4ZmF0IG9wZXJhdGlvbnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50IG9mZnNldHNbREVQVEhdO1xuJiM0MztcdEluZGlyZWN0IGNoYWluW0RFUFRIXTtcbiYjNDM7XHRJbmRpcmVjdCAqcGFydGlhbDtcbiYjNDM7XHRpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpO1xuJiM0MztcdGludCBsZWZ0O1xuJiM0MztcdGludCBlcnIgPSAtRUlPO1xuJiM0MztcbiYjNDM7XHRzZWN0b3JfdCBwaHlzO1xuJiM0MztcbiYjNDM7XHQvKiBibG9jayBpcyBiZXlvbmQgbWF4IGZpbGUgc2l6ZSAqL1xuJiM0MztcdGlmIChkZXB0aCA9PSAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlvbWFwLVx1MDAzZWJkZXYgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldjtcbiYjNDM7XG4mIzQzO3JlcmVhZDpcbiYjNDM7XHRwYXJ0aWFsID0gZ2V0X2JyYW5jaChpbm9kZSwgZGVwdGgsIG9mZnNldHMsIGNoYWluLCBcdTAwMjZlcnIpO1xuJiM0MztcbiYjNDM7XHQvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovXG4mIzQzO1x0aWYgKCFwYXJ0aWFsKSB7XG4mIzQzO1x0XHQvKiBCaXQgb2YgYSB3ZWlyZCBvcmRlciwgYnV0IGl0JiMzOTtsbCBtYWtlIHNlbnNlIHdoZW4geW91IGdldCB0b1xuJiM0MztcdFx0ICogdGhlIGJvdHRvbS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX01FUkdFRDtcbiYjNDM7Z290X2l0OlxuJiM0MztcdFx0cGh5cyA9IGJsb2NrX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7XG4mIzQzO1x0XHRwYXJ0aWFsID0gY2hhaW4mIzQzO2RlcHRoLTE7XG4mIzQzO1x0XHQvKiBTZXQgdXAgdGhlIGlvbWFwIHN0cnVjdCBiZWZvcmUgY2xlYW5pbmcgdXAgKi9cbiYjNDM7XHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2VhZGRyID0gKHU2NClwaHlzIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuJiM0MztcdFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gMSBcdTAwM2NcdTAwM2MgYmxrYml0cztcbiYjNDM7XHRcdGlvbWFwLVx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogTmV4dCBzaW1wbGUgY2FzZSAtIHBsYWluIGxvb2t1cCBvciBmYWlsZWQgcmVhZCBvZiBpbmRpcmVjdCBibG9jayAqL1xuJiM0MztcdGlmICghY3JlYXRlIHx8IGVyciA9PSAtRUlPKSB7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2V0eXBlID0gSU9NQVBfSE9MRTtcbiYjNDM7XHRcdGlvbWFwLVx1MDAzZWFkZHIgPSBJT01BUF9OVUxMX0FERFI7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2VsZW5ndGggPSAxIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuJiM0MztcdFx0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gKHU2NClpYmxvY2sgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4mIzQzO1x0XHRpb21hcC1cdTAwM2VmbGFncyA9IDA7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0XHR3aGlsZSAocGFydGlhbCBcdTAwM2UgY2hhaW4pIHtcbiYjNDM7XHRcdFx0YnJlbHNlKHBhcnRpYWwtXHUwMDNlYmgpO1xuJiM0MztcdFx0XHRwYXJ0aWFsLS07XG4mIzQzO1x0XHR9XG4mIzQzO291dDpcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEluZGlyZWN0IGJsb2NrIG1pZ2h0IGJlIHJlbW92ZWQgYnkgdHJ1bmNhdGUgd2hpbGUgd2Ugd2VyZVxuJiM0MztcdCAqIHJlYWRpbmcgaXQuIEhhbmRsaW5nIG9mIHRoYXQgY2FzZSAoZm9yZ2V0IHdoYXQgd2UmIzM5O3ZlIGdvdCBhbmRcbiYjNDM7XHQgKiByZXJlYWQpIGlzIHRha2VuIG91dCBvZiB0aGUgbWFpbiBwYXRoLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChlcnIgPT0gLUVBR0FJTilcbiYjNDM7XHRcdGdvdG8gY2hhbmdlZDtcbiYjNDM7XG4mIzQzO1x0bGVmdCA9IChjaGFpbiAmIzQzOyBkZXB0aCkgLSBwYXJ0aWFsO1xuJiM0MztcdGVyciA9IGFsbG9jX2JyYW5jaChpbm9kZSwgbGVmdCwgb2Zmc2V0cyAmIzQzOyAocGFydGlhbCAtIGNoYWluKSwgcGFydGlhbCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNwbGljZV9icmFuY2goaW5vZGUsIGNoYWluLCBwYXJ0aWFsLCBsZWZ0KSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gY2hhbmdlZDtcbiYjNDM7XG4mIzQzO1x0LyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqL1xuJiM0MztcdGlvbWFwLVx1MDAzZWZsYWdzID0gSU9NQVBfRl9ORVc7XG4mIzQzO1x0Z290byBnb3RfaXQ7XG4mIzQzO1xuJiM0MztjaGFuZ2VkOlxuJiM0MztcdHdoaWxlIChwYXJ0aWFsIFx1MDAzZSBjaGFpbikge1xuJiM0MztcdFx0YnJlbHNlKHBhcnRpYWwtXHUwMDNlYmgpO1xuJiM0MztcdFx0cGFydGlhbC0tO1xuJiM0MztcdH1cbiYjNDM7XHRnb3RvIHJlcmVhZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogbWluaXhfaW9tYXBfZW5kIGVuZHMgdXAgYmVpbmcgYSBub3A7IHNpbmNlIG1pbml4IGRvZXNuJiMzOTt0IGhhdmUgYW55IGV4dGVudHMgb3JcbiYjNDM7ICogdHJhbnNhY3Rpb25zIHRvIHdvcnJ5IGFib3V0LCB0aGVyZSBpc24mIzM5O3QgYW55dGhpbmcgdG8gdXBkYXRlIGhlcmUuIFRoZSBvbi1kaXNrXG4mIzQzOyAqIGluZGlyZWN0IGJsb2NrcyBnZXQgZGlydGllZCBpbiBtaW5peF9pb21hcF9iZWdpbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4mIzQzO1x0c3NpemVfdCB3cml0dGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YxLmMgYi9mcy9taW5peC9pdHJlZV92MS5jXG5pbmRleCAxZmVkOTA2MDQyYWE4NC4uNThjMjlmNDQ0M2QzNzIgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9pdHJlZV92MS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV92MS5jXG5AQCAtNDksNiAmIzQzOzQ5LDE4IEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKVxuIH1cbiBcbiAjaW5jbHVkZSBcJiMzNDtpdHJlZV9jb21tb24uY1wmIzM0O1xuJiM0MzsvKiBOT1RBIEJFTkU6XG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgaXMgaWNreSB0byBtZSwgYnV0IGF0IHRoZSBzYW1lIHRpbWUgaGF2aW5nIGl0IGJlIGEgc3RhbmRhbG9uZSBDIGZpbGVcbiYjNDM7ICogdGhhdCYjMzk7cyBjb21waWxlZCB0byBvYmplY3QgZm9ybSBhbmQgbGlua2VkIHNlcGFyYXRlbHkgbGlrZSBpdCBpcyBpbiB4aWFmcyBpc1xuJiM0MzsgKiBtdWNoIG5hc3RpZXIgaW4gbWluaXggYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBtaW5peCBmcyB0aGF0XG4mIzQzOyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJiMzOTt0XG4mIzQzOyAqIGxpa2UgaXQsIGJ1dCBzaW5jZSBtaW5peCBhbHJlYWR5IGhhcyB0aGlzIHBhdHRlcm4gd2hlcmUgYSBjb21tb24gaXRyZWUgZmlsZVxuJiM0MzsgKiBpcyBpbmNsdWRlZCBpbiB0aGUgaXRyZWVfdjEgYW5kIGl0cmVlX3YyKGFuZCB2MykgZmlsZXMsIEkmIzM5O20gaW5jbHVkaW5nIGlvbWFwLmNcbiYjNDM7ICogaW4gdGhlc2UgZmlsZXMgYXMgd2VsbC4gSXQgZG9lcyBhdCBsZWFzdCBhdm9pZCBleHBvcnRpbmcgc29tZSBjdXJyZW50bHlcbiYjNDM7ICogc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3QgbmVlZGVkIGFueXdoZXJlIGJ1dCBpdHJlZV9jb21tb24uYyBhbmQgaW9tYXAuYy5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2lvbWFwLmNcJiMzNDtcbiBcbiBpbnQgVjFfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLFxuIFx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuQEAgLTYxLDcgJiM0Mzs3MywxOCBAQCB2b2lkIFYxX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0dHJ1bmNhdGUoaW5vZGUpO1xuIH1cbiBcbi11bnNpZ25lZCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4mIzQzO3Vuc2lnbmVkIGludCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuIFx0cmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpO1xuIH1cbiYjNDM7XG4mIzQzO2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuJiM0MztcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbWluaXhfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsIHNyY21hcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjFfbWluaXhfaW9tYXBfb3BzID0ge1xuJiM0MztcdC5pb21hcF9iZWdpbiA9IFYxX21pbml4X2lvbWFwX2JlZ2luLFxuJiM0MztcdC5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV92Mi5jIGIvZnMvbWluaXgvaXRyZWVfdjIuY1xuaW5kZXggOWQwMGYzMWEyZDlkMTUuLmZjN2E1YWU4ZmExY2EzIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaXRyZWVfdjIuY1xuQEAgLTU3LDYgJiM0Mzs1NywxMCBAQCBzdGF0aWMgaW50IGJsb2NrX3RvX3BhdGgoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssIGludCBvZmZzZXRzW0RFUFRIXSlcbiB9XG4gXG4gI2luY2x1ZGUgXCYjMzQ7aXRyZWVfY29tbW9uLmNcJiMzNDtcbiYjNDM7LyogU2VlIHRoZSBub3RlIGluIGl0cmVlX3YxIGluIGEgY29tbWVudCB0aGF0IHN0YXJ0cyBcJiMzNDtOT1RBIEJFTkVcJiMzNDsgZm9yIGFuXG4mIzQzOyAqIGV4cGxhbmF0aW9uIGZvciB3aHkgaW9tYXAuYyBpcyBpbmNsdWRlZCBoZXJlLlxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW9tYXAuY1wmIzM0O1xuIFxuIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXG4gXHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG5AQCAtNjksNyAmIzQzOzczLDE4IEBAIHZvaWQgVjJfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHR0cnVuY2F0ZShpbm9kZSk7XG4gfVxuIFxuLXVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiYjNDM7dW5zaWduZWQgaW50IFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XG4gfVxuJiM0MztcbiYjNDM7aW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4mIzQzO1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHMgPSB7XG4mIzQzO1x0LmlvbWFwX2JlZ2luID0gVjJfbWluaXhfaW9tYXBfYmVnaW4sXG4mIzQzO1x0LmlvbWFwX2VuZCAgID0gbWluaXhfaW9tYXBfZW5kLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L21pbml4LmggYi9mcy9taW5peC9taW5peC5oXG5pbmRleCBmMjAyNWM5YjU4MjUyZi4uZmFjZTc0MTAwMzQ2MDIgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9taW5peC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9taW5peC5oXG5AQCAtNSw2ICYjNDM7NSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pbml4X2ZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuICNkZWZpbmUgSU5PREVfVkVSU0lPTihpbm9kZSlcdG1pbml4X3NiKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfdmVyc2lvblxuICNkZWZpbmUgTUlOSVhfVjFcdFx0MHgwMDAxXHRcdC8qIG9yaWdpbmFsIG1pbml4IGZzICovXG5AQCAtNTYsNyAmIzQzOzU3LDcgQEAgaW50IG1pbml4X25ld19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiB2b2lkIG1pbml4X2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibG9jayk7XG4gdW5zaWduZWQgbG9uZyBtaW5peF9jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosXG4tXHRcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkIGludCk7XG4mIzQzO1x0XHRzdHJ1Y3Qga3N0YXQgKiwgdTMyLCB1bnNpZ25lZCk7XG4gaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKTtcbiBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1pbml4X2dldF9tZXRhZGF0YV9iaHMoc3RydWN0IGlub2RlICppbm9kZSk7XG4gaW50IG1pbml4X2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYyk7XG5AQCAtODAsMTAgJiM0Mzs4MSwxOSBAQCBpbnQgbWluaXhfc2V0X2xpbmsoc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZG90ZG90KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmb2xpbyAqKik7XG4gaW5vX3QgbWluaXhfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgZGVudHJ5Kik7XG4gXG4mIzQzO2V4dGVybiBpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbiYjNDM7XHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXG4mIzQzO1x0c3RydWN0IGlvbWFwICpzcmNtYXApO1xuJiM0MztleHRlcm4gaW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLFxuJiM0MztcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcbiYjNDM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMV9taW5peF9pb21hcF9vcHM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcztcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9zYl9pbmZvICptaW5peF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbkBAIC05NSwxMSAmIzQzOzEwNSwxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSlcbiB7XG4gXHRyZXR1cm4gRElWX1JPVU5EX1VQKGJpdHMsIGJsb2Nrc2l6ZSAqIDgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICptaW5peF9pb21hcF9vcHNfdmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSA/XG4mIzQzO1x0XHRcdTAwMjZWMV9taW5peF9pb21hcF9vcHMgOiBcdTAwMjZWMl9taW5peF9pb21hcF9vcHM7XG4mIzQzO31cbiYjNDM7XG4gI2lmIGRlZmluZWQoQ09ORklHX01JTklYX0ZTX05BVElWRV9FTkRJQU4pIFx1MDAyNlx1MDAyNiBcXFxuIFx0ZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEKVxuIFxuQEAgLTEyOSw3ICYjNDM7MTQ1LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbiAgKiBiaWctZW5kaWFuIDE2Yml0IGluZGV4ZWQgYml0bWFwc1xuICAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwID0gdmFkZHIsICphZGRyID0gdmFkZHI7XG4gXHR1bnNpZ25lZCBzaG9ydCBudW07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlOSVhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaW5peF9kaW9fcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2Rpb193cml0ZV9lbmRfaW8mIzM0OywKICAgICYjMzQ7bWluaXhfZGlvX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfZmlsZV9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfb3BlbiYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZWJhY2tfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkX2ZvbGlvJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDttaW5peF9ibWFwJiMzNDssCiAgICAmIzM0O21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21pbml4X2lvbWFwX2VuZCYjMzQ7LAogICAgJiMzNDtWMV9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtWMl9taW5peF9pb21hcF9iZWdpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGlvbWFwIHN1cHBvcnQgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLCByZXBsYWNpbmcgb2xkZXIgYnVmZmVyX2hlYWQtYmFzZWQgb3BlcmF0aW9ucyBmb3IgcmVndWxhciBmaWxlcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHJlYWQvd3JpdGUvbW1hcCBsb2dpYyBvZiB0aGUgbWluaXggZmlsZXN5c3RlbSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJkZGVkOWFlMjIzZWI3OGY0ODVlMWQwM2QyMDNlYTM4OGIyNGJjYWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1biAyNSAyMjoxMToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuYwppbmRleCA4NmU1OTQzY2QyZmY3NC4uMWY0MjE3MTE1NDAxOGQgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9maWxlLmMKQEAgLTE3LDE3ICYjNDM7MTcsMTYyIEBAIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCiAJCQlzdGFydCwgZW5kLCBkYXRhc3luYyk7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpOwomIzQzOwomIzQzOwlyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgdG8sIG9wcywgTlVMTCwgMCwgTlVMTCwgMCk7CiYjNDM7CWlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1pbml4X2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsIGludCBlcnJvciwKJiM0MzsJCXVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlsb2ZmX3QgcG9zID0gaW9jYi0mZ3Q7a2lfcG9zOwomIzQzOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CXBvcyAmIzQzOz0gc2l6ZTsKJiM0MzsJaWYgKHNpemUgJmFtcDsmYW1wOyBwb3MgJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKJiM0MzsJCWlfc2l6ZV93cml0ZShpbm9kZSwgcG9zKTsKJiM0MzsJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgbWluaXhfZGlvX3dyaXRlX29wcyA9IHsKJiM0MzsJLmVuZF9pbyA9IG1pbml4X2Rpb193cml0ZV9lbmRfaW8sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGJsb2Nrc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKJiM0MzsKJiM0MzsJaW5vZGVfbG9jayhpbm9kZSk7CiYjNDM7CXJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CiYjNDM7CXJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGlvdl9pdGVyX2NvdW50KGZyb20pICZndDsgaV9zaXplX3JlYWQoaW5vZGUpIHx8CiYjNDM7CQkhSVNfQUxJR05FRChpb2NiLSZndDtraV9wb3MgfCBpb3ZfaXRlcl9hbGlnbm1lbnQoZnJvbSksIGJsb2Nrc2l6ZSkpCiYjNDM7CQlmbGFncyB8PSBJT01BUF9ESU9fRk9SQ0VfV0FJVDsKJiM0MzsKJiM0MzsJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSk7CiYjNDM7CiYjNDM7CXJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLCBvcHMsCiYjNDM7CQkmYW1wO21pbml4X2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTsKJiM0MzsJaWYgKHJldCA9PSAtRU5PVEJMSykKJiM0MzsJCXJldCA9IDA7IC8qIGZhbGxiYWNrIHRvIGJ1ZmZlcmVkICovCiYjNDM7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7CiYjNDM7CQlsb2ZmX3QgcG9zOwomIzQzOwkJbG9mZl90IGVuZGJ5dGU7CiYjNDM7CQlzc2l6ZV90IHN0YXR1czsKJiM0MzsKJiM0MzsJCWlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7PSB+SU9DQl9ESVJFQ1Q7CiYjNDM7CQlwb3MgPSBpb2NiLSZndDtraV9wb3M7CiYjNDM7CQlzdGF0dXMgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcywKJiM0MzsJCQlOVUxMLCBOVUxMKTsKJiM0MzsJCWlmICh1bmxpa2VseShzdGF0dXMgJmx0OyAwKSkgewomIzQzOwkJCXJldCA9IHN0YXR1czsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXQgJiM0Mzs9IHN0YXR1czsKJiM0MzsJCWVuZGJ5dGUgPSBwb3MgJiM0Mzsgc3RhdHVzIC0gMTsKJiM0MzsJCXN0YXR1cyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgcG9zLCBlbmRieXRlKTsKJiM0MzsJCWlmICghc3RhdHVzKSB7CiYjNDM7CQkJaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlub2RlLSZndDtpX21hcHBpbmcsCiYjNDM7CQkJCXBvcyAmZ3Q7Jmd0OyBQQUdFX1NISUZULAomIzQzOwkJCQllbmRieXRlICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwkJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCQlyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0ID0gc3RhdHVzOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJaW5vZGVfdW5sb2NrKGlub2RlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKQomIzQzO3sKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKQomIzQzOwkJcmV0dXJuIG1pbml4X2Rpb19yZWFkX2l0ZXIoaW9jYiwgdG8pOwomIzQzOwomIzQzOwlyZXR1cm4gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwkvKiBtaW5peF9kaW9fd3JpdGVfaXRlciBhbHNvIGxvY2tzIHRoZSBpbm9kZSBhbmQgYXBwZWFycyB0byBkbyB0aGUgc2FtZQomIzQzOwkgKiBnZW5lcmFsIHNvcnRzIG9mIGNoZWNrcyBhcyB0aGlzLCBzbyBqdXN0IHJldHVybiBkaXJlY3RseSBmcm9tIHRoZXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKQomIzQzOwkJcmV0dXJuIG1pbml4X2Rpb193cml0ZV9pdGVyKGlvY2IsIGZyb20pOwomIzQzOwomIzQzOwlpbm9kZV9sb2NrKGlub2RlKTsKJiM0MzsJcmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlyZXQgPSBmaWxlX21vZGlmaWVkKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpOwomIzQzOwomIzQzOwlyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sIG9wcywKJiM0MzsJCQlOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmZ3Q7IDApCiYjNDM7CQlyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTsKJiM0MzsKJiM0Mzt1bmxvY2s6CiYjNDM7CWlub2RlX3VubG9jayhpbm9kZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWluaXhfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQomIzQzO3sKJiM0MzsJZmlscC0mZ3Q7Zl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUOwomIzQzOwlyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbHApOwomIzQzO30KJiM0MzsKIC8qCi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yCi0gKiB0aGUgbWluaXggZmlsZXN5c3RlbS4KJiM0MzsgKiBXZSBzdGlsbCBoYXZlIHNvbWUgTlVMTHMgaGVyZSwgYnV0IG5vdCBhcyBtYW55IG9mIHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZQomIzQzOyAqIHN0aWxsIE9LIGZvciB0aGUgbWluaXggZmlsZXN5c3RlbS4KICAqLwomIzQzOwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAotCS5yZWFkX2l0ZXIJPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLAotCS53cml0ZV9pdGVyCT0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsCiYjNDM7CS5yZWFkX2l0ZXIJPSBtaW5peF9maWxlX3JlYWRfaXRlciwKJiM0MzsJLndyaXRlX2l0ZXIJPSBtaW5peF9maWxlX3dyaXRlX2l0ZXIsCiAJLm1tYXBfcHJlcGFyZQk9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsCiYjNDM7CS5vcGVuCQk9IG1pbml4X2ZpbGVfb3BlbiwKIAkuZnN5bmMJCT0gbWluaXhfZnN5bmMsCiAJLnNwbGljZV9yZWFkCT0gZmlsZW1hcF9zcGxpY2VfcmVhZCwKJiM0MzsJLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCiB9OwogCiBzdGF0aWMgaW50IG1pbml4X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuYwppbmRleCBjMzBjYzU5MDY5OGQ2Zi4uY2QxMmU1OWNlOWI5ZDIgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaW5vZGUuYwpAQCAtNDM2LDYgJiM0Mzs0MzYsMzEgQEAgc3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHNzaXplX3QgbWluaXhfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsCiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBwb3MsIHVuc2lnbmVkIGludCBsZW4sIHU2NCBlbmRfcG9zKQomIzQzO3sKJiM0MzsJaW50IGVycm9yOwomIzQzOwomIzQzOwlpZiAocG9zICZsdDsgd3BjLSZndDtpb21hcC5vZmZzZXQgfHwKJiM0MzsJCQlwb3MgJmd0Oz0gd3BjLSZndDtpb21hcC5vZmZzZXQgJiM0Mzsgd3BjLSZndDtpb21hcC5sZW5ndGgpIHsKJiM0MzsJCWlmIChJTk9ERV9WRVJTSU9OKHdwYy0mZ3Q7aW5vZGUpID09IE1JTklYX1YxKQomIzQzOwkJCWVycm9yID0gVjFfbWluaXhfaW9tYXBfYmVnaW4od3BjLSZndDtpbm9kZSwgcG9zLCBsZW4sIDAsCiYjNDM7CQkJCSZhbXA7d3BjLSZndDtpb21hcCwgTlVMTCk7CiYjNDM7CQllbHNlCiYjNDM7CQkJZXJyb3IgPSBWMl9taW5peF9pb21hcF9iZWdpbih3cGMtJmd0O2lub2RlLCBwb3MsIGxlbiwgMCwKJiM0MzsJCQkJJmFtcDt3cGMtJmd0O2lvbWFwLCBOVUxMKTsKJiM0MzsJCWlmIChlcnJvcikKJiM0MzsJCQlyZXR1cm4gZXJyb3I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBwb3MsIGVuZF9wb3MsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBtaW5peF93cml0ZWJhY2tfb3BzID0gewomIzQzOwkud3JpdGViYWNrX3JhbmdlID0gbWluaXhfd3JpdGViYWNrX3JhbmdlLAomIzQzOwkud3JpdGViYWNrX3N1Ym1pdCA9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLAogCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCiB7CkBAIC00NDUsMTcgJiM0Mzs0NzAsNDUgQEAgc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCiAJCXJldHVybiBWMl9taW5peF9nZXRfYmxvY2soaW5vZGUsIGJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovCiYjNDM7c3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7CQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHsKJiM0MzsJCS5pbm9kZSA9IG1hcHBpbmctJmd0O2hvc3QsCiYjNDM7CQkud2JjID0gd2JjLAomIzQzOwkJLm9wcyA9ICZhbXA7bWluaXhfd3JpdGViYWNrX29wcywKJiM0MzsJfTsKJiM0MzsJcmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoJmFtcDt3cGMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoZmlsZS0mZ3Q7Zl9pbm9kZSk7CiYjNDM7CiYjNDM7CWlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBvcHMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIG9sZCBtaW5peF9yZWFkX2ZvbGlvLCBwcmVzZXJ2ZWQgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zLiAqLwomIzQzO3N0YXRpYyBpbnQgbWluaXhfYmxvY2tfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBtaW5peF9nZXRfYmxvY2spOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbWluaXhfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihyYWMtJmd0O2ZpbGUtJmd0O2ZfaW5vZGUpOwomIzQzOwomIzQzOwlpb21hcF9iaW9fcmVhZGFoZWFkKHJhYywgb3BzKTsKJiM0Mzt9CiYjNDM7CiBpbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pCiB7CiAJcmV0dXJuIF9fYmxvY2tfd3JpdGVfYmVnaW4oZm9saW8sIHBvcywgbGVuLCBtaW5peF9nZXRfYmxvY2spOwpAQCAtNDg3LDE5ICYjNDM7NTQwLDM2IEBAIHN0YXRpYyBpbnQgbWluaXhfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLAogCiBzdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCiB7Ci0JcmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7CiYjNDM7CWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIobWFwcGluZy0mZ3Q7aG9zdCk7CiYjNDM7CiYjNDM7CXJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCBvcHMpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzID0gewotCS5kaXJ0eV9mb2xpbwk9IGJsb2NrX2RpcnR5X2ZvbGlvLAotCS5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbywKJiM0MzsJLmRpcnR5X2ZvbGlvCT0gaW9tYXBfZGlydHlfZm9saW8sCiYjNDM7CS5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbywKIAkucmVhZF9mb2xpbyA9IG1pbml4X3JlYWRfZm9saW8sCiYjNDM7CS5yZWFkYWhlYWQgPSBtaW5peF9yZWFkYWhlYWQsCiAJLndyaXRlcGFnZXMgPSBtaW5peF93cml0ZXBhZ2VzLAomIzQzOwkubWlncmF0ZV9mb2xpbyA9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbywKJiM0MzsJLmJtYXAgPSBtaW5peF9ibWFwLAomIzQzOwkuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLAomIzQzOwkucmVsZWFzZV9mb2xpbyA9IGlvbWFwX3JlbGVhc2VfZm9saW8sCiYjNDM7CS5lcnJvcl9yZW1vdmVfZm9saW8gPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbywKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEEgc3BlY2lhbCBhb3BzIGZvciBkaXJlY3RvcmllcyB0aGF0IGtlZXBzIHVzaW5nIHRoZSBidWZmZXIgaGVhZCBjaHVua3MsIGF0CiYjNDM7ICogbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9hb3BzID0gewomIzQzOwkuZGlydHlfZm9saW8gPSBibG9ja19kaXJ0eV9mb2xpbywKJiM0MzsJLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAomIzQzOwkucmVhZF9mb2xpbyA9IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8sCiAJLndyaXRlX2JlZ2luID0gbWluaXhfd3JpdGVfYmVnaW4sCiAJLndyaXRlX2VuZCA9IGdlbmVyaWNfd3JpdGVfZW5kLAogCS5taWdyYXRlX2ZvbGlvID0gYnVmZmVyX21pZ3JhdGVfZm9saW8sCiAJLmJtYXAgPSBtaW5peF9ibWFwLAotCS5kaXJlY3RfSU8gPSBub29wX2RpcmVjdF9JTwomIzQzOwkud3JpdGVwYWdlcyA9IG1pbml4X2Jsb2NrX3dyaXRlcGFnZXMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0gewpAQCAtNTE2LDcgJiM0Mzs1ODYsNyBAQCB2b2lkIG1pbml4X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkZXZfdCByZGV2KQogCX0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7bWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAJCWlub2RlLSZndDtpX2ZvcCA9ICZhbXA7bWluaXhfZGlyX29wZXJhdGlvbnM7Ci0JCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDttaW5peF9hb3BzOwomIzQzOwkJaW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPSAmYW1wO21pbml4X2Rpcl9hb3BzOwogCX0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7bWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZV9ub2hpZ2htZW0oaW5vZGUpOwpAQCAtNzY4LDQgJiM0Mzs4MzgsMyBAQCBtb2R1bGVfaW5pdChpbml0X21pbml4X2ZzKQogbW9kdWxlX2V4aXQoZXhpdF9taW5peF9mcykKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O01pbml4IGZpbGUgc3lzdGVtJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7Ci0KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lvbWFwLmMgYi9mcy9taW5peC9pb21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi43YmIwNDM5ZTM2Njk5NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2lvbWFwLmMKQEAgLTAsMCAmIzQzOzEsMTE0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogaW9tYXAgZnVuY3Rpb25zIGZvciBtaW5peC4gQXQgbGVhc3QgdGhlIGZpcnN0IHBhc3Mgb2YgdGhpcyBmaWxlIHdhcyB0YWtlbgomIzQzOyAqIGZyb20gdGhlIHhpYWZzIGlvbWFwLmMsIHdoaWNoIGlzIGZpdHRpbmcgc2luY2UgdGhlIHhpYWZzIG1vZHVsZSBpbiB0dXJuCiYjNDM7ICogYm9ycm93ZWQgaGVhdmlseSBmcm9tIHRoZSBtb2Rlcm5pemVkIG1pbml4IGZzIGtlcm5lbCBtb2R1bGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtaW5peF9pb21hcF9iZWdpbiAtIG1hcCBhIGZpbGUgcmFuZ2UgdG8gZGlzayBibG9ja3MuIEl0IGFjdHMgYXMgYSByZXBsYWNlbWVudAomIzQzOyAqIGZvciBnZXRfYmxvY2sgaW4gaXRyZWVfY29tbW9uLmMsIGF0IGxlYXN0IGluIHRoZSBpbXBvcnRhbnQgd2F5cywgYW5kIGlzCiYjNDM7ICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLiBUaGlzIGlzIHRha2VuCiYjNDM7ICogZGlyZWN0bHkgZnJvbSB0aGUgb3V0LW9mLXRyZWUgeGlhZnMgaW9tYXAgY2hhbmdlcywgYW5kIHRoZSBleGZhdCBpb21hcAomIzQzOyAqIGNoYW5nZXMgd2VyZSBhbiBpbnNwaXJhdGlvbiBmb3IgdGhhdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsCiYjNDM7CXVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiYjNDM7CXVuc2lnbmVkIGludCBibGtiaXRzID0gc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7CiYjNDM7CXNlY3Rvcl90IGlibG9jayA9IG9mZnNldCAmZ3Q7Jmd0OyBibGtiaXRzOwomIzQzOwlpbnQgY3JlYXRlID0gZmxhZ3MgJmFtcDsgSU9NQVBfV1JJVEU7CiYjNDM7CiYjNDM7CS8qIE1vc3RseSB0YWtlbiBmcm9tIG1vZGVybi14aWFmcyBpdHJlZS5jIGdldF9ibG9jayB3aXRoIGVsZW1lbnRzIGZyb20KJiM0MzsJICogc2ltaWxhciBleGZhdCBvcGVyYXRpb25zLgomIzQzOwkgKi8KJiM0MzsJaW50IG9mZnNldHNbREVQVEhdOwomIzQzOwlJbmRpcmVjdCBjaGFpbltERVBUSF07CiYjNDM7CUluZGlyZWN0ICpwYXJ0aWFsOwomIzQzOwlpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpOwomIzQzOwlpbnQgbGVmdDsKJiM0MzsJaW50IGVyciA9IC1FSU87CiYjNDM7CiYjNDM7CXNlY3Rvcl90IHBoeXM7CiYjNDM7CiYjNDM7CS8qIGJsb2NrIGlzIGJleW9uZCBtYXggZmlsZSBzaXplICovCiYjNDM7CWlmIChkZXB0aCA9PSAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlvbWFwLSZndDtiZGV2ID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmRldjsKJiM0MzsKJiM0MztyZXJlYWQ6CiYjNDM7CXBhcnRpYWwgPSBnZXRfYnJhbmNoKGlub2RlLCBkZXB0aCwgb2Zmc2V0cywgY2hhaW4sICZhbXA7ZXJyKTsKJiM0MzsKJiM0MzsJLyogU2ltcGxlc3QgY2FzZSAtIGJsb2NrIGZvdW5kLCBubyBhbGxvY2F0aW9uIG5lZWRlZCAqLwomIzQzOwlpZiAoIXBhcnRpYWwpIHsKJiM0MzsJCS8qIEJpdCBvZiBhIHdlaXJkIG9yZGVyLCBidXQgaXQmIzM5O2xsIG1ha2Ugc2Vuc2Ugd2hlbiB5b3UgZ2V0IHRvCiYjNDM7CQkgKiB0aGUgYm90dG9tLgomIzQzOwkJICovCiYjNDM7CQlpb21hcC0mZ3Q7ZmxhZ3MgPSBJT01BUF9GX01FUkdFRDsKJiM0Mztnb3RfaXQ6CiYjNDM7CQlwaHlzID0gYmxvY2tfdG9fY3B1KGNoYWluW2RlcHRoIC0gMV0ua2V5KTsKJiM0MzsJCXBhcnRpYWwgPSBjaGFpbiYjNDM7ZGVwdGgtMTsKJiM0MzsJCS8qIFNldCB1cCB0aGUgaW9tYXAgc3RydWN0IGJlZm9yZSBjbGVhbmluZyB1cCAqLwomIzQzOwkJaW9tYXAtJmd0O3R5cGUgPSBJT01BUF9NQVBQRUQ7CiYjNDM7CQlpb21hcC0mZ3Q7YWRkciA9ICh1NjQpcGh5cyAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzOwkJaW9tYXAtJmd0O2xlbmd0aCA9IDEgJmx0OyZsdDsgYmxrYml0czsKJiM0MzsJCWlvbWFwLSZndDtvZmZzZXQgPSAodTY0KWlibG9jayAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE5leHQgc2ltcGxlIGNhc2UgLSBwbGFpbiBsb29rdXAgb3IgZmFpbGVkIHJlYWQgb2YgaW5kaXJlY3QgYmxvY2sgKi8KJiM0MzsJaWYgKCFjcmVhdGUgfHwgZXJyID09IC1FSU8pIHsKJiM0MzsJCWlvbWFwLSZndDt0eXBlID0gSU9NQVBfSE9MRTsKJiM0MzsJCWlvbWFwLSZndDthZGRyID0gSU9NQVBfTlVMTF9BRERSOwomIzQzOwkJaW9tYXAtJmd0O2xlbmd0aCA9IDEgJmx0OyZsdDsgYmxrYml0czsKJiM0MzsJCWlvbWFwLSZndDtvZmZzZXQgPSAodTY0KWlibG9jayAmbHQ7Jmx0OyBibGtiaXRzOwomIzQzOwkJaW9tYXAtJmd0O2ZsYWdzID0gMDsKJiM0MztjbGVhbnVwOgomIzQzOwkJd2hpbGUgKHBhcnRpYWwgJmd0OyBjaGFpbikgewomIzQzOwkJCWJyZWxzZShwYXJ0aWFsLSZndDtiaCk7CiYjNDM7CQkJcGFydGlhbC0tOwomIzQzOwkJfQomIzQzO291dDoKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSW5kaXJlY3QgYmxvY2sgbWlnaHQgYmUgcmVtb3ZlZCBieSB0cnVuY2F0ZSB3aGlsZSB3ZSB3ZXJlCiYjNDM7CSAqIHJlYWRpbmcgaXQuIEhhbmRsaW5nIG9mIHRoYXQgY2FzZSAoZm9yZ2V0IHdoYXQgd2UmIzM5O3ZlIGdvdCBhbmQKJiM0MzsJICogcmVyZWFkKSBpcyB0YWtlbiBvdXQgb2YgdGhlIG1haW4gcGF0aC4KJiM0MzsJICovCiYjNDM7CWlmIChlcnIgPT0gLUVBR0FJTikKJiM0MzsJCWdvdG8gY2hhbmdlZDsKJiM0MzsKJiM0MzsJbGVmdCA9IChjaGFpbiAmIzQzOyBkZXB0aCkgLSBwYXJ0aWFsOwomIzQzOwllcnIgPSBhbGxvY19icmFuY2goaW5vZGUsIGxlZnQsIG9mZnNldHMgJiM0MzsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoc3BsaWNlX2JyYW5jaChpbm9kZSwgY2hhaW4sIHBhcnRpYWwsIGxlZnQpICZsdDsgMCkKJiM0MzsJCWdvdG8gY2hhbmdlZDsKJiM0MzsKJiM0MzsJLyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqLwomIzQzOwlpb21hcC0mZ3Q7ZmxhZ3MgPSBJT01BUF9GX05FVzsKJiM0MzsJZ290byBnb3RfaXQ7CiYjNDM7CiYjNDM7Y2hhbmdlZDoKJiM0MzsJd2hpbGUgKHBhcnRpYWwgJmd0OyBjaGFpbikgewomIzQzOwkJYnJlbHNlKHBhcnRpYWwtJmd0O2JoKTsKJiM0MzsJCXBhcnRpYWwtLTsKJiM0MzsJfQomIzQzOwlnb3RvIHJlcmVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBtaW5peF9pb21hcF9lbmQgZW5kcyB1cCBiZWluZyBhIG5vcDsgc2luY2UgbWluaXggZG9lc24mIzM5O3QgaGF2ZSBhbnkgZXh0ZW50cyBvcgomIzQzOyAqIHRyYW5zYWN0aW9ucyB0byB3b3JyeSBhYm91dCwgdGhlcmUgaXNuJiMzOTt0IGFueXRoaW5nIHRvIHVwZGF0ZSBoZXJlLiBUaGUgb24tZGlzawomIzQzOyAqIGluZGlyZWN0IGJsb2NrcyBnZXQgZGlydGllZCBpbiBtaW5peF9pb21hcF9iZWdpbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1pbml4X2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwlzc2l6ZV90IHdyaXR0ZW4sIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2l0cmVlX3YxLmMgYi9mcy9taW5peC9pdHJlZV92MS5jCmluZGV4IDFmZWQ5MDYwNDJhYTg0Li41OGMyOWY0NDQzZDM3MiAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9pdHJlZV92MS5jCkBAIC00OSw2ICYjNDM7NDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pCiB9CiAKICNpbmNsdWRlICYjMzQ7aXRyZWVfY29tbW9uLmMmIzM0OwomIzQzOy8qIE5PVEEgQkVORToKJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgaWNreSB0byBtZSwgYnV0IGF0IHRoZSBzYW1lIHRpbWUgaGF2aW5nIGl0IGJlIGEgc3RhbmRhbG9uZSBDIGZpbGUKJiM0MzsgKiB0aGF0JiMzOTtzIGNvbXBpbGVkIHRvIG9iamVjdCBmb3JtIGFuZCBsaW5rZWQgc2VwYXJhdGVseSBsaWtlIGl0IGlzIGluIHhpYWZzIGlzCiYjNDM7ICogbXVjaCBuYXN0aWVyIGluIG1pbml4IGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgbWluaXggZnMgdGhhdAomIzQzOyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJiMzOTt0CiYjNDM7ICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlCiYjNDM7ICogaXMgaW5jbHVkZWQgaW4gdGhlIGl0cmVlX3YxIGFuZCBpdHJlZV92MihhbmQgdjMpIGZpbGVzLCBJJiMzOTttIGluY2x1ZGluZyBpb21hcC5jCiYjNDM7ICogaW4gdGhlc2UgZmlsZXMgYXMgd2VsbC4gSXQgZG9lcyBhdCBsZWFzdCBhdm9pZCBleHBvcnRpbmcgc29tZSBjdXJyZW50bHkKJiM0MzsgKiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBuZWVkZWQgYW55d2hlcmUgYnV0IGl0cmVlX2NvbW1vbi5jIGFuZCBpb21hcC5jLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuYyYjMzQ7CiAKIGludCBWMV9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssCiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKQEAgLTYxLDcgJiM0Mzs3MywxOCBAQCB2b2lkIFYxX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCXRydW5jYXRlKGlub2RlKTsKIH0KIAotdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQomIzQzO3Vuc2lnbmVkIGludCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpOwogfQomIzQzOwomIzQzO2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcyA9IHsKJiM0MzsJLmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sCiYjNDM7CS5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjIuYyBiL2ZzL21pbml4L2l0cmVlX3YyLmMKaW5kZXggOWQwMGYzMWEyZDlkMTUuLmZjN2E1YWU4ZmExY2EzIDEwMDY0NAotLS0gYS9mcy9taW5peC9pdHJlZV92Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2l0cmVlX3YyLmMKQEAgLTU3LDYgJiM0Mzs1NywxMCBAQCBzdGF0aWMgaW50IGJsb2NrX3RvX3BhdGgoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssIGludCBvZmZzZXRzW0RFUFRIXSkKIH0KIAogI2luY2x1ZGUgJiMzNDtpdHJlZV9jb21tb24uYyYjMzQ7CiYjNDM7LyogU2VlIHRoZSBub3RlIGluIGl0cmVlX3YxIGluIGEgY29tbWVudCB0aGF0IHN0YXJ0cyAmIzM0O05PVEEgQkVORSYjMzQ7IGZvciBhbgomIzQzOyAqIGV4cGxhbmF0aW9uIGZvciB3aHkgaW9tYXAuYyBpcyBpbmNsdWRlZCBoZXJlLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuYyYjMzQ7CiAKIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssCiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKQEAgLTY5LDcgJiM0Mzs3MywxOCBAQCB2b2lkIFYyX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCXRydW5jYXRlKGlub2RlKTsKIH0KIAotdW5zaWduZWQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQomIzQzO3Vuc2lnbmVkIGludCBWMl9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIG5ibG9ja3Moc2l6ZSwgc2IpOwogfQomIzQzOwomIzQzO2ludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYyX21pbml4X2lvbWFwX29wcyA9IHsKJiM0MzsJLmlvbWFwX2JlZ2luID0gVjJfbWluaXhfaW9tYXBfYmVnaW4sCiYjNDM7CS5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvbWluaXguaCBiL2ZzL21pbml4L21pbml4LmgKaW5kZXggZjIwMjVjOWI1ODI1MmYuLmZhY2U3NDEwMDM0NjAyIDEwMDY0NAotLS0gYS9mcy9taW5peC9taW5peC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L21pbml4LmgKQEAgLTUsNiAmIzQzOzUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21pbml4X2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKICNkZWZpbmUgSU5PREVfVkVSU0lPTihpbm9kZSkJbWluaXhfc2IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX3ZlcnNpb24KICNkZWZpbmUgTUlOSVhfVjEJCTB4MDAwMQkJLyogb3JpZ2luYWwgbWluaXggZnMgKi8KQEAgLTU2LDcgJiM0Mzs1Nyw3IEBAIGludCBtaW5peF9uZXdfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSk7CiB2b2lkIG1pbml4X2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibG9jayk7CiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogaW50IG1pbml4X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqLCBjb25zdCBzdHJ1Y3QgcGF0aCAqLAotCQlzdHJ1Y3Qga3N0YXQgKiwgdTMyLCB1bnNpZ25lZCBpbnQpOwomIzQzOwkJc3RydWN0IGtzdGF0ICosIHUzMiwgdW5zaWduZWQpOwogaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKTsKIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbWluaXhfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpOwpAQCAtODAsMTAgJiM0Mzs4MSwxOSBAQCBpbnQgbWluaXhfc2V0X2xpbmsoc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiBzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICptaW5peF9kb3Rkb3Qoc3RydWN0IGlub2RlKiwgc3RydWN0IGZvbGlvICoqKTsKIGlub190IG1pbml4X2lub2RlX2J5X25hbWUoc3RydWN0IGRlbnRyeSopOwogCiYjNDM7ZXh0ZXJuIGludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAomIzQzOwlsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsCiYjNDM7CXN0cnVjdCBpb21hcCAqc3JjbWFwKTsKJiM0MztleHRlcm4gaW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCiYjNDM7CWxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwKJiM0MzsJc3RydWN0IGlvbWFwICpzcmNtYXApOwomIzQzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wczsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHM7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1pbml4X3NiX2luZm8gKm1pbml4X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CkBAIC05NSwxMSAmIzQzOzEwNSwxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IG1pbml4X2lub2RlX2luZm8sIHZmc19pbm9kZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBiaXRzLCB1bnNpZ25lZCBibG9ja3NpemUpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSkKIHsKIAlyZXR1cm4gRElWX1JPVU5EX1VQKGJpdHMsIGJsb2Nrc2l6ZSAqIDgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICptaW5peF9pb21hcF9vcHNfdmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSA/CiYjNDM7CQkmYW1wO1YxX21pbml4X2lvbWFwX29wcyA6ICZhbXA7VjJfbWluaXhfaW9tYXBfb3BzOwomIzQzO30KJiM0MzsKICNpZiBkZWZpbmVkKENPTkZJR19NSU5JWF9GU19OQVRJVkVfRU5ESUFOKSAmYW1wOyZhbXA7IFwKIAlkZWZpbmVkKENPTkZJR19NSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRUQpCiAKQEAgLTEyOSw3ICYjNDM7MTQ1LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSkKICAqIGJpZy1lbmRpYW4gMTZiaXQgaW5kZXhlZCBiaXRtYXBzCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgbWluaXhfZmluZF9maXJzdF96ZXJvX2JpdChjb25zdCB2b2lkICp2YWRkciwgdW5zaWduZWQgc2l6ZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKIAljb25zdCB1bnNpZ25lZCBzaG9ydCAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyOwogCXVuc2lnbmVkIHNob3J0IG51bTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkzMAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNaW5peCBJb21hcCBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBpbnRyb2R1Y2luZyBpb21hcCBzdXBwb3J0IGludG8gdGhlIE1pbml4IGZpbGVzeXN0ZW0sIGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGlzIGlzIHRoZSByZXBsYWNlbWVudCBvZiB0aGUgZXhpc3RpbmcgYnVmZmVyX2hlYWQtYmFzZWQgb3BlcmF0aW9ucyB3aXRoIGlvbWFwIHByaW1pdGl2ZXMsIHNwZWNpZmljYWxseSBmb3IgcmVndWxhciBmaWxlcy4gRGlyZWN0b3JpZXMgYXJlIHN0YXlpbmcgd2l0aCB0aGUgYnVmZmVyX2hlYWQgYXBwcm9hY2ggZm9yIG5vdywgd2hpY2ggaXMgYSBzZW5zaWJsZSwgaW5jcmVtZW50YWwgY2hhbmdlLiBUaGV5JiMzOTt2ZSBhZGRlZCBhIHNsZXcgb2YgbmV3IGZ1bmN0aW9uczogYG1pbml4X2Rpb19yZWFkX2l0ZXJgLCBgbWluaXhfZGlvX3dyaXRlX2l0ZXJgLCB0aGUgc3RhbmRhcmQgZmlsZSBpdGVyYXRvcnMsIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGFuZCB0aGUgZm9saW8gZnVuY3Rpb25zLiBBZGRpdGlvbmFsbHksIHdlIGhhdmUgYG1pbml4X2JtYXBgIOKAkyB0aGUgYmxvY2sgbWFwcGluZyBmdW5jdGlvbiwgd2hpY2ggd2lsbCBiZSBpbnRlcmVzdGluZyB0byByZXZpZXcuIExvb2tzIGxpa2UgdGhleSYjMzk7dmUgc3B1biB1cCBhIG5ldyBgZnMvbWluaXgvaW9tYXAuY2AgZmlsZSB3aXRoIGBtaW5peF9pb21hcF9iZWdpbmAgYW5kIGBtaW5peF9pb21hcF9lbmRgLCB3aGljaCBhcmUgdGhlIHN0YW5kYXJkIGJlZ2luL2VuZCBwb2ludHMgZm9yIGlvbWFwIG9wZXJhdGlvbnMsIGFuZCBwcm9iYWJseSB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLgoKVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIE1pbml4JiMzOTtzIElPIHBhdGguIEdpdmVuIHRoZSBkZXB0aCBvZiB0aGlzIGNoYW5nZSwgSSAqZGVmaW5pdGVseSogbmVlZCB0byBlYXJtYXJrIHRoaXMgZm9yIGZ1enppbmcuIFdlJiMzOTtyZSB0b3VjaGluZyBjcml0aWNhbCBjb2RlIHRoYXQgZGVhbHMgd2l0aCBkYXRhIGFjY2VzcywgYW5kIGFueSBzdWJ0bGUgYnVnIGhlcmUgY291bGQgaGF2ZSBzZXJpb3VzIGNvbnNlcXVlbmNlcy4KCk5vdywgbGV0JiMzOTtzIGdldCBhIGhhbmRsZSBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBlbmFibGVkLiBUaW1lIHRvIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIHRoZSBLY29uZmlnIGZpbGVzLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBNSU5JWGAgd2l0aGluIHRoZSBmaWxlc3lzdGVtIHNvdXJjZSBkaXJlY3RvcnksIHBhcnRpY3VsYXJseSBpbiBgZnMvbWluaXgvS2NvbmZpZ2Agb3IgYW55dGhpbmcgc2ltaWxhcmx5IG5hbWVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBleHBvc2VkIHNvIHRoYXQgSSB1bmRlcnN0YW5kIHdoZXJlIGFuZCB3aGVuIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNSU5JWF9GUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9taW5peC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9taW5peC9LY29uZmlnOjI6Y29uZmlnIE1JTklYX0ZTXG5mcy9taW5peC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNaW5peCBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbWluaXgvS2NvbmZpZy0yMC1cbmZzL21pbml4L0tjb25maWc6MjE6Y29uZmlnIE1JTklYX0ZTX05BVElWRV9FTkRJQU5cbmZzL21pbml4L0tjb25maWctMjItXHRkZWZfYm9vbCBNSU5JWF9GU1xuLS1cbmZzL21pbml4L0tjb25maWctMjQtXG5mcy9taW5peC9LY29uZmlnOjI1OmNvbmZpZyBNSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRURcbmZzL21pbml4L0tjb25maWctMjYtXHRkZWZfYm9vbCBNSU5JWF9GU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NTcKCQkJCQkJCW91dHB1dDogMjU3CgkJCQkJCQl0aG91Z2h0czogMzc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWluaXggRlMgUGF0Y2gqKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5pdGVseSB0YXJnZXRpbmcgYE1JTklYX0ZTYC4gTXkgZm9jdXMgaGVyZSBpcyB0byBpZGVudGlmeSBrZXkgc3ltYm9scyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2gsIHRoZSBvbmVzIG1vc3QgbGlrZWx5IHRvIHlpZWxkIGludGVyZXN0aW5nIGZ1enppbmcgdGFyZ2V0cy4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkmIzM5O3ZlIGdvdCBhIHNvbGlkIGxpc3Qgb2YgcG90ZW50aWFsIGZ1bmN0aW9ucyB0byBpbmNsdWRlIGluIG15IGBGb2N1c1N5bWJvbHNgOiBgbWluaXhfZGlvX3JlYWRfaXRlcmAsIGBtaW5peF9kaW9fd3JpdGVfaXRlcmAsIGBtaW5peF9maWxlX3JlYWRfaXRlcmAsIGBtaW5peF9maWxlX3dyaXRlX2l0ZXJgLCBgbWluaXhfd3JpdGViYWNrX3JhbmdlYCwgYG1pbml4X3dyaXRlcGFnZXNgLCBgbWluaXhfcmVhZF9mb2xpb2AsIGBtaW5peF9yZWFkYWhlYWRgLCBgbWluaXhfYm1hcGAsIGBtaW5peF9pb21hcF9iZWdpbmAsIGBtaW5peF9pb21hcF9lbmRgLCBgVjFfbWluaXhfaW9tYXBfYmVnaW5gLCBhbmQgYFYyX21pbml4X2lvbWFwX2JlZ2luYC4gSSYjMzk7dmUgcXVpY2tseSBjb25maXJtZWQgdGhlIGZ1bmN0aW9uIG5hbWVzIGFnYWluc3QgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMsIGp1c3QgdG8gZW5zdXJlIGFjY3VyYWN5LgoKQmFzZWQgb24gdGhpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zIHJlcHJlc2VudCBlbnRyeSBwb2ludHMgb3IgY3JpdGljYWwgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIE1pbml4IGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24uIFRoZXkmIzM5O3JlIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBkZXRhaWxlZCBmdXp6aW5nIGFuYWx5c2lzIGJlY2F1c2UgdGhleSBhcmUgbmV3bHkgaW50cm9kdWNlZCBvciBhbHRlcmVkLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciB1bmNvdmVyaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE5vdywgSSYjMzk7bSByZWFkeSB0byBtb3ZlIGZvcndhcmQgYW5kIHNldCB0aGUgcmVzdWx0cyBhY2NvcmRpbmdseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlOSVhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaW5peF9kaW9fcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2Rpb193cml0ZV9lbmRfaW8mIzM0OywKICAgICYjMzQ7bWluaXhfZGlvX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfZmlsZV9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7bWluaXhfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfb3BlbiYjMzQ7LAogICAgJiMzNDttaW5peF93cml0ZWJhY2tfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkX2ZvbGlvJiMzNDssCiAgICAmIzM0O21pbml4X3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDttaW5peF9ibWFwJiMzNDssCiAgICAmIzM0O21pbml4X2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O21pbml4X2lvbWFwX2VuZCYjMzQ7LAogICAgJiMzNDtWMV9taW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtWMl9taW5peF9pb21hcF9iZWdpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGlvbWFwIHN1cHBvcnQgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLCByZXBsYWNpbmcgb2xkZXIgYnVmZmVyX2hlYWQtYmFzZWQgb3BlcmF0aW9ucyBmb3IgcmVndWxhciBmaWxlcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHJlYWQvd3JpdGUvbW1hcCBsb2dpYyBvZiB0aGUgbWluaXggZmlsZXN5c3RlbSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JTklYX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWluaXhfZGlvX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9kaW9fd3JpdGVfZW5kX2lvJiMzNDssCiAgICAmIzM0O21pbml4X2Rpb193cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O21pbml4X2ZpbGVfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDttaW5peF9maWxlX29wZW4mIzM0OywKICAgICYjMzQ7bWluaXhfd3JpdGViYWNrX3JhbmdlJiMzNDssCiAgICAmIzM0O21pbml4X3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bWluaXhfcmVhZF9mb2xpbyYjMzQ7LAogICAgJiMzNDttaW5peF9yZWFkYWhlYWQmIzM0OywKICAgICYjMzQ7bWluaXhfYm1hcCYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDttaW5peF9pb21hcF9lbmQmIzM0OywKICAgICYjMzQ7VjFfbWluaXhfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7VjJfbWluaXhfaW9tYXBfYmVnaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBpb21hcCBzdXBwb3J0IGZvciB0aGUgbWluaXggZmlsZXN5c3RlbSwgcmVwbGFjaW5nIG9sZGVyIGJ1ZmZlcl9oZWFkLWJhc2VkIG9wZXJhdGlvbnMgZm9yIHJlZ3VsYXIgZmlsZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSByZWFkL3dyaXRlL21tYXAgbG9naWMgb2YgdGhlIG1pbml4IGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6MTE6MjEuNTA0MDEwMzM3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MDQwMjIyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlOSVhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaW5peF9kaW9fcmVhZF9pdGVyXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfZW5kX2lvXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZmlsZV9yZWFkX2l0ZXJcIixcbiAgICBcIm1pbml4X2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZmlsZV9vcGVuXCIsXG4gICAgXCJtaW5peF93cml0ZWJhY2tfcmFuZ2VcIixcbiAgICBcIm1pbml4X3dyaXRlcGFnZXNcIixcbiAgICBcIm1pbml4X3JlYWRfZm9saW9cIixcbiAgICBcIm1pbml4X3JlYWRhaGVhZFwiLFxuICAgIFwibWluaXhfYm1hcFwiLFxuICAgIFwibWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIm1pbml4X2lvbWFwX2VuZFwiLFxuICAgIFwiVjFfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIlYyX21pbml4X2lvbWFwX2JlZ2luXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBpb21hcCBzdXBwb3J0IGZvciB0aGUgbWluaXggZmlsZXN5c3RlbSwgcmVwbGFjaW5nIG9sZGVyIGJ1ZmZlcl9oZWFkLWJhc2VkIG9wZXJhdGlvbnMgZm9yIHJlZ3VsYXIgZmlsZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSByZWFkL3dyaXRlL21tYXAgbG9naWMgb2YgdGhlIG1pbml4IGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjoxMToyMS41MDQwMTU2NTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDQ1ODE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJkZGVkOWFlMjIzZWI3OGY0ODVlMWQwM2QyMDNlYTM4OGIyNGJjYWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdW4gMjUgMjI6MTE6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jXFxuaW5kZXggODZlNTk0M2NkMmZmNzQuLjFmNDIxNzExNTQwMThkIDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L2ZpbGUuY1xcbisrKyBiL2ZzL21pbml4L2ZpbGUuY1xcbkBAIC0xNywxNyArMTcsMTYyIEBAIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuIFxcdFxcdFxcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4gfVxcbiBcXG4rc3RhdGljIHNzaXplX3QgbWluaXhfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcbitcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcXG4rXFxuK1xcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgb3BzLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG4rXFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWluaXhfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwgaW50IGVycm9yLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcdGxvZmZfdCBwb3MgPSBpb2NiLVxcdTAwM2VraV9wb3M7XFxuK1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdHBvcyArPSBzaXplO1xcbitcXHRpZiAoc2l6ZSBcXHUwMDI2XFx1MDAyNiBwb3MgXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcXG4rXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBwb3MpO1xcbitcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIG1pbml4X2Rpb193cml0ZV9vcHMgPSB7XFxuK1xcdC5lbmRfaW8gPSBtaW5peF9kaW9fd3JpdGVfZW5kX2lvLFxcbit9O1xcbitcXG4rc3RhdGljIHNzaXplX3QgbWluaXhfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcdHVuc2lnbmVkIGludCBmbGFncyA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYmxvY2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbitcXG4rXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuK1xcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK1xcdHJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbitcXHRpZiAoaW9jYi1cXHUwMDNla2lfcG9zICsgaW92X2l0ZXJfY291bnQoZnJvbSkgXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkgfHxcXG4rXFx0XFx0IUlTX0FMSUdORUQoaW9jYi1cXHUwMDNla2lfcG9zIHwgaW92X2l0ZXJfYWxpZ25tZW50KGZyb20pLCBibG9ja3NpemUpKVxcbitcXHRcXHRmbGFncyB8PSBJT01BUF9ESU9fRk9SQ0VfV0FJVDtcXG4rXFxuK1xcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIoaW5vZGUpO1xcbitcXG4rXFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sIG9wcyxcXG4rXFx0XFx0XFx1MDAyNm1pbml4X2Rpb193cml0ZV9vcHMsIGZsYWdzLCBOVUxMLCAwKTtcXG4rXFx0aWYgKHJldCA9PSAtRU5PVEJMSylcXG4rXFx0XFx0cmV0ID0gMDsgLyogZmFsbGJhY2sgdG8gYnVmZmVyZWQgKi9cXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBpb3ZfaXRlcl9jb3VudChmcm9tKSkge1xcbitcXHRcXHRsb2ZmX3QgcG9zO1xcbitcXHRcXHRsb2ZmX3QgZW5kYnl0ZTtcXG4rXFx0XFx0c3NpemVfdCBzdGF0dXM7XFxuK1xcbitcXHRcXHRpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XFxuK1xcdFxcdHBvcyA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4rXFx0XFx0c3RhdHVzID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLCBvcHMsXFxuK1xcdFxcdFxcdE5VTEwsIE5VTEwpO1xcbitcXHRcXHRpZiAodW5saWtlbHkoc3RhdHVzIFxcdTAwM2MgMCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gc3RhdHVzO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldCArPSBzdGF0dXM7XFxuK1xcdFxcdGVuZGJ5dGUgPSBwb3MgKyBzdGF0dXMgLSAxO1xcbitcXHRcXHRzdGF0dXMgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIHBvcywgZW5kYnl0ZSk7XFxuK1xcdFxcdGlmICghc3RhdHVzKSB7XFxuK1xcdFxcdFxcdGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLFxcbitcXHRcXHRcXHRcXHRwb3MgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4rXFx0XFx0XFx0XFx0ZW5kYnl0ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdFxcdHJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXQgPSBzdGF0dXM7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rb3V0X3VubG9jazpcXG4rXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgbWluaXhfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbit7XFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKVxcbitcXHRcXHRyZXR1cm4gbWluaXhfZGlvX3JlYWRfaXRlcihpb2NiLCB0byk7XFxuK1xcbitcXHRyZXR1cm4gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7XFxuK31cXG4rXFxuK3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0O1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdC8qIG1pbml4X2Rpb193cml0ZV9pdGVyIGFsc28gbG9ja3MgdGhlIGlub2RlIGFuZCBhcHBlYXJzIHRvIGRvIHRoZSBzYW1lXFxuK1xcdCAqIGdlbmVyYWwgc29ydHMgb2YgY2hlY2tzIGFzIHRoaXMsIHNvIGp1c3QgcmV0dXJuIGRpcmVjdGx5IGZyb20gdGhlcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RJUkVDVClcXG4rXFx0XFx0cmV0dXJuIG1pbml4X2Rpb193cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbitcXG4rXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuK1xcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcXG4rXFxuK1xcdHJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLFxcbitcXHRcXHRcXHROVUxMLCBOVUxMKTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTtcXG4rXFxuK3VubG9jazpcXG4rXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtaW5peF9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuK3tcXG4rXFx0ZmlscC1cXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xcbitcXHRyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbHApO1xcbit9XFxuK1xcbiAvKlxcbi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yXFxuLSAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLlxcbisgKiBXZSBzdGlsbCBoYXZlIHNvbWUgTlVMTHMgaGVyZSwgYnV0IG5vdCBhcyBtYW55IG9mIHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZVxcbisgKiBzdGlsbCBPSyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0uXFxuICAqL1xcbitcXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuLVxcdC5yZWFkX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuLVxcdC53cml0ZV9pdGVyXFx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcXG4rXFx0LnJlYWRfaXRlclxcdD0gbWluaXhfZmlsZV9yZWFkX2l0ZXIsXFxuK1xcdC53cml0ZV9pdGVyXFx0PSBtaW5peF9maWxlX3dyaXRlX2l0ZXIsXFxuIFxcdC5tbWFwX3ByZXBhcmVcXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXFxuK1xcdC5vcGVuXFx0XFx0PSBtaW5peF9maWxlX29wZW4sXFxuIFxcdC5mc3luY1xcdFxcdD0gbWluaXhfZnN5bmMsXFxuIFxcdC5zcGxpY2VfcmVhZFxcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcXG4rXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmNcXG5pbmRleCBjMzBjYzU5MDY5OGQ2Zi4uY2QxMmU1OWNlOWI5ZDIgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xcbisrKyBiL2ZzL21pbml4L2lub2RlLmNcXG5AQCAtNDM2LDYgKzQzNiwzMSBAQCBzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgc3NpemVfdCBtaW5peF93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXFxuK3tcXG4rXFx0aW50IGVycm9yO1xcbitcXG4rXFx0aWYgKHBvcyBcXHUwMDNjIHdwYy1cXHUwMDNlaW9tYXAub2Zmc2V0IHx8XFxuK1xcdFxcdFxcdHBvcyBcXHUwMDNlPSB3cGMtXFx1MDAzZWlvbWFwLm9mZnNldCArIHdwYy1cXHUwMDNlaW9tYXAubGVuZ3RoKSB7XFxuK1xcdFxcdGlmIChJTk9ERV9WRVJTSU9OKHdwYy1cXHUwMDNlaW5vZGUpID09IE1JTklYX1YxKVxcbitcXHRcXHRcXHRlcnJvciA9IFYxX21pbml4X2lvbWFwX2JlZ2luKHdwYy1cXHUwMDNlaW5vZGUsIHBvcywgbGVuLCAwLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgTlVMTCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0ZXJyb3IgPSBWMl9taW5peF9pb21hcF9iZWdpbih3cGMtXFx1MDAzZWlub2RlLCBwb3MsIGxlbiwgMCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNndwYy1cXHUwMDNlaW9tYXAsIE5VTEwpO1xcbitcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBwb3MsIGVuZF9wb3MsIGxlbik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBtaW5peF93cml0ZWJhY2tfb3BzID0ge1xcbitcXHQud3JpdGViYWNrX3JhbmdlID0gbWluaXhfd3JpdGViYWNrX3JhbmdlLFxcbitcXHQud3JpdGViYWNrX3N1Ym1pdCA9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsXFxuK307XFxuK1xcbiBzdGF0aWMgaW50IG1pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jayxcXG4gXFx0XFx0ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbiB7XFxuQEAgLTQ0NSwxNyArNDcwLDQ1IEBAIHN0YXRpYyBpbnQgbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxcbiBcXHRcXHRyZXR1cm4gVjJfbWluaXhfZ2V0X2Jsb2NrKGlub2RlLCBibG9jaywgYmhfcmVzdWx0LCBjcmVhdGUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG1pbml4X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuKy8qIFRoZSBvbGQgbWluaXhfd3JpdGVwYWdlcywgcHJlc2VydmVkIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gKi9cXG4rc3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4ge1xcbiBcXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4rXFx0XFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuK3tcXG4rXFx0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xcbitcXHRcXHQuaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0LFxcbitcXHRcXHQud2JjID0gd2JjLFxcbitcXHRcXHQub3BzID0gXFx1MDAyNm1pbml4X3dyaXRlYmFja19vcHMsXFxuK1xcdH07XFxuK1xcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFxcdTAwMjZ3cGMpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1pbml4X3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihmaWxlLVxcdTAwM2VmX2lub2RlKTtcXG4rXFxuK1xcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBvcHMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogVGhlIG9sZCBtaW5peF9yZWFkX2ZvbGlvLCBwcmVzZXJ2ZWQgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zLiAqL1xcbitzdGF0aWMgaW50IG1pbml4X2Jsb2NrX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgbWluaXhfZ2V0X2Jsb2NrKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbWluaXhfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyA9IG1pbml4X2lvbWFwX29wc192ZXIocmFjLVxcdTAwM2VmaWxlLVxcdTAwM2VmX2lub2RlKTtcXG4rXFxuK1xcdGlvbWFwX2Jpb19yZWFkYWhlYWQocmFjLCBvcHMpO1xcbit9XFxuK1xcbiBpbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pXFxuIHtcXG4gXFx0cmV0dXJuIF9fYmxvY2tfd3JpdGVfYmVnaW4oZm9saW8sIHBvcywgbGVuLCBtaW5peF9nZXRfYmxvY2spO1xcbkBAIC00ODcsMTkgKzU0MCwzNiBAQCBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFxuIHN0YXRpYyBzZWN0b3JfdCBtaW5peF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcXG4ge1xcbi1cXHRyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsYmxvY2ssbWluaXhfZ2V0X2Jsb2NrKTtcXG4rXFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihtYXBwaW5nLVxcdTAwM2Vob3N0KTtcXG4rXFxuK1xcdHJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCBvcHMpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzID0ge1xcbi1cXHQuZGlydHlfZm9saW9cXHQ9IGJsb2NrX2RpcnR5X2ZvbGlvLFxcbi1cXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXFxuK1xcdC5kaXJ0eV9mb2xpb1xcdD0gaW9tYXBfZGlydHlfZm9saW8sXFxuK1xcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcXG4gXFx0LnJlYWRfZm9saW8gPSBtaW5peF9yZWFkX2ZvbGlvLFxcbitcXHQucmVhZGFoZWFkID0gbWluaXhfcmVhZGFoZWFkLFxcbiBcXHQud3JpdGVwYWdlcyA9IG1pbml4X3dyaXRlcGFnZXMsXFxuK1xcdC5taWdyYXRlX2ZvbGlvID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLFxcbitcXHQuYm1hcCA9IG1pbml4X2JtYXAsXFxuK1xcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsXFxuK1xcdC5yZWxlYXNlX2ZvbGlvID0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcXG4rXFx0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxcbit9O1xcbitcXG4rLyogQSBzcGVjaWFsIGFvcHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQga2VlcHMgdXNpbmcgdGhlIGJ1ZmZlciBoZWFkIGNodW5rcywgYXRcXG4rICogbGVhc3QgZm9yIHRoZSB0aW1lIGJlaW5nLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfZGlyX2FvcHMgPSB7XFxuK1xcdC5kaXJ0eV9mb2xpbyA9IGJsb2NrX2RpcnR5X2ZvbGlvLFxcbitcXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXFxuK1xcdC5yZWFkX2ZvbGlvID0gbWluaXhfYmxvY2tfcmVhZF9mb2xpbyxcXG4gXFx0LndyaXRlX2JlZ2luID0gbWluaXhfd3JpdGVfYmVnaW4sXFxuIFxcdC53cml0ZV9lbmQgPSBnZW5lcmljX3dyaXRlX2VuZCxcXG4gXFx0Lm1pZ3JhdGVfZm9saW8gPSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcXG4gXFx0LmJtYXAgPSBtaW5peF9ibWFwLFxcbi1cXHQuZGlyZWN0X0lPID0gbm9vcF9kaXJlY3RfSU9cXG4rXFx0LndyaXRlcGFnZXMgPSBtaW5peF9ibG9ja193cml0ZXBhZ2VzLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5AQCAtNTE2LDcgKzU4Niw3IEBAIHZvaWQgbWluaXhfc2V0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGRldl90IHJkZXYpXFxuIFxcdH0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbiBcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfZm9wID0gXFx1MDAyNm1pbml4X2Rpcl9vcGVyYXRpb25zO1xcbi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZtaW5peF9hb3BzO1xcbitcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZtaW5peF9kaXJfYW9wcztcXG4gXFx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuIFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNm1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcXG4gXFx0XFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG5AQCAtNzY4LDQgKzgzOCwzIEBAIG1vZHVsZV9pbml0KGluaXRfbWluaXhfZnMpXFxuIG1vZHVsZV9leGl0KGV4aXRfbWluaXhfZnMpXFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiTWluaXggZmlsZSBzeXN0ZW1cXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbi1cXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW9tYXAuYyBiL2ZzL21pbml4L2lvbWFwLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43YmIwNDM5ZTM2Njk5Nlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9mcy9taW5peC9pb21hcC5jXFxuQEAgLTAsMCArMSwxMTQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBpb21hcCBmdW5jdGlvbnMgZm9yIG1pbml4LiBBdCBsZWFzdCB0aGUgZmlyc3QgcGFzcyBvZiB0aGlzIGZpbGUgd2FzIHRha2VuXFxuKyAqIGZyb20gdGhlIHhpYWZzIGlvbWFwLmMsIHdoaWNoIGlzIGZpdHRpbmcgc2luY2UgdGhlIHhpYWZzIG1vZHVsZSBpbiB0dXJuXFxuKyAqIGJvcnJvd2VkIGhlYXZpbHkgZnJvbSB0aGUgbW9kZXJuaXplZCBtaW5peCBmcyBrZXJuZWwgbW9kdWxlLlxcbisgKi9cXG4rXFxuKy8qXFxuKyAqIG1pbml4X2lvbWFwX2JlZ2luIC0gbWFwIGEgZmlsZSByYW5nZSB0byBkaXNrIGJsb2Nrcy4gSXQgYWN0cyBhcyBhIHJlcGxhY2VtZW50XFxuKyAqIGZvciBnZXRfYmxvY2sgaW4gaXRyZWVfY29tbW9uLmMsIGF0IGxlYXN0IGluIHRoZSBpbXBvcnRhbnQgd2F5cywgYW5kIGlzXFxuKyAqIGFkYXB0ZWQgZnJvbSBpdCwgYnV0IGl0IHVzZXMgaW9tYXAgaW5zdGVhZCBvZiBidWZmZXJfaGVhZC4gVGhpcyBpcyB0YWtlblxcbisgKiBkaXJlY3RseSBmcm9tIHRoZSBvdXQtb2YtdHJlZSB4aWFmcyBpb21hcCBjaGFuZ2VzLCBhbmQgdGhlIGV4ZmF0IGlvbWFwXFxuKyAqIGNoYW5nZXMgd2VyZSBhbiBpbnNwaXJhdGlvbiBmb3IgdGhhdC5cXG4rICovXFxuK3N0YXRpYyBpbnQgbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcXG4rXFx0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcXG4re1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuK1xcdHVuc2lnbmVkIGludCBibGtiaXRzID0gc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XFxuK1xcdHNlY3Rvcl90IGlibG9jayA9IG9mZnNldCBcXHUwMDNlXFx1MDAzZSBibGtiaXRzO1xcbitcXHRpbnQgY3JlYXRlID0gZmxhZ3MgXFx1MDAyNiBJT01BUF9XUklURTtcXG4rXFxuK1xcdC8qIE1vc3RseSB0YWtlbiBmcm9tIG1vZGVybi14aWFmcyBpdHJlZS5jIGdldF9ibG9jayB3aXRoIGVsZW1lbnRzIGZyb21cXG4rXFx0ICogc2ltaWxhciBleGZhdCBvcGVyYXRpb25zLlxcbitcXHQgKi9cXG4rXFx0aW50IG9mZnNldHNbREVQVEhdO1xcbitcXHRJbmRpcmVjdCBjaGFpbltERVBUSF07XFxuK1xcdEluZGlyZWN0ICpwYXJ0aWFsO1xcbitcXHRpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpO1xcbitcXHRpbnQgbGVmdDtcXG4rXFx0aW50IGVyciA9IC1FSU87XFxuK1xcbitcXHRzZWN0b3JfdCBwaHlzO1xcbitcXG4rXFx0LyogYmxvY2sgaXMgYmV5b25kIG1heCBmaWxlIHNpemUgKi9cXG4rXFx0aWYgKGRlcHRoID09IDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aW9tYXAtXFx1MDAzZWJkZXYgPSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19iZGV2O1xcbitcXG4rcmVyZWFkOlxcbitcXHRwYXJ0aWFsID0gZ2V0X2JyYW5jaChpbm9kZSwgZGVwdGgsIG9mZnNldHMsIGNoYWluLCBcXHUwMDI2ZXJyKTtcXG4rXFxuK1xcdC8qIFNpbXBsZXN0IGNhc2UgLSBibG9jayBmb3VuZCwgbm8gYWxsb2NhdGlvbiBuZWVkZWQgKi9cXG4rXFx0aWYgKCFwYXJ0aWFsKSB7XFxuK1xcdFxcdC8qIEJpdCBvZiBhIHdlaXJkIG9yZGVyLCBidXQgaXQnbGwgbWFrZSBzZW5zZSB3aGVuIHlvdSBnZXQgdG9cXG4rXFx0XFx0ICogdGhlIGJvdHRvbS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlvbWFwLVxcdTAwM2VmbGFncyA9IElPTUFQX0ZfTUVSR0VEO1xcbitnb3RfaXQ6XFxuK1xcdFxcdHBoeXMgPSBibG9ja190b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpO1xcbitcXHRcXHRwYXJ0aWFsID0gY2hhaW4rZGVwdGgtMTtcXG4rXFx0XFx0LyogU2V0IHVwIHRoZSBpb21hcCBzdHJ1Y3QgYmVmb3JlIGNsZWFuaW5nIHVwICovXFxuK1xcdFxcdGlvbWFwLVxcdTAwM2V0eXBlID0gSU9NQVBfTUFQUEVEO1xcbitcXHRcXHRpb21hcC1cXHUwMDNlYWRkciA9ICh1NjQpcGh5cyBcXHUwMDNjXFx1MDAzYyBibGtiaXRzO1xcbitcXHRcXHRpb21hcC1cXHUwMDNlbGVuZ3RoID0gMSBcXHUwMDNjXFx1MDAzYyBibGtiaXRzO1xcbitcXHRcXHRpb21hcC1cXHUwMDNlb2Zmc2V0ID0gKHU2NClpYmxvY2sgXFx1MDAzY1xcdTAwM2MgYmxrYml0cztcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBOZXh0IHNpbXBsZSBjYXNlIC0gcGxhaW4gbG9va3VwIG9yIGZhaWxlZCByZWFkIG9mIGluZGlyZWN0IGJsb2NrICovXFxuK1xcdGlmICghY3JlYXRlIHx8IGVyciA9PSAtRUlPKSB7XFxuK1xcdFxcdGlvbWFwLVxcdTAwM2V0eXBlID0gSU9NQVBfSE9MRTtcXG4rXFx0XFx0aW9tYXAtXFx1MDAzZWFkZHIgPSBJT01BUF9OVUxMX0FERFI7XFxuK1xcdFxcdGlvbWFwLVxcdTAwM2VsZW5ndGggPSAxIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHM7XFxuK1xcdFxcdGlvbWFwLVxcdTAwM2VvZmZzZXQgPSAodTY0KWlibG9jayBcXHUwMDNjXFx1MDAzYyBibGtiaXRzO1xcbitcXHRcXHRpb21hcC1cXHUwMDNlZmxhZ3MgPSAwO1xcbitjbGVhbnVwOlxcbitcXHRcXHR3aGlsZSAocGFydGlhbCBcXHUwMDNlIGNoYWluKSB7XFxuK1xcdFxcdFxcdGJyZWxzZShwYXJ0aWFsLVxcdTAwM2ViaCk7XFxuK1xcdFxcdFxcdHBhcnRpYWwtLTtcXG4rXFx0XFx0fVxcbitvdXQ6XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEluZGlyZWN0IGJsb2NrIG1pZ2h0IGJlIHJlbW92ZWQgYnkgdHJ1bmNhdGUgd2hpbGUgd2Ugd2VyZVxcbitcXHQgKiByZWFkaW5nIGl0LiBIYW5kbGluZyBvZiB0aGF0IGNhc2UgKGZvcmdldCB3aGF0IHdlJ3ZlIGdvdCBhbmRcXG4rXFx0ICogcmVyZWFkKSBpcyB0YWtlbiBvdXQgb2YgdGhlIG1haW4gcGF0aC5cXG4rXFx0ICovXFxuK1xcdGlmIChlcnIgPT0gLUVBR0FJTilcXG4rXFx0XFx0Z290byBjaGFuZ2VkO1xcbitcXG4rXFx0bGVmdCA9IChjaGFpbiArIGRlcHRoKSAtIHBhcnRpYWw7XFxuK1xcdGVyciA9IGFsbG9jX2JyYW5jaChpbm9kZSwgbGVmdCwgb2Zmc2V0cyArIChwYXJ0aWFsIC0gY2hhaW4pLCBwYXJ0aWFsKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0aWYgKHNwbGljZV9icmFuY2goaW5vZGUsIGNoYWluLCBwYXJ0aWFsLCBsZWZ0KSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gY2hhbmdlZDtcXG4rXFxuK1xcdC8qIFN1Y2Nlc3NmdWwgYWxsb2NhdGlvbiwgbWFwcGluZyBpdC4gKi9cXG4rXFx0aW9tYXAtXFx1MDAzZWZsYWdzID0gSU9NQVBfRl9ORVc7XFxuK1xcdGdvdG8gZ290X2l0O1xcbitcXG4rY2hhbmdlZDpcXG4rXFx0d2hpbGUgKHBhcnRpYWwgXFx1MDAzZSBjaGFpbikge1xcbitcXHRcXHRicmVsc2UocGFydGlhbC1cXHUwMDNlYmgpO1xcbitcXHRcXHRwYXJ0aWFsLS07XFxuK1xcdH1cXG4rXFx0Z290byByZXJlYWQ7XFxuK31cXG4rXFxuKy8qXFxuKyAqIG1pbml4X2lvbWFwX2VuZCBlbmRzIHVwIGJlaW5nIGEgbm9wOyBzaW5jZSBtaW5peCBkb2Vzbid0IGhhdmUgYW55IGV4dGVudHMgb3JcXG4rICogdHJhbnNhY3Rpb25zIHRvIHdvcnJ5IGFib3V0LCB0aGVyZSBpc24ndCBhbnl0aGluZyB0byB1cGRhdGUgaGVyZS4gVGhlIG9uLWRpc2tcXG4rICogaW5kaXJlY3QgYmxvY2tzIGdldCBkaXJ0aWVkIGluIG1pbml4X2lvbWFwX2JlZ2luLlxcbisgKi9cXG4rc3RhdGljIGludCBtaW5peF9pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcXG4rXFx0c3NpemVfdCB3cml0dGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjEuYyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcXG5pbmRleCAxZmVkOTA2MDQyYWE4NC4uNThjMjlmNDQ0M2QzNzIgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuY1xcbisrKyBiL2ZzL21pbml4L2l0cmVlX3YxLmNcXG5AQCAtNDksNiArNDksMTggQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXFxuIH1cXG4gXFxuICNpbmNsdWRlIFxcXCJpdHJlZV9jb21tb24uY1xcXCJcXG4rLyogTk9UQSBCRU5FOlxcbisgKlxcbisgKiBUaGlzIGlzIGlja3kgdG8gbWUsIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIGhhdmluZyBpdCBiZSBhIHN0YW5kYWxvbmUgQyBmaWxlXFxuKyAqIHRoYXQncyBjb21waWxlZCB0byBvYmplY3QgZm9ybSBhbmQgbGlua2VkIHNlcGFyYXRlbHkgbGlrZSBpdCBpcyBpbiB4aWFmcyBpc1xcbisgKiBtdWNoIG5hc3RpZXIgaW4gbWluaXggYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBtaW5peCBmcyB0aGF0XFxuKyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJ3RcXG4rICogbGlrZSBpdCwgYnV0IHNpbmNlIG1pbml4IGFscmVhZHkgaGFzIHRoaXMgcGF0dGVybiB3aGVyZSBhIGNvbW1vbiBpdHJlZSBmaWxlXFxuKyAqIGlzIGluY2x1ZGVkIGluIHRoZSBpdHJlZV92MSBhbmQgaXRyZWVfdjIoYW5kIHYzKSBmaWxlcywgSSdtIGluY2x1ZGluZyBpb21hcC5jXFxuKyAqIGluIHRoZXNlIGZpbGVzIGFzIHdlbGwuIEl0IGRvZXMgYXQgbGVhc3QgYXZvaWQgZXhwb3J0aW5nIHNvbWUgY3VycmVudGx5XFxuKyAqIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgbmVlZGVkIGFueXdoZXJlIGJ1dCBpdHJlZV9jb21tb24uYyBhbmQgaW9tYXAuYy5cXG4rICovXFxuKyNpbmNsdWRlIFxcXCJpb21hcC5jXFxcIlxcbiBcXG4gaW50IFYxX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jayxcXG4gXFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXFxuQEAgLTYxLDcgKzczLDE4IEBAIHZvaWQgVjFfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuIFxcdHRydW5jYXRlKGlub2RlKTtcXG4gfVxcbiBcXG4tdW5zaWduZWQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbit1bnNpZ25lZCBpbnQgVjFfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiB7XFxuIFxcdHJldHVybiBuYmxvY2tzKHNpemUsIHNiKTtcXG4gfVxcbitcXG4raW50IFYxX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuK1xcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXFxuK3tcXG4rXFx0cmV0dXJuIG1pbml4X2lvbWFwX2JlZ2luKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXApO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcyA9IHtcXG4rXFx0LmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sXFxuK1xcdC5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjIuYyBiL2ZzL21pbml4L2l0cmVlX3YyLmNcXG5pbmRleCA5ZDAwZjMxYTJkOWQxNS4uZmM3YTVhZThmYTFjYTMgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjIuY1xcbisrKyBiL2ZzL21pbml4L2l0cmVlX3YyLmNcXG5AQCAtNTcsNiArNTcsMTAgQEAgc3RhdGljIGludCBibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLCBpbnQgb2Zmc2V0c1tERVBUSF0pXFxuIH1cXG4gXFxuICNpbmNsdWRlIFxcXCJpdHJlZV9jb21tb24uY1xcXCJcXG4rLyogU2VlIHRoZSBub3RlIGluIGl0cmVlX3YxIGluIGEgY29tbWVudCB0aGF0IHN0YXJ0cyBcXFwiTk9UQSBCRU5FXFxcIiBmb3IgYW5cXG4rICogZXhwbGFuYXRpb24gZm9yIHdoeSBpb21hcC5jIGlzIGluY2x1ZGVkIGhlcmUuXFxuKyAqL1xcbisjaW5jbHVkZSBcXFwiaW9tYXAuY1xcXCJcXG4gXFxuIGludCBWMl9taW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssXFxuIFxcdFxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbkBAIC02OSw3ICs3MywxOCBAQCB2b2lkIFYyX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiBcXHR0cnVuY2F0ZShpbm9kZSk7XFxuIH1cXG4gXFxuLXVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4rdW5zaWduZWQgaW50IFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbiBcXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XFxuIH1cXG4rXFxuK2ludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxcbitcXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxcbit7XFxuK1xcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHMgPSB7XFxuK1xcdC5pb21hcF9iZWdpbiA9IFYyX21pbml4X2lvbWFwX2JlZ2luLFxcbitcXHQuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsXFxuK307XFxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L21pbml4LmggYi9mcy9taW5peC9taW5peC5oXFxuaW5kZXggZjIwMjVjOWI1ODI1MmYuLmZhY2U3NDEwMDM0NjAyIDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L21pbml4LmhcXG4rKysgYi9mcy9taW5peC9taW5peC5oXFxuQEAgLTUsNiArNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWluaXhfZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbWFwLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIElOT0RFX1ZFUlNJT04oaW5vZGUpXFx0bWluaXhfc2IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX3ZlcnNpb25cXG4gI2RlZmluZSBNSU5JWF9WMVxcdFxcdDB4MDAwMVxcdFxcdC8qIG9yaWdpbmFsIG1pbml4IGZzICovXFxuQEAgLTU2LDcgKzU3LDcgQEAgaW50IG1pbml4X25ld19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gdm9pZCBtaW5peF9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxvY2spO1xcbiB1bnNpZ25lZCBsb25nIG1pbml4X2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosXFxuLVxcdFxcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkIGludCk7XFxuK1xcdFxcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkKTtcXG4gaW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKTtcXG4gc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptaW5peF9nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBpbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTtcXG5AQCAtODAsMTAgKzgxLDE5IEBAIGludCBtaW5peF9zZXRfbGluayhzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICpkZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gc3RydWN0IG1pbml4X2Rpcl9lbnRyeSAqbWluaXhfZG90ZG90KHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmb2xpbyAqKik7XFxuIGlub190IG1pbml4X2lub2RlX2J5X25hbWUoc3RydWN0IGRlbnRyeSopO1xcbiBcXG4rZXh0ZXJuIGludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbitcXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXFxuK1xcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcXG4rZXh0ZXJuIGludCBWMl9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbitcXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXFxuK1xcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcXG4rXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX2lub2RlX29wZXJhdGlvbnM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfb3BlcmF0aW9ucztcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjFfbWluaXhfaW9tYXBfb3BzO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHM7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9zYl9pbmZvICptaW5peF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiB7XFxuQEAgLTk1LDExICsxMDUsMTcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbyAqbWluaXhfaShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSlcXG4ge1xcbiBcXHRyZXR1cm4gRElWX1JPVU5EX1VQKGJpdHMsIGJsb2Nrc2l6ZSAqIDgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm1pbml4X2lvbWFwX29wc192ZXIoc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRyZXR1cm4gKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKSA/XFxuK1xcdFxcdFxcdTAwMjZWMV9taW5peF9pb21hcF9vcHMgOiBcXHUwMDI2VjJfbWluaXhfaW9tYXBfb3BzO1xcbit9XFxuK1xcbiAjaWYgZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfTkFUSVZFX0VORElBTikgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiBcXHRkZWZpbmVkKENPTkZJR19NSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRUQpXFxuIFxcbkBAIC0xMjksNyArMTQ1LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcXG4gICogYmlnLWVuZGlhbiAxNmJpdCBpbmRleGVkIGJpdG1hcHNcXG4gICovXFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBzaXplKVxcbitzdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4ge1xcbiBcXHRjb25zdCB1bnNpZ25lZCBzaG9ydCAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyO1xcbiBcXHR1bnNpZ25lZCBzaG9ydCBudW07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjExOjIyLjAwOTI1MTg4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUxOTg3NjYyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlOSVhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaW5peF9kaW9fcmVhZF9pdGVyXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfZW5kX2lvXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZmlsZV9yZWFkX2l0ZXJcIixcbiAgICBcIm1pbml4X2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZmlsZV9vcGVuXCIsXG4gICAgXCJtaW5peF93cml0ZWJhY2tfcmFuZ2VcIixcbiAgICBcIm1pbml4X3dyaXRlcGFnZXNcIixcbiAgICBcIm1pbml4X3JlYWRfZm9saW9cIixcbiAgICBcIm1pbml4X3JlYWRhaGVhZFwiLFxuICAgIFwibWluaXhfYm1hcFwiLFxuICAgIFwibWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIm1pbml4X2lvbWFwX2VuZFwiLFxuICAgIFwiVjFfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIlYyX21pbml4X2lvbWFwX2JlZ2luXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBpb21hcCBzdXBwb3J0IGZvciB0aGUgbWluaXggZmlsZXN5c3RlbSwgcmVwbGFjaW5nIG9sZGVyIGJ1ZmZlcl9oZWFkLWJhc2VkIG9wZXJhdGlvbnMgZm9yIHJlZ3VsYXIgZmlsZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSByZWFkL3dyaXRlL21tYXAgbG9naWMgb2YgdGhlIG1pbml4IGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJkZGVkOWFlMjIzZWI3OGY0ODVlMWQwM2QyMDNlYTM4OGIyNGJjYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAyMjoxMToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggODZlNTk0M2NkMmZmNzQuLjFmNDIxNzExNTQwMThkIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXG4rKysgYi9mcy9taW5peC9maWxlLmNcbkBAIC0xNywxNyArMTcsMTYyIEBAIGludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4gXHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuIH1cbiBcbitzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbitcbitcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCB0bywgb3BzLCBOVUxMLCAwLCBOVUxMLCAwKTtcbitcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBtaW5peF9kaW9fd3JpdGVfZW5kX2lvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3NpemVfdCBzaXplLCBpbnQgZXJyb3IsXG4rXHRcdHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0bG9mZl90IHBvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuK1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRwb3MgKz0gc2l6ZTtcbitcdGlmIChzaXplIFx1MDAyNlx1MDAyNiBwb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuK1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIHBvcyk7XG4rXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBtaW5peF9kaW9fd3JpdGVfb3BzID0ge1xuK1x0LmVuZF9pbyA9IG1pbml4X2Rpb193cml0ZV9lbmRfaW8sXG4rfTtcbitcbitzdGF0aWMgc3NpemVfdCBtaW5peF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1x0c3NpemVfdCByZXQ7XG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBibG9ja3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1xuK1x0aW5vZGVfbG9jayhpbm9kZSk7XG4rXHRyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXG4rXHRyZXQgPSBraW9jYl9tb2RpZmllZChpb2NiKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcbitcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyArIGlvdl9pdGVyX2NvdW50KGZyb20pIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkgfHxcbitcdFx0IUlTX0FMSUdORUQoaW9jYi1cdTAwM2VraV9wb3MgfCBpb3ZfaXRlcl9hbGlnbm1lbnQoZnJvbSksIGJsb2Nrc2l6ZSkpXG4rXHRcdGZsYWdzIHw9IElPTUFQX0RJT19GT1JDRV9XQUlUO1xuK1xuK1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3Zlcihpbm9kZSk7XG4rXG4rXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwgb3BzLFxuK1x0XHRcdTAwMjZtaW5peF9kaW9fd3JpdGVfb3BzLCBmbGFncywgTlVMTCwgMCk7XG4rXHRpZiAocmV0ID09IC1FTk9UQkxLKVxuK1x0XHRyZXQgPSAwOyAvKiBmYWxsYmFjayB0byBidWZmZXJlZCAqL1xuK1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4rXHRcdGxvZmZfdCBwb3M7XG4rXHRcdGxvZmZfdCBlbmRieXRlO1xuK1x0XHRzc2l6ZV90IHN0YXR1cztcbitcbitcdFx0aW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjY9IH5JT0NCX0RJUkVDVDtcbitcdFx0cG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4rXHRcdHN0YXR1cyA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLFxuK1x0XHRcdE5VTEwsIE5VTEwpO1xuK1x0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAzYyAwKSkge1xuK1x0XHRcdHJldCA9IHN0YXR1cztcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0cmV0ICs9IHN0YXR1cztcbitcdFx0ZW5kYnl0ZSA9IHBvcyArIHN0YXR1cyAtIDE7XG4rXHRcdHN0YXR1cyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MsIGVuZGJ5dGUpO1xuK1x0XHRpZiAoIXN0YXR1cykge1xuK1x0XHRcdGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpbm9kZS1cdTAwM2VpX21hcHBpbmcsXG4rXHRcdFx0XHRwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4rXHRcdFx0XHRlbmRieXRlIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gc3RhdHVzO1xuK1x0XHR9XG4rXHR9XG4rXG4rb3V0X3VubG9jazpcbitcdGlub2RlX3VubG9jayhpbm9kZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgc3NpemVfdCBtaW5peF9maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4re1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuK1x0XHRyZXR1cm4gbWluaXhfZGlvX3JlYWRfaXRlcihpb2NiLCB0byk7XG4rXG4rXHRyZXR1cm4gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IG1pbml4X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHQvKiBtaW5peF9kaW9fd3JpdGVfaXRlciBhbHNvIGxvY2tzIHRoZSBpbm9kZSBhbmQgYXBwZWFycyB0byBkbyB0aGUgc2FtZVxuK1x0ICogZ2VuZXJhbCBzb3J0cyBvZiBjaGVja3MgYXMgdGhpcywgc28ganVzdCByZXR1cm4gZGlyZWN0bHkgZnJvbSB0aGVyZS5cbitcdCAqL1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuK1x0XHRyZXR1cm4gbWluaXhfZGlvX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XG4rXG4rXHRpbm9kZV9sb2NrKGlub2RlKTtcbitcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGlub2RlKTtcbitcbitcdHJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwgb3BzLFxuK1x0XHRcdE5VTEwsIE5VTEwpO1xuK1xuK1x0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4rXG4rdW5sb2NrOlxuK1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbWluaXhfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuK3tcbitcdGZpbHAtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xuK1x0cmV0dXJuIGdlbmVyaWNfZmlsZV9vcGVuKGlub2RlLCBmaWxwKTtcbit9XG4rXG4gLypcbi0gKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yXG4tICogdGhlIG1pbml4IGZpbGVzeXN0ZW0uXG4rICogV2Ugc3RpbGwgaGF2ZSBzb21lIE5VTExzIGhlcmUsIGJ1dCBub3QgYXMgbWFueSBvZiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmVcbisgKiBzdGlsbCBPSyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0uXG4gICovXG4rXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi1cdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbi1cdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuK1x0LnJlYWRfaXRlclx0PSBtaW5peF9maWxlX3JlYWRfaXRlcixcbitcdC53cml0ZV9pdGVyXHQ9IG1pbml4X2ZpbGVfd3JpdGVfaXRlcixcbiBcdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbitcdC5vcGVuXHRcdD0gbWluaXhfZmlsZV9vcGVuLFxuIFx0LmZzeW5jXHRcdD0gbWluaXhfZnN5bmMsXG4gXHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbitcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbWluaXhfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xuaW5kZXggYzMwY2M1OTA2OThkNmYuLmNkMTJlNTljZTliOWQyIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xuKysrIGIvZnMvbWluaXgvaW5vZGUuY1xuQEAgLTQzNiw2ICs0MzYsMzEgQEAgc3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IG1pbml4X3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuK1x0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IHBvcywgdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXG4re1xuK1x0aW50IGVycm9yO1xuK1xuK1x0aWYgKHBvcyBcdTAwM2Mgd3BjLVx1MDAzZWlvbWFwLm9mZnNldCB8fFxuK1x0XHRcdHBvcyBcdTAwM2U9IHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgKyB3cGMtXHUwMDNlaW9tYXAubGVuZ3RoKSB7XG4rXHRcdGlmIChJTk9ERV9WRVJTSU9OKHdwYy1cdTAwM2Vpbm9kZSkgPT0gTUlOSVhfVjEpXG4rXHRcdFx0ZXJyb3IgPSBWMV9taW5peF9pb21hcF9iZWdpbih3cGMtXHUwMDNlaW5vZGUsIHBvcywgbGVuLCAwLFxuK1x0XHRcdFx0XHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBOVUxMKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVycm9yID0gVjJfbWluaXhfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLCBwb3MsIGxlbiwgMCxcbitcdFx0XHRcdFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgTlVMTCk7XG4rXHRcdGlmIChlcnJvcilcbitcdFx0XHRyZXR1cm4gZXJyb3I7XG4rXHR9XG4rXG4rXHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIHBvcywgZW5kX3BvcywgbGVuKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIG1pbml4X3dyaXRlYmFja19vcHMgPSB7XG4rXHQud3JpdGViYWNrX3JhbmdlID0gbWluaXhfd3JpdGViYWNrX3JhbmdlLFxuK1x0LndyaXRlYmFja19zdWJtaXQgPSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxuK307XG4rXG4gc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbiB7XG5AQCAtNDQ1LDE3ICs0NzAsNDUgQEAgc3RhdGljIGludCBtaW5peF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXG4gXHRcdHJldHVybiBWMl9taW5peF9nZXRfYmxvY2soaW5vZGUsIGJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbisvKiBUaGUgb2xkIG1pbml4X3dyaXRlcGFnZXMsIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4rc3RhdGljIGludCBtaW5peF9ibG9ja193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4gXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbWluaXhfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbitcdFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4re1xuK1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuK1x0XHQuaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3QsXG4rXHRcdC53YmMgPSB3YmMsXG4rXHRcdC5vcHMgPSBcdTAwMjZtaW5peF93cml0ZWJhY2tfb3BzLFxuK1x0fTtcbitcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFx1MDAyNndwYyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWluaXhfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKGZpbGUtXHUwMDNlZl9pbm9kZSk7XG4rXG4rXHRpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgb3BzKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBUaGUgb2xkIG1pbml4X3JlYWRfZm9saW8sIHByZXNlcnZlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuICovXG4rc3RhdGljIGludCBtaW5peF9ibG9ja19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIG1pbml4X2dldF9ibG9jayk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG1pbml4X3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMgPSBtaW5peF9pb21hcF9vcHNfdmVyKHJhYy1cdTAwM2VmaWxlLVx1MDAzZWZfaW5vZGUpO1xuK1xuK1x0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIG9wcyk7XG4rfVxuK1xuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbilcbiB7XG4gXHRyZXR1cm4gX19ibG9ja193cml0ZV9iZWdpbihmb2xpbywgcG9zLCBsZW4sIG1pbml4X2dldF9ibG9jayk7XG5AQCAtNDg3LDE5ICs1NDAsMzYgQEAgc3RhdGljIGludCBtaW5peF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXG4gc3RhdGljIHNlY3Rvcl90IG1pbml4X2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuIHtcbi1cdHJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZyxibG9jayxtaW5peF9nZXRfYmxvY2spO1xuK1x0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzID0gbWluaXhfaW9tYXBfb3BzX3ZlcihtYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1xuK1x0cmV0dXJuIGlvbWFwX2JtYXAobWFwcGluZywgYmxvY2ssIG9wcyk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1pbml4X2FvcHMgPSB7XG4tXHQuZGlydHlfZm9saW9cdD0gYmxvY2tfZGlydHlfZm9saW8sXG4tXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXG4rXHQuZGlydHlfZm9saW9cdD0gaW9tYXBfZGlydHlfZm9saW8sXG4rXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4gXHQucmVhZF9mb2xpbyA9IG1pbml4X3JlYWRfZm9saW8sXG4rXHQucmVhZGFoZWFkID0gbWluaXhfcmVhZGFoZWFkLFxuIFx0LndyaXRlcGFnZXMgPSBtaW5peF93cml0ZXBhZ2VzLFxuK1x0Lm1pZ3JhdGVfZm9saW8gPSBmaWxlbWFwX21pZ3JhdGVfZm9saW8sXG4rXHQuYm1hcCA9IG1pbml4X2JtYXAsXG4rXHQuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLFxuK1x0LnJlbGVhc2VfZm9saW8gPSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxuK1x0LmVycm9yX3JlbW92ZV9mb2xpbyA9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxuK307XG4rXG4rLyogQSBzcGVjaWFsIGFvcHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQga2VlcHMgdXNpbmcgdGhlIGJ1ZmZlciBoZWFkIGNodW5rcywgYXRcbisgKiBsZWFzdCBmb3IgdGhlIHRpbWUgYmVpbmcuXG4rICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfZGlyX2FvcHMgPSB7XG4rXHQuZGlydHlfZm9saW8gPSBibG9ja19kaXJ0eV9mb2xpbyxcbitcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbitcdC5yZWFkX2ZvbGlvID0gbWluaXhfYmxvY2tfcmVhZF9mb2xpbyxcbiBcdC53cml0ZV9iZWdpbiA9IG1pbml4X3dyaXRlX2JlZ2luLFxuIFx0LndyaXRlX2VuZCA9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0Lm1pZ3JhdGVfZm9saW8gPSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcbiBcdC5ibWFwID0gbWluaXhfYm1hcCxcbi1cdC5kaXJlY3RfSU8gPSBub29wX2RpcmVjdF9JT1xuK1x0LndyaXRlcGFnZXMgPSBtaW5peF9ibG9ja193cml0ZXBhZ2VzLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbkBAIC01MTYsNyArNTg2LDcgQEAgdm9pZCBtaW5peF9zZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgZGV2X3QgcmRldilcbiBcdH0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZtaW5peF9kaXJfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZtaW5peF9kaXJfb3BlcmF0aW9ucztcbi1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bWluaXhfYW9wcztcbitcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2bWluaXhfZGlyX2FvcHM7XG4gXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuIFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2bWluaXhfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuQEAgLTc2OCw0ICs4MzgsMyBAQCBtb2R1bGVfaW5pdChpbml0X21pbml4X2ZzKVxuIG1vZHVsZV9leGl0KGV4aXRfbWluaXhfZnMpXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiTWluaXggZmlsZSBzeXN0ZW1cIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4tXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW9tYXAuYyBiL2ZzL21pbml4L2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uN2JiMDQzOWUzNjY5OTZcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL21pbml4L2lvbWFwLmNcbkBAIC0wLDAgKzEsMTE0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogaW9tYXAgZnVuY3Rpb25zIGZvciBtaW5peC4gQXQgbGVhc3QgdGhlIGZpcnN0IHBhc3Mgb2YgdGhpcyBmaWxlIHdhcyB0YWtlblxuKyAqIGZyb20gdGhlIHhpYWZzIGlvbWFwLmMsIHdoaWNoIGlzIGZpdHRpbmcgc2luY2UgdGhlIHhpYWZzIG1vZHVsZSBpbiB0dXJuXG4rICogYm9ycm93ZWQgaGVhdmlseSBmcm9tIHRoZSBtb2Rlcm5pemVkIG1pbml4IGZzIGtlcm5lbCBtb2R1bGUuXG4rICovXG4rXG4rLypcbisgKiBtaW5peF9pb21hcF9iZWdpbiAtIG1hcCBhIGZpbGUgcmFuZ2UgdG8gZGlzayBibG9ja3MuIEl0IGFjdHMgYXMgYSByZXBsYWNlbWVudFxuKyAqIGZvciBnZXRfYmxvY2sgaW4gaXRyZWVfY29tbW9uLmMsIGF0IGxlYXN0IGluIHRoZSBpbXBvcnRhbnQgd2F5cywgYW5kIGlzXG4rICogYWRhcHRlZCBmcm9tIGl0LCBidXQgaXQgdXNlcyBpb21hcCBpbnN0ZWFkIG9mIGJ1ZmZlcl9oZWFkLiBUaGlzIGlzIHRha2VuXG4rICogZGlyZWN0bHkgZnJvbSB0aGUgb3V0LW9mLXRyZWUgeGlhZnMgaW9tYXAgY2hhbmdlcywgYW5kIHRoZSBleGZhdCBpb21hcFxuKyAqIGNoYW5nZXMgd2VyZSBhbiBpbnNwaXJhdGlvbiBmb3IgdGhhdC5cbisgKi9cbitzdGF0aWMgaW50IG1pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuK3tcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuK1x0dW5zaWduZWQgaW50IGJsa2JpdHMgPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuK1x0c2VjdG9yX3QgaWJsb2NrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuK1x0aW50IGNyZWF0ZSA9IGZsYWdzIFx1MDAyNiBJT01BUF9XUklURTtcbitcbitcdC8qIE1vc3RseSB0YWtlbiBmcm9tIG1vZGVybi14aWFmcyBpdHJlZS5jIGdldF9ibG9jayB3aXRoIGVsZW1lbnRzIGZyb21cbitcdCAqIHNpbWlsYXIgZXhmYXQgb3BlcmF0aW9ucy5cbitcdCAqL1xuK1x0aW50IG9mZnNldHNbREVQVEhdO1xuK1x0SW5kaXJlY3QgY2hhaW5bREVQVEhdO1xuK1x0SW5kaXJlY3QgKnBhcnRpYWw7XG4rXHRpbnQgZGVwdGggPSBibG9ja190b19wYXRoKGlub2RlLCBpYmxvY2ssIG9mZnNldHMpO1xuK1x0aW50IGxlZnQ7XG4rXHRpbnQgZXJyID0gLUVJTztcbitcbitcdHNlY3Rvcl90IHBoeXM7XG4rXG4rXHQvKiBibG9jayBpcyBiZXlvbmQgbWF4IGZpbGUgc2l6ZSAqL1xuK1x0aWYgKGRlcHRoID09IDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aW9tYXAtXHUwMDNlYmRldiA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19iZGV2O1xuK1xuK3JlcmVhZDpcbitcdHBhcnRpYWwgPSBnZXRfYnJhbmNoKGlub2RlLCBkZXB0aCwgb2Zmc2V0cywgY2hhaW4sIFx1MDAyNmVycik7XG4rXG4rXHQvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovXG4rXHRpZiAoIXBhcnRpYWwpIHtcbitcdFx0LyogQml0IG9mIGEgd2VpcmQgb3JkZXIsIGJ1dCBpdCdsbCBtYWtlIHNlbnNlIHdoZW4geW91IGdldCB0b1xuK1x0XHQgKiB0aGUgYm90dG9tLlxuK1x0XHQgKi9cbitcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX01FUkdFRDtcbitnb3RfaXQ6XG4rXHRcdHBoeXMgPSBibG9ja190b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpO1xuK1x0XHRwYXJ0aWFsID0gY2hhaW4rZGVwdGgtMTtcbitcdFx0LyogU2V0IHVwIHRoZSBpb21hcCBzdHJ1Y3QgYmVmb3JlIGNsZWFuaW5nIHVwICovXG4rXHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4rXHRcdGlvbWFwLVx1MDAzZWFkZHIgPSAodTY0KXBoeXMgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rXHRcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IDEgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rXHRcdGlvbWFwLVx1MDAzZW9mZnNldCA9ICh1NjQpaWJsb2NrIFx1MDAzY1x1MDAzYyBibGtiaXRzO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHQvKiBOZXh0IHNpbXBsZSBjYXNlIC0gcGxhaW4gbG9va3VwIG9yIGZhaWxlZCByZWFkIG9mIGluZGlyZWN0IGJsb2NrICovXG4rXHRpZiAoIWNyZWF0ZSB8fCBlcnIgPT0gLUVJTykge1xuK1x0XHRpb21hcC1cdTAwM2V0eXBlID0gSU9NQVBfSE9MRTtcbitcdFx0aW9tYXAtXHUwMDNlYWRkciA9IElPTUFQX05VTExfQUREUjtcbitcdFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gMSBcdTAwM2NcdTAwM2MgYmxrYml0cztcbitcdFx0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gKHU2NClpYmxvY2sgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4rXHRcdGlvbWFwLVx1MDAzZWZsYWdzID0gMDtcbitjbGVhbnVwOlxuK1x0XHR3aGlsZSAocGFydGlhbCBcdTAwM2UgY2hhaW4pIHtcbitcdFx0XHRicmVsc2UocGFydGlhbC1cdTAwM2ViaCk7XG4rXHRcdFx0cGFydGlhbC0tO1xuK1x0XHR9XG4rb3V0OlxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIEluZGlyZWN0IGJsb2NrIG1pZ2h0IGJlIHJlbW92ZWQgYnkgdHJ1bmNhdGUgd2hpbGUgd2Ugd2VyZVxuK1x0ICogcmVhZGluZyBpdC4gSGFuZGxpbmcgb2YgdGhhdCBjYXNlIChmb3JnZXQgd2hhdCB3ZSd2ZSBnb3QgYW5kXG4rXHQgKiByZXJlYWQpIGlzIHRha2VuIG91dCBvZiB0aGUgbWFpbiBwYXRoLlxuK1x0ICovXG4rXHRpZiAoZXJyID09IC1FQUdBSU4pXG4rXHRcdGdvdG8gY2hhbmdlZDtcbitcbitcdGxlZnQgPSAoY2hhaW4gKyBkZXB0aCkgLSBwYXJ0aWFsO1xuK1x0ZXJyID0gYWxsb2NfYnJhbmNoKGlub2RlLCBsZWZ0LCBvZmZzZXRzICsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKHNwbGljZV9icmFuY2goaW5vZGUsIGNoYWluLCBwYXJ0aWFsLCBsZWZ0KSBcdTAwM2MgMClcbitcdFx0Z290byBjaGFuZ2VkO1xuK1xuK1x0LyogU3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBtYXBwaW5nIGl0LiAqL1xuK1x0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX05FVztcbitcdGdvdG8gZ290X2l0O1xuK1xuK2NoYW5nZWQ6XG4rXHR3aGlsZSAocGFydGlhbCBcdTAwM2UgY2hhaW4pIHtcbitcdFx0YnJlbHNlKHBhcnRpYWwtXHUwMDNlYmgpO1xuK1x0XHRwYXJ0aWFsLS07XG4rXHR9XG4rXHRnb3RvIHJlcmVhZDtcbit9XG4rXG4rLypcbisgKiBtaW5peF9pb21hcF9lbmQgZW5kcyB1cCBiZWluZyBhIG5vcDsgc2luY2UgbWluaXggZG9lc24ndCBoYXZlIGFueSBleHRlbnRzIG9yXG4rICogdHJhbnNhY3Rpb25zIHRvIHdvcnJ5IGFib3V0LCB0aGVyZSBpc24ndCBhbnl0aGluZyB0byB1cGRhdGUgaGVyZS4gVGhlIG9uLWRpc2tcbisgKiBpbmRpcmVjdCBibG9ja3MgZ2V0IGRpcnRpZWQgaW4gbWluaXhfaW9tYXBfYmVnaW4uXG4rICovXG4rc3RhdGljIGludCBtaW5peF9pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbitcdHNzaXplX3Qgd3JpdHRlbiwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxuK3tcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV92MS5jIGIvZnMvbWluaXgvaXRyZWVfdjEuY1xuaW5kZXggMWZlZDkwNjA0MmFhODQuLjU4YzI5ZjQ0NDNkMzcyIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuY1xuKysrIGIvZnMvbWluaXgvaXRyZWVfdjEuY1xuQEAgLTQ5LDYgKzQ5LDE4IEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKVxuIH1cbiBcbiAjaW5jbHVkZSBcIml0cmVlX2NvbW1vbi5jXCJcbisvKiBOT1RBIEJFTkU6XG4rICpcbisgKiBUaGlzIGlzIGlja3kgdG8gbWUsIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIGhhdmluZyBpdCBiZSBhIHN0YW5kYWxvbmUgQyBmaWxlXG4rICogdGhhdCdzIGNvbXBpbGVkIHRvIG9iamVjdCBmb3JtIGFuZCBsaW5rZWQgc2VwYXJhdGVseSBsaWtlIGl0IGlzIGluIHhpYWZzIGlzXG4rICogbXVjaCBuYXN0aWVyIGluIG1pbml4IGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgbWluaXggZnMgdGhhdFxuKyAqIGhhdmUgc29tZSB2ZXJ5LCB2ZXJ5IGRpZmZlcmVudCBhc3BlY3RzLCBsaWtlIHRoZSBzaXplIG9mIGJsb2NrX3QuIEkgZG9uJ3RcbisgKiBsaWtlIGl0LCBidXQgc2luY2UgbWluaXggYWxyZWFkeSBoYXMgdGhpcyBwYXR0ZXJuIHdoZXJlIGEgY29tbW9uIGl0cmVlIGZpbGVcbisgKiBpcyBpbmNsdWRlZCBpbiB0aGUgaXRyZWVfdjEgYW5kIGl0cmVlX3YyKGFuZCB2MykgZmlsZXMsIEknbSBpbmNsdWRpbmcgaW9tYXAuY1xuKyAqIGluIHRoZXNlIGZpbGVzIGFzIHdlbGwuIEl0IGRvZXMgYXQgbGVhc3QgYXZvaWQgZXhwb3J0aW5nIHNvbWUgY3VycmVudGx5XG4rICogc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCBuZWVkZWQgYW55d2hlcmUgYnV0IGl0cmVlX2NvbW1vbi5jIGFuZCBpb21hcC5jLlxuKyAqL1xuKyNpbmNsdWRlIFwiaW9tYXAuY1wiXG4gXG4gaW50IFYxX21pbml4X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jayxcbiBcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbkBAIC02MSw3ICs3MywxOCBAQCB2b2lkIFYxX21pbml4X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0dHJ1bmNhdGUoaW5vZGUpO1xuIH1cbiBcbi11bnNpZ25lZCBWMV9taW5peF9ibG9ja3MobG9mZl90IHNpemUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4rdW5zaWduZWQgaW50IFYxX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gbmJsb2NrcyhzaXplLCBzYik7XG4gfVxuK1xuK2ludCBWMV9taW5peF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuK1x0dW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbit7XG4rXHRyZXR1cm4gbWluaXhfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCBmbGFncywgaW9tYXAsIHNyY21hcCk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgVjFfbWluaXhfaW9tYXBfb3BzID0ge1xuK1x0LmlvbWFwX2JlZ2luID0gVjFfbWluaXhfaW9tYXBfYmVnaW4sXG4rXHQuaW9tYXBfZW5kICAgPSBtaW5peF9pb21hcF9lbmQsXG4rfTtcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV92Mi5jIGIvZnMvbWluaXgvaXRyZWVfdjIuY1xuaW5kZXggOWQwMGYzMWEyZDlkMTUuLmZjN2E1YWU4ZmExY2EzIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaXRyZWVfdjIuY1xuKysrIGIvZnMvbWluaXgvaXRyZWVfdjIuY1xuQEAgLTU3LDYgKzU3LDEwIEBAIHN0YXRpYyBpbnQgYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywgaW50IG9mZnNldHNbREVQVEhdKVxuIH1cbiBcbiAjaW5jbHVkZSBcIml0cmVlX2NvbW1vbi5jXCJcbisvKiBTZWUgdGhlIG5vdGUgaW4gaXRyZWVfdjEgaW4gYSBjb21tZW50IHRoYXQgc3RhcnRzIFwiTk9UQSBCRU5FXCIgZm9yIGFuXG4rICogZXhwbGFuYXRpb24gZm9yIHdoeSBpb21hcC5jIGlzIGluY2x1ZGVkIGhlcmUuXG4rICovXG4rI2luY2x1ZGUgXCJpb21hcC5jXCJcbiBcbiBpbnQgVjJfbWluaXhfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb25nIGJsb2NrLFxuIFx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuQEAgLTY5LDcgKzczLDE4IEBAIHZvaWQgVjJfbWluaXhfdHJ1bmNhdGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHR0cnVuY2F0ZShpbm9kZSk7XG4gfVxuIFxuLXVuc2lnbmVkIFYyX21pbml4X2Jsb2Nrcyhsb2ZmX3Qgc2l6ZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbit1bnNpZ25lZCBpbnQgVjJfbWluaXhfYmxvY2tzKGxvZmZfdCBzaXplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbiBcdHJldHVybiBuYmxvY2tzKHNpemUsIHNiKTtcbiB9XG4rXG4raW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuK3tcbitcdHJldHVybiBtaW5peF9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHMgPSB7XG4rXHQuaW9tYXBfYmVnaW4gPSBWMl9taW5peF9pb21hcF9iZWdpbixcbitcdC5pb21hcF9lbmQgICA9IG1pbml4X2lvbWFwX2VuZCxcbit9O1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L21pbml4LmggYi9mcy9taW5peC9taW5peC5oXG5pbmRleCBmMjAyNWM5YjU4MjUyZi4uZmFjZTc0MTAwMzQ2MDIgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9taW5peC5oXG4rKysgYi9mcy9taW5peC9taW5peC5oXG5AQCAtNSw2ICs1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWluaXhfZnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIElOT0RFX1ZFUlNJT04oaW5vZGUpXHRtaW5peF9zYihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX3ZlcnNpb25cbiAjZGVmaW5lIE1JTklYX1YxXHRcdDB4MDAwMVx0XHQvKiBvcmlnaW5hbCBtaW5peCBmcyAqL1xuQEAgLTU2LDcgKzU3LDcgQEAgaW50IG1pbml4X25ld19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiB2b2lkIG1pbml4X2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibG9jayk7XG4gdW5zaWduZWQgbG9uZyBtaW5peF9jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIGNvbnN0IHN0cnVjdCBwYXRoICosXG4tXHRcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkIGludCk7XG4rXHRcdHN0cnVjdCBrc3RhdCAqLCB1MzIsIHVuc2lnbmVkKTtcbiBpbnQgbWluaXhfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pO1xuIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbWluaXhfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTtcbkBAIC04MCwxMCArODEsMTkgQEAgaW50IG1pbml4X3NldF9saW5rKHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIHN0cnVjdCBtaW5peF9kaXJfZW50cnkgKm1pbml4X2RvdGRvdChzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZm9saW8gKiopO1xuIGlub190IG1pbml4X2lub2RlX2J5X25hbWUoc3RydWN0IGRlbnRyeSopO1xuIFxuK2V4dGVybiBpbnQgVjFfbWluaXhfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbitcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCxcbitcdHN0cnVjdCBpb21hcCAqc3JjbWFwKTtcbitleHRlcm4gaW50IFYyX21pbml4X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsXG4rXHRzdHJ1Y3QgaW9tYXAgKnNyY21hcCk7XG4rXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbWluaXhfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2Rpcl9vcGVyYXRpb25zO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIFYxX21pbml4X2lvbWFwX29wcztcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBWMl9taW5peF9pb21hcF9vcHM7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqbWluaXhfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG5AQCAtOTUsMTEgKzEwNSwxNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICptaW5peF9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbywgdmZzX2lub2RlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGJpdHMsIHVuc2lnbmVkIGJsb2Nrc2l6ZSlcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5peF9ibG9ja3NfbmVlZGVkKHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgYmxvY2tzaXplKVxuIHtcbiBcdHJldHVybiBESVZfUk9VTkRfVVAoYml0cywgYmxvY2tzaXplICogOCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqbWluaXhfaW9tYXBfb3BzX3ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHJldHVybiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpID9cbitcdFx0XHUwMDI2VjFfbWluaXhfaW9tYXBfb3BzIDogXHUwMDI2VjJfbWluaXhfaW9tYXBfb3BzO1xuK31cbitcbiAjaWYgZGVmaW5lZChDT05GSUdfTUlOSVhfRlNfTkFUSVZFX0VORElBTikgXHUwMDI2XHUwMDI2IFxcXG4gXHRkZWZpbmVkKENPTkZJR19NSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRUQpXG4gXG5AQCAtMTI5LDcgKzE0NSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaXhfYmxvY2tzX25lZWRlZCh1bnNpZ25lZCBiaXRzLCB1bnNpZ25lZCBibG9ja3NpemUpXG4gICogYmlnLWVuZGlhbiAxNmJpdCBpbmRleGVkIGJpdG1hcHNcbiAgKi9cbiBcbi1zdGF0aWMgaW5saW5lIGludCBtaW5peF9maW5kX2ZpcnN0X3plcm9fYml0KGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBzaXplKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1pbml4X2ZpbmRfZmlyc3RfemVyb19iaXQoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwID0gdmFkZHIsICphZGRyID0gdmFkZHI7XG4gXHR1bnNpZ25lZCBzaG9ydCBudW07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjoxMToyMi4wMDkyNTQwMThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjA0MjkxNjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1pbml4IElvbWFwIFBhdGNoKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggaGVyZSBpbnRyb2R1Y2luZyBpb21hcCBzdXBwb3J0IGludG8gdGhlIE1pbml4IGZpbGVzeXN0ZW0sIGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGlzIGlzIHRoZSByZXBsYWNlbWVudCBvZiB0aGUgZXhpc3RpbmcgYnVmZmVyX2hlYWQtYmFzZWQgb3BlcmF0aW9ucyB3aXRoIGlvbWFwIHByaW1pdGl2ZXMsIHNwZWNpZmljYWxseSBmb3IgcmVndWxhciBmaWxlcy4gRGlyZWN0b3JpZXMgYXJlIHN0YXlpbmcgd2l0aCB0aGUgYnVmZmVyX2hlYWQgYXBwcm9hY2ggZm9yIG5vdywgd2hpY2ggaXMgYSBzZW5zaWJsZSwgaW5jcmVtZW50YWwgY2hhbmdlLiBUaGV5J3ZlIGFkZGVkIGEgc2xldyBvZiBuZXcgZnVuY3Rpb25zOiBgbWluaXhfZGlvX3JlYWRfaXRlcmAsIGBtaW5peF9kaW9fd3JpdGVfaXRlcmAsIHRoZSBzdGFuZGFyZCBmaWxlIGl0ZXJhdG9ycywgYG1pbml4X3dyaXRlYmFja19yYW5nZWAsIGBtaW5peF93cml0ZXBhZ2VzYCwgYW5kIHRoZSBmb2xpbyBmdW5jdGlvbnMuIEFkZGl0aW9uYWxseSwgd2UgaGF2ZSBgbWluaXhfYm1hcGAg4oCTIHRoZSBibG9jayBtYXBwaW5nIGZ1bmN0aW9uLCB3aGljaCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIHJldmlldy4gTG9va3MgbGlrZSB0aGV5J3ZlIHNwdW4gdXAgYSBuZXcgYGZzL21pbml4L2lvbWFwLmNgIGZpbGUgd2l0aCBgbWluaXhfaW9tYXBfYmVnaW5gIGFuZCBgbWluaXhfaW9tYXBfZW5kYCwgd2hpY2ggYXJlIHRoZSBzdGFuZGFyZCBiZWdpbi9lbmQgcG9pbnRzIGZvciBpb21hcCBvcGVyYXRpb25zLCBhbmQgcHJvYmFibHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcy5cblxuVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIE1pbml4J3MgSU8gcGF0aC4gR2l2ZW4gdGhlIGRlcHRoIG9mIHRoaXMgY2hhbmdlLCBJICpkZWZpbml0ZWx5KiBuZWVkIHRvIGVhcm1hcmsgdGhpcyBmb3IgZnV6emluZy4gV2UncmUgdG91Y2hpbmcgY3JpdGljYWwgY29kZSB0aGF0IGRlYWxzIHdpdGggZGF0YSBhY2Nlc3MsIGFuZCBhbnkgc3VidGxlIGJ1ZyBoZXJlIGNvdWxkIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMuXG5cbk5vdywgbGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFzcGVjdHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGVuYWJsZWQuIFRpbWUgdG8gdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggdGhlIEtjb25maWcgZmlsZXMuIEknbGwgc2VhcmNoIGZvciBgTUlOSVhgIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSBzb3VyY2UgZGlyZWN0b3J5LCBwYXJ0aWN1bGFybHkgaW4gYGZzL21pbml4L0tjb25maWdgIG9yIGFueXRoaW5nIHNpbWlsYXJseSBuYW1lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgZXhwb3NlZCBzbyB0aGF0IEkgdW5kZXJzdGFuZCB3aGVyZSBhbmQgd2hlbiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkzMCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjExOjI3LjYxMzU0Nzk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mzc3NTg2NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1JTklYX0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL21pbml4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9taW5peC9LY29uZmlnOjI6Y29uZmlnIE1JTklYX0ZTXFxuZnMvbWluaXgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNaW5peCBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbWluaXgvS2NvbmZpZy0yMC1cXG5mcy9taW5peC9LY29uZmlnOjIxOmNvbmZpZyBNSU5JWF9GU19OQVRJVkVfRU5ESUFOXFxuZnMvbWluaXgvS2NvbmZpZy0yMi1cXHRkZWZfYm9vbCBNSU5JWF9GU1xcbi0tXFxuZnMvbWluaXgvS2NvbmZpZy0yNC1cXG5mcy9taW5peC9LY29uZmlnOjI1OmNvbmZpZyBNSU5JWF9GU19CSUdfRU5ESUFOXzE2QklUX0lOREVYRURcXG5mcy9taW5peC9LY29uZmlnLTI2LVxcdGRlZl9ib29sIE1JTklYX0ZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjExOjMwLjI1MTMxMjc0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NzY4MzE3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNaW5peCBGUyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGlzIGRlZmluaXRlbHkgdGFyZ2V0aW5nIGBNSU5JWF9GU2AuIE15IGZvY3VzIGhlcmUgaXMgdG8gaWRlbnRpZnkga2V5IHN5bWJvbHMgaW50cm9kdWNlZCBvciBtb2RpZmllZCBieSB0aGlzIHBhdGNoLCB0aGUgb25lcyBtb3N0IGxpa2VseSB0byB5aWVsZCBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldHMuXG5cbkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkndmUgZ290IGEgc29saWQgbGlzdCBvZiBwb3RlbnRpYWwgZnVuY3Rpb25zIHRvIGluY2x1ZGUgaW4gbXkgYEZvY3VzU3ltYm9sc2A6IGBtaW5peF9kaW9fcmVhZF9pdGVyYCwgYG1pbml4X2Rpb193cml0ZV9pdGVyYCwgYG1pbml4X2ZpbGVfcmVhZF9pdGVyYCwgYG1pbml4X2ZpbGVfd3JpdGVfaXRlcmAsIGBtaW5peF93cml0ZWJhY2tfcmFuZ2VgLCBgbWluaXhfd3JpdGVwYWdlc2AsIGBtaW5peF9yZWFkX2ZvbGlvYCwgYG1pbml4X3JlYWRhaGVhZGAsIGBtaW5peF9ibWFwYCwgYG1pbml4X2lvbWFwX2JlZ2luYCwgYG1pbml4X2lvbWFwX2VuZGAsIGBWMV9taW5peF9pb21hcF9iZWdpbmAsIGFuZCBgVjJfbWluaXhfaW9tYXBfYmVnaW5gLiBJJ3ZlIHF1aWNrbHkgY29uZmlybWVkIHRoZSBmdW5jdGlvbiBuYW1lcyBhZ2FpbnN0IHRoZSBwYXRjaCdzIGNoYW5nZXMsIGp1c3QgdG8gZW5zdXJlIGFjY3VyYWN5LlxuXG5CYXNlZCBvbiB0aGlzLCBJJ20gY29uZmlkZW50IHRoYXQgYWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyByZXByZXNlbnQgZW50cnkgcG9pbnRzIG9yIGNyaXRpY2FsIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBNaW5peCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBUaGV5J3JlIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBkZXRhaWxlZCBmdXp6aW5nIGFuYWx5c2lzIGJlY2F1c2UgdGhleSBhcmUgbmV3bHkgaW50cm9kdWNlZCBvciBhbHRlcmVkLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciB1bmNvdmVyaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE5vdywgSSdtIHJlYWR5IHRvIG1vdmUgZm9yd2FyZCBhbmQgc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzU3LCJPdXRwdXRUb2tlbnMiOjI1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjoxMTozNy4xMjgxNDY0ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODY3MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNSU5JWF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pbml4X2Rpb19yZWFkX2l0ZXJcIixcbiAgICBcIm1pbml4X2Rpb193cml0ZV9lbmRfaW9cIixcbiAgICBcIm1pbml4X2Rpb193cml0ZV9pdGVyXCIsXG4gICAgXCJtaW5peF9maWxlX3JlYWRfaXRlclwiLFxuICAgIFwibWluaXhfZmlsZV93cml0ZV9pdGVyXCIsXG4gICAgXCJtaW5peF9maWxlX29wZW5cIixcbiAgICBcIm1pbml4X3dyaXRlYmFja19yYW5nZVwiLFxuICAgIFwibWluaXhfd3JpdGVwYWdlc1wiLFxuICAgIFwibWluaXhfcmVhZF9mb2xpb1wiLFxuICAgIFwibWluaXhfcmVhZGFoZWFkXCIsXG4gICAgXCJtaW5peF9ibWFwXCIsXG4gICAgXCJtaW5peF9pb21hcF9iZWdpblwiLFxuICAgIFwibWluaXhfaW9tYXBfZW5kXCIsXG4gICAgXCJWMV9taW5peF9pb21hcF9iZWdpblwiLFxuICAgIFwiVjJfbWluaXhfaW9tYXBfYmVnaW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGlvbWFwIHN1cHBvcnQgZm9yIHRoZSBtaW5peCBmaWxlc3lzdGVtLCByZXBsYWNpbmcgb2xkZXIgYnVmZmVyX2hlYWQtYmFzZWQgb3BlcmF0aW9ucyBmb3IgcmVndWxhciBmaWxlcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHJlYWQvd3JpdGUvbW1hcCBsb2dpYyBvZiB0aGUgbWluaXggZmlsZXN5c3RlbSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlOSVhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaW5peF9kaW9fcmVhZF9pdGVyXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfZW5kX2lvXCIsXG4gICAgXCJtaW5peF9kaW9fd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZmlsZV9yZWFkX2l0ZXJcIixcbiAgICBcIm1pbml4X2ZpbGVfd3JpdGVfaXRlclwiLFxuICAgIFwibWluaXhfZmlsZV9vcGVuXCIsXG4gICAgXCJtaW5peF93cml0ZWJhY2tfcmFuZ2VcIixcbiAgICBcIm1pbml4X3dyaXRlcGFnZXNcIixcbiAgICBcIm1pbml4X3JlYWRfZm9saW9cIixcbiAgICBcIm1pbml4X3JlYWRhaGVhZFwiLFxuICAgIFwibWluaXhfYm1hcFwiLFxuICAgIFwibWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIm1pbml4X2lvbWFwX2VuZFwiLFxuICAgIFwiVjFfbWluaXhfaW9tYXBfYmVnaW5cIixcbiAgICBcIlYyX21pbml4X2lvbWFwX2JlZ2luXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBpb21hcCBzdXBwb3J0IGZvciB0aGUgbWluaXggZmlsZXN5c3RlbSwgcmVwbGFjaW5nIG9sZGVyIGJ1ZmZlcl9oZWFkLWJhc2VkIG9wZXJhdGlvbnMgZm9yIHJlZ3VsYXIgZmlsZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSByZWFkL3dyaXRlL21tYXAgbG9naWMgb2YgdGhlIG1pbml4IGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkgnk[1] Phase: Succeeded StartedAt: 2026-06-25 22:11:48 +0000 UTC FinishedAt: 2026-06-25 22:11:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-25 22:11:48 +0000 UTC FinishedAt: 2026-06-25 22:11:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2] Phase: Succeeded StartedAt: 2026-06-25 22:11:48 +0000 UTC FinishedAt: 2026-06-26 02:08:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-25 22:11:48 +0000 UTC FinishedAt: 2026-06-26 02:08:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-25 22:11:48 +0000 UTC FinishedAt: 2026-06-25 22:11:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-25 22:11:48 +0000 UTC FinishedAt: 2026-06-25 22:11:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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-workflowfkgnk/series-workflowfkgnk-convert-artifact-2738680325/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-25 22:11:58 +0000 UTC FinishedAt: 2026-06-25 22:34:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-25 22:11:58 +0000 UTC FinishedAt: 2026-06-25 22:34:15 +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:*844e9432-bcbc-42ff-b69f-3e52eb3d4697,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-workflowfkgnk/series-workflowfkgnk-convert-artifact-2738680325/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": "21181bc8-2f0d-4fe3-b3f9-1eafada6c287", "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-workflowfkgnk/series-workflowfkgnk-build-action-2482744747/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-25 22:11:58 +0000 UTC FinishedAt: 2026-06-25 22:34:05 +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:*844e9432-bcbc-42ff-b69f-3e52eb3d4697,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-workflowfkgnk/series-workflowfkgnk-convert-artifact-2738680325/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": "21181bc8-2f0d-4fe3-b3f9-1eafada6c287", "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-workflowfkgnk/series-workflowfkgnk-build-action-2482744747/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-25 22:34:15 +0000 UTC FinishedAt: 2026-06-25 22:34:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-25 22:34:15 +0000 UTC FinishedAt: 2026-06-25 22:34:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-25 22:34:15 +0000 UTC FinishedAt: 2026-06-25 22:34:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-25 22:34:15 +0000 UTC FinishedAt: 2026-06-25 22:34:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","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-workflowfkgnk/series-workflowfkgnk-convert-artifact-4072601568/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-25 22:34:25 +0000 UTC FinishedAt: 2026-06-25 22:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-25 22:34:25 +0000 UTC FinishedAt: 2026-06-25 22:36:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*21181bc8-2f0d-4fe3-b3f9-1eafada6c287,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-workflowfkgnk/series-workflowfkgnk-build-action-2482744747/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-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-25 22:36:25 +0000 UTC FinishedAt: 2026-06-25 22:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-25 22:36:25 +0000 UTC FinishedAt: 2026-06-25 22:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-25 22:36:25 +0000 UTC FinishedAt: 2026-06-25 23:01:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-25 22:36:25 +0000 UTC FinishedAt: 2026-06-25 23:01:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*844e9432-bcbc-42ff-b69f-3e52eb3d4697,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-workflowfkgnk/series-workflowfkgnk-convert-artifact-4072601568/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": "3e5d737a-bbd5-4a7b-9ad1-4a77f3c42b23", "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-workflowfkgnk/series-workflowfkgnk-build-action-1295082652/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-25 22:36:25 +0000 UTC FinishedAt: 2026-06-25 23:01:37 +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:*844e9432-bcbc-42ff-b69f-3e52eb3d4697,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-workflowfkgnk/series-workflowfkgnk-convert-artifact-4072601568/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": "3e5d737a-bbd5-4a7b-9ad1-4a77f3c42b23", "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-workflowfkgnk/series-workflowfkgnk-build-action-1295082652/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-25 23:01:47 +0000 UTC FinishedAt: 2026-06-25 23:01:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-25 23:01:47 +0000 UTC FinishedAt: 2026-06-25 23:01:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-25 23:01:47 +0000 UTC FinishedAt: 2026-06-25 23:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-25 23:01:47 +0000 UTC FinishedAt: 2026-06-25 23:05:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e5d737a-bbd5-4a7b-9ad1-4a77f3c42b23,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfkgnk/series-workflowfkgnk-build-action-1295082652/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-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-25 23:05:10 +0000 UTC FinishedAt: 2026-06-26 02:08:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-25 23:05:10 +0000 UTC FinishedAt: 2026-06-26 02:08:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*21181bc8-2f0d-4fe3-b3f9-1eafada6c287,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e5d737a-bbd5-4a7b-9ad1-4a77f3c42b23,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfkgnk/series-workflowfkgnk-build-action-2482744747/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfkgnk/series-workflowfkgnk-build-action-1295082652/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-25 23:05:10 +0000 UTC FinishedAt: 2026-06-25 23:05:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-25 23:05:10 +0000 UTC FinishedAt: 2026-06-25 23:05:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfkgnk/series-workflowfkgnk-convert-artifact-1809243449/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-25 23:05:10 +0000 UTC FinishedAt: 2026-06-25 23:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-25 23:05:10 +0000 UTC FinishedAt: 2026-06-25 23:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-25 23:05:10 +0000 UTC FinishedAt: 2026-06-25 23:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-25 23:05:36 +0000 UTC FinishedAt: 2026-06-26 02:08:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfkgnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_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":["minix_dio_read_iter","minix_dio_write_end_io","minix_dio_write_iter","minix_file_read_iter","minix_file_write_iter","minix_file_open","minix_writeback_range","minix_writepages","minix_read_folio","minix_readahead","minix_bmap","minix_iomap_begin","minix_iomap_end","V1_minix_iomap_begin","V2_minix_iomap_begin"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ab9de95c9cf952332ab79453b4b5d1bfca8e514f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MINIX_FS"],"series_id":"5741f2fe-e35f-460c-b8ae-d02789a43a3a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-25 23:05:36 +0000 UTC FinishedAt: 2026-06-26 02:08:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*21181bc8-2f0d-4fe3-b3f9-1eafada6c287,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e5d737a-bbd5-4a7b-9ad1-4a77f3c42b23,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfkgnk/series-workflowfkgnk-build-action-2482744747/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfkgnk/series-workflowfkgnk-build-action-1295082652/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfkgnk/series-workflowfkgnk-convert-artifact-1809243449/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}