Name: series-workflowqbqkn Phase: Failed StartedAt: 2026-08-20 00:21:36 +0000 UTC FinishedAt: 2026-08-20 01:06:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbqkn[0] Phase: Succeeded StartedAt: 2026-08-20 00:21:36 +0000 UTC FinishedAt: 2026-08-20 01:05:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbqkn[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 00:21:36 +0000 UTC FinishedAt: 2026-08-20 01:05:57 +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+CgkJCTx0ZD4yMDI2LzA4LzIwIDAxOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGJwZnRvb2wpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAxOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjZiMWVjMWQyYTYxY2U5MmFhMjdmMTEyM2MwYTE1ODFmZTNkYWNlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDAxOjA1OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcbmluZGV4IGM5NTg5MDI2ZGE4ZDYuLjM0NWQ0OWE5YTIyYzEgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9idGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcbkBAIC04MDUsOSAmIzQzOzgwNSwxMyBAQCBzdGF0aWMgaW50IGR1bXBfYnRmX2MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFxuIFx0XHRpZiAoc29ydF9kdW1wKVxuIFx0XHRcdGRhdHVtcyA9IHNvcnRfYnRmX2MoYnRmKTtcbi1cdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdGludCBpZHggPSBkYXR1bXMgPyBkYXR1bXNbaV0uaW5kZXggOiBpO1xuIFxuJiM0MztcdFx0XHQvKiB0eXBlIElEIDAgaXMgdm9pZCwgc2tpcCBpdCAqL1xuJiM0MztcdFx0XHRpZiAoIWlkeClcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdFx0ZXJyID0gYnRmX2R1bXBfX2R1bXBfdHlwZShkLCBpZHgpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIGRvbmU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXG5pbmRleCAwYTJhNGYwYTI3OTRiLi5jNDlmZGQ5MGViMDMzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmNcbkBAIC01Myw2ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW50IHJ1bl9jb21tYW5kKGNoYXIgKmFyZ3MsIGNoYXIgKm91dHB1dF9idWYsIHNpemVfdCBvdXRwdXRfbWF4X2xlbilcbiBcdHN0YXRpYyBjaGFyIGJwZnRvb2xfcGF0aFtQQVRIX01BWF0gPSB7fTtcbiBcdGJvb2wgc3VwcHJlc3Nfb3V0cHV0ID0gIShvdXRwdXRfYnVmIFx1MDAyNlx1MDAyNiBvdXRwdXRfbWF4X2xlbik7XG4gXHRjaGFyIGNvbW1hbmRbQlBGVE9PTF9GVUxMX0NNRF9NQVhfTEVOXTtcbiYjNDM7XHRzaXplX3QgbjtcbiBcdEZJTEUgKmY7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTY4LDggJiM0Mzs2OSwxMCBAQCBzdGF0aWMgaW50IHJ1bl9jb21tYW5kKGNoYXIgKmFyZ3MsIGNoYXIgKm91dHB1dF9idWYsIHNpemVfdCBvdXRwdXRfbWF4X2xlbilcbiBcdGlmICghZilcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAoIXN1cHByZXNzX291dHB1dClcbi1cdFx0ZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4sIGYpO1xuJiM0MztcdGlmICghc3VwcHJlc3Nfb3V0cHV0KSB7XG4mIzQzO1x0XHRuID0gZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4gLSAxLCBmKTtcbiYjNDM7XHRcdG91dHB1dF9idWZbbl0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdH1cbiBcdHJldCA9IHBjbG9zZShmKTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjgwNTk4MjBlYTBiZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jXG5AQCAtMCwwICYjNDM7MSwyMjMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZnRvb2xfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBEVU1QX0JVRl9TWlx0KDE2ICogMTAyNClcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRmX3RvX3RtcGZpbGUoc3RydWN0IGJ0ZiAqYnRmLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9zeilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHZvaWQgKnJhdztcbiYjNDM7XHRzc2l6ZV90IHdyaXR0ZW47XG4mIzQzO1x0X191MzIgc3o7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRyYXcgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgXHUwMDI2c3opO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihyYXcsIFwmIzM0O3Jhd19kYXRhXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgcGF0aF9zeiwgXCYjMzQ7L3RtcC9icGZ0b29sX2J0Zl9kdW1wLlhYWFhYWFwmIzM0Oyk7XG4mIzQzO1x0ZmQgPSBta3N0ZW1wKHBhdGgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKGZkLCBcJiMzNDtta3N0ZW1wXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0d3JpdHRlbiA9IHdyaXRlKGZkLCByYXcsIHN6KTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEod3JpdHRlbiwgc3osIFwmIzM0O3dyaXRlX2J0ZlwmIzM0OykpIHtcbiYjNDM7XHRcdHVubGluayhwYXRoKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjaGFyICpkdW1wX2MoY29uc3QgY2hhciAqcGF0aCwgYm9vbCBzb3J0ZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGFyZ3NbTUFYX0JQRlRPT0xfQ01EX0xFTl07XG4mIzQzO1x0Y2hhciAqYnVmO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGJ1ZiA9IG1hbGxvYyhEVU1QX0JVRl9TWik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ1ZiwgXCYjMzQ7YWxsb2NcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGFyZ3MsIHNpemVvZihhcmdzKSwgXCYjMzQ7YnRmIGR1bXAgZmlsZSAlcyBmb3JtYXQgYyVzXCYjMzQ7LFxuJiM0MztcdFx0IHBhdGgsIHNvcnRlZCA/IFwmIzM0O1wmIzM0OyA6IFwmIzM0OyB1bnNvcnRlZFwmIzM0Oyk7XG4mIzQzO1x0ZXJyID0gZ2V0X2JwZnRvb2xfY29tbWFuZF9vdXRwdXQoYXJncywgYnVmLCBEVU1QX0JVRl9TWik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtkdW1wXCYjMzQ7KSkge1xuJiM0MztcdFx0ZnJlZShidWYpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBidWY7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIHN0cnVjdCBob2xleSB7IGludCBjOyBcdTAwM2MzMiBiaXQgaG9sZVx1MDAzZSBpbnQgdGFpbDsgfTtcbiYjNDM7ICogZW51bSB7IEUwID0gMSB9OyBlbnVtIHsgRTEgPSAyIH07IGVudW0geyBFMiA9IDMgfTtcbiYjNDM7ICogc3RydWN0IHMgeyBpbnQgZjsgfTtcbiYjNDM7ICogdW5pb24gdSB7IGludCBmOyB9O1xuJiM0MzsgKlxuJiM0MzsgKiBPbmUgcmVjb3JkIHdpdGggYSBob2xlLCBhbmQgYSA0LWJ5dGUgbG9uZyB0byBwYWQgaXQgd2l0aC4gSG93IHJlY29yZHNcbiYjNDM7ICogdGhlbXNlbHZlcyBhcmUgcmVuZGVyZWQgaXMgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBidWlsZC5cbiYjNDM7ICogVGhlIGFub255bW91cyBlbnVtcyBtYXR0ZXIgdG8gdGhlIHNvcnRpbmcgc3VidGVzdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgYnRmICpta19idGYodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidGYgKmJ0ZjtcbiYjNDM7XHRpbnQgaWQsIGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0YnRmID0gYnRmX19uZXdfZW1wdHkoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcJiMzNDtuZXdfZW1wdHlcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGlkID0gYnRmX19hZGRfaW50KGJ0ZiwgXCYjMzQ7aW50XCYjMzQ7LCA0LCBCVEZfSU5UX1NJR05FRCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoaWQsIDEsIFwmIzM0O2ludFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1xuJiM0MztcdGlkID0gYnRmX19hZGRfaW50KGJ0ZiwgXCYjMzQ7bG9uZyBpbnRcJiMzNDssIDQsIEJURl9JTlRfU0lHTkVEKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXCYjMzQ7bG9uZ1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1xuJiM0MztcdGlkID0gYnRmX19hZGRfc3RydWN0KGJ0ZiwgXCYjMzQ7aG9sZXlcJiMzNDssIDE2KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXCYjMzQ7c3RydWN0X2hvbGV5XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnRmX19hZGRfZmllbGQoYnRmLCBcJiMzNDtjXCYjMzQ7LCAxLCAwLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2hvbGV5X2NcJiMzNDspKVxuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBidGZfX2FkZF9maWVsZChidGYsIFwmIzM0O3RhaWxcJiMzNDssIDEsIDk2LCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2hvbGV5X3RhaWxcJiMzNDspKVxuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y2hhciBuYW1lWzE2XTtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFwmIzM0O0UlZFwmIzM0OywgaSk7XG4mIzQzO1xuJiM0MztcdFx0aWQgPSBidGZfX2FkZF9lbnVtKGJ0ZiwgTlVMTCwgNCk7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXCYjMzQ7YW5vbl9lbnVtXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBuYW1lLCBpICYjNDM7IDEpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtlbnVtX3ZhbFwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlkID0gYnRmX19hZGRfc3RydWN0KGJ0ZiwgXCYjMzQ7c1wmIzM0OywgNCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1QoaWQsIDAsIFwmIzM0O3N0cnVjdF9zXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnRmX19hZGRfZmllbGQoYnRmLCBcJiMzNDtmXCYjMzQ7LCAxLCAwLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NfZmllbGRcJiMzNDspKVxuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcbiYjNDM7XHRpZCA9IGJ0Zl9fYWRkX3VuaW9uKGJ0ZiwgXCYjMzQ7dVwmIzM0OywgNCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1QoaWQsIDAsIFwmIzM0O3VuaW9uX3VcJiMzNDspKVxuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBidGZfX2FkZF9maWVsZChidGYsIFwmIzM0O2ZcJiMzNDssIDEsIDAsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dV9maWVsZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1xuJiM0MztcdGJ0Zl9fc2V0X3BvaW50ZXJfc2l6ZShidGYsIDQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYnRmO1xuJiM0MztlcnJfb3V0OlxuJiM0MztcdGJ0Zl9fZnJlZShidGYpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNvdW50X3N1YnN0cihjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqcCA9IGhheXN0YWNrO1xuJiM0MztcdGludCBuID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IChwID0gc3Ryc3RyKHAsIG5lZWRsZSkpOyBwJiM0MzsmIzQzOylcbiYjNDM7XHRcdG4mIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zb3J0X3ByZXNlcnZlc190eXBlcyhjb25zdCBjaGFyICpwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqc29ydGVkID0gTlVMTCwgKnVuc29ydGVkID0gTlVMTDtcbiYjNDM7XHRpbnQgbl9zb3J0ZWQsIG5fdW5zb3J0ZWQ7XG4mIzQzO1xuJiM0MztcdHNvcnRlZCA9IGR1bXBfYyhwYXRoLCB0cnVlKTtcbiYjNDM7XHR1bnNvcnRlZCA9IGR1bXBfYyhwYXRoLCBmYWxzZSk7XG4mIzQzO1x0aWYgKCFzb3J0ZWQgfHwgIXVuc29ydGVkKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ291bnQgZGVmaW5pdGlvbnMgYnkgdGhlIGNsb3NpbmcgYnJhY2UgaW4gdGhlaXIgZmlyc3QgY29sdW1uLiBDb3VudGluZ1xuJiM0MztcdCAqIFwmIzM0O3N0cnVjdFwmIzM0Oy9cJiMzNDt1bmlvblwmIzM0Oy9cJiMzNDtlbnVtXCYjMzQ7IG9wZW5lcnMgaW5zdGVhZCB3b3VsZCBhbHNvIGNvdW50IGZvcndhcmRcbiYjNDM7XHQgKiBkZWNsYXJhdGlvbnMsIGFuZCB3aGljaCB0eXBlcyBuZWVkIG9uZSBkZXBlbmRzIG9uIGVtaXNzaW9uIG9yZGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdG5fdW5zb3J0ZWQgPSBjb3VudF9zdWJzdHIodW5zb3J0ZWQsIFwmIzM0O1xcbn1cJiMzNDspO1xuJiM0MztcdG5fc29ydGVkID0gY291bnRfc3Vic3RyKHNvcnRlZCwgXCYjMzQ7XFxufVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0dUKG5fdW5zb3J0ZWQsIDAsIFwmIzM0O3R5cGVzX2VtaXR0ZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShuX3NvcnRlZCwgbl91bnNvcnRlZCwgXCYjMzQ7c2FtZV90eXBlX2NvdW50XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRmcmVlKHNvcnRlZCk7XG4mIzQzO1x0ZnJlZSh1bnNvcnRlZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENoZWNrIG9ubHkgd2hhdCB0aGUgc2VsZnRlc3RzIGJ1aWxkIGNhbm5vdDpcbiYjNDM7ICogICAtIGJwZl9oZWxwZXJzLmggZGVmaW5lcyBfX2tzeW0gYW5kIF9fd2VhayBhcyB3ZWxsLCBhbmQgbm8gcHJvZ3JhbSB1c2VzXG4mIzQzOyAqICAgICBfX2JwZl9mYXN0Y2FsbCwgc28gbG9zaW5nIHRoZSBtYWNybyBibG9jayBjaGFuZ2VzIG5vdGhpbmc7XG4mIzQzOyAqICAgLSBidWlsZGluZyB3aXRob3V0IHRoZSBwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXggcHJhZ21hIGlzIGEgc3VwcG9ydGVkIG1vZGVcbiYjNDM7ICogICAgIChCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYKSwgc28gbG9zaW5nIGl0IG9ubHkgY29zdHMgQ08tUkU7XG4mIzQzOyAqICAgLSB0aGUgcGFkZGluZyB3aWR0aCBjb21lcyBmcm9tIHRoZSBCVEYmIzM5O3MgcG9pbnRlciBzaXplLCBhbmQgYSBuYXRpdmUgYnVpbGRcbiYjNDM7ICogICAgIG5ldmVyIHJ1bnMgdGhlIGhvc3QgYnBmdG9vbCBvdmVyIGEgZGlmZmVyZW50bHkgc2l6ZWQgdGFyZ2V0JiMzOTtzIEJURi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZHVtcChjb25zdCBjaGFyICpwYXRoLCBib29sIHNvcnRlZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgKmJ1ZjtcbiYjNDM7XG4mIzQzO1x0YnVmID0gZHVtcF9jKHBhdGgsIHNvcnRlZCk7XG4mIzQzO1x0aWYgKCFidWYpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXCYjMzQ7I2RlZmluZSBfX2tzeW0gX19hdHRyaWJ1dGVfXygoc2VjdGlvbihcXFwmIzM0Oy5rc3ltc1xcXCYjMzQ7KSkpXCYjMzQ7LFxuJiM0MztcdFx0XHQgIFwmIzM0O2tzeW1cJiMzNDspO1xuJiM0MztcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXCYjMzQ7I2RlZmluZSBfX3dlYWsgX19hdHRyaWJ1dGVfXygod2VhaykpXCYjMzQ7LCBcJiMzNDt3ZWFrXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfSEFTX1NVQlNUUihidWYsIFwmIzM0OyNkZWZpbmUgX19icGZfZmFzdGNhbGwgX19hdHRyaWJ1dGVfXygoYnBmX2Zhc3RjYWxsKSlcJiMzNDssXG4mIzQzO1x0XHRcdCAgXCYjMzQ7YnBmX2Zhc3RjYWxsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0hBU19TVUJTVFIoYnVmLCBcJiMzNDsjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVhcJiMzNDssIFwmIzM0O3BhaV9ndWFyZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0hBU19TVUJTVFIoYnVmLFxuJiM0MztcdFx0XHQgIFwmIzM0OyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHB1c2ggKF9fYXR0cmlidXRlX18oKHByZXNlcnZlX2FjY2Vzc19pbmRleCkpLCBhcHBseV90byA9IHJlY29yZClcJiMzNDssXG4mIzQzO1x0XHRcdCAgXCYjMzQ7cGFpX3B1c2hcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXCYjMzQ7I3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcG9wXCYjMzQ7LCBcJiMzNDtwYWlfcG9wXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0hBU19TVUJTVFIoYnVmLCBcJiMzNDtsb25nOiAzMjtcJiMzNDssIFwmIzM0O3RhcmdldF9wdHJfc2l6ZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGZyZWUoYnVmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2JwZnRvb2xfYnRmX2R1bXAodm9pZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0c3RydWN0IGJ0ZiAqYnRmO1xuJiM0MztcbiYjNDM7XHRidGYgPSBta19idGYoKTtcbiYjNDM7XHRpZiAoIWJ0ZilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpZiAoYnRmX3RvX3RtcGZpbGUoYnRmLCBwYXRoLCBzaXplb2YocGF0aCkpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2Nfc29ydGVkXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfZHVtcChwYXRoLCB0cnVlKTtcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtjX3Vuc29ydGVkXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfZHVtcChwYXRoLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2Nfc29ydF9wcmVzZXJ2ZXNfdHlwZXNcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9zb3J0X3ByZXNlcnZlc190eXBlcyhwYXRoKTtcbiYjNDM7XG4mIzQzO1x0dW5saW5rKHBhdGgpO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnRmX19mcmVlKGJ0Zik7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMTowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGJwZnRvb2wpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjZiMWVjMWQyYTYxY2U5MmFhMjdmMTEyM2MwYTE1ODFmZTNkYWNlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDAxOjA1OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmMgYi90b29scy9icGYvYnBmdG9vbC9idGYuYwppbmRleCBjOTU4OTAyNmRhOGQ2Li4zNDVkNDlhOWEyMmMxIDEwMDY0NAotLS0gYS90b29scy9icGYvYnBmdG9vbC9idGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9idGYuYwpAQCAtODA1LDkgJiM0Mzs4MDUsMTMgQEAgc3RhdGljIGludCBkdW1wX2J0Zl9jKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKIAogCQlpZiAoc29ydF9kdW1wKQogCQkJZGF0dW1zID0gc29ydF9idGZfYyhidGYpOwotCQlmb3IgKGkgPSAxOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IGNudDsgaSYjNDM7JiM0MzspIHsKIAkJCWludCBpZHggPSBkYXR1bXMgPyBkYXR1bXNbaV0uaW5kZXggOiBpOwogCiYjNDM7CQkJLyogdHlwZSBJRCAwIGlzIHZvaWQsIHNraXAgaXQgKi8KJiM0MzsJCQlpZiAoIWlkeCkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiAJCQllcnIgPSBidGZfZHVtcF9fZHVtcF90eXBlKGQsIGlkeCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gZG9uZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuYwppbmRleCAwYTJhNGYwYTI3OTRiLi5jNDlmZGQ5MGViMDMzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jCkBAIC01Myw2ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW50IHJ1bl9jb21tYW5kKGNoYXIgKmFyZ3MsIGNoYXIgKm91dHB1dF9idWYsIHNpemVfdCBvdXRwdXRfbWF4X2xlbikKIAlzdGF0aWMgY2hhciBicGZ0b29sX3BhdGhbUEFUSF9NQVhdID0ge307CiAJYm9vbCBzdXBwcmVzc19vdXRwdXQgPSAhKG91dHB1dF9idWYgJmFtcDsmYW1wOyBvdXRwdXRfbWF4X2xlbik7CiAJY2hhciBjb21tYW5kW0JQRlRPT0xfRlVMTF9DTURfTUFYX0xFTl07CiYjNDM7CXNpemVfdCBuOwogCUZJTEUgKmY7CiAJaW50IHJldDsKIApAQCAtNjgsOCAmIzQzOzY5LDEwIEBAIHN0YXRpYyBpbnQgcnVuX2NvbW1hbmQoY2hhciAqYXJncywgY2hhciAqb3V0cHV0X2J1Ziwgc2l6ZV90IG91dHB1dF9tYXhfbGVuKQogCWlmICghZikKIAkJcmV0dXJuIDE7CiAKLQlpZiAoIXN1cHByZXNzX291dHB1dCkKLQkJZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4sIGYpOwomIzQzOwlpZiAoIXN1cHByZXNzX291dHB1dCkgewomIzQzOwkJbiA9IGZyZWFkKG91dHB1dF9idWYsIDEsIG91dHB1dF9tYXhfbGVuIC0gMSwgZik7CiYjNDM7CQlvdXRwdXRfYnVmW25dID0gJiMzOTtcMCYjMzk7OwomIzQzOwl9CiAJcmV0ID0gcGNsb3NlKGYpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZnRvb2xfYnRmX2R1bXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZnRvb2xfYnRmX2R1bXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4yODA1OTgyMGVhMGJlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jCkBAIC0wLDAgJiM0MzsxLDIyMyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmdG9vbF9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9idGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBEVU1QX0JVRl9TWgkoMTYgKiAxMDI0KQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnRmX3RvX3RtcGZpbGUoc3RydWN0IGJ0ZiAqYnRmLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9zeikKJiM0Mzt7CiYjNDM7CWNvbnN0IHZvaWQgKnJhdzsKJiM0MzsJc3NpemVfdCB3cml0dGVuOwomIzQzOwlfX3UzMiBzejsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlyYXcgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgJmFtcDtzeik7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihyYXcsICYjMzQ7cmF3X2RhdGEmIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHBhdGhfc3osICYjMzQ7L3RtcC9icGZ0b29sX2J0Zl9kdW1wLlhYWFhYWCYjMzQ7KTsKJiM0MzsJZmQgPSBta3N0ZW1wKHBhdGgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChmZCwgJiMzNDtta3N0ZW1wJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwl3cml0dGVuID0gd3JpdGUoZmQsIHJhdywgc3opOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHdyaXR0ZW4sIHN6LCAmIzM0O3dyaXRlX2J0ZiYjMzQ7KSkgewomIzQzOwkJdW5saW5rKHBhdGgpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqZHVtcF9jKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgc29ydGVkKQomIzQzO3sKJiM0MzsJY2hhciBhcmdzW01BWF9CUEZUT09MX0NNRF9MRU5dOwomIzQzOwljaGFyICpidWY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWJ1ZiA9IG1hbGxvYyhEVU1QX0JVRl9TWik7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihidWYsICYjMzQ7YWxsb2MmIzM0OykpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJc25wcmludGYoYXJncywgc2l6ZW9mKGFyZ3MpLCAmIzM0O2J0ZiBkdW1wIGZpbGUgJXMgZm9ybWF0IGMlcyYjMzQ7LAomIzQzOwkJIHBhdGgsIHNvcnRlZCA/ICYjMzQ7JiMzNDsgOiAmIzM0OyB1bnNvcnRlZCYjMzQ7KTsKJiM0MzsJZXJyID0gZ2V0X2JwZnRvb2xfY29tbWFuZF9vdXRwdXQoYXJncywgYnVmLCBEVU1QX0JVRl9TWik7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtkdW1wJiMzNDspKSB7CiYjNDM7CQlmcmVlKGJ1Zik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gYnVmOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIHN0cnVjdCBob2xleSB7IGludCBjOyAmbHQ7MzIgYml0IGhvbGUmZ3Q7IGludCB0YWlsOyB9OwomIzQzOyAqIGVudW0geyBFMCA9IDEgfTsgZW51bSB7IEUxID0gMiB9OyBlbnVtIHsgRTIgPSAzIH07CiYjNDM7ICogc3RydWN0IHMgeyBpbnQgZjsgfTsKJiM0MzsgKiB1bmlvbiB1IHsgaW50IGY7IH07CiYjNDM7ICoKJiM0MzsgKiBPbmUgcmVjb3JkIHdpdGggYSBob2xlLCBhbmQgYSA0LWJ5dGUgbG9uZyB0byBwYWQgaXQgd2l0aC4gSG93IHJlY29yZHMKJiM0MzsgKiB0aGVtc2VsdmVzIGFyZSByZW5kZXJlZCBpcyBhbHJlYWR5IGNvdmVyZWQgYnkgdGhlIGJ1aWxkLgomIzQzOyAqIFRoZSBhbm9ueW1vdXMgZW51bXMgbWF0dGVyIHRvIHRoZSBzb3J0aW5nIHN1YnRlc3QuCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBidGYgKm1rX2J0Zih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0ZiAqYnRmOwomIzQzOwlpbnQgaWQsIGVyciwgaTsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19uZXdfZW1wdHkoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtuZXdfZW1wdHkmIzM0OykpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJaWQgPSBidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2ludCYjMzQ7LCA0LCBCVEZfSU5UX1NJR05FRCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKGlkLCAxLCAmIzM0O2ludCYjMzQ7KSkKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsKJiM0MzsJaWQgPSBidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2xvbmcgaW50JiMzNDssIDQsIEJURl9JTlRfU0lHTkVEKTsKJiM0MzsJaWYgKCFBU1NFUlRfR1QoaWQsIDAsICYjMzQ7bG9uZyYjMzQ7KSkKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsKJiM0MzsJaWQgPSBidGZfX2FkZF9zdHJ1Y3QoYnRmLCAmIzM0O2hvbGV5JiMzNDssIDE2KTsKJiM0MzsJaWYgKCFBU1NFUlRfR1QoaWQsIDAsICYjMzQ7c3RydWN0X2hvbGV5JiMzNDspKQomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwomIzQzOwllcnIgPSBidGZfX2FkZF9maWVsZChidGYsICYjMzQ7YyYjMzQ7LCAxLCAwLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2hvbGV5X2MmIzM0OykpCiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CiYjNDM7CWVyciA9IGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgJiMzNDt0YWlsJiMzNDssIDEsIDk2LCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2hvbGV5X3RhaWwmIzM0OykpCiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY2hhciBuYW1lWzE2XTsKJiM0MzsKJiM0MzsJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgJiMzNDtFJWQmIzM0OywgaSk7CiYjNDM7CiYjNDM7CQlpZCA9IGJ0Zl9fYWRkX2VudW0oYnRmLCBOVUxMLCA0KTsKJiM0MzsJCWlmICghQVNTRVJUX0dUKGlkLCAwLCAmIzM0O2Fub25fZW51bSYjMzQ7KSkKJiM0MzsJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CiYjNDM7CQllcnIgPSBidGZfX2FkZF9lbnVtX3ZhbHVlKGJ0ZiwgbmFtZSwgaSAmIzQzOyAxKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtlbnVtX3ZhbCYjMzQ7KSkKJiM0MzsJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWQgPSBidGZfX2FkZF9zdHJ1Y3QoYnRmLCAmIzM0O3MmIzM0OywgNCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGlkLCAwLCAmIzM0O3N0cnVjdF9zJiMzNDspKQomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwomIzQzOwllcnIgPSBidGZfX2FkZF9maWVsZChidGYsICYjMzQ7ZiYjMzQ7LCAxLCAwLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NfZmllbGQmIzM0OykpCiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CiYjNDM7CWlkID0gYnRmX19hZGRfdW5pb24oYnRmLCAmIzM0O3UmIzM0OywgNCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGlkLCAwLCAmIzM0O3VuaW9uX3UmIzM0OykpCiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CiYjNDM7CWVyciA9IGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgJiMzNDtmJiMzNDssIDEsIDAsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dV9maWVsZCYjMzQ7KSkKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsKJiM0MzsJYnRmX19zZXRfcG9pbnRlcl9zaXplKGJ0ZiwgNCk7CiYjNDM7CiYjNDM7CXJldHVybiBidGY7CiYjNDM7ZXJyX291dDoKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNvdW50X3N1YnN0cihjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqcCA9IGhheXN0YWNrOwomIzQzOwlpbnQgbiA9IDA7CiYjNDM7CiYjNDM7CWZvciAoOyAocCA9IHN0cnN0cihwLCBuZWVkbGUpKTsgcCYjNDM7JiM0MzspCiYjNDM7CQluJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJcmV0dXJuIG47CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc29ydF9wcmVzZXJ2ZXNfdHlwZXMoY29uc3QgY2hhciAqcGF0aCkKJiM0Mzt7CiYjNDM7CWNoYXIgKnNvcnRlZCA9IE5VTEwsICp1bnNvcnRlZCA9IE5VTEw7CiYjNDM7CWludCBuX3NvcnRlZCwgbl91bnNvcnRlZDsKJiM0MzsKJiM0MzsJc29ydGVkID0gZHVtcF9jKHBhdGgsIHRydWUpOwomIzQzOwl1bnNvcnRlZCA9IGR1bXBfYyhwYXRoLCBmYWxzZSk7CiYjNDM7CWlmICghc29ydGVkIHx8ICF1bnNvcnRlZCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBDb3VudCBkZWZpbml0aW9ucyBieSB0aGUgY2xvc2luZyBicmFjZSBpbiB0aGVpciBmaXJzdCBjb2x1bW4uIENvdW50aW5nCiYjNDM7CSAqICYjMzQ7c3RydWN0JiMzNDsvJiMzNDt1bmlvbiYjMzQ7LyYjMzQ7ZW51bSYjMzQ7IG9wZW5lcnMgaW5zdGVhZCB3b3VsZCBhbHNvIGNvdW50IGZvcndhcmQKJiM0MzsJICogZGVjbGFyYXRpb25zLCBhbmQgd2hpY2ggdHlwZXMgbmVlZCBvbmUgZGVwZW5kcyBvbiBlbWlzc2lvbiBvcmRlci4KJiM0MzsJICovCiYjNDM7CW5fdW5zb3J0ZWQgPSBjb3VudF9zdWJzdHIodW5zb3J0ZWQsICYjMzQ7XG59JiMzNDspOwomIzQzOwluX3NvcnRlZCA9IGNvdW50X3N1YnN0cihzb3J0ZWQsICYjMzQ7XG59JiMzNDspOwomIzQzOwlBU1NFUlRfR1Qobl91bnNvcnRlZCwgMCwgJiMzNDt0eXBlc19lbWl0dGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEobl9zb3J0ZWQsIG5fdW5zb3J0ZWQsICYjMzQ7c2FtZV90eXBlX2NvdW50JiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJZnJlZShzb3J0ZWQpOwomIzQzOwlmcmVlKHVuc29ydGVkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDaGVjayBvbmx5IHdoYXQgdGhlIHNlbGZ0ZXN0cyBidWlsZCBjYW5ub3Q6CiYjNDM7ICogICAtIGJwZl9oZWxwZXJzLmggZGVmaW5lcyBfX2tzeW0gYW5kIF9fd2VhayBhcyB3ZWxsLCBhbmQgbm8gcHJvZ3JhbSB1c2VzCiYjNDM7ICogICAgIF9fYnBmX2Zhc3RjYWxsLCBzbyBsb3NpbmcgdGhlIG1hY3JvIGJsb2NrIGNoYW5nZXMgbm90aGluZzsKJiM0MzsgKiAgIC0gYnVpbGRpbmcgd2l0aG91dCB0aGUgcHJlc2VydmVfYWNjZXNzX2luZGV4IHByYWdtYSBpcyBhIHN1cHBvcnRlZCBtb2RlCiYjNDM7ICogICAgIChCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYKSwgc28gbG9zaW5nIGl0IG9ubHkgY29zdHMgQ08tUkU7CiYjNDM7ICogICAtIHRoZSBwYWRkaW5nIHdpZHRoIGNvbWVzIGZyb20gdGhlIEJURiYjMzk7cyBwb2ludGVyIHNpemUsIGFuZCBhIG5hdGl2ZSBidWlsZAomIzQzOyAqICAgICBuZXZlciBydW5zIHRoZSBob3N0IGJwZnRvb2wgb3ZlciBhIGRpZmZlcmVudGx5IHNpemVkIHRhcmdldCYjMzk7cyBCVEYuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kdW1wKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgc29ydGVkKQomIzQzO3sKJiM0MzsJY2hhciAqYnVmOwomIzQzOwomIzQzOwlidWYgPSBkdW1wX2MocGF0aCwgc29ydGVkKTsKJiM0MzsJaWYgKCFidWYpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CUFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgJiMzNDsjZGVmaW5lIF9fa3N5bSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFwmIzM0Oy5rc3ltc1wmIzM0OykpKSYjMzQ7LAomIzQzOwkJCSAgJiMzNDtrc3ltJiMzNDspOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihidWYsICYjMzQ7I2RlZmluZSBfX3dlYWsgX19hdHRyaWJ1dGVfXygod2VhaykpJiMzNDssICYjMzQ7d2VhayYjMzQ7KTsKJiM0MzsJQVNTRVJUX0hBU19TVUJTVFIoYnVmLCAmIzM0OyNkZWZpbmUgX19icGZfZmFzdGNhbGwgX19hdHRyaWJ1dGVfXygoYnBmX2Zhc3RjYWxsKSkmIzM0OywKJiM0MzsJCQkgICYjMzQ7YnBmX2Zhc3RjYWxsJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihidWYsICYjMzQ7I2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYJiMzNDssICYjMzQ7cGFpX2d1YXJkJiMzNDspOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihidWYsCiYjNDM7CQkJICAmIzM0OyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHB1c2ggKF9fYXR0cmlidXRlX18oKHByZXNlcnZlX2FjY2Vzc19pbmRleCkpLCBhcHBseV90byA9IHJlY29yZCkmIzM0OywKJiM0MzsJCQkgICYjMzQ7cGFpX3B1c2gmIzM0Oyk7CiYjNDM7CUFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgJiMzNDsjcHJhZ21hIGNsYW5nIGF0dHJpYnV0ZSBwb3AmIzM0OywgJiMzNDtwYWlfcG9wJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihidWYsICYjMzQ7bG9uZzogMzI7JiMzNDssICYjMzQ7dGFyZ2V0X3B0cl9zaXplJiMzNDspOwomIzQzOwomIzQzOwlmcmVlKGJ1Zik7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9icGZ0b29sX2J0Zl9kdW1wKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwlzdHJ1Y3QgYnRmICpidGY7CiYjNDM7CiYjNDM7CWJ0ZiA9IG1rX2J0ZigpOwomIzQzOwlpZiAoIWJ0ZikKJiM0MzsJCXJldHVybjsKJiM0MzsJaWYgKGJ0Zl90b190bXBmaWxlKGJ0ZiwgcGF0aCwgc2l6ZW9mKHBhdGgpKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2Nfc29ydGVkJiMzNDspKQomIzQzOwkJdGVzdF9kdW1wKHBhdGgsIHRydWUpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2NfdW5zb3J0ZWQmIzM0OykpCiYjNDM7CQl0ZXN0X2R1bXAocGF0aCwgZmFsc2UpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2Nfc29ydF9wcmVzZXJ2ZXNfdHlwZXMmIzM0OykpCiYjNDM7CQl0ZXN0X3NvcnRfcHJlc2VydmVzX3R5cGVzKHBhdGgpOwomIzQzOwomIzQzOwl1bmxpbmsocGF0aCk7CiYjNDM7b3V0OgomIzQzOwlidGZfX2ZyZWUoYnRmKTsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAxOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMDAKCQkJCQkJCW91dHB1dDogNjYKCQkJCQkJCXRob3VnaHRzOiA2NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogV29ydGhGdXp6aW5nID0gRmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIHRvdWNoZXMgYHRvb2xzL2JwZi9icGZ0b29sL2J0Zi5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY2AsIGFuZCBhZGRzIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNgLiBTdHJhaWdodCBhd2F5LCBJJiMzOTttIHRoaW5raW5nLCB0aGVzZSBhcmUgYWxsIGluIHRoZSBgdG9vbHNgIGFuZCBgc2VsZnRlc3RzYCBkaXJlY3Rvcmllcywgd2hpY2ggc2NyZWFtcyAmIzM0O3VzZXJzcGFjZS4mIzM0OyBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGFyZSByZWxldmFudCB0byB0aGUga2VybmVsIGFuZCBpZiB0aGV5IHJlcHJlc2VudCBhcmVhcyB0aGUgZnV6emVyIChzeXprYWxsZXIpIHdvdWxkIHRhcmdldC4KClRoZSBwcm9tcHQgbGF5cyBvdXQgc3BlY2lmaWMgY29uZGl0aW9ucyBmb3IgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJdCBtZW50aW9ucyBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGNvZGUsIGFuZCBkcml2ZXIgYC5yZW1vdmVgIGZ1bmN0aW9ucyBzaG91bGQgdHJpZ2dlciBhIGBmYWxzZWAgcmVzcG9uc2UuIFdoaWxlIHRoZSBwcm9tcHQgZG9lc24mIzM5O3QgZXhwbGljaXRseSAqY2FsbCBvdXQqIHRvb2xzIGFuZCBzZWxmdGVzdHMsIEkga25vdyB0aGF0IGNoYW5nZXMgdG8gdXNlcnNwYWNlIHRvb2xzIGxpa2UgYGJwZnRvb2xgIGFuZCB0ZXN0cyB0eXBpY2FsbHkgZG9uJiMzOTt0IGFmZmVjdCB0aGUga2VybmVsIGl0c2VsZiwgYW5kIHN5emthbGxlciBpcyBmb2N1c2VkIG9uIGtlcm5lbCBzeXNjYWxscyBhbmQgdGh1cyBub3QgY29uY2VybmVkIHdpdGggdGhlc2UgY2hhbmdlcy4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIGBicGZ0b29sYCBzb3VyY2UgaXMgaW5kZWVkIGRpc3RpbmN0IGZyb20gdGhlIGNvcmUga2VybmVsLCBldmVuIGlmIGl0JiMzOTtzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGl0c2VsZi4gTm93LCB0aGUgcHJvbXB0IGFsc28gc2F5cyB0byBjaGVjayBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgYW5kIGFyY2hpdGVjdHVyZXMuIEl0IHNheXMgJiMzNDtpZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIGtleS4gU2luY2UgdGhlIHBhdGNoIGlzICpvbmx5KiBtb2RpZnlpbmcgdGhlc2UgdG9vbCBhbmQgdGVzdCBmaWxlcywgaXQgZG9lc24mIzM5O3QgdG91Y2ggY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIEkgYW0gdGhlcmVmb3JlIGNvbmZpZGVudCB0aGF0IFdvcnRoRnV6emluZyBzaG91bGQgYmUgc2V0IHRvICpmYWxzZSouCgpJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhlIGNoYW5nZXMgdGhlbXNlbHZlcy4gTGV0IG1lIHNlZS4KCiogICBgdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNgOiBBIGJ1ZyBmaXguIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGxvb3AgaGFkIGFuIG9mZi1ieS1vbmUgZXJyb3IgKG5vdyBjb3JyZWN0ZWQpLiBUaGUgY29kZSBub3cgc2tpcHMgdHlwZSBJRCAwLCB3aGljaCByZXByZXNlbnRzIHZvaWQsIGluIEJURiB0eXBlIHNvcnRpbmcuIEl0JiMzOTtzIGEgY29kZSBjb3JyZWN0aW9uIGluIGEgdXNlciB0b29sLgoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY2A6IEEgc2VsZnRlc3QgaGVscGVyIGlzIGZpeGVkIHRvIG51bGwtdGVybWluYXRlIGEgYnVmZmVyLiBJdCYjMzk7cyBtYWtpbmcgdGhlIGNvZGUgc2FmZXIgYW5kIG1vcmUgcm9idXN0IGluIHRoZSBzZWxmdGVzdCBjb250ZXh0LgoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZnRvb2xfYnRmX2R1bXAuY2A6IFRoaXMgaXMgYSBuZXcgc2VsZnRlc3QgZm9yIGBicGZ0b29sIGJ0ZiBkdW1wYC4KCk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUga2VybmVsLCB0aGV5IGFyZSBwdXJlbHkgdXNlcnNwYWNlIHRvb2xzIGFuZCB0ZXN0cy4gVGhlcmVmb3JlLCBJIGFtIGNvbWZvcnRhYmxlIHdpdGggcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAxOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGJwZnRvb2wpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scyAoYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmIHRoYXQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDE6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAxOjA1OjM0Ljg5ODk0NjA4OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjk2OTIxODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGJwZnRvb2wpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiB0aGF0IGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMTowNTozNC44OTg5NTA5OTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODg4MzUyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNmIxZWMxZDJhNjFjZTkyYWEyN2YxMTIzYzBhMTU4MWZlM2RhY2U1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDAxOjA1OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcXG5pbmRleCBjOTU4OTAyNmRhOGQ2Li4zNDVkNDlhOWEyMmMxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jXFxuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcXG5AQCAtODA1LDkgKzgwNSwxMyBAQCBzdGF0aWMgaW50IGR1bXBfYnRmX2MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXG4gXFx0XFx0aWYgKHNvcnRfZHVtcClcXG4gXFx0XFx0XFx0ZGF0dW1zID0gc29ydF9idGZfYyhidGYpO1xcbi1cXHRcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuIFxcdFxcdFxcdGludCBpZHggPSBkYXR1bXMgPyBkYXR1bXNbaV0uaW5kZXggOiBpO1xcbiBcXG4rXFx0XFx0XFx0LyogdHlwZSBJRCAwIGlzIHZvaWQsIHNraXAgaXQgKi9cXG4rXFx0XFx0XFx0aWYgKCFpZHgpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0XFx0ZXJyID0gYnRmX2R1bXBfX2R1bXBfdHlwZShkLCBpZHgpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY1xcbmluZGV4IDBhMmE0ZjBhMjc5NGIuLmM0OWZkZDkwZWIwMzMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXFxuQEAgLTUzLDYgKzUzLDcgQEAgc3RhdGljIGludCBydW5fY29tbWFuZChjaGFyICphcmdzLCBjaGFyICpvdXRwdXRfYnVmLCBzaXplX3Qgb3V0cHV0X21heF9sZW4pXFxuIFxcdHN0YXRpYyBjaGFyIGJwZnRvb2xfcGF0aFtQQVRIX01BWF0gPSB7fTtcXG4gXFx0Ym9vbCBzdXBwcmVzc19vdXRwdXQgPSAhKG91dHB1dF9idWYgXFx1MDAyNlxcdTAwMjYgb3V0cHV0X21heF9sZW4pO1xcbiBcXHRjaGFyIGNvbW1hbmRbQlBGVE9PTF9GVUxMX0NNRF9NQVhfTEVOXTtcXG4rXFx0c2l6ZV90IG47XFxuIFxcdEZJTEUgKmY7XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC02OCw4ICs2OSwxMCBAQCBzdGF0aWMgaW50IHJ1bl9jb21tYW5kKGNoYXIgKmFyZ3MsIGNoYXIgKm91dHB1dF9idWYsIHNpemVfdCBvdXRwdXRfbWF4X2xlbilcXG4gXFx0aWYgKCFmKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdGlmICghc3VwcHJlc3Nfb3V0cHV0KVxcbi1cXHRcXHRmcmVhZChvdXRwdXRfYnVmLCAxLCBvdXRwdXRfbWF4X2xlbiwgZik7XFxuK1xcdGlmICghc3VwcHJlc3Nfb3V0cHV0KSB7XFxuK1xcdFxcdG4gPSBmcmVhZChvdXRwdXRfYnVmLCAxLCBvdXRwdXRfbWF4X2xlbiAtIDEsIGYpO1xcbitcXHRcXHRvdXRwdXRfYnVmW25dID0gJ1xcXFwwJztcXG4rXFx0fVxcbiBcXHRyZXQgPSBwY2xvc2UoZik7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI4MDU5ODIwZWEwYmVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jXFxuQEAgLTAsMCArMSwyMjMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZnRvb2xfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIERVTVBfQlVGX1NaXFx0KDE2ICogMTAyNClcXG4rXFxuK3N0YXRpYyBpbnQgYnRmX3RvX3RtcGZpbGUoc3RydWN0IGJ0ZiAqYnRmLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9zeilcXG4re1xcbitcXHRjb25zdCB2b2lkICpyYXc7XFxuK1xcdHNzaXplX3Qgd3JpdHRlbjtcXG4rXFx0X191MzIgc3o7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdHJhdyA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCBcXHUwMDI2c3opO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIocmF3LCBcXFwicmF3X2RhdGFcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgcGF0aF9zeiwgXFxcIi90bXAvYnBmdG9vbF9idGZfZHVtcC5YWFhYWFhcXFwiKTtcXG4rXFx0ZmQgPSBta3N0ZW1wKHBhdGgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRChmZCwgXFxcIm1rc3RlbXBcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0d3JpdHRlbiA9IHdyaXRlKGZkLCByYXcsIHN6KTtcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRpZiAoIUFTU0VSVF9FUSh3cml0dGVuLCBzeiwgXFxcIndyaXRlX2J0ZlxcXCIpKSB7XFxuK1xcdFxcdHVubGluayhwYXRoKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY2hhciAqZHVtcF9jKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgc29ydGVkKVxcbit7XFxuK1xcdGNoYXIgYXJnc1tNQVhfQlBGVE9PTF9DTURfTEVOXTtcXG4rXFx0Y2hhciAqYnVmO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0YnVmID0gbWFsbG9jKERVTVBfQlVGX1NaKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGJ1ZiwgXFxcImFsbG9jXFxcIikpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0c25wcmludGYoYXJncywgc2l6ZW9mKGFyZ3MpLCBcXFwiYnRmIGR1bXAgZmlsZSAlcyBmb3JtYXQgYyVzXFxcIixcXG4rXFx0XFx0IHBhdGgsIHNvcnRlZCA/IFxcXCJcXFwiIDogXFxcIiB1bnNvcnRlZFxcXCIpO1xcbitcXHRlcnIgPSBnZXRfYnBmdG9vbF9jb21tYW5kX291dHB1dChhcmdzLCBidWYsIERVTVBfQlVGX1NaKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiZHVtcFxcXCIpKSB7XFxuK1xcdFxcdGZyZWUoYnVmKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGJ1ZjtcXG4rfVxcbitcXG4rLypcXG4rICogc3RydWN0IGhvbGV5IHsgaW50IGM7IFxcdTAwM2MzMiBiaXQgaG9sZVxcdTAwM2UgaW50IHRhaWw7IH07XFxuKyAqIGVudW0geyBFMCA9IDEgfTsgZW51bSB7IEUxID0gMiB9OyBlbnVtIHsgRTIgPSAzIH07XFxuKyAqIHN0cnVjdCBzIHsgaW50IGY7IH07XFxuKyAqIHVuaW9uIHUgeyBpbnQgZjsgfTtcXG4rICpcXG4rICogT25lIHJlY29yZCB3aXRoIGEgaG9sZSwgYW5kIGEgNC1ieXRlIGxvbmcgdG8gcGFkIGl0IHdpdGguIEhvdyByZWNvcmRzXFxuKyAqIHRoZW1zZWx2ZXMgYXJlIHJlbmRlcmVkIGlzIGFscmVhZHkgY292ZXJlZCBieSB0aGUgYnVpbGQuXFxuKyAqIFRoZSBhbm9ueW1vdXMgZW51bXMgbWF0dGVyIHRvIHRoZSBzb3J0aW5nIHN1YnRlc3QuXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IGJ0ZiAqbWtfYnRmKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbitcXHRpbnQgaWQsIGVyciwgaTtcXG4rXFxuK1xcdGJ0ZiA9IGJ0Zl9fbmV3X2VtcHR5KCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFxcXCJuZXdfZW1wdHlcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZCA9IGJ0Zl9fYWRkX2ludChidGYsIFxcXCJpbnRcXFwiLCA0LCBCVEZfSU5UX1NJR05FRCk7XFxuK1xcdGlmICghQVNTRVJUX0VRKGlkLCAxLCBcXFwiaW50XFxcIikpXFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuK1xcdGlkID0gYnRmX19hZGRfaW50KGJ0ZiwgXFxcImxvbmcgaW50XFxcIiwgNCwgQlRGX0lOVF9TSUdORUQpO1xcbitcXHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXFxcImxvbmdcXFwiKSlcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXG4rXFx0aWQgPSBidGZfX2FkZF9zdHJ1Y3QoYnRmLCBcXFwiaG9sZXlcXFwiLCAxNik7XFxuK1xcdGlmICghQVNTRVJUX0dUKGlkLCAwLCBcXFwic3RydWN0X2hvbGV5XFxcIikpXFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuK1xcdGVyciA9IGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXFxcImNcXFwiLCAxLCAwLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiaG9sZXlfY1xcXCIpKVxcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcbitcXHRlcnIgPSBidGZfX2FkZF9maWVsZChidGYsIFxcXCJ0YWlsXFxcIiwgMSwgOTYsIDApO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJob2xleV90YWlsXFxcIikpXFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAzOyBpKyspIHtcXG4rXFx0XFx0Y2hhciBuYW1lWzE2XTtcXG4rXFxuK1xcdFxcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXFxcIkUlZFxcXCIsIGkpO1xcbitcXG4rXFx0XFx0aWQgPSBidGZfX2FkZF9lbnVtKGJ0ZiwgTlVMTCwgNCk7XFxuK1xcdFxcdGlmICghQVNTRVJUX0dUKGlkLCAwLCBcXFwiYW5vbl9lbnVtXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuK1xcdFxcdGVyciA9IGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBuYW1lLCBpICsgMSk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImVudW1fdmFsXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0aWQgPSBidGZfX2FkZF9zdHJ1Y3QoYnRmLCBcXFwic1xcXCIsIDQpO1xcbitcXHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXFxcInN0cnVjdF9zXFxcIikpXFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuK1xcdGVyciA9IGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXFxcImZcXFwiLCAxLCAwLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic19maWVsZFxcXCIpKVxcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcbitcXHRpZCA9IGJ0Zl9fYWRkX3VuaW9uKGJ0ZiwgXFxcInVcXFwiLCA0KTtcXG4rXFx0aWYgKCFBU1NFUlRfR1QoaWQsIDAsIFxcXCJ1bmlvbl91XFxcIikpXFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuK1xcdGVyciA9IGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXFxcImZcXFwiLCAxLCAwLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidV9maWVsZFxcXCIpKVxcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcbitcXHRidGZfX3NldF9wb2ludGVyX3NpemUoYnRmLCA0KTtcXG4rXFxuK1xcdHJldHVybiBidGY7XFxuK2Vycl9vdXQ6XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBjb3VudF9zdWJzdHIoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSlcXG4re1xcbitcXHRjb25zdCBjaGFyICpwID0gaGF5c3RhY2s7XFxuK1xcdGludCBuID0gMDtcXG4rXFxuK1xcdGZvciAoOyAocCA9IHN0cnN0cihwLCBuZWVkbGUpKTsgcCsrKVxcbitcXHRcXHRuKys7XFxuK1xcbitcXHRyZXR1cm4gbjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zb3J0X3ByZXNlcnZlc190eXBlcyhjb25zdCBjaGFyICpwYXRoKVxcbit7XFxuK1xcdGNoYXIgKnNvcnRlZCA9IE5VTEwsICp1bnNvcnRlZCA9IE5VTEw7XFxuK1xcdGludCBuX3NvcnRlZCwgbl91bnNvcnRlZDtcXG4rXFxuK1xcdHNvcnRlZCA9IGR1bXBfYyhwYXRoLCB0cnVlKTtcXG4rXFx0dW5zb3J0ZWQgPSBkdW1wX2MocGF0aCwgZmFsc2UpO1xcbitcXHRpZiAoIXNvcnRlZCB8fCAhdW5zb3J0ZWQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogQ291bnQgZGVmaW5pdGlvbnMgYnkgdGhlIGNsb3NpbmcgYnJhY2UgaW4gdGhlaXIgZmlyc3QgY29sdW1uLiBDb3VudGluZ1xcbitcXHQgKiBcXFwic3RydWN0XFxcIi9cXFwidW5pb25cXFwiL1xcXCJlbnVtXFxcIiBvcGVuZXJzIGluc3RlYWQgd291bGQgYWxzbyBjb3VudCBmb3J3YXJkXFxuK1xcdCAqIGRlY2xhcmF0aW9ucywgYW5kIHdoaWNoIHR5cGVzIG5lZWQgb25lIGRlcGVuZHMgb24gZW1pc3Npb24gb3JkZXIuXFxuK1xcdCAqL1xcbitcXHRuX3Vuc29ydGVkID0gY291bnRfc3Vic3RyKHVuc29ydGVkLCBcXFwiXFxcXG59XFxcIik7XFxuK1xcdG5fc29ydGVkID0gY291bnRfc3Vic3RyKHNvcnRlZCwgXFxcIlxcXFxufVxcXCIpO1xcbitcXHRBU1NFUlRfR1Qobl91bnNvcnRlZCwgMCwgXFxcInR5cGVzX2VtaXR0ZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKG5fc29ydGVkLCBuX3Vuc29ydGVkLCBcXFwic2FtZV90eXBlX2NvdW50XFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGZyZWUoc29ydGVkKTtcXG4rXFx0ZnJlZSh1bnNvcnRlZCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENoZWNrIG9ubHkgd2hhdCB0aGUgc2VsZnRlc3RzIGJ1aWxkIGNhbm5vdDpcXG4rICogICAtIGJwZl9oZWxwZXJzLmggZGVmaW5lcyBfX2tzeW0gYW5kIF9fd2VhayBhcyB3ZWxsLCBhbmQgbm8gcHJvZ3JhbSB1c2VzXFxuKyAqICAgICBfX2JwZl9mYXN0Y2FsbCwgc28gbG9zaW5nIHRoZSBtYWNybyBibG9jayBjaGFuZ2VzIG5vdGhpbmc7XFxuKyAqICAgLSBidWlsZGluZyB3aXRob3V0IHRoZSBwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXggcHJhZ21hIGlzIGEgc3VwcG9ydGVkIG1vZGVcXG4rICogICAgIChCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYKSwgc28gbG9zaW5nIGl0IG9ubHkgY29zdHMgQ08tUkU7XFxuKyAqICAgLSB0aGUgcGFkZGluZyB3aWR0aCBjb21lcyBmcm9tIHRoZSBCVEYncyBwb2ludGVyIHNpemUsIGFuZCBhIG5hdGl2ZSBidWlsZFxcbisgKiAgICAgbmV2ZXIgcnVucyB0aGUgaG9zdCBicGZ0b29sIG92ZXIgYSBkaWZmZXJlbnRseSBzaXplZCB0YXJnZXQncyBCVEYuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0X2R1bXAoY29uc3QgY2hhciAqcGF0aCwgYm9vbCBzb3J0ZWQpXFxuK3tcXG4rXFx0Y2hhciAqYnVmO1xcbitcXG4rXFx0YnVmID0gZHVtcF9jKHBhdGgsIHNvcnRlZCk7XFxuK1xcdGlmICghYnVmKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRBU1NFUlRfSEFTX1NVQlNUUihidWYsIFxcXCIjZGVmaW5lIF9fa3N5bSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFxcXFxcXFwiLmtzeW1zXFxcXFxcXCIpKSlcXFwiLFxcbitcXHRcXHRcXHQgIFxcXCJrc3ltXFxcIik7XFxuK1xcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXFxcIiNkZWZpbmUgX193ZWFrIF9fYXR0cmlidXRlX18oKHdlYWspKVxcXCIsIFxcXCJ3ZWFrXFxcIik7XFxuK1xcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXFxcIiNkZWZpbmUgX19icGZfZmFzdGNhbGwgX19hdHRyaWJ1dGVfXygoYnBmX2Zhc3RjYWxsKSlcXFwiLFxcbitcXHRcXHRcXHQgIFxcXCJicGZfZmFzdGNhbGxcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXFxcIiNpZm5kZWYgQlBGX05PX1BSRVNFUlZFX0FDQ0VTU19JTkRFWFxcXCIsIFxcXCJwYWlfZ3VhcmRcXFwiKTtcXG4rXFx0QVNTRVJUX0hBU19TVUJTVFIoYnVmLFxcbitcXHRcXHRcXHQgIFxcXCIjcHJhZ21hIGNsYW5nIGF0dHJpYnV0ZSBwdXNoIChfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKSwgYXBwbHlfdG8gPSByZWNvcmQpXFxcIixcXG4rXFx0XFx0XFx0ICBcXFwicGFpX3B1c2hcXFwiKTtcXG4rXFx0QVNTRVJUX0hBU19TVUJTVFIoYnVmLCBcXFwiI3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcG9wXFxcIiwgXFxcInBhaV9wb3BcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXFxcImxvbmc6IDMyO1xcXCIsIFxcXCJ0YXJnZXRfcHRyX3NpemVcXFwiKTtcXG4rXFxuK1xcdGZyZWUoYnVmKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2JwZnRvb2xfYnRmX2R1bXAodm9pZClcXG4re1xcbitcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHRzdHJ1Y3QgYnRmICpidGY7XFxuK1xcbitcXHRidGYgPSBta19idGYoKTtcXG4rXFx0aWYgKCFidGYpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKGJ0Zl90b190bXBmaWxlKGJ0ZiwgcGF0aCwgc2l6ZW9mKHBhdGgpKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiY19zb3J0ZWRcXFwiKSlcXG4rXFx0XFx0dGVzdF9kdW1wKHBhdGgsIHRydWUpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiY191bnNvcnRlZFxcXCIpKVxcbitcXHRcXHR0ZXN0X2R1bXAocGF0aCwgZmFsc2UpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImNfc29ydF9wcmVzZXJ2ZXNfdHlwZXNcXFwiKSlcXG4rXFx0XFx0dGVzdF9zb3J0X3ByZXNlcnZlc190eXBlcyhwYXRoKTtcXG4rXFxuK1xcdHVubGluayhwYXRoKTtcXG4rb3V0OlxcbitcXHRidGZfX2ZyZWUoYnRmKTtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMTowNTozNi40ODg2NDIyNDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NzA3MjE0NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scyAoYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY2YjFlYzFkMmE2MWNlOTJhYTI3ZjExMjNjMGExNTgxZmUzZGFjZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwMTowNTozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcbmluZGV4IGM5NTg5MDI2ZGE4ZDYuLjM0NWQ0OWE5YTIyYzEgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9idGYuY1xuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcbkBAIC04MDUsOSArODA1LDEzIEBAIHN0YXRpYyBpbnQgZHVtcF9idGZfYyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gXG4gXHRcdGlmIChzb3J0X2R1bXApXG4gXHRcdFx0ZGF0dW1zID0gc29ydF9idGZfYyhidGYpO1xuLVx0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuIFx0XHRcdGludCBpZHggPSBkYXR1bXMgPyBkYXR1bXNbaV0uaW5kZXggOiBpO1xuIFxuK1x0XHRcdC8qIHR5cGUgSUQgMCBpcyB2b2lkLCBza2lwIGl0ICovXG4rXHRcdFx0aWYgKCFpZHgpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0XHRlcnIgPSBidGZfZHVtcF9fZHVtcF90eXBlKGQsIGlkeCk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gZG9uZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmNcbmluZGV4IDBhMmE0ZjBhMjc5NGIuLmM0OWZkZDkwZWIwMzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY1xuQEAgLTUzLDYgKzUzLDcgQEAgc3RhdGljIGludCBydW5fY29tbWFuZChjaGFyICphcmdzLCBjaGFyICpvdXRwdXRfYnVmLCBzaXplX3Qgb3V0cHV0X21heF9sZW4pXG4gXHRzdGF0aWMgY2hhciBicGZ0b29sX3BhdGhbUEFUSF9NQVhdID0ge307XG4gXHRib29sIHN1cHByZXNzX291dHB1dCA9ICEob3V0cHV0X2J1ZiBcdTAwMjZcdTAwMjYgb3V0cHV0X21heF9sZW4pO1xuIFx0Y2hhciBjb21tYW5kW0JQRlRPT0xfRlVMTF9DTURfTUFYX0xFTl07XG4rXHRzaXplX3QgbjtcbiBcdEZJTEUgKmY7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTY4LDggKzY5LDEwIEBAIHN0YXRpYyBpbnQgcnVuX2NvbW1hbmQoY2hhciAqYXJncywgY2hhciAqb3V0cHV0X2J1Ziwgc2l6ZV90IG91dHB1dF9tYXhfbGVuKVxuIFx0aWYgKCFmKVxuIFx0XHRyZXR1cm4gMTtcbiBcbi1cdGlmICghc3VwcHJlc3Nfb3V0cHV0KVxuLVx0XHRmcmVhZChvdXRwdXRfYnVmLCAxLCBvdXRwdXRfbWF4X2xlbiwgZik7XG4rXHRpZiAoIXN1cHByZXNzX291dHB1dCkge1xuK1x0XHRuID0gZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4gLSAxLCBmKTtcbitcdFx0b3V0cHV0X2J1ZltuXSA9ICdcXDAnO1xuK1x0fVxuIFx0cmV0ID0gcGNsb3NlKGYpO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yODA1OTgyMGVhMGJlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNcbkBAIC0wLDAgKzEsMjIzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGZ0b29sX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2RlZmluZSBEVU1QX0JVRl9TWlx0KDE2ICogMTAyNClcbitcbitzdGF0aWMgaW50IGJ0Zl90b190bXBmaWxlKHN0cnVjdCBidGYgKmJ0ZiwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfc3opXG4re1xuK1x0Y29uc3Qgdm9pZCAqcmF3O1xuK1x0c3NpemVfdCB3cml0dGVuO1xuK1x0X191MzIgc3o7XG4rXHRpbnQgZmQ7XG4rXG4rXHRyYXcgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgXHUwMDI2c3opO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHJhdywgXCJyYXdfZGF0YVwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0c25wcmludGYocGF0aCwgcGF0aF9zeiwgXCIvdG1wL2JwZnRvb2xfYnRmX2R1bXAuWFhYWFhYXCIpO1xuK1x0ZmQgPSBta3N0ZW1wKHBhdGgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoZmQsIFwibWtzdGVtcFwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0d3JpdHRlbiA9IHdyaXRlKGZkLCByYXcsIHN6KTtcbitcdGNsb3NlKGZkKTtcbitcdGlmICghQVNTRVJUX0VRKHdyaXR0ZW4sIHN6LCBcIndyaXRlX2J0ZlwiKSkge1xuK1x0XHR1bmxpbmsocGF0aCk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY2hhciAqZHVtcF9jKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgc29ydGVkKVxuK3tcbitcdGNoYXIgYXJnc1tNQVhfQlBGVE9PTF9DTURfTEVOXTtcbitcdGNoYXIgKmJ1ZjtcbitcdGludCBlcnI7XG4rXG4rXHRidWYgPSBtYWxsb2MoRFVNUF9CVUZfU1opO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ1ZiwgXCJhbGxvY1wiKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRzbnByaW50ZihhcmdzLCBzaXplb2YoYXJncyksIFwiYnRmIGR1bXAgZmlsZSAlcyBmb3JtYXQgYyVzXCIsXG4rXHRcdCBwYXRoLCBzb3J0ZWQgPyBcIlwiIDogXCIgdW5zb3J0ZWRcIik7XG4rXHRlcnIgPSBnZXRfYnBmdG9vbF9jb21tYW5kX291dHB1dChhcmdzLCBidWYsIERVTVBfQlVGX1NaKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJkdW1wXCIpKSB7XG4rXHRcdGZyZWUoYnVmKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXHRyZXR1cm4gYnVmO1xuK31cbitcbisvKlxuKyAqIHN0cnVjdCBob2xleSB7IGludCBjOyBcdTAwM2MzMiBiaXQgaG9sZVx1MDAzZSBpbnQgdGFpbDsgfTtcbisgKiBlbnVtIHsgRTAgPSAxIH07IGVudW0geyBFMSA9IDIgfTsgZW51bSB7IEUyID0gMyB9O1xuKyAqIHN0cnVjdCBzIHsgaW50IGY7IH07XG4rICogdW5pb24gdSB7IGludCBmOyB9O1xuKyAqXG4rICogT25lIHJlY29yZCB3aXRoIGEgaG9sZSwgYW5kIGEgNC1ieXRlIGxvbmcgdG8gcGFkIGl0IHdpdGguIEhvdyByZWNvcmRzXG4rICogdGhlbXNlbHZlcyBhcmUgcmVuZGVyZWQgaXMgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBidWlsZC5cbisgKiBUaGUgYW5vbnltb3VzIGVudW1zIG1hdHRlciB0byB0aGUgc29ydGluZyBzdWJ0ZXN0LlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgYnRmICpta19idGYodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnRmICpidGY7XG4rXHRpbnQgaWQsIGVyciwgaTtcbitcbitcdGJ0ZiA9IGJ0Zl9fbmV3X2VtcHR5KCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcIm5ld19lbXB0eVwiKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRpZCA9IGJ0Zl9fYWRkX2ludChidGYsIFwiaW50XCIsIDQsIEJURl9JTlRfU0lHTkVEKTtcbitcdGlmICghQVNTRVJUX0VRKGlkLCAxLCBcImludFwiKSlcbitcdFx0Z290byBlcnJfb3V0O1xuK1xuK1x0aWQgPSBidGZfX2FkZF9pbnQoYnRmLCBcImxvbmcgaW50XCIsIDQsIEJURl9JTlRfU0lHTkVEKTtcbitcdGlmICghQVNTRVJUX0dUKGlkLCAwLCBcImxvbmdcIikpXG4rXHRcdGdvdG8gZXJyX291dDtcbitcbitcdGlkID0gYnRmX19hZGRfc3RydWN0KGJ0ZiwgXCJob2xleVwiLCAxNik7XG4rXHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXCJzdHJ1Y3RfaG9sZXlcIikpXG4rXHRcdGdvdG8gZXJyX291dDtcbitcbitcdGVyciA9IGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXCJjXCIsIDEsIDAsIDApO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImhvbGV5X2NcIikpXG4rXHRcdGdvdG8gZXJyX291dDtcbitcbitcdGVyciA9IGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXCJ0YWlsXCIsIDEsIDk2LCAwKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJob2xleV90YWlsXCIpKVxuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAzOyBpKyspIHtcbitcdFx0Y2hhciBuYW1lWzE2XTtcbitcbitcdFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcIkUlZFwiLCBpKTtcbitcbitcdFx0aWQgPSBidGZfX2FkZF9lbnVtKGJ0ZiwgTlVMTCwgNCk7XG4rXHRcdGlmICghQVNTRVJUX0dUKGlkLCAwLCBcImFub25fZW51bVwiKSlcbitcdFx0XHRnb3RvIGVycl9vdXQ7XG4rXG4rXHRcdGVyciA9IGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBuYW1lLCBpICsgMSk7XG4rXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCJlbnVtX3ZhbFwiKSlcbitcdFx0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRpZCA9IGJ0Zl9fYWRkX3N0cnVjdChidGYsIFwic1wiLCA0KTtcbitcdGlmICghQVNTRVJUX0dUKGlkLCAwLCBcInN0cnVjdF9zXCIpKVxuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXG4rXHRlcnIgPSBidGZfX2FkZF9maWVsZChidGYsIFwiZlwiLCAxLCAwLCAwKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzX2ZpZWxkXCIpKVxuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXG4rXHRpZCA9IGJ0Zl9fYWRkX3VuaW9uKGJ0ZiwgXCJ1XCIsIDQpO1xuK1x0aWYgKCFBU1NFUlRfR1QoaWQsIDAsIFwidW5pb25fdVwiKSlcbitcdFx0Z290byBlcnJfb3V0O1xuK1xuK1x0ZXJyID0gYnRmX19hZGRfZmllbGQoYnRmLCBcImZcIiwgMSwgMCwgMCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidV9maWVsZFwiKSlcbitcdFx0Z290byBlcnJfb3V0O1xuK1xuK1x0YnRmX19zZXRfcG9pbnRlcl9zaXplKGJ0ZiwgNCk7XG4rXG4rXHRyZXR1cm4gYnRmO1xuK2Vycl9vdXQ6XG4rXHRidGZfX2ZyZWUoYnRmKTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IGNvdW50X3N1YnN0cihjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKVxuK3tcbitcdGNvbnN0IGNoYXIgKnAgPSBoYXlzdGFjaztcbitcdGludCBuID0gMDtcbitcbitcdGZvciAoOyAocCA9IHN0cnN0cihwLCBuZWVkbGUpKTsgcCsrKVxuK1x0XHRuKys7XG4rXG4rXHRyZXR1cm4gbjtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zb3J0X3ByZXNlcnZlc190eXBlcyhjb25zdCBjaGFyICpwYXRoKVxuK3tcbitcdGNoYXIgKnNvcnRlZCA9IE5VTEwsICp1bnNvcnRlZCA9IE5VTEw7XG4rXHRpbnQgbl9zb3J0ZWQsIG5fdW5zb3J0ZWQ7XG4rXG4rXHRzb3J0ZWQgPSBkdW1wX2MocGF0aCwgdHJ1ZSk7XG4rXHR1bnNvcnRlZCA9IGR1bXBfYyhwYXRoLCBmYWxzZSk7XG4rXHRpZiAoIXNvcnRlZCB8fCAhdW5zb3J0ZWQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LypcbitcdCAqIENvdW50IGRlZmluaXRpb25zIGJ5IHRoZSBjbG9zaW5nIGJyYWNlIGluIHRoZWlyIGZpcnN0IGNvbHVtbi4gQ291bnRpbmdcbitcdCAqIFwic3RydWN0XCIvXCJ1bmlvblwiL1wiZW51bVwiIG9wZW5lcnMgaW5zdGVhZCB3b3VsZCBhbHNvIGNvdW50IGZvcndhcmRcbitcdCAqIGRlY2xhcmF0aW9ucywgYW5kIHdoaWNoIHR5cGVzIG5lZWQgb25lIGRlcGVuZHMgb24gZW1pc3Npb24gb3JkZXIuXG4rXHQgKi9cbitcdG5fdW5zb3J0ZWQgPSBjb3VudF9zdWJzdHIodW5zb3J0ZWQsIFwiXFxufVwiKTtcbitcdG5fc29ydGVkID0gY291bnRfc3Vic3RyKHNvcnRlZCwgXCJcXG59XCIpO1xuK1x0QVNTRVJUX0dUKG5fdW5zb3J0ZWQsIDAsIFwidHlwZXNfZW1pdHRlZFwiKTtcbitcdEFTU0VSVF9FUShuX3NvcnRlZCwgbl91bnNvcnRlZCwgXCJzYW1lX3R5cGVfY291bnRcIik7XG4rXG4rb3V0OlxuK1x0ZnJlZShzb3J0ZWQpO1xuK1x0ZnJlZSh1bnNvcnRlZCk7XG4rfVxuK1xuKy8qXG4rICogQ2hlY2sgb25seSB3aGF0IHRoZSBzZWxmdGVzdHMgYnVpbGQgY2Fubm90OlxuKyAqICAgLSBicGZfaGVscGVycy5oIGRlZmluZXMgX19rc3ltIGFuZCBfX3dlYWsgYXMgd2VsbCwgYW5kIG5vIHByb2dyYW0gdXNlc1xuKyAqICAgICBfX2JwZl9mYXN0Y2FsbCwgc28gbG9zaW5nIHRoZSBtYWNybyBibG9jayBjaGFuZ2VzIG5vdGhpbmc7XG4rICogICAtIGJ1aWxkaW5nIHdpdGhvdXQgdGhlIHByZXNlcnZlX2FjY2Vzc19pbmRleCBwcmFnbWEgaXMgYSBzdXBwb3J0ZWQgbW9kZVxuKyAqICAgICAoQlBGX05PX1BSRVNFUlZFX0FDQ0VTU19JTkRFWCksIHNvIGxvc2luZyBpdCBvbmx5IGNvc3RzIENPLVJFO1xuKyAqICAgLSB0aGUgcGFkZGluZyB3aWR0aCBjb21lcyBmcm9tIHRoZSBCVEYncyBwb2ludGVyIHNpemUsIGFuZCBhIG5hdGl2ZSBidWlsZFxuKyAqICAgICBuZXZlciBydW5zIHRoZSBob3N0IGJwZnRvb2wgb3ZlciBhIGRpZmZlcmVudGx5IHNpemVkIHRhcmdldCdzIEJURi5cbisgKi9cbitzdGF0aWMgdm9pZCB0ZXN0X2R1bXAoY29uc3QgY2hhciAqcGF0aCwgYm9vbCBzb3J0ZWQpXG4re1xuK1x0Y2hhciAqYnVmO1xuK1xuK1x0YnVmID0gZHVtcF9jKHBhdGgsIHNvcnRlZCk7XG4rXHRpZiAoIWJ1ZilcbitcdFx0cmV0dXJuO1xuK1xuK1x0QVNTRVJUX0hBU19TVUJTVFIoYnVmLCBcIiNkZWZpbmUgX19rc3ltIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oXFxcIi5rc3ltc1xcXCIpKSlcIixcbitcdFx0XHQgIFwia3N5bVwiKTtcbitcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXCIjZGVmaW5lIF9fd2VhayBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSlcIiwgXCJ3ZWFrXCIpO1xuK1x0QVNTRVJUX0hBU19TVUJTVFIoYnVmLCBcIiNkZWZpbmUgX19icGZfZmFzdGNhbGwgX19hdHRyaWJ1dGVfXygoYnBmX2Zhc3RjYWxsKSlcIixcbitcdFx0XHQgIFwiYnBmX2Zhc3RjYWxsXCIpO1xuK1xuK1x0QVNTRVJUX0hBU19TVUJTVFIoYnVmLCBcIiNpZm5kZWYgQlBGX05PX1BSRVNFUlZFX0FDQ0VTU19JTkRFWFwiLCBcInBhaV9ndWFyZFwiKTtcbitcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZixcbitcdFx0XHQgIFwiI3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcHVzaCAoX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSksIGFwcGx5X3RvID0gcmVjb3JkKVwiLFxuK1x0XHRcdCAgXCJwYWlfcHVzaFwiKTtcbitcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXCIjcHJhZ21hIGNsYW5nIGF0dHJpYnV0ZSBwb3BcIiwgXCJwYWlfcG9wXCIpO1xuK1xuK1x0QVNTRVJUX0hBU19TVUJTVFIoYnVmLCBcImxvbmc6IDMyO1wiLCBcInRhcmdldF9wdHJfc2l6ZVwiKTtcbitcbitcdGZyZWUoYnVmKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2JwZnRvb2xfYnRmX2R1bXAodm9pZClcbit7XG4rXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0c3RydWN0IGJ0ZiAqYnRmO1xuK1xuK1x0YnRmID0gbWtfYnRmKCk7XG4rXHRpZiAoIWJ0ZilcbitcdFx0cmV0dXJuO1xuK1x0aWYgKGJ0Zl90b190bXBmaWxlKGJ0ZiwgcGF0aCwgc2l6ZW9mKHBhdGgpKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNfc29ydGVkXCIpKVxuK1x0XHR0ZXN0X2R1bXAocGF0aCwgdHJ1ZSk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNfdW5zb3J0ZWRcIikpXG4rXHRcdHRlc3RfZHVtcChwYXRoLCBmYWxzZSk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNfc29ydF9wcmVzZXJ2ZXNfdHlwZXNcIikpXG4rXHRcdHRlc3Rfc29ydF9wcmVzZXJ2ZXNfdHlwZXMocGF0aCk7XG4rXG4rXHR1bmxpbmsocGF0aCk7XG4rb3V0OlxuK1x0YnRmX19mcmVlKGJ0Zik7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDE6MDU6MzYuNDg4NjQzNDY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTcwNzE2OTE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmcgPSBGYWxzZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIHRvdWNoZXMgYHRvb2xzL2JwZi9icGZ0b29sL2J0Zi5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY2AsIGFuZCBhZGRzIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNgLiBTdHJhaWdodCBhd2F5LCBJJ20gdGhpbmtpbmcsIHRoZXNlIGFyZSBhbGwgaW4gdGhlIGB0b29sc2AgYW5kIGBzZWxmdGVzdHNgIGRpcmVjdG9yaWVzLCB3aGljaCBzY3JlYW1zIFwidXNlcnNwYWNlLlwiIEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgYXJlIHJlbGV2YW50IHRvIHRoZSBrZXJuZWwgYW5kIGlmIHRoZXkgcmVwcmVzZW50IGFyZWFzIHRoZSBmdXp6ZXIgKHN5emthbGxlcikgd291bGQgdGFyZ2V0LlxuXG5UaGUgcHJvbXB0IGxheXMgb3V0IHNwZWNpZmljIGNvbmRpdGlvbnMgZm9yIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQgbWVudGlvbnMgbW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBjb2RlLCBhbmQgZHJpdmVyIGAucmVtb3ZlYCBmdW5jdGlvbnMgc2hvdWxkIHRyaWdnZXIgYSBgZmFsc2VgIHJlc3BvbnNlLiBXaGlsZSB0aGUgcHJvbXB0IGRvZXNuJ3QgZXhwbGljaXRseSAqY2FsbCBvdXQqIHRvb2xzIGFuZCBzZWxmdGVzdHMsIEkga25vdyB0aGF0IGNoYW5nZXMgdG8gdXNlcnNwYWNlIHRvb2xzIGxpa2UgYGJwZnRvb2xgIGFuZCB0ZXN0cyB0eXBpY2FsbHkgZG9uJ3QgYWZmZWN0IHRoZSBrZXJuZWwgaXRzZWxmLCBhbmQgc3l6a2FsbGVyIGlzIGZvY3VzZWQgb24ga2VybmVsIHN5c2NhbGxzIGFuZCB0aHVzIG5vdCBjb25jZXJuZWQgd2l0aCB0aGVzZSBjaGFuZ2VzLlxuXG5JJ20gbWFraW5nIGEgbWVudGFsIG5vdGUgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIGBicGZ0b29sYCBzb3VyY2UgaXMgaW5kZWVkIGRpc3RpbmN0IGZyb20gdGhlIGNvcmUga2VybmVsLCBldmVuIGlmIGl0J3Mgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgaXRzZWxmLiBOb3csIHRoZSBwcm9tcHQgYWxzbyBzYXlzIHRvIGNoZWNrIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBhbmQgYXJjaGl0ZWN0dXJlcy4gSXQgc2F5cyBcImlmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCIgVGhhdCdzIHRoZSBrZXkuIFNpbmNlIHRoZSBwYXRjaCBpcyAqb25seSogbW9kaWZ5aW5nIHRoZXNlIHRvb2wgYW5kIHRlc3QgZmlsZXMsIGl0IGRvZXNuJ3QgdG91Y2ggY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIEkgYW0gdGhlcmVmb3JlIGNvbmZpZGVudCB0aGF0IFdvcnRoRnV6emluZyBzaG91bGQgYmUgc2V0IHRvICpmYWxzZSouXG5cbkkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzLiBMZXQgbWUgc2VlLlxuXG4qICAgYHRvb2xzL2JwZi9icGZ0b29sL2J0Zi5jYDogQSBidWcgZml4LiBUaGUgb3JpZ2luYWwgY29kZSdzIGxvb3AgaGFkIGFuIG9mZi1ieS1vbmUgZXJyb3IgKG5vdyBjb3JyZWN0ZWQpLiBUaGUgY29kZSBub3cgc2tpcHMgdHlwZSBJRCAwLCB3aGljaCByZXByZXNlbnRzIHZvaWQsIGluIEJURiB0eXBlIHNvcnRpbmcuIEl0J3MgYSBjb2RlIGNvcnJlY3Rpb24gaW4gYSB1c2VyIHRvb2wuXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY2A6IEEgc2VsZnRlc3QgaGVscGVyIGlzIGZpeGVkIHRvIG51bGwtdGVybWluYXRlIGEgYnVmZmVyLiBJdCdzIG1ha2luZyB0aGUgY29kZSBzYWZlciBhbmQgbW9yZSByb2J1c3QgaW4gdGhlIHNlbGZ0ZXN0IGNvbnRleHQuXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZnRvb2xfYnRmX2R1bXAuY2A6IFRoaXMgaXMgYSBuZXcgc2VsZnRlc3QgZm9yIGBicGZ0b29sIGJ0ZiBkdW1wYC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBrZXJuZWwsIHRoZXkgYXJlIHB1cmVseSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHRlc3RzLiBUaGVyZWZvcmUsIEkgYW0gY29tZm9ydGFibGUgd2l0aCByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDAsIk91dHB1dFRva2VucyI6NjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMTowNTo0Ni4xOTU4MTU1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scyAoYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzIChicGZ0b29sKSBhbmQgc2VsZnRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDE6MDU6NDYuMTk1ODU4OTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbqkn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 00:21:36 +0000 UTC FinishedAt: 2026-08-20 01:05:47 +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+CgkJCTx0ZD4yMDI2LzA4LzIwIDAxOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGJwZnRvb2wpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAxOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjZiMWVjMWQyYTYxY2U5MmFhMjdmMTEyM2MwYTE1ODFmZTNkYWNlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDAxOjA1OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcbmluZGV4IGM5NTg5MDI2ZGE4ZDYuLjM0NWQ0OWE5YTIyYzEgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9idGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcbkBAIC04MDUsOSAmIzQzOzgwNSwxMyBAQCBzdGF0aWMgaW50IGR1bXBfYnRmX2MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFxuIFx0XHRpZiAoc29ydF9kdW1wKVxuIFx0XHRcdGRhdHVtcyA9IHNvcnRfYnRmX2MoYnRmKTtcbi1cdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdGludCBpZHggPSBkYXR1bXMgPyBkYXR1bXNbaV0uaW5kZXggOiBpO1xuIFxuJiM0MztcdFx0XHQvKiB0eXBlIElEIDAgaXMgdm9pZCwgc2tpcCBpdCAqL1xuJiM0MztcdFx0XHRpZiAoIWlkeClcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdFx0ZXJyID0gYnRmX2R1bXBfX2R1bXBfdHlwZShkLCBpZHgpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIGRvbmU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXG5pbmRleCAwYTJhNGYwYTI3OTRiLi5jNDlmZGQ5MGViMDMzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmNcbkBAIC01Myw2ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW50IHJ1bl9jb21tYW5kKGNoYXIgKmFyZ3MsIGNoYXIgKm91dHB1dF9idWYsIHNpemVfdCBvdXRwdXRfbWF4X2xlbilcbiBcdHN0YXRpYyBjaGFyIGJwZnRvb2xfcGF0aFtQQVRIX01BWF0gPSB7fTtcbiBcdGJvb2wgc3VwcHJlc3Nfb3V0cHV0ID0gIShvdXRwdXRfYnVmIFx1MDAyNlx1MDAyNiBvdXRwdXRfbWF4X2xlbik7XG4gXHRjaGFyIGNvbW1hbmRbQlBGVE9PTF9GVUxMX0NNRF9NQVhfTEVOXTtcbiYjNDM7XHRzaXplX3QgbjtcbiBcdEZJTEUgKmY7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTY4LDggJiM0Mzs2OSwxMCBAQCBzdGF0aWMgaW50IHJ1bl9jb21tYW5kKGNoYXIgKmFyZ3MsIGNoYXIgKm91dHB1dF9idWYsIHNpemVfdCBvdXRwdXRfbWF4X2xlbilcbiBcdGlmICghZilcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAoIXN1cHByZXNzX291dHB1dClcbi1cdFx0ZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4sIGYpO1xuJiM0MztcdGlmICghc3VwcHJlc3Nfb3V0cHV0KSB7XG4mIzQzO1x0XHRuID0gZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4gLSAxLCBmKTtcbiYjNDM7XHRcdG91dHB1dF9idWZbbl0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdH1cbiBcdHJldCA9IHBjbG9zZShmKTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjgwNTk4MjBlYTBiZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jXG5AQCAtMCwwICYjNDM7MSwyMjMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZnRvb2xfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBEVU1QX0JVRl9TWlx0KDE2ICogMTAyNClcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnRmX3RvX3RtcGZpbGUoc3RydWN0IGJ0ZiAqYnRmLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9zeilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHZvaWQgKnJhdztcbiYjNDM7XHRzc2l6ZV90IHdyaXR0ZW47XG4mIzQzO1x0X191MzIgc3o7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRyYXcgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgXHUwMDI2c3opO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihyYXcsIFwmIzM0O3Jhd19kYXRhXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgcGF0aF9zeiwgXCYjMzQ7L3RtcC9icGZ0b29sX2J0Zl9kdW1wLlhYWFhYWFwmIzM0Oyk7XG4mIzQzO1x0ZmQgPSBta3N0ZW1wKHBhdGgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKGZkLCBcJiMzNDtta3N0ZW1wXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0d3JpdHRlbiA9IHdyaXRlKGZkLCByYXcsIHN6KTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEod3JpdHRlbiwgc3osIFwmIzM0O3dyaXRlX2J0ZlwmIzM0OykpIHtcbiYjNDM7XHRcdHVubGluayhwYXRoKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjaGFyICpkdW1wX2MoY29uc3QgY2hhciAqcGF0aCwgYm9vbCBzb3J0ZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGFyZ3NbTUFYX0JQRlRPT0xfQ01EX0xFTl07XG4mIzQzO1x0Y2hhciAqYnVmO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGJ1ZiA9IG1hbGxvYyhEVU1QX0JVRl9TWik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ1ZiwgXCYjMzQ7YWxsb2NcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGFyZ3MsIHNpemVvZihhcmdzKSwgXCYjMzQ7YnRmIGR1bXAgZmlsZSAlcyBmb3JtYXQgYyVzXCYjMzQ7LFxuJiM0MztcdFx0IHBhdGgsIHNvcnRlZCA/IFwmIzM0O1wmIzM0OyA6IFwmIzM0OyB1bnNvcnRlZFwmIzM0Oyk7XG4mIzQzO1x0ZXJyID0gZ2V0X2JwZnRvb2xfY29tbWFuZF9vdXRwdXQoYXJncywgYnVmLCBEVU1QX0JVRl9TWik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtkdW1wXCYjMzQ7KSkge1xuJiM0MztcdFx0ZnJlZShidWYpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBidWY7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIHN0cnVjdCBob2xleSB7IGludCBjOyBcdTAwM2MzMiBiaXQgaG9sZVx1MDAzZSBpbnQgdGFpbDsgfTtcbiYjNDM7ICogZW51bSB7IEUwID0gMSB9OyBlbnVtIHsgRTEgPSAyIH07IGVudW0geyBFMiA9IDMgfTtcbiYjNDM7ICogc3RydWN0IHMgeyBpbnQgZjsgfTtcbiYjNDM7ICogdW5pb24gdSB7IGludCBmOyB9O1xuJiM0MzsgKlxuJiM0MzsgKiBPbmUgcmVjb3JkIHdpdGggYSBob2xlLCBhbmQgYSA0LWJ5dGUgbG9uZyB0byBwYWQgaXQgd2l0aC4gSG93IHJlY29yZHNcbiYjNDM7ICogdGhlbXNlbHZlcyBhcmUgcmVuZGVyZWQgaXMgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBidWlsZC5cbiYjNDM7ICogVGhlIGFub255bW91cyBlbnVtcyBtYXR0ZXIgdG8gdGhlIHNvcnRpbmcgc3VidGVzdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgYnRmICpta19idGYodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidGYgKmJ0ZjtcbiYjNDM7XHRpbnQgaWQsIGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0YnRmID0gYnRmX19uZXdfZW1wdHkoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcJiMzNDtuZXdfZW1wdHlcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGlkID0gYnRmX19hZGRfaW50KGJ0ZiwgXCYjMzQ7aW50XCYjMzQ7LCA0LCBCVEZfSU5UX1NJR05FRCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoaWQsIDEsIFwmIzM0O2ludFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1xuJiM0MztcdGlkID0gYnRmX19hZGRfaW50KGJ0ZiwgXCYjMzQ7bG9uZyBpbnRcJiMzNDssIDQsIEJURl9JTlRfU0lHTkVEKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXCYjMzQ7bG9uZ1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1xuJiM0MztcdGlkID0gYnRmX19hZGRfc3RydWN0KGJ0ZiwgXCYjMzQ7aG9sZXlcJiMzNDssIDE2KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXCYjMzQ7c3RydWN0X2hvbGV5XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnRmX19hZGRfZmllbGQoYnRmLCBcJiMzNDtjXCYjMzQ7LCAxLCAwLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2hvbGV5X2NcJiMzNDspKVxuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBidGZfX2FkZF9maWVsZChidGYsIFwmIzM0O3RhaWxcJiMzNDssIDEsIDk2LCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2hvbGV5X3RhaWxcJiMzNDspKVxuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y2hhciBuYW1lWzE2XTtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFwmIzM0O0UlZFwmIzM0OywgaSk7XG4mIzQzO1xuJiM0MztcdFx0aWQgPSBidGZfX2FkZF9lbnVtKGJ0ZiwgTlVMTCwgNCk7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXCYjMzQ7YW5vbl9lbnVtXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBuYW1lLCBpICYjNDM7IDEpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtlbnVtX3ZhbFwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlkID0gYnRmX19hZGRfc3RydWN0KGJ0ZiwgXCYjMzQ7c1wmIzM0OywgNCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1QoaWQsIDAsIFwmIzM0O3N0cnVjdF9zXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnRmX19hZGRfZmllbGQoYnRmLCBcJiMzNDtmXCYjMzQ7LCAxLCAwLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NfZmllbGRcJiMzNDspKVxuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcbiYjNDM7XHRpZCA9IGJ0Zl9fYWRkX3VuaW9uKGJ0ZiwgXCYjMzQ7dVwmIzM0OywgNCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR1QoaWQsIDAsIFwmIzM0O3VuaW9uX3VcJiMzNDspKVxuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBidGZfX2FkZF9maWVsZChidGYsIFwmIzM0O2ZcJiMzNDssIDEsIDAsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dV9maWVsZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1xuJiM0MztcdGJ0Zl9fc2V0X3BvaW50ZXJfc2l6ZShidGYsIDQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYnRmO1xuJiM0MztlcnJfb3V0OlxuJiM0MztcdGJ0Zl9fZnJlZShidGYpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNvdW50X3N1YnN0cihjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqcCA9IGhheXN0YWNrO1xuJiM0MztcdGludCBuID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IChwID0gc3Ryc3RyKHAsIG5lZWRsZSkpOyBwJiM0MzsmIzQzOylcbiYjNDM7XHRcdG4mIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zb3J0X3ByZXNlcnZlc190eXBlcyhjb25zdCBjaGFyICpwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqc29ydGVkID0gTlVMTCwgKnVuc29ydGVkID0gTlVMTDtcbiYjNDM7XHRpbnQgbl9zb3J0ZWQsIG5fdW5zb3J0ZWQ7XG4mIzQzO1xuJiM0MztcdHNvcnRlZCA9IGR1bXBfYyhwYXRoLCB0cnVlKTtcbiYjNDM7XHR1bnNvcnRlZCA9IGR1bXBfYyhwYXRoLCBmYWxzZSk7XG4mIzQzO1x0aWYgKCFzb3J0ZWQgfHwgIXVuc29ydGVkKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ291bnQgZGVmaW5pdGlvbnMgYnkgdGhlIGNsb3NpbmcgYnJhY2UgaW4gdGhlaXIgZmlyc3QgY29sdW1uLiBDb3VudGluZ1xuJiM0MztcdCAqIFwmIzM0O3N0cnVjdFwmIzM0Oy9cJiMzNDt1bmlvblwmIzM0Oy9cJiMzNDtlbnVtXCYjMzQ7IG9wZW5lcnMgaW5zdGVhZCB3b3VsZCBhbHNvIGNvdW50IGZvcndhcmRcbiYjNDM7XHQgKiBkZWNsYXJhdGlvbnMsIGFuZCB3aGljaCB0eXBlcyBuZWVkIG9uZSBkZXBlbmRzIG9uIGVtaXNzaW9uIG9yZGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdG5fdW5zb3J0ZWQgPSBjb3VudF9zdWJzdHIodW5zb3J0ZWQsIFwmIzM0O1xcbn1cJiMzNDspO1xuJiM0MztcdG5fc29ydGVkID0gY291bnRfc3Vic3RyKHNvcnRlZCwgXCYjMzQ7XFxufVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0dUKG5fdW5zb3J0ZWQsIDAsIFwmIzM0O3R5cGVzX2VtaXR0ZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShuX3NvcnRlZCwgbl91bnNvcnRlZCwgXCYjMzQ7c2FtZV90eXBlX2NvdW50XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRmcmVlKHNvcnRlZCk7XG4mIzQzO1x0ZnJlZSh1bnNvcnRlZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENoZWNrIG9ubHkgd2hhdCB0aGUgc2VsZnRlc3RzIGJ1aWxkIGNhbm5vdDpcbiYjNDM7ICogICAtIGJwZl9oZWxwZXJzLmggZGVmaW5lcyBfX2tzeW0gYW5kIF9fd2VhayBhcyB3ZWxsLCBhbmQgbm8gcHJvZ3JhbSB1c2VzXG4mIzQzOyAqICAgICBfX2JwZl9mYXN0Y2FsbCwgc28gbG9zaW5nIHRoZSBtYWNybyBibG9jayBjaGFuZ2VzIG5vdGhpbmc7XG4mIzQzOyAqICAgLSBidWlsZGluZyB3aXRob3V0IHRoZSBwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXggcHJhZ21hIGlzIGEgc3VwcG9ydGVkIG1vZGVcbiYjNDM7ICogICAgIChCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYKSwgc28gbG9zaW5nIGl0IG9ubHkgY29zdHMgQ08tUkU7XG4mIzQzOyAqICAgLSB0aGUgcGFkZGluZyB3aWR0aCBjb21lcyBmcm9tIHRoZSBCVEYmIzM5O3MgcG9pbnRlciBzaXplLCBhbmQgYSBuYXRpdmUgYnVpbGRcbiYjNDM7ICogICAgIG5ldmVyIHJ1bnMgdGhlIGhvc3QgYnBmdG9vbCBvdmVyIGEgZGlmZmVyZW50bHkgc2l6ZWQgdGFyZ2V0JiMzOTtzIEJURi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZHVtcChjb25zdCBjaGFyICpwYXRoLCBib29sIHNvcnRlZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgKmJ1ZjtcbiYjNDM7XG4mIzQzO1x0YnVmID0gZHVtcF9jKHBhdGgsIHNvcnRlZCk7XG4mIzQzO1x0aWYgKCFidWYpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXCYjMzQ7I2RlZmluZSBfX2tzeW0gX19hdHRyaWJ1dGVfXygoc2VjdGlvbihcXFwmIzM0Oy5rc3ltc1xcXCYjMzQ7KSkpXCYjMzQ7LFxuJiM0MztcdFx0XHQgIFwmIzM0O2tzeW1cJiMzNDspO1xuJiM0MztcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXCYjMzQ7I2RlZmluZSBfX3dlYWsgX19hdHRyaWJ1dGVfXygod2VhaykpXCYjMzQ7LCBcJiMzNDt3ZWFrXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfSEFTX1NVQlNUUihidWYsIFwmIzM0OyNkZWZpbmUgX19icGZfZmFzdGNhbGwgX19hdHRyaWJ1dGVfXygoYnBmX2Zhc3RjYWxsKSlcJiMzNDssXG4mIzQzO1x0XHRcdCAgXCYjMzQ7YnBmX2Zhc3RjYWxsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0hBU19TVUJTVFIoYnVmLCBcJiMzNDsjaWZuZGVmIEJQRl9OT19QUkVTRVJWRV9BQ0NFU1NfSU5ERVhcJiMzNDssIFwmIzM0O3BhaV9ndWFyZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0hBU19TVUJTVFIoYnVmLFxuJiM0MztcdFx0XHQgIFwmIzM0OyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHB1c2ggKF9fYXR0cmlidXRlX18oKHByZXNlcnZlX2FjY2Vzc19pbmRleCkpLCBhcHBseV90byA9IHJlY29yZClcJiMzNDssXG4mIzQzO1x0XHRcdCAgXCYjMzQ7cGFpX3B1c2hcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXCYjMzQ7I3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcG9wXCYjMzQ7LCBcJiMzNDtwYWlfcG9wXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0hBU19TVUJTVFIoYnVmLCBcJiMzNDtsb25nOiAzMjtcJiMzNDssIFwmIzM0O3RhcmdldF9wdHJfc2l6ZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGZyZWUoYnVmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2JwZnRvb2xfYnRmX2R1bXAodm9pZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0c3RydWN0IGJ0ZiAqYnRmO1xuJiM0MztcbiYjNDM7XHRidGYgPSBta19idGYoKTtcbiYjNDM7XHRpZiAoIWJ0ZilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpZiAoYnRmX3RvX3RtcGZpbGUoYnRmLCBwYXRoLCBzaXplb2YocGF0aCkpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2Nfc29ydGVkXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfZHVtcChwYXRoLCB0cnVlKTtcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtjX3Vuc29ydGVkXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfZHVtcChwYXRoLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2Nfc29ydF9wcmVzZXJ2ZXNfdHlwZXNcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9zb3J0X3ByZXNlcnZlc190eXBlcyhwYXRoKTtcbiYjNDM7XG4mIzQzO1x0dW5saW5rKHBhdGgpO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnRmX19mcmVlKGJ0Zik7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMTowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGJwZnRvb2wpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjZiMWVjMWQyYTYxY2U5MmFhMjdmMTEyM2MwYTE1ODFmZTNkYWNlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDAxOjA1OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmMgYi90b29scy9icGYvYnBmdG9vbC9idGYuYwppbmRleCBjOTU4OTAyNmRhOGQ2Li4zNDVkNDlhOWEyMmMxIDEwMDY0NAotLS0gYS90b29scy9icGYvYnBmdG9vbC9idGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9idGYuYwpAQCAtODA1LDkgJiM0Mzs4MDUsMTMgQEAgc3RhdGljIGludCBkdW1wX2J0Zl9jKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKIAogCQlpZiAoc29ydF9kdW1wKQogCQkJZGF0dW1zID0gc29ydF9idGZfYyhidGYpOwotCQlmb3IgKGkgPSAxOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IGNudDsgaSYjNDM7JiM0MzspIHsKIAkJCWludCBpZHggPSBkYXR1bXMgPyBkYXR1bXNbaV0uaW5kZXggOiBpOwogCiYjNDM7CQkJLyogdHlwZSBJRCAwIGlzIHZvaWQsIHNraXAgaXQgKi8KJiM0MzsJCQlpZiAoIWlkeCkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiAJCQllcnIgPSBidGZfZHVtcF9fZHVtcF90eXBlKGQsIGlkeCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gZG9uZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuYwppbmRleCAwYTJhNGYwYTI3OTRiLi5jNDlmZGQ5MGViMDMzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jCkBAIC01Myw2ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW50IHJ1bl9jb21tYW5kKGNoYXIgKmFyZ3MsIGNoYXIgKm91dHB1dF9idWYsIHNpemVfdCBvdXRwdXRfbWF4X2xlbikKIAlzdGF0aWMgY2hhciBicGZ0b29sX3BhdGhbUEFUSF9NQVhdID0ge307CiAJYm9vbCBzdXBwcmVzc19vdXRwdXQgPSAhKG91dHB1dF9idWYgJmFtcDsmYW1wOyBvdXRwdXRfbWF4X2xlbik7CiAJY2hhciBjb21tYW5kW0JQRlRPT0xfRlVMTF9DTURfTUFYX0xFTl07CiYjNDM7CXNpemVfdCBuOwogCUZJTEUgKmY7CiAJaW50IHJldDsKIApAQCAtNjgsOCAmIzQzOzY5LDEwIEBAIHN0YXRpYyBpbnQgcnVuX2NvbW1hbmQoY2hhciAqYXJncywgY2hhciAqb3V0cHV0X2J1Ziwgc2l6ZV90IG91dHB1dF9tYXhfbGVuKQogCWlmICghZikKIAkJcmV0dXJuIDE7CiAKLQlpZiAoIXN1cHByZXNzX291dHB1dCkKLQkJZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4sIGYpOwomIzQzOwlpZiAoIXN1cHByZXNzX291dHB1dCkgewomIzQzOwkJbiA9IGZyZWFkKG91dHB1dF9idWYsIDEsIG91dHB1dF9tYXhfbGVuIC0gMSwgZik7CiYjNDM7CQlvdXRwdXRfYnVmW25dID0gJiMzOTtcMCYjMzk7OwomIzQzOwl9CiAJcmV0ID0gcGNsb3NlKGYpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZnRvb2xfYnRmX2R1bXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZnRvb2xfYnRmX2R1bXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4yODA1OTgyMGVhMGJlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jCkBAIC0wLDAgJiM0MzsxLDIyMyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmdG9vbF9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9idGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBEVU1QX0JVRl9TWgkoMTYgKiAxMDI0KQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnRmX3RvX3RtcGZpbGUoc3RydWN0IGJ0ZiAqYnRmLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9zeikKJiM0Mzt7CiYjNDM7CWNvbnN0IHZvaWQgKnJhdzsKJiM0MzsJc3NpemVfdCB3cml0dGVuOwomIzQzOwlfX3UzMiBzejsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlyYXcgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgJmFtcDtzeik7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihyYXcsICYjMzQ7cmF3X2RhdGEmIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHBhdGhfc3osICYjMzQ7L3RtcC9icGZ0b29sX2J0Zl9kdW1wLlhYWFhYWCYjMzQ7KTsKJiM0MzsJZmQgPSBta3N0ZW1wKHBhdGgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChmZCwgJiMzNDtta3N0ZW1wJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwl3cml0dGVuID0gd3JpdGUoZmQsIHJhdywgc3opOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHdyaXR0ZW4sIHN6LCAmIzM0O3dyaXRlX2J0ZiYjMzQ7KSkgewomIzQzOwkJdW5saW5rKHBhdGgpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqZHVtcF9jKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgc29ydGVkKQomIzQzO3sKJiM0MzsJY2hhciBhcmdzW01BWF9CUEZUT09MX0NNRF9MRU5dOwomIzQzOwljaGFyICpidWY7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWJ1ZiA9IG1hbGxvYyhEVU1QX0JVRl9TWik7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihidWYsICYjMzQ7YWxsb2MmIzM0OykpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJc25wcmludGYoYXJncywgc2l6ZW9mKGFyZ3MpLCAmIzM0O2J0ZiBkdW1wIGZpbGUgJXMgZm9ybWF0IGMlcyYjMzQ7LAomIzQzOwkJIHBhdGgsIHNvcnRlZCA/ICYjMzQ7JiMzNDsgOiAmIzM0OyB1bnNvcnRlZCYjMzQ7KTsKJiM0MzsJZXJyID0gZ2V0X2JwZnRvb2xfY29tbWFuZF9vdXRwdXQoYXJncywgYnVmLCBEVU1QX0JVRl9TWik7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtkdW1wJiMzNDspKSB7CiYjNDM7CQlmcmVlKGJ1Zik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gYnVmOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIHN0cnVjdCBob2xleSB7IGludCBjOyAmbHQ7MzIgYml0IGhvbGUmZ3Q7IGludCB0YWlsOyB9OwomIzQzOyAqIGVudW0geyBFMCA9IDEgfTsgZW51bSB7IEUxID0gMiB9OyBlbnVtIHsgRTIgPSAzIH07CiYjNDM7ICogc3RydWN0IHMgeyBpbnQgZjsgfTsKJiM0MzsgKiB1bmlvbiB1IHsgaW50IGY7IH07CiYjNDM7ICoKJiM0MzsgKiBPbmUgcmVjb3JkIHdpdGggYSBob2xlLCBhbmQgYSA0LWJ5dGUgbG9uZyB0byBwYWQgaXQgd2l0aC4gSG93IHJlY29yZHMKJiM0MzsgKiB0aGVtc2VsdmVzIGFyZSByZW5kZXJlZCBpcyBhbHJlYWR5IGNvdmVyZWQgYnkgdGhlIGJ1aWxkLgomIzQzOyAqIFRoZSBhbm9ueW1vdXMgZW51bXMgbWF0dGVyIHRvIHRoZSBzb3J0aW5nIHN1YnRlc3QuCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBidGYgKm1rX2J0Zih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0ZiAqYnRmOwomIzQzOwlpbnQgaWQsIGVyciwgaTsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19uZXdfZW1wdHkoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgJiMzNDtuZXdfZW1wdHkmIzM0OykpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJaWQgPSBidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2ludCYjMzQ7LCA0LCBCVEZfSU5UX1NJR05FRCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKGlkLCAxLCAmIzM0O2ludCYjMzQ7KSkKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsKJiM0MzsJaWQgPSBidGZfX2FkZF9pbnQoYnRmLCAmIzM0O2xvbmcgaW50JiMzNDssIDQsIEJURl9JTlRfU0lHTkVEKTsKJiM0MzsJaWYgKCFBU1NFUlRfR1QoaWQsIDAsICYjMzQ7bG9uZyYjMzQ7KSkKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsKJiM0MzsJaWQgPSBidGZfX2FkZF9zdHJ1Y3QoYnRmLCAmIzM0O2hvbGV5JiMzNDssIDE2KTsKJiM0MzsJaWYgKCFBU1NFUlRfR1QoaWQsIDAsICYjMzQ7c3RydWN0X2hvbGV5JiMzNDspKQomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwomIzQzOwllcnIgPSBidGZfX2FkZF9maWVsZChidGYsICYjMzQ7YyYjMzQ7LCAxLCAwLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2hvbGV5X2MmIzM0OykpCiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CiYjNDM7CWVyciA9IGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgJiMzNDt0YWlsJiMzNDssIDEsIDk2LCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2hvbGV5X3RhaWwmIzM0OykpCiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY2hhciBuYW1lWzE2XTsKJiM0MzsKJiM0MzsJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgJiMzNDtFJWQmIzM0OywgaSk7CiYjNDM7CiYjNDM7CQlpZCA9IGJ0Zl9fYWRkX2VudW0oYnRmLCBOVUxMLCA0KTsKJiM0MzsJCWlmICghQVNTRVJUX0dUKGlkLCAwLCAmIzM0O2Fub25fZW51bSYjMzQ7KSkKJiM0MzsJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CiYjNDM7CQllcnIgPSBidGZfX2FkZF9lbnVtX3ZhbHVlKGJ0ZiwgbmFtZSwgaSAmIzQzOyAxKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtlbnVtX3ZhbCYjMzQ7KSkKJiM0MzsJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWQgPSBidGZfX2FkZF9zdHJ1Y3QoYnRmLCAmIzM0O3MmIzM0OywgNCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGlkLCAwLCAmIzM0O3N0cnVjdF9zJiMzNDspKQomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwomIzQzOwllcnIgPSBidGZfX2FkZF9maWVsZChidGYsICYjMzQ7ZiYjMzQ7LCAxLCAwLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NfZmllbGQmIzM0OykpCiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CiYjNDM7CWlkID0gYnRmX19hZGRfdW5pb24oYnRmLCAmIzM0O3UmIzM0OywgNCk7CiYjNDM7CWlmICghQVNTRVJUX0dUKGlkLCAwLCAmIzM0O3VuaW9uX3UmIzM0OykpCiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CiYjNDM7CWVyciA9IGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgJiMzNDtmJiMzNDssIDEsIDAsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dV9maWVsZCYjMzQ7KSkKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsKJiM0MzsJYnRmX19zZXRfcG9pbnRlcl9zaXplKGJ0ZiwgNCk7CiYjNDM7CiYjNDM7CXJldHVybiBidGY7CiYjNDM7ZXJyX291dDoKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNvdW50X3N1YnN0cihjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqcCA9IGhheXN0YWNrOwomIzQzOwlpbnQgbiA9IDA7CiYjNDM7CiYjNDM7CWZvciAoOyAocCA9IHN0cnN0cihwLCBuZWVkbGUpKTsgcCYjNDM7JiM0MzspCiYjNDM7CQluJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJcmV0dXJuIG47CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc29ydF9wcmVzZXJ2ZXNfdHlwZXMoY29uc3QgY2hhciAqcGF0aCkKJiM0Mzt7CiYjNDM7CWNoYXIgKnNvcnRlZCA9IE5VTEwsICp1bnNvcnRlZCA9IE5VTEw7CiYjNDM7CWludCBuX3NvcnRlZCwgbl91bnNvcnRlZDsKJiM0MzsKJiM0MzsJc29ydGVkID0gZHVtcF9jKHBhdGgsIHRydWUpOwomIzQzOwl1bnNvcnRlZCA9IGR1bXBfYyhwYXRoLCBmYWxzZSk7CiYjNDM7CWlmICghc29ydGVkIHx8ICF1bnNvcnRlZCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBDb3VudCBkZWZpbml0aW9ucyBieSB0aGUgY2xvc2luZyBicmFjZSBpbiB0aGVpciBmaXJzdCBjb2x1bW4uIENvdW50aW5nCiYjNDM7CSAqICYjMzQ7c3RydWN0JiMzNDsvJiMzNDt1bmlvbiYjMzQ7LyYjMzQ7ZW51bSYjMzQ7IG9wZW5lcnMgaW5zdGVhZCB3b3VsZCBhbHNvIGNvdW50IGZvcndhcmQKJiM0MzsJICogZGVjbGFyYXRpb25zLCBhbmQgd2hpY2ggdHlwZXMgbmVlZCBvbmUgZGVwZW5kcyBvbiBlbWlzc2lvbiBvcmRlci4KJiM0MzsJICovCiYjNDM7CW5fdW5zb3J0ZWQgPSBjb3VudF9zdWJzdHIodW5zb3J0ZWQsICYjMzQ7XG59JiMzNDspOwomIzQzOwluX3NvcnRlZCA9IGNvdW50X3N1YnN0cihzb3J0ZWQsICYjMzQ7XG59JiMzNDspOwomIzQzOwlBU1NFUlRfR1Qobl91bnNvcnRlZCwgMCwgJiMzNDt0eXBlc19lbWl0dGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEobl9zb3J0ZWQsIG5fdW5zb3J0ZWQsICYjMzQ7c2FtZV90eXBlX2NvdW50JiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJZnJlZShzb3J0ZWQpOwomIzQzOwlmcmVlKHVuc29ydGVkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDaGVjayBvbmx5IHdoYXQgdGhlIHNlbGZ0ZXN0cyBidWlsZCBjYW5ub3Q6CiYjNDM7ICogICAtIGJwZl9oZWxwZXJzLmggZGVmaW5lcyBfX2tzeW0gYW5kIF9fd2VhayBhcyB3ZWxsLCBhbmQgbm8gcHJvZ3JhbSB1c2VzCiYjNDM7ICogICAgIF9fYnBmX2Zhc3RjYWxsLCBzbyBsb3NpbmcgdGhlIG1hY3JvIGJsb2NrIGNoYW5nZXMgbm90aGluZzsKJiM0MzsgKiAgIC0gYnVpbGRpbmcgd2l0aG91dCB0aGUgcHJlc2VydmVfYWNjZXNzX2luZGV4IHByYWdtYSBpcyBhIHN1cHBvcnRlZCBtb2RlCiYjNDM7ICogICAgIChCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYKSwgc28gbG9zaW5nIGl0IG9ubHkgY29zdHMgQ08tUkU7CiYjNDM7ICogICAtIHRoZSBwYWRkaW5nIHdpZHRoIGNvbWVzIGZyb20gdGhlIEJURiYjMzk7cyBwb2ludGVyIHNpemUsIGFuZCBhIG5hdGl2ZSBidWlsZAomIzQzOyAqICAgICBuZXZlciBydW5zIHRoZSBob3N0IGJwZnRvb2wgb3ZlciBhIGRpZmZlcmVudGx5IHNpemVkIHRhcmdldCYjMzk7cyBCVEYuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kdW1wKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgc29ydGVkKQomIzQzO3sKJiM0MzsJY2hhciAqYnVmOwomIzQzOwomIzQzOwlidWYgPSBkdW1wX2MocGF0aCwgc29ydGVkKTsKJiM0MzsJaWYgKCFidWYpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CUFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgJiMzNDsjZGVmaW5lIF9fa3N5bSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFwmIzM0Oy5rc3ltc1wmIzM0OykpKSYjMzQ7LAomIzQzOwkJCSAgJiMzNDtrc3ltJiMzNDspOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihidWYsICYjMzQ7I2RlZmluZSBfX3dlYWsgX19hdHRyaWJ1dGVfXygod2VhaykpJiMzNDssICYjMzQ7d2VhayYjMzQ7KTsKJiM0MzsJQVNTRVJUX0hBU19TVUJTVFIoYnVmLCAmIzM0OyNkZWZpbmUgX19icGZfZmFzdGNhbGwgX19hdHRyaWJ1dGVfXygoYnBmX2Zhc3RjYWxsKSkmIzM0OywKJiM0MzsJCQkgICYjMzQ7YnBmX2Zhc3RjYWxsJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihidWYsICYjMzQ7I2lmbmRlZiBCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYJiMzNDssICYjMzQ7cGFpX2d1YXJkJiMzNDspOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihidWYsCiYjNDM7CQkJICAmIzM0OyNwcmFnbWEgY2xhbmcgYXR0cmlidXRlIHB1c2ggKF9fYXR0cmlidXRlX18oKHByZXNlcnZlX2FjY2Vzc19pbmRleCkpLCBhcHBseV90byA9IHJlY29yZCkmIzM0OywKJiM0MzsJCQkgICYjMzQ7cGFpX3B1c2gmIzM0Oyk7CiYjNDM7CUFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgJiMzNDsjcHJhZ21hIGNsYW5nIGF0dHJpYnV0ZSBwb3AmIzM0OywgJiMzNDtwYWlfcG9wJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfSEFTX1NVQlNUUihidWYsICYjMzQ7bG9uZzogMzI7JiMzNDssICYjMzQ7dGFyZ2V0X3B0cl9zaXplJiMzNDspOwomIzQzOwomIzQzOwlmcmVlKGJ1Zik7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9icGZ0b29sX2J0Zl9kdW1wKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwlzdHJ1Y3QgYnRmICpidGY7CiYjNDM7CiYjNDM7CWJ0ZiA9IG1rX2J0ZigpOwomIzQzOwlpZiAoIWJ0ZikKJiM0MzsJCXJldHVybjsKJiM0MzsJaWYgKGJ0Zl90b190bXBmaWxlKGJ0ZiwgcGF0aCwgc2l6ZW9mKHBhdGgpKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2Nfc29ydGVkJiMzNDspKQomIzQzOwkJdGVzdF9kdW1wKHBhdGgsIHRydWUpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2NfdW5zb3J0ZWQmIzM0OykpCiYjNDM7CQl0ZXN0X2R1bXAocGF0aCwgZmFsc2UpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2Nfc29ydF9wcmVzZXJ2ZXNfdHlwZXMmIzM0OykpCiYjNDM7CQl0ZXN0X3NvcnRfcHJlc2VydmVzX3R5cGVzKHBhdGgpOwomIzQzOwomIzQzOwl1bmxpbmsocGF0aCk7CiYjNDM7b3V0OgomIzQzOwlidGZfX2ZyZWUoYnRmKTsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAxOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMDAKCQkJCQkJCW91dHB1dDogNjYKCQkJCQkJCXRob3VnaHRzOiA2NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogV29ydGhGdXp6aW5nID0gRmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIHRvdWNoZXMgYHRvb2xzL2JwZi9icGZ0b29sL2J0Zi5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY2AsIGFuZCBhZGRzIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNgLiBTdHJhaWdodCBhd2F5LCBJJiMzOTttIHRoaW5raW5nLCB0aGVzZSBhcmUgYWxsIGluIHRoZSBgdG9vbHNgIGFuZCBgc2VsZnRlc3RzYCBkaXJlY3Rvcmllcywgd2hpY2ggc2NyZWFtcyAmIzM0O3VzZXJzcGFjZS4mIzM0OyBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGFyZSByZWxldmFudCB0byB0aGUga2VybmVsIGFuZCBpZiB0aGV5IHJlcHJlc2VudCBhcmVhcyB0aGUgZnV6emVyIChzeXprYWxsZXIpIHdvdWxkIHRhcmdldC4KClRoZSBwcm9tcHQgbGF5cyBvdXQgc3BlY2lmaWMgY29uZGl0aW9ucyBmb3IgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJdCBtZW50aW9ucyBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGNvZGUsIGFuZCBkcml2ZXIgYC5yZW1vdmVgIGZ1bmN0aW9ucyBzaG91bGQgdHJpZ2dlciBhIGBmYWxzZWAgcmVzcG9uc2UuIFdoaWxlIHRoZSBwcm9tcHQgZG9lc24mIzM5O3QgZXhwbGljaXRseSAqY2FsbCBvdXQqIHRvb2xzIGFuZCBzZWxmdGVzdHMsIEkga25vdyB0aGF0IGNoYW5nZXMgdG8gdXNlcnNwYWNlIHRvb2xzIGxpa2UgYGJwZnRvb2xgIGFuZCB0ZXN0cyB0eXBpY2FsbHkgZG9uJiMzOTt0IGFmZmVjdCB0aGUga2VybmVsIGl0c2VsZiwgYW5kIHN5emthbGxlciBpcyBmb2N1c2VkIG9uIGtlcm5lbCBzeXNjYWxscyBhbmQgdGh1cyBub3QgY29uY2VybmVkIHdpdGggdGhlc2UgY2hhbmdlcy4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIGBicGZ0b29sYCBzb3VyY2UgaXMgaW5kZWVkIGRpc3RpbmN0IGZyb20gdGhlIGNvcmUga2VybmVsLCBldmVuIGlmIGl0JiMzOTtzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGl0c2VsZi4gTm93LCB0aGUgcHJvbXB0IGFsc28gc2F5cyB0byBjaGVjayBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgYW5kIGFyY2hpdGVjdHVyZXMuIEl0IHNheXMgJiMzNDtpZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIGtleS4gU2luY2UgdGhlIHBhdGNoIGlzICpvbmx5KiBtb2RpZnlpbmcgdGhlc2UgdG9vbCBhbmQgdGVzdCBmaWxlcywgaXQgZG9lc24mIzM5O3QgdG91Y2ggY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIEkgYW0gdGhlcmVmb3JlIGNvbmZpZGVudCB0aGF0IFdvcnRoRnV6emluZyBzaG91bGQgYmUgc2V0IHRvICpmYWxzZSouCgpJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhlIGNoYW5nZXMgdGhlbXNlbHZlcy4gTGV0IG1lIHNlZS4KCiogICBgdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNgOiBBIGJ1ZyBmaXguIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGxvb3AgaGFkIGFuIG9mZi1ieS1vbmUgZXJyb3IgKG5vdyBjb3JyZWN0ZWQpLiBUaGUgY29kZSBub3cgc2tpcHMgdHlwZSBJRCAwLCB3aGljaCByZXByZXNlbnRzIHZvaWQsIGluIEJURiB0eXBlIHNvcnRpbmcuIEl0JiMzOTtzIGEgY29kZSBjb3JyZWN0aW9uIGluIGEgdXNlciB0b29sLgoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY2A6IEEgc2VsZnRlc3QgaGVscGVyIGlzIGZpeGVkIHRvIG51bGwtdGVybWluYXRlIGEgYnVmZmVyLiBJdCYjMzk7cyBtYWtpbmcgdGhlIGNvZGUgc2FmZXIgYW5kIG1vcmUgcm9idXN0IGluIHRoZSBzZWxmdGVzdCBjb250ZXh0LgoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZnRvb2xfYnRmX2R1bXAuY2A6IFRoaXMgaXMgYSBuZXcgc2VsZnRlc3QgZm9yIGBicGZ0b29sIGJ0ZiBkdW1wYC4KCk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUga2VybmVsLCB0aGV5IGFyZSBwdXJlbHkgdXNlcnNwYWNlIHRvb2xzIGFuZCB0ZXN0cy4gVGhlcmVmb3JlLCBJIGFtIGNvbWZvcnRhYmxlIHdpdGggcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAxOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGJwZnRvb2wpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scyAoYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmIHRoYXQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDE6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAxOjA1OjM0Ljg5ODk0NjA4OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjk2OTIxODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGJwZnRvb2wpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiB0aGF0IGNhbiBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMTowNTozNC44OTg5NTA5OTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODg4MzUyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNmIxZWMxZDJhNjFjZTkyYWEyN2YxMTIzYzBhMTU4MWZlM2RhY2U1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDAxOjA1OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcXG5pbmRleCBjOTU4OTAyNmRhOGQ2Li4zNDVkNDlhOWEyMmMxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jXFxuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcXG5AQCAtODA1LDkgKzgwNSwxMyBAQCBzdGF0aWMgaW50IGR1bXBfYnRmX2MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXG4gXFx0XFx0aWYgKHNvcnRfZHVtcClcXG4gXFx0XFx0XFx0ZGF0dW1zID0gc29ydF9idGZfYyhidGYpO1xcbi1cXHRcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuIFxcdFxcdFxcdGludCBpZHggPSBkYXR1bXMgPyBkYXR1bXNbaV0uaW5kZXggOiBpO1xcbiBcXG4rXFx0XFx0XFx0LyogdHlwZSBJRCAwIGlzIHZvaWQsIHNraXAgaXQgKi9cXG4rXFx0XFx0XFx0aWYgKCFpZHgpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0XFx0ZXJyID0gYnRmX2R1bXBfX2R1bXBfdHlwZShkLCBpZHgpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY1xcbmluZGV4IDBhMmE0ZjBhMjc5NGIuLmM0OWZkZDkwZWIwMzMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZnRvb2xfaGVscGVycy5jXFxuQEAgLTUzLDYgKzUzLDcgQEAgc3RhdGljIGludCBydW5fY29tbWFuZChjaGFyICphcmdzLCBjaGFyICpvdXRwdXRfYnVmLCBzaXplX3Qgb3V0cHV0X21heF9sZW4pXFxuIFxcdHN0YXRpYyBjaGFyIGJwZnRvb2xfcGF0aFtQQVRIX01BWF0gPSB7fTtcXG4gXFx0Ym9vbCBzdXBwcmVzc19vdXRwdXQgPSAhKG91dHB1dF9idWYgXFx1MDAyNlxcdTAwMjYgb3V0cHV0X21heF9sZW4pO1xcbiBcXHRjaGFyIGNvbW1hbmRbQlBGVE9PTF9GVUxMX0NNRF9NQVhfTEVOXTtcXG4rXFx0c2l6ZV90IG47XFxuIFxcdEZJTEUgKmY7XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC02OCw4ICs2OSwxMCBAQCBzdGF0aWMgaW50IHJ1bl9jb21tYW5kKGNoYXIgKmFyZ3MsIGNoYXIgKm91dHB1dF9idWYsIHNpemVfdCBvdXRwdXRfbWF4X2xlbilcXG4gXFx0aWYgKCFmKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdGlmICghc3VwcHJlc3Nfb3V0cHV0KVxcbi1cXHRcXHRmcmVhZChvdXRwdXRfYnVmLCAxLCBvdXRwdXRfbWF4X2xlbiwgZik7XFxuK1xcdGlmICghc3VwcHJlc3Nfb3V0cHV0KSB7XFxuK1xcdFxcdG4gPSBmcmVhZChvdXRwdXRfYnVmLCAxLCBvdXRwdXRfbWF4X2xlbiAtIDEsIGYpO1xcbitcXHRcXHRvdXRwdXRfYnVmW25dID0gJ1xcXFwwJztcXG4rXFx0fVxcbiBcXHRyZXQgPSBwY2xvc2UoZik7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI4MDU5ODIwZWEwYmVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmdG9vbF9idGZfZHVtcC5jXFxuQEAgLTAsMCArMSwyMjMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZnRvb2xfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2J0Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIERVTVBfQlVGX1NaXFx0KDE2ICogMTAyNClcXG4rXFxuK3N0YXRpYyBpbnQgYnRmX3RvX3RtcGZpbGUoc3RydWN0IGJ0ZiAqYnRmLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9zeilcXG4re1xcbitcXHRjb25zdCB2b2lkICpyYXc7XFxuK1xcdHNzaXplX3Qgd3JpdHRlbjtcXG4rXFx0X191MzIgc3o7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdHJhdyA9IGJ0Zl9fcmF3X2RhdGEoYnRmLCBcXHUwMDI2c3opO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIocmF3LCBcXFwicmF3X2RhdGFcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgcGF0aF9zeiwgXFxcIi90bXAvYnBmdG9vbF9idGZfZHVtcC5YWFhYWFhcXFwiKTtcXG4rXFx0ZmQgPSBta3N0ZW1wKHBhdGgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRChmZCwgXFxcIm1rc3RlbXBcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0d3JpdHRlbiA9IHdyaXRlKGZkLCByYXcsIHN6KTtcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRpZiAoIUFTU0VSVF9FUSh3cml0dGVuLCBzeiwgXFxcIndyaXRlX2J0ZlxcXCIpKSB7XFxuK1xcdFxcdHVubGluayhwYXRoKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY2hhciAqZHVtcF9jKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgc29ydGVkKVxcbit7XFxuK1xcdGNoYXIgYXJnc1tNQVhfQlBGVE9PTF9DTURfTEVOXTtcXG4rXFx0Y2hhciAqYnVmO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0YnVmID0gbWFsbG9jKERVTVBfQlVGX1NaKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGJ1ZiwgXFxcImFsbG9jXFxcIikpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0c25wcmludGYoYXJncywgc2l6ZW9mKGFyZ3MpLCBcXFwiYnRmIGR1bXAgZmlsZSAlcyBmb3JtYXQgYyVzXFxcIixcXG4rXFx0XFx0IHBhdGgsIHNvcnRlZCA/IFxcXCJcXFwiIDogXFxcIiB1bnNvcnRlZFxcXCIpO1xcbitcXHRlcnIgPSBnZXRfYnBmdG9vbF9jb21tYW5kX291dHB1dChhcmdzLCBidWYsIERVTVBfQlVGX1NaKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiZHVtcFxcXCIpKSB7XFxuK1xcdFxcdGZyZWUoYnVmKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGJ1ZjtcXG4rfVxcbitcXG4rLypcXG4rICogc3RydWN0IGhvbGV5IHsgaW50IGM7IFxcdTAwM2MzMiBiaXQgaG9sZVxcdTAwM2UgaW50IHRhaWw7IH07XFxuKyAqIGVudW0geyBFMCA9IDEgfTsgZW51bSB7IEUxID0gMiB9OyBlbnVtIHsgRTIgPSAzIH07XFxuKyAqIHN0cnVjdCBzIHsgaW50IGY7IH07XFxuKyAqIHVuaW9uIHUgeyBpbnQgZjsgfTtcXG4rICpcXG4rICogT25lIHJlY29yZCB3aXRoIGEgaG9sZSwgYW5kIGEgNC1ieXRlIGxvbmcgdG8gcGFkIGl0IHdpdGguIEhvdyByZWNvcmRzXFxuKyAqIHRoZW1zZWx2ZXMgYXJlIHJlbmRlcmVkIGlzIGFscmVhZHkgY292ZXJlZCBieSB0aGUgYnVpbGQuXFxuKyAqIFRoZSBhbm9ueW1vdXMgZW51bXMgbWF0dGVyIHRvIHRoZSBzb3J0aW5nIHN1YnRlc3QuXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IGJ0ZiAqbWtfYnRmKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbitcXHRpbnQgaWQsIGVyciwgaTtcXG4rXFxuK1xcdGJ0ZiA9IGJ0Zl9fbmV3X2VtcHR5KCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFxcXCJuZXdfZW1wdHlcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZCA9IGJ0Zl9fYWRkX2ludChidGYsIFxcXCJpbnRcXFwiLCA0LCBCVEZfSU5UX1NJR05FRCk7XFxuK1xcdGlmICghQVNTRVJUX0VRKGlkLCAxLCBcXFwiaW50XFxcIikpXFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuK1xcdGlkID0gYnRmX19hZGRfaW50KGJ0ZiwgXFxcImxvbmcgaW50XFxcIiwgNCwgQlRGX0lOVF9TSUdORUQpO1xcbitcXHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXFxcImxvbmdcXFwiKSlcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXG4rXFx0aWQgPSBidGZfX2FkZF9zdHJ1Y3QoYnRmLCBcXFwiaG9sZXlcXFwiLCAxNik7XFxuK1xcdGlmICghQVNTRVJUX0dUKGlkLCAwLCBcXFwic3RydWN0X2hvbGV5XFxcIikpXFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuK1xcdGVyciA9IGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXFxcImNcXFwiLCAxLCAwLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiaG9sZXlfY1xcXCIpKVxcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcbitcXHRlcnIgPSBidGZfX2FkZF9maWVsZChidGYsIFxcXCJ0YWlsXFxcIiwgMSwgOTYsIDApO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJob2xleV90YWlsXFxcIikpXFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAzOyBpKyspIHtcXG4rXFx0XFx0Y2hhciBuYW1lWzE2XTtcXG4rXFxuK1xcdFxcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXFxcIkUlZFxcXCIsIGkpO1xcbitcXG4rXFx0XFx0aWQgPSBidGZfX2FkZF9lbnVtKGJ0ZiwgTlVMTCwgNCk7XFxuK1xcdFxcdGlmICghQVNTRVJUX0dUKGlkLCAwLCBcXFwiYW5vbl9lbnVtXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuK1xcdFxcdGVyciA9IGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBuYW1lLCBpICsgMSk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImVudW1fdmFsXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0aWQgPSBidGZfX2FkZF9zdHJ1Y3QoYnRmLCBcXFwic1xcXCIsIDQpO1xcbitcXHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXFxcInN0cnVjdF9zXFxcIikpXFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuK1xcdGVyciA9IGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXFxcImZcXFwiLCAxLCAwLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic19maWVsZFxcXCIpKVxcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcbitcXHRpZCA9IGJ0Zl9fYWRkX3VuaW9uKGJ0ZiwgXFxcInVcXFwiLCA0KTtcXG4rXFx0aWYgKCFBU1NFUlRfR1QoaWQsIDAsIFxcXCJ1bmlvbl91XFxcIikpXFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFxuK1xcdGVyciA9IGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXFxcImZcXFwiLCAxLCAwLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidV9maWVsZFxcXCIpKVxcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcbitcXHRidGZfX3NldF9wb2ludGVyX3NpemUoYnRmLCA0KTtcXG4rXFxuK1xcdHJldHVybiBidGY7XFxuK2Vycl9vdXQ6XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBjb3VudF9zdWJzdHIoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSlcXG4re1xcbitcXHRjb25zdCBjaGFyICpwID0gaGF5c3RhY2s7XFxuK1xcdGludCBuID0gMDtcXG4rXFxuK1xcdGZvciAoOyAocCA9IHN0cnN0cihwLCBuZWVkbGUpKTsgcCsrKVxcbitcXHRcXHRuKys7XFxuK1xcbitcXHRyZXR1cm4gbjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zb3J0X3ByZXNlcnZlc190eXBlcyhjb25zdCBjaGFyICpwYXRoKVxcbit7XFxuK1xcdGNoYXIgKnNvcnRlZCA9IE5VTEwsICp1bnNvcnRlZCA9IE5VTEw7XFxuK1xcdGludCBuX3NvcnRlZCwgbl91bnNvcnRlZDtcXG4rXFxuK1xcdHNvcnRlZCA9IGR1bXBfYyhwYXRoLCB0cnVlKTtcXG4rXFx0dW5zb3J0ZWQgPSBkdW1wX2MocGF0aCwgZmFsc2UpO1xcbitcXHRpZiAoIXNvcnRlZCB8fCAhdW5zb3J0ZWQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogQ291bnQgZGVmaW5pdGlvbnMgYnkgdGhlIGNsb3NpbmcgYnJhY2UgaW4gdGhlaXIgZmlyc3QgY29sdW1uLiBDb3VudGluZ1xcbitcXHQgKiBcXFwic3RydWN0XFxcIi9cXFwidW5pb25cXFwiL1xcXCJlbnVtXFxcIiBvcGVuZXJzIGluc3RlYWQgd291bGQgYWxzbyBjb3VudCBmb3J3YXJkXFxuK1xcdCAqIGRlY2xhcmF0aW9ucywgYW5kIHdoaWNoIHR5cGVzIG5lZWQgb25lIGRlcGVuZHMgb24gZW1pc3Npb24gb3JkZXIuXFxuK1xcdCAqL1xcbitcXHRuX3Vuc29ydGVkID0gY291bnRfc3Vic3RyKHVuc29ydGVkLCBcXFwiXFxcXG59XFxcIik7XFxuK1xcdG5fc29ydGVkID0gY291bnRfc3Vic3RyKHNvcnRlZCwgXFxcIlxcXFxufVxcXCIpO1xcbitcXHRBU1NFUlRfR1Qobl91bnNvcnRlZCwgMCwgXFxcInR5cGVzX2VtaXR0ZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKG5fc29ydGVkLCBuX3Vuc29ydGVkLCBcXFwic2FtZV90eXBlX2NvdW50XFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGZyZWUoc29ydGVkKTtcXG4rXFx0ZnJlZSh1bnNvcnRlZCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENoZWNrIG9ubHkgd2hhdCB0aGUgc2VsZnRlc3RzIGJ1aWxkIGNhbm5vdDpcXG4rICogICAtIGJwZl9oZWxwZXJzLmggZGVmaW5lcyBfX2tzeW0gYW5kIF9fd2VhayBhcyB3ZWxsLCBhbmQgbm8gcHJvZ3JhbSB1c2VzXFxuKyAqICAgICBfX2JwZl9mYXN0Y2FsbCwgc28gbG9zaW5nIHRoZSBtYWNybyBibG9jayBjaGFuZ2VzIG5vdGhpbmc7XFxuKyAqICAgLSBidWlsZGluZyB3aXRob3V0IHRoZSBwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXggcHJhZ21hIGlzIGEgc3VwcG9ydGVkIG1vZGVcXG4rICogICAgIChCUEZfTk9fUFJFU0VSVkVfQUNDRVNTX0lOREVYKSwgc28gbG9zaW5nIGl0IG9ubHkgY29zdHMgQ08tUkU7XFxuKyAqICAgLSB0aGUgcGFkZGluZyB3aWR0aCBjb21lcyBmcm9tIHRoZSBCVEYncyBwb2ludGVyIHNpemUsIGFuZCBhIG5hdGl2ZSBidWlsZFxcbisgKiAgICAgbmV2ZXIgcnVucyB0aGUgaG9zdCBicGZ0b29sIG92ZXIgYSBkaWZmZXJlbnRseSBzaXplZCB0YXJnZXQncyBCVEYuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0X2R1bXAoY29uc3QgY2hhciAqcGF0aCwgYm9vbCBzb3J0ZWQpXFxuK3tcXG4rXFx0Y2hhciAqYnVmO1xcbitcXG4rXFx0YnVmID0gZHVtcF9jKHBhdGgsIHNvcnRlZCk7XFxuK1xcdGlmICghYnVmKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRBU1NFUlRfSEFTX1NVQlNUUihidWYsIFxcXCIjZGVmaW5lIF9fa3N5bSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFxcXFxcXFwiLmtzeW1zXFxcXFxcXCIpKSlcXFwiLFxcbitcXHRcXHRcXHQgIFxcXCJrc3ltXFxcIik7XFxuK1xcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXFxcIiNkZWZpbmUgX193ZWFrIF9fYXR0cmlidXRlX18oKHdlYWspKVxcXCIsIFxcXCJ3ZWFrXFxcIik7XFxuK1xcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXFxcIiNkZWZpbmUgX19icGZfZmFzdGNhbGwgX19hdHRyaWJ1dGVfXygoYnBmX2Zhc3RjYWxsKSlcXFwiLFxcbitcXHRcXHRcXHQgIFxcXCJicGZfZmFzdGNhbGxcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXFxcIiNpZm5kZWYgQlBGX05PX1BSRVNFUlZFX0FDQ0VTU19JTkRFWFxcXCIsIFxcXCJwYWlfZ3VhcmRcXFwiKTtcXG4rXFx0QVNTRVJUX0hBU19TVUJTVFIoYnVmLFxcbitcXHRcXHRcXHQgIFxcXCIjcHJhZ21hIGNsYW5nIGF0dHJpYnV0ZSBwdXNoIChfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKSwgYXBwbHlfdG8gPSByZWNvcmQpXFxcIixcXG4rXFx0XFx0XFx0ICBcXFwicGFpX3B1c2hcXFwiKTtcXG4rXFx0QVNTRVJUX0hBU19TVUJTVFIoYnVmLCBcXFwiI3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcG9wXFxcIiwgXFxcInBhaV9wb3BcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXFxcImxvbmc6IDMyO1xcXCIsIFxcXCJ0YXJnZXRfcHRyX3NpemVcXFwiKTtcXG4rXFxuK1xcdGZyZWUoYnVmKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2JwZnRvb2xfYnRmX2R1bXAodm9pZClcXG4re1xcbitcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHRzdHJ1Y3QgYnRmICpidGY7XFxuK1xcbitcXHRidGYgPSBta19idGYoKTtcXG4rXFx0aWYgKCFidGYpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKGJ0Zl90b190bXBmaWxlKGJ0ZiwgcGF0aCwgc2l6ZW9mKHBhdGgpKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiY19zb3J0ZWRcXFwiKSlcXG4rXFx0XFx0dGVzdF9kdW1wKHBhdGgsIHRydWUpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiY191bnNvcnRlZFxcXCIpKVxcbitcXHRcXHR0ZXN0X2R1bXAocGF0aCwgZmFsc2UpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImNfc29ydF9wcmVzZXJ2ZXNfdHlwZXNcXFwiKSlcXG4rXFx0XFx0dGVzdF9zb3J0X3ByZXNlcnZlc190eXBlcyhwYXRoKTtcXG4rXFxuK1xcdHVubGluayhwYXRoKTtcXG4rb3V0OlxcbitcXHRidGZfX2ZyZWUoYnRmKTtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMTowNTozNi40ODg2NDIyNDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5NzA3MjE0NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scyAoYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY2YjFlYzFkMmE2MWNlOTJhYTI3ZjExMjNjMGExNTgxZmUzZGFjZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwMTowNTozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2J0Zi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcbmluZGV4IGM5NTg5MDI2ZGE4ZDYuLjM0NWQ0OWE5YTIyYzEgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9idGYuY1xuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvYnRmLmNcbkBAIC04MDUsOSArODA1LDEzIEBAIHN0YXRpYyBpbnQgZHVtcF9idGZfYyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gXG4gXHRcdGlmIChzb3J0X2R1bXApXG4gXHRcdFx0ZGF0dW1zID0gc29ydF9idGZfYyhidGYpO1xuLVx0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuIFx0XHRcdGludCBpZHggPSBkYXR1bXMgPyBkYXR1bXNbaV0uaW5kZXggOiBpO1xuIFxuK1x0XHRcdC8qIHR5cGUgSUQgMCBpcyB2b2lkLCBza2lwIGl0ICovXG4rXHRcdFx0aWYgKCFpZHgpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0XHRlcnIgPSBidGZfZHVtcF9fZHVtcF90eXBlKGQsIGlkeCk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gZG9uZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmNcbmluZGV4IDBhMmE0ZjBhMjc5NGIuLmM0OWZkZDkwZWIwMzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmdG9vbF9oZWxwZXJzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY1xuQEAgLTUzLDYgKzUzLDcgQEAgc3RhdGljIGludCBydW5fY29tbWFuZChjaGFyICphcmdzLCBjaGFyICpvdXRwdXRfYnVmLCBzaXplX3Qgb3V0cHV0X21heF9sZW4pXG4gXHRzdGF0aWMgY2hhciBicGZ0b29sX3BhdGhbUEFUSF9NQVhdID0ge307XG4gXHRib29sIHN1cHByZXNzX291dHB1dCA9ICEob3V0cHV0X2J1ZiBcdTAwMjZcdTAwMjYgb3V0cHV0X21heF9sZW4pO1xuIFx0Y2hhciBjb21tYW5kW0JQRlRPT0xfRlVMTF9DTURfTUFYX0xFTl07XG4rXHRzaXplX3QgbjtcbiBcdEZJTEUgKmY7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTY4LDggKzY5LDEwIEBAIHN0YXRpYyBpbnQgcnVuX2NvbW1hbmQoY2hhciAqYXJncywgY2hhciAqb3V0cHV0X2J1Ziwgc2l6ZV90IG91dHB1dF9tYXhfbGVuKVxuIFx0aWYgKCFmKVxuIFx0XHRyZXR1cm4gMTtcbiBcbi1cdGlmICghc3VwcHJlc3Nfb3V0cHV0KVxuLVx0XHRmcmVhZChvdXRwdXRfYnVmLCAxLCBvdXRwdXRfbWF4X2xlbiwgZik7XG4rXHRpZiAoIXN1cHByZXNzX291dHB1dCkge1xuK1x0XHRuID0gZnJlYWQob3V0cHV0X2J1ZiwgMSwgb3V0cHV0X21heF9sZW4gLSAxLCBmKTtcbitcdFx0b3V0cHV0X2J1ZltuXSA9ICdcXDAnO1xuK1x0fVxuIFx0cmV0ID0gcGNsb3NlKGYpO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yODA1OTgyMGVhMGJlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNcbkBAIC0wLDAgKzEsMjIzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGZ0b29sX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2RlZmluZSBEVU1QX0JVRl9TWlx0KDE2ICogMTAyNClcbitcbitzdGF0aWMgaW50IGJ0Zl90b190bXBmaWxlKHN0cnVjdCBidGYgKmJ0ZiwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfc3opXG4re1xuK1x0Y29uc3Qgdm9pZCAqcmF3O1xuK1x0c3NpemVfdCB3cml0dGVuO1xuK1x0X191MzIgc3o7XG4rXHRpbnQgZmQ7XG4rXG4rXHRyYXcgPSBidGZfX3Jhd19kYXRhKGJ0ZiwgXHUwMDI2c3opO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHJhdywgXCJyYXdfZGF0YVwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0c25wcmludGYocGF0aCwgcGF0aF9zeiwgXCIvdG1wL2JwZnRvb2xfYnRmX2R1bXAuWFhYWFhYXCIpO1xuK1x0ZmQgPSBta3N0ZW1wKHBhdGgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoZmQsIFwibWtzdGVtcFwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0d3JpdHRlbiA9IHdyaXRlKGZkLCByYXcsIHN6KTtcbitcdGNsb3NlKGZkKTtcbitcdGlmICghQVNTRVJUX0VRKHdyaXR0ZW4sIHN6LCBcIndyaXRlX2J0ZlwiKSkge1xuK1x0XHR1bmxpbmsocGF0aCk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY2hhciAqZHVtcF9jKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgc29ydGVkKVxuK3tcbitcdGNoYXIgYXJnc1tNQVhfQlBGVE9PTF9DTURfTEVOXTtcbitcdGNoYXIgKmJ1ZjtcbitcdGludCBlcnI7XG4rXG4rXHRidWYgPSBtYWxsb2MoRFVNUF9CVUZfU1opO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ1ZiwgXCJhbGxvY1wiKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRzbnByaW50ZihhcmdzLCBzaXplb2YoYXJncyksIFwiYnRmIGR1bXAgZmlsZSAlcyBmb3JtYXQgYyVzXCIsXG4rXHRcdCBwYXRoLCBzb3J0ZWQgPyBcIlwiIDogXCIgdW5zb3J0ZWRcIik7XG4rXHRlcnIgPSBnZXRfYnBmdG9vbF9jb21tYW5kX291dHB1dChhcmdzLCBidWYsIERVTVBfQlVGX1NaKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJkdW1wXCIpKSB7XG4rXHRcdGZyZWUoYnVmKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXHRyZXR1cm4gYnVmO1xuK31cbitcbisvKlxuKyAqIHN0cnVjdCBob2xleSB7IGludCBjOyBcdTAwM2MzMiBiaXQgaG9sZVx1MDAzZSBpbnQgdGFpbDsgfTtcbisgKiBlbnVtIHsgRTAgPSAxIH07IGVudW0geyBFMSA9IDIgfTsgZW51bSB7IEUyID0gMyB9O1xuKyAqIHN0cnVjdCBzIHsgaW50IGY7IH07XG4rICogdW5pb24gdSB7IGludCBmOyB9O1xuKyAqXG4rICogT25lIHJlY29yZCB3aXRoIGEgaG9sZSwgYW5kIGEgNC1ieXRlIGxvbmcgdG8gcGFkIGl0IHdpdGguIEhvdyByZWNvcmRzXG4rICogdGhlbXNlbHZlcyBhcmUgcmVuZGVyZWQgaXMgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBidWlsZC5cbisgKiBUaGUgYW5vbnltb3VzIGVudW1zIG1hdHRlciB0byB0aGUgc29ydGluZyBzdWJ0ZXN0LlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgYnRmICpta19idGYodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnRmICpidGY7XG4rXHRpbnQgaWQsIGVyciwgaTtcbitcbitcdGJ0ZiA9IGJ0Zl9fbmV3X2VtcHR5KCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoYnRmLCBcIm5ld19lbXB0eVwiKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRpZCA9IGJ0Zl9fYWRkX2ludChidGYsIFwiaW50XCIsIDQsIEJURl9JTlRfU0lHTkVEKTtcbitcdGlmICghQVNTRVJUX0VRKGlkLCAxLCBcImludFwiKSlcbitcdFx0Z290byBlcnJfb3V0O1xuK1xuK1x0aWQgPSBidGZfX2FkZF9pbnQoYnRmLCBcImxvbmcgaW50XCIsIDQsIEJURl9JTlRfU0lHTkVEKTtcbitcdGlmICghQVNTRVJUX0dUKGlkLCAwLCBcImxvbmdcIikpXG4rXHRcdGdvdG8gZXJyX291dDtcbitcbitcdGlkID0gYnRmX19hZGRfc3RydWN0KGJ0ZiwgXCJob2xleVwiLCAxNik7XG4rXHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXCJzdHJ1Y3RfaG9sZXlcIikpXG4rXHRcdGdvdG8gZXJyX291dDtcbitcbitcdGVyciA9IGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXCJjXCIsIDEsIDAsIDApO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImhvbGV5X2NcIikpXG4rXHRcdGdvdG8gZXJyX291dDtcbitcbitcdGVyciA9IGJ0Zl9fYWRkX2ZpZWxkKGJ0ZiwgXCJ0YWlsXCIsIDEsIDk2LCAwKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJob2xleV90YWlsXCIpKVxuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAzOyBpKyspIHtcbitcdFx0Y2hhciBuYW1lWzE2XTtcbitcbitcdFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcIkUlZFwiLCBpKTtcbitcbitcdFx0aWQgPSBidGZfX2FkZF9lbnVtKGJ0ZiwgTlVMTCwgNCk7XG4rXHRcdGlmICghQVNTRVJUX0dUKGlkLCAwLCBcImFub25fZW51bVwiKSlcbitcdFx0XHRnb3RvIGVycl9vdXQ7XG4rXG4rXHRcdGVyciA9IGJ0Zl9fYWRkX2VudW1fdmFsdWUoYnRmLCBuYW1lLCBpICsgMSk7XG4rXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCJlbnVtX3ZhbFwiKSlcbitcdFx0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRpZCA9IGJ0Zl9fYWRkX3N0cnVjdChidGYsIFwic1wiLCA0KTtcbitcdGlmICghQVNTRVJUX0dUKGlkLCAwLCBcInN0cnVjdF9zXCIpKVxuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXG4rXHRlcnIgPSBidGZfX2FkZF9maWVsZChidGYsIFwiZlwiLCAxLCAwLCAwKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzX2ZpZWxkXCIpKVxuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXG4rXHRpZCA9IGJ0Zl9fYWRkX3VuaW9uKGJ0ZiwgXCJ1XCIsIDQpO1xuK1x0aWYgKCFBU1NFUlRfR1QoaWQsIDAsIFwidW5pb25fdVwiKSlcbitcdFx0Z290byBlcnJfb3V0O1xuK1xuK1x0ZXJyID0gYnRmX19hZGRfZmllbGQoYnRmLCBcImZcIiwgMSwgMCwgMCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidV9maWVsZFwiKSlcbitcdFx0Z290byBlcnJfb3V0O1xuK1xuK1x0YnRmX19zZXRfcG9pbnRlcl9zaXplKGJ0ZiwgNCk7XG4rXG4rXHRyZXR1cm4gYnRmO1xuK2Vycl9vdXQ6XG4rXHRidGZfX2ZyZWUoYnRmKTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IGNvdW50X3N1YnN0cihjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKVxuK3tcbitcdGNvbnN0IGNoYXIgKnAgPSBoYXlzdGFjaztcbitcdGludCBuID0gMDtcbitcbitcdGZvciAoOyAocCA9IHN0cnN0cihwLCBuZWVkbGUpKTsgcCsrKVxuK1x0XHRuKys7XG4rXG4rXHRyZXR1cm4gbjtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zb3J0X3ByZXNlcnZlc190eXBlcyhjb25zdCBjaGFyICpwYXRoKVxuK3tcbitcdGNoYXIgKnNvcnRlZCA9IE5VTEwsICp1bnNvcnRlZCA9IE5VTEw7XG4rXHRpbnQgbl9zb3J0ZWQsIG5fdW5zb3J0ZWQ7XG4rXG4rXHRzb3J0ZWQgPSBkdW1wX2MocGF0aCwgdHJ1ZSk7XG4rXHR1bnNvcnRlZCA9IGR1bXBfYyhwYXRoLCBmYWxzZSk7XG4rXHRpZiAoIXNvcnRlZCB8fCAhdW5zb3J0ZWQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LypcbitcdCAqIENvdW50IGRlZmluaXRpb25zIGJ5IHRoZSBjbG9zaW5nIGJyYWNlIGluIHRoZWlyIGZpcnN0IGNvbHVtbi4gQ291bnRpbmdcbitcdCAqIFwic3RydWN0XCIvXCJ1bmlvblwiL1wiZW51bVwiIG9wZW5lcnMgaW5zdGVhZCB3b3VsZCBhbHNvIGNvdW50IGZvcndhcmRcbitcdCAqIGRlY2xhcmF0aW9ucywgYW5kIHdoaWNoIHR5cGVzIG5lZWQgb25lIGRlcGVuZHMgb24gZW1pc3Npb24gb3JkZXIuXG4rXHQgKi9cbitcdG5fdW5zb3J0ZWQgPSBjb3VudF9zdWJzdHIodW5zb3J0ZWQsIFwiXFxufVwiKTtcbitcdG5fc29ydGVkID0gY291bnRfc3Vic3RyKHNvcnRlZCwgXCJcXG59XCIpO1xuK1x0QVNTRVJUX0dUKG5fdW5zb3J0ZWQsIDAsIFwidHlwZXNfZW1pdHRlZFwiKTtcbitcdEFTU0VSVF9FUShuX3NvcnRlZCwgbl91bnNvcnRlZCwgXCJzYW1lX3R5cGVfY291bnRcIik7XG4rXG4rb3V0OlxuK1x0ZnJlZShzb3J0ZWQpO1xuK1x0ZnJlZSh1bnNvcnRlZCk7XG4rfVxuK1xuKy8qXG4rICogQ2hlY2sgb25seSB3aGF0IHRoZSBzZWxmdGVzdHMgYnVpbGQgY2Fubm90OlxuKyAqICAgLSBicGZfaGVscGVycy5oIGRlZmluZXMgX19rc3ltIGFuZCBfX3dlYWsgYXMgd2VsbCwgYW5kIG5vIHByb2dyYW0gdXNlc1xuKyAqICAgICBfX2JwZl9mYXN0Y2FsbCwgc28gbG9zaW5nIHRoZSBtYWNybyBibG9jayBjaGFuZ2VzIG5vdGhpbmc7XG4rICogICAtIGJ1aWxkaW5nIHdpdGhvdXQgdGhlIHByZXNlcnZlX2FjY2Vzc19pbmRleCBwcmFnbWEgaXMgYSBzdXBwb3J0ZWQgbW9kZVxuKyAqICAgICAoQlBGX05PX1BSRVNFUlZFX0FDQ0VTU19JTkRFWCksIHNvIGxvc2luZyBpdCBvbmx5IGNvc3RzIENPLVJFO1xuKyAqICAgLSB0aGUgcGFkZGluZyB3aWR0aCBjb21lcyBmcm9tIHRoZSBCVEYncyBwb2ludGVyIHNpemUsIGFuZCBhIG5hdGl2ZSBidWlsZFxuKyAqICAgICBuZXZlciBydW5zIHRoZSBob3N0IGJwZnRvb2wgb3ZlciBhIGRpZmZlcmVudGx5IHNpemVkIHRhcmdldCdzIEJURi5cbisgKi9cbitzdGF0aWMgdm9pZCB0ZXN0X2R1bXAoY29uc3QgY2hhciAqcGF0aCwgYm9vbCBzb3J0ZWQpXG4re1xuK1x0Y2hhciAqYnVmO1xuK1xuK1x0YnVmID0gZHVtcF9jKHBhdGgsIHNvcnRlZCk7XG4rXHRpZiAoIWJ1ZilcbitcdFx0cmV0dXJuO1xuK1xuK1x0QVNTRVJUX0hBU19TVUJTVFIoYnVmLCBcIiNkZWZpbmUgX19rc3ltIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oXFxcIi5rc3ltc1xcXCIpKSlcIixcbitcdFx0XHQgIFwia3N5bVwiKTtcbitcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXCIjZGVmaW5lIF9fd2VhayBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSlcIiwgXCJ3ZWFrXCIpO1xuK1x0QVNTRVJUX0hBU19TVUJTVFIoYnVmLCBcIiNkZWZpbmUgX19icGZfZmFzdGNhbGwgX19hdHRyaWJ1dGVfXygoYnBmX2Zhc3RjYWxsKSlcIixcbitcdFx0XHQgIFwiYnBmX2Zhc3RjYWxsXCIpO1xuK1xuK1x0QVNTRVJUX0hBU19TVUJTVFIoYnVmLCBcIiNpZm5kZWYgQlBGX05PX1BSRVNFUlZFX0FDQ0VTU19JTkRFWFwiLCBcInBhaV9ndWFyZFwiKTtcbitcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZixcbitcdFx0XHQgIFwiI3ByYWdtYSBjbGFuZyBhdHRyaWJ1dGUgcHVzaCAoX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSksIGFwcGx5X3RvID0gcmVjb3JkKVwiLFxuK1x0XHRcdCAgXCJwYWlfcHVzaFwiKTtcbitcdEFTU0VSVF9IQVNfU1VCU1RSKGJ1ZiwgXCIjcHJhZ21hIGNsYW5nIGF0dHJpYnV0ZSBwb3BcIiwgXCJwYWlfcG9wXCIpO1xuK1xuK1x0QVNTRVJUX0hBU19TVUJTVFIoYnVmLCBcImxvbmc6IDMyO1wiLCBcInRhcmdldF9wdHJfc2l6ZVwiKTtcbitcbitcdGZyZWUoYnVmKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2JwZnRvb2xfYnRmX2R1bXAodm9pZClcbit7XG4rXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0c3RydWN0IGJ0ZiAqYnRmO1xuK1xuK1x0YnRmID0gbWtfYnRmKCk7XG4rXHRpZiAoIWJ0ZilcbitcdFx0cmV0dXJuO1xuK1x0aWYgKGJ0Zl90b190bXBmaWxlKGJ0ZiwgcGF0aCwgc2l6ZW9mKHBhdGgpKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNfc29ydGVkXCIpKVxuK1x0XHR0ZXN0X2R1bXAocGF0aCwgdHJ1ZSk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNfdW5zb3J0ZWRcIikpXG4rXHRcdHRlc3RfZHVtcChwYXRoLCBmYWxzZSk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNfc29ydF9wcmVzZXJ2ZXNfdHlwZXNcIikpXG4rXHRcdHRlc3Rfc29ydF9wcmVzZXJ2ZXNfdHlwZXMocGF0aCk7XG4rXG4rXHR1bmxpbmsocGF0aCk7XG4rb3V0OlxuK1x0YnRmX19mcmVlKGJ0Zik7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDE6MDU6MzYuNDg4NjQzNDY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTcwNzE2OTE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmcgPSBGYWxzZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIHRvdWNoZXMgYHRvb2xzL2JwZi9icGZ0b29sL2J0Zi5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY2AsIGFuZCBhZGRzIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZ0b29sX2J0Zl9kdW1wLmNgLiBTdHJhaWdodCBhd2F5LCBJJ20gdGhpbmtpbmcsIHRoZXNlIGFyZSBhbGwgaW4gdGhlIGB0b29sc2AgYW5kIGBzZWxmdGVzdHNgIGRpcmVjdG9yaWVzLCB3aGljaCBzY3JlYW1zIFwidXNlcnNwYWNlLlwiIEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgYXJlIHJlbGV2YW50IHRvIHRoZSBrZXJuZWwgYW5kIGlmIHRoZXkgcmVwcmVzZW50IGFyZWFzIHRoZSBmdXp6ZXIgKHN5emthbGxlcikgd291bGQgdGFyZ2V0LlxuXG5UaGUgcHJvbXB0IGxheXMgb3V0IHNwZWNpZmljIGNvbmRpdGlvbnMgZm9yIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQgbWVudGlvbnMgbW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBjb2RlLCBhbmQgZHJpdmVyIGAucmVtb3ZlYCBmdW5jdGlvbnMgc2hvdWxkIHRyaWdnZXIgYSBgZmFsc2VgIHJlc3BvbnNlLiBXaGlsZSB0aGUgcHJvbXB0IGRvZXNuJ3QgZXhwbGljaXRseSAqY2FsbCBvdXQqIHRvb2xzIGFuZCBzZWxmdGVzdHMsIEkga25vdyB0aGF0IGNoYW5nZXMgdG8gdXNlcnNwYWNlIHRvb2xzIGxpa2UgYGJwZnRvb2xgIGFuZCB0ZXN0cyB0eXBpY2FsbHkgZG9uJ3QgYWZmZWN0IHRoZSBrZXJuZWwgaXRzZWxmLCBhbmQgc3l6a2FsbGVyIGlzIGZvY3VzZWQgb24ga2VybmVsIHN5c2NhbGxzIGFuZCB0aHVzIG5vdCBjb25jZXJuZWQgd2l0aCB0aGVzZSBjaGFuZ2VzLlxuXG5JJ20gbWFraW5nIGEgbWVudGFsIG5vdGUgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIGBicGZ0b29sYCBzb3VyY2UgaXMgaW5kZWVkIGRpc3RpbmN0IGZyb20gdGhlIGNvcmUga2VybmVsLCBldmVuIGlmIGl0J3Mgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgaXRzZWxmLiBOb3csIHRoZSBwcm9tcHQgYWxzbyBzYXlzIHRvIGNoZWNrIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBhbmQgYXJjaGl0ZWN0dXJlcy4gSXQgc2F5cyBcImlmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCIgVGhhdCdzIHRoZSBrZXkuIFNpbmNlIHRoZSBwYXRjaCBpcyAqb25seSogbW9kaWZ5aW5nIHRoZXNlIHRvb2wgYW5kIHRlc3QgZmlsZXMsIGl0IGRvZXNuJ3QgdG91Y2ggY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIEkgYW0gdGhlcmVmb3JlIGNvbmZpZGVudCB0aGF0IFdvcnRoRnV6emluZyBzaG91bGQgYmUgc2V0IHRvICpmYWxzZSouXG5cbkkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzLiBMZXQgbWUgc2VlLlxuXG4qICAgYHRvb2xzL2JwZi9icGZ0b29sL2J0Zi5jYDogQSBidWcgZml4LiBUaGUgb3JpZ2luYWwgY29kZSdzIGxvb3AgaGFkIGFuIG9mZi1ieS1vbmUgZXJyb3IgKG5vdyBjb3JyZWN0ZWQpLiBUaGUgY29kZSBub3cgc2tpcHMgdHlwZSBJRCAwLCB3aGljaCByZXByZXNlbnRzIHZvaWQsIGluIEJURiB0eXBlIHNvcnRpbmcuIEl0J3MgYSBjb2RlIGNvcnJlY3Rpb24gaW4gYSB1c2VyIHRvb2wuXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZ0b29sX2hlbHBlcnMuY2A6IEEgc2VsZnRlc3QgaGVscGVyIGlzIGZpeGVkIHRvIG51bGwtdGVybWluYXRlIGEgYnVmZmVyLiBJdCdzIG1ha2luZyB0aGUgY29kZSBzYWZlciBhbmQgbW9yZSByb2J1c3QgaW4gdGhlIHNlbGZ0ZXN0IGNvbnRleHQuXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZnRvb2xfYnRmX2R1bXAuY2A6IFRoaXMgaXMgYSBuZXcgc2VsZnRlc3QgZm9yIGBicGZ0b29sIGJ0ZiBkdW1wYC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBrZXJuZWwsIHRoZXkgYXJlIHB1cmVseSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHRlc3RzLiBUaGVyZWZvcmUsIEkgYW0gY29tZm9ydGFibGUgd2l0aCByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDAsIk91dHB1dFRva2VucyI6NjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMTowNTo0Ni4xOTU4MTU1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scyAoYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzIChicGZ0b29sKSBhbmQgc2VsZnRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDE6MDU6NDYuMTk1ODU4OTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbqkn[1] Phase: Running StartedAt: 2026-08-20 01:05:57 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbqkn[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-20 01:05:57 +0000 UTC FinishedAt: 2026-08-20 01:06:01 +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,}