Name: series-workflowv8722 Phase: Failed StartedAt: 2026-09-01 18:41:34 +0000 UTC FinishedAt: 2026-09-01 19:07:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8722[0] Phase: Succeeded StartedAt: 2026-09-01 18:41:34 +0000 UTC FinishedAt: 2026-09-01 19:07:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8722[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 18:41:34 +0000 UTC FinishedAt: 2026-09-01 19:07:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE4OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7JiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8pLCB3aXRoIG5vIGNoYW5nZXMgdG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE4OjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYWIzOTZkNTYwYmU2NzAwYTUxYzhmZTIzN2EzZDc5NDU0Y2M5MmU4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMTg6NDM6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcbmluZGV4IDIyMzNkODcxYTM4ZjQuLmFlZTgwZGRhNjIyOTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXG5AQCAtNzYsMzMgJiM0Mzs3Niw1MyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21tYXBfc3VwcG9ydGVkKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4gXHRrdm1fbXVubWFwKG1lbSwgdG90YWxfc2l6ZSk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBGaWxsIEBuaWRzIHdpdGggdGhlIGZpcnN0IEBucl9uaWRzIG5vZGVzIGluIHRoZSBhbGxvd2VkIG1hc2suXG4mIzQzOyAqIFJldHVybiBmYWxzZSBpZiB0aGUgbWFzayBjb250YWlucyBmZXdlciB0aGFuIEBucl9uaWRzIG5vZGVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgZ2V0X251bWFfbm9kZV9pZHMoaW50ICpuaWRzLCBpbnQgbnJfbmlkcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSBnZXRfbnVtYV9tZW1fbm9kZXMoKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5pZDtcbiYjNDM7XHRpbnQgbnJfZm91bmQgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9zZXRfYml0KG5pZCwgXHUwMDI2bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spKSB7XG4mIzQzO1x0XHRuaWRzW25yX2ZvdW5kJiM0MzsmIzQzO10gPSBuaWQ7XG4mIzQzO1x0XHRpZiAobnJfZm91bmQgPT0gbnJfbmlkcylcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdGVzdF9tYmluZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIHtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tfMCA9IDE7IC8qIG5pZDogMCAqL1xuLVx0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrLCBiaW5kX25vZGVtYXNrO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUobm9kZW1hc2spICYjNDM7IDE7XG4gXHRpbnQgcG9saWN5O1xuIFx0Y2hhciAqbWVtO1xuJiM0MztcdGludCBuaWQ7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKCFpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKCkpXG4mIzQzO1x0aWYgKCFnZXRfbnVtYV9ub2RlX2lkcyhcdTAwMjZuaWQsIDEpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0YmluZF9ub2RlbWFzayA9IDFVTCBcdTAwM2NcdTAwM2MgbmlkO1xuIFx0bWVtID0ga3ZtX21tYXAodG90YWxfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQpO1xuIFxuIFx0LyogVGVzdCBNUE9MX0lOVEVSTEVBVkUgcG9saWN5ICovXG4tXHRrdm1fbWJpbmQobWVtLCBwYWdlX3NpemUgKiAyLCBNUE9MX0lOVEVSTEVBVkUsIFx1MDAyNm5vZGVtYXNrXzAsIG1heG5vZGUsIDApO1xuJiM0MztcdGt2bV9tYmluZChtZW0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfSU5URVJMRUFWRSwgXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XG4gXHRrdm1fZ2V0X21lbXBvbGljeShcdTAwMjZwb2xpY3ksIFx1MDAyNm5vZGVtYXNrLCBtYXhub2RlLCBtZW0sIE1QT0xfRl9BRERSKTtcbi1cdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0lOVEVSTEVBVkUgXHUwMDI2XHUwMDI2IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsXG4mIzQzO1x0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSBcdTAwMjZcdTAwMjYgbm9kZW1hc2sgPT0gYmluZF9ub2RlbWFzayxcbiBcdFx0ICAgIFwmIzM0O1dhbnRlZCBNUE9MX0lOVEVSTEVBVkUgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHhcJiMzNDssXG4tXHRcdCAgICBNUE9MX0lOVEVSTEVBVkUsIG5vZGVtYXNrXzAsIHBvbGljeSwgbm9kZW1hc2spO1xuJiM0MztcdFx0ICAgIE1QT0xfSU5URVJMRUFWRSwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7XG4gXG4gXHQvKiBUZXN0IGJhc2ljIE1QT0xfQklORCBwb2xpY3kgKi9cbi1cdGt2bV9tYmluZChtZW0gJiM0MzsgcGFnZV9zaXplICogMiwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcbiYjNDM7XHRrdm1fbWJpbmQobWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XG4gXHRrdm1fZ2V0X21lbXBvbGljeShcdTAwMjZwb2xpY3ksIFx1MDAyNm5vZGVtYXNrLCBtYXhub2RlLCBtZW0gJiM0MzsgcGFnZV9zaXplICogMiwgTVBPTF9GX0FERFIpO1xuLVx0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfQklORCBcdTAwMjZcdTAwMjYgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCxcbiYjNDM7XHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9CSU5EIFx1MDAyNlx1MDAyNiBub2RlbWFzayA9PSBiaW5kX25vZGVtYXNrLFxuIFx0XHQgICAgXCYjMzQ7V2FudGVkIE1QT0xfQklORCAoJXUpIGFuZCBub2RlbWFzayAweCVseCwgZ290ICV1IGFuZCAweCVseFwmIzM0Oyxcbi1cdFx0ICAgIE1QT0xfQklORCwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7XG4mIzQzO1x0XHQgICAgTVBPTF9CSU5ELCBiaW5kX25vZGVtYXNrLCBwb2xpY3ksIG5vZGVtYXNrKTtcbiBcbiBcdC8qIFRlc3QgTVBPTF9ERUZBVUxUIHBvbGljeSAqL1xuIFx0a3ZtX21iaW5kKG1lbSwgdG90YWxfc2l6ZSwgTVBPTF9ERUZBVUxULCBOVUxMLCAwLCAwKTtcbkBAIC0xMTIsNyAmIzQzOzEzMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiBcdFx0ICAgIE1QT0xfREVGQVVMVCwgcG9saWN5LCBub2RlbWFzayk7XG4gXG4gXHQvKiBUZXN0IHdpdGggaW52YWxpZCBwb2xpY3kgKi9cbi1cdHJldCA9IG1iaW5kKG1lbSwgcGFnZV9zaXplLCA5OTksIFx1MDAyNm5vZGVtYXNrXzAsIG1heG5vZGUsIDApO1xuJiM0MztcdHJldCA9IG1iaW5kKG1lbSwgcGFnZV9zaXplLCA5OTksIFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xuIFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG4gXHRcdCAgICBcJiMzNDttYmluZCB3aXRoIGludmFsaWQgcG9saWN5IHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXCYjMzQ7KTtcbiBcbkBAIC0xMjEsMTcgJiM0MzsxNDEsMTkgQEAgc3RhdGljIHZvaWQgdGVzdF9tYmluZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIFxuIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBub2RlMF9tYXNrID0gMTsgIC8qIE5vZGUgMCAqL1xuLVx0dW5zaWduZWQgbG9uZyBub2RlMV9tYXNrID0gMjsgIC8qIE5vZGUgMSAqL1xuLVx0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gODtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGJpbmRfbm9kZW1hc2tzWzJdO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUoYmluZF9ub2RlbWFza3NbMF0pICYjNDM7IDE7XG4gXHR2b2lkICpwYWdlc1s0XTtcbiYjNDM7XHRpbnQgbmlkc1syXTtcbiBcdGludCBzdGF0dXNbNF07XG4gXHRjaGFyICptZW07XG4gXHRpbnQgaTtcbiBcbi1cdGlmICghaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSgpKVxuJiM0MztcdGlmICghZ2V0X251bWFfbm9kZV9pZHMobmlkcywgQVJSQVlfU0laRShuaWRzKSkpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRiaW5kX25vZGVtYXNrc1swXSA9IDFVTCBcdTAwM2NcdTAwM2Mgbmlkc1swXTtcbiYjNDM7XHRiaW5kX25vZGVtYXNrc1sxXSA9IDFVTCBcdTAwM2NcdTAwM2Mgbmlkc1sxXTtcbiBcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDQ7IGkmIzQzOyYjNDM7KVxuQEAgLTEzOSwzNCAmIzQzOzE2MSw0MiBAQCBzdGF0aWMgdm9pZCB0ZXN0X251bWFfYWxsb2NhdGlvbihpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIFxuIFx0LyogU2V0IE5VTUEgcG9saWN5IGFmdGVyIGFsbG9jYXRpb24gKi9cbiBcdG1lbXNldChtZW0sIDB4YWEsIHBhZ2Vfc2l6ZSk7XG4tXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMF9tYXNrLCBtYXhub2RlLCAwKTtcbiYjNDM7XHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XG4gXHRrdm1fZmFsbG9jYXRlKGZkLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsIDAsIHBhZ2Vfc2l6ZSk7XG4gXG4gXHQvKiBTZXQgTlVNQSBwb2xpY3kgYmVmb3JlIGFsbG9jYXRpb24gKi9cbi1cdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMV9tYXNrLCBtYXhub2RlLCAwKTtcbi1cdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMF9tYXNrLCBtYXhub2RlLCAwKTtcbiYjNDM7XHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMV0sIG1heG5vZGUsIDApO1xuJiM0MztcdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XG4gXHRtZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTtcbiBcbiBcdC8qIFZhbGlkYXRlIGlmIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gc3BlY2lmaWVkIE5VTUEgbm9kZXMgKi9cbiBcdGt2bV9tb3ZlX3BhZ2VzKDAsIDQsIHBhZ2VzLCBOVUxMLCBzdGF0dXMsIDApO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IDEsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbMF0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IDEsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbMV0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDAsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMiBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbMl0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IDAsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbM10pO1xuJiM0MztcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzFdLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgbmlkc1sxXSwgc3RhdHVzWzBdKTtcbiYjNDM7XHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1sxXSxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIG5pZHNbMV0sIHN0YXR1c1sxXSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IG5pZHNbMF0sXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbMl0pO1xuJiM0MztcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzBdLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgbmlkc1swXSwgc3RhdHVzWzNdKTtcbiBcbiBcdC8qIFB1bmNoIGhvbGUgZm9yIGFsbCBwYWdlcyAqL1xuIFx0a3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCB0b3RhbF9zaXplKTtcbiBcbiBcdC8qIENoYW5nZSBOVU1BIHBvbGljeSBub2RlcyBhbmQgcmVhbGxvY2F0ZSAqL1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGUxX21hc2ssIG1heG5vZGUsIDApO1xuJiM0MztcdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XG4mIzQzO1x0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTtcbiBcdG1lbXNldChtZW0sIDB4YWEsIHRvdGFsX3NpemUpO1xuIFxuIFx0a3ZtX21vdmVfcGFnZXMoMCwgNCwgcGFnZXMsIE5VTEwsIHN0YXR1cywgMCk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gMCwgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIHN0YXR1c1swXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gMCwgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIHN0YXR1c1sxXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gMSwgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIHN0YXR1c1syXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gMSwgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIHN0YXR1c1szXSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IG5pZHNbMF0sXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbMF0pO1xuJiM0MztcdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSBuaWRzWzBdLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgbmlkc1swXSwgc3RhdHVzWzFdKTtcbiYjNDM7XHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1sxXSxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIG5pZHNbMV0sIHN0YXR1c1syXSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IG5pZHNbMV0sXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbM10pO1xuIFxuIFx0a3ZtX211bm1hcChtZW0sIHRvdGFsX3NpemUpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXG5pbmRleCAyOTU3MmE2ZDc4OWNkLi5iODk1NTliNmVhM2MxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXG5AQCAtNCw4ICYjNDM7NCw3IEBAXG4gI2lmbmRlZiBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcbiAjZGVmaW5lIFNFTEZURVNUX0tWTV9OVU1BSUZfSFxuIFxuLSNpbmNsdWRlIFx1MDAzY2RpcmVudC5oXHUwMDNlXG4tXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3ZtX3N5c2NhbGxzLmhcJiMzNDtcbkBAIC0zMCw1NCAmIzQzOzI5LDE2IEBAIEtWTV9TWVNDQUxMX0RFRklORShtYmluZCwgNiwgdm9pZCAqLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBzaXplLCBpbnQsIG1vZGUsXG4gXHRcdCAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiwgbm9kZW1hc2ssIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsXG4gXHRcdCAgIHVuc2lnbmVkIGludCwgZmxhZ3MpO1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGdldF9tYXhfbnVtYV9ub2RlKHZvaWQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbnVtYV9tZW1fbm9kZXModm9pZClcbiB7XG4tXHRzdHJ1Y3QgZGlyZW50ICpkZTtcbi1cdGludCBtYXhfbm9kZSA9IDA7XG4tXHRESVIgKmQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7XG4gXG4tXHQvKlxuLVx0ICogQXNzdW1lIHRoZXJlJiMzOTtzIGEgc2luZ2xlIG5vZGUgaWYgdGhlIGtlcm5lbCBkb2VzbiYjMzk7dCBzdXBwb3J0IE5VTUEsXG4tXHQgKiBvciBpZiBubyBub2RlcyBhcmUgZm91bmQuXG4tXHQgKi9cbi1cdGQgPSBvcGVuZGlyKFwmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZVwmIzM0Oyk7XG4tXHRpZiAoIWQpXG4mIzQzO1x0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xuJiM0MztcdGlmIChnZXRfbWVtcG9saWN5KE5VTEwsIFx1MDAyNm5vZGVtYXNrLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgTlVMTCxcbiYjNDM7XHRcdFx0ICBNUE9MX0ZfTUVNU19BTExPV0VEKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkge1xuLVx0XHRpbnQgbm9kZV9pZDtcbi1cdFx0Y2hhciAqZW5kcHRyO1xuLVxuLVx0XHRpZiAoc3RybmNtcChkZS1cdTAwM2VkX25hbWUsIFwmIzM0O25vZGVcJiMzNDssIDQpICE9IDApXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdG5vZGVfaWQgPSBzdHJ0b2woZGUtXHUwMDNlZF9uYW1lICYjNDM7IDQsIFx1MDAyNmVuZHB0ciwgMTApO1xuLVx0XHRpZiAoKmVuZHB0ciAhPSAmIzM5O1xcMCYjMzk7KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpZiAobm9kZV9pZCBcdTAwM2UgbWF4X25vZGUpXG4tXHRcdFx0bWF4X25vZGUgPSBub2RlX2lkO1xuLVx0fVxuLVx0Y2xvc2VkaXIoZCk7XG4tXG4tXHRyZXR1cm4gbWF4X25vZGU7XG4tfVxuLVxuLXN0YXRpYyBib29sIGlzX251bWFfYXZhaWxhYmxlKHZvaWQpXG4te1xuLVx0Lypcbi1cdCAqIFByb2JlIGZvciBOVU1BIGJ5IGRvaW5nIGEgZHVtbXkgZ2V0X21lbXBvbGljeSgpLiAgSWYgdGhlIHN5c2NhbGxcbi1cdCAqIGZhaWxzIHdpdGggRU5PU1lTLCB0aGVuIHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGhvdXQgTlVNQSBzdXBwb3J0LlxuLVx0ICogaWYgdGhlIHN5c2NhbGwgZmFpbHMgd2l0aCBFUEVSTSwgdGhlbiB0aGUgcHJvY2Vzcy91c2VyIGxhY2tzIHRoZVxuLVx0ICogbmVjZXNzYXJ5IGNhcGFiaWxpdGllcyAoQ0FQX1NZU19OSUNFKS5cbi1cdCAqL1xuLVx0cmV0dXJuICFnZXRfbWVtcG9saWN5KE5VTEwsIE5VTEwsIDAsIE5VTEwsIDApIHx8XG4tXHRcdChlcnJubyAhPSBFTk9TWVMgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVQRVJNKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSBib29sIGlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0odm9pZClcbi17XG4tXHRyZXR1cm4gaXNfbnVtYV9hdmFpbGFibGUoKSBcdTAwMjZcdTAwMjYgZ2V0X21heF9udW1hX25vZGUoKSBcdTAwM2U9IDE7XG4mIzQzO1x0cmV0dXJuIG5vZGVtYXNrO1xuIH1cbiBcbiAjZW5kaWYgLyogU0VMRlRFU1RfS1ZNX05VTUFJRl9IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXG5pbmRleCA0NjllM2FiMTY0NjA4Li5iNWY0ZWQ2NzEyMTg5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbkBAIC0yMzIsOCAmIzQzOzIzMiw4IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxuIFx0XHQgICB1NjQgKnBpcGlzX3JjdmQpXG4ge1xuIFx0bG9uZyBwYWdlc19ub3RfbW92ZWQ7XG4tXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW3NpemVvZihub2RlbWFzaykgKiA4XTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW0JJVFNfUEVSX1RZUEUobm9kZW1hc2spXTtcbiBcdGludCBub2RlcyA9IDA7XG4gXHR0aW1lX3Qgc3RhcnRfdGltZSwgbGFzdF91cGRhdGUsIG5vdztcbiBcdHRpbWVfdCBpbnRlcnZhbF9zZWNzID0gMTtcbkBAIC0yNDcsMTkgJiM0MzsyNDcsMTcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7Q2FsbGluZyBtaWdyYXRlX3BhZ2VzIGV2ZXJ5ICVkIG1pY3Jvc2Vjb25kc1xcblwmIzM0OyxcbiBcdFx0ZGVsYXlfdXNlY3MpO1xuIFxuLVx0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xuLVx0a3ZtX2dldF9tZW1wb2xpY3koTlVMTCwgXHUwMDI2bm9kZW1hc2ssIHNpemVvZihub2RlbWFzaykgKiA4LFxuLVx0XHRcdCAgMCwgTVBPTF9GX01FTVNfQUxMT1dFRCk7XG4mIzQzO1x0bm9kZW1hc2sgPSBnZXRfbnVtYV9tZW1fbm9kZXMoKTtcbiBcbiBcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtOdW1hIG5vZGVzIGZvdW5kIGFtb25nc3QgZmlyc3QgJWx1IHBvc3NpYmxlIG5vZGVzIFwmIzM0O1xuIFx0XHRcJiMzNDsoZWFjaCAxLWJpdCBpbmRpY2F0ZXMgbm9kZSBpcyBwcmVzZW50KTogJSNseFxcblwmIzM0Oyxcbi1cdFx0c2l6ZW9mKG5vZGVtYXNrKSAqIDgsIG5vZGVtYXNrKTtcbiYjNDM7XHRcdEJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBub2RlbWFzayk7XG4gXG4gXHQvKiBJbml0IGFycmF5IG9mIG1hc2tzIGNvbnRhaW5pbmcgYSBzaW5nbGUtYml0IGluIGVhY2gsIG9uZSBmb3IgZWFjaFxuIFx0ICogYXZhaWxhYmxlIG5vZGUuIG1pZ3JhdGVfcGFnZXMgY2FsbGVkIGJlbG93IHJlcXVpcmVzIHNwZWNpZnlpbmcgbm9kZXNcbiBcdCAqIGFzIGJpdCBtYXNrcy5cbiBcdCAqL1xuLVx0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcdTAwM2Mgc2l6ZW9mKG5vZGVtYXNrKSAqIDg7IGkmIzQzOyYjNDM7LCBiaXQgXHUwMDNjXHUwMDNjPSAxKSB7XG4mIzQzO1x0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcdTAwM2MgQklUU19QRVJfVFlQRShub2RlbWFzayk7IGkmIzQzOyYjNDM7LCBiaXQgXHUwMDNjXHUwMDNjPSAxKSB7XG4gXHRcdGlmIChub2RlbWFzayBcdTAwMjYgYml0KSB7XG4gXHRcdFx0bm9kZW1hc2tzW25vZGVzXSA9IG5vZGVtYXNrIFx1MDAyNiBiaXQ7XG4gXHRcdFx0bm9kZXMmIzQzOyYjNDM7O1xuQEAgLTI5MSw3ICYjNDM7Mjg5LDcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRcdCAqIEtWTV9DUkVBVEVfVkNQVSBpb2N0bC4gSWYgdGhhdCBhc3N1bXB0aW9uIGV2ZXIgY2hhbmdlcyB0aGlzXG4gXHRcdCAqIHRlc3QgbWF5IGJyZWFrIG9yIGdpdmUgYSBmYWxzZSBwb3NpdGl2ZSBzaWduYWwuXG4gXHRcdCAqL1xuLVx0XHRwYWdlc19ub3RfbW92ZWQgPSBtaWdyYXRlX3BhZ2VzKDAsIHNpemVvZihub2RlbWFza3NbZnJvbV0pLFxuJiM0MztcdFx0cGFnZXNfbm90X21vdmVkID0gbWlncmF0ZV9wYWdlcygwLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrc1tmcm9tXSkgJiM0MzsgMSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZub2RlbWFza3NbZnJvbV0sXG4gXHRcdFx0XHRcdFx0XHUwMDI2bm9kZW1hc2tzW3RvXSk7XG4gXHRcdGlmIChwYWdlc19ub3RfbW92ZWQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTg6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8pLCB3aXRoIG5vIGNoYW5nZXMgdG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWIzOTZkNTYwYmU2NzAwYTUxYzhmZTIzN2EzZDc5NDU0Y2M5MmU4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMTg6NDM6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYwppbmRleCAyMjMzZDg3MWEzOGY0Li5hZWU4MGRkYTYyMjk1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMKQEAgLTc2LDMzICYjNDM7NzYsNTMgQEAgc3RhdGljIHZvaWQgdGVzdF9tbWFwX3N1cHBvcnRlZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKQogCWt2bV9tdW5tYXAobWVtLCB0b3RhbF9zaXplKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogRmlsbCBAbmlkcyB3aXRoIHRoZSBmaXJzdCBAbnJfbmlkcyBub2RlcyBpbiB0aGUgYWxsb3dlZCBtYXNrLgomIzQzOyAqIFJldHVybiBmYWxzZSBpZiB0aGUgbWFzayBjb250YWlucyBmZXdlciB0aGFuIEBucl9uaWRzIG5vZGVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGdldF9udW1hX25vZGVfaWRzKGludCAqbmlkcywgaW50IG5yX25pZHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gZ2V0X251bWFfbWVtX25vZGVzKCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmlkOwomIzQzOwlpbnQgbnJfZm91bmQgPSAwOwomIzQzOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KG5pZCwgJmFtcDtub2RlbWFzaywgQklUU19QRVJfVFlQRShub2RlbWFzaykpIHsKJiM0MzsJCW5pZHNbbnJfZm91bmQmIzQzOyYjNDM7XSA9IG5pZDsKJiM0MzsJCWlmIChucl9mb3VuZCA9PSBucl9uaWRzKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpCiB7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBub2RlbWFza18wID0gMTsgLyogbmlkOiAwICovCi0JdW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7Ci0JdW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShub2RlbWFzayk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbm9kZW1hc2ssIGJpbmRfbm9kZW1hc2s7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUobm9kZW1hc2spICYjNDM7IDE7CiAJaW50IHBvbGljeTsKIAljaGFyICptZW07CiYjNDM7CWludCBuaWQ7CiAJaW50IHJldDsKIAotCWlmICghaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSgpKQomIzQzOwlpZiAoIWdldF9udW1hX25vZGVfaWRzKCZhbXA7bmlkLCAxKSkKIAkJcmV0dXJuOwogCiYjNDM7CWJpbmRfbm9kZW1hc2sgPSAxVUwgJmx0OyZsdDsgbmlkOwogCW1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTsKIAogCS8qIFRlc3QgTVBPTF9JTlRFUkxFQVZFIHBvbGljeSAqLwotCWt2bV9tYmluZChtZW0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfSU5URVJMRUFWRSwgJmFtcDtub2RlbWFza18wLCBtYXhub2RlLCAwKTsKJiM0MzsJa3ZtX21iaW5kKG1lbSwgcGFnZV9zaXplICogMiwgTVBPTF9JTlRFUkxFQVZFLCAmYW1wO2JpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApOwogCWt2bV9nZXRfbWVtcG9saWN5KCZhbXA7cG9saWN5LCAmYW1wO25vZGVtYXNrLCBtYXhub2RlLCBtZW0sIE1QT0xfRl9BRERSKTsKLQlURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9JTlRFUkxFQVZFICZhbXA7JmFtcDsgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCwKJiM0MzsJVEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSAmYW1wOyZhbXA7IG5vZGVtYXNrID09IGJpbmRfbm9kZW1hc2ssCiAJCSAgICAmIzM0O1dhbnRlZCBNUE9MX0lOVEVSTEVBVkUgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHgmIzM0OywKLQkJICAgIE1QT0xfSU5URVJMRUFWRSwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7CiYjNDM7CQkgICAgTVBPTF9JTlRFUkxFQVZFLCBiaW5kX25vZGVtYXNrLCBwb2xpY3ksIG5vZGVtYXNrKTsKIAogCS8qIFRlc3QgYmFzaWMgTVBPTF9CSU5EIHBvbGljeSAqLwotCWt2bV9tYmluZChtZW0gJiM0MzsgcGFnZV9zaXplICogMiwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGVtYXNrXzAsIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQobWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTsKIAlrdm1fZ2V0X21lbXBvbGljeSgmYW1wO3BvbGljeSwgJmFtcDtub2RlbWFzaywgbWF4bm9kZSwgbWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfRl9BRERSKTsKLQlURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9CSU5EICZhbXA7JmFtcDsgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCwKJiM0MzsJVEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfQklORCAmYW1wOyZhbXA7IG5vZGVtYXNrID09IGJpbmRfbm9kZW1hc2ssCiAJCSAgICAmIzM0O1dhbnRlZCBNUE9MX0JJTkQgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHgmIzM0OywKLQkJICAgIE1QT0xfQklORCwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7CiYjNDM7CQkgICAgTVBPTF9CSU5ELCBiaW5kX25vZGVtYXNrLCBwb2xpY3ksIG5vZGVtYXNrKTsKIAogCS8qIFRlc3QgTVBPTF9ERUZBVUxUIHBvbGljeSAqLwogCWt2bV9tYmluZChtZW0sIHRvdGFsX3NpemUsIE1QT0xfREVGQVVMVCwgTlVMTCwgMCwgMCk7CkBAIC0xMTIsNyAmIzQzOzEzMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIAkJICAgIE1QT0xfREVGQVVMVCwgcG9saWN5LCBub2RlbWFzayk7CiAKIAkvKiBUZXN0IHdpdGggaW52YWxpZCBwb2xpY3kgKi8KLQlyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCAmYW1wO25vZGVtYXNrXzAsIG1heG5vZGUsIDApOwomIzQzOwlyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCAmYW1wO2JpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApOwogCVRFU1RfQVNTRVJUKHJldCA9PSAtMSAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCwKIAkJICAgICYjMzQ7bWJpbmQgd2l0aCBpbnZhbGlkIHBvbGljeSBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTCYjMzQ7KTsKIApAQCAtMTIxLDE3ICYjNDM7MTQxLDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIAogc3RhdGljIHZvaWQgdGVzdF9udW1hX2FsbG9jYXRpb24oaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIHsKLQl1bnNpZ25lZCBsb25nIG5vZGUwX21hc2sgPSAxOyAgLyogTm9kZSAwICovCi0JdW5zaWduZWQgbG9uZyBub2RlMV9tYXNrID0gMjsgIC8qIE5vZGUgMSAqLwotCXVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IDg7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYmluZF9ub2RlbWFza3NbMl07CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUoYmluZF9ub2RlbWFza3NbMF0pICYjNDM7IDE7CiAJdm9pZCAqcGFnZXNbNF07CiYjNDM7CWludCBuaWRzWzJdOwogCWludCBzdGF0dXNbNF07CiAJY2hhciAqbWVtOwogCWludCBpOwogCi0JaWYgKCFpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKCkpCiYjNDM7CWlmICghZ2V0X251bWFfbm9kZV9pZHMobmlkcywgQVJSQVlfU0laRShuaWRzKSkpCiAJCXJldHVybjsKIAomIzQzOwliaW5kX25vZGVtYXNrc1swXSA9IDFVTCAmbHQ7Jmx0OyBuaWRzWzBdOwomIzQzOwliaW5kX25vZGVtYXNrc1sxXSA9IDFVTCAmbHQ7Jmx0OyBuaWRzWzFdOwogCW1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyA0OyBpJiM0MzsmIzQzOykKQEAgLTEzOSwzNCAmIzQzOzE2MSw0MiBAQCBzdGF0aWMgdm9pZCB0ZXN0X251bWFfYWxsb2NhdGlvbihpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKQogCiAJLyogU2V0IE5VTUEgcG9saWN5IGFmdGVyIGFsbG9jYXRpb24gKi8KIAltZW1zZXQobWVtLCAweGFhLCBwYWdlX3NpemUpOwotCWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsICZhbXA7bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7CiYjNDM7CWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsICZhbXA7YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApOwogCWt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgcGFnZV9zaXplKTsKIAogCS8qIFNldCBOVU1BIHBvbGljeSBiZWZvcmUgYWxsb2NhdGlvbiAqLwotCWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUxX21hc2ssIG1heG5vZGUsIDApOwotCWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUwX21hc2ssIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7CiYjNDM7CWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO2JpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTsKIAltZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTsKIAogCS8qIFZhbGlkYXRlIGlmIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gc3BlY2lmaWVkIE5VTUEgbm9kZXMgKi8KIAlrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gMSwgJiMzNDtFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbMF0pOwotCVRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAxLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1sxXSk7Ci0JVEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDAsICYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgc3RhdHVzWzJdKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gMCwgJiMzNDtFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbM10pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1sxXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbMF0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1sxXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbMV0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1swXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbMl0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1swXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbM10pOwogCiAJLyogUHVuY2ggaG9sZSBmb3IgYWxsIHBhZ2VzICovCiAJa3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCB0b3RhbF9zaXplKTsKIAogCS8qIENoYW5nZSBOVU1BIHBvbGljeSBub2RlcyBhbmQgcmVhbGxvY2F0ZSAqLwotCWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUwX21hc2ssIG1heG5vZGUsIDApOwotCWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUxX21hc2ssIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7CiYjNDM7CWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO2JpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTsKIAltZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTsKIAogCWt2bV9tb3ZlX3BhZ2VzKDAsIDQsIHBhZ2VzLCBOVUxMLCBzdGF0dXMsIDApOwotCVRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSAwLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1swXSk7Ci0JVEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IDAsICYjMzQ7RXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgc3RhdHVzWzFdKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gMSwgJiMzNDtFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbMl0pOwotCVRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSAxLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1szXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzBdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMF0sIHN0YXR1c1swXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSBuaWRzWzBdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMF0sIHN0YXR1c1sxXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSBuaWRzWzFdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMV0sIHN0YXR1c1syXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzFdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMV0sIHN0YXR1c1szXSk7CiAKIAlrdm1fbXVubWFwKG1lbSwgdG90YWxfc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oCmluZGV4IDI5NTcyYTZkNzg5Y2QuLmI4OTU1OWI2ZWEzYzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oCkBAIC00LDggJiM0Mzs0LDcgQEAKICNpZm5kZWYgU0VMRlRFU1RfS1ZNX05VTUFJRl9ICiAjZGVmaW5lIFNFTEZURVNUX0tWTV9OVU1BSUZfSAogCi0jaW5jbHVkZSAmbHQ7ZGlyZW50LmgmZ3Q7Ci0KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbXBvbGljeS5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2t2bV9zeXNjYWxscy5oJiMzNDsKQEAgLTMwLDU0ICYjNDM7MjksMTYgQEAgS1ZNX1NZU0NBTExfREVGSU5FKG1iaW5kLCA2LCB2b2lkICosIGFkZHIsIHVuc2lnbmVkIGxvbmcsIHNpemUsIGludCwgbW9kZSwKIAkJICAgY29uc3QgdW5zaWduZWQgbG9uZyAqLCBub2RlbWFzaywgdW5zaWduZWQgbG9uZywgbWF4bm9kZSwKIAkJICAgdW5zaWduZWQgaW50LCBmbGFncyk7CiAKLXN0YXRpYyBpbmxpbmUgaW50IGdldF9tYXhfbnVtYV9ub2RlKHZvaWQpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9udW1hX21lbV9ub2Rlcyh2b2lkKQogewotCXN0cnVjdCBkaXJlbnQgKmRlOwotCWludCBtYXhfbm9kZSA9IDA7Ci0JRElSICpkOwomIzQzOwl1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gMDsKIAotCS8qCi0JICogQXNzdW1lIHRoZXJlJiMzOTtzIGEgc2luZ2xlIG5vZGUgaWYgdGhlIGtlcm5lbCBkb2VzbiYjMzk7dCBzdXBwb3J0IE5VTUEsCi0JICogb3IgaWYgbm8gbm9kZXMgYXJlIGZvdW5kLgotCSAqLwotCWQgPSBvcGVuZGlyKCYjMzQ7L3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlJiMzNDspOwotCWlmICghZCkKJiM0MzsJLyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqLwomIzQzOwlpZiAoZ2V0X21lbXBvbGljeShOVUxMLCAmYW1wO25vZGVtYXNrLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgTlVMTCwKJiM0MzsJCQkgIE1QT0xfRl9NRU1TX0FMTE9XRUQpKQogCQlyZXR1cm4gMDsKIAotCXdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7Ci0JCWludCBub2RlX2lkOwotCQljaGFyICplbmRwdHI7Ci0KLQkJaWYgKHN0cm5jbXAoZGUtJmd0O2RfbmFtZSwgJiMzNDtub2RlJiMzNDssIDQpICE9IDApCi0JCQljb250aW51ZTsKLQotCQlub2RlX2lkID0gc3RydG9sKGRlLSZndDtkX25hbWUgJiM0MzsgNCwgJmFtcDtlbmRwdHIsIDEwKTsKLQkJaWYgKCplbmRwdHIgIT0gJiMzOTtcMCYjMzk7KQotCQkJY29udGludWU7Ci0KLQkJaWYgKG5vZGVfaWQgJmd0OyBtYXhfbm9kZSkKLQkJCW1heF9ub2RlID0gbm9kZV9pZDsKLQl9Ci0JY2xvc2VkaXIoZCk7Ci0KLQlyZXR1cm4gbWF4X25vZGU7Ci19Ci0KLXN0YXRpYyBib29sIGlzX251bWFfYXZhaWxhYmxlKHZvaWQpCi17Ci0JLyoKLQkgKiBQcm9iZSBmb3IgTlVNQSBieSBkb2luZyBhIGR1bW15IGdldF9tZW1wb2xpY3koKS4gIElmIHRoZSBzeXNjYWxsCi0JICogZmFpbHMgd2l0aCBFTk9TWVMsIHRoZW4gdGhlIGtlcm5lbCB3YXMgYnVpbHQgd2l0aG91dCBOVU1BIHN1cHBvcnQuCi0JICogaWYgdGhlIHN5c2NhbGwgZmFpbHMgd2l0aCBFUEVSTSwgdGhlbiB0aGUgcHJvY2Vzcy91c2VyIGxhY2tzIHRoZQotCSAqIG5lY2Vzc2FyeSBjYXBhYmlsaXRpZXMgKENBUF9TWVNfTklDRSkuCi0JICovCi0JcmV0dXJuICFnZXRfbWVtcG9saWN5KE5VTEwsIE5VTEwsIDAsIE5VTEwsIDApIHx8Ci0JCShlcnJubyAhPSBFTk9TWVMgJmFtcDsmYW1wOyBlcnJubyAhPSBFUEVSTSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKHZvaWQpCi17Ci0JcmV0dXJuIGlzX251bWFfYXZhaWxhYmxlKCkgJmFtcDsmYW1wOyBnZXRfbWF4X251bWFfbm9kZSgpICZndDs9IDE7CiYjNDM7CXJldHVybiBub2RlbWFzazsKIH0KIAogI2VuZGlmIC8qIFNFTEZURVNUX0tWTV9OVU1BSUZfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jCmluZGV4IDQ2OWUzYWIxNjQ2MDguLmI1ZjRlZDY3MTIxODkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMKQEAgLTIzMiw4ICYjNDM7MjMyLDggQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsCiAJCSAgIHU2NCAqcGlwaXNfcmN2ZCkKIHsKIAlsb25nIHBhZ2VzX25vdF9tb3ZlZDsKLQl1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gMDsKLQl1bnNpZ25lZCBsb25nIG5vZGVtYXNrc1tzaXplb2Yobm9kZW1hc2spICogOF07CiYjNDM7CXVuc2lnbmVkIGxvbmcgbm9kZW1hc2s7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW0JJVFNfUEVSX1RZUEUobm9kZW1hc2spXTsKIAlpbnQgbm9kZXMgPSAwOwogCXRpbWVfdCBzdGFydF90aW1lLCBsYXN0X3VwZGF0ZSwgbm93OwogCXRpbWVfdCBpbnRlcnZhbF9zZWNzID0gMTsKQEAgLTI0NywxOSAmIzQzOzI0NywxNyBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcywKIAlmcHJpbnRmKHN0ZGVyciwgJiMzNDtDYWxsaW5nIG1pZ3JhdGVfcGFnZXMgZXZlcnkgJWQgbWljcm9zZWNvbmRzXG4mIzM0OywKIAkJZGVsYXlfdXNlY3MpOwogCi0JLyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqLwotCWt2bV9nZXRfbWVtcG9saWN5KE5VTEwsICZhbXA7bm9kZW1hc2ssIHNpemVvZihub2RlbWFzaykgKiA4LAotCQkJICAwLCBNUE9MX0ZfTUVNU19BTExPV0VEKTsKJiM0MzsJbm9kZW1hc2sgPSBnZXRfbnVtYV9tZW1fbm9kZXMoKTsKIAogCWZwcmludGYoc3RkZXJyLCAmIzM0O051bWEgbm9kZXMgZm91bmQgYW1vbmdzdCBmaXJzdCAlbHUgcG9zc2libGUgbm9kZXMgJiMzNDsKIAkJJiMzNDsoZWFjaCAxLWJpdCBpbmRpY2F0ZXMgbm9kZSBpcyBwcmVzZW50KTogJSNseFxuJiMzNDssCi0JCXNpemVvZihub2RlbWFzaykgKiA4LCBub2RlbWFzayk7CiYjNDM7CQlCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgbm9kZW1hc2spOwogCiAJLyogSW5pdCBhcnJheSBvZiBtYXNrcyBjb250YWluaW5nIGEgc2luZ2xlLWJpdCBpbiBlYWNoLCBvbmUgZm9yIGVhY2gKIAkgKiBhdmFpbGFibGUgbm9kZS4gbWlncmF0ZV9wYWdlcyBjYWxsZWQgYmVsb3cgcmVxdWlyZXMgc3BlY2lmeWluZyBub2RlcwogCSAqIGFzIGJpdCBtYXNrcy4KIAkgKi8KLQlmb3IgKGkgPSAwLCBiaXQgPSAxOyBpICZsdDsgc2l6ZW9mKG5vZGVtYXNrKSAqIDg7IGkmIzQzOyYjNDM7LCBiaXQgJmx0OyZsdDs9IDEpIHsKJiM0MzsJZm9yIChpID0gMCwgYml0ID0gMTsgaSAmbHQ7IEJJVFNfUEVSX1RZUEUobm9kZW1hc2spOyBpJiM0MzsmIzQzOywgYml0ICZsdDsmbHQ7PSAxKSB7CiAJCWlmIChub2RlbWFzayAmYW1wOyBiaXQpIHsKIAkJCW5vZGVtYXNrc1tub2Rlc10gPSBub2RlbWFzayAmYW1wOyBiaXQ7CiAJCQlub2RlcyYjNDM7JiM0Mzs7CkBAIC0yOTEsNyAmIzQzOzI4OSw3IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLAogCQkgKiBLVk1fQ1JFQVRFX1ZDUFUgaW9jdGwuIElmIHRoYXQgYXNzdW1wdGlvbiBldmVyIGNoYW5nZXMgdGhpcwogCQkgKiB0ZXN0IG1heSBicmVhayBvciBnaXZlIGEgZmFsc2UgcG9zaXRpdmUgc2lnbmFsLgogCQkgKi8KLQkJcGFnZXNfbm90X21vdmVkID0gbWlncmF0ZV9wYWdlcygwLCBzaXplb2Yobm9kZW1hc2tzW2Zyb21dKSwKJiM0MzsJCXBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgQklUU19QRVJfVFlQRShub2RlbWFza3NbZnJvbV0pICYjNDM7IDEsCiAJCQkJCQkmYW1wO25vZGVtYXNrc1tmcm9tXSwKIAkJCQkJCSZhbXA7bm9kZW1hc2tzW3RvXSk7CiAJCWlmIChwYWdlc19ub3RfbW92ZWQgJmx0OyAwKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1NQoJCQkJCQkJb3V0cHV0OiA2NQoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXMgLSBLVk0gU2VsZnRlc3RzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZGlmZi4gVGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBhbGwgdHVja2VkIGF3YXkgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYDogYGd1ZXN0X21lbWZkX3Rlc3QuY2AsIGBudW1haWYuaGAsIGFuZCBgeGFwaWNfaXBpX3Rlc3QuY2AuIE5vdGhpbmcgaW4gdGhlIGNvcmUga2VybmVsIOKAkyBubyBkcml2ZXJzLCBtZW1vcnkgbWFuYWdlbWVudCwgb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtWTSBjb2RlLiBUaGlzIGlzIGFsbCB1c2Vyc3BhY2UgS1ZNIHNlbGZ0ZXN0IHRlcnJpdG9yeS4KCk5vdywgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBgV29ydGhGdXp6aW5nYCBndWlkZWxpbmVzLiBXZSYjMzk7cmUgbG9va2luZyBmb3IgbW9kaWZpY2F0aW9ucyB0aGF0ICpkb24mIzM5O3QqIHdhcnJhbnQgZnV6emluZy4gVGhlIGNyaXRlcmlhIHNwZWNpZmljYWxseSBleGNsdWRlIGNoYW5nZXMgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIGNvc21ldGljIGxvZ2dpbmcsIG5vbi1mdW5jdGlvbmFsIG51bWVyaWMgY29uc3RhbnRzLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYW5kIGNlcnRhaW4gZHJpdmVyIHJlbW92YWxzLiBJbXBvcnRhbnRseSwgY2hhbmdlcyB3aXRoaW4gYHRvb2xzL2AsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlc2Ugc2VsZi10ZXN0cywgZG9uJiMzOTt0IHRvdWNoIHRoZSBrZXJuZWwgYmluYXJ5IG9yIGNvcmUgbG9naWMuIFRoZXkgYXJlLCBmdW5kYW1lbnRhbGx5LCB1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcy4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbXBhY3QgYW55dGhpbmcgdGhhdCBTeXprYWxsZXIgc2hvdWxkIGJlIGZ1enppbmcuIEkmIzM5O2xsIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8pLCB3aXRoIG5vIGNoYW5nZXMgdG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKSwgd2l0aCBubyBjaGFuZ2VzIHRvIHRoZSBMaW51eCBrZXJuZWwgc291cmNlIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDFUMTg6NDM6MzkuNDMzNDAwNzg3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNzc5NDA2NDk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8pLCB3aXRoIG5vIGNoYW5nZXMgdG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxODo0MzozOS40MzM0MDk2NTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDE3ODE1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhYjM5NmQ1NjBiZTY3MDBhNTFjOGZlMjM3YTNkNzk0NTRjYzkyZTg4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDEgMTg6NDM6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcXG5pbmRleCAyMjMzZDg3MWEzOGY0Li5hZWU4MGRkYTYyMjk1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXFxuQEAgLTc2LDMzICs3Niw1MyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21tYXBfc3VwcG9ydGVkKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIFxcdGt2bV9tdW5tYXAobWVtLCB0b3RhbF9zaXplKTtcXG4gfVxcbiBcXG4rLypcXG4rICogRmlsbCBAbmlkcyB3aXRoIHRoZSBmaXJzdCBAbnJfbmlkcyBub2RlcyBpbiB0aGUgYWxsb3dlZCBtYXNrLlxcbisgKiBSZXR1cm4gZmFsc2UgaWYgdGhlIG1hc2sgY29udGFpbnMgZmV3ZXIgdGhhbiBAbnJfbmlkcyBub2Rlcy5cXG4rICovXFxuK3N0YXRpYyBib29sIGdldF9udW1hX25vZGVfaWRzKGludCAqbmlkcywgaW50IG5yX25pZHMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpO1xcbitcXHR1bnNpZ25lZCBsb25nIG5pZDtcXG4rXFx0aW50IG5yX2ZvdW5kID0gMDtcXG4rXFxuK1xcdGZvcl9lYWNoX3NldF9iaXQobmlkLCBcXHUwMDI2bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spKSB7XFxuK1xcdFxcdG5pZHNbbnJfZm91bmQrK10gPSBuaWQ7XFxuK1xcdFxcdGlmIChucl9mb3VuZCA9PSBucl9uaWRzKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIHtcXG4tXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBub2RlbWFza18wID0gMTsgLyogbmlkOiAwICovXFxuLVxcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBub2RlbWFzaywgYmluZF9ub2RlbWFzaztcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShub2RlbWFzaykgKyAxO1xcbiBcXHRpbnQgcG9saWN5O1xcbiBcXHRjaGFyICptZW07XFxuK1xcdGludCBuaWQ7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAoIWlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0oKSlcXG4rXFx0aWYgKCFnZXRfbnVtYV9ub2RlX2lkcyhcXHUwMDI2bmlkLCAxKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0YmluZF9ub2RlbWFzayA9IDFVTCBcXHUwMDNjXFx1MDAzYyBuaWQ7XFxuIFxcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcXG4gXFxuIFxcdC8qIFRlc3QgTVBPTF9JTlRFUkxFQVZFIHBvbGljeSAqL1xcbi1cXHRrdm1fbWJpbmQobWVtLCBwYWdlX3NpemUgKiAyLCBNUE9MX0lOVEVSTEVBVkUsIFxcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcXG4rXFx0a3ZtX21iaW5kKG1lbSwgcGFnZV9zaXplICogMiwgTVBPTF9JTlRFUkxFQVZFLCBcXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XFxuIFxcdGt2bV9nZXRfbWVtcG9saWN5KFxcdTAwMjZwb2xpY3ksIFxcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtLCBNUE9MX0ZfQUREUik7XFxuLVxcdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0lOVEVSTEVBVkUgXFx1MDAyNlxcdTAwMjYgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCxcXG4rXFx0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSBcXHUwMDI2XFx1MDAyNiBub2RlbWFzayA9PSBiaW5kX25vZGVtYXNrLFxcbiBcXHRcXHQgICAgXFxcIldhbnRlZCBNUE9MX0lOVEVSTEVBVkUgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHhcXFwiLFxcbi1cXHRcXHQgICAgTVBPTF9JTlRFUkxFQVZFLCBub2RlbWFza18wLCBwb2xpY3ksIG5vZGVtYXNrKTtcXG4rXFx0XFx0ICAgIE1QT0xfSU5URVJMRUFWRSwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7XFxuIFxcbiBcXHQvKiBUZXN0IGJhc2ljIE1QT0xfQklORCBwb2xpY3kgKi9cXG4tXFx0a3ZtX21iaW5kKG1lbSArIHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGVtYXNrXzAsIG1heG5vZGUsIDApO1xcbitcXHRrdm1fbWJpbmQobWVtICsgcGFnZV9zaXplICogMiwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XFxuIFxcdGt2bV9nZXRfbWVtcG9saWN5KFxcdTAwMjZwb2xpY3ksIFxcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtICsgcGFnZV9zaXplICogMiwgTVBPTF9GX0FERFIpO1xcbi1cXHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9CSU5EIFxcdTAwMjZcXHUwMDI2IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsXFxuK1xcdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0JJTkQgXFx1MDAyNlxcdTAwMjYgbm9kZW1hc2sgPT0gYmluZF9ub2RlbWFzayxcXG4gXFx0XFx0ICAgIFxcXCJXYW50ZWQgTVBPTF9CSU5EICgldSkgYW5kIG5vZGVtYXNrIDB4JWx4LCBnb3QgJXUgYW5kIDB4JWx4XFxcIixcXG4tXFx0XFx0ICAgIE1QT0xfQklORCwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7XFxuK1xcdFxcdCAgICBNUE9MX0JJTkQsIGJpbmRfbm9kZW1hc2ssIHBvbGljeSwgbm9kZW1hc2spO1xcbiBcXG4gXFx0LyogVGVzdCBNUE9MX0RFRkFVTFQgcG9saWN5ICovXFxuIFxcdGt2bV9tYmluZChtZW0sIHRvdGFsX3NpemUsIE1QT0xfREVGQVVMVCwgTlVMTCwgMCwgMCk7XFxuQEAgLTExMiw3ICsxMzIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIFxcdFxcdCAgICBNUE9MX0RFRkFVTFQsIHBvbGljeSwgbm9kZW1hc2spO1xcbiBcXG4gXFx0LyogVGVzdCB3aXRoIGludmFsaWQgcG9saWN5ICovXFxuLVxcdHJldCA9IG1iaW5kKG1lbSwgcGFnZV9zaXplLCA5OTksIFxcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcXG4rXFx0cmV0ID0gbWJpbmQobWVtLCBwYWdlX3NpemUsIDk5OSwgXFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xcbiBcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbiBcXHRcXHQgICAgXFxcIm1iaW5kIHdpdGggaW52YWxpZCBwb2xpY3kgc2hvdWxkIGZhaWwgd2l0aCBFSU5WQUxcXFwiKTtcXG4gXFxuQEAgLTEyMSwxNyArMTQxLDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcXG4gXFxuIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBub2RlMF9tYXNrID0gMTsgIC8qIE5vZGUgMCAqL1xcbi1cXHR1bnNpZ25lZCBsb25nIG5vZGUxX21hc2sgPSAyOyAgLyogTm9kZSAxICovXFxuLVxcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IDg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYmluZF9ub2RlbWFza3NbMl07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUoYmluZF9ub2RlbWFza3NbMF0pICsgMTtcXG4gXFx0dm9pZCAqcGFnZXNbNF07XFxuK1xcdGludCBuaWRzWzJdO1xcbiBcXHRpbnQgc3RhdHVzWzRdO1xcbiBcXHRjaGFyICptZW07XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0aWYgKCFpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKCkpXFxuK1xcdGlmICghZ2V0X251bWFfbm9kZV9pZHMobmlkcywgQVJSQVlfU0laRShuaWRzKSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGJpbmRfbm9kZW1hc2tzWzBdID0gMVVMIFxcdTAwM2NcXHUwMDNjIG5pZHNbMF07XFxuK1xcdGJpbmRfbm9kZW1hc2tzWzFdID0gMVVMIFxcdTAwM2NcXHUwMDNjIG5pZHNbMV07XFxuIFxcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA0OyBpKyspXFxuQEAgLTEzOSwzNCArMTYxLDQyIEBAIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIFxcbiBcXHQvKiBTZXQgTlVNQSBwb2xpY3kgYWZ0ZXIgYWxsb2NhdGlvbiAqL1xcbiBcXHRtZW1zZXQobWVtLCAweGFhLCBwYWdlX3NpemUpO1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCBcXHUwMDI2bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7XFxuK1xcdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsIFxcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XFxuIFxcdGt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgcGFnZV9zaXplKTtcXG4gXFxuIFxcdC8qIFNldCBOVU1BIHBvbGljeSBiZWZvcmUgYWxsb2NhdGlvbiAqL1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUxX21hc2ssIG1heG5vZGUsIDApO1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xcbitcXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNmJpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTtcXG4rXFx0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFxcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XFxuIFxcdG1lbXNldChtZW0sIDB4YWEsIHRvdGFsX3NpemUpO1xcbiBcXG4gXFx0LyogVmFsaWRhdGUgaWYgcGFnZXMgYXJlIGFsbG9jYXRlZCBvbiBzcGVjaWZpZWQgTlVNQSBub2RlcyAqL1xcbiBcXHRrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTtcXG4tXFx0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IDEsIFxcXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIHN0YXR1c1swXSk7XFxuLVxcdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAxLCBcXFwiRXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBzdGF0dXNbMV0pO1xcbi1cXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gMCwgXFxcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXFxcIiwgc3RhdHVzWzJdKTtcXG4tXFx0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IDAsIFxcXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIHN0YXR1c1szXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzFdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMV0sIHN0YXR1c1swXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSBuaWRzWzFdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMV0sIHN0YXR1c1sxXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSBuaWRzWzBdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMF0sIHN0YXR1c1syXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzBdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMF0sIHN0YXR1c1szXSk7XFxuIFxcbiBcXHQvKiBQdW5jaCBob2xlIGZvciBhbGwgcGFnZXMgKi9cXG4gXFx0a3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCB0b3RhbF9zaXplKTtcXG4gXFxuIFxcdC8qIENoYW5nZSBOVU1BIHBvbGljeSBub2RlcyBhbmQgcmVhbGxvY2F0ZSAqL1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUxX21hc2ssIG1heG5vZGUsIDApO1xcbitcXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNmJpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTtcXG4rXFx0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFxcdTAwMjZiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7XFxuIFxcdG1lbXNldChtZW0sIDB4YWEsIHRvdGFsX3NpemUpO1xcbiBcXG4gXFx0a3ZtX21vdmVfcGFnZXMoMCwgNCwgcGFnZXMsIE5VTEwsIHN0YXR1cywgMCk7XFxuLVxcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSAwLCBcXFwiRXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBzdGF0dXNbMF0pO1xcbi1cXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gMCwgXFxcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXFxcIiwgc3RhdHVzWzFdKTtcXG4tXFx0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDEsIFxcXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIHN0YXR1c1syXSk7XFxuLVxcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSAxLCBcXFwiRXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBzdGF0dXNbM10pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1swXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzBdLCBzdGF0dXNbMF0pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1swXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzBdLCBzdGF0dXNbMV0pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1sxXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzFdLCBzdGF0dXNbMl0pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1sxXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzFdLCBzdGF0dXNbM10pO1xcbiBcXG4gXFx0a3ZtX211bm1hcChtZW0sIHRvdGFsX3NpemUpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcXG5pbmRleCAyOTU3MmE2ZDc4OWNkLi5iODk1NTliNmVhM2MxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcXG5AQCAtNCw4ICs0LDcgQEBcXG4gI2lmbmRlZiBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcXG4gI2RlZmluZSBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcXG4gXFxuLSNpbmNsdWRlIFxcdTAwM2NkaXJlbnQuaFxcdTAwM2VcXG4tXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJrdm1fc3lzY2FsbHMuaFxcXCJcXG5AQCAtMzAsNTQgKzI5LDE2IEBAIEtWTV9TWVNDQUxMX0RFRklORShtYmluZCwgNiwgdm9pZCAqLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBzaXplLCBpbnQsIG1vZGUsXFxuIFxcdFxcdCAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiwgbm9kZW1hc2ssIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsXFxuIFxcdFxcdCAgIHVuc2lnbmVkIGludCwgZmxhZ3MpO1xcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZ2V0X21heF9udW1hX25vZGUodm9pZClcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9udW1hX21lbV9ub2Rlcyh2b2lkKVxcbiB7XFxuLVxcdHN0cnVjdCBkaXJlbnQgKmRlO1xcbi1cXHRpbnQgbWF4X25vZGUgPSAwO1xcbi1cXHRESVIgKmQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogQXNzdW1lIHRoZXJlJ3MgYSBzaW5nbGUgbm9kZSBpZiB0aGUga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBOVU1BLFxcbi1cXHQgKiBvciBpZiBubyBub2RlcyBhcmUgZm91bmQuXFxuLVxcdCAqL1xcbi1cXHRkID0gb3BlbmRpcihcXFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlXFxcIik7XFxuLVxcdGlmICghZClcXG4rXFx0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xcbitcXHRpZiAoZ2V0X21lbXBvbGljeShOVUxMLCBcXHUwMDI2bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBOVUxMLFxcbitcXHRcXHRcXHQgIE1QT0xfRl9NRU1TX0FMTE9XRUQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7XFxuLVxcdFxcdGludCBub2RlX2lkO1xcbi1cXHRcXHRjaGFyICplbmRwdHI7XFxuLVxcbi1cXHRcXHRpZiAoc3RybmNtcChkZS1cXHUwMDNlZF9uYW1lLCBcXFwibm9kZVxcXCIsIDQpICE9IDApXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0bm9kZV9pZCA9IHN0cnRvbChkZS1cXHUwMDNlZF9uYW1lICsgNCwgXFx1MDAyNmVuZHB0ciwgMTApO1xcbi1cXHRcXHRpZiAoKmVuZHB0ciAhPSAnXFxcXDAnKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGlmIChub2RlX2lkIFxcdTAwM2UgbWF4X25vZGUpXFxuLVxcdFxcdFxcdG1heF9ub2RlID0gbm9kZV9pZDtcXG4tXFx0fVxcbi1cXHRjbG9zZWRpcihkKTtcXG4tXFxuLVxcdHJldHVybiBtYXhfbm9kZTtcXG4tfVxcbi1cXG4tc3RhdGljIGJvb2wgaXNfbnVtYV9hdmFpbGFibGUodm9pZClcXG4te1xcbi1cXHQvKlxcbi1cXHQgKiBQcm9iZSBmb3IgTlVNQSBieSBkb2luZyBhIGR1bW15IGdldF9tZW1wb2xpY3koKS4gIElmIHRoZSBzeXNjYWxsXFxuLVxcdCAqIGZhaWxzIHdpdGggRU5PU1lTLCB0aGVuIHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGhvdXQgTlVNQSBzdXBwb3J0Llxcbi1cXHQgKiBpZiB0aGUgc3lzY2FsbCBmYWlscyB3aXRoIEVQRVJNLCB0aGVuIHRoZSBwcm9jZXNzL3VzZXIgbGFja3MgdGhlXFxuLVxcdCAqIG5lY2Vzc2FyeSBjYXBhYmlsaXRpZXMgKENBUF9TWVNfTklDRSkuXFxuLVxcdCAqL1xcbi1cXHRyZXR1cm4gIWdldF9tZW1wb2xpY3koTlVMTCwgTlVMTCwgMCwgTlVMTCwgMCkgfHxcXG4tXFx0XFx0KGVycm5vICE9IEVOT1NZUyBcXHUwMDI2XFx1MDAyNiBlcnJubyAhPSBFUEVSTSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKHZvaWQpXFxuLXtcXG4tXFx0cmV0dXJuIGlzX251bWFfYXZhaWxhYmxlKCkgXFx1MDAyNlxcdTAwMjYgZ2V0X21heF9udW1hX25vZGUoKSBcXHUwMDNlPSAxO1xcbitcXHRyZXR1cm4gbm9kZW1hc2s7XFxuIH1cXG4gXFxuICNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fTlVNQUlGX0ggKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXFxuaW5kZXggNDY5ZTNhYjE2NDYwOC4uYjVmNGVkNjcxMjE4OSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcXG5AQCAtMjMyLDggKzIzMiw4IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxcbiBcXHRcXHQgICB1NjQgKnBpcGlzX3JjdmQpXFxuIHtcXG4gXFx0bG9uZyBwYWdlc19ub3RfbW92ZWQ7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xcbi1cXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrc1tzaXplb2Yobm9kZW1hc2spICogOF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2s7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW0JJVFNfUEVSX1RZUEUobm9kZW1hc2spXTtcXG4gXFx0aW50IG5vZGVzID0gMDtcXG4gXFx0dGltZV90IHN0YXJ0X3RpbWUsIGxhc3RfdXBkYXRlLCBub3c7XFxuIFxcdHRpbWVfdCBpbnRlcnZhbF9zZWNzID0gMTtcXG5AQCAtMjQ3LDE5ICsyNDcsMTcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXFxuIFxcdGZwcmludGYoc3RkZXJyLCBcXFwiQ2FsbGluZyBtaWdyYXRlX3BhZ2VzIGV2ZXJ5ICVkIG1pY3Jvc2Vjb25kc1xcXFxuXFxcIixcXG4gXFx0XFx0ZGVsYXlfdXNlY3MpO1xcbiBcXG4tXFx0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xcbi1cXHRrdm1fZ2V0X21lbXBvbGljeShOVUxMLCBcXHUwMDI2bm9kZW1hc2ssIHNpemVvZihub2RlbWFzaykgKiA4LFxcbi1cXHRcXHRcXHQgIDAsIE1QT0xfRl9NRU1TX0FMTE9XRUQpO1xcbitcXHRub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpO1xcbiBcXG4gXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJOdW1hIG5vZGVzIGZvdW5kIGFtb25nc3QgZmlyc3QgJWx1IHBvc3NpYmxlIG5vZGVzIFxcXCJcXG4gXFx0XFx0XFxcIihlYWNoIDEtYml0IGluZGljYXRlcyBub2RlIGlzIHByZXNlbnQpOiAlI2x4XFxcXG5cXFwiLFxcbi1cXHRcXHRzaXplb2Yobm9kZW1hc2spICogOCwgbm9kZW1hc2spO1xcbitcXHRcXHRCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgbm9kZW1hc2spO1xcbiBcXG4gXFx0LyogSW5pdCBhcnJheSBvZiBtYXNrcyBjb250YWluaW5nIGEgc2luZ2xlLWJpdCBpbiBlYWNoLCBvbmUgZm9yIGVhY2hcXG4gXFx0ICogYXZhaWxhYmxlIG5vZGUuIG1pZ3JhdGVfcGFnZXMgY2FsbGVkIGJlbG93IHJlcXVpcmVzIHNwZWNpZnlpbmcgbm9kZXNcXG4gXFx0ICogYXMgYml0IG1hc2tzLlxcbiBcXHQgKi9cXG4tXFx0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcXHUwMDNjIHNpemVvZihub2RlbWFzaykgKiA4OyBpKyssIGJpdCBcXHUwMDNjXFx1MDAzYz0gMSkge1xcbitcXHRmb3IgKGkgPSAwLCBiaXQgPSAxOyBpIFxcdTAwM2MgQklUU19QRVJfVFlQRShub2RlbWFzayk7IGkrKywgYml0IFxcdTAwM2NcXHUwMDNjPSAxKSB7XFxuIFxcdFxcdGlmIChub2RlbWFzayBcXHUwMDI2IGJpdCkge1xcbiBcXHRcXHRcXHRub2RlbWFza3Nbbm9kZXNdID0gbm9kZW1hc2sgXFx1MDAyNiBiaXQ7XFxuIFxcdFxcdFxcdG5vZGVzKys7XFxuQEAgLTI5MSw3ICsyODksNyBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcyxcXG4gXFx0XFx0ICogS1ZNX0NSRUFURV9WQ1BVIGlvY3RsLiBJZiB0aGF0IGFzc3VtcHRpb24gZXZlciBjaGFuZ2VzIHRoaXNcXG4gXFx0XFx0ICogdGVzdCBtYXkgYnJlYWsgb3IgZ2l2ZSBhIGZhbHNlIHBvc2l0aXZlIHNpZ25hbC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgc2l6ZW9mKG5vZGVtYXNrc1tmcm9tXSksXFxuK1xcdFxcdHBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgQklUU19QRVJfVFlQRShub2RlbWFza3NbZnJvbV0pICsgMSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVtYXNrc1tmcm9tXSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVtYXNrc1t0b10pO1xcbiBcXHRcXHRpZiAocGFnZXNfbm90X21vdmVkIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTg6NDM6NDAuOTc2MDY0NTkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDE2MjUxMzc5NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKSwgd2l0aCBubyBjaGFuZ2VzIHRvIHRoZSBMaW51eCBrZXJuZWwgc291cmNlIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWIzOTZkNTYwYmU2NzAwYTUxYzhmZTIzN2EzZDc5NDU0Y2M5MmU4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMTg6NDM6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuY1xuaW5kZXggMjIzM2Q4NzFhMzhmNC4uYWVlODBkZGE2MjI5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcbkBAIC03NiwzMyArNzYsNTMgQEAgc3RhdGljIHZvaWQgdGVzdF9tbWFwX3N1cHBvcnRlZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIFx0a3ZtX211bm1hcChtZW0sIHRvdGFsX3NpemUpO1xuIH1cbiBcbisvKlxuKyAqIEZpbGwgQG5pZHMgd2l0aCB0aGUgZmlyc3QgQG5yX25pZHMgbm9kZXMgaW4gdGhlIGFsbG93ZWQgbWFzay5cbisgKiBSZXR1cm4gZmFsc2UgaWYgdGhlIG1hc2sgY29udGFpbnMgZmV3ZXIgdGhhbiBAbnJfbmlkcyBub2Rlcy5cbisgKi9cbitzdGF0aWMgYm9vbCBnZXRfbnVtYV9ub2RlX2lkcyhpbnQgKm5pZHMsIGludCBucl9uaWRzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSBnZXRfbnVtYV9tZW1fbm9kZXMoKTtcbitcdHVuc2lnbmVkIGxvbmcgbmlkO1xuK1x0aW50IG5yX2ZvdW5kID0gMDtcbitcbitcdGZvcl9lYWNoX3NldF9iaXQobmlkLCBcdTAwMjZub2RlbWFzaywgQklUU19QRVJfVFlQRShub2RlbWFzaykpIHtcbitcdFx0bmlkc1tucl9mb3VuZCsrXSA9IG5pZDtcbitcdFx0aWYgKG5yX2ZvdW5kID09IG5yX25pZHMpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiB7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIG5vZGVtYXNrXzAgPSAxOyAvKiBuaWQ6IDAgKi9cbi1cdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShub2RlbWFzayk7XG4rXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrLCBiaW5kX25vZGVtYXNrO1xuK1x0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShub2RlbWFzaykgKyAxO1xuIFx0aW50IHBvbGljeTtcbiBcdGNoYXIgKm1lbTtcbitcdGludCBuaWQ7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKCFpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKCkpXG4rXHRpZiAoIWdldF9udW1hX25vZGVfaWRzKFx1MDAyNm5pZCwgMSkpXG4gXHRcdHJldHVybjtcbiBcbitcdGJpbmRfbm9kZW1hc2sgPSAxVUwgXHUwMDNjXHUwMDNjIG5pZDtcbiBcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcbiBcbiBcdC8qIFRlc3QgTVBPTF9JTlRFUkxFQVZFIHBvbGljeSAqL1xuLVx0a3ZtX21iaW5kKG1lbSwgcGFnZV9zaXplICogMiwgTVBPTF9JTlRFUkxFQVZFLCBcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcbitcdGt2bV9tYmluZChtZW0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfSU5URVJMRUFWRSwgXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XG4gXHRrdm1fZ2V0X21lbXBvbGljeShcdTAwMjZwb2xpY3ksIFx1MDAyNm5vZGVtYXNrLCBtYXhub2RlLCBtZW0sIE1QT0xfRl9BRERSKTtcbi1cdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0lOVEVSTEVBVkUgXHUwMDI2XHUwMDI2IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsXG4rXHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9JTlRFUkxFQVZFIFx1MDAyNlx1MDAyNiBub2RlbWFzayA9PSBiaW5kX25vZGVtYXNrLFxuIFx0XHQgICAgXCJXYW50ZWQgTVBPTF9JTlRFUkxFQVZFICgldSkgYW5kIG5vZGVtYXNrIDB4JWx4LCBnb3QgJXUgYW5kIDB4JWx4XCIsXG4tXHRcdCAgICBNUE9MX0lOVEVSTEVBVkUsIG5vZGVtYXNrXzAsIHBvbGljeSwgbm9kZW1hc2spO1xuK1x0XHQgICAgTVBPTF9JTlRFUkxFQVZFLCBiaW5kX25vZGVtYXNrLCBwb2xpY3ksIG5vZGVtYXNrKTtcbiBcbiBcdC8qIFRlc3QgYmFzaWMgTVBPTF9CSU5EIHBvbGljeSAqL1xuLVx0a3ZtX21iaW5kKG1lbSArIHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZW1hc2tfMCwgbWF4bm9kZSwgMCk7XG4rXHRrdm1fbWJpbmQobWVtICsgcGFnZV9zaXplICogMiwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTtcbiBcdGt2bV9nZXRfbWVtcG9saWN5KFx1MDAyNnBvbGljeSwgXHUwMDI2bm9kZW1hc2ssIG1heG5vZGUsIG1lbSArIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfRl9BRERSKTtcbi1cdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0JJTkQgXHUwMDI2XHUwMDI2IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsXG4rXHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9CSU5EIFx1MDAyNlx1MDAyNiBub2RlbWFzayA9PSBiaW5kX25vZGVtYXNrLFxuIFx0XHQgICAgXCJXYW50ZWQgTVBPTF9CSU5EICgldSkgYW5kIG5vZGVtYXNrIDB4JWx4LCBnb3QgJXUgYW5kIDB4JWx4XCIsXG4tXHRcdCAgICBNUE9MX0JJTkQsIG5vZGVtYXNrXzAsIHBvbGljeSwgbm9kZW1hc2spO1xuK1x0XHQgICAgTVBPTF9CSU5ELCBiaW5kX25vZGVtYXNrLCBwb2xpY3ksIG5vZGVtYXNrKTtcbiBcbiBcdC8qIFRlc3QgTVBPTF9ERUZBVUxUIHBvbGljeSAqL1xuIFx0a3ZtX21iaW5kKG1lbSwgdG90YWxfc2l6ZSwgTVBPTF9ERUZBVUxULCBOVUxMLCAwLCAwKTtcbkBAIC0xMTIsNyArMTMyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9tYmluZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIFx0XHQgICAgTVBPTF9ERUZBVUxULCBwb2xpY3ksIG5vZGVtYXNrKTtcbiBcbiBcdC8qIFRlc3Qgd2l0aCBpbnZhbGlkIHBvbGljeSAqL1xuLVx0cmV0ID0gbWJpbmQobWVtLCBwYWdlX3NpemUsIDk5OSwgXHUwMDI2bm9kZW1hc2tfMCwgbWF4bm9kZSwgMCk7XG4rXHRyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCBcdTAwMjZiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTtcbiBcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuIFx0XHQgICAgXCJtYmluZCB3aXRoIGludmFsaWQgcG9saWN5IHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXCIpO1xuIFxuQEAgLTEyMSwxNyArMTQxLDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X251bWFfYWxsb2NhdGlvbihpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbm9kZTBfbWFzayA9IDE7ICAvKiBOb2RlIDAgKi9cbi1cdHVuc2lnbmVkIGxvbmcgbm9kZTFfbWFzayA9IDI7ICAvKiBOb2RlIDEgKi9cbi1cdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IDg7XG4rXHR1bnNpZ25lZCBsb25nIGJpbmRfbm9kZW1hc2tzWzJdO1xuK1x0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShiaW5kX25vZGVtYXNrc1swXSkgKyAxO1xuIFx0dm9pZCAqcGFnZXNbNF07XG4rXHRpbnQgbmlkc1syXTtcbiBcdGludCBzdGF0dXNbNF07XG4gXHRjaGFyICptZW07XG4gXHRpbnQgaTtcbiBcbi1cdGlmICghaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSgpKVxuK1x0aWYgKCFnZXRfbnVtYV9ub2RlX2lkcyhuaWRzLCBBUlJBWV9TSVpFKG5pZHMpKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0YmluZF9ub2RlbWFza3NbMF0gPSAxVUwgXHUwMDNjXHUwMDNjIG5pZHNbMF07XG4rXHRiaW5kX25vZGVtYXNrc1sxXSA9IDFVTCBcdTAwM2NcdTAwM2Mgbmlkc1sxXTtcbiBcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDQ7IGkrKylcbkBAIC0xMzksMzQgKzE2MSw0MiBAQCBzdGF0aWMgdm9pZCB0ZXN0X251bWFfYWxsb2NhdGlvbihpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIFxuIFx0LyogU2V0IE5VTUEgcG9saWN5IGFmdGVyIGFsbG9jYXRpb24gKi9cbiBcdG1lbXNldChtZW0sIDB4YWEsIHBhZ2Vfc2l6ZSk7XG4tXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMF9tYXNrLCBtYXhub2RlLCAwKTtcbitcdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTtcbiBcdGt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgcGFnZV9zaXplKTtcbiBcbiBcdC8qIFNldCBOVU1BIHBvbGljeSBiZWZvcmUgYWxsb2NhdGlvbiAqL1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGUxX21hc2ssIG1heG5vZGUsIDApO1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xuK1x0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTtcbitcdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XG4gXHRtZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTtcbiBcbiBcdC8qIFZhbGlkYXRlIGlmIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gc3BlY2lmaWVkIE5VTUEgbm9kZXMgKi9cbiBcdGt2bV9tb3ZlX3BhZ2VzKDAsIDQsIHBhZ2VzLCBOVUxMLCBzdGF0dXMsIDApO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IDEsIFwiRXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzBdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAxLCBcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1sxXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gMCwgXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbMl0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IDAsIFwiRXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzNdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzFdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1sxXSwgc3RhdHVzWzBdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSBuaWRzWzFdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1sxXSwgc3RhdHVzWzFdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSBuaWRzWzBdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1swXSwgc3RhdHVzWzJdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzBdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1swXSwgc3RhdHVzWzNdKTtcbiBcbiBcdC8qIFB1bmNoIGhvbGUgZm9yIGFsbCBwYWdlcyAqL1xuIFx0a3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCB0b3RhbF9zaXplKTtcbiBcbiBcdC8qIENoYW5nZSBOVU1BIHBvbGljeSBub2RlcyBhbmQgcmVhbGxvY2F0ZSAqL1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGUxX21hc2ssIG1heG5vZGUsIDApO1xuK1x0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTtcbitcdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7XG4gXHRtZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTtcbiBcbiBcdGt2bV9tb3ZlX3BhZ2VzKDAsIDQsIHBhZ2VzLCBOVUxMLCBzdGF0dXMsIDApO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IDAsIFwiRXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzBdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAwLCBcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1sxXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gMSwgXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbMl0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IDEsIFwiRXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzNdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzBdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1swXSwgc3RhdHVzWzBdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSBuaWRzWzBdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1swXSwgc3RhdHVzWzFdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSBuaWRzWzFdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1sxXSwgc3RhdHVzWzJdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzFdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1sxXSwgc3RhdHVzWzNdKTtcbiBcbiBcdGt2bV9tdW5tYXAobWVtLCB0b3RhbF9zaXplKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaFxuaW5kZXggMjk1NzJhNmQ3ODljZC4uYjg5NTU5YjZlYTNjMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaFxuQEAgLTQsOCArNCw3IEBAXG4gI2lmbmRlZiBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcbiAjZGVmaW5lIFNFTEZURVNUX0tWTV9OVU1BSUZfSFxuIFxuLSNpbmNsdWRlIFx1MDAzY2RpcmVudC5oXHUwMDNlXG4tXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcG9saWN5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImt2bV9zeXNjYWxscy5oXCJcbkBAIC0zMCw1NCArMjksMTYgQEAgS1ZNX1NZU0NBTExfREVGSU5FKG1iaW5kLCA2LCB2b2lkICosIGFkZHIsIHVuc2lnbmVkIGxvbmcsIHNpemUsIGludCwgbW9kZSxcbiBcdFx0ICAgY29uc3QgdW5zaWduZWQgbG9uZyAqLCBub2RlbWFzaywgdW5zaWduZWQgbG9uZywgbWF4bm9kZSxcbiBcdFx0ICAgdW5zaWduZWQgaW50LCBmbGFncyk7XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZ2V0X21heF9udW1hX25vZGUodm9pZClcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X251bWFfbWVtX25vZGVzKHZvaWQpXG4ge1xuLVx0c3RydWN0IGRpcmVudCAqZGU7XG4tXHRpbnQgbWF4X25vZGUgPSAwO1xuLVx0RElSICpkO1xuK1x0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7XG4gXG4tXHQvKlxuLVx0ICogQXNzdW1lIHRoZXJlJ3MgYSBzaW5nbGUgbm9kZSBpZiB0aGUga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBOVU1BLFxuLVx0ICogb3IgaWYgbm8gbm9kZXMgYXJlIGZvdW5kLlxuLVx0ICovXG4tXHRkID0gb3BlbmRpcihcIi9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZVwiKTtcbi1cdGlmICghZClcbitcdC8qIEdldCBzZXQgb2YgZmlyc3QgNjQgbnVtYSBub2RlcyBhdmFpbGFibGUgKi9cbitcdGlmIChnZXRfbWVtcG9saWN5KE5VTEwsIFx1MDAyNm5vZGVtYXNrLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgTlVMTCxcbitcdFx0XHQgIE1QT0xfRl9NRU1TX0FMTE9XRUQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7XG4tXHRcdGludCBub2RlX2lkO1xuLVx0XHRjaGFyICplbmRwdHI7XG4tXG4tXHRcdGlmIChzdHJuY21wKGRlLVx1MDAzZWRfbmFtZSwgXCJub2RlXCIsIDQpICE9IDApXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdG5vZGVfaWQgPSBzdHJ0b2woZGUtXHUwMDNlZF9uYW1lICsgNCwgXHUwMDI2ZW5kcHRyLCAxMCk7XG4tXHRcdGlmICgqZW5kcHRyICE9ICdcXDAnKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpZiAobm9kZV9pZCBcdTAwM2UgbWF4X25vZGUpXG4tXHRcdFx0bWF4X25vZGUgPSBub2RlX2lkO1xuLVx0fVxuLVx0Y2xvc2VkaXIoZCk7XG4tXG4tXHRyZXR1cm4gbWF4X25vZGU7XG4tfVxuLVxuLXN0YXRpYyBib29sIGlzX251bWFfYXZhaWxhYmxlKHZvaWQpXG4te1xuLVx0Lypcbi1cdCAqIFByb2JlIGZvciBOVU1BIGJ5IGRvaW5nIGEgZHVtbXkgZ2V0X21lbXBvbGljeSgpLiAgSWYgdGhlIHN5c2NhbGxcbi1cdCAqIGZhaWxzIHdpdGggRU5PU1lTLCB0aGVuIHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGhvdXQgTlVNQSBzdXBwb3J0LlxuLVx0ICogaWYgdGhlIHN5c2NhbGwgZmFpbHMgd2l0aCBFUEVSTSwgdGhlbiB0aGUgcHJvY2Vzcy91c2VyIGxhY2tzIHRoZVxuLVx0ICogbmVjZXNzYXJ5IGNhcGFiaWxpdGllcyAoQ0FQX1NZU19OSUNFKS5cbi1cdCAqL1xuLVx0cmV0dXJuICFnZXRfbWVtcG9saWN5KE5VTEwsIE5VTEwsIDAsIE5VTEwsIDApIHx8XG4tXHRcdChlcnJubyAhPSBFTk9TWVMgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVQRVJNKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSBib29sIGlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0odm9pZClcbi17XG4tXHRyZXR1cm4gaXNfbnVtYV9hdmFpbGFibGUoKSBcdTAwMjZcdTAwMjYgZ2V0X21heF9udW1hX25vZGUoKSBcdTAwM2U9IDE7XG4rXHRyZXR1cm4gbm9kZW1hc2s7XG4gfVxuIFxuICNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fTlVNQUlGX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbmluZGV4IDQ2OWUzYWIxNjQ2MDguLmI1ZjRlZDY3MTIxODkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY1xuQEAgLTIzMiw4ICsyMzIsOCBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcyxcbiBcdFx0ICAgdTY0ICpwaXBpc19yY3ZkKVxuIHtcbiBcdGxvbmcgcGFnZXNfbm90X21vdmVkO1xuLVx0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrc1tzaXplb2Yobm9kZW1hc2spICogOF07XG4rXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrO1xuK1x0dW5zaWduZWQgbG9uZyBub2RlbWFza3NbQklUU19QRVJfVFlQRShub2RlbWFzayldO1xuIFx0aW50IG5vZGVzID0gMDtcbiBcdHRpbWVfdCBzdGFydF90aW1lLCBsYXN0X3VwZGF0ZSwgbm93O1xuIFx0dGltZV90IGludGVydmFsX3NlY3MgPSAxO1xuQEAgLTI0NywxOSArMjQ3LDE3IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxuIFx0ZnByaW50ZihzdGRlcnIsIFwiQ2FsbGluZyBtaWdyYXRlX3BhZ2VzIGV2ZXJ5ICVkIG1pY3Jvc2Vjb25kc1xcblwiLFxuIFx0XHRkZWxheV91c2Vjcyk7XG4gXG4tXHQvKiBHZXQgc2V0IG9mIGZpcnN0IDY0IG51bWEgbm9kZXMgYXZhaWxhYmxlICovXG4tXHRrdm1fZ2V0X21lbXBvbGljeShOVUxMLCBcdTAwMjZub2RlbWFzaywgc2l6ZW9mKG5vZGVtYXNrKSAqIDgsXG4tXHRcdFx0ICAwLCBNUE9MX0ZfTUVNU19BTExPV0VEKTtcbitcdG5vZGVtYXNrID0gZ2V0X251bWFfbWVtX25vZGVzKCk7XG4gXG4gXHRmcHJpbnRmKHN0ZGVyciwgXCJOdW1hIG5vZGVzIGZvdW5kIGFtb25nc3QgZmlyc3QgJWx1IHBvc3NpYmxlIG5vZGVzIFwiXG4gXHRcdFwiKGVhY2ggMS1iaXQgaW5kaWNhdGVzIG5vZGUgaXMgcHJlc2VudCk6ICUjbHhcXG5cIixcbi1cdFx0c2l6ZW9mKG5vZGVtYXNrKSAqIDgsIG5vZGVtYXNrKTtcbitcdFx0QklUU19QRVJfVFlQRShub2RlbWFzayksIG5vZGVtYXNrKTtcbiBcbiBcdC8qIEluaXQgYXJyYXkgb2YgbWFza3MgY29udGFpbmluZyBhIHNpbmdsZS1iaXQgaW4gZWFjaCwgb25lIGZvciBlYWNoXG4gXHQgKiBhdmFpbGFibGUgbm9kZS4gbWlncmF0ZV9wYWdlcyBjYWxsZWQgYmVsb3cgcmVxdWlyZXMgc3BlY2lmeWluZyBub2Rlc1xuIFx0ICogYXMgYml0IG1hc2tzLlxuIFx0ICovXG4tXHRmb3IgKGkgPSAwLCBiaXQgPSAxOyBpIFx1MDAzYyBzaXplb2Yobm9kZW1hc2spICogODsgaSsrLCBiaXQgXHUwMDNjXHUwMDNjPSAxKSB7XG4rXHRmb3IgKGkgPSAwLCBiaXQgPSAxOyBpIFx1MDAzYyBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKTsgaSsrLCBiaXQgXHUwMDNjXHUwMDNjPSAxKSB7XG4gXHRcdGlmIChub2RlbWFzayBcdTAwMjYgYml0KSB7XG4gXHRcdFx0bm9kZW1hc2tzW25vZGVzXSA9IG5vZGVtYXNrIFx1MDAyNiBiaXQ7XG4gXHRcdFx0bm9kZXMrKztcbkBAIC0yOTEsNyArMjg5LDcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRcdCAqIEtWTV9DUkVBVEVfVkNQVSBpb2N0bC4gSWYgdGhhdCBhc3N1bXB0aW9uIGV2ZXIgY2hhbmdlcyB0aGlzXG4gXHRcdCAqIHRlc3QgbWF5IGJyZWFrIG9yIGdpdmUgYSBmYWxzZSBwb3NpdGl2ZSBzaWduYWwuXG4gXHRcdCAqL1xuLVx0XHRwYWdlc19ub3RfbW92ZWQgPSBtaWdyYXRlX3BhZ2VzKDAsIHNpemVvZihub2RlbWFza3NbZnJvbV0pLFxuK1x0XHRwYWdlc19ub3RfbW92ZWQgPSBtaWdyYXRlX3BhZ2VzKDAsIEJJVFNfUEVSX1RZUEUobm9kZW1hc2tzW2Zyb21dKSArIDEsXG4gXHRcdFx0XHRcdFx0XHUwMDI2bm9kZW1hc2tzW2Zyb21dLFxuIFx0XHRcdFx0XHRcdFx1MDAyNm5vZGVtYXNrc1t0b10pO1xuIFx0XHRpZiAocGFnZXNfbm90X21vdmVkIFx1MDAzYyAwKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTg6NDM6NDAuOTc2MDY2NDEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQxNjI1MTM0Mjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXMgLSBLVk0gU2VsZnRlc3RzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGRpZmYuIFRoZSBtb2RpZmllZCBmaWxlcyBhcmUgYWxsIHR1Y2tlZCBhd2F5IHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2A6IGBndWVzdF9tZW1mZF90ZXN0LmNgLCBgbnVtYWlmLmhgLCBhbmQgYHhhcGljX2lwaV90ZXN0LmNgLiBOb3RoaW5nIGluIHRoZSBjb3JlIGtlcm5lbCDigJMgbm8gZHJpdmVycywgbWVtb3J5IG1hbmFnZW1lbnQsIG9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLVk0gY29kZS4gVGhpcyBpcyBhbGwgdXNlcnNwYWNlIEtWTSBzZWxmdGVzdCB0ZXJyaXRvcnkuXG5cbk5vdywgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGBXb3J0aEZ1enppbmdgIGd1aWRlbGluZXMuIFdlJ3JlIGxvb2tpbmcgZm9yIG1vZGlmaWNhdGlvbnMgdGhhdCAqZG9uJ3QqIHdhcnJhbnQgZnV6emluZy4gVGhlIGNyaXRlcmlhIHNwZWNpZmljYWxseSBleGNsdWRlIGNoYW5nZXMgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIGNvc21ldGljIGxvZ2dpbmcsIG5vbi1mdW5jdGlvbmFsIG51bWVyaWMgY29uc3RhbnRzLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYW5kIGNlcnRhaW4gZHJpdmVyIHJlbW92YWxzLiBJbXBvcnRhbnRseSwgY2hhbmdlcyB3aXRoaW4gYHRvb2xzL2AsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlc2Ugc2VsZi10ZXN0cywgZG9uJ3QgdG91Y2ggdGhlIGtlcm5lbCBiaW5hcnkgb3IgY29yZSBsb2dpYy4gVGhleSBhcmUsIGZ1bmRhbWVudGFsbHksIHVzZXJzcGFjZSB0ZXN0IHByb2dyYW1zLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24ndCBpbXBhY3QgYW55dGhpbmcgdGhhdCBTeXprYWxsZXIgc2hvdWxkIGJlIGZ1enppbmcuIEknbGwgZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTU1LCJPdXRwdXRUb2tlbnMiOjY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6MDc6MTcuMjI3NDEzODgzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKSwgd2l0aCBubyBjaGFuZ2VzIHRvIHRoZSBMaW51eCBrZXJuZWwgc291cmNlIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgS1ZNIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyksIHdpdGggbm8gY2hhbmdlcyB0byB0aGUgTGludXgga2VybmVsIHNvdXJjZSBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjA3OjE3LjIyNzQ0Njg2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowv8722[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 18:41:34 +0000 UTC FinishedAt: 2026-09-01 19:07:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE4OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7JiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8pLCB3aXRoIG5vIGNoYW5nZXMgdG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE4OjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYWIzOTZkNTYwYmU2NzAwYTUxYzhmZTIzN2EzZDc5NDU0Y2M5MmU4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMTg6NDM6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcbmluZGV4IDIyMzNkODcxYTM4ZjQuLmFlZTgwZGRhNjIyOTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXG5AQCAtNzYsMzMgJiM0Mzs3Niw1MyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21tYXBfc3VwcG9ydGVkKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4gXHRrdm1fbXVubWFwKG1lbSwgdG90YWxfc2l6ZSk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBGaWxsIEBuaWRzIHdpdGggdGhlIGZpcnN0IEBucl9uaWRzIG5vZGVzIGluIHRoZSBhbGxvd2VkIG1hc2suXG4mIzQzOyAqIFJldHVybiBmYWxzZSBpZiB0aGUgbWFzayBjb250YWlucyBmZXdlciB0aGFuIEBucl9uaWRzIG5vZGVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgZ2V0X251bWFfbm9kZV9pZHMoaW50ICpuaWRzLCBpbnQgbnJfbmlkcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSBnZXRfbnVtYV9tZW1fbm9kZXMoKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5pZDtcbiYjNDM7XHRpbnQgbnJfZm91bmQgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9zZXRfYml0KG5pZCwgXHUwMDI2bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spKSB7XG4mIzQzO1x0XHRuaWRzW25yX2ZvdW5kJiM0MzsmIzQzO10gPSBuaWQ7XG4mIzQzO1x0XHRpZiAobnJfZm91bmQgPT0gbnJfbmlkcylcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdGVzdF9tYmluZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIHtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tfMCA9IDE7IC8qIG5pZDogMCAqL1xuLVx0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrLCBiaW5kX25vZGVtYXNrO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUobm9kZW1hc2spICYjNDM7IDE7XG4gXHRpbnQgcG9saWN5O1xuIFx0Y2hhciAqbWVtO1xuJiM0MztcdGludCBuaWQ7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKCFpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKCkpXG4mIzQzO1x0aWYgKCFnZXRfbnVtYV9ub2RlX2lkcyhcdTAwMjZuaWQsIDEpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0YmluZF9ub2RlbWFzayA9IDFVTCBcdTAwM2NcdTAwM2MgbmlkO1xuIFx0bWVtID0ga3ZtX21tYXAodG90YWxfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQpO1xuIFxuIFx0LyogVGVzdCBNUE9MX0lOVEVSTEVBVkUgcG9saWN5ICovXG4tXHRrdm1fbWJpbmQobWVtLCBwYWdlX3NpemUgKiAyLCBNUE9MX0lOVEVSTEVBVkUsIFx1MDAyNm5vZGVtYXNrXzAsIG1heG5vZGUsIDApO1xuJiM0MztcdGt2bV9tYmluZChtZW0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfSU5URVJMRUFWRSwgXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XG4gXHRrdm1fZ2V0X21lbXBvbGljeShcdTAwMjZwb2xpY3ksIFx1MDAyNm5vZGVtYXNrLCBtYXhub2RlLCBtZW0sIE1QT0xfRl9BRERSKTtcbi1cdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0lOVEVSTEVBVkUgXHUwMDI2XHUwMDI2IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsXG4mIzQzO1x0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSBcdTAwMjZcdTAwMjYgbm9kZW1hc2sgPT0gYmluZF9ub2RlbWFzayxcbiBcdFx0ICAgIFwmIzM0O1dhbnRlZCBNUE9MX0lOVEVSTEVBVkUgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHhcJiMzNDssXG4tXHRcdCAgICBNUE9MX0lOVEVSTEVBVkUsIG5vZGVtYXNrXzAsIHBvbGljeSwgbm9kZW1hc2spO1xuJiM0MztcdFx0ICAgIE1QT0xfSU5URVJMRUFWRSwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7XG4gXG4gXHQvKiBUZXN0IGJhc2ljIE1QT0xfQklORCBwb2xpY3kgKi9cbi1cdGt2bV9tYmluZChtZW0gJiM0MzsgcGFnZV9zaXplICogMiwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcbiYjNDM7XHRrdm1fbWJpbmQobWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XG4gXHRrdm1fZ2V0X21lbXBvbGljeShcdTAwMjZwb2xpY3ksIFx1MDAyNm5vZGVtYXNrLCBtYXhub2RlLCBtZW0gJiM0MzsgcGFnZV9zaXplICogMiwgTVBPTF9GX0FERFIpO1xuLVx0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfQklORCBcdTAwMjZcdTAwMjYgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCxcbiYjNDM7XHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9CSU5EIFx1MDAyNlx1MDAyNiBub2RlbWFzayA9PSBiaW5kX25vZGVtYXNrLFxuIFx0XHQgICAgXCYjMzQ7V2FudGVkIE1QT0xfQklORCAoJXUpIGFuZCBub2RlbWFzayAweCVseCwgZ290ICV1IGFuZCAweCVseFwmIzM0Oyxcbi1cdFx0ICAgIE1QT0xfQklORCwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7XG4mIzQzO1x0XHQgICAgTVBPTF9CSU5ELCBiaW5kX25vZGVtYXNrLCBwb2xpY3ksIG5vZGVtYXNrKTtcbiBcbiBcdC8qIFRlc3QgTVBPTF9ERUZBVUxUIHBvbGljeSAqL1xuIFx0a3ZtX21iaW5kKG1lbSwgdG90YWxfc2l6ZSwgTVBPTF9ERUZBVUxULCBOVUxMLCAwLCAwKTtcbkBAIC0xMTIsNyAmIzQzOzEzMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiBcdFx0ICAgIE1QT0xfREVGQVVMVCwgcG9saWN5LCBub2RlbWFzayk7XG4gXG4gXHQvKiBUZXN0IHdpdGggaW52YWxpZCBwb2xpY3kgKi9cbi1cdHJldCA9IG1iaW5kKG1lbSwgcGFnZV9zaXplLCA5OTksIFx1MDAyNm5vZGVtYXNrXzAsIG1heG5vZGUsIDApO1xuJiM0MztcdHJldCA9IG1iaW5kKG1lbSwgcGFnZV9zaXplLCA5OTksIFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xuIFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG4gXHRcdCAgICBcJiMzNDttYmluZCB3aXRoIGludmFsaWQgcG9saWN5IHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXCYjMzQ7KTtcbiBcbkBAIC0xMjEsMTcgJiM0MzsxNDEsMTkgQEAgc3RhdGljIHZvaWQgdGVzdF9tYmluZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIFxuIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBub2RlMF9tYXNrID0gMTsgIC8qIE5vZGUgMCAqL1xuLVx0dW5zaWduZWQgbG9uZyBub2RlMV9tYXNrID0gMjsgIC8qIE5vZGUgMSAqL1xuLVx0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gODtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGJpbmRfbm9kZW1hc2tzWzJdO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUoYmluZF9ub2RlbWFza3NbMF0pICYjNDM7IDE7XG4gXHR2b2lkICpwYWdlc1s0XTtcbiYjNDM7XHRpbnQgbmlkc1syXTtcbiBcdGludCBzdGF0dXNbNF07XG4gXHRjaGFyICptZW07XG4gXHRpbnQgaTtcbiBcbi1cdGlmICghaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSgpKVxuJiM0MztcdGlmICghZ2V0X251bWFfbm9kZV9pZHMobmlkcywgQVJSQVlfU0laRShuaWRzKSkpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRiaW5kX25vZGVtYXNrc1swXSA9IDFVTCBcdTAwM2NcdTAwM2Mgbmlkc1swXTtcbiYjNDM7XHRiaW5kX25vZGVtYXNrc1sxXSA9IDFVTCBcdTAwM2NcdTAwM2Mgbmlkc1sxXTtcbiBcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDQ7IGkmIzQzOyYjNDM7KVxuQEAgLTEzOSwzNCAmIzQzOzE2MSw0MiBAQCBzdGF0aWMgdm9pZCB0ZXN0X251bWFfYWxsb2NhdGlvbihpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIFxuIFx0LyogU2V0IE5VTUEgcG9saWN5IGFmdGVyIGFsbG9jYXRpb24gKi9cbiBcdG1lbXNldChtZW0sIDB4YWEsIHBhZ2Vfc2l6ZSk7XG4tXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMF9tYXNrLCBtYXhub2RlLCAwKTtcbiYjNDM7XHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XG4gXHRrdm1fZmFsbG9jYXRlKGZkLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsIDAsIHBhZ2Vfc2l6ZSk7XG4gXG4gXHQvKiBTZXQgTlVNQSBwb2xpY3kgYmVmb3JlIGFsbG9jYXRpb24gKi9cbi1cdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMV9tYXNrLCBtYXhub2RlLCAwKTtcbi1cdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMF9tYXNrLCBtYXhub2RlLCAwKTtcbiYjNDM7XHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMV0sIG1heG5vZGUsIDApO1xuJiM0MztcdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XG4gXHRtZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTtcbiBcbiBcdC8qIFZhbGlkYXRlIGlmIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gc3BlY2lmaWVkIE5VTUEgbm9kZXMgKi9cbiBcdGt2bV9tb3ZlX3BhZ2VzKDAsIDQsIHBhZ2VzLCBOVUxMLCBzdGF0dXMsIDApO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IDEsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbMF0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IDEsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbMV0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDAsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMiBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbMl0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IDAsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbM10pO1xuJiM0MztcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzFdLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgbmlkc1sxXSwgc3RhdHVzWzBdKTtcbiYjNDM7XHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1sxXSxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIG5pZHNbMV0sIHN0YXR1c1sxXSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IG5pZHNbMF0sXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbMl0pO1xuJiM0MztcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzBdLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgbmlkc1swXSwgc3RhdHVzWzNdKTtcbiBcbiBcdC8qIFB1bmNoIGhvbGUgZm9yIGFsbCBwYWdlcyAqL1xuIFx0a3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCB0b3RhbF9zaXplKTtcbiBcbiBcdC8qIENoYW5nZSBOVU1BIHBvbGljeSBub2RlcyBhbmQgcmVhbGxvY2F0ZSAqL1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGUxX21hc2ssIG1heG5vZGUsIDApO1xuJiM0MztcdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XG4mIzQzO1x0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTtcbiBcdG1lbXNldChtZW0sIDB4YWEsIHRvdGFsX3NpemUpO1xuIFxuIFx0a3ZtX21vdmVfcGFnZXMoMCwgNCwgcGFnZXMsIE5VTEwsIHN0YXR1cywgMCk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gMCwgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIHN0YXR1c1swXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gMCwgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIHN0YXR1c1sxXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gMSwgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIHN0YXR1c1syXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gMSwgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIHN0YXR1c1szXSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IG5pZHNbMF0sXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbMF0pO1xuJiM0MztcdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSBuaWRzWzBdLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgbmlkc1swXSwgc3RhdHVzWzFdKTtcbiYjNDM7XHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1sxXSxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIG5pZHNbMV0sIHN0YXR1c1syXSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IG5pZHNbMV0sXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbM10pO1xuIFxuIFx0a3ZtX211bm1hcChtZW0sIHRvdGFsX3NpemUpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXG5pbmRleCAyOTU3MmE2ZDc4OWNkLi5iODk1NTliNmVhM2MxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXG5AQCAtNCw4ICYjNDM7NCw3IEBAXG4gI2lmbmRlZiBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcbiAjZGVmaW5lIFNFTEZURVNUX0tWTV9OVU1BSUZfSFxuIFxuLSNpbmNsdWRlIFx1MDAzY2RpcmVudC5oXHUwMDNlXG4tXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3ZtX3N5c2NhbGxzLmhcJiMzNDtcbkBAIC0zMCw1NCAmIzQzOzI5LDE2IEBAIEtWTV9TWVNDQUxMX0RFRklORShtYmluZCwgNiwgdm9pZCAqLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBzaXplLCBpbnQsIG1vZGUsXG4gXHRcdCAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiwgbm9kZW1hc2ssIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsXG4gXHRcdCAgIHVuc2lnbmVkIGludCwgZmxhZ3MpO1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGdldF9tYXhfbnVtYV9ub2RlKHZvaWQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbnVtYV9tZW1fbm9kZXModm9pZClcbiB7XG4tXHRzdHJ1Y3QgZGlyZW50ICpkZTtcbi1cdGludCBtYXhfbm9kZSA9IDA7XG4tXHRESVIgKmQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7XG4gXG4tXHQvKlxuLVx0ICogQXNzdW1lIHRoZXJlJiMzOTtzIGEgc2luZ2xlIG5vZGUgaWYgdGhlIGtlcm5lbCBkb2VzbiYjMzk7dCBzdXBwb3J0IE5VTUEsXG4tXHQgKiBvciBpZiBubyBub2RlcyBhcmUgZm91bmQuXG4tXHQgKi9cbi1cdGQgPSBvcGVuZGlyKFwmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZVwmIzM0Oyk7XG4tXHRpZiAoIWQpXG4mIzQzO1x0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xuJiM0MztcdGlmIChnZXRfbWVtcG9saWN5KE5VTEwsIFx1MDAyNm5vZGVtYXNrLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgTlVMTCxcbiYjNDM7XHRcdFx0ICBNUE9MX0ZfTUVNU19BTExPV0VEKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkge1xuLVx0XHRpbnQgbm9kZV9pZDtcbi1cdFx0Y2hhciAqZW5kcHRyO1xuLVxuLVx0XHRpZiAoc3RybmNtcChkZS1cdTAwM2VkX25hbWUsIFwmIzM0O25vZGVcJiMzNDssIDQpICE9IDApXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdG5vZGVfaWQgPSBzdHJ0b2woZGUtXHUwMDNlZF9uYW1lICYjNDM7IDQsIFx1MDAyNmVuZHB0ciwgMTApO1xuLVx0XHRpZiAoKmVuZHB0ciAhPSAmIzM5O1xcMCYjMzk7KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpZiAobm9kZV9pZCBcdTAwM2UgbWF4X25vZGUpXG4tXHRcdFx0bWF4X25vZGUgPSBub2RlX2lkO1xuLVx0fVxuLVx0Y2xvc2VkaXIoZCk7XG4tXG4tXHRyZXR1cm4gbWF4X25vZGU7XG4tfVxuLVxuLXN0YXRpYyBib29sIGlzX251bWFfYXZhaWxhYmxlKHZvaWQpXG4te1xuLVx0Lypcbi1cdCAqIFByb2JlIGZvciBOVU1BIGJ5IGRvaW5nIGEgZHVtbXkgZ2V0X21lbXBvbGljeSgpLiAgSWYgdGhlIHN5c2NhbGxcbi1cdCAqIGZhaWxzIHdpdGggRU5PU1lTLCB0aGVuIHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGhvdXQgTlVNQSBzdXBwb3J0LlxuLVx0ICogaWYgdGhlIHN5c2NhbGwgZmFpbHMgd2l0aCBFUEVSTSwgdGhlbiB0aGUgcHJvY2Vzcy91c2VyIGxhY2tzIHRoZVxuLVx0ICogbmVjZXNzYXJ5IGNhcGFiaWxpdGllcyAoQ0FQX1NZU19OSUNFKS5cbi1cdCAqL1xuLVx0cmV0dXJuICFnZXRfbWVtcG9saWN5KE5VTEwsIE5VTEwsIDAsIE5VTEwsIDApIHx8XG4tXHRcdChlcnJubyAhPSBFTk9TWVMgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVQRVJNKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSBib29sIGlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0odm9pZClcbi17XG4tXHRyZXR1cm4gaXNfbnVtYV9hdmFpbGFibGUoKSBcdTAwMjZcdTAwMjYgZ2V0X21heF9udW1hX25vZGUoKSBcdTAwM2U9IDE7XG4mIzQzO1x0cmV0dXJuIG5vZGVtYXNrO1xuIH1cbiBcbiAjZW5kaWYgLyogU0VMRlRFU1RfS1ZNX05VTUFJRl9IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXG5pbmRleCA0NjllM2FiMTY0NjA4Li5iNWY0ZWQ2NzEyMTg5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbkBAIC0yMzIsOCAmIzQzOzIzMiw4IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxuIFx0XHQgICB1NjQgKnBpcGlzX3JjdmQpXG4ge1xuIFx0bG9uZyBwYWdlc19ub3RfbW92ZWQ7XG4tXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW3NpemVvZihub2RlbWFzaykgKiA4XTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW0JJVFNfUEVSX1RZUEUobm9kZW1hc2spXTtcbiBcdGludCBub2RlcyA9IDA7XG4gXHR0aW1lX3Qgc3RhcnRfdGltZSwgbGFzdF91cGRhdGUsIG5vdztcbiBcdHRpbWVfdCBpbnRlcnZhbF9zZWNzID0gMTtcbkBAIC0yNDcsMTkgJiM0MzsyNDcsMTcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7Q2FsbGluZyBtaWdyYXRlX3BhZ2VzIGV2ZXJ5ICVkIG1pY3Jvc2Vjb25kc1xcblwmIzM0OyxcbiBcdFx0ZGVsYXlfdXNlY3MpO1xuIFxuLVx0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xuLVx0a3ZtX2dldF9tZW1wb2xpY3koTlVMTCwgXHUwMDI2bm9kZW1hc2ssIHNpemVvZihub2RlbWFzaykgKiA4LFxuLVx0XHRcdCAgMCwgTVBPTF9GX01FTVNfQUxMT1dFRCk7XG4mIzQzO1x0bm9kZW1hc2sgPSBnZXRfbnVtYV9tZW1fbm9kZXMoKTtcbiBcbiBcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtOdW1hIG5vZGVzIGZvdW5kIGFtb25nc3QgZmlyc3QgJWx1IHBvc3NpYmxlIG5vZGVzIFwmIzM0O1xuIFx0XHRcJiMzNDsoZWFjaCAxLWJpdCBpbmRpY2F0ZXMgbm9kZSBpcyBwcmVzZW50KTogJSNseFxcblwmIzM0Oyxcbi1cdFx0c2l6ZW9mKG5vZGVtYXNrKSAqIDgsIG5vZGVtYXNrKTtcbiYjNDM7XHRcdEJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBub2RlbWFzayk7XG4gXG4gXHQvKiBJbml0IGFycmF5IG9mIG1hc2tzIGNvbnRhaW5pbmcgYSBzaW5nbGUtYml0IGluIGVhY2gsIG9uZSBmb3IgZWFjaFxuIFx0ICogYXZhaWxhYmxlIG5vZGUuIG1pZ3JhdGVfcGFnZXMgY2FsbGVkIGJlbG93IHJlcXVpcmVzIHNwZWNpZnlpbmcgbm9kZXNcbiBcdCAqIGFzIGJpdCBtYXNrcy5cbiBcdCAqL1xuLVx0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcdTAwM2Mgc2l6ZW9mKG5vZGVtYXNrKSAqIDg7IGkmIzQzOyYjNDM7LCBiaXQgXHUwMDNjXHUwMDNjPSAxKSB7XG4mIzQzO1x0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcdTAwM2MgQklUU19QRVJfVFlQRShub2RlbWFzayk7IGkmIzQzOyYjNDM7LCBiaXQgXHUwMDNjXHUwMDNjPSAxKSB7XG4gXHRcdGlmIChub2RlbWFzayBcdTAwMjYgYml0KSB7XG4gXHRcdFx0bm9kZW1hc2tzW25vZGVzXSA9IG5vZGVtYXNrIFx1MDAyNiBiaXQ7XG4gXHRcdFx0bm9kZXMmIzQzOyYjNDM7O1xuQEAgLTI5MSw3ICYjNDM7Mjg5LDcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRcdCAqIEtWTV9DUkVBVEVfVkNQVSBpb2N0bC4gSWYgdGhhdCBhc3N1bXB0aW9uIGV2ZXIgY2hhbmdlcyB0aGlzXG4gXHRcdCAqIHRlc3QgbWF5IGJyZWFrIG9yIGdpdmUgYSBmYWxzZSBwb3NpdGl2ZSBzaWduYWwuXG4gXHRcdCAqL1xuLVx0XHRwYWdlc19ub3RfbW92ZWQgPSBtaWdyYXRlX3BhZ2VzKDAsIHNpemVvZihub2RlbWFza3NbZnJvbV0pLFxuJiM0MztcdFx0cGFnZXNfbm90X21vdmVkID0gbWlncmF0ZV9wYWdlcygwLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrc1tmcm9tXSkgJiM0MzsgMSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZub2RlbWFza3NbZnJvbV0sXG4gXHRcdFx0XHRcdFx0XHUwMDI2bm9kZW1hc2tzW3RvXSk7XG4gXHRcdGlmIChwYWdlc19ub3RfbW92ZWQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTg6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8pLCB3aXRoIG5vIGNoYW5nZXMgdG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWIzOTZkNTYwYmU2NzAwYTUxYzhmZTIzN2EzZDc5NDU0Y2M5MmU4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMTg6NDM6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYwppbmRleCAyMjMzZDg3MWEzOGY0Li5hZWU4MGRkYTYyMjk1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMKQEAgLTc2LDMzICYjNDM7NzYsNTMgQEAgc3RhdGljIHZvaWQgdGVzdF9tbWFwX3N1cHBvcnRlZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKQogCWt2bV9tdW5tYXAobWVtLCB0b3RhbF9zaXplKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogRmlsbCBAbmlkcyB3aXRoIHRoZSBmaXJzdCBAbnJfbmlkcyBub2RlcyBpbiB0aGUgYWxsb3dlZCBtYXNrLgomIzQzOyAqIFJldHVybiBmYWxzZSBpZiB0aGUgbWFzayBjb250YWlucyBmZXdlciB0aGFuIEBucl9uaWRzIG5vZGVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGdldF9udW1hX25vZGVfaWRzKGludCAqbmlkcywgaW50IG5yX25pZHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gZ2V0X251bWFfbWVtX25vZGVzKCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmlkOwomIzQzOwlpbnQgbnJfZm91bmQgPSAwOwomIzQzOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KG5pZCwgJmFtcDtub2RlbWFzaywgQklUU19QRVJfVFlQRShub2RlbWFzaykpIHsKJiM0MzsJCW5pZHNbbnJfZm91bmQmIzQzOyYjNDM7XSA9IG5pZDsKJiM0MzsJCWlmIChucl9mb3VuZCA9PSBucl9uaWRzKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpCiB7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBub2RlbWFza18wID0gMTsgLyogbmlkOiAwICovCi0JdW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7Ci0JdW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShub2RlbWFzayk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbm9kZW1hc2ssIGJpbmRfbm9kZW1hc2s7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUobm9kZW1hc2spICYjNDM7IDE7CiAJaW50IHBvbGljeTsKIAljaGFyICptZW07CiYjNDM7CWludCBuaWQ7CiAJaW50IHJldDsKIAotCWlmICghaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSgpKQomIzQzOwlpZiAoIWdldF9udW1hX25vZGVfaWRzKCZhbXA7bmlkLCAxKSkKIAkJcmV0dXJuOwogCiYjNDM7CWJpbmRfbm9kZW1hc2sgPSAxVUwgJmx0OyZsdDsgbmlkOwogCW1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTsKIAogCS8qIFRlc3QgTVBPTF9JTlRFUkxFQVZFIHBvbGljeSAqLwotCWt2bV9tYmluZChtZW0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfSU5URVJMRUFWRSwgJmFtcDtub2RlbWFza18wLCBtYXhub2RlLCAwKTsKJiM0MzsJa3ZtX21iaW5kKG1lbSwgcGFnZV9zaXplICogMiwgTVBPTF9JTlRFUkxFQVZFLCAmYW1wO2JpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApOwogCWt2bV9nZXRfbWVtcG9saWN5KCZhbXA7cG9saWN5LCAmYW1wO25vZGVtYXNrLCBtYXhub2RlLCBtZW0sIE1QT0xfRl9BRERSKTsKLQlURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9JTlRFUkxFQVZFICZhbXA7JmFtcDsgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCwKJiM0MzsJVEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSAmYW1wOyZhbXA7IG5vZGVtYXNrID09IGJpbmRfbm9kZW1hc2ssCiAJCSAgICAmIzM0O1dhbnRlZCBNUE9MX0lOVEVSTEVBVkUgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHgmIzM0OywKLQkJICAgIE1QT0xfSU5URVJMRUFWRSwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7CiYjNDM7CQkgICAgTVBPTF9JTlRFUkxFQVZFLCBiaW5kX25vZGVtYXNrLCBwb2xpY3ksIG5vZGVtYXNrKTsKIAogCS8qIFRlc3QgYmFzaWMgTVBPTF9CSU5EIHBvbGljeSAqLwotCWt2bV9tYmluZChtZW0gJiM0MzsgcGFnZV9zaXplICogMiwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGVtYXNrXzAsIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQobWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTsKIAlrdm1fZ2V0X21lbXBvbGljeSgmYW1wO3BvbGljeSwgJmFtcDtub2RlbWFzaywgbWF4bm9kZSwgbWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfRl9BRERSKTsKLQlURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9CSU5EICZhbXA7JmFtcDsgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCwKJiM0MzsJVEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfQklORCAmYW1wOyZhbXA7IG5vZGVtYXNrID09IGJpbmRfbm9kZW1hc2ssCiAJCSAgICAmIzM0O1dhbnRlZCBNUE9MX0JJTkQgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHgmIzM0OywKLQkJICAgIE1QT0xfQklORCwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7CiYjNDM7CQkgICAgTVBPTF9CSU5ELCBiaW5kX25vZGVtYXNrLCBwb2xpY3ksIG5vZGVtYXNrKTsKIAogCS8qIFRlc3QgTVBPTF9ERUZBVUxUIHBvbGljeSAqLwogCWt2bV9tYmluZChtZW0sIHRvdGFsX3NpemUsIE1QT0xfREVGQVVMVCwgTlVMTCwgMCwgMCk7CkBAIC0xMTIsNyAmIzQzOzEzMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIAkJICAgIE1QT0xfREVGQVVMVCwgcG9saWN5LCBub2RlbWFzayk7CiAKIAkvKiBUZXN0IHdpdGggaW52YWxpZCBwb2xpY3kgKi8KLQlyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCAmYW1wO25vZGVtYXNrXzAsIG1heG5vZGUsIDApOwomIzQzOwlyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCAmYW1wO2JpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApOwogCVRFU1RfQVNTRVJUKHJldCA9PSAtMSAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCwKIAkJICAgICYjMzQ7bWJpbmQgd2l0aCBpbnZhbGlkIHBvbGljeSBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTCYjMzQ7KTsKIApAQCAtMTIxLDE3ICYjNDM7MTQxLDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIAogc3RhdGljIHZvaWQgdGVzdF9udW1hX2FsbG9jYXRpb24oaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIHsKLQl1bnNpZ25lZCBsb25nIG5vZGUwX21hc2sgPSAxOyAgLyogTm9kZSAwICovCi0JdW5zaWduZWQgbG9uZyBub2RlMV9tYXNrID0gMjsgIC8qIE5vZGUgMSAqLwotCXVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IDg7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYmluZF9ub2RlbWFza3NbMl07CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUoYmluZF9ub2RlbWFza3NbMF0pICYjNDM7IDE7CiAJdm9pZCAqcGFnZXNbNF07CiYjNDM7CWludCBuaWRzWzJdOwogCWludCBzdGF0dXNbNF07CiAJY2hhciAqbWVtOwogCWludCBpOwogCi0JaWYgKCFpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKCkpCiYjNDM7CWlmICghZ2V0X251bWFfbm9kZV9pZHMobmlkcywgQVJSQVlfU0laRShuaWRzKSkpCiAJCXJldHVybjsKIAomIzQzOwliaW5kX25vZGVtYXNrc1swXSA9IDFVTCAmbHQ7Jmx0OyBuaWRzWzBdOwomIzQzOwliaW5kX25vZGVtYXNrc1sxXSA9IDFVTCAmbHQ7Jmx0OyBuaWRzWzFdOwogCW1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyA0OyBpJiM0MzsmIzQzOykKQEAgLTEzOSwzNCAmIzQzOzE2MSw0MiBAQCBzdGF0aWMgdm9pZCB0ZXN0X251bWFfYWxsb2NhdGlvbihpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKQogCiAJLyogU2V0IE5VTUEgcG9saWN5IGFmdGVyIGFsbG9jYXRpb24gKi8KIAltZW1zZXQobWVtLCAweGFhLCBwYWdlX3NpemUpOwotCWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsICZhbXA7bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7CiYjNDM7CWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsICZhbXA7YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApOwogCWt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgcGFnZV9zaXplKTsKIAogCS8qIFNldCBOVU1BIHBvbGljeSBiZWZvcmUgYWxsb2NhdGlvbiAqLwotCWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUxX21hc2ssIG1heG5vZGUsIDApOwotCWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUwX21hc2ssIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7CiYjNDM7CWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO2JpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTsKIAltZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTsKIAogCS8qIFZhbGlkYXRlIGlmIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gc3BlY2lmaWVkIE5VTUEgbm9kZXMgKi8KIAlrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gMSwgJiMzNDtFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbMF0pOwotCVRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAxLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1sxXSk7Ci0JVEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDAsICYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgc3RhdHVzWzJdKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gMCwgJiMzNDtFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbM10pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1sxXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbMF0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1sxXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbMV0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1swXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbMl0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1swXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbM10pOwogCiAJLyogUHVuY2ggaG9sZSBmb3IgYWxsIHBhZ2VzICovCiAJa3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCB0b3RhbF9zaXplKTsKIAogCS8qIENoYW5nZSBOVU1BIHBvbGljeSBub2RlcyBhbmQgcmVhbGxvY2F0ZSAqLwotCWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUwX21hc2ssIG1heG5vZGUsIDApOwotCWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUxX21hc2ssIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7CiYjNDM7CWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO2JpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTsKIAltZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTsKIAogCWt2bV9tb3ZlX3BhZ2VzKDAsIDQsIHBhZ2VzLCBOVUxMLCBzdGF0dXMsIDApOwotCVRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSAwLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1swXSk7Ci0JVEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IDAsICYjMzQ7RXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgc3RhdHVzWzFdKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gMSwgJiMzNDtFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbMl0pOwotCVRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSAxLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1szXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzBdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMF0sIHN0YXR1c1swXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSBuaWRzWzBdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMF0sIHN0YXR1c1sxXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSBuaWRzWzFdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMV0sIHN0YXR1c1syXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzFdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMV0sIHN0YXR1c1szXSk7CiAKIAlrdm1fbXVubWFwKG1lbSwgdG90YWxfc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oCmluZGV4IDI5NTcyYTZkNzg5Y2QuLmI4OTU1OWI2ZWEzYzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oCkBAIC00LDggJiM0Mzs0LDcgQEAKICNpZm5kZWYgU0VMRlRFU1RfS1ZNX05VTUFJRl9ICiAjZGVmaW5lIFNFTEZURVNUX0tWTV9OVU1BSUZfSAogCi0jaW5jbHVkZSAmbHQ7ZGlyZW50LmgmZ3Q7Ci0KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbXBvbGljeS5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2t2bV9zeXNjYWxscy5oJiMzNDsKQEAgLTMwLDU0ICYjNDM7MjksMTYgQEAgS1ZNX1NZU0NBTExfREVGSU5FKG1iaW5kLCA2LCB2b2lkICosIGFkZHIsIHVuc2lnbmVkIGxvbmcsIHNpemUsIGludCwgbW9kZSwKIAkJICAgY29uc3QgdW5zaWduZWQgbG9uZyAqLCBub2RlbWFzaywgdW5zaWduZWQgbG9uZywgbWF4bm9kZSwKIAkJICAgdW5zaWduZWQgaW50LCBmbGFncyk7CiAKLXN0YXRpYyBpbmxpbmUgaW50IGdldF9tYXhfbnVtYV9ub2RlKHZvaWQpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9udW1hX21lbV9ub2Rlcyh2b2lkKQogewotCXN0cnVjdCBkaXJlbnQgKmRlOwotCWludCBtYXhfbm9kZSA9IDA7Ci0JRElSICpkOwomIzQzOwl1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gMDsKIAotCS8qCi0JICogQXNzdW1lIHRoZXJlJiMzOTtzIGEgc2luZ2xlIG5vZGUgaWYgdGhlIGtlcm5lbCBkb2VzbiYjMzk7dCBzdXBwb3J0IE5VTUEsCi0JICogb3IgaWYgbm8gbm9kZXMgYXJlIGZvdW5kLgotCSAqLwotCWQgPSBvcGVuZGlyKCYjMzQ7L3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlJiMzNDspOwotCWlmICghZCkKJiM0MzsJLyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqLwomIzQzOwlpZiAoZ2V0X21lbXBvbGljeShOVUxMLCAmYW1wO25vZGVtYXNrLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgTlVMTCwKJiM0MzsJCQkgIE1QT0xfRl9NRU1TX0FMTE9XRUQpKQogCQlyZXR1cm4gMDsKIAotCXdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7Ci0JCWludCBub2RlX2lkOwotCQljaGFyICplbmRwdHI7Ci0KLQkJaWYgKHN0cm5jbXAoZGUtJmd0O2RfbmFtZSwgJiMzNDtub2RlJiMzNDssIDQpICE9IDApCi0JCQljb250aW51ZTsKLQotCQlub2RlX2lkID0gc3RydG9sKGRlLSZndDtkX25hbWUgJiM0MzsgNCwgJmFtcDtlbmRwdHIsIDEwKTsKLQkJaWYgKCplbmRwdHIgIT0gJiMzOTtcMCYjMzk7KQotCQkJY29udGludWU7Ci0KLQkJaWYgKG5vZGVfaWQgJmd0OyBtYXhfbm9kZSkKLQkJCW1heF9ub2RlID0gbm9kZV9pZDsKLQl9Ci0JY2xvc2VkaXIoZCk7Ci0KLQlyZXR1cm4gbWF4X25vZGU7Ci19Ci0KLXN0YXRpYyBib29sIGlzX251bWFfYXZhaWxhYmxlKHZvaWQpCi17Ci0JLyoKLQkgKiBQcm9iZSBmb3IgTlVNQSBieSBkb2luZyBhIGR1bW15IGdldF9tZW1wb2xpY3koKS4gIElmIHRoZSBzeXNjYWxsCi0JICogZmFpbHMgd2l0aCBFTk9TWVMsIHRoZW4gdGhlIGtlcm5lbCB3YXMgYnVpbHQgd2l0aG91dCBOVU1BIHN1cHBvcnQuCi0JICogaWYgdGhlIHN5c2NhbGwgZmFpbHMgd2l0aCBFUEVSTSwgdGhlbiB0aGUgcHJvY2Vzcy91c2VyIGxhY2tzIHRoZQotCSAqIG5lY2Vzc2FyeSBjYXBhYmlsaXRpZXMgKENBUF9TWVNfTklDRSkuCi0JICovCi0JcmV0dXJuICFnZXRfbWVtcG9saWN5KE5VTEwsIE5VTEwsIDAsIE5VTEwsIDApIHx8Ci0JCShlcnJubyAhPSBFTk9TWVMgJmFtcDsmYW1wOyBlcnJubyAhPSBFUEVSTSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKHZvaWQpCi17Ci0JcmV0dXJuIGlzX251bWFfYXZhaWxhYmxlKCkgJmFtcDsmYW1wOyBnZXRfbWF4X251bWFfbm9kZSgpICZndDs9IDE7CiYjNDM7CXJldHVybiBub2RlbWFzazsKIH0KIAogI2VuZGlmIC8qIFNFTEZURVNUX0tWTV9OVU1BSUZfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jCmluZGV4IDQ2OWUzYWIxNjQ2MDguLmI1ZjRlZDY3MTIxODkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMKQEAgLTIzMiw4ICYjNDM7MjMyLDggQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsCiAJCSAgIHU2NCAqcGlwaXNfcmN2ZCkKIHsKIAlsb25nIHBhZ2VzX25vdF9tb3ZlZDsKLQl1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gMDsKLQl1bnNpZ25lZCBsb25nIG5vZGVtYXNrc1tzaXplb2Yobm9kZW1hc2spICogOF07CiYjNDM7CXVuc2lnbmVkIGxvbmcgbm9kZW1hc2s7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW0JJVFNfUEVSX1RZUEUobm9kZW1hc2spXTsKIAlpbnQgbm9kZXMgPSAwOwogCXRpbWVfdCBzdGFydF90aW1lLCBsYXN0X3VwZGF0ZSwgbm93OwogCXRpbWVfdCBpbnRlcnZhbF9zZWNzID0gMTsKQEAgLTI0NywxOSAmIzQzOzI0NywxNyBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcywKIAlmcHJpbnRmKHN0ZGVyciwgJiMzNDtDYWxsaW5nIG1pZ3JhdGVfcGFnZXMgZXZlcnkgJWQgbWljcm9zZWNvbmRzXG4mIzM0OywKIAkJZGVsYXlfdXNlY3MpOwogCi0JLyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqLwotCWt2bV9nZXRfbWVtcG9saWN5KE5VTEwsICZhbXA7bm9kZW1hc2ssIHNpemVvZihub2RlbWFzaykgKiA4LAotCQkJICAwLCBNUE9MX0ZfTUVNU19BTExPV0VEKTsKJiM0MzsJbm9kZW1hc2sgPSBnZXRfbnVtYV9tZW1fbm9kZXMoKTsKIAogCWZwcmludGYoc3RkZXJyLCAmIzM0O051bWEgbm9kZXMgZm91bmQgYW1vbmdzdCBmaXJzdCAlbHUgcG9zc2libGUgbm9kZXMgJiMzNDsKIAkJJiMzNDsoZWFjaCAxLWJpdCBpbmRpY2F0ZXMgbm9kZSBpcyBwcmVzZW50KTogJSNseFxuJiMzNDssCi0JCXNpemVvZihub2RlbWFzaykgKiA4LCBub2RlbWFzayk7CiYjNDM7CQlCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgbm9kZW1hc2spOwogCiAJLyogSW5pdCBhcnJheSBvZiBtYXNrcyBjb250YWluaW5nIGEgc2luZ2xlLWJpdCBpbiBlYWNoLCBvbmUgZm9yIGVhY2gKIAkgKiBhdmFpbGFibGUgbm9kZS4gbWlncmF0ZV9wYWdlcyBjYWxsZWQgYmVsb3cgcmVxdWlyZXMgc3BlY2lmeWluZyBub2RlcwogCSAqIGFzIGJpdCBtYXNrcy4KIAkgKi8KLQlmb3IgKGkgPSAwLCBiaXQgPSAxOyBpICZsdDsgc2l6ZW9mKG5vZGVtYXNrKSAqIDg7IGkmIzQzOyYjNDM7LCBiaXQgJmx0OyZsdDs9IDEpIHsKJiM0MzsJZm9yIChpID0gMCwgYml0ID0gMTsgaSAmbHQ7IEJJVFNfUEVSX1RZUEUobm9kZW1hc2spOyBpJiM0MzsmIzQzOywgYml0ICZsdDsmbHQ7PSAxKSB7CiAJCWlmIChub2RlbWFzayAmYW1wOyBiaXQpIHsKIAkJCW5vZGVtYXNrc1tub2Rlc10gPSBub2RlbWFzayAmYW1wOyBiaXQ7CiAJCQlub2RlcyYjNDM7JiM0Mzs7CkBAIC0yOTEsNyAmIzQzOzI4OSw3IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLAogCQkgKiBLVk1fQ1JFQVRFX1ZDUFUgaW9jdGwuIElmIHRoYXQgYXNzdW1wdGlvbiBldmVyIGNoYW5nZXMgdGhpcwogCQkgKiB0ZXN0IG1heSBicmVhayBvciBnaXZlIGEgZmFsc2UgcG9zaXRpdmUgc2lnbmFsLgogCQkgKi8KLQkJcGFnZXNfbm90X21vdmVkID0gbWlncmF0ZV9wYWdlcygwLCBzaXplb2Yobm9kZW1hc2tzW2Zyb21dKSwKJiM0MzsJCXBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgQklUU19QRVJfVFlQRShub2RlbWFza3NbZnJvbV0pICYjNDM7IDEsCiAJCQkJCQkmYW1wO25vZGVtYXNrc1tmcm9tXSwKIAkJCQkJCSZhbXA7bm9kZW1hc2tzW3RvXSk7CiAJCWlmIChwYWdlc19ub3RfbW92ZWQgJmx0OyAwKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1NQoJCQkJCQkJb3V0cHV0OiA2NQoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXMgLSBLVk0gU2VsZnRlc3RzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZGlmZi4gVGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBhbGwgdHVja2VkIGF3YXkgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYDogYGd1ZXN0X21lbWZkX3Rlc3QuY2AsIGBudW1haWYuaGAsIGFuZCBgeGFwaWNfaXBpX3Rlc3QuY2AuIE5vdGhpbmcgaW4gdGhlIGNvcmUga2VybmVsIOKAkyBubyBkcml2ZXJzLCBtZW1vcnkgbWFuYWdlbWVudCwgb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtWTSBjb2RlLiBUaGlzIGlzIGFsbCB1c2Vyc3BhY2UgS1ZNIHNlbGZ0ZXN0IHRlcnJpdG9yeS4KCk5vdywgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBgV29ydGhGdXp6aW5nYCBndWlkZWxpbmVzLiBXZSYjMzk7cmUgbG9va2luZyBmb3IgbW9kaWZpY2F0aW9ucyB0aGF0ICpkb24mIzM5O3QqIHdhcnJhbnQgZnV6emluZy4gVGhlIGNyaXRlcmlhIHNwZWNpZmljYWxseSBleGNsdWRlIGNoYW5nZXMgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIGNvc21ldGljIGxvZ2dpbmcsIG5vbi1mdW5jdGlvbmFsIG51bWVyaWMgY29uc3RhbnRzLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYW5kIGNlcnRhaW4gZHJpdmVyIHJlbW92YWxzLiBJbXBvcnRhbnRseSwgY2hhbmdlcyB3aXRoaW4gYHRvb2xzL2AsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlc2Ugc2VsZi10ZXN0cywgZG9uJiMzOTt0IHRvdWNoIHRoZSBrZXJuZWwgYmluYXJ5IG9yIGNvcmUgbG9naWMuIFRoZXkgYXJlLCBmdW5kYW1lbnRhbGx5LCB1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcy4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbXBhY3QgYW55dGhpbmcgdGhhdCBTeXprYWxsZXIgc2hvdWxkIGJlIGZ1enppbmcuIEkmIzM5O2xsIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8pLCB3aXRoIG5vIGNoYW5nZXMgdG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKSwgd2l0aCBubyBjaGFuZ2VzIHRvIHRoZSBMaW51eCBrZXJuZWwgc291cmNlIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDFUMTg6NDM6MzkuNDMzNDAwNzg3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNzc5NDA2NDk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8pLCB3aXRoIG5vIGNoYW5nZXMgdG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxODo0MzozOS40MzM0MDk2NTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDE3ODE1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhYjM5NmQ1NjBiZTY3MDBhNTFjOGZlMjM3YTNkNzk0NTRjYzkyZTg4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDEgMTg6NDM6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcXG5pbmRleCAyMjMzZDg3MWEzOGY0Li5hZWU4MGRkYTYyMjk1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXFxuQEAgLTc2LDMzICs3Niw1MyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21tYXBfc3VwcG9ydGVkKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIFxcdGt2bV9tdW5tYXAobWVtLCB0b3RhbF9zaXplKTtcXG4gfVxcbiBcXG4rLypcXG4rICogRmlsbCBAbmlkcyB3aXRoIHRoZSBmaXJzdCBAbnJfbmlkcyBub2RlcyBpbiB0aGUgYWxsb3dlZCBtYXNrLlxcbisgKiBSZXR1cm4gZmFsc2UgaWYgdGhlIG1hc2sgY29udGFpbnMgZmV3ZXIgdGhhbiBAbnJfbmlkcyBub2Rlcy5cXG4rICovXFxuK3N0YXRpYyBib29sIGdldF9udW1hX25vZGVfaWRzKGludCAqbmlkcywgaW50IG5yX25pZHMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpO1xcbitcXHR1bnNpZ25lZCBsb25nIG5pZDtcXG4rXFx0aW50IG5yX2ZvdW5kID0gMDtcXG4rXFxuK1xcdGZvcl9lYWNoX3NldF9iaXQobmlkLCBcXHUwMDI2bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spKSB7XFxuK1xcdFxcdG5pZHNbbnJfZm91bmQrK10gPSBuaWQ7XFxuK1xcdFxcdGlmIChucl9mb3VuZCA9PSBucl9uaWRzKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIHtcXG4tXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBub2RlbWFza18wID0gMTsgLyogbmlkOiAwICovXFxuLVxcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBub2RlbWFzaywgYmluZF9ub2RlbWFzaztcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShub2RlbWFzaykgKyAxO1xcbiBcXHRpbnQgcG9saWN5O1xcbiBcXHRjaGFyICptZW07XFxuK1xcdGludCBuaWQ7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAoIWlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0oKSlcXG4rXFx0aWYgKCFnZXRfbnVtYV9ub2RlX2lkcyhcXHUwMDI2bmlkLCAxKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0YmluZF9ub2RlbWFzayA9IDFVTCBcXHUwMDNjXFx1MDAzYyBuaWQ7XFxuIFxcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcXG4gXFxuIFxcdC8qIFRlc3QgTVBPTF9JTlRFUkxFQVZFIHBvbGljeSAqL1xcbi1cXHRrdm1fbWJpbmQobWVtLCBwYWdlX3NpemUgKiAyLCBNUE9MX0lOVEVSTEVBVkUsIFxcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcXG4rXFx0a3ZtX21iaW5kKG1lbSwgcGFnZV9zaXplICogMiwgTVBPTF9JTlRFUkxFQVZFLCBcXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XFxuIFxcdGt2bV9nZXRfbWVtcG9saWN5KFxcdTAwMjZwb2xpY3ksIFxcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtLCBNUE9MX0ZfQUREUik7XFxuLVxcdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0lOVEVSTEVBVkUgXFx1MDAyNlxcdTAwMjYgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCxcXG4rXFx0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSBcXHUwMDI2XFx1MDAyNiBub2RlbWFzayA9PSBiaW5kX25vZGVtYXNrLFxcbiBcXHRcXHQgICAgXFxcIldhbnRlZCBNUE9MX0lOVEVSTEVBVkUgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHhcXFwiLFxcbi1cXHRcXHQgICAgTVBPTF9JTlRFUkxFQVZFLCBub2RlbWFza18wLCBwb2xpY3ksIG5vZGVtYXNrKTtcXG4rXFx0XFx0ICAgIE1QT0xfSU5URVJMRUFWRSwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7XFxuIFxcbiBcXHQvKiBUZXN0IGJhc2ljIE1QT0xfQklORCBwb2xpY3kgKi9cXG4tXFx0a3ZtX21iaW5kKG1lbSArIHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGVtYXNrXzAsIG1heG5vZGUsIDApO1xcbitcXHRrdm1fbWJpbmQobWVtICsgcGFnZV9zaXplICogMiwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XFxuIFxcdGt2bV9nZXRfbWVtcG9saWN5KFxcdTAwMjZwb2xpY3ksIFxcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtICsgcGFnZV9zaXplICogMiwgTVBPTF9GX0FERFIpO1xcbi1cXHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9CSU5EIFxcdTAwMjZcXHUwMDI2IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsXFxuK1xcdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0JJTkQgXFx1MDAyNlxcdTAwMjYgbm9kZW1hc2sgPT0gYmluZF9ub2RlbWFzayxcXG4gXFx0XFx0ICAgIFxcXCJXYW50ZWQgTVBPTF9CSU5EICgldSkgYW5kIG5vZGVtYXNrIDB4JWx4LCBnb3QgJXUgYW5kIDB4JWx4XFxcIixcXG4tXFx0XFx0ICAgIE1QT0xfQklORCwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7XFxuK1xcdFxcdCAgICBNUE9MX0JJTkQsIGJpbmRfbm9kZW1hc2ssIHBvbGljeSwgbm9kZW1hc2spO1xcbiBcXG4gXFx0LyogVGVzdCBNUE9MX0RFRkFVTFQgcG9saWN5ICovXFxuIFxcdGt2bV9tYmluZChtZW0sIHRvdGFsX3NpemUsIE1QT0xfREVGQVVMVCwgTlVMTCwgMCwgMCk7XFxuQEAgLTExMiw3ICsxMzIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIFxcdFxcdCAgICBNUE9MX0RFRkFVTFQsIHBvbGljeSwgbm9kZW1hc2spO1xcbiBcXG4gXFx0LyogVGVzdCB3aXRoIGludmFsaWQgcG9saWN5ICovXFxuLVxcdHJldCA9IG1iaW5kKG1lbSwgcGFnZV9zaXplLCA5OTksIFxcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcXG4rXFx0cmV0ID0gbWJpbmQobWVtLCBwYWdlX3NpemUsIDk5OSwgXFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xcbiBcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbiBcXHRcXHQgICAgXFxcIm1iaW5kIHdpdGggaW52YWxpZCBwb2xpY3kgc2hvdWxkIGZhaWwgd2l0aCBFSU5WQUxcXFwiKTtcXG4gXFxuQEAgLTEyMSwxNyArMTQxLDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcXG4gXFxuIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBub2RlMF9tYXNrID0gMTsgIC8qIE5vZGUgMCAqL1xcbi1cXHR1bnNpZ25lZCBsb25nIG5vZGUxX21hc2sgPSAyOyAgLyogTm9kZSAxICovXFxuLVxcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IDg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYmluZF9ub2RlbWFza3NbMl07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUoYmluZF9ub2RlbWFza3NbMF0pICsgMTtcXG4gXFx0dm9pZCAqcGFnZXNbNF07XFxuK1xcdGludCBuaWRzWzJdO1xcbiBcXHRpbnQgc3RhdHVzWzRdO1xcbiBcXHRjaGFyICptZW07XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0aWYgKCFpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKCkpXFxuK1xcdGlmICghZ2V0X251bWFfbm9kZV9pZHMobmlkcywgQVJSQVlfU0laRShuaWRzKSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGJpbmRfbm9kZW1hc2tzWzBdID0gMVVMIFxcdTAwM2NcXHUwMDNjIG5pZHNbMF07XFxuK1xcdGJpbmRfbm9kZW1hc2tzWzFdID0gMVVMIFxcdTAwM2NcXHUwMDNjIG5pZHNbMV07XFxuIFxcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA0OyBpKyspXFxuQEAgLTEzOSwzNCArMTYxLDQyIEBAIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIFxcbiBcXHQvKiBTZXQgTlVNQSBwb2xpY3kgYWZ0ZXIgYWxsb2NhdGlvbiAqL1xcbiBcXHRtZW1zZXQobWVtLCAweGFhLCBwYWdlX3NpemUpO1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCBcXHUwMDI2bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7XFxuK1xcdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsIFxcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XFxuIFxcdGt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgcGFnZV9zaXplKTtcXG4gXFxuIFxcdC8qIFNldCBOVU1BIHBvbGljeSBiZWZvcmUgYWxsb2NhdGlvbiAqL1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUxX21hc2ssIG1heG5vZGUsIDApO1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xcbitcXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNmJpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTtcXG4rXFx0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFxcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XFxuIFxcdG1lbXNldChtZW0sIDB4YWEsIHRvdGFsX3NpemUpO1xcbiBcXG4gXFx0LyogVmFsaWRhdGUgaWYgcGFnZXMgYXJlIGFsbG9jYXRlZCBvbiBzcGVjaWZpZWQgTlVNQSBub2RlcyAqL1xcbiBcXHRrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTtcXG4tXFx0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IDEsIFxcXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIHN0YXR1c1swXSk7XFxuLVxcdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAxLCBcXFwiRXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBzdGF0dXNbMV0pO1xcbi1cXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gMCwgXFxcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXFxcIiwgc3RhdHVzWzJdKTtcXG4tXFx0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IDAsIFxcXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIHN0YXR1c1szXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzFdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMV0sIHN0YXR1c1swXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSBuaWRzWzFdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMV0sIHN0YXR1c1sxXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSBuaWRzWzBdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMF0sIHN0YXR1c1syXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzBdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMF0sIHN0YXR1c1szXSk7XFxuIFxcbiBcXHQvKiBQdW5jaCBob2xlIGZvciBhbGwgcGFnZXMgKi9cXG4gXFx0a3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCB0b3RhbF9zaXplKTtcXG4gXFxuIFxcdC8qIENoYW5nZSBOVU1BIHBvbGljeSBub2RlcyBhbmQgcmVhbGxvY2F0ZSAqL1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUxX21hc2ssIG1heG5vZGUsIDApO1xcbitcXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNmJpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTtcXG4rXFx0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFxcdTAwMjZiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7XFxuIFxcdG1lbXNldChtZW0sIDB4YWEsIHRvdGFsX3NpemUpO1xcbiBcXG4gXFx0a3ZtX21vdmVfcGFnZXMoMCwgNCwgcGFnZXMsIE5VTEwsIHN0YXR1cywgMCk7XFxuLVxcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSAwLCBcXFwiRXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBzdGF0dXNbMF0pO1xcbi1cXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gMCwgXFxcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXFxcIiwgc3RhdHVzWzFdKTtcXG4tXFx0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDEsIFxcXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIHN0YXR1c1syXSk7XFxuLVxcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSAxLCBcXFwiRXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBzdGF0dXNbM10pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1swXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzBdLCBzdGF0dXNbMF0pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1swXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzBdLCBzdGF0dXNbMV0pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1sxXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzFdLCBzdGF0dXNbMl0pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1sxXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzFdLCBzdGF0dXNbM10pO1xcbiBcXG4gXFx0a3ZtX211bm1hcChtZW0sIHRvdGFsX3NpemUpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcXG5pbmRleCAyOTU3MmE2ZDc4OWNkLi5iODk1NTliNmVhM2MxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcXG5AQCAtNCw4ICs0LDcgQEBcXG4gI2lmbmRlZiBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcXG4gI2RlZmluZSBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcXG4gXFxuLSNpbmNsdWRlIFxcdTAwM2NkaXJlbnQuaFxcdTAwM2VcXG4tXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJrdm1fc3lzY2FsbHMuaFxcXCJcXG5AQCAtMzAsNTQgKzI5LDE2IEBAIEtWTV9TWVNDQUxMX0RFRklORShtYmluZCwgNiwgdm9pZCAqLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBzaXplLCBpbnQsIG1vZGUsXFxuIFxcdFxcdCAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiwgbm9kZW1hc2ssIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsXFxuIFxcdFxcdCAgIHVuc2lnbmVkIGludCwgZmxhZ3MpO1xcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZ2V0X21heF9udW1hX25vZGUodm9pZClcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9udW1hX21lbV9ub2Rlcyh2b2lkKVxcbiB7XFxuLVxcdHN0cnVjdCBkaXJlbnQgKmRlO1xcbi1cXHRpbnQgbWF4X25vZGUgPSAwO1xcbi1cXHRESVIgKmQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogQXNzdW1lIHRoZXJlJ3MgYSBzaW5nbGUgbm9kZSBpZiB0aGUga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBOVU1BLFxcbi1cXHQgKiBvciBpZiBubyBub2RlcyBhcmUgZm91bmQuXFxuLVxcdCAqL1xcbi1cXHRkID0gb3BlbmRpcihcXFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlXFxcIik7XFxuLVxcdGlmICghZClcXG4rXFx0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xcbitcXHRpZiAoZ2V0X21lbXBvbGljeShOVUxMLCBcXHUwMDI2bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBOVUxMLFxcbitcXHRcXHRcXHQgIE1QT0xfRl9NRU1TX0FMTE9XRUQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7XFxuLVxcdFxcdGludCBub2RlX2lkO1xcbi1cXHRcXHRjaGFyICplbmRwdHI7XFxuLVxcbi1cXHRcXHRpZiAoc3RybmNtcChkZS1cXHUwMDNlZF9uYW1lLCBcXFwibm9kZVxcXCIsIDQpICE9IDApXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0bm9kZV9pZCA9IHN0cnRvbChkZS1cXHUwMDNlZF9uYW1lICsgNCwgXFx1MDAyNmVuZHB0ciwgMTApO1xcbi1cXHRcXHRpZiAoKmVuZHB0ciAhPSAnXFxcXDAnKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGlmIChub2RlX2lkIFxcdTAwM2UgbWF4X25vZGUpXFxuLVxcdFxcdFxcdG1heF9ub2RlID0gbm9kZV9pZDtcXG4tXFx0fVxcbi1cXHRjbG9zZWRpcihkKTtcXG4tXFxuLVxcdHJldHVybiBtYXhfbm9kZTtcXG4tfVxcbi1cXG4tc3RhdGljIGJvb2wgaXNfbnVtYV9hdmFpbGFibGUodm9pZClcXG4te1xcbi1cXHQvKlxcbi1cXHQgKiBQcm9iZSBmb3IgTlVNQSBieSBkb2luZyBhIGR1bW15IGdldF9tZW1wb2xpY3koKS4gIElmIHRoZSBzeXNjYWxsXFxuLVxcdCAqIGZhaWxzIHdpdGggRU5PU1lTLCB0aGVuIHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGhvdXQgTlVNQSBzdXBwb3J0Llxcbi1cXHQgKiBpZiB0aGUgc3lzY2FsbCBmYWlscyB3aXRoIEVQRVJNLCB0aGVuIHRoZSBwcm9jZXNzL3VzZXIgbGFja3MgdGhlXFxuLVxcdCAqIG5lY2Vzc2FyeSBjYXBhYmlsaXRpZXMgKENBUF9TWVNfTklDRSkuXFxuLVxcdCAqL1xcbi1cXHRyZXR1cm4gIWdldF9tZW1wb2xpY3koTlVMTCwgTlVMTCwgMCwgTlVMTCwgMCkgfHxcXG4tXFx0XFx0KGVycm5vICE9IEVOT1NZUyBcXHUwMDI2XFx1MDAyNiBlcnJubyAhPSBFUEVSTSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKHZvaWQpXFxuLXtcXG4tXFx0cmV0dXJuIGlzX251bWFfYXZhaWxhYmxlKCkgXFx1MDAyNlxcdTAwMjYgZ2V0X21heF9udW1hX25vZGUoKSBcXHUwMDNlPSAxO1xcbitcXHRyZXR1cm4gbm9kZW1hc2s7XFxuIH1cXG4gXFxuICNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fTlVNQUlGX0ggKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXFxuaW5kZXggNDY5ZTNhYjE2NDYwOC4uYjVmNGVkNjcxMjE4OSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcXG5AQCAtMjMyLDggKzIzMiw4IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxcbiBcXHRcXHQgICB1NjQgKnBpcGlzX3JjdmQpXFxuIHtcXG4gXFx0bG9uZyBwYWdlc19ub3RfbW92ZWQ7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xcbi1cXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrc1tzaXplb2Yobm9kZW1hc2spICogOF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2s7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW0JJVFNfUEVSX1RZUEUobm9kZW1hc2spXTtcXG4gXFx0aW50IG5vZGVzID0gMDtcXG4gXFx0dGltZV90IHN0YXJ0X3RpbWUsIGxhc3RfdXBkYXRlLCBub3c7XFxuIFxcdHRpbWVfdCBpbnRlcnZhbF9zZWNzID0gMTtcXG5AQCAtMjQ3LDE5ICsyNDcsMTcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXFxuIFxcdGZwcmludGYoc3RkZXJyLCBcXFwiQ2FsbGluZyBtaWdyYXRlX3BhZ2VzIGV2ZXJ5ICVkIG1pY3Jvc2Vjb25kc1xcXFxuXFxcIixcXG4gXFx0XFx0ZGVsYXlfdXNlY3MpO1xcbiBcXG4tXFx0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xcbi1cXHRrdm1fZ2V0X21lbXBvbGljeShOVUxMLCBcXHUwMDI2bm9kZW1hc2ssIHNpemVvZihub2RlbWFzaykgKiA4LFxcbi1cXHRcXHRcXHQgIDAsIE1QT0xfRl9NRU1TX0FMTE9XRUQpO1xcbitcXHRub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpO1xcbiBcXG4gXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJOdW1hIG5vZGVzIGZvdW5kIGFtb25nc3QgZmlyc3QgJWx1IHBvc3NpYmxlIG5vZGVzIFxcXCJcXG4gXFx0XFx0XFxcIihlYWNoIDEtYml0IGluZGljYXRlcyBub2RlIGlzIHByZXNlbnQpOiAlI2x4XFxcXG5cXFwiLFxcbi1cXHRcXHRzaXplb2Yobm9kZW1hc2spICogOCwgbm9kZW1hc2spO1xcbitcXHRcXHRCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgbm9kZW1hc2spO1xcbiBcXG4gXFx0LyogSW5pdCBhcnJheSBvZiBtYXNrcyBjb250YWluaW5nIGEgc2luZ2xlLWJpdCBpbiBlYWNoLCBvbmUgZm9yIGVhY2hcXG4gXFx0ICogYXZhaWxhYmxlIG5vZGUuIG1pZ3JhdGVfcGFnZXMgY2FsbGVkIGJlbG93IHJlcXVpcmVzIHNwZWNpZnlpbmcgbm9kZXNcXG4gXFx0ICogYXMgYml0IG1hc2tzLlxcbiBcXHQgKi9cXG4tXFx0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcXHUwMDNjIHNpemVvZihub2RlbWFzaykgKiA4OyBpKyssIGJpdCBcXHUwMDNjXFx1MDAzYz0gMSkge1xcbitcXHRmb3IgKGkgPSAwLCBiaXQgPSAxOyBpIFxcdTAwM2MgQklUU19QRVJfVFlQRShub2RlbWFzayk7IGkrKywgYml0IFxcdTAwM2NcXHUwMDNjPSAxKSB7XFxuIFxcdFxcdGlmIChub2RlbWFzayBcXHUwMDI2IGJpdCkge1xcbiBcXHRcXHRcXHRub2RlbWFza3Nbbm9kZXNdID0gbm9kZW1hc2sgXFx1MDAyNiBiaXQ7XFxuIFxcdFxcdFxcdG5vZGVzKys7XFxuQEAgLTI5MSw3ICsyODksNyBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcyxcXG4gXFx0XFx0ICogS1ZNX0NSRUFURV9WQ1BVIGlvY3RsLiBJZiB0aGF0IGFzc3VtcHRpb24gZXZlciBjaGFuZ2VzIHRoaXNcXG4gXFx0XFx0ICogdGVzdCBtYXkgYnJlYWsgb3IgZ2l2ZSBhIGZhbHNlIHBvc2l0aXZlIHNpZ25hbC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgc2l6ZW9mKG5vZGVtYXNrc1tmcm9tXSksXFxuK1xcdFxcdHBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgQklUU19QRVJfVFlQRShub2RlbWFza3NbZnJvbV0pICsgMSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVtYXNrc1tmcm9tXSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVtYXNrc1t0b10pO1xcbiBcXHRcXHRpZiAocGFnZXNfbm90X21vdmVkIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTg6NDM6NDAuOTc2MDY0NTkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDE2MjUxMzc5NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKSwgd2l0aCBubyBjaGFuZ2VzIHRvIHRoZSBMaW51eCBrZXJuZWwgc291cmNlIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWIzOTZkNTYwYmU2NzAwYTUxYzhmZTIzN2EzZDc5NDU0Y2M5MmU4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMTg6NDM6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuY1xuaW5kZXggMjIzM2Q4NzFhMzhmNC4uYWVlODBkZGE2MjI5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcbkBAIC03NiwzMyArNzYsNTMgQEAgc3RhdGljIHZvaWQgdGVzdF9tbWFwX3N1cHBvcnRlZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIFx0a3ZtX211bm1hcChtZW0sIHRvdGFsX3NpemUpO1xuIH1cbiBcbisvKlxuKyAqIEZpbGwgQG5pZHMgd2l0aCB0aGUgZmlyc3QgQG5yX25pZHMgbm9kZXMgaW4gdGhlIGFsbG93ZWQgbWFzay5cbisgKiBSZXR1cm4gZmFsc2UgaWYgdGhlIG1hc2sgY29udGFpbnMgZmV3ZXIgdGhhbiBAbnJfbmlkcyBub2Rlcy5cbisgKi9cbitzdGF0aWMgYm9vbCBnZXRfbnVtYV9ub2RlX2lkcyhpbnQgKm5pZHMsIGludCBucl9uaWRzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSBnZXRfbnVtYV9tZW1fbm9kZXMoKTtcbitcdHVuc2lnbmVkIGxvbmcgbmlkO1xuK1x0aW50IG5yX2ZvdW5kID0gMDtcbitcbitcdGZvcl9lYWNoX3NldF9iaXQobmlkLCBcdTAwMjZub2RlbWFzaywgQklUU19QRVJfVFlQRShub2RlbWFzaykpIHtcbitcdFx0bmlkc1tucl9mb3VuZCsrXSA9IG5pZDtcbitcdFx0aWYgKG5yX2ZvdW5kID09IG5yX25pZHMpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiB7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIG5vZGVtYXNrXzAgPSAxOyAvKiBuaWQ6IDAgKi9cbi1cdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShub2RlbWFzayk7XG4rXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrLCBiaW5kX25vZGVtYXNrO1xuK1x0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShub2RlbWFzaykgKyAxO1xuIFx0aW50IHBvbGljeTtcbiBcdGNoYXIgKm1lbTtcbitcdGludCBuaWQ7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKCFpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKCkpXG4rXHRpZiAoIWdldF9udW1hX25vZGVfaWRzKFx1MDAyNm5pZCwgMSkpXG4gXHRcdHJldHVybjtcbiBcbitcdGJpbmRfbm9kZW1hc2sgPSAxVUwgXHUwMDNjXHUwMDNjIG5pZDtcbiBcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcbiBcbiBcdC8qIFRlc3QgTVBPTF9JTlRFUkxFQVZFIHBvbGljeSAqL1xuLVx0a3ZtX21iaW5kKG1lbSwgcGFnZV9zaXplICogMiwgTVBPTF9JTlRFUkxFQVZFLCBcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcbitcdGt2bV9tYmluZChtZW0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfSU5URVJMRUFWRSwgXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XG4gXHRrdm1fZ2V0X21lbXBvbGljeShcdTAwMjZwb2xpY3ksIFx1MDAyNm5vZGVtYXNrLCBtYXhub2RlLCBtZW0sIE1QT0xfRl9BRERSKTtcbi1cdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0lOVEVSTEVBVkUgXHUwMDI2XHUwMDI2IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsXG4rXHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9JTlRFUkxFQVZFIFx1MDAyNlx1MDAyNiBub2RlbWFzayA9PSBiaW5kX25vZGVtYXNrLFxuIFx0XHQgICAgXCJXYW50ZWQgTVBPTF9JTlRFUkxFQVZFICgldSkgYW5kIG5vZGVtYXNrIDB4JWx4LCBnb3QgJXUgYW5kIDB4JWx4XCIsXG4tXHRcdCAgICBNUE9MX0lOVEVSTEVBVkUsIG5vZGVtYXNrXzAsIHBvbGljeSwgbm9kZW1hc2spO1xuK1x0XHQgICAgTVBPTF9JTlRFUkxFQVZFLCBiaW5kX25vZGVtYXNrLCBwb2xpY3ksIG5vZGVtYXNrKTtcbiBcbiBcdC8qIFRlc3QgYmFzaWMgTVBPTF9CSU5EIHBvbGljeSAqL1xuLVx0a3ZtX21iaW5kKG1lbSArIHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZW1hc2tfMCwgbWF4bm9kZSwgMCk7XG4rXHRrdm1fbWJpbmQobWVtICsgcGFnZV9zaXplICogMiwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTtcbiBcdGt2bV9nZXRfbWVtcG9saWN5KFx1MDAyNnBvbGljeSwgXHUwMDI2bm9kZW1hc2ssIG1heG5vZGUsIG1lbSArIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfRl9BRERSKTtcbi1cdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0JJTkQgXHUwMDI2XHUwMDI2IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsXG4rXHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9CSU5EIFx1MDAyNlx1MDAyNiBub2RlbWFzayA9PSBiaW5kX25vZGVtYXNrLFxuIFx0XHQgICAgXCJXYW50ZWQgTVBPTF9CSU5EICgldSkgYW5kIG5vZGVtYXNrIDB4JWx4LCBnb3QgJXUgYW5kIDB4JWx4XCIsXG4tXHRcdCAgICBNUE9MX0JJTkQsIG5vZGVtYXNrXzAsIHBvbGljeSwgbm9kZW1hc2spO1xuK1x0XHQgICAgTVBPTF9CSU5ELCBiaW5kX25vZGVtYXNrLCBwb2xpY3ksIG5vZGVtYXNrKTtcbiBcbiBcdC8qIFRlc3QgTVBPTF9ERUZBVUxUIHBvbGljeSAqL1xuIFx0a3ZtX21iaW5kKG1lbSwgdG90YWxfc2l6ZSwgTVBPTF9ERUZBVUxULCBOVUxMLCAwLCAwKTtcbkBAIC0xMTIsNyArMTMyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9tYmluZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIFx0XHQgICAgTVBPTF9ERUZBVUxULCBwb2xpY3ksIG5vZGVtYXNrKTtcbiBcbiBcdC8qIFRlc3Qgd2l0aCBpbnZhbGlkIHBvbGljeSAqL1xuLVx0cmV0ID0gbWJpbmQobWVtLCBwYWdlX3NpemUsIDk5OSwgXHUwMDI2bm9kZW1hc2tfMCwgbWF4bm9kZSwgMCk7XG4rXHRyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCBcdTAwMjZiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTtcbiBcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuIFx0XHQgICAgXCJtYmluZCB3aXRoIGludmFsaWQgcG9saWN5IHNob3VsZCBmYWlsIHdpdGggRUlOVkFMXCIpO1xuIFxuQEAgLTEyMSwxNyArMTQxLDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X251bWFfYWxsb2NhdGlvbihpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbm9kZTBfbWFzayA9IDE7ICAvKiBOb2RlIDAgKi9cbi1cdHVuc2lnbmVkIGxvbmcgbm9kZTFfbWFzayA9IDI7ICAvKiBOb2RlIDEgKi9cbi1cdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IDg7XG4rXHR1bnNpZ25lZCBsb25nIGJpbmRfbm9kZW1hc2tzWzJdO1xuK1x0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShiaW5kX25vZGVtYXNrc1swXSkgKyAxO1xuIFx0dm9pZCAqcGFnZXNbNF07XG4rXHRpbnQgbmlkc1syXTtcbiBcdGludCBzdGF0dXNbNF07XG4gXHRjaGFyICptZW07XG4gXHRpbnQgaTtcbiBcbi1cdGlmICghaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSgpKVxuK1x0aWYgKCFnZXRfbnVtYV9ub2RlX2lkcyhuaWRzLCBBUlJBWV9TSVpFKG5pZHMpKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0YmluZF9ub2RlbWFza3NbMF0gPSAxVUwgXHUwMDNjXHUwMDNjIG5pZHNbMF07XG4rXHRiaW5kX25vZGVtYXNrc1sxXSA9IDFVTCBcdTAwM2NcdTAwM2Mgbmlkc1sxXTtcbiBcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDQ7IGkrKylcbkBAIC0xMzksMzQgKzE2MSw0MiBAQCBzdGF0aWMgdm9pZCB0ZXN0X251bWFfYWxsb2NhdGlvbihpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIFxuIFx0LyogU2V0IE5VTUEgcG9saWN5IGFmdGVyIGFsbG9jYXRpb24gKi9cbiBcdG1lbXNldChtZW0sIDB4YWEsIHBhZ2Vfc2l6ZSk7XG4tXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMF9tYXNrLCBtYXhub2RlLCAwKTtcbitcdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTtcbiBcdGt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgcGFnZV9zaXplKTtcbiBcbiBcdC8qIFNldCBOVU1BIHBvbGljeSBiZWZvcmUgYWxsb2NhdGlvbiAqL1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGUxX21hc2ssIG1heG5vZGUsIDApO1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xuK1x0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTtcbitcdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XG4gXHRtZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTtcbiBcbiBcdC8qIFZhbGlkYXRlIGlmIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gc3BlY2lmaWVkIE5VTUEgbm9kZXMgKi9cbiBcdGt2bV9tb3ZlX3BhZ2VzKDAsIDQsIHBhZ2VzLCBOVUxMLCBzdGF0dXMsIDApO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IDEsIFwiRXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzBdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAxLCBcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1sxXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gMCwgXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbMl0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IDAsIFwiRXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzNdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzFdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1sxXSwgc3RhdHVzWzBdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSBuaWRzWzFdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1sxXSwgc3RhdHVzWzFdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSBuaWRzWzBdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1swXSwgc3RhdHVzWzJdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzBdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1swXSwgc3RhdHVzWzNdKTtcbiBcbiBcdC8qIFB1bmNoIGhvbGUgZm9yIGFsbCBwYWdlcyAqL1xuIFx0a3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCB0b3RhbF9zaXplKTtcbiBcbiBcdC8qIENoYW5nZSBOVU1BIHBvbGljeSBub2RlcyBhbmQgcmVhbGxvY2F0ZSAqL1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGUxX21hc2ssIG1heG5vZGUsIDApO1xuK1x0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTtcbitcdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7XG4gXHRtZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTtcbiBcbiBcdGt2bV9tb3ZlX3BhZ2VzKDAsIDQsIHBhZ2VzLCBOVUxMLCBzdGF0dXMsIDApO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IDAsIFwiRXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzBdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAwLCBcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1sxXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gMSwgXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbMl0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IDEsIFwiRXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzNdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzBdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1swXSwgc3RhdHVzWzBdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSBuaWRzWzBdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1swXSwgc3RhdHVzWzFdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSBuaWRzWzFdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1sxXSwgc3RhdHVzWzJdKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzFdLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgbmlkc1sxXSwgc3RhdHVzWzNdKTtcbiBcbiBcdGt2bV9tdW5tYXAobWVtLCB0b3RhbF9zaXplKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaFxuaW5kZXggMjk1NzJhNmQ3ODljZC4uYjg5NTU5YjZlYTNjMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaFxuQEAgLTQsOCArNCw3IEBAXG4gI2lmbmRlZiBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcbiAjZGVmaW5lIFNFTEZURVNUX0tWTV9OVU1BSUZfSFxuIFxuLSNpbmNsdWRlIFx1MDAzY2RpcmVudC5oXHUwMDNlXG4tXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcG9saWN5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImt2bV9zeXNjYWxscy5oXCJcbkBAIC0zMCw1NCArMjksMTYgQEAgS1ZNX1NZU0NBTExfREVGSU5FKG1iaW5kLCA2LCB2b2lkICosIGFkZHIsIHVuc2lnbmVkIGxvbmcsIHNpemUsIGludCwgbW9kZSxcbiBcdFx0ICAgY29uc3QgdW5zaWduZWQgbG9uZyAqLCBub2RlbWFzaywgdW5zaWduZWQgbG9uZywgbWF4bm9kZSxcbiBcdFx0ICAgdW5zaWduZWQgaW50LCBmbGFncyk7XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZ2V0X21heF9udW1hX25vZGUodm9pZClcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X251bWFfbWVtX25vZGVzKHZvaWQpXG4ge1xuLVx0c3RydWN0IGRpcmVudCAqZGU7XG4tXHRpbnQgbWF4X25vZGUgPSAwO1xuLVx0RElSICpkO1xuK1x0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7XG4gXG4tXHQvKlxuLVx0ICogQXNzdW1lIHRoZXJlJ3MgYSBzaW5nbGUgbm9kZSBpZiB0aGUga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBOVU1BLFxuLVx0ICogb3IgaWYgbm8gbm9kZXMgYXJlIGZvdW5kLlxuLVx0ICovXG4tXHRkID0gb3BlbmRpcihcIi9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZVwiKTtcbi1cdGlmICghZClcbitcdC8qIEdldCBzZXQgb2YgZmlyc3QgNjQgbnVtYSBub2RlcyBhdmFpbGFibGUgKi9cbitcdGlmIChnZXRfbWVtcG9saWN5KE5VTEwsIFx1MDAyNm5vZGVtYXNrLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgTlVMTCxcbitcdFx0XHQgIE1QT0xfRl9NRU1TX0FMTE9XRUQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7XG4tXHRcdGludCBub2RlX2lkO1xuLVx0XHRjaGFyICplbmRwdHI7XG4tXG4tXHRcdGlmIChzdHJuY21wKGRlLVx1MDAzZWRfbmFtZSwgXCJub2RlXCIsIDQpICE9IDApXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdG5vZGVfaWQgPSBzdHJ0b2woZGUtXHUwMDNlZF9uYW1lICsgNCwgXHUwMDI2ZW5kcHRyLCAxMCk7XG4tXHRcdGlmICgqZW5kcHRyICE9ICdcXDAnKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpZiAobm9kZV9pZCBcdTAwM2UgbWF4X25vZGUpXG4tXHRcdFx0bWF4X25vZGUgPSBub2RlX2lkO1xuLVx0fVxuLVx0Y2xvc2VkaXIoZCk7XG4tXG4tXHRyZXR1cm4gbWF4X25vZGU7XG4tfVxuLVxuLXN0YXRpYyBib29sIGlzX251bWFfYXZhaWxhYmxlKHZvaWQpXG4te1xuLVx0Lypcbi1cdCAqIFByb2JlIGZvciBOVU1BIGJ5IGRvaW5nIGEgZHVtbXkgZ2V0X21lbXBvbGljeSgpLiAgSWYgdGhlIHN5c2NhbGxcbi1cdCAqIGZhaWxzIHdpdGggRU5PU1lTLCB0aGVuIHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGhvdXQgTlVNQSBzdXBwb3J0LlxuLVx0ICogaWYgdGhlIHN5c2NhbGwgZmFpbHMgd2l0aCBFUEVSTSwgdGhlbiB0aGUgcHJvY2Vzcy91c2VyIGxhY2tzIHRoZVxuLVx0ICogbmVjZXNzYXJ5IGNhcGFiaWxpdGllcyAoQ0FQX1NZU19OSUNFKS5cbi1cdCAqL1xuLVx0cmV0dXJuICFnZXRfbWVtcG9saWN5KE5VTEwsIE5VTEwsIDAsIE5VTEwsIDApIHx8XG4tXHRcdChlcnJubyAhPSBFTk9TWVMgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVQRVJNKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSBib29sIGlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0odm9pZClcbi17XG4tXHRyZXR1cm4gaXNfbnVtYV9hdmFpbGFibGUoKSBcdTAwMjZcdTAwMjYgZ2V0X21heF9udW1hX25vZGUoKSBcdTAwM2U9IDE7XG4rXHRyZXR1cm4gbm9kZW1hc2s7XG4gfVxuIFxuICNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fTlVNQUlGX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbmluZGV4IDQ2OWUzYWIxNjQ2MDguLmI1ZjRlZDY3MTIxODkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY1xuQEAgLTIzMiw4ICsyMzIsOCBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcyxcbiBcdFx0ICAgdTY0ICpwaXBpc19yY3ZkKVxuIHtcbiBcdGxvbmcgcGFnZXNfbm90X21vdmVkO1xuLVx0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrc1tzaXplb2Yobm9kZW1hc2spICogOF07XG4rXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrO1xuK1x0dW5zaWduZWQgbG9uZyBub2RlbWFza3NbQklUU19QRVJfVFlQRShub2RlbWFzayldO1xuIFx0aW50IG5vZGVzID0gMDtcbiBcdHRpbWVfdCBzdGFydF90aW1lLCBsYXN0X3VwZGF0ZSwgbm93O1xuIFx0dGltZV90IGludGVydmFsX3NlY3MgPSAxO1xuQEAgLTI0NywxOSArMjQ3LDE3IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxuIFx0ZnByaW50ZihzdGRlcnIsIFwiQ2FsbGluZyBtaWdyYXRlX3BhZ2VzIGV2ZXJ5ICVkIG1pY3Jvc2Vjb25kc1xcblwiLFxuIFx0XHRkZWxheV91c2Vjcyk7XG4gXG4tXHQvKiBHZXQgc2V0IG9mIGZpcnN0IDY0IG51bWEgbm9kZXMgYXZhaWxhYmxlICovXG4tXHRrdm1fZ2V0X21lbXBvbGljeShOVUxMLCBcdTAwMjZub2RlbWFzaywgc2l6ZW9mKG5vZGVtYXNrKSAqIDgsXG4tXHRcdFx0ICAwLCBNUE9MX0ZfTUVNU19BTExPV0VEKTtcbitcdG5vZGVtYXNrID0gZ2V0X251bWFfbWVtX25vZGVzKCk7XG4gXG4gXHRmcHJpbnRmKHN0ZGVyciwgXCJOdW1hIG5vZGVzIGZvdW5kIGFtb25nc3QgZmlyc3QgJWx1IHBvc3NpYmxlIG5vZGVzIFwiXG4gXHRcdFwiKGVhY2ggMS1iaXQgaW5kaWNhdGVzIG5vZGUgaXMgcHJlc2VudCk6ICUjbHhcXG5cIixcbi1cdFx0c2l6ZW9mKG5vZGVtYXNrKSAqIDgsIG5vZGVtYXNrKTtcbitcdFx0QklUU19QRVJfVFlQRShub2RlbWFzayksIG5vZGVtYXNrKTtcbiBcbiBcdC8qIEluaXQgYXJyYXkgb2YgbWFza3MgY29udGFpbmluZyBhIHNpbmdsZS1iaXQgaW4gZWFjaCwgb25lIGZvciBlYWNoXG4gXHQgKiBhdmFpbGFibGUgbm9kZS4gbWlncmF0ZV9wYWdlcyBjYWxsZWQgYmVsb3cgcmVxdWlyZXMgc3BlY2lmeWluZyBub2Rlc1xuIFx0ICogYXMgYml0IG1hc2tzLlxuIFx0ICovXG4tXHRmb3IgKGkgPSAwLCBiaXQgPSAxOyBpIFx1MDAzYyBzaXplb2Yobm9kZW1hc2spICogODsgaSsrLCBiaXQgXHUwMDNjXHUwMDNjPSAxKSB7XG4rXHRmb3IgKGkgPSAwLCBiaXQgPSAxOyBpIFx1MDAzYyBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKTsgaSsrLCBiaXQgXHUwMDNjXHUwMDNjPSAxKSB7XG4gXHRcdGlmIChub2RlbWFzayBcdTAwMjYgYml0KSB7XG4gXHRcdFx0bm9kZW1hc2tzW25vZGVzXSA9IG5vZGVtYXNrIFx1MDAyNiBiaXQ7XG4gXHRcdFx0bm9kZXMrKztcbkBAIC0yOTEsNyArMjg5LDcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRcdCAqIEtWTV9DUkVBVEVfVkNQVSBpb2N0bC4gSWYgdGhhdCBhc3N1bXB0aW9uIGV2ZXIgY2hhbmdlcyB0aGlzXG4gXHRcdCAqIHRlc3QgbWF5IGJyZWFrIG9yIGdpdmUgYSBmYWxzZSBwb3NpdGl2ZSBzaWduYWwuXG4gXHRcdCAqL1xuLVx0XHRwYWdlc19ub3RfbW92ZWQgPSBtaWdyYXRlX3BhZ2VzKDAsIHNpemVvZihub2RlbWFza3NbZnJvbV0pLFxuK1x0XHRwYWdlc19ub3RfbW92ZWQgPSBtaWdyYXRlX3BhZ2VzKDAsIEJJVFNfUEVSX1RZUEUobm9kZW1hc2tzW2Zyb21dKSArIDEsXG4gXHRcdFx0XHRcdFx0XHUwMDI2bm9kZW1hc2tzW2Zyb21dLFxuIFx0XHRcdFx0XHRcdFx1MDAyNm5vZGVtYXNrc1t0b10pO1xuIFx0XHRpZiAocGFnZXNfbm90X21vdmVkIFx1MDAzYyAwKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTg6NDM6NDAuOTc2MDY2NDEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQxNjI1MTM0Mjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXMgLSBLVk0gU2VsZnRlc3RzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGRpZmYuIFRoZSBtb2RpZmllZCBmaWxlcyBhcmUgYWxsIHR1Y2tlZCBhd2F5IHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2A6IGBndWVzdF9tZW1mZF90ZXN0LmNgLCBgbnVtYWlmLmhgLCBhbmQgYHhhcGljX2lwaV90ZXN0LmNgLiBOb3RoaW5nIGluIHRoZSBjb3JlIGtlcm5lbCDigJMgbm8gZHJpdmVycywgbWVtb3J5IG1hbmFnZW1lbnQsIG9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLVk0gY29kZS4gVGhpcyBpcyBhbGwgdXNlcnNwYWNlIEtWTSBzZWxmdGVzdCB0ZXJyaXRvcnkuXG5cbk5vdywgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGBXb3J0aEZ1enppbmdgIGd1aWRlbGluZXMuIFdlJ3JlIGxvb2tpbmcgZm9yIG1vZGlmaWNhdGlvbnMgdGhhdCAqZG9uJ3QqIHdhcnJhbnQgZnV6emluZy4gVGhlIGNyaXRlcmlhIHNwZWNpZmljYWxseSBleGNsdWRlIGNoYW5nZXMgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIGNvc21ldGljIGxvZ2dpbmcsIG5vbi1mdW5jdGlvbmFsIG51bWVyaWMgY29uc3RhbnRzLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYW5kIGNlcnRhaW4gZHJpdmVyIHJlbW92YWxzLiBJbXBvcnRhbnRseSwgY2hhbmdlcyB3aXRoaW4gYHRvb2xzL2AsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlc2Ugc2VsZi10ZXN0cywgZG9uJ3QgdG91Y2ggdGhlIGtlcm5lbCBiaW5hcnkgb3IgY29yZSBsb2dpYy4gVGhleSBhcmUsIGZ1bmRhbWVudGFsbHksIHVzZXJzcGFjZSB0ZXN0IHByb2dyYW1zLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24ndCBpbXBhY3QgYW55dGhpbmcgdGhhdCBTeXprYWxsZXIgc2hvdWxkIGJlIGZ1enppbmcuIEknbGwgZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTU1LCJPdXRwdXRUb2tlbnMiOjY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6MDc6MTcuMjI3NDEzODgzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKSwgd2l0aCBubyBjaGFuZ2VzIHRvIHRoZSBMaW51eCBrZXJuZWwgc291cmNlIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgS1ZNIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyksIHdpdGggbm8gY2hhbmdlcyB0byB0aGUgTGludXgga2VybmVsIHNvdXJjZSBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjA3OjE3LjIyNzQ0Njg2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowv8722[1] Phase: Running StartedAt: 2026-09-01 19:07:28 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8722[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-01 19:07:28 +0000 UTC FinishedAt: 2026-09-01 19:07:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}