Name: series-workflowv4svr Phase: Succeeded StartedAt: 2026-07-27 11:37:00 +0000 UTC FinishedAt: 2026-07-27 14:32:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[0] Phase: Succeeded StartedAt: 2026-07-27 11:37:00 +0000 UTC FinishedAt: 2026-07-27 12:16:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 11:37:00 +0000 UTC FinishedAt: 2026-07-27 12:16:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "4df5ac1e975032ffeef732e3f34f9096e20a0c2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_BSG", "IO_URING", "SCSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "4df5ac1e975032ffeef732e3f34f9096e20a0c2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_BSG", "IO_URING", "SCSI" ], "series_id": "370b9d71-296e-411f-ac5b-5c3c81eb2836" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "scsi_bsg_uring_cmd", "scsi_bsg_map_user_buffer" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfQlNHJiMzNDssCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O1NDU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3NpX2JzZ191cmluZ19jbWQmIzM0OywKICAgICYjMzQ7c2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLWZldGNoIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGlvX3VyaW5nIGNvbW1hbmQgaGFuZGxpbmcgZm9yIFNDU0kgQlNHIGRldmljZXMuIEl0IG1vZGlmaWVzIHNjc2lfYnNnX3VyaW5nX2NtZCBhbmQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyIHRvIHVzZSBSRUFEX09OQ0UgZm9yIHJlYWRpbmcgdXNlci1jb250cm9sbGVkIFNRRSBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIHNlY3VyaXR5IGZpeCBpbiBhIHJlYWNoYWJsZSBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWU0Y2YwMGQ0NWU1ZWNkZWU0MDNhZjJiYjBiNDRmYTEzZWRmMTVkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDEyOjE1OjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmNcbmluZGV4IGU4MGRlYzUzMTc0ZWFjLi5kZGIzM2FlNjg0ODM3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuY1xuQEAgLTc2LDEyICYjNDM7NzYsOSBAQCBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IHNjc2lfYnNnX3VyaW5nX2NtZF9kb25lKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gXG4gc3RhdGljIGludCBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIoc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXG4tXHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBib29sIGlzX3dyaXRlLFxuJiM0MztcdFx0XHRcdCAgICB1NjQgYnVmX2FkZHIsIHVuc2lnbmVkIGxvbmcgYnVmX2xlbilcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCAqY21kID0gaW9fdXJpbmdfc3FlMTI4X2NtZChpb3VjbWQtXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XG4tXHRib29sIGlzX3dyaXRlID0gY21kLVx1MDAzZWRvdXRfeGZlcl9sZW4gXHUwMDNlIDA7XG4tXHR1NjQgYnVmX2FkZHIgPSBpc193cml0ZSA/IGNtZC1cdTAwM2Vkb3V0X3hmZXJwIDogY21kLVx1MDAzZWRpbl94ZmVycDtcbi1cdHVuc2lnbmVkIGxvbmcgYnVmX2xlbiA9IGlzX3dyaXRlID8gY21kLVx1MDAzZWRvdXRfeGZlcl9sZW4gOiBjbWQtXHUwMDNlZGluX3hmZXJfbGVuO1xuIFx0c3RydWN0IGlvdl9pdGVyIGl0ZXI7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTkxLDEwICYjNDM7ODgsMTAgQEAgc3RhdGljIGludCBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIoc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZpdGVyLCBpb3VjbWQsIGlzc3VlX2ZsYWdzKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRyZXQgPSBibGtfcnFfbWFwX3VzZXJfaW92KHJlcS1cdTAwM2VxLCByZXEsIE5VTEwsIFx1MDAyNml0ZXIsIGdmcF9tYXNrKTtcbiYjNDM7XHRcdHJldCA9IGJsa19ycV9tYXBfdXNlcl9pb3YocmVxLVx1MDAzZXEsIHJlcSwgTlVMTCwgXHUwMDI2aXRlciwgR0ZQX0tFUk5FTCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRyZXQgPSBibGtfcnFfbWFwX3VzZXIocmVxLVx1MDAzZXEsIHJlcSwgTlVMTCwgdXB0cjY0KGJ1Zl9hZGRyKSxcbi1cdFx0XHRcdCAgICAgIGJ1Zl9sZW4sIGdmcF9tYXNrKTtcbiYjNDM7XHRcdFx0XHQgICAgICBidWZfbGVuLCBHRlBfS0VSTkVMKTtcbiBcdH1cbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMTA0LDIxICYjNDM7MTAxLDI4IEBAIHN0YXRpYyBpbnQgc2NzaV9ic2dfdXJpbmdfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncywgYm9vbCBvcGVuX2Zvcl93cml0ZSlcbiB7XG4gXHRzdHJ1Y3Qgc2NzaV9ic2dfdXJpbmdfY21kX3BkdSAqcGR1ID0gc2NzaV9ic2dfdXJpbmdfY21kX3BkdShpb3VjbWQpO1xuLVx0Y29uc3Qgc3RydWN0IGJzZ191cmluZ19jbWQgKmNtZCA9IGlvX3VyaW5nX3NxZTEyOF9jbWQoaW91Y21kLVx1MDAzZXNxZSwgc3RydWN0IGJzZ191cmluZ19jbWQpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBic2dfdXJpbmdfY21kICpjbWQgPVxuJiM0MztcdFx0aW9fdXJpbmdfc3FlMTI4X2NtZChpb3VjbWQtXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XG4gXHRzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kO1xuIFx0c3RydWN0IHJlcXVlc3QgKnJlcTtcbiBcdGJsa19tcV9yZXFfZmxhZ3NfdCBibGtfZmxhZ3MgPSAwO1xuLVx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xuJiM0MztcdHU2NCByZXF1ZXN0ID0gUkVBRF9PTkNFKGNtZC1cdTAwM2VyZXF1ZXN0KTtcbiYjNDM7XHR1MzIgcmVxdWVzdF9sZW4gPSBSRUFEX09OQ0UoY21kLVx1MDAzZXJlcXVlc3RfbGVuKTtcbiYjNDM7XHR1NjQgZG91dF94ZmVycCA9IFJFQURfT05DRShjbWQtXHUwMDNlZG91dF94ZmVycCk7XG4mIzQzO1x0dTMyIGRvdXRfeGZlcl9sZW4gPSBSRUFEX09OQ0UoY21kLVx1MDAzZWRvdXRfeGZlcl9sZW4pO1xuJiM0MztcdHU2NCBkaW5feGZlcnAgPSBSRUFEX09OQ0UoY21kLVx1MDAzZWRpbl94ZmVycCk7XG4mIzQzO1x0dTMyIGRpbl94ZmVyX2xlbiA9IFJFQURfT05DRShjbWQtXHUwMDNlZGluX3hmZXJfbGVuKTtcbiYjNDM7XHR1MzIgbWF4X3Jlc3BvbnNlX2xlbiA9IFJFQURfT05DRShjbWQtXHUwMDNlbWF4X3Jlc3BvbnNlX2xlbik7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKGNtZC1cdTAwM2Vwcm90b2NvbCAhPSBCU0dfUFJPVE9DT0xfU0NTSSB8fFxuIFx0ICAgIGNtZC1cdTAwM2VzdWJwcm90b2NvbCAhPSBCU0dfU1VCX1BST1RPQ09MX1NDU0lfQ01EKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmICghY21kLVx1MDAzZXJlcXVlc3QgfHwgY21kLVx1MDAzZXJlcXVlc3RfbGVuID09IDApXG4mIzQzO1x0aWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3RfbGVuID09IDApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKGNtZC1cdTAwM2Vkb3V0X3hmZXJfbGVuIFx1MDAyNlx1MDAyNiBjbWQtXHUwMDNlZGluX3hmZXJfbGVuKSB7XG4mIzQzO1x0aWYgKGRvdXRfeGZlcl9sZW4gXHUwMDI2XHUwMDI2IGRpbl94ZmVyX2xlbikge1xuIFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7QklESSBzdXBwb3J0IGluIGJzZyBoYXMgYmVlbiByZW1vdmVkLlxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbkBAIC0xMjYsMjUgJiM0MzsxMzAsMjMgQEAgc3RhdGljIGludCBzY3NpX2JzZ191cmluZ19jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNcbiBcdGlmIChjbWQtXHUwMDNlZG91dF9pb3ZlY19jb3VudCBcdTAwM2UgMCB8fCBjbWQtXHUwMDNlZGluX2lvdmVjX2NvdW50IFx1MDAzZSAwKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spIHtcbiYjNDM7XHRpZiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spXG4gXHRcdGJsa19mbGFncyA9IEJMS19NUV9SRVFfTk9XQUlUO1xuLVx0XHRnZnBfbWFzayA9IEdGUF9OT1dBSVQ7XG4tXHR9XG4gXG4tXHRyZXEgPSBzY3NpX2FsbG9jX3JlcXVlc3QocSwgY21kLVx1MDAzZWRvdXRfeGZlcl9sZW4gP1xuJiM0MztcdHJlcSA9IHNjc2lfYWxsb2NfcmVxdWVzdChxLCBkb3V0X3hmZXJfbGVuID9cbiBcdFx0XHRcdCBSRVFfT1BfRFJWX09VVCA6IFJFUV9PUF9EUlZfSU4sIGJsa19mbGFncyk7XG4gXHRpZiAoSVNfRVJSKHJlcSkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHJlcSk7XG4gXG4gXHRzY21kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpO1xuLVx0aWYgKGNtZC1cdTAwM2VyZXF1ZXN0X2xlbiBcdTAwM2Ugc2l6ZW9mKHNjbWQtXHUwMDNlY21uZCkpIHtcbiYjNDM7XHRpZiAocmVxdWVzdF9sZW4gXHUwMDNlIHNpemVvZihzY21kLVx1MDAzZWNtbmQpKSB7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfcmVxO1xuIFx0fVxuLVx0c2NtZC1cdTAwM2VjbWRfbGVuID0gY21kLVx1MDAzZXJlcXVlc3RfbGVuO1xuJiM0MztcdHNjbWQtXHUwMDNlY21kX2xlbiA9IHJlcXVlc3RfbGVuO1xuIFx0c2NtZC1cdTAwM2VhbGxvd2VkID0gU0dfREVGQVVMVF9SRVRSSUVTO1xuIFxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKHNjbWQtXHUwMDNlY21uZCwgdXB0cjY0KGNtZC1cdTAwM2VyZXF1ZXN0KSwgY21kLVx1MDAzZXJlcXVlc3RfbGVuKSkge1xuJiM0MztcdGlmIChjb3B5X2Zyb21fdXNlcihzY21kLVx1MDAzZWNtbmQsIHVwdHI2NChyZXF1ZXN0KSwgcmVxdWVzdF9sZW4pKSB7XG4gXHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfcmVxO1xuIFx0fVxuQEAgLTE1NSwxMSAmIzQzOzE1NywxNiBAQCBzdGF0aWMgaW50IHNjc2lfYnNnX3VyaW5nX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y1xuIFx0fVxuIFxuIFx0cGR1LVx1MDAzZXJlc3BvbnNlX2FkZHIgPSBjbWQtXHUwMDNlcmVzcG9uc2U7XG4tXHRzY21kLVx1MDAzZXNlbnNlX2xlbiA9IGNtZC1cdTAwM2VtYXhfcmVzcG9uc2VfbGVuID9cbi1cdFx0bWluKGNtZC1cdTAwM2VtYXhfcmVzcG9uc2VfbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpIDogU0NTSV9TRU5TRV9CVUZGRVJTSVpFO1xuJiM0MztcdHNjbWQtXHUwMDNlc2Vuc2VfbGVuID0gbWF4X3Jlc3BvbnNlX2xlbiA/XG4mIzQzO1x0XHRtaW4obWF4X3Jlc3BvbnNlX2xlbiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKSA6IFNDU0lfU0VOU0VfQlVGRkVSU0laRTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRvdXRfeGZlcl9sZW4gfHwgZGluX3hmZXJfbGVuKSB7XG4mIzQzO1x0XHRib29sIGlzX3dyaXRlID0gZG91dF94ZmVyX2xlbiBcdTAwM2UgMDtcbiYjNDM7XHRcdHU2NCBidWZfYWRkciA9IGlzX3dyaXRlID8gZG91dF94ZmVycCA6IGRpbl94ZmVycDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYnVmX2xlbiA9IGlzX3dyaXRlID8gZG91dF94ZmVyX2xlbiA6IGRpbl94ZmVyX2xlbjtcbiBcbi1cdGlmIChjbWQtXHUwMDNlZG91dF94ZmVyX2xlbiB8fCBjbWQtXHUwMDNlZGluX3hmZXJfbGVuKSB7XG4tXHRcdHJldCA9IHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcihyZXEsIGlvdWNtZCwgaXNzdWVfZmxhZ3MsIGdmcF9tYXNrKTtcbiYjNDM7XHRcdHJldCA9IHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcihyZXEsIGlvdWNtZCwgaXNzdWVfZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgaXNfd3JpdGUsIGJ1Zl9hZGRyLCBidWZfbGVuKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG91dF9mcmVlX3JlcTtcbiBcdFx0cGR1LVx1MDAzZWJpbyA9IHJlcS1cdTAwM2ViaW87XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfQlNHJiMzNDssCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O1NDU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3NpX2JzZ191cmluZ19jbWQmIzM0OywKICAgICYjMzQ7c2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLWZldGNoIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGlvX3VyaW5nIGNvbW1hbmQgaGFuZGxpbmcgZm9yIFNDU0kgQlNHIGRldmljZXMuIEl0IG1vZGlmaWVzIHNjc2lfYnNnX3VyaW5nX2NtZCBhbmQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyIHRvIHVzZSBSRUFEX09OQ0UgZm9yIHJlYWRpbmcgdXNlci1jb250cm9sbGVkIFNRRSBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIHNlY3VyaXR5IGZpeCBpbiBhIHJlYWNoYWJsZSBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWU0Y2YwMGQ0NWU1ZWNkZWU0MDNhZjJiYjBiNDRmYTEzZWRmMTVkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDI3IDEyOjE1OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYwppbmRleCBlODBkZWM1MzE3NGVhYy4uZGRiMzNhZTY4NDgzN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jCkBAIC03NiwxMiAmIzQzOzc2LDkgQEAgc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBzY3NpX2JzZ191cmluZ19jbWRfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcmVxLAogCiBzdGF0aWMgaW50IHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcihzdHJ1Y3QgcmVxdWVzdCAqcmVxLAogCQkJCSAgICBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsCi0JCQkJICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncywgZ2ZwX3QgZ2ZwX21hc2spCiYjNDM7CQkJCSAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfd3JpdGUsCiYjNDM7CQkJCSAgICB1NjQgYnVmX2FkZHIsIHVuc2lnbmVkIGxvbmcgYnVmX2xlbikKIHsKLQljb25zdCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCAqY21kID0gaW9fdXJpbmdfc3FlMTI4X2NtZChpb3VjbWQtJmd0O3NxZSwgc3RydWN0IGJzZ191cmluZ19jbWQpOwotCWJvb2wgaXNfd3JpdGUgPSBjbWQtJmd0O2RvdXRfeGZlcl9sZW4gJmd0OyAwOwotCXU2NCBidWZfYWRkciA9IGlzX3dyaXRlID8gY21kLSZndDtkb3V0X3hmZXJwIDogY21kLSZndDtkaW5feGZlcnA7Ci0JdW5zaWduZWQgbG9uZyBidWZfbGVuID0gaXNfd3JpdGUgPyBjbWQtJmd0O2RvdXRfeGZlcl9sZW4gOiBjbWQtJmd0O2Rpbl94ZmVyX2xlbjsKIAlzdHJ1Y3QgaW92X2l0ZXIgaXRlcjsKIAlpbnQgcmV0OwogCkBAIC05MSwxMCAmIzQzOzg4LDEwIEBAIHN0YXRpYyBpbnQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHN0cnVjdCByZXF1ZXN0ICpyZXEsCiAJCQkJCQkmYW1wO2l0ZXIsIGlvdWNtZCwgaXNzdWVfZmxhZ3MpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7Ci0JCXJldCA9IGJsa19ycV9tYXBfdXNlcl9pb3YocmVxLSZndDtxLCByZXEsIE5VTEwsICZhbXA7aXRlciwgZ2ZwX21hc2spOwomIzQzOwkJcmV0ID0gYmxrX3JxX21hcF91c2VyX2lvdihyZXEtJmd0O3EsIHJlcSwgTlVMTCwgJmFtcDtpdGVyLCBHRlBfS0VSTkVMKTsKIAl9IGVsc2UgewogCQlyZXQgPSBibGtfcnFfbWFwX3VzZXIocmVxLSZndDtxLCByZXEsIE5VTEwsIHVwdHI2NChidWZfYWRkciksCi0JCQkJICAgICAgYnVmX2xlbiwgZ2ZwX21hc2spOwomIzQzOwkJCQkgICAgICBidWZfbGVuLCBHRlBfS0VSTkVMKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTA0LDIxICYjNDM7MTAxLDI4IEBAIHN0YXRpYyBpbnQgc2NzaV9ic2dfdXJpbmdfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBib29sIG9wZW5fZm9yX3dyaXRlKQogewogCXN0cnVjdCBzY3NpX2JzZ191cmluZ19jbWRfcGR1ICpwZHUgPSBzY3NpX2JzZ191cmluZ19jbWRfcGR1KGlvdWNtZCk7Ci0JY29uc3Qgc3RydWN0IGJzZ191cmluZ19jbWQgKmNtZCA9IGlvX3VyaW5nX3NxZTEyOF9jbWQoaW91Y21kLSZndDtzcWUsIHN0cnVjdCBic2dfdXJpbmdfY21kKTsKJiM0MzsJY29uc3Qgc3RydWN0IGJzZ191cmluZ19jbWQgKmNtZCA9CiYjNDM7CQlpb191cmluZ19zcWUxMjhfY21kKGlvdWNtZC0mZ3Q7c3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKIAlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogCWJsa19tcV9yZXFfZmxhZ3NfdCBibGtfZmxhZ3MgPSAwOwotCWdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDsKJiM0MzsJdTY0IHJlcXVlc3QgPSBSRUFEX09OQ0UoY21kLSZndDtyZXF1ZXN0KTsKJiM0MzsJdTMyIHJlcXVlc3RfbGVuID0gUkVBRF9PTkNFKGNtZC0mZ3Q7cmVxdWVzdF9sZW4pOwomIzQzOwl1NjQgZG91dF94ZmVycCA9IFJFQURfT05DRShjbWQtJmd0O2RvdXRfeGZlcnApOwomIzQzOwl1MzIgZG91dF94ZmVyX2xlbiA9IFJFQURfT05DRShjbWQtJmd0O2RvdXRfeGZlcl9sZW4pOwomIzQzOwl1NjQgZGluX3hmZXJwID0gUkVBRF9PTkNFKGNtZC0mZ3Q7ZGluX3hmZXJwKTsKJiM0MzsJdTMyIGRpbl94ZmVyX2xlbiA9IFJFQURfT05DRShjbWQtJmd0O2Rpbl94ZmVyX2xlbik7CiYjNDM7CXUzMiBtYXhfcmVzcG9uc2VfbGVuID0gUkVBRF9PTkNFKGNtZC0mZ3Q7bWF4X3Jlc3BvbnNlX2xlbik7CiAJaW50IHJldDsKIAogCWlmIChjbWQtJmd0O3Byb3RvY29sICE9IEJTR19QUk9UT0NPTF9TQ1NJIHx8CiAJICAgIGNtZC0mZ3Q7c3VicHJvdG9jb2wgIT0gQlNHX1NVQl9QUk9UT0NPTF9TQ1NJX0NNRCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIWNtZC0mZ3Q7cmVxdWVzdCB8fCBjbWQtJmd0O3JlcXVlc3RfbGVuID09IDApCiYjNDM7CWlmICghcmVxdWVzdCB8fCByZXF1ZXN0X2xlbiA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjbWQtJmd0O2RvdXRfeGZlcl9sZW4gJmFtcDsmYW1wOyBjbWQtJmd0O2Rpbl94ZmVyX2xlbikgewomIzQzOwlpZiAoZG91dF94ZmVyX2xlbiAmYW1wOyZhbXA7IGRpbl94ZmVyX2xlbikgewogCQlwcl93YXJuX29uY2UoJiMzNDtCSURJIHN1cHBvcnQgaW4gYnNnIGhhcyBiZWVuIHJlbW92ZWQuXG4mIzM0Oyk7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xMjYsMjUgJiM0MzsxMzAsMjMgQEAgc3RhdGljIGludCBzY3NpX2JzZ191cmluZ19jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWMKIAlpZiAoY21kLSZndDtkb3V0X2lvdmVjX2NvdW50ICZndDsgMCB8fCBjbWQtJmd0O2Rpbl9pb3ZlY19jb3VudCAmZ3Q7IDApCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChpc3N1ZV9mbGFncyAmYW1wOyBJT19VUklOR19GX05PTkJMT0NLKSB7CiYjNDM7CWlmIChpc3N1ZV9mbGFncyAmYW1wOyBJT19VUklOR19GX05PTkJMT0NLKQogCQlibGtfZmxhZ3MgPSBCTEtfTVFfUkVRX05PV0FJVDsKLQkJZ2ZwX21hc2sgPSBHRlBfTk9XQUlUOwotCX0KIAotCXJlcSA9IHNjc2lfYWxsb2NfcmVxdWVzdChxLCBjbWQtJmd0O2RvdXRfeGZlcl9sZW4gPwomIzQzOwlyZXEgPSBzY3NpX2FsbG9jX3JlcXVlc3QocSwgZG91dF94ZmVyX2xlbiA/CiAJCQkJIFJFUV9PUF9EUlZfT1VUIDogUkVRX09QX0RSVl9JTiwgYmxrX2ZsYWdzKTsKIAlpZiAoSVNfRVJSKHJlcSkpCiAJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAlzY21kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpOwotCWlmIChjbWQtJmd0O3JlcXVlc3RfbGVuICZndDsgc2l6ZW9mKHNjbWQtJmd0O2NtbmQpKSB7CiYjNDM7CWlmIChyZXF1ZXN0X2xlbiAmZ3Q7IHNpemVvZihzY21kLSZndDtjbW5kKSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF9mcmVlX3JlcTsKIAl9Ci0Jc2NtZC0mZ3Q7Y21kX2xlbiA9IGNtZC0mZ3Q7cmVxdWVzdF9sZW47CiYjNDM7CXNjbWQtJmd0O2NtZF9sZW4gPSByZXF1ZXN0X2xlbjsKIAlzY21kLSZndDthbGxvd2VkID0gU0dfREVGQVVMVF9SRVRSSUVTOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKHNjbWQtJmd0O2NtbmQsIHVwdHI2NChjbWQtJmd0O3JlcXVlc3QpLCBjbWQtJmd0O3JlcXVlc3RfbGVuKSkgewomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoc2NtZC0mZ3Q7Y21uZCwgdXB0cjY0KHJlcXVlc3QpLCByZXF1ZXN0X2xlbikpIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBvdXRfZnJlZV9yZXE7CiAJfQpAQCAtMTU1LDExICYjNDM7MTU3LDE2IEBAIHN0YXRpYyBpbnQgc2NzaV9ic2dfdXJpbmdfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjCiAJfQogCiAJcGR1LSZndDtyZXNwb25zZV9hZGRyID0gY21kLSZndDtyZXNwb25zZTsKLQlzY21kLSZndDtzZW5zZV9sZW4gPSBjbWQtJmd0O21heF9yZXNwb25zZV9sZW4gPwotCQltaW4oY21kLSZndDttYXhfcmVzcG9uc2VfbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpIDogU0NTSV9TRU5TRV9CVUZGRVJTSVpFOwomIzQzOwlzY21kLSZndDtzZW5zZV9sZW4gPSBtYXhfcmVzcG9uc2VfbGVuID8KJiM0MzsJCW1pbihtYXhfcmVzcG9uc2VfbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpIDogU0NTSV9TRU5TRV9CVUZGRVJTSVpFOwomIzQzOwomIzQzOwlpZiAoZG91dF94ZmVyX2xlbiB8fCBkaW5feGZlcl9sZW4pIHsKJiM0MzsJCWJvb2wgaXNfd3JpdGUgPSBkb3V0X3hmZXJfbGVuICZndDsgMDsKJiM0MzsJCXU2NCBidWZfYWRkciA9IGlzX3dyaXRlID8gZG91dF94ZmVycCA6IGRpbl94ZmVycDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYnVmX2xlbiA9IGlzX3dyaXRlID8gZG91dF94ZmVyX2xlbiA6IGRpbl94ZmVyX2xlbjsKIAotCWlmIChjbWQtJmd0O2RvdXRfeGZlcl9sZW4gfHwgY21kLSZndDtkaW5feGZlcl9sZW4pIHsKLQkJcmV0ID0gc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHJlcSwgaW91Y21kLCBpc3N1ZV9mbGFncywgZ2ZwX21hc2spOwomIzQzOwkJcmV0ID0gc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHJlcSwgaW91Y21kLCBpc3N1ZV9mbGFncywKJiM0MzsJCQkJCSAgICAgICBpc193cml0ZSwgYnVmX2FkZHIsIGJ1Zl9sZW4pOwogCQlpZiAocmV0KQogCQkJZ290byBvdXRfZnJlZV9yZXE7CiAJCXBkdS0mZ3Q7YmlvID0gcmVxLSZndDtiaW87CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU0NTSSBCU0cgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL3Njc2kvc2NzaV9ic2cuY2AuIFJpZ2h0IGF3YXksIGl0JiMzOTtzIG1vZGlmeWluZyBib3RoIGBzY3NpX2JzZ191cmluZ19jbWRgIGFuZCBgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyYC4gSW50ZXJlc3RpbmcuIEZyb20gYSBxdWljayBnbGFuY2UsIEkgc2VlIGl0JiMzOTtzIHVzaW5nIGBSRUFEX09OQ0VgIG9uIHZhbHVlcyBmcm9tIGBjbWRgIHdoaWNoIGlzIGEgZ29vZCBjYWxsIHRvIHByZXZlbnQgdGhvc2UgbmFzdHkgVGltZS1vZi1DaGVjay10by1UaW1lLW9mLVVzZSB2dWxuZXJhYmlsaXRpZXMgcG90ZW50aWFsbHkgaW50cm9kdWNlZCBieSBpb191cmluZyBTUUVzLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aG9zZS4KCk5vdywgaXQgc2VlbXMgbGlrZSB0aGV5JiMzOTt2ZSByZW1vdmVkIGBnZnBfbWFza2AgYW5kIGFyZSBkaXJlY3RseSB1c2luZyBgR0ZQX0tFUk5FTGAgaW4gYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAuIEhvbGQgb24sIGRvZXNuJiMzOTt0IHRoYXQgZWZmZWN0aXZlbHkgYnlwYXNzIHRoZSBgSU9fVVJJTkdfRl9OT05CTE9DS2AgZmxhZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24/IFRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWMgaWYgdGhlIGludGVudGlvbiB3YXMgdG8gcmVzcGVjdCB0aGF0IGZsYWcuIExldCBtZSB0aGluay4uLm9oLCByaWdodCwgYGJsa19ycV9tYXBfdXNlcl9pb3ZgIGFuZCBgYmxrX3JxX21hcF91c2VyYCBhcmUgKmFsc28qIGNhbGxlZCB3aXRoIGBHRlBfS0VSTkVMYCwgc28gcGVyaGFwcyBpdCYjMzk7cyBjb25zaXN0ZW50LgoKQnV0LCBoYW5nIG9uLi4uIGBzY3NpX2JzZ191cmluZ19jbWRgLi4uIGlzIHRoYXQgY2FsbGVkIGZyb20gYGJzZ191cmluZ19jbWRgPyBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW4gaGVyZSB0byBzZWUgdGhlIG92ZXJhbGwgaW1wYWN0LiBMZXQgbWUgcXVpY2tseSBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciBib3RoIGBzY3NpX2JzZ191cmluZ19jbWRgIGFuZCBgYnNnX3VyaW5nX2NtZGAgdG8gYmUgc3VyZS4gR290dGEgc2VlIHdoZXJlIHRoZXNlIHRoaW5ncyBhcmUgaW52b2tlZCBhbmQgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBiZWZvcmUgSSBjYW4gZ2l2ZSB0aGlzIHBhdGNoIHRoZSBncmVlbiBsaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3NpX2JzZ191cmluZ19jbWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMTYtICovXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoxNzpzdHJ1Y3Qgc2NzaV9ic2dfdXJpbmdfY21kX3BkdSB7XG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0xOC1cdHN0cnVjdCBiaW8gKmJpbztcdFx0LyogbWFwcGVkIHVzZXIgYnVmZmVyLCB1bm1hcCBpbiB0YXNrIHdvcmsgKi9cbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0yMS19O1xuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6MjI6c3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUpIFx1MDAzYz0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBpb191cmluZ19jbWQsIHBkdSkpO1xuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMjMtXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoyNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBzY3NpX2JzZ191cmluZ19jbWRfcGR1ICpzY3NpX2JzZ191cmluZ19jbWRfcGR1KFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMjUtXHRzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQpXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0yNi17XG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoyNzpcdHJldHVybiBpb191cmluZ19jbWRfdG9fcGR1KGlvdWNtZCwgc3RydWN0IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUpO1xuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMjgtfVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jPTMxPXN0YXRpYyB2b2lkIHNjc2lfYnNnX3VyaW5nX3Rhc2tfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMzMtXHRzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQgPSBpb191cmluZ19jbWRfZnJvbV90dyh0d19yZXEpO1xuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6MzQ6XHRzdHJ1Y3Qgc2NzaV9ic2dfdXJpbmdfY21kX3BkdSAqcGR1ID0gc2NzaV9ic2dfdXJpbmdfY21kX3BkdShpb3VjbWQpO1xuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMzUtXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBwZHUtXHUwMDNlcmVxO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTY2LVxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6Njc6c3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBzY3NpX2JzZ191cmluZ19jbWRfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtNjgtXHRcdFx0XHRcdFx0ICBibGtfc3RhdHVzX3Qgc3RhdHVzLFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jPTc3PXN0YXRpYyBpbnQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtOTktXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoxMDA6c3RhdGljIGludCBzY3NpX2JzZ191cmluZ19jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTEwMS1cdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBib29sIG9wZW5fZm9yX3dyaXRlKVxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMTAyLXtcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jOjEwMzpcdHN0cnVjdCBzY3NpX2JzZ191cmluZ19jbWRfcGR1ICpwZHUgPSBzY3NpX2JzZ191cmluZ19jbWRfcGR1KGlvdWNtZCk7XG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0xMDQtXHRjb25zdCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCAqY21kID1cbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0xNzktXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoxODA6XHRyZXEtXHUwMDNlZW5kX2lvID0gc2NzaV9ic2dfdXJpbmdfY21kX2RvbmU7XG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0xODEtXHRyZXEtXHUwMDNlZW5kX2lvX2RhdGEgPSBpb3VjbWQ7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM9Mjc5PXN0cnVjdCBic2dfZGV2aWNlICpzY3NpX2JzZ19yZWdpc3Rlcl9xdWV1ZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMjgyLVx0XHRcdGRldl9uYW1lKFx1MDAyNnNkZXYtXHUwMDNlc2Rldl9nZW5kZXYpLCBzY3NpX2JzZ19zZ19pb19mbixcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jOjI4MzpcdFx0XHRzY3NpX2JzZ191cmluZ19jbWQpO1xuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMjg0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTI3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNDU0kgQlNHIGlvX3VyaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGRvdWJsZS1mZXRjaCB2dWxuZXJhYmlsaXR5IHdpdGhpbiBgc2NzaV9ic2dfdXJpbmdfY21kYC4gVGhlIGZpeCBpbnZvbHZlcyB1c2luZyBgUkVBRF9PTkNFYCBmb3IgY2VydGFpbiBmaWVsZHMgaW4gdGhlIGBjbWRgIHN0cnVjdHVyZS4gVGhhdCBtYWtlcyBzZW5zZSwgbWl0aWdhdGVzIHRoZSByYWNlIGNvbmRpdGlvbi4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBgZ2ZwX21hc2tgIHBhc3NlZCB0byBgYmxrX3JxX21hcF91c2VyX2lvdmAgYW5kIGBibGtfcnFfbWFwX3VzZXJgLiBIbW0sIHByZXZpb3VzbHkgaXQgd2FzIHVzaW5nIGBHRlBfTk9XQUlUYCB3aGVuIGBJT19VUklOR19GX05PTkJMT0NLYCB3YXMgc2V0LCBub3cgaXQmIzM5O3MgYEdGUF9LRVJORUxgLiAKClRoYXQgdHJpZ2dlcnMgYSB0aG91Z2h0OiBpZiBgSU9fVVJJTkdfRl9OT05CTE9DS2AgaXMgYWN0aXZlLCB3b3VsZG4mIzM5O3QgYEdGUF9LRVJORUxgIHBvdGVudGlhbGx5IGNhdXNlIGEgc2xlZXAgd2l0aGluIGFuIGF0b21pYyBjb250ZXh0IG9yIGEgbm9uLWJsb2NraW5nIGlvX3VyaW5nIHBhdGg/IEJ1dCB3YWl0LCBpb191cmluZyBjYW4gaGFuZGxlIHNsZWVwcyBpZiB0aGUgb3BlcmF0aW9uIHVzZXMgYSB3b3JrZXIgdGhyZWFkLiBJZiBpdCYjMzk7cyBpbmxpbmUsIGl0IHNob3VsZG4mIzM5O3Qgc2xlZXAuIFRoZSBpb191cmluZyBpbmZyYXN0cnVjdHVyZSBzaG91bGQgcmV0dXJuIGAtRUFHQUlOYCBpZiBpdCBjYW5ub3QgYmxvY2ssIHJpZ2h0PyBCdXQgaWYgd2UgZm9yY2UgYEdGUF9LRVJORUxgLCBtaWdodCBpdCBibG9jayBhbnl3YXk/IFRoaXMgaXMgd2hlcmUgdGhlIHN1YnRsZXRpZXMgY29tZSBpbnRvIHBsYXkuLi4KClRoZW4gYWdhaW4sIHRoZSBpb191cmluZyBwYXRoIGlzIGFsbG93ZWQgdG8gYmxvY2ssIHByb3ZpZGVkIGl0IGlzIGluIGEgY29udGV4dCB0aGF0ICpjYW4qIGJsb2NrLCBidXQgaWYgYElPX1VSSU5HX0ZfTk9OQkxPQ0tgIGlzIHNldCwgdGhlIGNhbGxlciBleHBsaWNpdGx5IGluZGljYXRlcyBpdCAqZG9lc24mIzM5O3QqIHdhbnQgYmxvY2tpbmcuIElmIGJsb2NraW5nIG9jY3VycyBhbnl3YXksIGl0IHdvdWxkIHZpb2xhdGUgdGhvc2Ugbm9uLWJsb2NraW5nIHNlbWFudGljcywgYnV0IGl0IGxpa2VseSB3b3VsZG4mIzM5O3QgY2F1c2UgYSBzeXN0ZW0gY3Jhc2gg4oCTIHVubGVzcyBpdCBoYXBwZW5lZCB3aXRoaW4gYSBzcGlubG9jayBvciBhIHNpbWlsYXIgY3JpdGljYWwgcmVnaW9uLiBTbywgaXMgaXQgcG90ZW50aWFsbHkgYSBzZW1hbnRpYyB2aW9sYXRpb24sIG9yIGEgbW9yZSBzZXJpb3VzIGlzc3VlPwoKUmlnaHQsIHRoaXMgcGF0Y2ggaXMgZmlyc3QgYW5kIGZvcmVtb3N0IGEgZG91YmxlLWZldGNoIGZpeC4gTGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIGJpZ2dlciBwaWN0dXJlLgoKTGV0JiMzOTtzIGxvb2sgYXQgYHNjc2lfYnNnX3VyaW5nX2NtZGAgYW5kIGBic2dfdXJpbmdfY21kYCBkaXJlY3RseS4gSG93IGlzIGl0IHJlYWNoYWJsZT8gT2gsIHJpZ2h0LCB0aHJvdWdoIGlvX3VyaW5nIG9wZXJhdGlvbnMgb24gYSBCU0cgZGV2aWNlLCBzdWNoIGFzIHRob3NlIHVuZGVyIGAvZGV2L2JzZy8qYC4gQlNHIGRldmljZXMgYXJlLCBlc3NlbnRpYWxseSwgU0NTSSBibG9jayBkZXZpY2VzLiBDYW4gd2UgZnV6eiB0aGlzPyBZZXMsIGJ5IG9wZW5pbmcgYC9kZXYvYnNnLypgIGFuZCBpc3N1aW5nIGBJT1JJTkdfT1BfVVJJTkdfQ01EYCB3aXRoIGEgYGNtZF9vcGAgY29kZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHZhbGlkIEJTRyBjb21tYW5kcy4gVGhhdCBjb3VsZCBkZWZpbml0ZWx5IGV4cG9zZSB0aGUgZml4LiBKdXN0IGEgcG9pbnQgdG8gY2hlY2sgLSBJIHNlZSBgc2NzaV9ic2dfdXJpbmdfY21kYCBpcyByZWdpc3RlcmVkIGluIGBzY3NpX2JzZ19yZWdpc3Rlcl9xdWV1ZWAuIFRoYXQgY29uZmlybXMgaXRzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Njc2lfYnNnX3JlZ2lzdGVyX3F1ZXVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jPTE5Mj1zdGF0aWMgaW50IHNjc2lfYnNnX3NnX2lvX2ZuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3Qgc2dfaW9fdjQgKmhkcixcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0yNzgtXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoyNzk6c3RydWN0IGJzZ19kZXZpY2UgKnNjc2lfYnNnX3JlZ2lzdGVyX3F1ZXVlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldilcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTI4MC17XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oPTE5Mz1zdGF0aWMgaW5saW5lIHZvaWQgc2NzaV9kaF9yZWxlYXNlX2RldmljZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpIHsgfVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaC0xOTUtXG5kcml2ZXJzL3Njc2kvc2NzaV9wcml2Lmg6MTk2OnN0cnVjdCBic2dfZGV2aWNlICpzY3NpX2JzZ19yZWdpc3Rlcl9xdWV1ZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpO1xuZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oLTE5Ny1cbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jPTE0MDA9aW50IHNjc2lfc3lzZnNfYWRkX3NkZXYoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMtMTQ0NC1cdGlmIChJU19FTkFCTEVEKENPTkZJR19CTEtfREVWX0JTRykpIHtcbmRyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmM6MTQ0NTpcdFx0c2Rldi1cdTAwM2Vic2dfZGV2ID0gc2NzaV9ic2dfcmVnaXN0ZXJfcXVldWUoc2Rldik7XG5kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jLTE0NDYtXHRcdGlmIChJU19FUlIoc2Rldi1cdTAwM2Vic2dfZGV2KSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MzgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0OiBTQ1NJL0JTRyBhbmQgaW9fdXJpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIEkgc2VlIGBzY3NpX2JzZ19yZWdpc3Rlcl9xdWV1ZWAgaXMgYmVpbmcgY2FsbGVkIGZvciBldmVyeSBTQ1NJIGRldmljZSB3aGVuIGBDT05GSUdfQkxLX0RFVl9CU0dgIGlzIGVuYWJsZWQuIFRoYXQgcmluZ3MgYSBiZWxsLi4uIGluIHRoaXMgZnV6emluZyBlbnZpcm9ubWVudCwgd2UgKmRvKiBoYXZlIFNDU0kgZGV2aWNlcywgZWl0aGVyIHRocm91Z2ggYHNjc2lfZGVidWdgIG9yIGp1c3QgdmlydHVhbCBkaXNrcy4gR29vZCwgZ29vZC4gTm93LCB0aGUgbmV4dCBwaWVjZSBpcyBgc2NzaV9ic2dfdXJpbmdfY21kYCwgdGhhdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGBJT1JJTkdfT1BfVVJJTkdfQ01EYCBvcGVyYXRpb25zIG9uIEJsb2NrIFNDU0kgR2VuZXJpYyAoQlNHKSBkZXZpY2VzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjazsgaXMgYHNjc2lfYnNnX3VyaW5nX2NtZGAgYWN0dWFsbHkgcmVhY2hhYmxlPyBZdXAsIGl0JiMzOTtzIGNvbm5lY3RlZC4gRXhjZWxsZW50LiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGRvdWJsZSBmZXRjaCB2dWxuZXJhYmlsaXR5LCBzbywgZnVuZGFtZW50YWxseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFNDU0kvQlNHIGxvZ2ljLiBEZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcgd2l0aCBmdXp6aW5nLgoKTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgYSBnb29kIHRhcmdldC4gRm9yIHRoZSBgRm9jdXNTeW1ib2xzYCwgSSYjMzk7bGwgcHJpb3JpdGl6ZSBgc2NzaV9ic2dfdXJpbmdfY21kYCBhbmQgcHJvYmFibHkgYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAuIEkgdGhpbmsgdGhvc2Ugd2lsbCBiZSBrZXkgaW4gZXhwb3NpbmcgYW55dGhpbmcgaW50ZXJlc3RpbmcuCgpUaGVuLCBmb3IgdGhlIGBFbmFibGVDb25maWdzYCwgZGVmaW5pdGVseSBgQkxLX0RFVl9CU0dgIGFuZCBhbHNvIGBJT19VUklOR2AsIHNpbmNlIHRoYXQmIzM5O3Mgd2hhdCB0cmlnZ2VycyB0aGUgY3JpdGljYWwgY29kZSBwYXRoIGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZywganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX0JTRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTQ1PWNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXG4tLVxuYmxvY2svS2NvbmZpZy00Ny1cbmJsb2NrL0tjb25maWc6NDg6Y29uZmlnIEJMS19ERVZfQlNHX0NPTU1PTlxuYmxvY2svS2NvbmZpZy00OS1cdHRyaXN0YXRlXG4tLVxuYmxvY2svS2NvbmZpZz01MT1jb25maWcgQkxLX0lDUVxuLS1cbmJsb2NrL0tjb25maWctNTMtXG5ibG9jay9LY29uZmlnOjU0OmNvbmZpZyBCTEtfREVWX0JTR0xJQlxuYmxvY2svS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7QmxvY2sgbGF5ZXIgU0cgc3VwcG9ydCB2NCBoZWxwZXIgbGliXCYjMzQ7XG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWc9MTMxPWNvbmZpZyBDSFJfREVWX1NHXG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWctMTU1LVxuZHJpdmVycy9zY3NpL0tjb25maWc6MTU2OmNvbmZpZyBCTEtfREVWX0JTR1xuZHJpdmVycy9zY3NpL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDsvZGV2L2JzZyBzdXBwb3J0IChTRyB2NClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzM2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBCTEtfREVWX0JTR2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEdpdmVuIHRoYXQgYEJMS19ERVZfQlNHYCBpcywgYXMgSSByZWNhbGwsIHJlbGF0ZWQgdG8gdGhlIGJsb2NrIGxheWVyIGFuZCBwb3RlbnRpYWxseSBTQ1NJIGRldmljZXMsIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCB0aGF0IHRoZSBgZHJpdmVycy9zY3NpL0tjb25maWdgIGZpbGUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBzdGFydCBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgY29uZGl0aW9uYWwgbG9naWMsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGFuZCBtYXliZSBzb21lIGhpbnRzIGFib3V0IHdoZXJlIHRoaXMgc3BlY2lmaWMgb3B0aW9uIGlzIHVzZWQgd2l0aGluIHRoZSBTQ1NJIHN1YnN5c3RlbS4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgcHJhY3RpY2U7IGFsd2F5cyBzdGFydCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MDpcdFxuIDE1MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlIGFuZCByZWFkXG4gMTUyOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL3Njc2kucnN0XHUwMDNlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNnLlxuIDE1MzpcdFxuIDE1NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE1NTpcdFxuIDE1NjpcdGNvbmZpZyBCTEtfREVWX0JTR1xuIDE1NzpcdFx0Ym9vbCBcJiMzNDsvZGV2L2JzZyBzdXBwb3J0IChTRyB2NClcJiMzNDtcbiAxNTg6XHRcdGRlcGVuZHMgb24gU0NTSVxuIDE1OTpcdFx0ZGVmYXVsdCB5XG4gMTYwOlx0XHRoZWxwXG4gMTYxOlx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgZ2VuZXJpYyBTRyAoU0NTSSBnZW5lcmljKSB2NCBzdXBwb3J0XG4gMTYyOlx0XHQgIGZvciBhbnkgU0NTSSBkZXZpY2UuXG4gMTYzOlx0XG4gMTY0Olx0XHQgIFRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkIGJ5IFVERVYgdG8gYWNjZXNzIGRldmljZSBzZXJpYWwgbnVtYmVycywgZXRjLlxuIDE2NTpcdFxuIDE2NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDE2NzpcdFxuIDE2ODpcdGNvbmZpZyBDSFJfREVWX1NDSFxuIDE2OTpcdFx0dHJpc3RhdGUgXCYjMzQ7U0NTSSBtZWRpYSBjaGFuZ2VyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI0NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludGVycGxheSBvZiBTQ1NJLCBCU0csIGFuZCBpb191cmluZyBmb3IgQmxvY2sgRGV2aWNlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGBCTEtfREVWX0JTR2AgaXMgaGVhdmlseSByZWxpYW50IG9uIGBTQ1NJYC4gTWFrZXMgc2Vuc2UsIG9mIGNvdXJzZSwgYXMgQlNHIChCbG9jayBTQ1NJIEdlbmVyaWMpIGlzIGZ1bmRhbWVudGFsbHkgYnVpbHQgb24gdG9wIG9mIHRoZSBTQ1NJIGluZnJhc3RydWN0dXJlLiBBbmQgbm93LCB0byBhZGQgZXZlbiBtb3JlIGNvbXBsZXhpdHksIGBJT19VUklOR2AgaXMgaW4gdGhlIG1peC4gVGhlIGludGVyYWN0aW9uIGhlcmUgaXMga2V5IHRvIGhvdyB0aGluZ3MgYXJlIGdvaW5nIHRvIHdvcmsuCgpNeSBpbml0aWFsIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGNydWNpYWwgZnVuY3Rpb25zOiBgc2NzaV9ic2dfdXJpbmdfY21kYCBhbmQgYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAuIFRob3NlIGFyZSB0aGUgcHJpbWUgc3VzcGVjdHMgZm9yIG1vZGlmaWNhdGlvbiBnaXZlbiB0aGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQsIHdoYXQgdGhlIGJlZm9yZS9hZnRlciBsb29rcyBsaWtlLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIEkgc2hvdWxkIGJyaW5nIGludG8gbXkgb3JiaXQgZm9yIGNvbnRleHQuIEFoLCB5ZXMsIGBzY3NpX2JzZ191cmluZ19jbWRfZG9uZWDigKYgZXZlbiBpZiBpdCYjMzk7cyBub3QgZGlyZWN0bHkgbW9kaWZpZWQsIHRoYXQgZnVuY3Rpb24gY2xlYXJseSBzaXRzIHdpdGhpbiB0aGUgZXhlY3V0aW9uIGZsb3cgc28gaXQmIzM5O3MgZXNzZW50aWFsIGZvciBtZSB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlLgoKU28sIGZyb20gd2hhdCBJJiMzOTttIHJlYWRpbmcsIHRoZSBwYXRjaCBoYXMgZm9jdXNlZCBpdHMgY2hhbmdlcyBvbiBgc2NzaV9ic2dfdXJpbmdfY21kYCBhbmQgYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAuIExldCYjMzk7cyB6ZXJvIGluIG9uIGBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXJgIG5vdywgc2luY2UgdGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgYW55IHVzZXIgYnVmZmVyIGhhbmRsaW5nIGxvZ2ljIGhhcyBiZWVuIGNoYW5nZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL3Njc2kvc2NzaV9ic2cuY2AgYW5kIHN0YXJ0IHJlYWRpbmfigKYKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2NzaV9ic2cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHR7XG4gIDcxOlx0XHRzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQgPSByZXEtXHUwMDNlZW5kX2lvX2RhdGE7XG4gIDcyOlx0XG4gIDczOlx0XHRpb191cmluZ19jbWRfZG9faW5fdGFza19sYXp5KGlvdWNtZCwgc2NzaV9ic2dfdXJpbmdfdGFza19jYik7XG4gIDc0Olx0XHRyZXR1cm4gUlFfRU5EX0lPX05PTkU7XG4gIDc1Olx0fVxuICA3NjpcdFxuICA3NzpcdHN0YXRpYyBpbnQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gIDc4Olx0XHRcdFx0XHQgICAgc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuICA3OTpcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncywgYm9vbCBpc193cml0ZSxcbiAgODA6XHRcdFx0XHRcdCAgICB1NjQgYnVmX2FkZHIsIHVuc2lnbmVkIGxvbmcgYnVmX2xlbilcbiAgODE6XHR7XG4gIDgyOlx0XHRzdHJ1Y3QgaW92X2l0ZXIgaXRlcjtcbiAgODM6XHRcdGludCByZXQ7XG4gIDg0Olx0XG4gIDg1Olx0XHRpZiAoaW91Y21kLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfVVJJTkdfQ01EX0ZJWEVEKSB7XG4gIDg2Olx0XHRcdHJldCA9IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWQoYnVmX2FkZHIsIGJ1Zl9sZW4sXG4gIDg3Olx0XHRcdFx0XHRcdFx0aXNfd3JpdGUgPyBXUklURSA6IFJFQUQsXG4gIDg4Olx0XHRcdFx0XHRcdFx0XHUwMDI2aXRlciwgaW91Y21kLCBpc3N1ZV9mbGFncyk7XG4gIDg5Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gIDkwOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAgOTE6XHRcdFx0cmV0ID0gYmxrX3JxX21hcF91c2VyX2lvdihyZXEtXHUwMDNlcSwgcmVxLCBOVUxMLCBcdTAwMjZpdGVyLCBHRlBfS0VSTkVMKTtcbiAgOTI6XHRcdH0gZWxzZSB7XG4gIDkzOlx0XHRcdHJldCA9IGJsa19ycV9tYXBfdXNlcihyZXEtXHUwMDNlcSwgcmVxLCBOVUxMLCB1cHRyNjQoYnVmX2FkZHIpLFxuICA5NDpcdFx0XHRcdFx0ICAgICAgYnVmX2xlbiwgR0ZQX0tFUk5FTCk7XG4gIDk1Olx0XHR9XG4gIDk2Olx0XG4gIDk3Olx0XHRyZXR1cm4gcmV0O1xuICA5ODpcdH1cbiAgOTk6XHRcbiAxMDA6XHRzdGF0aWMgaW50IHNjc2lfYnNnX3VyaW5nX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuIDEwMTpcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsIGJvb2wgb3Blbl9mb3Jfd3JpdGUpXG4gMTAyOlx0e1xuIDEwMzpcdFx0c3RydWN0IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUgKnBkdSA9IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUoaW91Y21kKTtcbiAxMDQ6XHRcdGNvbnN0IHN0cnVjdCBic2dfdXJpbmdfY21kICpjbWQgPVxuIDEwNTpcdFx0XHRpb191cmluZ19zcWUxMjhfY21kKGlvdWNtZC1cdTAwM2VzcWUsIHN0cnVjdCBic2dfdXJpbmdfY21kKTtcbiAxMDY6XHRcdHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7XG4gMTA3Olx0XHRzdHJ1Y3QgcmVxdWVzdCAqcmVxO1xuIDEwODpcdFx0YmxrX21xX3JlcV9mbGFnc190IGJsa19mbGFncyA9IDA7XG4gMTA5Olx0XHR1NjQgcmVxdWVzdCA9IFJFQURfT05DRShjbWQtXHUwMDNlcmVxdWVzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NjkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU2VjdXJpdHkgRml4IGluIHRoZSBTQ1NJIExheWVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBkb3VibGUtZmV0Y2ggdnVsbmVyYWJpbGl0eSBpbiB0aGUgYHNjc2lfYnNnX3VyaW5nX2NtZGAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgdGhlIHBvdGVudGlhbCBmb3IgYSByYWNlIGNvbmRpdGlvbiB3aGVuIGFjY2Vzc2luZyB1c2VyLWNvbnRyb2xsZWQgZGF0YSB3aXRoaW4gYGlvX3VyaW5nYCBTUUUgbWVtb3J5LiBJdCYjMzk7cyB1c2luZyBgUkVBRF9PTkNFYCB0byBzYWZlbHkgcmVhZCB0aGUgcmVsZXZhbnQgZmllbGRzIGZyb20gYGNtZGAgaW50byBsb2NhbCB2YXJpYWJsZXMuIFRoYXQmIzM5O3MgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcg4oCTIHJlZHVjaW5nIHRoZSB3aW5kb3cgb2Ygb3Bwb3J0dW5pdHkgZm9yIGF0dGFja2VycyB0byBtYW5pcHVsYXRlIGRhdGEgYmV0d2VlbiByZWFkcy4KClRoZSBvdGhlciBwYXJ0IG9mIHRoZSBmaXggaW52b2x2ZXMgbW9kaWZ5aW5nIGBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXJgIHRvIHVzZSB0aG9zZSBsb2NhbCB2YXJpYWJsZXMgaW5zdGVhZCBvZiByZS1yZWFkaW5nIGZyb20gYGNtZGAuIE1ha2VzIHNlbnNlLCBlbGltaW5hdGluZyB0aGF0IHNlY29uZCBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIGZldGNoLiBGdW5jdGlvbmFsbHksIGl0JiMzOTtzIGEgY2xlYW4gY2hhbmdlIGRpcmVjdGx5IGFkZHJlc3NpbmcgYSBzZWN1cml0eSBpc3N1ZSwgYW5kIHdlIGtub3cgYGlvX3VyaW5nYCBvbiBCbG9jayBTQ1NJIEdlbmVyaWMgKEJTRykgZGV2aWNlcyBpcyBhIHJlYWNoYWJsZSBwYXRoLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBzY3NpX2JzZ191cmluZ19jbWRgIGFuZCBgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyYC4gSSYjMzk7bGwgYWxzbyBkb3VibGUgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLCBtYWlubHkgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIC0gbG9va3MgbGlrZSBgQkxLX0RFVl9CU0dgIGFuZCBgSU9fVVJJTkdgIGFyZSB0aGUgcmVsZXZhbnQgc2V0dGluZ3MuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBJT19VUklOR2AgaXMgdGhlIHByZWNpc2UgY29uZmlnIG5hbWUsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElPX1VSSU5HJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTA3PWNvbmZpZyBBSU9cbi0tXG5pbml0L0tjb25maWctMTkxNC1cbmluaXQvS2NvbmZpZzoxOTE1OmNvbmZpZyBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5MTYtXHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xOTI0PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbi0tXG5pbml0L0tjb25maWctMTkzNi1cbmluaXQvS2NvbmZpZzoxOTM3OmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbmluaXQvS2NvbmZpZy0xOTM4LVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW9fdXJpbmcvS2NvbmZpZy01LVxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXG5pb191cmluZy9LY29uZmlnLTctXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTE3LVxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuaW9fdXJpbmcvS2NvbmZpZy0xOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNzUKCQkJCQkJCW91dHB1dDogMTQ1CgkJCQkJCQl0aG91Z2h0czogMjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCk9rYXksIHNvIHdlJiMzOTtyZSBmb2N1c2luZyBvbiB0aGlzIFNDU0kgQlNHIGlvX3VyaW5nIHZ1bG5lcmFiaWxpdHkuIEJhc2VkIG9uIG15IGFuYWx5c2lzLCBgSU9fVVJJTkdgIGlzIGRlZmluaXRlbHkgZXNzZW50aWFsIOKAkyBubyBxdWVzdGlvbiBhYm91dCB0aGF0LiBBbmQgb2YgY291cnNlLCBgQkxLX0RFVl9CU0dgIGlzIGNvcmUgdG8gdGhlIGZ1bmN0aW9uYWxpdHkuIFNpbmNlIGBCTEtfREVWX0JTR2AgcmVsaWVzIG9uIGl0LCBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYFNDU0lgIGp1c3QgdG8gYmUgc2FmZSBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgY29uZmlndXJlZC4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIGx1cmtpbmcgYXJvdW5kLiBPa2F5LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGBDT05GSUdfQkxLX0RFVl9CU0dgIGlzIHRoZSBrZXkgb25lIHRvIGVuYWJsZSBoZXJlLgoKQWxyaWdodCwgdGltZSB0byBmb3JtdWxhdGUgdGhlIGZpbmFsIHBhY2thZ2UuIEhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3Q6CgpgV29ydGhGdXp6aW5nOiB0cnVlYCDigJMgQWJzb2x1dGVseS4gVGhpcyBpcyBhIGNsZWFyIHRhcmdldCBmb3IgZnV6emluZy4KYEZvY3VzU3ltYm9sczogWyYjMzQ7c2NzaV9ic2dfdXJpbmdfY21kJiMzNDssICYjMzQ7c2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyJiMzNDtdYCDigJMgVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gemVybyBpbiBvbi4gVGhlIHZ1bG5lcmFiaWxpdHkgZGlyZWN0bHkgaW1wYWN0cyB0aGVtLgpgRW5hYmxlQ29uZmlnczogWyYjMzQ7QkxLX0RFVl9CU0cmIzM0OywgJiMzNDtJT19VUklORyYjMzQ7LCAmIzM0O1NDU0kmIzM0O11gIOKAkyBUaGVzZSB0aHJlZSBjb25maWd1cmF0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIGV4cG9zZSBhbmQgZXhlcmNpc2UgdGhlIHZ1bG5lcmFibGUgY29kZS4KYFJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtZmV0Y2ggdnVsbmVyYWJpbGl0eSBpbiB0aGUgaW9fdXJpbmcgY29tbWFuZCBoYW5kbGluZyBmb3IgU0NTSSBCU0cgZGV2aWNlcy4gSXQgbW9kaWZpZXMgc2NzaV9ic2dfdXJpbmdfY21kIGFuZCBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIgdG8gdXNlIFJFQURfT05DRSBmb3IgcmVhZGluZyB1c2VyLWNvbnRyb2xsZWQgU1FFIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgc2VjdXJpdHkgZml4IGluIGEgcmVhY2hhYmxlIHBhdGguJiMzNDtgIOKAkyBUaGlzIGRvY3VtZW50cyB0aGUgY29yZSByYXRpb25hbGUgYmVoaW5kIHRoZSBjb25maWd1cmF0aW9uLiBJdCBoaWdobGlnaHRzIHRoZSBzZWN1cml0eSBmaXgsIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQsIGFuZCB0aGUgdW5kZXJseWluZyB2dWxuZXJhYmlsaXR5IChkb3VibGUtZmV0Y2gpLiBJdCYjMzk7cyBhbHNvIHJlYWNoYWJsZSwgYW5kIHRodXMgZnV6emFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0JTRyYjMzQ7LAogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2NzaV9ic2dfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3Njc2lfYnNnX21hcF91c2VyX2J1ZmZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZS1mZXRjaCB2dWxuZXJhYmlsaXR5IGluIHRoZSBpb191cmluZyBjb21tYW5kIGhhbmRsaW5nIGZvciBTQ1NJIEJTRyBkZXZpY2VzLiBJdCBtb2RpZmllcyBzY3NpX2JzZ191cmluZ19jbWQgYW5kIHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlciB0byB1c2UgUkVBRF9PTkNFIGZvciByZWFkaW5nIHVzZXItY29udHJvbGxlZCBTUUUgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBzZWN1cml0eSBmaXggaW4gYSByZWFjaGFibGUgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9CU0cmIzM0OywKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7U0NTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Njc2lfYnNnX3VyaW5nX2NtZCYjMzQ7LAogICAgJiMzNDtzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtZmV0Y2ggdnVsbmVyYWJpbGl0eSBpbiB0aGUgaW9fdXJpbmcgY29tbWFuZCBoYW5kbGluZyBmb3IgU0NTSSBCU0cgZGV2aWNlcy4gSXQgbW9kaWZpZXMgc2NzaV9ic2dfdXJpbmdfY21kIGFuZCBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIgdG8gdXNlIFJFQURfT05DRSBmb3IgcmVhZGluZyB1c2VyLWNvbnRyb2xsZWQgU1FFIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgc2VjdXJpdHkgZml4IGluIGEgcmVhY2hhYmxlIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjoxNTo0MS4xMDA5MTIwOTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAwNTU3ODQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0JTR1wiLFxuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3NpX2JzZ191cmluZ19jbWRcIixcbiAgICBcInNjc2lfYnNnX21hcF91c2VyX2J1ZmZlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLWZldGNoIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGlvX3VyaW5nIGNvbW1hbmQgaGFuZGxpbmcgZm9yIFNDU0kgQlNHIGRldmljZXMuIEl0IG1vZGlmaWVzIHNjc2lfYnNnX3VyaW5nX2NtZCBhbmQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyIHRvIHVzZSBSRUFEX09OQ0UgZm9yIHJlYWRpbmcgdXNlci1jb250cm9sbGVkIFNRRSBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIHNlY3VyaXR5IGZpeCBpbiBhIHJlYWNoYWJsZSBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjoxNTo0MS4xMDA5MTgxNzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MjMyMTgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVlNGNmMDBkNDVlNWVjZGVlNDAzYWYyYmIwYjQ0ZmExM2VkZjE1ZDdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTI6MTU6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuY1xcbmluZGV4IGU4MGRlYzUzMTc0ZWFjLi5kZGIzM2FlNjg0ODM3YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuY1xcbisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXFxuQEAgLTc2LDEyICs3Niw5IEBAIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgc2NzaV9ic2dfdXJpbmdfY21kX2RvbmUoc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4gXFxuIHN0YXRpYyBpbnQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXFxuLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBib29sIGlzX3dyaXRlLFxcbitcXHRcXHRcXHRcXHQgICAgdTY0IGJ1Zl9hZGRyLCB1bnNpZ25lZCBsb25nIGJ1Zl9sZW4pXFxuIHtcXG4tXFx0Y29uc3Qgc3RydWN0IGJzZ191cmluZ19jbWQgKmNtZCA9IGlvX3VyaW5nX3NxZTEyOF9jbWQoaW91Y21kLVxcdTAwM2VzcWUsIHN0cnVjdCBic2dfdXJpbmdfY21kKTtcXG4tXFx0Ym9vbCBpc193cml0ZSA9IGNtZC1cXHUwMDNlZG91dF94ZmVyX2xlbiBcXHUwMDNlIDA7XFxuLVxcdHU2NCBidWZfYWRkciA9IGlzX3dyaXRlID8gY21kLVxcdTAwM2Vkb3V0X3hmZXJwIDogY21kLVxcdTAwM2VkaW5feGZlcnA7XFxuLVxcdHVuc2lnbmVkIGxvbmcgYnVmX2xlbiA9IGlzX3dyaXRlID8gY21kLVxcdTAwM2Vkb3V0X3hmZXJfbGVuIDogY21kLVxcdTAwM2VkaW5feGZlcl9sZW47XFxuIFxcdHN0cnVjdCBpb3ZfaXRlciBpdGVyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtOTEsMTAgKzg4LDEwIEBAIHN0YXRpYyBpbnQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZpdGVyLCBpb3VjbWQsIGlzc3VlX2ZsYWdzKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdHJldCA9IGJsa19ycV9tYXBfdXNlcl9pb3YocmVxLVxcdTAwM2VxLCByZXEsIE5VTEwsIFxcdTAwMjZpdGVyLCBnZnBfbWFzayk7XFxuK1xcdFxcdHJldCA9IGJsa19ycV9tYXBfdXNlcl9pb3YocmVxLVxcdTAwM2VxLCByZXEsIE5VTEwsIFxcdTAwMjZpdGVyLCBHRlBfS0VSTkVMKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0cmV0ID0gYmxrX3JxX21hcF91c2VyKHJlcS1cXHUwMDNlcSwgcmVxLCBOVUxMLCB1cHRyNjQoYnVmX2FkZHIpLFxcbi1cXHRcXHRcXHRcXHQgICAgICBidWZfbGVuLCBnZnBfbWFzayk7XFxuK1xcdFxcdFxcdFxcdCAgICAgIGJ1Zl9sZW4sIEdGUF9LRVJORUwpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC0xMDQsMjEgKzEwMSwyOCBAQCBzdGF0aWMgaW50IHNjc2lfYnNnX3VyaW5nX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y1xcbiBcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBib29sIG9wZW5fZm9yX3dyaXRlKVxcbiB7XFxuIFxcdHN0cnVjdCBzY3NpX2JzZ191cmluZ19jbWRfcGR1ICpwZHUgPSBzY3NpX2JzZ191cmluZ19jbWRfcGR1KGlvdWNtZCk7XFxuLVxcdGNvbnN0IHN0cnVjdCBic2dfdXJpbmdfY21kICpjbWQgPSBpb191cmluZ19zcWUxMjhfY21kKGlvdWNtZC1cXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XFxuK1xcdGNvbnN0IHN0cnVjdCBic2dfdXJpbmdfY21kICpjbWQgPVxcbitcXHRcXHRpb191cmluZ19zcWUxMjhfY21kKGlvdWNtZC1cXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XFxuIFxcdHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7XFxuIFxcdHN0cnVjdCByZXF1ZXN0ICpyZXE7XFxuIFxcdGJsa19tcV9yZXFfZmxhZ3NfdCBibGtfZmxhZ3MgPSAwO1xcbi1cXHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XFxuK1xcdHU2NCByZXF1ZXN0ID0gUkVBRF9PTkNFKGNtZC1cXHUwMDNlcmVxdWVzdCk7XFxuK1xcdHUzMiByZXF1ZXN0X2xlbiA9IFJFQURfT05DRShjbWQtXFx1MDAzZXJlcXVlc3RfbGVuKTtcXG4rXFx0dTY0IGRvdXRfeGZlcnAgPSBSRUFEX09OQ0UoY21kLVxcdTAwM2Vkb3V0X3hmZXJwKTtcXG4rXFx0dTMyIGRvdXRfeGZlcl9sZW4gPSBSRUFEX09OQ0UoY21kLVxcdTAwM2Vkb3V0X3hmZXJfbGVuKTtcXG4rXFx0dTY0IGRpbl94ZmVycCA9IFJFQURfT05DRShjbWQtXFx1MDAzZWRpbl94ZmVycCk7XFxuK1xcdHUzMiBkaW5feGZlcl9sZW4gPSBSRUFEX09OQ0UoY21kLVxcdTAwM2VkaW5feGZlcl9sZW4pO1xcbitcXHR1MzIgbWF4X3Jlc3BvbnNlX2xlbiA9IFJFQURfT05DRShjbWQtXFx1MDAzZW1heF9yZXNwb25zZV9sZW4pO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aWYgKGNtZC1cXHUwMDNlcHJvdG9jb2wgIT0gQlNHX1BST1RPQ09MX1NDU0kgfHxcXG4gXFx0ICAgIGNtZC1cXHUwMDNlc3VicHJvdG9jb2wgIT0gQlNHX1NVQl9QUk9UT0NPTF9TQ1NJX0NNRClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoIWNtZC1cXHUwMDNlcmVxdWVzdCB8fCBjbWQtXFx1MDAzZXJlcXVlc3RfbGVuID09IDApXFxuK1xcdGlmICghcmVxdWVzdCB8fCByZXF1ZXN0X2xlbiA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdGlmIChjbWQtXFx1MDAzZWRvdXRfeGZlcl9sZW4gXFx1MDAyNlxcdTAwMjYgY21kLVxcdTAwM2VkaW5feGZlcl9sZW4pIHtcXG4rXFx0aWYgKGRvdXRfeGZlcl9sZW4gXFx1MDAyNlxcdTAwMjYgZGluX3hmZXJfbGVuKSB7XFxuIFxcdFxcdHByX3dhcm5fb25jZShcXFwiQklESSBzdXBwb3J0IGluIGJzZyBoYXMgYmVlbiByZW1vdmVkLlxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbkBAIC0xMjYsMjUgKzEzMCwyMyBAQCBzdGF0aWMgaW50IHNjc2lfYnNnX3VyaW5nX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y1xcbiBcXHRpZiAoY21kLVxcdTAwM2Vkb3V0X2lvdmVjX2NvdW50IFxcdTAwM2UgMCB8fCBjbWQtXFx1MDAzZWRpbl9pb3ZlY19jb3VudCBcXHUwMDNlIDApXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdGlmIChpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spIHtcXG4rXFx0aWYgKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSylcXG4gXFx0XFx0YmxrX2ZsYWdzID0gQkxLX01RX1JFUV9OT1dBSVQ7XFxuLVxcdFxcdGdmcF9tYXNrID0gR0ZQX05PV0FJVDtcXG4tXFx0fVxcbiBcXG4tXFx0cmVxID0gc2NzaV9hbGxvY19yZXF1ZXN0KHEsIGNtZC1cXHUwMDNlZG91dF94ZmVyX2xlbiA/XFxuK1xcdHJlcSA9IHNjc2lfYWxsb2NfcmVxdWVzdChxLCBkb3V0X3hmZXJfbGVuID9cXG4gXFx0XFx0XFx0XFx0IFJFUV9PUF9EUlZfT1VUIDogUkVRX09QX0RSVl9JTiwgYmxrX2ZsYWdzKTtcXG4gXFx0aWYgKElTX0VSUihyZXEpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihyZXEpO1xcbiBcXG4gXFx0c2NtZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTtcXG4tXFx0aWYgKGNtZC1cXHUwMDNlcmVxdWVzdF9sZW4gXFx1MDAzZSBzaXplb2Yoc2NtZC1cXHUwMDNlY21uZCkpIHtcXG4rXFx0aWYgKHJlcXVlc3RfbGVuIFxcdTAwM2Ugc2l6ZW9mKHNjbWQtXFx1MDAzZWNtbmQpKSB7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0X2ZyZWVfcmVxO1xcbiBcXHR9XFxuLVxcdHNjbWQtXFx1MDAzZWNtZF9sZW4gPSBjbWQtXFx1MDAzZXJlcXVlc3RfbGVuO1xcbitcXHRzY21kLVxcdTAwM2VjbWRfbGVuID0gcmVxdWVzdF9sZW47XFxuIFxcdHNjbWQtXFx1MDAzZWFsbG93ZWQgPSBTR19ERUZBVUxUX1JFVFJJRVM7XFxuIFxcbi1cXHRpZiAoY29weV9mcm9tX3VzZXIoc2NtZC1cXHUwMDNlY21uZCwgdXB0cjY0KGNtZC1cXHUwMDNlcmVxdWVzdCksIGNtZC1cXHUwMDNlcmVxdWVzdF9sZW4pKSB7XFxuK1xcdGlmIChjb3B5X2Zyb21fdXNlcihzY21kLVxcdTAwM2VjbW5kLCB1cHRyNjQocmVxdWVzdCksIHJlcXVlc3RfbGVuKSkge1xcbiBcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbiBcXHRcXHRnb3RvIG91dF9mcmVlX3JlcTtcXG4gXFx0fVxcbkBAIC0xNTUsMTEgKzE1NywxNiBAQCBzdGF0aWMgaW50IHNjc2lfYnNnX3VyaW5nX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y1xcbiBcXHR9XFxuIFxcbiBcXHRwZHUtXFx1MDAzZXJlc3BvbnNlX2FkZHIgPSBjbWQtXFx1MDAzZXJlc3BvbnNlO1xcbi1cXHRzY21kLVxcdTAwM2VzZW5zZV9sZW4gPSBjbWQtXFx1MDAzZW1heF9yZXNwb25zZV9sZW4gP1xcbi1cXHRcXHRtaW4oY21kLVxcdTAwM2VtYXhfcmVzcG9uc2VfbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpIDogU0NTSV9TRU5TRV9CVUZGRVJTSVpFO1xcbitcXHRzY21kLVxcdTAwM2VzZW5zZV9sZW4gPSBtYXhfcmVzcG9uc2VfbGVuID9cXG4rXFx0XFx0bWluKG1heF9yZXNwb25zZV9sZW4sIFNDU0lfU0VOU0VfQlVGRkVSU0laRSkgOiBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7XFxuK1xcbitcXHRpZiAoZG91dF94ZmVyX2xlbiB8fCBkaW5feGZlcl9sZW4pIHtcXG4rXFx0XFx0Ym9vbCBpc193cml0ZSA9IGRvdXRfeGZlcl9sZW4gXFx1MDAzZSAwO1xcbitcXHRcXHR1NjQgYnVmX2FkZHIgPSBpc193cml0ZSA/IGRvdXRfeGZlcnAgOiBkaW5feGZlcnA7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYnVmX2xlbiA9IGlzX3dyaXRlID8gZG91dF94ZmVyX2xlbiA6IGRpbl94ZmVyX2xlbjtcXG4gXFxuLVxcdGlmIChjbWQtXFx1MDAzZWRvdXRfeGZlcl9sZW4gfHwgY21kLVxcdTAwM2VkaW5feGZlcl9sZW4pIHtcXG4tXFx0XFx0cmV0ID0gc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHJlcSwgaW91Y21kLCBpc3N1ZV9mbGFncywgZ2ZwX21hc2spO1xcbitcXHRcXHRyZXQgPSBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIocmVxLCBpb3VjbWQsIGlzc3VlX2ZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgaXNfd3JpdGUsIGJ1Zl9hZGRyLCBidWZfbGVuKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0Z290byBvdXRfZnJlZV9yZXE7XFxuIFxcdFxcdHBkdS1cXHUwMDNlYmlvID0gcmVxLVxcdTAwM2ViaW87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjE1OjQxLjY0NDIxOTIxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ2NDYyMjU4NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfQlNHXCIsXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiU0NTSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjc2lfYnNnX3VyaW5nX2NtZFwiLFxuICAgIFwic2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtZmV0Y2ggdnVsbmVyYWJpbGl0eSBpbiB0aGUgaW9fdXJpbmcgY29tbWFuZCBoYW5kbGluZyBmb3IgU0NTSSBCU0cgZGV2aWNlcy4gSXQgbW9kaWZpZXMgc2NzaV9ic2dfdXJpbmdfY21kIGFuZCBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIgdG8gdXNlIFJFQURfT05DRSBmb3IgcmVhZGluZyB1c2VyLWNvbnRyb2xsZWQgU1FFIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgc2VjdXJpdHkgZml4IGluIGEgcmVhY2hhYmxlIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVlNGNmMDBkNDVlNWVjZGVlNDAzYWYyYmIwYjQ0ZmExM2VkZjE1ZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMjoxNTozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmNcbmluZGV4IGU4MGRlYzUzMTc0ZWFjLi5kZGIzM2FlNjg0ODM3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXG4rKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuY1xuQEAgLTc2LDEyICs3Niw5IEBAIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgc2NzaV9ic2dfdXJpbmdfY21kX2RvbmUoc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcbiBzdGF0aWMgaW50IHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcihzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbi1cdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuK1x0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncywgYm9vbCBpc193cml0ZSxcbitcdFx0XHRcdCAgICB1NjQgYnVmX2FkZHIsIHVuc2lnbmVkIGxvbmcgYnVmX2xlbilcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCAqY21kID0gaW9fdXJpbmdfc3FlMTI4X2NtZChpb3VjbWQtXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XG4tXHRib29sIGlzX3dyaXRlID0gY21kLVx1MDAzZWRvdXRfeGZlcl9sZW4gXHUwMDNlIDA7XG4tXHR1NjQgYnVmX2FkZHIgPSBpc193cml0ZSA/IGNtZC1cdTAwM2Vkb3V0X3hmZXJwIDogY21kLVx1MDAzZWRpbl94ZmVycDtcbi1cdHVuc2lnbmVkIGxvbmcgYnVmX2xlbiA9IGlzX3dyaXRlID8gY21kLVx1MDAzZWRvdXRfeGZlcl9sZW4gOiBjbWQtXHUwMDNlZGluX3hmZXJfbGVuO1xuIFx0c3RydWN0IGlvdl9pdGVyIGl0ZXI7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTkxLDEwICs4OCwxMCBAQCBzdGF0aWMgaW50IHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcihzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdFx0XHRcdFx1MDAyNml0ZXIsIGlvdWNtZCwgaXNzdWVfZmxhZ3MpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdHJldCA9IGJsa19ycV9tYXBfdXNlcl9pb3YocmVxLVx1MDAzZXEsIHJlcSwgTlVMTCwgXHUwMDI2aXRlciwgZ2ZwX21hc2spO1xuK1x0XHRyZXQgPSBibGtfcnFfbWFwX3VzZXJfaW92KHJlcS1cdTAwM2VxLCByZXEsIE5VTEwsIFx1MDAyNml0ZXIsIEdGUF9LRVJORUwpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0ID0gYmxrX3JxX21hcF91c2VyKHJlcS1cdTAwM2VxLCByZXEsIE5VTEwsIHVwdHI2NChidWZfYWRkciksXG4tXHRcdFx0XHQgICAgICBidWZfbGVuLCBnZnBfbWFzayk7XG4rXHRcdFx0XHQgICAgICBidWZfbGVuLCBHRlBfS0VSTkVMKTtcbiBcdH1cbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMTA0LDIxICsxMDEsMjggQEAgc3RhdGljIGludCBzY3NpX2JzZ191cmluZ19jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNcbiBcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBib29sIG9wZW5fZm9yX3dyaXRlKVxuIHtcbiBcdHN0cnVjdCBzY3NpX2JzZ191cmluZ19jbWRfcGR1ICpwZHUgPSBzY3NpX2JzZ191cmluZ19jbWRfcGR1KGlvdWNtZCk7XG4tXHRjb25zdCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCAqY21kID0gaW9fdXJpbmdfc3FlMTI4X2NtZChpb3VjbWQtXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XG4rXHRjb25zdCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCAqY21kID1cbitcdFx0aW9fdXJpbmdfc3FlMTI4X2NtZChpb3VjbWQtXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XG4gXHRzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kO1xuIFx0c3RydWN0IHJlcXVlc3QgKnJlcTtcbiBcdGJsa19tcV9yZXFfZmxhZ3NfdCBibGtfZmxhZ3MgPSAwO1xuLVx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xuK1x0dTY0IHJlcXVlc3QgPSBSRUFEX09OQ0UoY21kLVx1MDAzZXJlcXVlc3QpO1xuK1x0dTMyIHJlcXVlc3RfbGVuID0gUkVBRF9PTkNFKGNtZC1cdTAwM2VyZXF1ZXN0X2xlbik7XG4rXHR1NjQgZG91dF94ZmVycCA9IFJFQURfT05DRShjbWQtXHUwMDNlZG91dF94ZmVycCk7XG4rXHR1MzIgZG91dF94ZmVyX2xlbiA9IFJFQURfT05DRShjbWQtXHUwMDNlZG91dF94ZmVyX2xlbik7XG4rXHR1NjQgZGluX3hmZXJwID0gUkVBRF9PTkNFKGNtZC1cdTAwM2VkaW5feGZlcnApO1xuK1x0dTMyIGRpbl94ZmVyX2xlbiA9IFJFQURfT05DRShjbWQtXHUwMDNlZGluX3hmZXJfbGVuKTtcbitcdHUzMiBtYXhfcmVzcG9uc2VfbGVuID0gUkVBRF9PTkNFKGNtZC1cdTAwM2VtYXhfcmVzcG9uc2VfbGVuKTtcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAoY21kLVx1MDAzZXByb3RvY29sICE9IEJTR19QUk9UT0NPTF9TQ1NJIHx8XG4gXHQgICAgY21kLVx1MDAzZXN1YnByb3RvY29sICE9IEJTR19TVUJfUFJPVE9DT0xfU0NTSV9DTUQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKCFjbWQtXHUwMDNlcmVxdWVzdCB8fCBjbWQtXHUwMDNlcmVxdWVzdF9sZW4gPT0gMClcbitcdGlmICghcmVxdWVzdCB8fCByZXF1ZXN0X2xlbiA9PSAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChjbWQtXHUwMDNlZG91dF94ZmVyX2xlbiBcdTAwMjZcdTAwMjYgY21kLVx1MDAzZWRpbl94ZmVyX2xlbikge1xuK1x0aWYgKGRvdXRfeGZlcl9sZW4gXHUwMDI2XHUwMDI2IGRpbl94ZmVyX2xlbikge1xuIFx0XHRwcl93YXJuX29uY2UoXCJCSURJIHN1cHBvcnQgaW4gYnNnIGhhcyBiZWVuIHJlbW92ZWQuXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5AQCAtMTI2LDI1ICsxMzAsMjMgQEAgc3RhdGljIGludCBzY3NpX2JzZ191cmluZ19jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNcbiBcdGlmIChjbWQtXHUwMDNlZG91dF9pb3ZlY19jb3VudCBcdTAwM2UgMCB8fCBjbWQtXHUwMDNlZGluX2lvdmVjX2NvdW50IFx1MDAzZSAwKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spIHtcbitcdGlmIChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSylcbiBcdFx0YmxrX2ZsYWdzID0gQkxLX01RX1JFUV9OT1dBSVQ7XG4tXHRcdGdmcF9tYXNrID0gR0ZQX05PV0FJVDtcbi1cdH1cbiBcbi1cdHJlcSA9IHNjc2lfYWxsb2NfcmVxdWVzdChxLCBjbWQtXHUwMDNlZG91dF94ZmVyX2xlbiA/XG4rXHRyZXEgPSBzY3NpX2FsbG9jX3JlcXVlc3QocSwgZG91dF94ZmVyX2xlbiA/XG4gXHRcdFx0XHQgUkVRX09QX0RSVl9PVVQgOiBSRVFfT1BfRFJWX0lOLCBibGtfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUihyZXEpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihyZXEpO1xuIFxuIFx0c2NtZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTtcbi1cdGlmIChjbWQtXHUwMDNlcmVxdWVzdF9sZW4gXHUwMDNlIHNpemVvZihzY21kLVx1MDAzZWNtbmQpKSB7XG4rXHRpZiAocmVxdWVzdF9sZW4gXHUwMDNlIHNpemVvZihzY21kLVx1MDAzZWNtbmQpKSB7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfcmVxO1xuIFx0fVxuLVx0c2NtZC1cdTAwM2VjbWRfbGVuID0gY21kLVx1MDAzZXJlcXVlc3RfbGVuO1xuK1x0c2NtZC1cdTAwM2VjbWRfbGVuID0gcmVxdWVzdF9sZW47XG4gXHRzY21kLVx1MDAzZWFsbG93ZWQgPSBTR19ERUZBVUxUX1JFVFJJRVM7XG4gXG4tXHRpZiAoY29weV9mcm9tX3VzZXIoc2NtZC1cdTAwM2VjbW5kLCB1cHRyNjQoY21kLVx1MDAzZXJlcXVlc3QpLCBjbWQtXHUwMDNlcmVxdWVzdF9sZW4pKSB7XG4rXHRpZiAoY29weV9mcm9tX3VzZXIoc2NtZC1cdTAwM2VjbW5kLCB1cHRyNjQocmVxdWVzdCksIHJlcXVlc3RfbGVuKSkge1xuIFx0XHRyZXQgPSAtRUZBVUxUO1xuIFx0XHRnb3RvIG91dF9mcmVlX3JlcTtcbiBcdH1cbkBAIC0xNTUsMTEgKzE1NywxNiBAQCBzdGF0aWMgaW50IHNjc2lfYnNnX3VyaW5nX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y1xuIFx0fVxuIFxuIFx0cGR1LVx1MDAzZXJlc3BvbnNlX2FkZHIgPSBjbWQtXHUwMDNlcmVzcG9uc2U7XG4tXHRzY21kLVx1MDAzZXNlbnNlX2xlbiA9IGNtZC1cdTAwM2VtYXhfcmVzcG9uc2VfbGVuID9cbi1cdFx0bWluKGNtZC1cdTAwM2VtYXhfcmVzcG9uc2VfbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpIDogU0NTSV9TRU5TRV9CVUZGRVJTSVpFO1xuK1x0c2NtZC1cdTAwM2VzZW5zZV9sZW4gPSBtYXhfcmVzcG9uc2VfbGVuID9cbitcdFx0bWluKG1heF9yZXNwb25zZV9sZW4sIFNDU0lfU0VOU0VfQlVGRkVSU0laRSkgOiBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7XG4rXG4rXHRpZiAoZG91dF94ZmVyX2xlbiB8fCBkaW5feGZlcl9sZW4pIHtcbitcdFx0Ym9vbCBpc193cml0ZSA9IGRvdXRfeGZlcl9sZW4gXHUwMDNlIDA7XG4rXHRcdHU2NCBidWZfYWRkciA9IGlzX3dyaXRlID8gZG91dF94ZmVycCA6IGRpbl94ZmVycDtcbitcdFx0dW5zaWduZWQgbG9uZyBidWZfbGVuID0gaXNfd3JpdGUgPyBkb3V0X3hmZXJfbGVuIDogZGluX3hmZXJfbGVuO1xuIFxuLVx0aWYgKGNtZC1cdTAwM2Vkb3V0X3hmZXJfbGVuIHx8IGNtZC1cdTAwM2VkaW5feGZlcl9sZW4pIHtcbi1cdFx0cmV0ID0gc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHJlcSwgaW91Y21kLCBpc3N1ZV9mbGFncywgZ2ZwX21hc2spO1xuK1x0XHRyZXQgPSBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIocmVxLCBpb3VjbWQsIGlzc3VlX2ZsYWdzLFxuK1x0XHRcdFx0XHQgICAgICAgaXNfd3JpdGUsIGJ1Zl9hZGRyLCBidWZfbGVuKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG91dF9mcmVlX3JlcTtcbiBcdFx0cGR1LVx1MDAzZWJpbyA9IHJlcS1cdTAwM2ViaW87XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjoxNTo0MS42NDQyMjEwNjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTk1MDAwMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNDU0kgQlNHIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyB0b3VjaGluZyBgZHJpdmVycy9zY3NpL3Njc2lfYnNnLmNgLiBSaWdodCBhd2F5LCBpdCdzIG1vZGlmeWluZyBib3RoIGBzY3NpX2JzZ191cmluZ19jbWRgIGFuZCBgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyYC4gSW50ZXJlc3RpbmcuIEZyb20gYSBxdWljayBnbGFuY2UsIEkgc2VlIGl0J3MgdXNpbmcgYFJFQURfT05DRWAgb24gdmFsdWVzIGZyb20gYGNtZGAgd2hpY2ggaXMgYSBnb29kIGNhbGwgdG8gcHJldmVudCB0aG9zZSBuYXN0eSBUaW1lLW9mLUNoZWNrLXRvLVRpbWUtb2YtVXNlIHZ1bG5lcmFiaWxpdGllcyBwb3RlbnRpYWxseSBpbnRyb2R1Y2VkIGJ5IGlvX3VyaW5nIFNRRXMuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRob3NlLlxuXG5Ob3csIGl0IHNlZW1zIGxpa2UgdGhleSd2ZSByZW1vdmVkIGBnZnBfbWFza2AgYW5kIGFyZSBkaXJlY3RseSB1c2luZyBgR0ZQX0tFUk5FTGAgaW4gYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAuIEhvbGQgb24sIGRvZXNuJ3QgdGhhdCBlZmZlY3RpdmVseSBieXBhc3MgdGhlIGBJT19VUklOR19GX05PTkJMT0NLYCBmbGFnIGZvciBtZW1vcnkgYWxsb2NhdGlvbj8gVGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYyBpZiB0aGUgaW50ZW50aW9uIHdhcyB0byByZXNwZWN0IHRoYXQgZmxhZy4gTGV0IG1lIHRoaW5rLi4ub2gsIHJpZ2h0LCBgYmxrX3JxX21hcF91c2VyX2lvdmAgYW5kIGBibGtfcnFfbWFwX3VzZXJgIGFyZSAqYWxzbyogY2FsbGVkIHdpdGggYEdGUF9LRVJORUxgLCBzbyBwZXJoYXBzIGl0J3MgY29uc2lzdGVudC5cblxuQnV0LCBoYW5nIG9uLi4uIGBzY3NpX2JzZ191cmluZ19jbWRgLi4uIGlzIHRoYXQgY2FsbGVkIGZyb20gYGJzZ191cmluZ19jbWRgPyBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbiBoZXJlIHRvIHNlZSB0aGUgb3ZlcmFsbCBpbXBhY3QuIExldCBtZSBxdWlja2x5IHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGJvdGggYHNjc2lfYnNnX3VyaW5nX2NtZGAgYW5kIGBic2dfdXJpbmdfY21kYCB0byBiZSBzdXJlLiBHb3R0YSBzZWUgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBpbnZva2VkIGFuZCB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIGJlZm9yZSBJIGNhbiBnaXZlIHRoaXMgcGF0Y2ggdGhlIGdyZWVuIGxpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODM2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MTU6NDcuMjM5MjIzNDcxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTc3NzcxODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NzaV9ic2dfdXJpbmdfY21kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTE2LSAqL1xcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jOjE3OnN0cnVjdCBzY3NpX2JzZ191cmluZ19jbWRfcGR1IHtcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0xOC1cXHRzdHJ1Y3QgYmlvICpiaW87XFx0XFx0LyogbWFwcGVkIHVzZXIgYnVmZmVyLCB1bm1hcCBpbiB0YXNrIHdvcmsgKi9cXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTIxLX07XFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6MjI6c3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUpIFxcdTAwM2M9IHNpemVvZl9maWVsZChzdHJ1Y3QgaW9fdXJpbmdfY21kLCBwZHUpKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0yMy1cXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoyNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBzY3NpX2JzZ191cmluZ19jbWRfcGR1ICpzY3NpX2JzZ191cmluZ19jbWRfcGR1KFxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTI1LVxcdHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZClcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0yNi17XFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6Mjc6XFx0cmV0dXJuIGlvX3VyaW5nX2NtZF90b19wZHUoaW91Y21kLCBzdHJ1Y3Qgc2NzaV9ic2dfdXJpbmdfY21kX3BkdSk7XFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMjgtfVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM9MzE9c3RhdGljIHZvaWQgc2NzaV9ic2dfdXJpbmdfdGFza19jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTMzLVxcdHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCA9IGlvX3VyaW5nX2NtZF9mcm9tX3R3KHR3X3JlcSk7XFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6MzQ6XFx0c3RydWN0IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUgKnBkdSA9IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUoaW91Y21kKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0zNS1cXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBwZHUtXFx1MDAzZXJlcTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTY2LVxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jOjY3OnN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgc2NzaV9ic2dfdXJpbmdfY21kX2RvbmUoc3RydWN0IHJlcXVlc3QgKnJlcSxcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy02OC1cXHRcXHRcXHRcXHRcXHRcXHQgIGJsa19zdGF0dXNfdCBzdGF0dXMsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYz03Nz1zdGF0aWMgaW50IHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcihzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtOTktXFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6MTAwOnN0YXRpYyBpbnQgc2NzaV9ic2dfdXJpbmdfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMTAxLVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsIGJvb2wgb3Blbl9mb3Jfd3JpdGUpXFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMTAyLXtcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoxMDM6XFx0c3RydWN0IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUgKnBkdSA9IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUoaW91Y21kKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0xMDQtXFx0Y29uc3Qgc3RydWN0IGJzZ191cmluZ19jbWQgKmNtZCA9XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0xNzktXFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6MTgwOlxcdHJlcS1cXHUwMDNlZW5kX2lvID0gc2NzaV9ic2dfdXJpbmdfY21kX2RvbmU7XFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMTgxLVxcdHJlcS1cXHUwMDNlZW5kX2lvX2RhdGEgPSBpb3VjbWQ7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYz0yNzk9c3RydWN0IGJzZ19kZXZpY2UgKnNjc2lfYnNnX3JlZ2lzdGVyX3F1ZXVlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldilcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTI4Mi1cXHRcXHRcXHRkZXZfbmFtZShcXHUwMDI2c2Rldi1cXHUwMDNlc2Rldl9nZW5kZXYpLCBzY3NpX2JzZ19zZ19pb19mbixcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoyODM6XFx0XFx0XFx0c2NzaV9ic2dfdXJpbmdfY21kKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0yODQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjoxNTo0OS42OTcwMDY0NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTM1ODg0MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNDU0kgQlNHIGlvX3VyaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgZG91YmxlLWZldGNoIHZ1bG5lcmFiaWxpdHkgd2l0aGluIGBzY3NpX2JzZ191cmluZ19jbWRgLiBUaGUgZml4IGludm9sdmVzIHVzaW5nIGBSRUFEX09OQ0VgIGZvciBjZXJ0YWluIGZpZWxkcyBpbiB0aGUgYGNtZGAgc3RydWN0dXJlLiBUaGF0IG1ha2VzIHNlbnNlLCBtaXRpZ2F0ZXMgdGhlIHJhY2UgY29uZGl0aW9uLiBJdCBhbHNvIGNoYW5nZXMgdGhlIGBnZnBfbWFza2AgcGFzc2VkIHRvIGBibGtfcnFfbWFwX3VzZXJfaW92YCBhbmQgYGJsa19ycV9tYXBfdXNlcmAuIEhtbSwgcHJldmlvdXNseSBpdCB3YXMgdXNpbmcgYEdGUF9OT1dBSVRgIHdoZW4gYElPX1VSSU5HX0ZfTk9OQkxPQ0tgIHdhcyBzZXQsIG5vdyBpdCdzIGBHRlBfS0VSTkVMYC4gXG5cblRoYXQgdHJpZ2dlcnMgYSB0aG91Z2h0OiBpZiBgSU9fVVJJTkdfRl9OT05CTE9DS2AgaXMgYWN0aXZlLCB3b3VsZG4ndCBgR0ZQX0tFUk5FTGAgcG90ZW50aWFsbHkgY2F1c2UgYSBzbGVlcCB3aXRoaW4gYW4gYXRvbWljIGNvbnRleHQgb3IgYSBub24tYmxvY2tpbmcgaW9fdXJpbmcgcGF0aD8gQnV0IHdhaXQsIGlvX3VyaW5nIGNhbiBoYW5kbGUgc2xlZXBzIGlmIHRoZSBvcGVyYXRpb24gdXNlcyBhIHdvcmtlciB0aHJlYWQuIElmIGl0J3MgaW5saW5lLCBpdCBzaG91bGRuJ3Qgc2xlZXAuIFRoZSBpb191cmluZyBpbmZyYXN0cnVjdHVyZSBzaG91bGQgcmV0dXJuIGAtRUFHQUlOYCBpZiBpdCBjYW5ub3QgYmxvY2ssIHJpZ2h0PyBCdXQgaWYgd2UgZm9yY2UgYEdGUF9LRVJORUxgLCBtaWdodCBpdCBibG9jayBhbnl3YXk/IFRoaXMgaXMgd2hlcmUgdGhlIHN1YnRsZXRpZXMgY29tZSBpbnRvIHBsYXkuLi5cblxuVGhlbiBhZ2FpbiwgdGhlIGlvX3VyaW5nIHBhdGggaXMgYWxsb3dlZCB0byBibG9jaywgcHJvdmlkZWQgaXQgaXMgaW4gYSBjb250ZXh0IHRoYXQgKmNhbiogYmxvY2ssIGJ1dCBpZiBgSU9fVVJJTkdfRl9OT05CTE9DS2AgaXMgc2V0LCB0aGUgY2FsbGVyIGV4cGxpY2l0bHkgaW5kaWNhdGVzIGl0ICpkb2Vzbid0KiB3YW50IGJsb2NraW5nLiBJZiBibG9ja2luZyBvY2N1cnMgYW55d2F5LCBpdCB3b3VsZCB2aW9sYXRlIHRob3NlIG5vbi1ibG9ja2luZyBzZW1hbnRpY3MsIGJ1dCBpdCBsaWtlbHkgd291bGRuJ3QgY2F1c2UgYSBzeXN0ZW0gY3Jhc2gg4oCTIHVubGVzcyBpdCBoYXBwZW5lZCB3aXRoaW4gYSBzcGlubG9jayBvciBhIHNpbWlsYXIgY3JpdGljYWwgcmVnaW9uLiBTbywgaXMgaXQgcG90ZW50aWFsbHkgYSBzZW1hbnRpYyB2aW9sYXRpb24sIG9yIGEgbW9yZSBzZXJpb3VzIGlzc3VlP1xuXG5SaWdodCwgdGhpcyBwYXRjaCBpcyBmaXJzdCBhbmQgZm9yZW1vc3QgYSBkb3VibGUtZmV0Y2ggZml4LiBMZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuTGV0J3MgbG9vayBhdCBgc2NzaV9ic2dfdXJpbmdfY21kYCBhbmQgYGJzZ191cmluZ19jbWRgIGRpcmVjdGx5LiBIb3cgaXMgaXQgcmVhY2hhYmxlPyBPaCwgcmlnaHQsIHRocm91Z2ggaW9fdXJpbmcgb3BlcmF0aW9ucyBvbiBhIEJTRyBkZXZpY2UsIHN1Y2ggYXMgdGhvc2UgdW5kZXIgYC9kZXYvYnNnLypgLiBCU0cgZGV2aWNlcyBhcmUsIGVzc2VudGlhbGx5LCBTQ1NJIGJsb2NrIGRldmljZXMuIENhbiB3ZSBmdXp6IHRoaXM/IFllcywgYnkgb3BlbmluZyBgL2Rldi9ic2cvKmAgYW5kIGlzc3VpbmcgYElPUklOR19PUF9VUklOR19DTURgIHdpdGggYSBgY21kX29wYCBjb2RlIHRoYXQgY29ycmVzcG9uZHMgdG8gdmFsaWQgQlNHIGNvbW1hbmRzLiBUaGF0IGNvdWxkIGRlZmluaXRlbHkgZXhwb3NlIHRoZSBmaXguIEp1c3QgYSBwb2ludCB0byBjaGVjayAtIEkgc2VlIGBzY3NpX2JzZ191cmluZ19jbWRgIGlzIHJlZ2lzdGVyZWQgaW4gYHNjc2lfYnNnX3JlZ2lzdGVyX3F1ZXVlYC4gVGhhdCBjb25maXJtcyBpdHMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MTU6NTcuODMyODkyOTczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzQ1NDcxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NzaV9ic2dfcmVnaXN0ZXJfcXVldWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM9MTkyPXN0YXRpYyBpbnQgc2NzaV9ic2dfc2dfaW9fZm4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBzZ19pb192NCAqaGRyLFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMjc4LVxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jOjI3OTpzdHJ1Y3QgYnNnX2RldmljZSAqc2NzaV9ic2dfcmVnaXN0ZXJfcXVldWUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KVxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTI4MC17XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9wcml2Lmg9MTkzPXN0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2RoX3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikgeyB9XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgtMTk1LVxcbmRyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaDoxOTY6c3RydWN0IGJzZ19kZXZpY2UgKnNjc2lfYnNnX3JlZ2lzdGVyX3F1ZXVlKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7XFxuZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oLTE5Ny1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmM9MTQwMD1pbnQgc2NzaV9zeXNmc19hZGRfc2RldihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jLTE0NDQtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0JMS19ERVZfQlNHKSkge1xcbmRyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmM6MTQ0NTpcXHRcXHRzZGV2LVxcdTAwM2Vic2dfZGV2ID0gc2NzaV9ic2dfcmVnaXN0ZXJfcXVldWUoc2Rldik7XFxuZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYy0xNDQ2LVxcdFxcdGlmIChJU19FUlIoc2Rldi1cXHUwMDNlYnNnX2RldikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MTU6NTkuOTY3NDQ2NTczWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5NDMyNjY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IFNDU0kvQlNHIGFuZCBpb191cmluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIEkgc2VlIGBzY3NpX2JzZ19yZWdpc3Rlcl9xdWV1ZWAgaXMgYmVpbmcgY2FsbGVkIGZvciBldmVyeSBTQ1NJIGRldmljZSB3aGVuIGBDT05GSUdfQkxLX0RFVl9CU0dgIGlzIGVuYWJsZWQuIFRoYXQgcmluZ3MgYSBiZWxsLi4uIGluIHRoaXMgZnV6emluZyBlbnZpcm9ubWVudCwgd2UgKmRvKiBoYXZlIFNDU0kgZGV2aWNlcywgZWl0aGVyIHRocm91Z2ggYHNjc2lfZGVidWdgIG9yIGp1c3QgdmlydHVhbCBkaXNrcy4gR29vZCwgZ29vZC4gTm93LCB0aGUgbmV4dCBwaWVjZSBpcyBgc2NzaV9ic2dfdXJpbmdfY21kYCwgdGhhdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGBJT1JJTkdfT1BfVVJJTkdfQ01EYCBvcGVyYXRpb25zIG9uIEJsb2NrIFNDU0kgR2VuZXJpYyAoQlNHKSBkZXZpY2VzLlxuXG5MZXQncyBkb3VibGUtY2hlY2s7IGlzIGBzY3NpX2JzZ191cmluZ19jbWRgIGFjdHVhbGx5IHJlYWNoYWJsZT8gWXVwLCBpdCdzIGNvbm5lY3RlZC4gRXhjZWxsZW50LiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGRvdWJsZSBmZXRjaCB2dWxuZXJhYmlsaXR5LCBzbywgZnVuZGFtZW50YWxseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFNDU0kvQlNHIGxvZ2ljLiBEZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcgd2l0aCBmdXp6aW5nLlxuXG5NeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBhIGdvb2QgdGFyZ2V0LiBGb3IgdGhlIGBGb2N1c1N5bWJvbHNgLCBJJ2xsIHByaW9yaXRpemUgYHNjc2lfYnNnX3VyaW5nX2NtZGAgYW5kIHByb2JhYmx5IGBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXJgLiBJIHRoaW5rIHRob3NlIHdpbGwgYmUga2V5IGluIGV4cG9zaW5nIGFueXRoaW5nIGludGVyZXN0aW5nLlxuXG5UaGVuLCBmb3IgdGhlIGBFbmFibGVDb25maWdzYCwgZGVmaW5pdGVseSBgQkxLX0RFVl9CU0dgIGFuZCBhbHNvIGBJT19VUklOR2AsIHNpbmNlIHRoYXQncyB3aGF0IHRyaWdnZXJzIHRoZSBjcml0aWNhbCBjb2RlIHBhdGggaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnLCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MzgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MTY6MDUuMDYxNzc1NDA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzMzMjA1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfQlNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9NDU9Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG4tLVxcbmJsb2NrL0tjb25maWctNDctXFxuYmxvY2svS2NvbmZpZzo0ODpjb25maWcgQkxLX0RFVl9CU0dfQ09NTU9OXFxuYmxvY2svS2NvbmZpZy00OS1cXHR0cmlzdGF0ZVxcbi0tXFxuYmxvY2svS2NvbmZpZz01MT1jb25maWcgQkxLX0lDUVxcbi0tXFxuYmxvY2svS2NvbmZpZy01My1cXG5ibG9jay9LY29uZmlnOjU0OmNvbmZpZyBCTEtfREVWX0JTR0xJQlxcbmJsb2NrL0tjb25maWctNTUtXFx0Ym9vbCBcXFwiQmxvY2sgbGF5ZXIgU0cgc3VwcG9ydCB2NCBoZWxwZXIgbGliXFxcIlxcbi0tXFxuZHJpdmVycy9zY3NpL0tjb25maWc9MTMxPWNvbmZpZyBDSFJfREVWX1NHXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy0xNTUtXFxuZHJpdmVycy9zY3NpL0tjb25maWc6MTU2OmNvbmZpZyBCTEtfREVWX0JTR1xcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCIvZGV2L2JzZyBzdXBwb3J0IChTRyB2NClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjE2OjA2Ljg5NTEwMzY3MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDA2MDM5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBCTEtfREVWX0JTR2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEdpdmVuIHRoYXQgYEJMS19ERVZfQlNHYCBpcywgYXMgSSByZWNhbGwsIHJlbGF0ZWQgdG8gdGhlIGJsb2NrIGxheWVyIGFuZCBwb3RlbnRpYWxseSBTQ1NJIGRldmljZXMsIEknbSBwcmV0dHkgY29uZmlkZW50IHRoYXQgdGhlIGBkcml2ZXJzL3Njc2kvS2NvbmZpZ2AgZmlsZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQuIEknbGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgc3RhcnQgbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IGNvbmRpdGlvbmFsIGxvZ2ljLCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzLCBhbmQgbWF5YmUgc29tZSBoaW50cyBhYm91dCB3aGVyZSB0aGlzIHNwZWNpZmljIG9wdGlvbiBpcyB1c2VkIHdpdGhpbiB0aGUgU0NTSSBzdWJzeXN0ZW0uIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHByYWN0aWNlOyBhbHdheXMgc3RhcnQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzM2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MTY6MTAuMDM1NzExNzM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFxuIDE1MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUgYW5kIHJlYWRcXG4gMTUyOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL3Njc2kucnN0XFx1MDAzZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzZy5cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNTU6XFx0XFxuIDE1NjpcXHRjb25maWcgQkxLX0RFVl9CU0dcXG4gMTU3OlxcdFxcdGJvb2wgXFxcIi9kZXYvYnNnIHN1cHBvcnQgKFNHIHY0KVxcXCJcXG4gMTU4OlxcdFxcdGRlcGVuZHMgb24gU0NTSVxcbiAxNTk6XFx0XFx0ZGVmYXVsdCB5XFxuIDE2MDpcXHRcXHRoZWxwXFxuIDE2MTpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgZ2VuZXJpYyBTRyAoU0NTSSBnZW5lcmljKSB2NCBzdXBwb3J0XFxuIDE2MjpcXHRcXHQgIGZvciBhbnkgU0NTSSBkZXZpY2UuXFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdCAgVGhpcyBvcHRpb24gaXMgcmVxdWlyZWQgYnkgVURFViB0byBhY2Nlc3MgZGV2aWNlIHNlcmlhbCBudW1iZXJzLCBldGMuXFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMTY3OlxcdFxcbiAxNjg6XFx0Y29uZmlnIENIUl9ERVZfU0NIXFxuIDE2OTpcXHRcXHR0cmlzdGF0ZSBcXFwiU0NTSSBtZWRpYSBjaGFuZ2VyIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjE2OjEwLjAzNTk0ODA1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg5ODgxNTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW50ZXJwbGF5IG9mIFNDU0ksIEJTRywgYW5kIGlvX3VyaW5nIGZvciBCbG9jayBEZXZpY2UgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGBCTEtfREVWX0JTR2AgaXMgaGVhdmlseSByZWxpYW50IG9uIGBTQ1NJYC4gTWFrZXMgc2Vuc2UsIG9mIGNvdXJzZSwgYXMgQlNHIChCbG9jayBTQ1NJIEdlbmVyaWMpIGlzIGZ1bmRhbWVudGFsbHkgYnVpbHQgb24gdG9wIG9mIHRoZSBTQ1NJIGluZnJhc3RydWN0dXJlLiBBbmQgbm93LCB0byBhZGQgZXZlbiBtb3JlIGNvbXBsZXhpdHksIGBJT19VUklOR2AgaXMgaW4gdGhlIG1peC4gVGhlIGludGVyYWN0aW9uIGhlcmUgaXMga2V5IHRvIGhvdyB0aGluZ3MgYXJlIGdvaW5nIHRvIHdvcmsuXG5cbk15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgY3J1Y2lhbCBmdW5jdGlvbnM6IGBzY3NpX2JzZ191cmluZ19jbWRgIGFuZCBgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyYC4gVGhvc2UgYXJlIHRoZSBwcmltZSBzdXNwZWN0cyBmb3IgbW9kaWZpY2F0aW9uIGdpdmVuIHRoZSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkLCB3aGF0IHRoZSBiZWZvcmUvYWZ0ZXIgbG9va3MgbGlrZS4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBJIHNob3VsZCBicmluZyBpbnRvIG15IG9yYml0IGZvciBjb250ZXh0LiBBaCwgeWVzLCBgc2NzaV9ic2dfdXJpbmdfY21kX2RvbmVg4oCmIGV2ZW4gaWYgaXQncyBub3QgZGlyZWN0bHkgbW9kaWZpZWQsIHRoYXQgZnVuY3Rpb24gY2xlYXJseSBzaXRzIHdpdGhpbiB0aGUgZXhlY3V0aW9uIGZsb3cgc28gaXQncyBlc3NlbnRpYWwgZm9yIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblNvLCBmcm9tIHdoYXQgSSdtIHJlYWRpbmcsIHRoZSBwYXRjaCBoYXMgZm9jdXNlZCBpdHMgY2hhbmdlcyBvbiBgc2NzaV9ic2dfdXJpbmdfY21kYCBhbmQgYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAuIExldCdzIHplcm8gaW4gb24gYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAgbm93LCBzaW5jZSB0aGF0J3MgbGlrZWx5IHdoZXJlIGFueSB1c2VyIGJ1ZmZlciBoYW5kbGluZyBsb2dpYyBoYXMgYmVlbiBjaGFuZ2VkLiBUaW1lIHRvIGRpdmUgaW50byBgZHJpdmVycy9zY3NpL3Njc2lfYnNnLmNgIGFuZCBzdGFydCByZWFkaW5n4oCmXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjoxNjoxNS4wMjU4MzIyNDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDcwOlxcdHtcXG4gIDcxOlxcdFxcdHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCA9IHJlcS1cXHUwMDNlZW5kX2lvX2RhdGE7XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdGlvX3VyaW5nX2NtZF9kb19pbl90YXNrX2xhenkoaW91Y21kLCBzY3NpX2JzZ191cmluZ190YXNrX2NiKTtcXG4gIDc0OlxcdFxcdHJldHVybiBSUV9FTkRfSU9fTk9ORTtcXG4gIDc1OlxcdH1cXG4gIDc2OlxcdFxcbiAgNzc6XFx0c3RhdGljIGludCBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIoc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4gIDc4OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXFxuICA3OTpcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBib29sIGlzX3dyaXRlLFxcbiAgODA6XFx0XFx0XFx0XFx0XFx0ICAgIHU2NCBidWZfYWRkciwgdW5zaWduZWQgbG9uZyBidWZfbGVuKVxcbiAgODE6XFx0e1xcbiAgODI6XFx0XFx0c3RydWN0IGlvdl9pdGVyIGl0ZXI7XFxuICA4MzpcXHRcXHRpbnQgcmV0O1xcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHRpZiAoaW91Y21kLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19VUklOR19DTURfRklYRUQpIHtcXG4gIDg2OlxcdFxcdFxcdHJldCA9IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWQoYnVmX2FkZHIsIGJ1Zl9sZW4sXFxuICA4NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRpc193cml0ZSA/IFdSSVRFIDogUkVBRCxcXG4gIDg4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZpdGVyLCBpb3VjbWQsIGlzc3VlX2ZsYWdzKTtcXG4gIDg5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAgOTA6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDkxOlxcdFxcdFxcdHJldCA9IGJsa19ycV9tYXBfdXNlcl9pb3YocmVxLVxcdTAwM2VxLCByZXEsIE5VTEwsIFxcdTAwMjZpdGVyLCBHRlBfS0VSTkVMKTtcXG4gIDkyOlxcdFxcdH0gZWxzZSB7XFxuICA5MzpcXHRcXHRcXHRyZXQgPSBibGtfcnFfbWFwX3VzZXIocmVxLVxcdTAwM2VxLCByZXEsIE5VTEwsIHVwdHI2NChidWZfYWRkciksXFxuICA5NDpcXHRcXHRcXHRcXHRcXHQgICAgICBidWZfbGVuLCBHRlBfS0VSTkVMKTtcXG4gIDk1OlxcdFxcdH1cXG4gIDk2OlxcdFxcbiAgOTc6XFx0XFx0cmV0dXJuIHJldDtcXG4gIDk4OlxcdH1cXG4gIDk5OlxcdFxcbiAxMDA6XFx0c3RhdGljIGludCBzY3NpX2JzZ191cmluZ19jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcXG4gMTAxOlxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsIGJvb2wgb3Blbl9mb3Jfd3JpdGUpXFxuIDEwMjpcXHR7XFxuIDEwMzpcXHRcXHRzdHJ1Y3Qgc2NzaV9ic2dfdXJpbmdfY21kX3BkdSAqcGR1ID0gc2NzaV9ic2dfdXJpbmdfY21kX3BkdShpb3VjbWQpO1xcbiAxMDQ6XFx0XFx0Y29uc3Qgc3RydWN0IGJzZ191cmluZ19jbWQgKmNtZCA9XFxuIDEwNTpcXHRcXHRcXHRpb191cmluZ19zcWUxMjhfY21kKGlvdWNtZC1cXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XFxuIDEwNjpcXHRcXHRzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kO1xcbiAxMDc6XFx0XFx0c3RydWN0IHJlcXVlc3QgKnJlcTtcXG4gMTA4OlxcdFxcdGJsa19tcV9yZXFfZmxhZ3NfdCBibGtfZmxhZ3MgPSAwO1xcbiAxMDk6XFx0XFx0dTY0IHJlcXVlc3QgPSBSRUFEX09OQ0UoY21kLVxcdTAwM2VyZXF1ZXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MTY6MTUuMDI1OTUyMDcxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NDE3NTcwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU2VjdXJpdHkgRml4IGluIHRoZSBTQ1NJIExheWVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgZG91YmxlLWZldGNoIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGBzY3NpX2JzZ191cmluZ19jbWRgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGV5J3JlIGFkZHJlc3NpbmcgdGhlIHBvdGVudGlhbCBmb3IgYSByYWNlIGNvbmRpdGlvbiB3aGVuIGFjY2Vzc2luZyB1c2VyLWNvbnRyb2xsZWQgZGF0YSB3aXRoaW4gYGlvX3VyaW5nYCBTUUUgbWVtb3J5LiBJdCdzIHVzaW5nIGBSRUFEX09OQ0VgIHRvIHNhZmVseSByZWFkIHRoZSByZWxldmFudCBmaWVsZHMgZnJvbSBgY21kYCBpbnRvIGxvY2FsIHZhcmlhYmxlcy4gVGhhdCdzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIOKAkyByZWR1Y2luZyB0aGUgd2luZG93IG9mIG9wcG9ydHVuaXR5IGZvciBhdHRhY2tlcnMgdG8gbWFuaXB1bGF0ZSBkYXRhIGJldHdlZW4gcmVhZHMuXG5cblRoZSBvdGhlciBwYXJ0IG9mIHRoZSBmaXggaW52b2x2ZXMgbW9kaWZ5aW5nIGBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXJgIHRvIHVzZSB0aG9zZSBsb2NhbCB2YXJpYWJsZXMgaW5zdGVhZCBvZiByZS1yZWFkaW5nIGZyb20gYGNtZGAuIE1ha2VzIHNlbnNlLCBlbGltaW5hdGluZyB0aGF0IHNlY29uZCBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIGZldGNoLiBGdW5jdGlvbmFsbHksIGl0J3MgYSBjbGVhbiBjaGFuZ2UgZGlyZWN0bHkgYWRkcmVzc2luZyBhIHNlY3VyaXR5IGlzc3VlLCBhbmQgd2Uga25vdyBgaW9fdXJpbmdgIG9uIEJsb2NrIFNDU0kgR2VuZXJpYyAoQlNHKSBkZXZpY2VzIGlzIGEgcmVhY2hhYmxlIHBhdGguXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgc2NzaV9ic2dfdXJpbmdfY21kYCBhbmQgYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAuIEknbGwgYWxzbyBkb3VibGUgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLCBtYWlubHkgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIC0gbG9va3MgbGlrZSBgQkxLX0RFVl9CU0dgIGFuZCBgSU9fVVJJTkdgIGFyZSB0aGUgcmVsZXZhbnQgc2V0dGluZ3MuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBJT19VUklOR2AgaXMgdGhlIHByZWNpc2UgY29uZmlnIG5hbWUsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ2OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjE2OjE5Ljk2NzcxMjA1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0NzAwODE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fVVJJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MDc9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTQtXFxuaW5pdC9LY29uZmlnOjE5MTU6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTYtXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5MjQ9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzYtXFxuaW5pdC9LY29uZmlnOjE5Mzc6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTM4LVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pb191cmluZy9LY29uZmlnLTUtXFxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXFxuaW9fdXJpbmcvS2NvbmZpZy03LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTItXFxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXFxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTE3LVxcbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcXG5pb191cmluZy9LY29uZmlnLTE5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MTY6MjEuOTE0NzI2NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEwNDM1NTUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIHNvIHdlJ3JlIGZvY3VzaW5nIG9uIHRoaXMgU0NTSSBCU0cgaW9fdXJpbmcgdnVsbmVyYWJpbGl0eS4gQmFzZWQgb24gbXkgYW5hbHlzaXMsIGBJT19VUklOR2AgaXMgZGVmaW5pdGVseSBlc3NlbnRpYWwg4oCTIG5vIHF1ZXN0aW9uIGFib3V0IHRoYXQuIEFuZCBvZiBjb3Vyc2UsIGBCTEtfREVWX0JTR2AgaXMgY29yZSB0byB0aGUgZnVuY3Rpb25hbGl0eS4gU2luY2UgYEJMS19ERVZfQlNHYCByZWxpZXMgb24gaXQsIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgU0NTSWAganVzdCB0byBiZSBzYWZlIGFuZCBlbnN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBjb25maWd1cmVkLlxuXG5Ob3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgYXJlbid0IGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIGx1cmtpbmcgYXJvdW5kLiBPa2F5LCBJJ20gY29uZmlkZW50IHRoYXQgYENPTkZJR19CTEtfREVWX0JTR2AgaXMgdGhlIGtleSBvbmUgdG8gZW5hYmxlIGhlcmUuXG5cbkFscmlnaHQsIHRpbWUgdG8gZm9ybXVsYXRlIHRoZSBmaW5hbCBwYWNrYWdlLiBIZXJlJ3Mgd2hhdCBJJ3ZlIGdvdDpcblxuYFdvcnRoRnV6emluZzogdHJ1ZWAg4oCTIEFic29sdXRlbHkuIFRoaXMgaXMgYSBjbGVhciB0YXJnZXQgZm9yIGZ1enppbmcuXG5gRm9jdXNTeW1ib2xzOiBbXCJzY3NpX2JzZ191cmluZ19jbWRcIiwgXCJzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXJcIl1gIOKAkyBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byB6ZXJvIGluIG9uLiBUaGUgdnVsbmVyYWJpbGl0eSBkaXJlY3RseSBpbXBhY3RzIHRoZW0uXG5gRW5hYmxlQ29uZmlnczogW1wiQkxLX0RFVl9CU0dcIiwgXCJJT19VUklOR1wiLCBcIlNDU0lcIl1gIOKAkyBUaGVzZSB0aHJlZSBjb25maWd1cmF0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIGV4cG9zZSBhbmQgZXhlcmNpc2UgdGhlIHZ1bG5lcmFibGUgY29kZS5cbmBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLWZldGNoIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGlvX3VyaW5nIGNvbW1hbmQgaGFuZGxpbmcgZm9yIFNDU0kgQlNHIGRldmljZXMuIEl0IG1vZGlmaWVzIHNjc2lfYnNnX3VyaW5nX2NtZCBhbmQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyIHRvIHVzZSBSRUFEX09OQ0UgZm9yIHJlYWRpbmcgdXNlci1jb250cm9sbGVkIFNRRSBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIHNlY3VyaXR5IGZpeCBpbiBhIHJlYWNoYWJsZSBwYXRoLlwiYCDigJMgVGhpcyBkb2N1bWVudHMgdGhlIGNvcmUgcmF0aW9uYWxlIGJlaGluZCB0aGUgY29uZmlndXJhdGlvbi4gSXQgaGlnaGxpZ2h0cyB0aGUgc2VjdXJpdHkgZml4LCB0aGUgZnVuY3Rpb25zIGludm9sdmVkLCBhbmQgdGhlIHVuZGVybHlpbmcgdnVsbmVyYWJpbGl0eSAoZG91YmxlLWZldGNoKS4gSXQncyBhbHNvIHJlYWNoYWJsZSwgYW5kIHRodXMgZnV6emFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjc1LCJPdXRwdXRUb2tlbnMiOjE0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjoxNjoyOC4wMTkwODUxMjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzM4ODA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9CU0dcIixcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJTQ1NJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2NzaV9ic2dfdXJpbmdfY21kXCIsXG4gICAgXCJzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZS1mZXRjaCB2dWxuZXJhYmlsaXR5IGluIHRoZSBpb191cmluZyBjb21tYW5kIGhhbmRsaW5nIGZvciBTQ1NJIEJTRyBkZXZpY2VzLiBJdCBtb2RpZmllcyBzY3NpX2JzZ191cmluZ19jbWQgYW5kIHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlciB0byB1c2UgUkVBRF9PTkNFIGZvciByZWFkaW5nIHVzZXItY29udHJvbGxlZCBTUUUgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBzZWN1cml0eSBmaXggaW4gYSByZWFjaGFibGUgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0JTR1wiLFxuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3NpX2JzZ191cmluZ19jbWRcIixcbiAgICBcInNjc2lfYnNnX21hcF91c2VyX2J1ZmZlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLWZldGNoIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGlvX3VyaW5nIGNvbW1hbmQgaGFuZGxpbmcgZm9yIFNDU0kgQlNHIGRldmljZXMuIEl0IG1vZGlmaWVzIHNjc2lfYnNnX3VyaW5nX2NtZCBhbmQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyIHRvIHVzZSBSRUFEX09OQ0UgZm9yIHJlYWRpbmcgdXNlci1jb250cm9sbGVkIFNRRSBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIHNlY3VyaXR5IGZpeCBpbiBhIHJlYWNoYWJsZSBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowv4svr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 11:37:00 +0000 UTC FinishedAt: 2026-07-27 12:16:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "4df5ac1e975032ffeef732e3f34f9096e20a0c2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_BSG", "IO_URING", "SCSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "4df5ac1e975032ffeef732e3f34f9096e20a0c2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_BSG", "IO_URING", "SCSI" ], "series_id": "370b9d71-296e-411f-ac5b-5c3c81eb2836" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "scsi_bsg_uring_cmd", "scsi_bsg_map_user_buffer" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfQlNHJiMzNDssCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O1NDU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3NpX2JzZ191cmluZ19jbWQmIzM0OywKICAgICYjMzQ7c2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLWZldGNoIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGlvX3VyaW5nIGNvbW1hbmQgaGFuZGxpbmcgZm9yIFNDU0kgQlNHIGRldmljZXMuIEl0IG1vZGlmaWVzIHNjc2lfYnNnX3VyaW5nX2NtZCBhbmQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyIHRvIHVzZSBSRUFEX09OQ0UgZm9yIHJlYWRpbmcgdXNlci1jb250cm9sbGVkIFNRRSBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIHNlY3VyaXR5IGZpeCBpbiBhIHJlYWNoYWJsZSBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWU0Y2YwMGQ0NWU1ZWNkZWU0MDNhZjJiYjBiNDRmYTEzZWRmMTVkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDEyOjE1OjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmNcbmluZGV4IGU4MGRlYzUzMTc0ZWFjLi5kZGIzM2FlNjg0ODM3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuY1xuQEAgLTc2LDEyICYjNDM7NzYsOSBAQCBzdGF0aWMgZW51bSBycV9lbmRfaW9fcmV0IHNjc2lfYnNnX3VyaW5nX2NtZF9kb25lKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gXG4gc3RhdGljIGludCBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIoc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXG4tXHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBib29sIGlzX3dyaXRlLFxuJiM0MztcdFx0XHRcdCAgICB1NjQgYnVmX2FkZHIsIHVuc2lnbmVkIGxvbmcgYnVmX2xlbilcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCAqY21kID0gaW9fdXJpbmdfc3FlMTI4X2NtZChpb3VjbWQtXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XG4tXHRib29sIGlzX3dyaXRlID0gY21kLVx1MDAzZWRvdXRfeGZlcl9sZW4gXHUwMDNlIDA7XG4tXHR1NjQgYnVmX2FkZHIgPSBpc193cml0ZSA/IGNtZC1cdTAwM2Vkb3V0X3hmZXJwIDogY21kLVx1MDAzZWRpbl94ZmVycDtcbi1cdHVuc2lnbmVkIGxvbmcgYnVmX2xlbiA9IGlzX3dyaXRlID8gY21kLVx1MDAzZWRvdXRfeGZlcl9sZW4gOiBjbWQtXHUwMDNlZGluX3hmZXJfbGVuO1xuIFx0c3RydWN0IGlvdl9pdGVyIGl0ZXI7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTkxLDEwICYjNDM7ODgsMTAgQEAgc3RhdGljIGludCBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIoc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZpdGVyLCBpb3VjbWQsIGlzc3VlX2ZsYWdzKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRyZXQgPSBibGtfcnFfbWFwX3VzZXJfaW92KHJlcS1cdTAwM2VxLCByZXEsIE5VTEwsIFx1MDAyNml0ZXIsIGdmcF9tYXNrKTtcbiYjNDM7XHRcdHJldCA9IGJsa19ycV9tYXBfdXNlcl9pb3YocmVxLVx1MDAzZXEsIHJlcSwgTlVMTCwgXHUwMDI2aXRlciwgR0ZQX0tFUk5FTCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRyZXQgPSBibGtfcnFfbWFwX3VzZXIocmVxLVx1MDAzZXEsIHJlcSwgTlVMTCwgdXB0cjY0KGJ1Zl9hZGRyKSxcbi1cdFx0XHRcdCAgICAgIGJ1Zl9sZW4sIGdmcF9tYXNrKTtcbiYjNDM7XHRcdFx0XHQgICAgICBidWZfbGVuLCBHRlBfS0VSTkVMKTtcbiBcdH1cbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMTA0LDIxICYjNDM7MTAxLDI4IEBAIHN0YXRpYyBpbnQgc2NzaV9ic2dfdXJpbmdfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncywgYm9vbCBvcGVuX2Zvcl93cml0ZSlcbiB7XG4gXHRzdHJ1Y3Qgc2NzaV9ic2dfdXJpbmdfY21kX3BkdSAqcGR1ID0gc2NzaV9ic2dfdXJpbmdfY21kX3BkdShpb3VjbWQpO1xuLVx0Y29uc3Qgc3RydWN0IGJzZ191cmluZ19jbWQgKmNtZCA9IGlvX3VyaW5nX3NxZTEyOF9jbWQoaW91Y21kLVx1MDAzZXNxZSwgc3RydWN0IGJzZ191cmluZ19jbWQpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBic2dfdXJpbmdfY21kICpjbWQgPVxuJiM0MztcdFx0aW9fdXJpbmdfc3FlMTI4X2NtZChpb3VjbWQtXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XG4gXHRzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kO1xuIFx0c3RydWN0IHJlcXVlc3QgKnJlcTtcbiBcdGJsa19tcV9yZXFfZmxhZ3NfdCBibGtfZmxhZ3MgPSAwO1xuLVx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xuJiM0MztcdHU2NCByZXF1ZXN0ID0gUkVBRF9PTkNFKGNtZC1cdTAwM2VyZXF1ZXN0KTtcbiYjNDM7XHR1MzIgcmVxdWVzdF9sZW4gPSBSRUFEX09OQ0UoY21kLVx1MDAzZXJlcXVlc3RfbGVuKTtcbiYjNDM7XHR1NjQgZG91dF94ZmVycCA9IFJFQURfT05DRShjbWQtXHUwMDNlZG91dF94ZmVycCk7XG4mIzQzO1x0dTMyIGRvdXRfeGZlcl9sZW4gPSBSRUFEX09OQ0UoY21kLVx1MDAzZWRvdXRfeGZlcl9sZW4pO1xuJiM0MztcdHU2NCBkaW5feGZlcnAgPSBSRUFEX09OQ0UoY21kLVx1MDAzZWRpbl94ZmVycCk7XG4mIzQzO1x0dTMyIGRpbl94ZmVyX2xlbiA9IFJFQURfT05DRShjbWQtXHUwMDNlZGluX3hmZXJfbGVuKTtcbiYjNDM7XHR1MzIgbWF4X3Jlc3BvbnNlX2xlbiA9IFJFQURfT05DRShjbWQtXHUwMDNlbWF4X3Jlc3BvbnNlX2xlbik7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKGNtZC1cdTAwM2Vwcm90b2NvbCAhPSBCU0dfUFJPVE9DT0xfU0NTSSB8fFxuIFx0ICAgIGNtZC1cdTAwM2VzdWJwcm90b2NvbCAhPSBCU0dfU1VCX1BST1RPQ09MX1NDU0lfQ01EKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmICghY21kLVx1MDAzZXJlcXVlc3QgfHwgY21kLVx1MDAzZXJlcXVlc3RfbGVuID09IDApXG4mIzQzO1x0aWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3RfbGVuID09IDApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKGNtZC1cdTAwM2Vkb3V0X3hmZXJfbGVuIFx1MDAyNlx1MDAyNiBjbWQtXHUwMDNlZGluX3hmZXJfbGVuKSB7XG4mIzQzO1x0aWYgKGRvdXRfeGZlcl9sZW4gXHUwMDI2XHUwMDI2IGRpbl94ZmVyX2xlbikge1xuIFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7QklESSBzdXBwb3J0IGluIGJzZyBoYXMgYmVlbiByZW1vdmVkLlxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbkBAIC0xMjYsMjUgJiM0MzsxMzAsMjMgQEAgc3RhdGljIGludCBzY3NpX2JzZ191cmluZ19jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNcbiBcdGlmIChjbWQtXHUwMDNlZG91dF9pb3ZlY19jb3VudCBcdTAwM2UgMCB8fCBjbWQtXHUwMDNlZGluX2lvdmVjX2NvdW50IFx1MDAzZSAwKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spIHtcbiYjNDM7XHRpZiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spXG4gXHRcdGJsa19mbGFncyA9IEJMS19NUV9SRVFfTk9XQUlUO1xuLVx0XHRnZnBfbWFzayA9IEdGUF9OT1dBSVQ7XG4tXHR9XG4gXG4tXHRyZXEgPSBzY3NpX2FsbG9jX3JlcXVlc3QocSwgY21kLVx1MDAzZWRvdXRfeGZlcl9sZW4gP1xuJiM0MztcdHJlcSA9IHNjc2lfYWxsb2NfcmVxdWVzdChxLCBkb3V0X3hmZXJfbGVuID9cbiBcdFx0XHRcdCBSRVFfT1BfRFJWX09VVCA6IFJFUV9PUF9EUlZfSU4sIGJsa19mbGFncyk7XG4gXHRpZiAoSVNfRVJSKHJlcSkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHJlcSk7XG4gXG4gXHRzY21kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpO1xuLVx0aWYgKGNtZC1cdTAwM2VyZXF1ZXN0X2xlbiBcdTAwM2Ugc2l6ZW9mKHNjbWQtXHUwMDNlY21uZCkpIHtcbiYjNDM7XHRpZiAocmVxdWVzdF9sZW4gXHUwMDNlIHNpemVvZihzY21kLVx1MDAzZWNtbmQpKSB7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfcmVxO1xuIFx0fVxuLVx0c2NtZC1cdTAwM2VjbWRfbGVuID0gY21kLVx1MDAzZXJlcXVlc3RfbGVuO1xuJiM0MztcdHNjbWQtXHUwMDNlY21kX2xlbiA9IHJlcXVlc3RfbGVuO1xuIFx0c2NtZC1cdTAwM2VhbGxvd2VkID0gU0dfREVGQVVMVF9SRVRSSUVTO1xuIFxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKHNjbWQtXHUwMDNlY21uZCwgdXB0cjY0KGNtZC1cdTAwM2VyZXF1ZXN0KSwgY21kLVx1MDAzZXJlcXVlc3RfbGVuKSkge1xuJiM0MztcdGlmIChjb3B5X2Zyb21fdXNlcihzY21kLVx1MDAzZWNtbmQsIHVwdHI2NChyZXF1ZXN0KSwgcmVxdWVzdF9sZW4pKSB7XG4gXHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfcmVxO1xuIFx0fVxuQEAgLTE1NSwxMSAmIzQzOzE1NywxNiBAQCBzdGF0aWMgaW50IHNjc2lfYnNnX3VyaW5nX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y1xuIFx0fVxuIFxuIFx0cGR1LVx1MDAzZXJlc3BvbnNlX2FkZHIgPSBjbWQtXHUwMDNlcmVzcG9uc2U7XG4tXHRzY21kLVx1MDAzZXNlbnNlX2xlbiA9IGNtZC1cdTAwM2VtYXhfcmVzcG9uc2VfbGVuID9cbi1cdFx0bWluKGNtZC1cdTAwM2VtYXhfcmVzcG9uc2VfbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpIDogU0NTSV9TRU5TRV9CVUZGRVJTSVpFO1xuJiM0MztcdHNjbWQtXHUwMDNlc2Vuc2VfbGVuID0gbWF4X3Jlc3BvbnNlX2xlbiA/XG4mIzQzO1x0XHRtaW4obWF4X3Jlc3BvbnNlX2xlbiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKSA6IFNDU0lfU0VOU0VfQlVGRkVSU0laRTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRvdXRfeGZlcl9sZW4gfHwgZGluX3hmZXJfbGVuKSB7XG4mIzQzO1x0XHRib29sIGlzX3dyaXRlID0gZG91dF94ZmVyX2xlbiBcdTAwM2UgMDtcbiYjNDM7XHRcdHU2NCBidWZfYWRkciA9IGlzX3dyaXRlID8gZG91dF94ZmVycCA6IGRpbl94ZmVycDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYnVmX2xlbiA9IGlzX3dyaXRlID8gZG91dF94ZmVyX2xlbiA6IGRpbl94ZmVyX2xlbjtcbiBcbi1cdGlmIChjbWQtXHUwMDNlZG91dF94ZmVyX2xlbiB8fCBjbWQtXHUwMDNlZGluX3hmZXJfbGVuKSB7XG4tXHRcdHJldCA9IHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcihyZXEsIGlvdWNtZCwgaXNzdWVfZmxhZ3MsIGdmcF9tYXNrKTtcbiYjNDM7XHRcdHJldCA9IHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcihyZXEsIGlvdWNtZCwgaXNzdWVfZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgaXNfd3JpdGUsIGJ1Zl9hZGRyLCBidWZfbGVuKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG91dF9mcmVlX3JlcTtcbiBcdFx0cGR1LVx1MDAzZWJpbyA9IHJlcS1cdTAwM2ViaW87XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfQlNHJiMzNDssCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O1NDU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3NpX2JzZ191cmluZ19jbWQmIzM0OywKICAgICYjMzQ7c2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLWZldGNoIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGlvX3VyaW5nIGNvbW1hbmQgaGFuZGxpbmcgZm9yIFNDU0kgQlNHIGRldmljZXMuIEl0IG1vZGlmaWVzIHNjc2lfYnNnX3VyaW5nX2NtZCBhbmQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyIHRvIHVzZSBSRUFEX09OQ0UgZm9yIHJlYWRpbmcgdXNlci1jb250cm9sbGVkIFNRRSBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIHNlY3VyaXR5IGZpeCBpbiBhIHJlYWNoYWJsZSBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWU0Y2YwMGQ0NWU1ZWNkZWU0MDNhZjJiYjBiNDRmYTEzZWRmMTVkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDI3IDEyOjE1OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYwppbmRleCBlODBkZWM1MzE3NGVhYy4uZGRiMzNhZTY4NDgzN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jCkBAIC03NiwxMiAmIzQzOzc2LDkgQEAgc3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBzY3NpX2JzZ191cmluZ19jbWRfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcmVxLAogCiBzdGF0aWMgaW50IHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcihzdHJ1Y3QgcmVxdWVzdCAqcmVxLAogCQkJCSAgICBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsCi0JCQkJICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncywgZ2ZwX3QgZ2ZwX21hc2spCiYjNDM7CQkJCSAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsIGJvb2wgaXNfd3JpdGUsCiYjNDM7CQkJCSAgICB1NjQgYnVmX2FkZHIsIHVuc2lnbmVkIGxvbmcgYnVmX2xlbikKIHsKLQljb25zdCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCAqY21kID0gaW9fdXJpbmdfc3FlMTI4X2NtZChpb3VjbWQtJmd0O3NxZSwgc3RydWN0IGJzZ191cmluZ19jbWQpOwotCWJvb2wgaXNfd3JpdGUgPSBjbWQtJmd0O2RvdXRfeGZlcl9sZW4gJmd0OyAwOwotCXU2NCBidWZfYWRkciA9IGlzX3dyaXRlID8gY21kLSZndDtkb3V0X3hmZXJwIDogY21kLSZndDtkaW5feGZlcnA7Ci0JdW5zaWduZWQgbG9uZyBidWZfbGVuID0gaXNfd3JpdGUgPyBjbWQtJmd0O2RvdXRfeGZlcl9sZW4gOiBjbWQtJmd0O2Rpbl94ZmVyX2xlbjsKIAlzdHJ1Y3QgaW92X2l0ZXIgaXRlcjsKIAlpbnQgcmV0OwogCkBAIC05MSwxMCAmIzQzOzg4LDEwIEBAIHN0YXRpYyBpbnQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHN0cnVjdCByZXF1ZXN0ICpyZXEsCiAJCQkJCQkmYW1wO2l0ZXIsIGlvdWNtZCwgaXNzdWVfZmxhZ3MpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7Ci0JCXJldCA9IGJsa19ycV9tYXBfdXNlcl9pb3YocmVxLSZndDtxLCByZXEsIE5VTEwsICZhbXA7aXRlciwgZ2ZwX21hc2spOwomIzQzOwkJcmV0ID0gYmxrX3JxX21hcF91c2VyX2lvdihyZXEtJmd0O3EsIHJlcSwgTlVMTCwgJmFtcDtpdGVyLCBHRlBfS0VSTkVMKTsKIAl9IGVsc2UgewogCQlyZXQgPSBibGtfcnFfbWFwX3VzZXIocmVxLSZndDtxLCByZXEsIE5VTEwsIHVwdHI2NChidWZfYWRkciksCi0JCQkJICAgICAgYnVmX2xlbiwgZ2ZwX21hc2spOwomIzQzOwkJCQkgICAgICBidWZfbGVuLCBHRlBfS0VSTkVMKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTA0LDIxICYjNDM7MTAxLDI4IEBAIHN0YXRpYyBpbnQgc2NzaV9ic2dfdXJpbmdfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBib29sIG9wZW5fZm9yX3dyaXRlKQogewogCXN0cnVjdCBzY3NpX2JzZ191cmluZ19jbWRfcGR1ICpwZHUgPSBzY3NpX2JzZ191cmluZ19jbWRfcGR1KGlvdWNtZCk7Ci0JY29uc3Qgc3RydWN0IGJzZ191cmluZ19jbWQgKmNtZCA9IGlvX3VyaW5nX3NxZTEyOF9jbWQoaW91Y21kLSZndDtzcWUsIHN0cnVjdCBic2dfdXJpbmdfY21kKTsKJiM0MzsJY29uc3Qgc3RydWN0IGJzZ191cmluZ19jbWQgKmNtZCA9CiYjNDM7CQlpb191cmluZ19zcWUxMjhfY21kKGlvdWNtZC0mZ3Q7c3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKIAlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogCWJsa19tcV9yZXFfZmxhZ3NfdCBibGtfZmxhZ3MgPSAwOwotCWdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDsKJiM0MzsJdTY0IHJlcXVlc3QgPSBSRUFEX09OQ0UoY21kLSZndDtyZXF1ZXN0KTsKJiM0MzsJdTMyIHJlcXVlc3RfbGVuID0gUkVBRF9PTkNFKGNtZC0mZ3Q7cmVxdWVzdF9sZW4pOwomIzQzOwl1NjQgZG91dF94ZmVycCA9IFJFQURfT05DRShjbWQtJmd0O2RvdXRfeGZlcnApOwomIzQzOwl1MzIgZG91dF94ZmVyX2xlbiA9IFJFQURfT05DRShjbWQtJmd0O2RvdXRfeGZlcl9sZW4pOwomIzQzOwl1NjQgZGluX3hmZXJwID0gUkVBRF9PTkNFKGNtZC0mZ3Q7ZGluX3hmZXJwKTsKJiM0MzsJdTMyIGRpbl94ZmVyX2xlbiA9IFJFQURfT05DRShjbWQtJmd0O2Rpbl94ZmVyX2xlbik7CiYjNDM7CXUzMiBtYXhfcmVzcG9uc2VfbGVuID0gUkVBRF9PTkNFKGNtZC0mZ3Q7bWF4X3Jlc3BvbnNlX2xlbik7CiAJaW50IHJldDsKIAogCWlmIChjbWQtJmd0O3Byb3RvY29sICE9IEJTR19QUk9UT0NPTF9TQ1NJIHx8CiAJICAgIGNtZC0mZ3Q7c3VicHJvdG9jb2wgIT0gQlNHX1NVQl9QUk9UT0NPTF9TQ1NJX0NNRCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIWNtZC0mZ3Q7cmVxdWVzdCB8fCBjbWQtJmd0O3JlcXVlc3RfbGVuID09IDApCiYjNDM7CWlmICghcmVxdWVzdCB8fCByZXF1ZXN0X2xlbiA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjbWQtJmd0O2RvdXRfeGZlcl9sZW4gJmFtcDsmYW1wOyBjbWQtJmd0O2Rpbl94ZmVyX2xlbikgewomIzQzOwlpZiAoZG91dF94ZmVyX2xlbiAmYW1wOyZhbXA7IGRpbl94ZmVyX2xlbikgewogCQlwcl93YXJuX29uY2UoJiMzNDtCSURJIHN1cHBvcnQgaW4gYnNnIGhhcyBiZWVuIHJlbW92ZWQuXG4mIzM0Oyk7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xMjYsMjUgJiM0MzsxMzAsMjMgQEAgc3RhdGljIGludCBzY3NpX2JzZ191cmluZ19jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWMKIAlpZiAoY21kLSZndDtkb3V0X2lvdmVjX2NvdW50ICZndDsgMCB8fCBjbWQtJmd0O2Rpbl9pb3ZlY19jb3VudCAmZ3Q7IDApCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChpc3N1ZV9mbGFncyAmYW1wOyBJT19VUklOR19GX05PTkJMT0NLKSB7CiYjNDM7CWlmIChpc3N1ZV9mbGFncyAmYW1wOyBJT19VUklOR19GX05PTkJMT0NLKQogCQlibGtfZmxhZ3MgPSBCTEtfTVFfUkVRX05PV0FJVDsKLQkJZ2ZwX21hc2sgPSBHRlBfTk9XQUlUOwotCX0KIAotCXJlcSA9IHNjc2lfYWxsb2NfcmVxdWVzdChxLCBjbWQtJmd0O2RvdXRfeGZlcl9sZW4gPwomIzQzOwlyZXEgPSBzY3NpX2FsbG9jX3JlcXVlc3QocSwgZG91dF94ZmVyX2xlbiA/CiAJCQkJIFJFUV9PUF9EUlZfT1VUIDogUkVRX09QX0RSVl9JTiwgYmxrX2ZsYWdzKTsKIAlpZiAoSVNfRVJSKHJlcSkpCiAJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKIAlzY21kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpOwotCWlmIChjbWQtJmd0O3JlcXVlc3RfbGVuICZndDsgc2l6ZW9mKHNjbWQtJmd0O2NtbmQpKSB7CiYjNDM7CWlmIChyZXF1ZXN0X2xlbiAmZ3Q7IHNpemVvZihzY21kLSZndDtjbW5kKSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF9mcmVlX3JlcTsKIAl9Ci0Jc2NtZC0mZ3Q7Y21kX2xlbiA9IGNtZC0mZ3Q7cmVxdWVzdF9sZW47CiYjNDM7CXNjbWQtJmd0O2NtZF9sZW4gPSByZXF1ZXN0X2xlbjsKIAlzY21kLSZndDthbGxvd2VkID0gU0dfREVGQVVMVF9SRVRSSUVTOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKHNjbWQtJmd0O2NtbmQsIHVwdHI2NChjbWQtJmd0O3JlcXVlc3QpLCBjbWQtJmd0O3JlcXVlc3RfbGVuKSkgewomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoc2NtZC0mZ3Q7Y21uZCwgdXB0cjY0KHJlcXVlc3QpLCByZXF1ZXN0X2xlbikpIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBvdXRfZnJlZV9yZXE7CiAJfQpAQCAtMTU1LDExICYjNDM7MTU3LDE2IEBAIHN0YXRpYyBpbnQgc2NzaV9ic2dfdXJpbmdfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjCiAJfQogCiAJcGR1LSZndDtyZXNwb25zZV9hZGRyID0gY21kLSZndDtyZXNwb25zZTsKLQlzY21kLSZndDtzZW5zZV9sZW4gPSBjbWQtJmd0O21heF9yZXNwb25zZV9sZW4gPwotCQltaW4oY21kLSZndDttYXhfcmVzcG9uc2VfbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpIDogU0NTSV9TRU5TRV9CVUZGRVJTSVpFOwomIzQzOwlzY21kLSZndDtzZW5zZV9sZW4gPSBtYXhfcmVzcG9uc2VfbGVuID8KJiM0MzsJCW1pbihtYXhfcmVzcG9uc2VfbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpIDogU0NTSV9TRU5TRV9CVUZGRVJTSVpFOwomIzQzOwomIzQzOwlpZiAoZG91dF94ZmVyX2xlbiB8fCBkaW5feGZlcl9sZW4pIHsKJiM0MzsJCWJvb2wgaXNfd3JpdGUgPSBkb3V0X3hmZXJfbGVuICZndDsgMDsKJiM0MzsJCXU2NCBidWZfYWRkciA9IGlzX3dyaXRlID8gZG91dF94ZmVycCA6IGRpbl94ZmVycDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYnVmX2xlbiA9IGlzX3dyaXRlID8gZG91dF94ZmVyX2xlbiA6IGRpbl94ZmVyX2xlbjsKIAotCWlmIChjbWQtJmd0O2RvdXRfeGZlcl9sZW4gfHwgY21kLSZndDtkaW5feGZlcl9sZW4pIHsKLQkJcmV0ID0gc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHJlcSwgaW91Y21kLCBpc3N1ZV9mbGFncywgZ2ZwX21hc2spOwomIzQzOwkJcmV0ID0gc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHJlcSwgaW91Y21kLCBpc3N1ZV9mbGFncywKJiM0MzsJCQkJCSAgICAgICBpc193cml0ZSwgYnVmX2FkZHIsIGJ1Zl9sZW4pOwogCQlpZiAocmV0KQogCQkJZ290byBvdXRfZnJlZV9yZXE7CiAJCXBkdS0mZ3Q7YmlvID0gcmVxLSZndDtiaW87CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU0NTSSBCU0cgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL3Njc2kvc2NzaV9ic2cuY2AuIFJpZ2h0IGF3YXksIGl0JiMzOTtzIG1vZGlmeWluZyBib3RoIGBzY3NpX2JzZ191cmluZ19jbWRgIGFuZCBgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyYC4gSW50ZXJlc3RpbmcuIEZyb20gYSBxdWljayBnbGFuY2UsIEkgc2VlIGl0JiMzOTtzIHVzaW5nIGBSRUFEX09OQ0VgIG9uIHZhbHVlcyBmcm9tIGBjbWRgIHdoaWNoIGlzIGEgZ29vZCBjYWxsIHRvIHByZXZlbnQgdGhvc2UgbmFzdHkgVGltZS1vZi1DaGVjay10by1UaW1lLW9mLVVzZSB2dWxuZXJhYmlsaXRpZXMgcG90ZW50aWFsbHkgaW50cm9kdWNlZCBieSBpb191cmluZyBTUUVzLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aG9zZS4KCk5vdywgaXQgc2VlbXMgbGlrZSB0aGV5JiMzOTt2ZSByZW1vdmVkIGBnZnBfbWFza2AgYW5kIGFyZSBkaXJlY3RseSB1c2luZyBgR0ZQX0tFUk5FTGAgaW4gYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAuIEhvbGQgb24sIGRvZXNuJiMzOTt0IHRoYXQgZWZmZWN0aXZlbHkgYnlwYXNzIHRoZSBgSU9fVVJJTkdfRl9OT05CTE9DS2AgZmxhZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24/IFRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWMgaWYgdGhlIGludGVudGlvbiB3YXMgdG8gcmVzcGVjdCB0aGF0IGZsYWcuIExldCBtZSB0aGluay4uLm9oLCByaWdodCwgYGJsa19ycV9tYXBfdXNlcl9pb3ZgIGFuZCBgYmxrX3JxX21hcF91c2VyYCBhcmUgKmFsc28qIGNhbGxlZCB3aXRoIGBHRlBfS0VSTkVMYCwgc28gcGVyaGFwcyBpdCYjMzk7cyBjb25zaXN0ZW50LgoKQnV0LCBoYW5nIG9uLi4uIGBzY3NpX2JzZ191cmluZ19jbWRgLi4uIGlzIHRoYXQgY2FsbGVkIGZyb20gYGJzZ191cmluZ19jbWRgPyBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW4gaGVyZSB0byBzZWUgdGhlIG92ZXJhbGwgaW1wYWN0LiBMZXQgbWUgcXVpY2tseSBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciBib3RoIGBzY3NpX2JzZ191cmluZ19jbWRgIGFuZCBgYnNnX3VyaW5nX2NtZGAgdG8gYmUgc3VyZS4gR290dGEgc2VlIHdoZXJlIHRoZXNlIHRoaW5ncyBhcmUgaW52b2tlZCBhbmQgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBiZWZvcmUgSSBjYW4gZ2l2ZSB0aGlzIHBhdGNoIHRoZSBncmVlbiBsaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3NpX2JzZ191cmluZ19jbWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMTYtICovXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoxNzpzdHJ1Y3Qgc2NzaV9ic2dfdXJpbmdfY21kX3BkdSB7XG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0xOC1cdHN0cnVjdCBiaW8gKmJpbztcdFx0LyogbWFwcGVkIHVzZXIgYnVmZmVyLCB1bm1hcCBpbiB0YXNrIHdvcmsgKi9cbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0yMS19O1xuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6MjI6c3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUpIFx1MDAzYz0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBpb191cmluZ19jbWQsIHBkdSkpO1xuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMjMtXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoyNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBzY3NpX2JzZ191cmluZ19jbWRfcGR1ICpzY3NpX2JzZ191cmluZ19jbWRfcGR1KFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMjUtXHRzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQpXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0yNi17XG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoyNzpcdHJldHVybiBpb191cmluZ19jbWRfdG9fcGR1KGlvdWNtZCwgc3RydWN0IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUpO1xuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMjgtfVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jPTMxPXN0YXRpYyB2b2lkIHNjc2lfYnNnX3VyaW5nX3Rhc2tfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMzMtXHRzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQgPSBpb191cmluZ19jbWRfZnJvbV90dyh0d19yZXEpO1xuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6MzQ6XHRzdHJ1Y3Qgc2NzaV9ic2dfdXJpbmdfY21kX3BkdSAqcGR1ID0gc2NzaV9ic2dfdXJpbmdfY21kX3BkdShpb3VjbWQpO1xuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMzUtXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBwZHUtXHUwMDNlcmVxO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTY2LVxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6Njc6c3RhdGljIGVudW0gcnFfZW5kX2lvX3JldCBzY3NpX2JzZ191cmluZ19jbWRfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtNjgtXHRcdFx0XHRcdFx0ICBibGtfc3RhdHVzX3Qgc3RhdHVzLFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jPTc3PXN0YXRpYyBpbnQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtOTktXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoxMDA6c3RhdGljIGludCBzY3NpX2JzZ191cmluZ19jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTEwMS1cdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBib29sIG9wZW5fZm9yX3dyaXRlKVxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMTAyLXtcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jOjEwMzpcdHN0cnVjdCBzY3NpX2JzZ191cmluZ19jbWRfcGR1ICpwZHUgPSBzY3NpX2JzZ191cmluZ19jbWRfcGR1KGlvdWNtZCk7XG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0xMDQtXHRjb25zdCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCAqY21kID1cbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0xNzktXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoxODA6XHRyZXEtXHUwMDNlZW5kX2lvID0gc2NzaV9ic2dfdXJpbmdfY21kX2RvbmU7XG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0xODEtXHRyZXEtXHUwMDNlZW5kX2lvX2RhdGEgPSBpb3VjbWQ7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM9Mjc5PXN0cnVjdCBic2dfZGV2aWNlICpzY3NpX2JzZ19yZWdpc3Rlcl9xdWV1ZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMjgyLVx0XHRcdGRldl9uYW1lKFx1MDAyNnNkZXYtXHUwMDNlc2Rldl9nZW5kZXYpLCBzY3NpX2JzZ19zZ19pb19mbixcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jOjI4MzpcdFx0XHRzY3NpX2JzZ191cmluZ19jbWQpO1xuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMjg0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTI3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNDU0kgQlNHIGlvX3VyaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGRvdWJsZS1mZXRjaCB2dWxuZXJhYmlsaXR5IHdpdGhpbiBgc2NzaV9ic2dfdXJpbmdfY21kYC4gVGhlIGZpeCBpbnZvbHZlcyB1c2luZyBgUkVBRF9PTkNFYCBmb3IgY2VydGFpbiBmaWVsZHMgaW4gdGhlIGBjbWRgIHN0cnVjdHVyZS4gVGhhdCBtYWtlcyBzZW5zZSwgbWl0aWdhdGVzIHRoZSByYWNlIGNvbmRpdGlvbi4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBgZ2ZwX21hc2tgIHBhc3NlZCB0byBgYmxrX3JxX21hcF91c2VyX2lvdmAgYW5kIGBibGtfcnFfbWFwX3VzZXJgLiBIbW0sIHByZXZpb3VzbHkgaXQgd2FzIHVzaW5nIGBHRlBfTk9XQUlUYCB3aGVuIGBJT19VUklOR19GX05PTkJMT0NLYCB3YXMgc2V0LCBub3cgaXQmIzM5O3MgYEdGUF9LRVJORUxgLiAKClRoYXQgdHJpZ2dlcnMgYSB0aG91Z2h0OiBpZiBgSU9fVVJJTkdfRl9OT05CTE9DS2AgaXMgYWN0aXZlLCB3b3VsZG4mIzM5O3QgYEdGUF9LRVJORUxgIHBvdGVudGlhbGx5IGNhdXNlIGEgc2xlZXAgd2l0aGluIGFuIGF0b21pYyBjb250ZXh0IG9yIGEgbm9uLWJsb2NraW5nIGlvX3VyaW5nIHBhdGg/IEJ1dCB3YWl0LCBpb191cmluZyBjYW4gaGFuZGxlIHNsZWVwcyBpZiB0aGUgb3BlcmF0aW9uIHVzZXMgYSB3b3JrZXIgdGhyZWFkLiBJZiBpdCYjMzk7cyBpbmxpbmUsIGl0IHNob3VsZG4mIzM5O3Qgc2xlZXAuIFRoZSBpb191cmluZyBpbmZyYXN0cnVjdHVyZSBzaG91bGQgcmV0dXJuIGAtRUFHQUlOYCBpZiBpdCBjYW5ub3QgYmxvY2ssIHJpZ2h0PyBCdXQgaWYgd2UgZm9yY2UgYEdGUF9LRVJORUxgLCBtaWdodCBpdCBibG9jayBhbnl3YXk/IFRoaXMgaXMgd2hlcmUgdGhlIHN1YnRsZXRpZXMgY29tZSBpbnRvIHBsYXkuLi4KClRoZW4gYWdhaW4sIHRoZSBpb191cmluZyBwYXRoIGlzIGFsbG93ZWQgdG8gYmxvY2ssIHByb3ZpZGVkIGl0IGlzIGluIGEgY29udGV4dCB0aGF0ICpjYW4qIGJsb2NrLCBidXQgaWYgYElPX1VSSU5HX0ZfTk9OQkxPQ0tgIGlzIHNldCwgdGhlIGNhbGxlciBleHBsaWNpdGx5IGluZGljYXRlcyBpdCAqZG9lc24mIzM5O3QqIHdhbnQgYmxvY2tpbmcuIElmIGJsb2NraW5nIG9jY3VycyBhbnl3YXksIGl0IHdvdWxkIHZpb2xhdGUgdGhvc2Ugbm9uLWJsb2NraW5nIHNlbWFudGljcywgYnV0IGl0IGxpa2VseSB3b3VsZG4mIzM5O3QgY2F1c2UgYSBzeXN0ZW0gY3Jhc2gg4oCTIHVubGVzcyBpdCBoYXBwZW5lZCB3aXRoaW4gYSBzcGlubG9jayBvciBhIHNpbWlsYXIgY3JpdGljYWwgcmVnaW9uLiBTbywgaXMgaXQgcG90ZW50aWFsbHkgYSBzZW1hbnRpYyB2aW9sYXRpb24sIG9yIGEgbW9yZSBzZXJpb3VzIGlzc3VlPwoKUmlnaHQsIHRoaXMgcGF0Y2ggaXMgZmlyc3QgYW5kIGZvcmVtb3N0IGEgZG91YmxlLWZldGNoIGZpeC4gTGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIGJpZ2dlciBwaWN0dXJlLgoKTGV0JiMzOTtzIGxvb2sgYXQgYHNjc2lfYnNnX3VyaW5nX2NtZGAgYW5kIGBic2dfdXJpbmdfY21kYCBkaXJlY3RseS4gSG93IGlzIGl0IHJlYWNoYWJsZT8gT2gsIHJpZ2h0LCB0aHJvdWdoIGlvX3VyaW5nIG9wZXJhdGlvbnMgb24gYSBCU0cgZGV2aWNlLCBzdWNoIGFzIHRob3NlIHVuZGVyIGAvZGV2L2JzZy8qYC4gQlNHIGRldmljZXMgYXJlLCBlc3NlbnRpYWxseSwgU0NTSSBibG9jayBkZXZpY2VzLiBDYW4gd2UgZnV6eiB0aGlzPyBZZXMsIGJ5IG9wZW5pbmcgYC9kZXYvYnNnLypgIGFuZCBpc3N1aW5nIGBJT1JJTkdfT1BfVVJJTkdfQ01EYCB3aXRoIGEgYGNtZF9vcGAgY29kZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHZhbGlkIEJTRyBjb21tYW5kcy4gVGhhdCBjb3VsZCBkZWZpbml0ZWx5IGV4cG9zZSB0aGUgZml4LiBKdXN0IGEgcG9pbnQgdG8gY2hlY2sgLSBJIHNlZSBgc2NzaV9ic2dfdXJpbmdfY21kYCBpcyByZWdpc3RlcmVkIGluIGBzY3NpX2JzZ19yZWdpc3Rlcl9xdWV1ZWAuIFRoYXQgY29uZmlybXMgaXRzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Njc2lfYnNnX3JlZ2lzdGVyX3F1ZXVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jPTE5Mj1zdGF0aWMgaW50IHNjc2lfYnNnX3NnX2lvX2ZuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3Qgc2dfaW9fdjQgKmhkcixcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0yNzgtXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoyNzk6c3RydWN0IGJzZ19kZXZpY2UgKnNjc2lfYnNnX3JlZ2lzdGVyX3F1ZXVlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldilcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTI4MC17XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oPTE5Mz1zdGF0aWMgaW5saW5lIHZvaWQgc2NzaV9kaF9yZWxlYXNlX2RldmljZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpIHsgfVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaC0xOTUtXG5kcml2ZXJzL3Njc2kvc2NzaV9wcml2Lmg6MTk2OnN0cnVjdCBic2dfZGV2aWNlICpzY3NpX2JzZ19yZWdpc3Rlcl9xdWV1ZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpO1xuZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oLTE5Ny1cbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jPTE0MDA9aW50IHNjc2lfc3lzZnNfYWRkX3NkZXYoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMtMTQ0NC1cdGlmIChJU19FTkFCTEVEKENPTkZJR19CTEtfREVWX0JTRykpIHtcbmRyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmM6MTQ0NTpcdFx0c2Rldi1cdTAwM2Vic2dfZGV2ID0gc2NzaV9ic2dfcmVnaXN0ZXJfcXVldWUoc2Rldik7XG5kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jLTE0NDYtXHRcdGlmIChJU19FUlIoc2Rldi1cdTAwM2Vic2dfZGV2KSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MzgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0OiBTQ1NJL0JTRyBhbmQgaW9fdXJpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIEkgc2VlIGBzY3NpX2JzZ19yZWdpc3Rlcl9xdWV1ZWAgaXMgYmVpbmcgY2FsbGVkIGZvciBldmVyeSBTQ1NJIGRldmljZSB3aGVuIGBDT05GSUdfQkxLX0RFVl9CU0dgIGlzIGVuYWJsZWQuIFRoYXQgcmluZ3MgYSBiZWxsLi4uIGluIHRoaXMgZnV6emluZyBlbnZpcm9ubWVudCwgd2UgKmRvKiBoYXZlIFNDU0kgZGV2aWNlcywgZWl0aGVyIHRocm91Z2ggYHNjc2lfZGVidWdgIG9yIGp1c3QgdmlydHVhbCBkaXNrcy4gR29vZCwgZ29vZC4gTm93LCB0aGUgbmV4dCBwaWVjZSBpcyBgc2NzaV9ic2dfdXJpbmdfY21kYCwgdGhhdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGBJT1JJTkdfT1BfVVJJTkdfQ01EYCBvcGVyYXRpb25zIG9uIEJsb2NrIFNDU0kgR2VuZXJpYyAoQlNHKSBkZXZpY2VzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjazsgaXMgYHNjc2lfYnNnX3VyaW5nX2NtZGAgYWN0dWFsbHkgcmVhY2hhYmxlPyBZdXAsIGl0JiMzOTtzIGNvbm5lY3RlZC4gRXhjZWxsZW50LiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGRvdWJsZSBmZXRjaCB2dWxuZXJhYmlsaXR5LCBzbywgZnVuZGFtZW50YWxseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFNDU0kvQlNHIGxvZ2ljLiBEZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcgd2l0aCBmdXp6aW5nLgoKTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgYSBnb29kIHRhcmdldC4gRm9yIHRoZSBgRm9jdXNTeW1ib2xzYCwgSSYjMzk7bGwgcHJpb3JpdGl6ZSBgc2NzaV9ic2dfdXJpbmdfY21kYCBhbmQgcHJvYmFibHkgYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAuIEkgdGhpbmsgdGhvc2Ugd2lsbCBiZSBrZXkgaW4gZXhwb3NpbmcgYW55dGhpbmcgaW50ZXJlc3RpbmcuCgpUaGVuLCBmb3IgdGhlIGBFbmFibGVDb25maWdzYCwgZGVmaW5pdGVseSBgQkxLX0RFVl9CU0dgIGFuZCBhbHNvIGBJT19VUklOR2AsIHNpbmNlIHRoYXQmIzM5O3Mgd2hhdCB0cmlnZ2VycyB0aGUgY3JpdGljYWwgY29kZSBwYXRoIGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZywganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX0JTRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTQ1PWNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXG4tLVxuYmxvY2svS2NvbmZpZy00Ny1cbmJsb2NrL0tjb25maWc6NDg6Y29uZmlnIEJMS19ERVZfQlNHX0NPTU1PTlxuYmxvY2svS2NvbmZpZy00OS1cdHRyaXN0YXRlXG4tLVxuYmxvY2svS2NvbmZpZz01MT1jb25maWcgQkxLX0lDUVxuLS1cbmJsb2NrL0tjb25maWctNTMtXG5ibG9jay9LY29uZmlnOjU0OmNvbmZpZyBCTEtfREVWX0JTR0xJQlxuYmxvY2svS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7QmxvY2sgbGF5ZXIgU0cgc3VwcG9ydCB2NCBoZWxwZXIgbGliXCYjMzQ7XG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWc9MTMxPWNvbmZpZyBDSFJfREVWX1NHXG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWctMTU1LVxuZHJpdmVycy9zY3NpL0tjb25maWc6MTU2OmNvbmZpZyBCTEtfREVWX0JTR1xuZHJpdmVycy9zY3NpL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDsvZGV2L2JzZyBzdXBwb3J0IChTRyB2NClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzM2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBCTEtfREVWX0JTR2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEdpdmVuIHRoYXQgYEJMS19ERVZfQlNHYCBpcywgYXMgSSByZWNhbGwsIHJlbGF0ZWQgdG8gdGhlIGJsb2NrIGxheWVyIGFuZCBwb3RlbnRpYWxseSBTQ1NJIGRldmljZXMsIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCB0aGF0IHRoZSBgZHJpdmVycy9zY3NpL0tjb25maWdgIGZpbGUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBzdGFydCBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgY29uZGl0aW9uYWwgbG9naWMsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGFuZCBtYXliZSBzb21lIGhpbnRzIGFib3V0IHdoZXJlIHRoaXMgc3BlY2lmaWMgb3B0aW9uIGlzIHVzZWQgd2l0aGluIHRoZSBTQ1NJIHN1YnN5c3RlbS4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgcHJhY3RpY2U7IGFsd2F5cyBzdGFydCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MDpcdFxuIDE1MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlIGFuZCByZWFkXG4gMTUyOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL3Njc2kucnN0XHUwMDNlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNnLlxuIDE1MzpcdFxuIDE1NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE1NTpcdFxuIDE1NjpcdGNvbmZpZyBCTEtfREVWX0JTR1xuIDE1NzpcdFx0Ym9vbCBcJiMzNDsvZGV2L2JzZyBzdXBwb3J0IChTRyB2NClcJiMzNDtcbiAxNTg6XHRcdGRlcGVuZHMgb24gU0NTSVxuIDE1OTpcdFx0ZGVmYXVsdCB5XG4gMTYwOlx0XHRoZWxwXG4gMTYxOlx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgZ2VuZXJpYyBTRyAoU0NTSSBnZW5lcmljKSB2NCBzdXBwb3J0XG4gMTYyOlx0XHQgIGZvciBhbnkgU0NTSSBkZXZpY2UuXG4gMTYzOlx0XG4gMTY0Olx0XHQgIFRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkIGJ5IFVERVYgdG8gYWNjZXNzIGRldmljZSBzZXJpYWwgbnVtYmVycywgZXRjLlxuIDE2NTpcdFxuIDE2NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDE2NzpcdFxuIDE2ODpcdGNvbmZpZyBDSFJfREVWX1NDSFxuIDE2OTpcdFx0dHJpc3RhdGUgXCYjMzQ7U0NTSSBtZWRpYSBjaGFuZ2VyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI0NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludGVycGxheSBvZiBTQ1NJLCBCU0csIGFuZCBpb191cmluZyBmb3IgQmxvY2sgRGV2aWNlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGBCTEtfREVWX0JTR2AgaXMgaGVhdmlseSByZWxpYW50IG9uIGBTQ1NJYC4gTWFrZXMgc2Vuc2UsIG9mIGNvdXJzZSwgYXMgQlNHIChCbG9jayBTQ1NJIEdlbmVyaWMpIGlzIGZ1bmRhbWVudGFsbHkgYnVpbHQgb24gdG9wIG9mIHRoZSBTQ1NJIGluZnJhc3RydWN0dXJlLiBBbmQgbm93LCB0byBhZGQgZXZlbiBtb3JlIGNvbXBsZXhpdHksIGBJT19VUklOR2AgaXMgaW4gdGhlIG1peC4gVGhlIGludGVyYWN0aW9uIGhlcmUgaXMga2V5IHRvIGhvdyB0aGluZ3MgYXJlIGdvaW5nIHRvIHdvcmsuCgpNeSBpbml0aWFsIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGNydWNpYWwgZnVuY3Rpb25zOiBgc2NzaV9ic2dfdXJpbmdfY21kYCBhbmQgYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAuIFRob3NlIGFyZSB0aGUgcHJpbWUgc3VzcGVjdHMgZm9yIG1vZGlmaWNhdGlvbiBnaXZlbiB0aGUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQsIHdoYXQgdGhlIGJlZm9yZS9hZnRlciBsb29rcyBsaWtlLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIEkgc2hvdWxkIGJyaW5nIGludG8gbXkgb3JiaXQgZm9yIGNvbnRleHQuIEFoLCB5ZXMsIGBzY3NpX2JzZ191cmluZ19jbWRfZG9uZWDigKYgZXZlbiBpZiBpdCYjMzk7cyBub3QgZGlyZWN0bHkgbW9kaWZpZWQsIHRoYXQgZnVuY3Rpb24gY2xlYXJseSBzaXRzIHdpdGhpbiB0aGUgZXhlY3V0aW9uIGZsb3cgc28gaXQmIzM5O3MgZXNzZW50aWFsIGZvciBtZSB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlLgoKU28sIGZyb20gd2hhdCBJJiMzOTttIHJlYWRpbmcsIHRoZSBwYXRjaCBoYXMgZm9jdXNlZCBpdHMgY2hhbmdlcyBvbiBgc2NzaV9ic2dfdXJpbmdfY21kYCBhbmQgYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAuIExldCYjMzk7cyB6ZXJvIGluIG9uIGBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXJgIG5vdywgc2luY2UgdGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgYW55IHVzZXIgYnVmZmVyIGhhbmRsaW5nIGxvZ2ljIGhhcyBiZWVuIGNoYW5nZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL3Njc2kvc2NzaV9ic2cuY2AgYW5kIHN0YXJ0IHJlYWRpbmfigKYKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2NzaV9ic2cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHR7XG4gIDcxOlx0XHRzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQgPSByZXEtXHUwMDNlZW5kX2lvX2RhdGE7XG4gIDcyOlx0XG4gIDczOlx0XHRpb191cmluZ19jbWRfZG9faW5fdGFza19sYXp5KGlvdWNtZCwgc2NzaV9ic2dfdXJpbmdfdGFza19jYik7XG4gIDc0Olx0XHRyZXR1cm4gUlFfRU5EX0lPX05PTkU7XG4gIDc1Olx0fVxuICA3NjpcdFxuICA3NzpcdHN0YXRpYyBpbnQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gIDc4Olx0XHRcdFx0XHQgICAgc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuICA3OTpcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncywgYm9vbCBpc193cml0ZSxcbiAgODA6XHRcdFx0XHRcdCAgICB1NjQgYnVmX2FkZHIsIHVuc2lnbmVkIGxvbmcgYnVmX2xlbilcbiAgODE6XHR7XG4gIDgyOlx0XHRzdHJ1Y3QgaW92X2l0ZXIgaXRlcjtcbiAgODM6XHRcdGludCByZXQ7XG4gIDg0Olx0XG4gIDg1Olx0XHRpZiAoaW91Y21kLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfVVJJTkdfQ01EX0ZJWEVEKSB7XG4gIDg2Olx0XHRcdHJldCA9IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWQoYnVmX2FkZHIsIGJ1Zl9sZW4sXG4gIDg3Olx0XHRcdFx0XHRcdFx0aXNfd3JpdGUgPyBXUklURSA6IFJFQUQsXG4gIDg4Olx0XHRcdFx0XHRcdFx0XHUwMDI2aXRlciwgaW91Y21kLCBpc3N1ZV9mbGFncyk7XG4gIDg5Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gIDkwOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAgOTE6XHRcdFx0cmV0ID0gYmxrX3JxX21hcF91c2VyX2lvdihyZXEtXHUwMDNlcSwgcmVxLCBOVUxMLCBcdTAwMjZpdGVyLCBHRlBfS0VSTkVMKTtcbiAgOTI6XHRcdH0gZWxzZSB7XG4gIDkzOlx0XHRcdHJldCA9IGJsa19ycV9tYXBfdXNlcihyZXEtXHUwMDNlcSwgcmVxLCBOVUxMLCB1cHRyNjQoYnVmX2FkZHIpLFxuICA5NDpcdFx0XHRcdFx0ICAgICAgYnVmX2xlbiwgR0ZQX0tFUk5FTCk7XG4gIDk1Olx0XHR9XG4gIDk2Olx0XG4gIDk3Olx0XHRyZXR1cm4gcmV0O1xuICA5ODpcdH1cbiAgOTk6XHRcbiAxMDA6XHRzdGF0aWMgaW50IHNjc2lfYnNnX3VyaW5nX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuIDEwMTpcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsIGJvb2wgb3Blbl9mb3Jfd3JpdGUpXG4gMTAyOlx0e1xuIDEwMzpcdFx0c3RydWN0IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUgKnBkdSA9IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUoaW91Y21kKTtcbiAxMDQ6XHRcdGNvbnN0IHN0cnVjdCBic2dfdXJpbmdfY21kICpjbWQgPVxuIDEwNTpcdFx0XHRpb191cmluZ19zcWUxMjhfY21kKGlvdWNtZC1cdTAwM2VzcWUsIHN0cnVjdCBic2dfdXJpbmdfY21kKTtcbiAxMDY6XHRcdHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7XG4gMTA3Olx0XHRzdHJ1Y3QgcmVxdWVzdCAqcmVxO1xuIDEwODpcdFx0YmxrX21xX3JlcV9mbGFnc190IGJsa19mbGFncyA9IDA7XG4gMTA5Olx0XHR1NjQgcmVxdWVzdCA9IFJFQURfT05DRShjbWQtXHUwMDNlcmVxdWVzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NjkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU2VjdXJpdHkgRml4IGluIHRoZSBTQ1NJIExheWVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBkb3VibGUtZmV0Y2ggdnVsbmVyYWJpbGl0eSBpbiB0aGUgYHNjc2lfYnNnX3VyaW5nX2NtZGAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgdGhlIHBvdGVudGlhbCBmb3IgYSByYWNlIGNvbmRpdGlvbiB3aGVuIGFjY2Vzc2luZyB1c2VyLWNvbnRyb2xsZWQgZGF0YSB3aXRoaW4gYGlvX3VyaW5nYCBTUUUgbWVtb3J5LiBJdCYjMzk7cyB1c2luZyBgUkVBRF9PTkNFYCB0byBzYWZlbHkgcmVhZCB0aGUgcmVsZXZhbnQgZmllbGRzIGZyb20gYGNtZGAgaW50byBsb2NhbCB2YXJpYWJsZXMuIFRoYXQmIzM5O3MgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcg4oCTIHJlZHVjaW5nIHRoZSB3aW5kb3cgb2Ygb3Bwb3J0dW5pdHkgZm9yIGF0dGFja2VycyB0byBtYW5pcHVsYXRlIGRhdGEgYmV0d2VlbiByZWFkcy4KClRoZSBvdGhlciBwYXJ0IG9mIHRoZSBmaXggaW52b2x2ZXMgbW9kaWZ5aW5nIGBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXJgIHRvIHVzZSB0aG9zZSBsb2NhbCB2YXJpYWJsZXMgaW5zdGVhZCBvZiByZS1yZWFkaW5nIGZyb20gYGNtZGAuIE1ha2VzIHNlbnNlLCBlbGltaW5hdGluZyB0aGF0IHNlY29uZCBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIGZldGNoLiBGdW5jdGlvbmFsbHksIGl0JiMzOTtzIGEgY2xlYW4gY2hhbmdlIGRpcmVjdGx5IGFkZHJlc3NpbmcgYSBzZWN1cml0eSBpc3N1ZSwgYW5kIHdlIGtub3cgYGlvX3VyaW5nYCBvbiBCbG9jayBTQ1NJIEdlbmVyaWMgKEJTRykgZGV2aWNlcyBpcyBhIHJlYWNoYWJsZSBwYXRoLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBzY3NpX2JzZ191cmluZ19jbWRgIGFuZCBgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyYC4gSSYjMzk7bGwgYWxzbyBkb3VibGUgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLCBtYWlubHkgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIC0gbG9va3MgbGlrZSBgQkxLX0RFVl9CU0dgIGFuZCBgSU9fVVJJTkdgIGFyZSB0aGUgcmVsZXZhbnQgc2V0dGluZ3MuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBJT19VUklOR2AgaXMgdGhlIHByZWNpc2UgY29uZmlnIG5hbWUsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElPX1VSSU5HJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTA3PWNvbmZpZyBBSU9cbi0tXG5pbml0L0tjb25maWctMTkxNC1cbmluaXQvS2NvbmZpZzoxOTE1OmNvbmZpZyBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5MTYtXHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xOTI0PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbi0tXG5pbml0L0tjb25maWctMTkzNi1cbmluaXQvS2NvbmZpZzoxOTM3OmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbmluaXQvS2NvbmZpZy0xOTM4LVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW9fdXJpbmcvS2NvbmZpZy01LVxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXG5pb191cmluZy9LY29uZmlnLTctXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTE3LVxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuaW9fdXJpbmcvS2NvbmZpZy0xOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNzUKCQkJCQkJCW91dHB1dDogMTQ1CgkJCQkJCQl0aG91Z2h0czogMjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCk9rYXksIHNvIHdlJiMzOTtyZSBmb2N1c2luZyBvbiB0aGlzIFNDU0kgQlNHIGlvX3VyaW5nIHZ1bG5lcmFiaWxpdHkuIEJhc2VkIG9uIG15IGFuYWx5c2lzLCBgSU9fVVJJTkdgIGlzIGRlZmluaXRlbHkgZXNzZW50aWFsIOKAkyBubyBxdWVzdGlvbiBhYm91dCB0aGF0LiBBbmQgb2YgY291cnNlLCBgQkxLX0RFVl9CU0dgIGlzIGNvcmUgdG8gdGhlIGZ1bmN0aW9uYWxpdHkuIFNpbmNlIGBCTEtfREVWX0JTR2AgcmVsaWVzIG9uIGl0LCBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYFNDU0lgIGp1c3QgdG8gYmUgc2FmZSBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgY29uZmlndXJlZC4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIGx1cmtpbmcgYXJvdW5kLiBPa2F5LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGBDT05GSUdfQkxLX0RFVl9CU0dgIGlzIHRoZSBrZXkgb25lIHRvIGVuYWJsZSBoZXJlLgoKQWxyaWdodCwgdGltZSB0byBmb3JtdWxhdGUgdGhlIGZpbmFsIHBhY2thZ2UuIEhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3Q6CgpgV29ydGhGdXp6aW5nOiB0cnVlYCDigJMgQWJzb2x1dGVseS4gVGhpcyBpcyBhIGNsZWFyIHRhcmdldCBmb3IgZnV6emluZy4KYEZvY3VzU3ltYm9sczogWyYjMzQ7c2NzaV9ic2dfdXJpbmdfY21kJiMzNDssICYjMzQ7c2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyJiMzNDtdYCDigJMgVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gemVybyBpbiBvbi4gVGhlIHZ1bG5lcmFiaWxpdHkgZGlyZWN0bHkgaW1wYWN0cyB0aGVtLgpgRW5hYmxlQ29uZmlnczogWyYjMzQ7QkxLX0RFVl9CU0cmIzM0OywgJiMzNDtJT19VUklORyYjMzQ7LCAmIzM0O1NDU0kmIzM0O11gIOKAkyBUaGVzZSB0aHJlZSBjb25maWd1cmF0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIGV4cG9zZSBhbmQgZXhlcmNpc2UgdGhlIHZ1bG5lcmFibGUgY29kZS4KYFJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtZmV0Y2ggdnVsbmVyYWJpbGl0eSBpbiB0aGUgaW9fdXJpbmcgY29tbWFuZCBoYW5kbGluZyBmb3IgU0NTSSBCU0cgZGV2aWNlcy4gSXQgbW9kaWZpZXMgc2NzaV9ic2dfdXJpbmdfY21kIGFuZCBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIgdG8gdXNlIFJFQURfT05DRSBmb3IgcmVhZGluZyB1c2VyLWNvbnRyb2xsZWQgU1FFIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgc2VjdXJpdHkgZml4IGluIGEgcmVhY2hhYmxlIHBhdGguJiMzNDtgIOKAkyBUaGlzIGRvY3VtZW50cyB0aGUgY29yZSByYXRpb25hbGUgYmVoaW5kIHRoZSBjb25maWd1cmF0aW9uLiBJdCBoaWdobGlnaHRzIHRoZSBzZWN1cml0eSBmaXgsIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQsIGFuZCB0aGUgdW5kZXJseWluZyB2dWxuZXJhYmlsaXR5IChkb3VibGUtZmV0Y2gpLiBJdCYjMzk7cyBhbHNvIHJlYWNoYWJsZSwgYW5kIHRodXMgZnV6emFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0JTRyYjMzQ7LAogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2NzaV9ic2dfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3Njc2lfYnNnX21hcF91c2VyX2J1ZmZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZS1mZXRjaCB2dWxuZXJhYmlsaXR5IGluIHRoZSBpb191cmluZyBjb21tYW5kIGhhbmRsaW5nIGZvciBTQ1NJIEJTRyBkZXZpY2VzLiBJdCBtb2RpZmllcyBzY3NpX2JzZ191cmluZ19jbWQgYW5kIHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlciB0byB1c2UgUkVBRF9PTkNFIGZvciByZWFkaW5nIHVzZXItY29udHJvbGxlZCBTUUUgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBzZWN1cml0eSBmaXggaW4gYSByZWFjaGFibGUgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9CU0cmIzM0OywKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7U0NTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Njc2lfYnNnX3VyaW5nX2NtZCYjMzQ7LAogICAgJiMzNDtzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtZmV0Y2ggdnVsbmVyYWJpbGl0eSBpbiB0aGUgaW9fdXJpbmcgY29tbWFuZCBoYW5kbGluZyBmb3IgU0NTSSBCU0cgZGV2aWNlcy4gSXQgbW9kaWZpZXMgc2NzaV9ic2dfdXJpbmdfY21kIGFuZCBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIgdG8gdXNlIFJFQURfT05DRSBmb3IgcmVhZGluZyB1c2VyLWNvbnRyb2xsZWQgU1FFIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgc2VjdXJpdHkgZml4IGluIGEgcmVhY2hhYmxlIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjoxNTo0MS4xMDA5MTIwOTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAwNTU3ODQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0JTR1wiLFxuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3NpX2JzZ191cmluZ19jbWRcIixcbiAgICBcInNjc2lfYnNnX21hcF91c2VyX2J1ZmZlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLWZldGNoIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGlvX3VyaW5nIGNvbW1hbmQgaGFuZGxpbmcgZm9yIFNDU0kgQlNHIGRldmljZXMuIEl0IG1vZGlmaWVzIHNjc2lfYnNnX3VyaW5nX2NtZCBhbmQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyIHRvIHVzZSBSRUFEX09OQ0UgZm9yIHJlYWRpbmcgdXNlci1jb250cm9sbGVkIFNRRSBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIHNlY3VyaXR5IGZpeCBpbiBhIHJlYWNoYWJsZSBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjoxNTo0MS4xMDA5MTgxNzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MjMyMTgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVlNGNmMDBkNDVlNWVjZGVlNDAzYWYyYmIwYjQ0ZmExM2VkZjE1ZDdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTI6MTU6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuY1xcbmluZGV4IGU4MGRlYzUzMTc0ZWFjLi5kZGIzM2FlNjg0ODM3YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuY1xcbisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXFxuQEAgLTc2LDEyICs3Niw5IEBAIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgc2NzaV9ic2dfdXJpbmdfY21kX2RvbmUoc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4gXFxuIHN0YXRpYyBpbnQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXFxuLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBib29sIGlzX3dyaXRlLFxcbitcXHRcXHRcXHRcXHQgICAgdTY0IGJ1Zl9hZGRyLCB1bnNpZ25lZCBsb25nIGJ1Zl9sZW4pXFxuIHtcXG4tXFx0Y29uc3Qgc3RydWN0IGJzZ191cmluZ19jbWQgKmNtZCA9IGlvX3VyaW5nX3NxZTEyOF9jbWQoaW91Y21kLVxcdTAwM2VzcWUsIHN0cnVjdCBic2dfdXJpbmdfY21kKTtcXG4tXFx0Ym9vbCBpc193cml0ZSA9IGNtZC1cXHUwMDNlZG91dF94ZmVyX2xlbiBcXHUwMDNlIDA7XFxuLVxcdHU2NCBidWZfYWRkciA9IGlzX3dyaXRlID8gY21kLVxcdTAwM2Vkb3V0X3hmZXJwIDogY21kLVxcdTAwM2VkaW5feGZlcnA7XFxuLVxcdHVuc2lnbmVkIGxvbmcgYnVmX2xlbiA9IGlzX3dyaXRlID8gY21kLVxcdTAwM2Vkb3V0X3hmZXJfbGVuIDogY21kLVxcdTAwM2VkaW5feGZlcl9sZW47XFxuIFxcdHN0cnVjdCBpb3ZfaXRlciBpdGVyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtOTEsMTAgKzg4LDEwIEBAIHN0YXRpYyBpbnQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZpdGVyLCBpb3VjbWQsIGlzc3VlX2ZsYWdzKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdHJldCA9IGJsa19ycV9tYXBfdXNlcl9pb3YocmVxLVxcdTAwM2VxLCByZXEsIE5VTEwsIFxcdTAwMjZpdGVyLCBnZnBfbWFzayk7XFxuK1xcdFxcdHJldCA9IGJsa19ycV9tYXBfdXNlcl9pb3YocmVxLVxcdTAwM2VxLCByZXEsIE5VTEwsIFxcdTAwMjZpdGVyLCBHRlBfS0VSTkVMKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0cmV0ID0gYmxrX3JxX21hcF91c2VyKHJlcS1cXHUwMDNlcSwgcmVxLCBOVUxMLCB1cHRyNjQoYnVmX2FkZHIpLFxcbi1cXHRcXHRcXHRcXHQgICAgICBidWZfbGVuLCBnZnBfbWFzayk7XFxuK1xcdFxcdFxcdFxcdCAgICAgIGJ1Zl9sZW4sIEdGUF9LRVJORUwpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC0xMDQsMjEgKzEwMSwyOCBAQCBzdGF0aWMgaW50IHNjc2lfYnNnX3VyaW5nX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y1xcbiBcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBib29sIG9wZW5fZm9yX3dyaXRlKVxcbiB7XFxuIFxcdHN0cnVjdCBzY3NpX2JzZ191cmluZ19jbWRfcGR1ICpwZHUgPSBzY3NpX2JzZ191cmluZ19jbWRfcGR1KGlvdWNtZCk7XFxuLVxcdGNvbnN0IHN0cnVjdCBic2dfdXJpbmdfY21kICpjbWQgPSBpb191cmluZ19zcWUxMjhfY21kKGlvdWNtZC1cXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XFxuK1xcdGNvbnN0IHN0cnVjdCBic2dfdXJpbmdfY21kICpjbWQgPVxcbitcXHRcXHRpb191cmluZ19zcWUxMjhfY21kKGlvdWNtZC1cXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XFxuIFxcdHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7XFxuIFxcdHN0cnVjdCByZXF1ZXN0ICpyZXE7XFxuIFxcdGJsa19tcV9yZXFfZmxhZ3NfdCBibGtfZmxhZ3MgPSAwO1xcbi1cXHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XFxuK1xcdHU2NCByZXF1ZXN0ID0gUkVBRF9PTkNFKGNtZC1cXHUwMDNlcmVxdWVzdCk7XFxuK1xcdHUzMiByZXF1ZXN0X2xlbiA9IFJFQURfT05DRShjbWQtXFx1MDAzZXJlcXVlc3RfbGVuKTtcXG4rXFx0dTY0IGRvdXRfeGZlcnAgPSBSRUFEX09OQ0UoY21kLVxcdTAwM2Vkb3V0X3hmZXJwKTtcXG4rXFx0dTMyIGRvdXRfeGZlcl9sZW4gPSBSRUFEX09OQ0UoY21kLVxcdTAwM2Vkb3V0X3hmZXJfbGVuKTtcXG4rXFx0dTY0IGRpbl94ZmVycCA9IFJFQURfT05DRShjbWQtXFx1MDAzZWRpbl94ZmVycCk7XFxuK1xcdHUzMiBkaW5feGZlcl9sZW4gPSBSRUFEX09OQ0UoY21kLVxcdTAwM2VkaW5feGZlcl9sZW4pO1xcbitcXHR1MzIgbWF4X3Jlc3BvbnNlX2xlbiA9IFJFQURfT05DRShjbWQtXFx1MDAzZW1heF9yZXNwb25zZV9sZW4pO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aWYgKGNtZC1cXHUwMDNlcHJvdG9jb2wgIT0gQlNHX1BST1RPQ09MX1NDU0kgfHxcXG4gXFx0ICAgIGNtZC1cXHUwMDNlc3VicHJvdG9jb2wgIT0gQlNHX1NVQl9QUk9UT0NPTF9TQ1NJX0NNRClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoIWNtZC1cXHUwMDNlcmVxdWVzdCB8fCBjbWQtXFx1MDAzZXJlcXVlc3RfbGVuID09IDApXFxuK1xcdGlmICghcmVxdWVzdCB8fCByZXF1ZXN0X2xlbiA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdGlmIChjbWQtXFx1MDAzZWRvdXRfeGZlcl9sZW4gXFx1MDAyNlxcdTAwMjYgY21kLVxcdTAwM2VkaW5feGZlcl9sZW4pIHtcXG4rXFx0aWYgKGRvdXRfeGZlcl9sZW4gXFx1MDAyNlxcdTAwMjYgZGluX3hmZXJfbGVuKSB7XFxuIFxcdFxcdHByX3dhcm5fb25jZShcXFwiQklESSBzdXBwb3J0IGluIGJzZyBoYXMgYmVlbiByZW1vdmVkLlxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbkBAIC0xMjYsMjUgKzEzMCwyMyBAQCBzdGF0aWMgaW50IHNjc2lfYnNnX3VyaW5nX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y1xcbiBcXHRpZiAoY21kLVxcdTAwM2Vkb3V0X2lvdmVjX2NvdW50IFxcdTAwM2UgMCB8fCBjbWQtXFx1MDAzZWRpbl9pb3ZlY19jb3VudCBcXHUwMDNlIDApXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdGlmIChpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spIHtcXG4rXFx0aWYgKGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSylcXG4gXFx0XFx0YmxrX2ZsYWdzID0gQkxLX01RX1JFUV9OT1dBSVQ7XFxuLVxcdFxcdGdmcF9tYXNrID0gR0ZQX05PV0FJVDtcXG4tXFx0fVxcbiBcXG4tXFx0cmVxID0gc2NzaV9hbGxvY19yZXF1ZXN0KHEsIGNtZC1cXHUwMDNlZG91dF94ZmVyX2xlbiA/XFxuK1xcdHJlcSA9IHNjc2lfYWxsb2NfcmVxdWVzdChxLCBkb3V0X3hmZXJfbGVuID9cXG4gXFx0XFx0XFx0XFx0IFJFUV9PUF9EUlZfT1VUIDogUkVRX09QX0RSVl9JTiwgYmxrX2ZsYWdzKTtcXG4gXFx0aWYgKElTX0VSUihyZXEpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihyZXEpO1xcbiBcXG4gXFx0c2NtZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTtcXG4tXFx0aWYgKGNtZC1cXHUwMDNlcmVxdWVzdF9sZW4gXFx1MDAzZSBzaXplb2Yoc2NtZC1cXHUwMDNlY21uZCkpIHtcXG4rXFx0aWYgKHJlcXVlc3RfbGVuIFxcdTAwM2Ugc2l6ZW9mKHNjbWQtXFx1MDAzZWNtbmQpKSB7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0X2ZyZWVfcmVxO1xcbiBcXHR9XFxuLVxcdHNjbWQtXFx1MDAzZWNtZF9sZW4gPSBjbWQtXFx1MDAzZXJlcXVlc3RfbGVuO1xcbitcXHRzY21kLVxcdTAwM2VjbWRfbGVuID0gcmVxdWVzdF9sZW47XFxuIFxcdHNjbWQtXFx1MDAzZWFsbG93ZWQgPSBTR19ERUZBVUxUX1JFVFJJRVM7XFxuIFxcbi1cXHRpZiAoY29weV9mcm9tX3VzZXIoc2NtZC1cXHUwMDNlY21uZCwgdXB0cjY0KGNtZC1cXHUwMDNlcmVxdWVzdCksIGNtZC1cXHUwMDNlcmVxdWVzdF9sZW4pKSB7XFxuK1xcdGlmIChjb3B5X2Zyb21fdXNlcihzY21kLVxcdTAwM2VjbW5kLCB1cHRyNjQocmVxdWVzdCksIHJlcXVlc3RfbGVuKSkge1xcbiBcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbiBcXHRcXHRnb3RvIG91dF9mcmVlX3JlcTtcXG4gXFx0fVxcbkBAIC0xNTUsMTEgKzE1NywxNiBAQCBzdGF0aWMgaW50IHNjc2lfYnNnX3VyaW5nX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y1xcbiBcXHR9XFxuIFxcbiBcXHRwZHUtXFx1MDAzZXJlc3BvbnNlX2FkZHIgPSBjbWQtXFx1MDAzZXJlc3BvbnNlO1xcbi1cXHRzY21kLVxcdTAwM2VzZW5zZV9sZW4gPSBjbWQtXFx1MDAzZW1heF9yZXNwb25zZV9sZW4gP1xcbi1cXHRcXHRtaW4oY21kLVxcdTAwM2VtYXhfcmVzcG9uc2VfbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpIDogU0NTSV9TRU5TRV9CVUZGRVJTSVpFO1xcbitcXHRzY21kLVxcdTAwM2VzZW5zZV9sZW4gPSBtYXhfcmVzcG9uc2VfbGVuID9cXG4rXFx0XFx0bWluKG1heF9yZXNwb25zZV9sZW4sIFNDU0lfU0VOU0VfQlVGRkVSU0laRSkgOiBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7XFxuK1xcbitcXHRpZiAoZG91dF94ZmVyX2xlbiB8fCBkaW5feGZlcl9sZW4pIHtcXG4rXFx0XFx0Ym9vbCBpc193cml0ZSA9IGRvdXRfeGZlcl9sZW4gXFx1MDAzZSAwO1xcbitcXHRcXHR1NjQgYnVmX2FkZHIgPSBpc193cml0ZSA/IGRvdXRfeGZlcnAgOiBkaW5feGZlcnA7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYnVmX2xlbiA9IGlzX3dyaXRlID8gZG91dF94ZmVyX2xlbiA6IGRpbl94ZmVyX2xlbjtcXG4gXFxuLVxcdGlmIChjbWQtXFx1MDAzZWRvdXRfeGZlcl9sZW4gfHwgY21kLVxcdTAwM2VkaW5feGZlcl9sZW4pIHtcXG4tXFx0XFx0cmV0ID0gc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHJlcSwgaW91Y21kLCBpc3N1ZV9mbGFncywgZ2ZwX21hc2spO1xcbitcXHRcXHRyZXQgPSBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIocmVxLCBpb3VjbWQsIGlzc3VlX2ZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgaXNfd3JpdGUsIGJ1Zl9hZGRyLCBidWZfbGVuKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0Z290byBvdXRfZnJlZV9yZXE7XFxuIFxcdFxcdHBkdS1cXHUwMDNlYmlvID0gcmVxLVxcdTAwM2ViaW87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjE1OjQxLjY0NDIxOTIxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ2NDYyMjU4NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfQlNHXCIsXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiU0NTSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjc2lfYnNnX3VyaW5nX2NtZFwiLFxuICAgIFwic2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtZmV0Y2ggdnVsbmVyYWJpbGl0eSBpbiB0aGUgaW9fdXJpbmcgY29tbWFuZCBoYW5kbGluZyBmb3IgU0NTSSBCU0cgZGV2aWNlcy4gSXQgbW9kaWZpZXMgc2NzaV9ic2dfdXJpbmdfY21kIGFuZCBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIgdG8gdXNlIFJFQURfT05DRSBmb3IgcmVhZGluZyB1c2VyLWNvbnRyb2xsZWQgU1FFIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgc2VjdXJpdHkgZml4IGluIGEgcmVhY2hhYmxlIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVlNGNmMDBkNDVlNWVjZGVlNDAzYWYyYmIwYjQ0ZmExM2VkZjE1ZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMjoxNTozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfYnNnLmNcbmluZGV4IGU4MGRlYzUzMTc0ZWFjLi5kZGIzM2FlNjg0ODM3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXG4rKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9ic2cuY1xuQEAgLTc2LDEyICs3Niw5IEBAIHN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgc2NzaV9ic2dfdXJpbmdfY21kX2RvbmUoc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcbiBzdGF0aWMgaW50IHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcihzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbi1cdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuK1x0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncywgYm9vbCBpc193cml0ZSxcbitcdFx0XHRcdCAgICB1NjQgYnVmX2FkZHIsIHVuc2lnbmVkIGxvbmcgYnVmX2xlbilcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCAqY21kID0gaW9fdXJpbmdfc3FlMTI4X2NtZChpb3VjbWQtXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XG4tXHRib29sIGlzX3dyaXRlID0gY21kLVx1MDAzZWRvdXRfeGZlcl9sZW4gXHUwMDNlIDA7XG4tXHR1NjQgYnVmX2FkZHIgPSBpc193cml0ZSA/IGNtZC1cdTAwM2Vkb3V0X3hmZXJwIDogY21kLVx1MDAzZWRpbl94ZmVycDtcbi1cdHVuc2lnbmVkIGxvbmcgYnVmX2xlbiA9IGlzX3dyaXRlID8gY21kLVx1MDAzZWRvdXRfeGZlcl9sZW4gOiBjbWQtXHUwMDNlZGluX3hmZXJfbGVuO1xuIFx0c3RydWN0IGlvdl9pdGVyIGl0ZXI7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTkxLDEwICs4OCwxMCBAQCBzdGF0aWMgaW50IHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcihzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdFx0XHRcdFx1MDAyNml0ZXIsIGlvdWNtZCwgaXNzdWVfZmxhZ3MpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdHJldCA9IGJsa19ycV9tYXBfdXNlcl9pb3YocmVxLVx1MDAzZXEsIHJlcSwgTlVMTCwgXHUwMDI2aXRlciwgZ2ZwX21hc2spO1xuK1x0XHRyZXQgPSBibGtfcnFfbWFwX3VzZXJfaW92KHJlcS1cdTAwM2VxLCByZXEsIE5VTEwsIFx1MDAyNml0ZXIsIEdGUF9LRVJORUwpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0ID0gYmxrX3JxX21hcF91c2VyKHJlcS1cdTAwM2VxLCByZXEsIE5VTEwsIHVwdHI2NChidWZfYWRkciksXG4tXHRcdFx0XHQgICAgICBidWZfbGVuLCBnZnBfbWFzayk7XG4rXHRcdFx0XHQgICAgICBidWZfbGVuLCBHRlBfS0VSTkVMKTtcbiBcdH1cbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMTA0LDIxICsxMDEsMjggQEAgc3RhdGljIGludCBzY3NpX2JzZ191cmluZ19jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNcbiBcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBib29sIG9wZW5fZm9yX3dyaXRlKVxuIHtcbiBcdHN0cnVjdCBzY3NpX2JzZ191cmluZ19jbWRfcGR1ICpwZHUgPSBzY3NpX2JzZ191cmluZ19jbWRfcGR1KGlvdWNtZCk7XG4tXHRjb25zdCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCAqY21kID0gaW9fdXJpbmdfc3FlMTI4X2NtZChpb3VjbWQtXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XG4rXHRjb25zdCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCAqY21kID1cbitcdFx0aW9fdXJpbmdfc3FlMTI4X2NtZChpb3VjbWQtXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XG4gXHRzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kO1xuIFx0c3RydWN0IHJlcXVlc3QgKnJlcTtcbiBcdGJsa19tcV9yZXFfZmxhZ3NfdCBibGtfZmxhZ3MgPSAwO1xuLVx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xuK1x0dTY0IHJlcXVlc3QgPSBSRUFEX09OQ0UoY21kLVx1MDAzZXJlcXVlc3QpO1xuK1x0dTMyIHJlcXVlc3RfbGVuID0gUkVBRF9PTkNFKGNtZC1cdTAwM2VyZXF1ZXN0X2xlbik7XG4rXHR1NjQgZG91dF94ZmVycCA9IFJFQURfT05DRShjbWQtXHUwMDNlZG91dF94ZmVycCk7XG4rXHR1MzIgZG91dF94ZmVyX2xlbiA9IFJFQURfT05DRShjbWQtXHUwMDNlZG91dF94ZmVyX2xlbik7XG4rXHR1NjQgZGluX3hmZXJwID0gUkVBRF9PTkNFKGNtZC1cdTAwM2VkaW5feGZlcnApO1xuK1x0dTMyIGRpbl94ZmVyX2xlbiA9IFJFQURfT05DRShjbWQtXHUwMDNlZGluX3hmZXJfbGVuKTtcbitcdHUzMiBtYXhfcmVzcG9uc2VfbGVuID0gUkVBRF9PTkNFKGNtZC1cdTAwM2VtYXhfcmVzcG9uc2VfbGVuKTtcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAoY21kLVx1MDAzZXByb3RvY29sICE9IEJTR19QUk9UT0NPTF9TQ1NJIHx8XG4gXHQgICAgY21kLVx1MDAzZXN1YnByb3RvY29sICE9IEJTR19TVUJfUFJPVE9DT0xfU0NTSV9DTUQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKCFjbWQtXHUwMDNlcmVxdWVzdCB8fCBjbWQtXHUwMDNlcmVxdWVzdF9sZW4gPT0gMClcbitcdGlmICghcmVxdWVzdCB8fCByZXF1ZXN0X2xlbiA9PSAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChjbWQtXHUwMDNlZG91dF94ZmVyX2xlbiBcdTAwMjZcdTAwMjYgY21kLVx1MDAzZWRpbl94ZmVyX2xlbikge1xuK1x0aWYgKGRvdXRfeGZlcl9sZW4gXHUwMDI2XHUwMDI2IGRpbl94ZmVyX2xlbikge1xuIFx0XHRwcl93YXJuX29uY2UoXCJCSURJIHN1cHBvcnQgaW4gYnNnIGhhcyBiZWVuIHJlbW92ZWQuXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5AQCAtMTI2LDI1ICsxMzAsMjMgQEAgc3RhdGljIGludCBzY3NpX2JzZ191cmluZ19jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNcbiBcdGlmIChjbWQtXHUwMDNlZG91dF9pb3ZlY19jb3VudCBcdTAwM2UgMCB8fCBjbWQtXHUwMDNlZGluX2lvdmVjX2NvdW50IFx1MDAzZSAwKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spIHtcbitcdGlmIChpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSylcbiBcdFx0YmxrX2ZsYWdzID0gQkxLX01RX1JFUV9OT1dBSVQ7XG4tXHRcdGdmcF9tYXNrID0gR0ZQX05PV0FJVDtcbi1cdH1cbiBcbi1cdHJlcSA9IHNjc2lfYWxsb2NfcmVxdWVzdChxLCBjbWQtXHUwMDNlZG91dF94ZmVyX2xlbiA/XG4rXHRyZXEgPSBzY3NpX2FsbG9jX3JlcXVlc3QocSwgZG91dF94ZmVyX2xlbiA/XG4gXHRcdFx0XHQgUkVRX09QX0RSVl9PVVQgOiBSRVFfT1BfRFJWX0lOLCBibGtfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUihyZXEpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihyZXEpO1xuIFxuIFx0c2NtZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTtcbi1cdGlmIChjbWQtXHUwMDNlcmVxdWVzdF9sZW4gXHUwMDNlIHNpemVvZihzY21kLVx1MDAzZWNtbmQpKSB7XG4rXHRpZiAocmVxdWVzdF9sZW4gXHUwMDNlIHNpemVvZihzY21kLVx1MDAzZWNtbmQpKSB7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfcmVxO1xuIFx0fVxuLVx0c2NtZC1cdTAwM2VjbWRfbGVuID0gY21kLVx1MDAzZXJlcXVlc3RfbGVuO1xuK1x0c2NtZC1cdTAwM2VjbWRfbGVuID0gcmVxdWVzdF9sZW47XG4gXHRzY21kLVx1MDAzZWFsbG93ZWQgPSBTR19ERUZBVUxUX1JFVFJJRVM7XG4gXG4tXHRpZiAoY29weV9mcm9tX3VzZXIoc2NtZC1cdTAwM2VjbW5kLCB1cHRyNjQoY21kLVx1MDAzZXJlcXVlc3QpLCBjbWQtXHUwMDNlcmVxdWVzdF9sZW4pKSB7XG4rXHRpZiAoY29weV9mcm9tX3VzZXIoc2NtZC1cdTAwM2VjbW5kLCB1cHRyNjQocmVxdWVzdCksIHJlcXVlc3RfbGVuKSkge1xuIFx0XHRyZXQgPSAtRUZBVUxUO1xuIFx0XHRnb3RvIG91dF9mcmVlX3JlcTtcbiBcdH1cbkBAIC0xNTUsMTEgKzE1NywxNiBAQCBzdGF0aWMgaW50IHNjc2lfYnNnX3VyaW5nX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y1xuIFx0fVxuIFxuIFx0cGR1LVx1MDAzZXJlc3BvbnNlX2FkZHIgPSBjbWQtXHUwMDNlcmVzcG9uc2U7XG4tXHRzY21kLVx1MDAzZXNlbnNlX2xlbiA9IGNtZC1cdTAwM2VtYXhfcmVzcG9uc2VfbGVuID9cbi1cdFx0bWluKGNtZC1cdTAwM2VtYXhfcmVzcG9uc2VfbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpIDogU0NTSV9TRU5TRV9CVUZGRVJTSVpFO1xuK1x0c2NtZC1cdTAwM2VzZW5zZV9sZW4gPSBtYXhfcmVzcG9uc2VfbGVuID9cbitcdFx0bWluKG1heF9yZXNwb25zZV9sZW4sIFNDU0lfU0VOU0VfQlVGRkVSU0laRSkgOiBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7XG4rXG4rXHRpZiAoZG91dF94ZmVyX2xlbiB8fCBkaW5feGZlcl9sZW4pIHtcbitcdFx0Ym9vbCBpc193cml0ZSA9IGRvdXRfeGZlcl9sZW4gXHUwMDNlIDA7XG4rXHRcdHU2NCBidWZfYWRkciA9IGlzX3dyaXRlID8gZG91dF94ZmVycCA6IGRpbl94ZmVycDtcbitcdFx0dW5zaWduZWQgbG9uZyBidWZfbGVuID0gaXNfd3JpdGUgPyBkb3V0X3hmZXJfbGVuIDogZGluX3hmZXJfbGVuO1xuIFxuLVx0aWYgKGNtZC1cdTAwM2Vkb3V0X3hmZXJfbGVuIHx8IGNtZC1cdTAwM2VkaW5feGZlcl9sZW4pIHtcbi1cdFx0cmV0ID0gc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyKHJlcSwgaW91Y21kLCBpc3N1ZV9mbGFncywgZ2ZwX21hc2spO1xuK1x0XHRyZXQgPSBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIocmVxLCBpb3VjbWQsIGlzc3VlX2ZsYWdzLFxuK1x0XHRcdFx0XHQgICAgICAgaXNfd3JpdGUsIGJ1Zl9hZGRyLCBidWZfbGVuKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG91dF9mcmVlX3JlcTtcbiBcdFx0cGR1LVx1MDAzZWJpbyA9IHJlcS1cdTAwM2ViaW87XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjoxNTo0MS42NDQyMjEwNjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTk1MDAwMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNDU0kgQlNHIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyB0b3VjaGluZyBgZHJpdmVycy9zY3NpL3Njc2lfYnNnLmNgLiBSaWdodCBhd2F5LCBpdCdzIG1vZGlmeWluZyBib3RoIGBzY3NpX2JzZ191cmluZ19jbWRgIGFuZCBgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyYC4gSW50ZXJlc3RpbmcuIEZyb20gYSBxdWljayBnbGFuY2UsIEkgc2VlIGl0J3MgdXNpbmcgYFJFQURfT05DRWAgb24gdmFsdWVzIGZyb20gYGNtZGAgd2hpY2ggaXMgYSBnb29kIGNhbGwgdG8gcHJldmVudCB0aG9zZSBuYXN0eSBUaW1lLW9mLUNoZWNrLXRvLVRpbWUtb2YtVXNlIHZ1bG5lcmFiaWxpdGllcyBwb3RlbnRpYWxseSBpbnRyb2R1Y2VkIGJ5IGlvX3VyaW5nIFNRRXMuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRob3NlLlxuXG5Ob3csIGl0IHNlZW1zIGxpa2UgdGhleSd2ZSByZW1vdmVkIGBnZnBfbWFza2AgYW5kIGFyZSBkaXJlY3RseSB1c2luZyBgR0ZQX0tFUk5FTGAgaW4gYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAuIEhvbGQgb24sIGRvZXNuJ3QgdGhhdCBlZmZlY3RpdmVseSBieXBhc3MgdGhlIGBJT19VUklOR19GX05PTkJMT0NLYCBmbGFnIGZvciBtZW1vcnkgYWxsb2NhdGlvbj8gVGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYyBpZiB0aGUgaW50ZW50aW9uIHdhcyB0byByZXNwZWN0IHRoYXQgZmxhZy4gTGV0IG1lIHRoaW5rLi4ub2gsIHJpZ2h0LCBgYmxrX3JxX21hcF91c2VyX2lvdmAgYW5kIGBibGtfcnFfbWFwX3VzZXJgIGFyZSAqYWxzbyogY2FsbGVkIHdpdGggYEdGUF9LRVJORUxgLCBzbyBwZXJoYXBzIGl0J3MgY29uc2lzdGVudC5cblxuQnV0LCBoYW5nIG9uLi4uIGBzY3NpX2JzZ191cmluZ19jbWRgLi4uIGlzIHRoYXQgY2FsbGVkIGZyb20gYGJzZ191cmluZ19jbWRgPyBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbiBoZXJlIHRvIHNlZSB0aGUgb3ZlcmFsbCBpbXBhY3QuIExldCBtZSBxdWlja2x5IHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGJvdGggYHNjc2lfYnNnX3VyaW5nX2NtZGAgYW5kIGBic2dfdXJpbmdfY21kYCB0byBiZSBzdXJlLiBHb3R0YSBzZWUgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBpbnZva2VkIGFuZCB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIGJlZm9yZSBJIGNhbiBnaXZlIHRoaXMgcGF0Y2ggdGhlIGdyZWVuIGxpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODM2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MTU6NDcuMjM5MjIzNDcxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTc3NzcxODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NzaV9ic2dfdXJpbmdfY21kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTE2LSAqL1xcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jOjE3OnN0cnVjdCBzY3NpX2JzZ191cmluZ19jbWRfcGR1IHtcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0xOC1cXHRzdHJ1Y3QgYmlvICpiaW87XFx0XFx0LyogbWFwcGVkIHVzZXIgYnVmZmVyLCB1bm1hcCBpbiB0YXNrIHdvcmsgKi9cXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTIxLX07XFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6MjI6c3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUpIFxcdTAwM2M9IHNpemVvZl9maWVsZChzdHJ1Y3QgaW9fdXJpbmdfY21kLCBwZHUpKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0yMy1cXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoyNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBzY3NpX2JzZ191cmluZ19jbWRfcGR1ICpzY3NpX2JzZ191cmluZ19jbWRfcGR1KFxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTI1LVxcdHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZClcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0yNi17XFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6Mjc6XFx0cmV0dXJuIGlvX3VyaW5nX2NtZF90b19wZHUoaW91Y21kLCBzdHJ1Y3Qgc2NzaV9ic2dfdXJpbmdfY21kX3BkdSk7XFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMjgtfVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM9MzE9c3RhdGljIHZvaWQgc2NzaV9ic2dfdXJpbmdfdGFza19jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTMzLVxcdHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCA9IGlvX3VyaW5nX2NtZF9mcm9tX3R3KHR3X3JlcSk7XFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6MzQ6XFx0c3RydWN0IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUgKnBkdSA9IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUoaW91Y21kKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0zNS1cXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBwZHUtXFx1MDAzZXJlcTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTY2LVxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jOjY3OnN0YXRpYyBlbnVtIHJxX2VuZF9pb19yZXQgc2NzaV9ic2dfdXJpbmdfY21kX2RvbmUoc3RydWN0IHJlcXVlc3QgKnJlcSxcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy02OC1cXHRcXHRcXHRcXHRcXHRcXHQgIGJsa19zdGF0dXNfdCBzdGF0dXMsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYz03Nz1zdGF0aWMgaW50IHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcihzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtOTktXFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6MTAwOnN0YXRpYyBpbnQgc2NzaV9ic2dfdXJpbmdfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMTAxLVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsIGJvb2wgb3Blbl9mb3Jfd3JpdGUpXFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMTAyLXtcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoxMDM6XFx0c3RydWN0IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUgKnBkdSA9IHNjc2lfYnNnX3VyaW5nX2NtZF9wZHUoaW91Y21kKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0xMDQtXFx0Y29uc3Qgc3RydWN0IGJzZ191cmluZ19jbWQgKmNtZCA9XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0xNzktXFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM6MTgwOlxcdHJlcS1cXHUwMDNlZW5kX2lvID0gc2NzaV9ic2dfdXJpbmdfY21kX2RvbmU7XFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMTgxLVxcdHJlcS1cXHUwMDNlZW5kX2lvX2RhdGEgPSBpb3VjbWQ7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYz0yNzk9c3RydWN0IGJzZ19kZXZpY2UgKnNjc2lfYnNnX3JlZ2lzdGVyX3F1ZXVlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldilcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTI4Mi1cXHRcXHRcXHRkZXZfbmFtZShcXHUwMDI2c2Rldi1cXHUwMDNlc2Rldl9nZW5kZXYpLCBzY3NpX2JzZ19zZ19pb19mbixcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYzoyODM6XFx0XFx0XFx0c2NzaV9ic2dfdXJpbmdfY21kKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9ic2cuYy0yODQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjoxNTo0OS42OTcwMDY0NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTM1ODg0MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNDU0kgQlNHIGlvX3VyaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgZG91YmxlLWZldGNoIHZ1bG5lcmFiaWxpdHkgd2l0aGluIGBzY3NpX2JzZ191cmluZ19jbWRgLiBUaGUgZml4IGludm9sdmVzIHVzaW5nIGBSRUFEX09OQ0VgIGZvciBjZXJ0YWluIGZpZWxkcyBpbiB0aGUgYGNtZGAgc3RydWN0dXJlLiBUaGF0IG1ha2VzIHNlbnNlLCBtaXRpZ2F0ZXMgdGhlIHJhY2UgY29uZGl0aW9uLiBJdCBhbHNvIGNoYW5nZXMgdGhlIGBnZnBfbWFza2AgcGFzc2VkIHRvIGBibGtfcnFfbWFwX3VzZXJfaW92YCBhbmQgYGJsa19ycV9tYXBfdXNlcmAuIEhtbSwgcHJldmlvdXNseSBpdCB3YXMgdXNpbmcgYEdGUF9OT1dBSVRgIHdoZW4gYElPX1VSSU5HX0ZfTk9OQkxPQ0tgIHdhcyBzZXQsIG5vdyBpdCdzIGBHRlBfS0VSTkVMYC4gXG5cblRoYXQgdHJpZ2dlcnMgYSB0aG91Z2h0OiBpZiBgSU9fVVJJTkdfRl9OT05CTE9DS2AgaXMgYWN0aXZlLCB3b3VsZG4ndCBgR0ZQX0tFUk5FTGAgcG90ZW50aWFsbHkgY2F1c2UgYSBzbGVlcCB3aXRoaW4gYW4gYXRvbWljIGNvbnRleHQgb3IgYSBub24tYmxvY2tpbmcgaW9fdXJpbmcgcGF0aD8gQnV0IHdhaXQsIGlvX3VyaW5nIGNhbiBoYW5kbGUgc2xlZXBzIGlmIHRoZSBvcGVyYXRpb24gdXNlcyBhIHdvcmtlciB0aHJlYWQuIElmIGl0J3MgaW5saW5lLCBpdCBzaG91bGRuJ3Qgc2xlZXAuIFRoZSBpb191cmluZyBpbmZyYXN0cnVjdHVyZSBzaG91bGQgcmV0dXJuIGAtRUFHQUlOYCBpZiBpdCBjYW5ub3QgYmxvY2ssIHJpZ2h0PyBCdXQgaWYgd2UgZm9yY2UgYEdGUF9LRVJORUxgLCBtaWdodCBpdCBibG9jayBhbnl3YXk/IFRoaXMgaXMgd2hlcmUgdGhlIHN1YnRsZXRpZXMgY29tZSBpbnRvIHBsYXkuLi5cblxuVGhlbiBhZ2FpbiwgdGhlIGlvX3VyaW5nIHBhdGggaXMgYWxsb3dlZCB0byBibG9jaywgcHJvdmlkZWQgaXQgaXMgaW4gYSBjb250ZXh0IHRoYXQgKmNhbiogYmxvY2ssIGJ1dCBpZiBgSU9fVVJJTkdfRl9OT05CTE9DS2AgaXMgc2V0LCB0aGUgY2FsbGVyIGV4cGxpY2l0bHkgaW5kaWNhdGVzIGl0ICpkb2Vzbid0KiB3YW50IGJsb2NraW5nLiBJZiBibG9ja2luZyBvY2N1cnMgYW55d2F5LCBpdCB3b3VsZCB2aW9sYXRlIHRob3NlIG5vbi1ibG9ja2luZyBzZW1hbnRpY3MsIGJ1dCBpdCBsaWtlbHkgd291bGRuJ3QgY2F1c2UgYSBzeXN0ZW0gY3Jhc2gg4oCTIHVubGVzcyBpdCBoYXBwZW5lZCB3aXRoaW4gYSBzcGlubG9jayBvciBhIHNpbWlsYXIgY3JpdGljYWwgcmVnaW9uLiBTbywgaXMgaXQgcG90ZW50aWFsbHkgYSBzZW1hbnRpYyB2aW9sYXRpb24sIG9yIGEgbW9yZSBzZXJpb3VzIGlzc3VlP1xuXG5SaWdodCwgdGhpcyBwYXRjaCBpcyBmaXJzdCBhbmQgZm9yZW1vc3QgYSBkb3VibGUtZmV0Y2ggZml4LiBMZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuTGV0J3MgbG9vayBhdCBgc2NzaV9ic2dfdXJpbmdfY21kYCBhbmQgYGJzZ191cmluZ19jbWRgIGRpcmVjdGx5LiBIb3cgaXMgaXQgcmVhY2hhYmxlPyBPaCwgcmlnaHQsIHRocm91Z2ggaW9fdXJpbmcgb3BlcmF0aW9ucyBvbiBhIEJTRyBkZXZpY2UsIHN1Y2ggYXMgdGhvc2UgdW5kZXIgYC9kZXYvYnNnLypgLiBCU0cgZGV2aWNlcyBhcmUsIGVzc2VudGlhbGx5LCBTQ1NJIGJsb2NrIGRldmljZXMuIENhbiB3ZSBmdXp6IHRoaXM/IFllcywgYnkgb3BlbmluZyBgL2Rldi9ic2cvKmAgYW5kIGlzc3VpbmcgYElPUklOR19PUF9VUklOR19DTURgIHdpdGggYSBgY21kX29wYCBjb2RlIHRoYXQgY29ycmVzcG9uZHMgdG8gdmFsaWQgQlNHIGNvbW1hbmRzLiBUaGF0IGNvdWxkIGRlZmluaXRlbHkgZXhwb3NlIHRoZSBmaXguIEp1c3QgYSBwb2ludCB0byBjaGVjayAtIEkgc2VlIGBzY3NpX2JzZ191cmluZ19jbWRgIGlzIHJlZ2lzdGVyZWQgaW4gYHNjc2lfYnNnX3JlZ2lzdGVyX3F1ZXVlYC4gVGhhdCBjb25maXJtcyBpdHMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MTU6NTcuODMyODkyOTczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzQ1NDcxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NzaV9ic2dfcmVnaXN0ZXJfcXVldWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3Njc2lfYnNnLmM9MTkyPXN0YXRpYyBpbnQgc2NzaV9ic2dfc2dfaW9fZm4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBzZ19pb192NCAqaGRyLFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfYnNnLmMtMjc4LVxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jOjI3OTpzdHJ1Y3QgYnNnX2RldmljZSAqc2NzaV9ic2dfcmVnaXN0ZXJfcXVldWUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KVxcbmRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jLTI4MC17XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9wcml2Lmg9MTkzPXN0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2RoX3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikgeyB9XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgtMTk1LVxcbmRyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaDoxOTY6c3RydWN0IGJzZ19kZXZpY2UgKnNjc2lfYnNnX3JlZ2lzdGVyX3F1ZXVlKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7XFxuZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oLTE5Ny1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmM9MTQwMD1pbnQgc2NzaV9zeXNmc19hZGRfc2RldihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jLTE0NDQtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0JMS19ERVZfQlNHKSkge1xcbmRyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmM6MTQ0NTpcXHRcXHRzZGV2LVxcdTAwM2Vic2dfZGV2ID0gc2NzaV9ic2dfcmVnaXN0ZXJfcXVldWUoc2Rldik7XFxuZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYy0xNDQ2LVxcdFxcdGlmIChJU19FUlIoc2Rldi1cXHUwMDNlYnNnX2RldikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MTU6NTkuOTY3NDQ2NTczWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5NDMyNjY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IFNDU0kvQlNHIGFuZCBpb191cmluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIEkgc2VlIGBzY3NpX2JzZ19yZWdpc3Rlcl9xdWV1ZWAgaXMgYmVpbmcgY2FsbGVkIGZvciBldmVyeSBTQ1NJIGRldmljZSB3aGVuIGBDT05GSUdfQkxLX0RFVl9CU0dgIGlzIGVuYWJsZWQuIFRoYXQgcmluZ3MgYSBiZWxsLi4uIGluIHRoaXMgZnV6emluZyBlbnZpcm9ubWVudCwgd2UgKmRvKiBoYXZlIFNDU0kgZGV2aWNlcywgZWl0aGVyIHRocm91Z2ggYHNjc2lfZGVidWdgIG9yIGp1c3QgdmlydHVhbCBkaXNrcy4gR29vZCwgZ29vZC4gTm93LCB0aGUgbmV4dCBwaWVjZSBpcyBgc2NzaV9ic2dfdXJpbmdfY21kYCwgdGhhdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGBJT1JJTkdfT1BfVVJJTkdfQ01EYCBvcGVyYXRpb25zIG9uIEJsb2NrIFNDU0kgR2VuZXJpYyAoQlNHKSBkZXZpY2VzLlxuXG5MZXQncyBkb3VibGUtY2hlY2s7IGlzIGBzY3NpX2JzZ191cmluZ19jbWRgIGFjdHVhbGx5IHJlYWNoYWJsZT8gWXVwLCBpdCdzIGNvbm5lY3RlZC4gRXhjZWxsZW50LiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGRvdWJsZSBmZXRjaCB2dWxuZXJhYmlsaXR5LCBzbywgZnVuZGFtZW50YWxseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFNDU0kvQlNHIGxvZ2ljLiBEZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcgd2l0aCBmdXp6aW5nLlxuXG5NeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBhIGdvb2QgdGFyZ2V0LiBGb3IgdGhlIGBGb2N1c1N5bWJvbHNgLCBJJ2xsIHByaW9yaXRpemUgYHNjc2lfYnNnX3VyaW5nX2NtZGAgYW5kIHByb2JhYmx5IGBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXJgLiBJIHRoaW5rIHRob3NlIHdpbGwgYmUga2V5IGluIGV4cG9zaW5nIGFueXRoaW5nIGludGVyZXN0aW5nLlxuXG5UaGVuLCBmb3IgdGhlIGBFbmFibGVDb25maWdzYCwgZGVmaW5pdGVseSBgQkxLX0RFVl9CU0dgIGFuZCBhbHNvIGBJT19VUklOR2AsIHNpbmNlIHRoYXQncyB3aGF0IHRyaWdnZXJzIHRoZSBjcml0aWNhbCBjb2RlIHBhdGggaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnLCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MzgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MTY6MDUuMDYxNzc1NDA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzMzMjA1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfQlNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9NDU9Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG4tLVxcbmJsb2NrL0tjb25maWctNDctXFxuYmxvY2svS2NvbmZpZzo0ODpjb25maWcgQkxLX0RFVl9CU0dfQ09NTU9OXFxuYmxvY2svS2NvbmZpZy00OS1cXHR0cmlzdGF0ZVxcbi0tXFxuYmxvY2svS2NvbmZpZz01MT1jb25maWcgQkxLX0lDUVxcbi0tXFxuYmxvY2svS2NvbmZpZy01My1cXG5ibG9jay9LY29uZmlnOjU0OmNvbmZpZyBCTEtfREVWX0JTR0xJQlxcbmJsb2NrL0tjb25maWctNTUtXFx0Ym9vbCBcXFwiQmxvY2sgbGF5ZXIgU0cgc3VwcG9ydCB2NCBoZWxwZXIgbGliXFxcIlxcbi0tXFxuZHJpdmVycy9zY3NpL0tjb25maWc9MTMxPWNvbmZpZyBDSFJfREVWX1NHXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy0xNTUtXFxuZHJpdmVycy9zY3NpL0tjb25maWc6MTU2OmNvbmZpZyBCTEtfREVWX0JTR1xcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCIvZGV2L2JzZyBzdXBwb3J0IChTRyB2NClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjE2OjA2Ljg5NTEwMzY3MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDA2MDM5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBCTEtfREVWX0JTR2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEdpdmVuIHRoYXQgYEJMS19ERVZfQlNHYCBpcywgYXMgSSByZWNhbGwsIHJlbGF0ZWQgdG8gdGhlIGJsb2NrIGxheWVyIGFuZCBwb3RlbnRpYWxseSBTQ1NJIGRldmljZXMsIEknbSBwcmV0dHkgY29uZmlkZW50IHRoYXQgdGhlIGBkcml2ZXJzL3Njc2kvS2NvbmZpZ2AgZmlsZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQuIEknbGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgc3RhcnQgbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IGNvbmRpdGlvbmFsIGxvZ2ljLCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzLCBhbmQgbWF5YmUgc29tZSBoaW50cyBhYm91dCB3aGVyZSB0aGlzIHNwZWNpZmljIG9wdGlvbiBpcyB1c2VkIHdpdGhpbiB0aGUgU0NTSSBzdWJzeXN0ZW0uIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHByYWN0aWNlOyBhbHdheXMgc3RhcnQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzM2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MTY6MTAuMDM1NzExNzM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFxuIDE1MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUgYW5kIHJlYWRcXG4gMTUyOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL3Njc2kucnN0XFx1MDAzZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzZy5cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNTU6XFx0XFxuIDE1NjpcXHRjb25maWcgQkxLX0RFVl9CU0dcXG4gMTU3OlxcdFxcdGJvb2wgXFxcIi9kZXYvYnNnIHN1cHBvcnQgKFNHIHY0KVxcXCJcXG4gMTU4OlxcdFxcdGRlcGVuZHMgb24gU0NTSVxcbiAxNTk6XFx0XFx0ZGVmYXVsdCB5XFxuIDE2MDpcXHRcXHRoZWxwXFxuIDE2MTpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgZ2VuZXJpYyBTRyAoU0NTSSBnZW5lcmljKSB2NCBzdXBwb3J0XFxuIDE2MjpcXHRcXHQgIGZvciBhbnkgU0NTSSBkZXZpY2UuXFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdCAgVGhpcyBvcHRpb24gaXMgcmVxdWlyZWQgYnkgVURFViB0byBhY2Nlc3MgZGV2aWNlIHNlcmlhbCBudW1iZXJzLCBldGMuXFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMTY3OlxcdFxcbiAxNjg6XFx0Y29uZmlnIENIUl9ERVZfU0NIXFxuIDE2OTpcXHRcXHR0cmlzdGF0ZSBcXFwiU0NTSSBtZWRpYSBjaGFuZ2VyIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjE2OjEwLjAzNTk0ODA1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg5ODgxNTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW50ZXJwbGF5IG9mIFNDU0ksIEJTRywgYW5kIGlvX3VyaW5nIGZvciBCbG9jayBEZXZpY2UgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGBCTEtfREVWX0JTR2AgaXMgaGVhdmlseSByZWxpYW50IG9uIGBTQ1NJYC4gTWFrZXMgc2Vuc2UsIG9mIGNvdXJzZSwgYXMgQlNHIChCbG9jayBTQ1NJIEdlbmVyaWMpIGlzIGZ1bmRhbWVudGFsbHkgYnVpbHQgb24gdG9wIG9mIHRoZSBTQ1NJIGluZnJhc3RydWN0dXJlLiBBbmQgbm93LCB0byBhZGQgZXZlbiBtb3JlIGNvbXBsZXhpdHksIGBJT19VUklOR2AgaXMgaW4gdGhlIG1peC4gVGhlIGludGVyYWN0aW9uIGhlcmUgaXMga2V5IHRvIGhvdyB0aGluZ3MgYXJlIGdvaW5nIHRvIHdvcmsuXG5cbk15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgY3J1Y2lhbCBmdW5jdGlvbnM6IGBzY3NpX2JzZ191cmluZ19jbWRgIGFuZCBgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyYC4gVGhvc2UgYXJlIHRoZSBwcmltZSBzdXNwZWN0cyBmb3IgbW9kaWZpY2F0aW9uIGdpdmVuIHRoZSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkLCB3aGF0IHRoZSBiZWZvcmUvYWZ0ZXIgbG9va3MgbGlrZS4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBJIHNob3VsZCBicmluZyBpbnRvIG15IG9yYml0IGZvciBjb250ZXh0LiBBaCwgeWVzLCBgc2NzaV9ic2dfdXJpbmdfY21kX2RvbmVg4oCmIGV2ZW4gaWYgaXQncyBub3QgZGlyZWN0bHkgbW9kaWZpZWQsIHRoYXQgZnVuY3Rpb24gY2xlYXJseSBzaXRzIHdpdGhpbiB0aGUgZXhlY3V0aW9uIGZsb3cgc28gaXQncyBlc3NlbnRpYWwgZm9yIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblNvLCBmcm9tIHdoYXQgSSdtIHJlYWRpbmcsIHRoZSBwYXRjaCBoYXMgZm9jdXNlZCBpdHMgY2hhbmdlcyBvbiBgc2NzaV9ic2dfdXJpbmdfY21kYCBhbmQgYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAuIExldCdzIHplcm8gaW4gb24gYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAgbm93LCBzaW5jZSB0aGF0J3MgbGlrZWx5IHdoZXJlIGFueSB1c2VyIGJ1ZmZlciBoYW5kbGluZyBsb2dpYyBoYXMgYmVlbiBjaGFuZ2VkLiBUaW1lIHRvIGRpdmUgaW50byBgZHJpdmVycy9zY3NpL3Njc2lfYnNnLmNgIGFuZCBzdGFydCByZWFkaW5n4oCmXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjoxNjoxNS4wMjU4MzIyNDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9zY3NpX2JzZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDcwOlxcdHtcXG4gIDcxOlxcdFxcdHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCA9IHJlcS1cXHUwMDNlZW5kX2lvX2RhdGE7XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdGlvX3VyaW5nX2NtZF9kb19pbl90YXNrX2xhenkoaW91Y21kLCBzY3NpX2JzZ191cmluZ190YXNrX2NiKTtcXG4gIDc0OlxcdFxcdHJldHVybiBSUV9FTkRfSU9fTk9ORTtcXG4gIDc1OlxcdH1cXG4gIDc2OlxcdFxcbiAgNzc6XFx0c3RhdGljIGludCBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXIoc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4gIDc4OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW9fdXJpbmdfY21kICppb3VjbWQsXFxuICA3OTpcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLCBib29sIGlzX3dyaXRlLFxcbiAgODA6XFx0XFx0XFx0XFx0XFx0ICAgIHU2NCBidWZfYWRkciwgdW5zaWduZWQgbG9uZyBidWZfbGVuKVxcbiAgODE6XFx0e1xcbiAgODI6XFx0XFx0c3RydWN0IGlvdl9pdGVyIGl0ZXI7XFxuICA4MzpcXHRcXHRpbnQgcmV0O1xcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHRpZiAoaW91Y21kLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19VUklOR19DTURfRklYRUQpIHtcXG4gIDg2OlxcdFxcdFxcdHJldCA9IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWQoYnVmX2FkZHIsIGJ1Zl9sZW4sXFxuICA4NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRpc193cml0ZSA/IFdSSVRFIDogUkVBRCxcXG4gIDg4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZpdGVyLCBpb3VjbWQsIGlzc3VlX2ZsYWdzKTtcXG4gIDg5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAgOTA6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDkxOlxcdFxcdFxcdHJldCA9IGJsa19ycV9tYXBfdXNlcl9pb3YocmVxLVxcdTAwM2VxLCByZXEsIE5VTEwsIFxcdTAwMjZpdGVyLCBHRlBfS0VSTkVMKTtcXG4gIDkyOlxcdFxcdH0gZWxzZSB7XFxuICA5MzpcXHRcXHRcXHRyZXQgPSBibGtfcnFfbWFwX3VzZXIocmVxLVxcdTAwM2VxLCByZXEsIE5VTEwsIHVwdHI2NChidWZfYWRkciksXFxuICA5NDpcXHRcXHRcXHRcXHRcXHQgICAgICBidWZfbGVuLCBHRlBfS0VSTkVMKTtcXG4gIDk1OlxcdFxcdH1cXG4gIDk2OlxcdFxcbiAgOTc6XFx0XFx0cmV0dXJuIHJldDtcXG4gIDk4OlxcdH1cXG4gIDk5OlxcdFxcbiAxMDA6XFx0c3RhdGljIGludCBzY3NpX2JzZ191cmluZ19jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcXG4gMTAxOlxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsIGJvb2wgb3Blbl9mb3Jfd3JpdGUpXFxuIDEwMjpcXHR7XFxuIDEwMzpcXHRcXHRzdHJ1Y3Qgc2NzaV9ic2dfdXJpbmdfY21kX3BkdSAqcGR1ID0gc2NzaV9ic2dfdXJpbmdfY21kX3BkdShpb3VjbWQpO1xcbiAxMDQ6XFx0XFx0Y29uc3Qgc3RydWN0IGJzZ191cmluZ19jbWQgKmNtZCA9XFxuIDEwNTpcXHRcXHRcXHRpb191cmluZ19zcWUxMjhfY21kKGlvdWNtZC1cXHUwMDNlc3FlLCBzdHJ1Y3QgYnNnX3VyaW5nX2NtZCk7XFxuIDEwNjpcXHRcXHRzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kO1xcbiAxMDc6XFx0XFx0c3RydWN0IHJlcXVlc3QgKnJlcTtcXG4gMTA4OlxcdFxcdGJsa19tcV9yZXFfZmxhZ3NfdCBibGtfZmxhZ3MgPSAwO1xcbiAxMDk6XFx0XFx0dTY0IHJlcXVlc3QgPSBSRUFEX09OQ0UoY21kLVxcdTAwM2VyZXF1ZXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MTY6MTUuMDI1OTUyMDcxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NDE3NTcwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU2VjdXJpdHkgRml4IGluIHRoZSBTQ1NJIExheWVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgZG91YmxlLWZldGNoIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGBzY3NpX2JzZ191cmluZ19jbWRgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGV5J3JlIGFkZHJlc3NpbmcgdGhlIHBvdGVudGlhbCBmb3IgYSByYWNlIGNvbmRpdGlvbiB3aGVuIGFjY2Vzc2luZyB1c2VyLWNvbnRyb2xsZWQgZGF0YSB3aXRoaW4gYGlvX3VyaW5nYCBTUUUgbWVtb3J5LiBJdCdzIHVzaW5nIGBSRUFEX09OQ0VgIHRvIHNhZmVseSByZWFkIHRoZSByZWxldmFudCBmaWVsZHMgZnJvbSBgY21kYCBpbnRvIGxvY2FsIHZhcmlhYmxlcy4gVGhhdCdzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIOKAkyByZWR1Y2luZyB0aGUgd2luZG93IG9mIG9wcG9ydHVuaXR5IGZvciBhdHRhY2tlcnMgdG8gbWFuaXB1bGF0ZSBkYXRhIGJldHdlZW4gcmVhZHMuXG5cblRoZSBvdGhlciBwYXJ0IG9mIHRoZSBmaXggaW52b2x2ZXMgbW9kaWZ5aW5nIGBzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXJgIHRvIHVzZSB0aG9zZSBsb2NhbCB2YXJpYWJsZXMgaW5zdGVhZCBvZiByZS1yZWFkaW5nIGZyb20gYGNtZGAuIE1ha2VzIHNlbnNlLCBlbGltaW5hdGluZyB0aGF0IHNlY29uZCBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIGZldGNoLiBGdW5jdGlvbmFsbHksIGl0J3MgYSBjbGVhbiBjaGFuZ2UgZGlyZWN0bHkgYWRkcmVzc2luZyBhIHNlY3VyaXR5IGlzc3VlLCBhbmQgd2Uga25vdyBgaW9fdXJpbmdgIG9uIEJsb2NrIFNDU0kgR2VuZXJpYyAoQlNHKSBkZXZpY2VzIGlzIGEgcmVhY2hhYmxlIHBhdGguXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgc2NzaV9ic2dfdXJpbmdfY21kYCBhbmQgYHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlcmAuIEknbGwgYWxzbyBkb3VibGUgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLCBtYWlubHkgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIC0gbG9va3MgbGlrZSBgQkxLX0RFVl9CU0dgIGFuZCBgSU9fVVJJTkdgIGFyZSB0aGUgcmVsZXZhbnQgc2V0dGluZ3MuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBJT19VUklOR2AgaXMgdGhlIHByZWNpc2UgY29uZmlnIG5hbWUsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ2OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjE2OjE5Ljk2NzcxMjA1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0NzAwODE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fVVJJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MDc9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTQtXFxuaW5pdC9LY29uZmlnOjE5MTU6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTYtXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5MjQ9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzYtXFxuaW5pdC9LY29uZmlnOjE5Mzc6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTM4LVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pb191cmluZy9LY29uZmlnLTUtXFxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXFxuaW9fdXJpbmcvS2NvbmZpZy03LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTItXFxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXFxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTE3LVxcbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcXG5pb191cmluZy9LY29uZmlnLTE5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MTY6MjEuOTE0NzI2NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEwNDM1NTUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIHNvIHdlJ3JlIGZvY3VzaW5nIG9uIHRoaXMgU0NTSSBCU0cgaW9fdXJpbmcgdnVsbmVyYWJpbGl0eS4gQmFzZWQgb24gbXkgYW5hbHlzaXMsIGBJT19VUklOR2AgaXMgZGVmaW5pdGVseSBlc3NlbnRpYWwg4oCTIG5vIHF1ZXN0aW9uIGFib3V0IHRoYXQuIEFuZCBvZiBjb3Vyc2UsIGBCTEtfREVWX0JTR2AgaXMgY29yZSB0byB0aGUgZnVuY3Rpb25hbGl0eS4gU2luY2UgYEJMS19ERVZfQlNHYCByZWxpZXMgb24gaXQsIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgU0NTSWAganVzdCB0byBiZSBzYWZlIGFuZCBlbnN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBjb25maWd1cmVkLlxuXG5Ob3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgYXJlbid0IGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIGx1cmtpbmcgYXJvdW5kLiBPa2F5LCBJJ20gY29uZmlkZW50IHRoYXQgYENPTkZJR19CTEtfREVWX0JTR2AgaXMgdGhlIGtleSBvbmUgdG8gZW5hYmxlIGhlcmUuXG5cbkFscmlnaHQsIHRpbWUgdG8gZm9ybXVsYXRlIHRoZSBmaW5hbCBwYWNrYWdlLiBIZXJlJ3Mgd2hhdCBJJ3ZlIGdvdDpcblxuYFdvcnRoRnV6emluZzogdHJ1ZWAg4oCTIEFic29sdXRlbHkuIFRoaXMgaXMgYSBjbGVhciB0YXJnZXQgZm9yIGZ1enppbmcuXG5gRm9jdXNTeW1ib2xzOiBbXCJzY3NpX2JzZ191cmluZ19jbWRcIiwgXCJzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXJcIl1gIOKAkyBUaGVzZSBhcmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byB6ZXJvIGluIG9uLiBUaGUgdnVsbmVyYWJpbGl0eSBkaXJlY3RseSBpbXBhY3RzIHRoZW0uXG5gRW5hYmxlQ29uZmlnczogW1wiQkxLX0RFVl9CU0dcIiwgXCJJT19VUklOR1wiLCBcIlNDU0lcIl1gIOKAkyBUaGVzZSB0aHJlZSBjb25maWd1cmF0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIGV4cG9zZSBhbmQgZXhlcmNpc2UgdGhlIHZ1bG5lcmFibGUgY29kZS5cbmBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLWZldGNoIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGlvX3VyaW5nIGNvbW1hbmQgaGFuZGxpbmcgZm9yIFNDU0kgQlNHIGRldmljZXMuIEl0IG1vZGlmaWVzIHNjc2lfYnNnX3VyaW5nX2NtZCBhbmQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyIHRvIHVzZSBSRUFEX09OQ0UgZm9yIHJlYWRpbmcgdXNlci1jb250cm9sbGVkIFNRRSBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIHNlY3VyaXR5IGZpeCBpbiBhIHJlYWNoYWJsZSBwYXRoLlwiYCDigJMgVGhpcyBkb2N1bWVudHMgdGhlIGNvcmUgcmF0aW9uYWxlIGJlaGluZCB0aGUgY29uZmlndXJhdGlvbi4gSXQgaGlnaGxpZ2h0cyB0aGUgc2VjdXJpdHkgZml4LCB0aGUgZnVuY3Rpb25zIGludm9sdmVkLCBhbmQgdGhlIHVuZGVybHlpbmcgdnVsbmVyYWJpbGl0eSAoZG91YmxlLWZldGNoKS4gSXQncyBhbHNvIHJlYWNoYWJsZSwgYW5kIHRodXMgZnV6emFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjc1LCJPdXRwdXRUb2tlbnMiOjE0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjoxNjoyOC4wMTkwODUxMjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzM4ODA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9CU0dcIixcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJTQ1NJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2NzaV9ic2dfdXJpbmdfY21kXCIsXG4gICAgXCJzY3NpX2JzZ19tYXBfdXNlcl9idWZmZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZS1mZXRjaCB2dWxuZXJhYmlsaXR5IGluIHRoZSBpb191cmluZyBjb21tYW5kIGhhbmRsaW5nIGZvciBTQ1NJIEJTRyBkZXZpY2VzLiBJdCBtb2RpZmllcyBzY3NpX2JzZ191cmluZ19jbWQgYW5kIHNjc2lfYnNnX21hcF91c2VyX2J1ZmZlciB0byB1c2UgUkVBRF9PTkNFIGZvciByZWFkaW5nIHVzZXItY29udHJvbGxlZCBTUUUgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBzZWN1cml0eSBmaXggaW4gYSByZWFjaGFibGUgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0JTR1wiLFxuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3NpX2JzZ191cmluZ19jbWRcIixcbiAgICBcInNjc2lfYnNnX21hcF91c2VyX2J1ZmZlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLWZldGNoIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGlvX3VyaW5nIGNvbW1hbmQgaGFuZGxpbmcgZm9yIFNDU0kgQlNHIGRldmljZXMuIEl0IG1vZGlmaWVzIHNjc2lfYnNnX3VyaW5nX2NtZCBhbmQgc2NzaV9ic2dfbWFwX3VzZXJfYnVmZmVyIHRvIHVzZSBSRUFEX09OQ0UgZm9yIHJlYWRpbmcgdXNlci1jb250cm9sbGVkIFNRRSBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIHNlY3VyaXR5IGZpeCBpbiBhIHJlYWNoYWJsZSBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowv4svr[1] Phase: Succeeded StartedAt: 2026-07-27 12:16:53 +0000 UTC FinishedAt: 2026-07-27 12:16:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 12:16:53 +0000 UTC FinishedAt: 2026-07-27 12:16:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2] Phase: Succeeded StartedAt: 2026-07-27 12:16:53 +0000 UTC FinishedAt: 2026-07-27 14:32:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-27 12:16:53 +0000 UTC FinishedAt: 2026-07-27 14:32:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-27 12:16:53 +0000 UTC FinishedAt: 2026-07-27 12:17:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-27 12:16:53 +0000 UTC FinishedAt: 2026-07-27 12:16:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv4svr/series-workflowv4svr-convert-artifact-82358718/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-27 12:17:03 +0000 UTC FinishedAt: 2026-07-27 12:50:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-27 12:17:03 +0000 UTC FinishedAt: 2026-07-27 12:50:29 +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:*9d17a7e4-128e-4bd3-b5b6-a9377064079b,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-workflowv4svr/series-workflowv4svr-convert-artifact-82358718/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": "a00b9188-0b7f-44fe-8a28-168089031fb0", "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-workflowv4svr/series-workflowv4svr-build-action-643861156/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-27 12:17:03 +0000 UTC FinishedAt: 2026-07-27 12:50:19 +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:*9d17a7e4-128e-4bd3-b5b6-a9377064079b,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-workflowv4svr/series-workflowv4svr-convert-artifact-82358718/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": "a00b9188-0b7f-44fe-8a28-168089031fb0", "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-workflowv4svr/series-workflowv4svr-build-action-643861156/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-27 12:50:29 +0000 UTC FinishedAt: 2026-07-27 12:50:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-27 12:50:29 +0000 UTC FinishedAt: 2026-07-27 12:50:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-27 12:50:29 +0000 UTC FinishedAt: 2026-07-27 12:50:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-27 12:50:29 +0000 UTC FinishedAt: 2026-07-27 12:50:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv4svr/series-workflowv4svr-convert-artifact-150780657/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-27 12:50:40 +0000 UTC FinishedAt: 2026-07-27 12:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-27 12:50:40 +0000 UTC FinishedAt: 2026-07-27 12:52:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a00b9188-0b7f-44fe-8a28-168089031fb0,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-workflowv4svr/series-workflowv4svr-build-action-643861156/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-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-27 12:52:39 +0000 UTC FinishedAt: 2026-07-27 12:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-27 12:52:39 +0000 UTC FinishedAt: 2026-07-27 12:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-27 12:52:39 +0000 UTC FinishedAt: 2026-07-27 13:48:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-27 12:52:39 +0000 UTC FinishedAt: 2026-07-27 13:48:02 +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:*9d17a7e4-128e-4bd3-b5b6-a9377064079b,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-workflowv4svr/series-workflowv4svr-convert-artifact-150780657/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": "4bc788b4-7694-4084-ad2d-1c71589d6ba7", "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-workflowv4svr/series-workflowv4svr-build-action-2001885373/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-27 12:52:39 +0000 UTC FinishedAt: 2026-07-27 13:47:52 +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:*9d17a7e4-128e-4bd3-b5b6-a9377064079b,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-workflowv4svr/series-workflowv4svr-convert-artifact-150780657/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": "4bc788b4-7694-4084-ad2d-1c71589d6ba7", "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-workflowv4svr/series-workflowv4svr-build-action-2001885373/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-27 13:48:02 +0000 UTC FinishedAt: 2026-07-27 13:48:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-27 13:48:02 +0000 UTC FinishedAt: 2026-07-27 13:48:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-27 13:48:02 +0000 UTC FinishedAt: 2026-07-27 13:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-27 13:48:02 +0000 UTC FinishedAt: 2026-07-27 13:49:44 +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:*4bc788b4-7694-4084-ad2d-1c71589d6ba7,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-workflowv4svr/series-workflowv4svr-build-action-2001885373/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-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-27 13:49:54 +0000 UTC FinishedAt: 2026-07-27 14:32:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-27 13:49:54 +0000 UTC FinishedAt: 2026-07-27 14:32:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"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:*a00b9188-0b7f-44fe-8a28-168089031fb0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4bc788b4-7694-4084-ad2d-1c71589d6ba7,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-workflowv4svr/series-workflowv4svr-build-action-643861156/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-workflowv4svr/series-workflowv4svr-build-action-2001885373/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-27 13:49:54 +0000 UTC FinishedAt: 2026-07-27 13:50:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-27 13:49:54 +0000 UTC FinishedAt: 2026-07-27 13:50:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"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-workflowv4svr/series-workflowv4svr-convert-artifact-539291046/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-27 13:49:54 +0000 UTC FinishedAt: 2026-07-27 13:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-27 13:49:54 +0000 UTC FinishedAt: 2026-07-27 13:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-27 13:49:54 +0000 UTC FinishedAt: 2026-07-27 13:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-27 13:50:16 +0000 UTC FinishedAt: 2026-07-27 14:32:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4svr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["scsi_bsg_uring_cmd","scsi_bsg_map_user_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_BSG","IO_URING","SCSI"],"series_id":"370b9d71-296e-411f-ac5b-5c3c81eb2836","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-27 13:50:16 +0000 UTC FinishedAt: 2026-07-27 14:32:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a00b9188-0b7f-44fe-8a28-168089031fb0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4bc788b4-7694-4084-ad2d-1c71589d6ba7,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-workflowv4svr/series-workflowv4svr-build-action-643861156/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-workflowv4svr/series-workflowv4svr-build-action-2001885373/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-workflowv4svr/series-workflowv4svr-convert-artifact-539291046/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,}