Name: series-workflow87vs5 Phase: Failed StartedAt: 2026-07-16 20:19:25 +0000 UTC FinishedAt: 2026-07-16 20:29:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87vs5[0] Phase: Succeeded StartedAt: 2026-07-16 20:19:25 +0000 UTC FinishedAt: 2026-07-16 20:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87vs5[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 20:19:25 +0000 UTC FinishedAt: 2026-07-16 20:29:36 +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+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29scyAodG9vbHMvbW0vZ3VwX2JlbmNoLmMsIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyksIERvY3VtZW50YXRpb24sIGFuZCBNQUlOVEFJTkVSUy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiMGEyM2U5OTc5ZWVkZjRhNmZiNThlYTFiMzc2Y2E1Mjc1NzJjNGZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMjA6Mjk6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuaW5kZXggYzE2Y2ExNjNiNTVlM2MuLmVhNzIyYWRmMjJjY2FjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG5AQCAtMjMwLDEwICYjNDM7MjMwLDE2IEBAIFRoaXMgZmlsZTo6XG4gXG4gIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiBcbi1oYXMgdGhlIGZvbGxvd2luZyBuZXcgY2FsbHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBwaW4qKCkgd3JhcHBlciBmdW5jdGlvbnM6XG4mIzQzO2NvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdGVzdCBjYXNlcyB0byBleGVyY2lzZSBwaW5fdXNlcl9wYWdlcyooKTpcbiBcbi0qIFBJTl9GQVNUX0JFTkNITUFSSyAoLi9ndXBfdGVzdCAtYSlcbi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKVxuJiM0MzsqIHBpbl91c2VyX3BhZ2VzIHZpYSBQSU5fQkFTSUNfVEVTVFxuJiM0MzsqIHBpbl91c2VyX3BhZ2VzX2Zhc3QgdmlhIFBJTl9GQVNUX0JFTkNITUFSS1xuJiM0MzsqIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtIHZpYSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXG4mIzQzO1xuJiM0MztSdW4gd2l0aDo6XG4mIzQzO1xuJiM0MzsgIG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW1cbiYjNDM7ICAuL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0XG4gXG4gWW91IGNhbiBtb25pdG9yIGhvdyBtYW55IHRvdGFsIGRtYS1waW5uZWQgcGFnZXMgaGF2ZSBiZWVuIGFjcXVpcmVkIGFuZCByZWxlYXNlZFxuIHNpbmNlIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCwgdmlhIHR3byBuZXcgL3Byb2Mvdm1zdGF0IGVudHJpZXM6IDo6XG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggODA2YmQyZDgwZDE1MzUuLjdkMTIxZGVlOWYwZjJjIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTcwMjQsNiAmIzQzOzE3MDI0LDcgQEAgVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbVxuIEY6XHRtbS9ndXAuY1xuIEY6XHRtbS9ndXBfdGVzdC5jXG4gRjpcdG1tL2d1cF90ZXN0LmhcbiYjNDM7RjpcdHRvb2xzL21tL2d1cF9iZW5jaC5jXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiBcbkBAIC0xNzEyOCw2ICYjNDM7MTcxMjksNyBAQCBGOlx0bW0vbWVtb3J5LXRpZXJzLmNcbiBGOlx0bW0vcGFnZV9pZGxlLmNcbiBGOlx0bW0vcGdhbGxvYy10cmFjay5oXG4gRjpcdG1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmNcbiYjNDM7RjpcdHRvb2xzL2xpYi9tbS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT05cbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5jIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43OTJmNGI0ZGI2MjUyZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xuQEAgLTAsMCAmIzQzOzEsMTE5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtmaWxlX3V0aWxzLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcdHNzaXplX3QgbnVtcmVhZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAoZmQgPT0gLTEpIHtcbiYjNDM7XHRcdGludCBlcnIgPSBlcnJubztcbiYjNDM7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7IyAlczogJXMgKCVkKVxcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTtcbiYjNDM7XHRcdHJldHVybiAtZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4mIzQzO1x0aWYgKG51bXJlYWQgXHUwMDNjIDEpIHtcbiYjNDM7XHRcdGludCBlcnIgPSBudW1yZWFkID8gZXJybm8gOiBFTk9EQVRBO1xuJiM0MztcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjICVzOiAlcyAoJWQpXFxuXCYjMzQ7LCBwYXRoLCBzdHJlcnJvcihlcnIpLCBlcnIpO1xuJiM0MztcdFx0cmV0dXJuIC1lcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidWZbbnVtcmVhZF0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIChpbnQpbnVtcmVhZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkLCBzYXZlZF9lcnJubztcbiYjNDM7XHRzc2l6ZV90IG51bXdyaXR0ZW47XG4mIzQzO1xuJiM0MztcdGlmIChidWZsZW4gXHUwMDNjIDIpIHtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjICVzOiAlcyAoJWQpXFxuXCYjMzQ7LCBwYXRoLCBzdHJlcnJvcihFSU5WQUwpLCBFSU5WQUwpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xuJiM0MztcdGlmIChmZCA9PSAtMSkge1xuJiM0MztcdFx0aW50IGVyciA9IGVycm5vO1xuJiM0MztcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjICVzOiAlcyAoJWQpXFxuXCYjMzQ7LCBwYXRoLCBzdHJlcnJvcihlcnIpLCBlcnIpO1xuJiM0MztcdFx0cmV0dXJuIC1lcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4mIzQzO1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApIHtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjICVzOiAlcyAoJWQpXFxuXCYjMzQ7LCBwYXRoLCBzdHJlcnJvcihzYXZlZF9lcnJubyksXG4mIzQzO1x0XHQgICAgICAgc2F2ZWRfZXJybm8pO1xuJiM0MztcdFx0cmV0dXJuIC1zYXZlZF9lcnJubztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKG51bXdyaXR0ZW4gIT0gKHNzaXplX3QpKGJ1ZmxlbiAtIDEpKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7IyAlcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBwYXRoLCAoaW50KShidWZsZW4gLSAxKSwgYnVmLCBidWZsZW4gLSAxLCBudW13cml0dGVuKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZhbDtcbiYjNDM7XHRpbnQgZXJyLCByZXQ7XG4mIzQzO1x0Y2hhciBidWZbMjFdO1xuJiM0MztcdGNoYXIgKmVuZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFudW0pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRlcnJubyA9IDA7XG4mIzQzO1x0dmFsID0gc3RydG91bChidWYsIFx1MDAyNmVuZCwgMTApO1xuJiM0MztcdGlmIChlcnJubykge1xuJiM0MztcdFx0ZXJyID0gZXJybm87XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7IyAlczogJXMgKCVkKVxcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTtcbiYjNDM7XHRcdHJldHVybiAtZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVuZCA9PSBidWYgfHwgYnVmWzBdID09ICYjMzk7LSYjMzk7KSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7IyAlczogaW52YWxpZCBudW1lcmljIHZhbHVlXFxuXCYjMzQ7LCBwYXRoKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCplbmQgPT0gJiMzOTtcXG4mIzM5OylcbiYjNDM7XHRcdGVuZCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdGlmICgqZW5kICE9ICYjMzk7XFwwJiMzOTspIHtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjICVzOiBpbnZhbGlkIG51bWVyaWMgdmFsdWVcXG5cJiMzNDssIHBhdGgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqbnVtID0gdmFsO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMjFdO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslbHVcJiMzNDssIG51bSk7XG4mIzQzO1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSAmIzQzOyAxKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmggYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM4NTc2NzkwYTM0MjQ0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXG5AQCAtMCwwICYjNDM7MSwxMiBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX19cbiYjNDM7I2RlZmluZSBfX01NX0ZJTEVfVVRJTFNfSF9fXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRkZWYuaFx1MDAzZVxuJiM0MztcbiYjNDM7aW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuJiM0MztpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuJiM0MztpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKTtcbiYjNDM7aW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbnNpbWlsYXJpdHkgaW5kZXggOTElXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbmluZGV4IDJlYWIyMTEwYWM2YTQ2Li44ZDllNDQ3MjdlZGJmNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5AQCAtOSwxMSAmIzQzOzksMTYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ZpbGVfdXRpbHMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFRIUF9TWVNGUyBcJiMzNDsvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS9cJiMzNDtcbiAjZGVmaW5lIE1BWF9TRVRUSU5HU19ERVBUSCA0XG4mIzQzO1xuJiM0MzsjaWZuZGVmIEFSUkFZX1NJWkVcbiYjNDM7I2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSlcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNldHRpbmdzX3N0YWNrW01BWF9TRVRUSU5HU19ERVBUSF07XG4gc3RhdGljIGludCBzZXR0aW5nc19pbmRleDtcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzYXZlZF9zZXR0aW5ncztcbkBAIC02MSwxMCAmIzQzOzY2LDkgQEAgaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4gXG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkge1xuLVx0XHRwZXJyb3IocGF0aCk7XG4mIzQzO1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbiBcbiBcdGMgPSBzdHJjaHIoYnVmLCAmIzM5O1smIzM5Oyk7XG4gXHRpZiAoIWMpIHtcbkBAIC0xMDMsMTIgJiM0MzsxMDcsMTUgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbClcbiBcdFx0cHJpbnRmKFwmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHR3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgJiM0MzsgMSk7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICYjNDM7IDEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG51bTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgVEhQX1NZU0ZTIFwmIzM0OyVzXCYjMzQ7LCBuYW1lKTtcbkBAIC0xMTYsNyAmIzQzOzEyMywxMSBAQCB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxuIFx0XHRwcmludGYoXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbi1cdHJldHVybiByZWFkX251bShwYXRoKTtcbiYjNDM7XHRyZXQgPSByZWFkX251bShwYXRoLCBcdTAwMjZudW0pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBudW07XG4gfVxuIFxuIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcbkBAIC0xMjksNyAmIzQzOzE0MCw5IEBAIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcbiBcdFx0cHJpbnRmKFwmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHR3cml0ZV9udW0ocGF0aCwgbnVtKTtcbiYjNDM7XHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIH1cbiBcbiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuQEAgLTE1Nyw4ICYjNDM7MTcwLDEzIEBAIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXG4gXHRcdC5tYXhfcHRlc19zaGFyZWQgPSB0aHBfcmVhZF9udW0oXCYjMzQ7a2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWRcJiMzNDspLFxuIFx0XHQucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bShcJiMzNDtraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cJiMzNDspLFxuIFx0fTtcbi1cdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxuLVx0XHRzZXR0aW5ncy1cdTAwM2VyZWFkX2FoZWFkX2tiID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCk7XG4mIzQzO1x0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHtcbiYjNDM7XHRcdGludCByZXQgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuJiM0MztcdFx0XHRcdCAgIFx1MDAyNnNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9PUkRFUlM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICghKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgb3JkZXJzKSkge1xuQEAgLTIwOCw4ICYjNDM7MjI2LDEzIEBAIHZvaWQgdGhwX3dyaXRlX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuIFx0dGhwX3dyaXRlX251bShcJiMzNDtraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFwmIzM0Oywga2h1Z2VwYWdlZC1cdTAwM2VtYXhfcHRlc19zaGFyZWQpO1xuIFx0dGhwX3dyaXRlX251bShcJiMzNDtraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cJiMzNDssIGtodWdlcGFnZWQtXHUwMDNlcGFnZXNfdG9fc2Nhbik7XG4gXG4tXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSlcbi1cdFx0d3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuJiM0MztcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XG4mIzQzO1x0XHRpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG4mIzQzO1x0XHRcdFx0ICAgIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9PUkRFUlM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICghKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgb3JkZXJzKSlcbkBAIC0zMDYsOCAmIzQzOzMyOSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9zdXBwb3J0ZWRfb3JkZXJzKGJvb2wgaXNfc2htZW0pXG4gXHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoYWNjZXNzKHBhdGgsIEZfT0spKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbi1cdFx0aWYgKHJldClcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlIDApXG4gXHRcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbiBcdH1cbiBcbkBAIC0zODIsOCAmIzQzOzQwOCw3IEBAIGludCBkZXRlY3RfaHVnZXRsYl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwgaW50IG1heClcbiBcdFx0aWYgKHNzY2FuZihlbnRyeS1cdTAwM2VkX25hbWUsIFwmIzM0O2h1Z2VwYWdlcy0lenVrQlwmIzM0OywgXHUwMDI2a2IpICE9IDEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdHNpemVzW2NvdW50JiM0MzsmIzQzO10gPSBrYiAqIDEwMjQ7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1tJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICAga2IpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0OyMgW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxuXCYjMzQ7LCBrYik7XG4gXHR9XG4gXHRjbG9zZWRpcihkaXIpO1xuIFx0cmV0dXJuIGNvdW50O1xuQEAgLTQyNSwyOCAmIzQzOzQ1MCw0MyBAQCBzdGF0aWMgdm9pZCBodWdldGxiX3N5c2ZzX3BhdGgoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUpXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcJiMzNDtucl9odWdlcGFnZXNcJiMzNDspO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm5yKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnI7XG4gfVxuIFxuIHZvaWQgaHVnZXRsYl9zZXRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwmIzM0O25yX2h1Z2VwYWdlc1wmIzM0Oyk7XG4gXG4tXHR3cml0ZV9udW0ocGF0aCwgbnIpO1xuJiM0MztcdHJldCA9IHdyaXRlX251bShwYXRoLCBucik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiB9XG4gXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXCYjMzQ7ZnJlZV9odWdlcGFnZXNcJiMzNDspO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm5yKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnI7XG4gfVxuIFxuIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXG5AQCAtNTAyLDcgJiM0Mzs1NDIsOCBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyBzaXplc1tdLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmIChucl9lbmFibGVkIFx1MDAzZSBtYXgpIHtcbi1cdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7ZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxcblwmIzM0OywgbnJfZW5hYmxlZCwgbWF4KTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjIGRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgbnJfZW5hYmxlZCwgbWF4KTtcbiBcdFx0bnJfZW5hYmxlZCA9IG1heDtcbiBcdH1cbiBcbkBAIC01NzQsOCAmIzQzOzYxNSwxMCBAQCBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3Nfc2lnaGFuZGxlcihpbnQgc2lnKVxuIHtcbiYjNDM7XHQodm9pZClzaWc7XG4mIzQzO1xuIFx0LyogZXhpdCgpIHdpbGwgaW52b2tlIHRoZSBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCBoYW5kbGVyLiAqL1xuLVx0ZXhpdChLU0ZUX0ZBSUwpO1xuJiM0MztcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiB9XG4gXG4gdm9pZCBodWdlcGFnZV9zYXZlX3NldHRpbmdzKGJvb2wgdGhwLCBib29sIGh1Z2V0bGIpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5zaW1pbGFyaXR5IGluZGV4IDEwMCVcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbnJlbmFtZSB0byB0b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlXG5pbmRleCA5MjI4NzlmOTNmYzg0OS4uMTU0ZDc0MGJlMDJlODIgMTAwNjQ0XG4tLS0gYS90b29scy9tbS8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS8uZ2l0aWdub3JlXG5AQCAtMiwzICYjNDM7Miw1IEBAXG4gc2xhYmluZm9cbiBwYWdlLXR5cGVzXG4gcGFnZV9vd25lcl9zb3J0XG4mIzQzO3RocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4mIzQzO2d1cF9iZW5jaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcbmluZGV4IGY1NzI1YjVjMjNhYTI2Li5kODJjYzhjNDNlZTAyZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9NYWtlZmlsZVxuQEAgLTMsMTMgJiM0MzszLDE0IEBAXG4gI1xuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXG4gXG4tQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MztCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xuIFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcbiYjNDM7R1VQX0JFTkNIX09CSlMgPSBndXBfYmVuY2guYyAuLi9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyAuLi9saWIvbW0vZmlsZV91dGlscy5jXG4gXG4tQ0ZMQUdTICYjNDM7PSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtcHRocmVhZFxuJiM0MztDRkxBR1MgJiM0Mzs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1JLi4vLi4gLXB0aHJlYWRcbiBMREZMQUdTICYjNDM7PSAkKExJQlMpIC1wdGhyZWFkXG4gXG4gYWxsOiAkKEJVSUxEX1RBUkdFVFMpXG5AQCAtMjIsOCAmIzQzOzIzLDExIEBAICQoTElCUyk6XG4gJTogJS5jXG4gXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFx1MDAzYyAkKExERkxBR1MpXG4gXG4mIzQzO2d1cF9iZW5jaDogJChHVVBfQkVOQ0hfT0JKUykgJChMSUJTKVxuJiM0MztcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKEdVUF9CRU5DSF9PQkpTKSAkKExERkxBR1MpXG4mIzQzO1xuIGNsZWFuOlxuLVx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiYjNDM7XHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2hcbiBcdG1ha2UgLUMgJChMSUJfRElSKSBjbGVhblxuIFxuIHNiaW5kaXIgPz0gL3Vzci9zYmluXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vZ3VwX2JlbmNoLmMgYi90b29scy9tbS9ndXBfYmVuY2guY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40OTdiOGYzZjZhYzRiNFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbkBAIC0wLDAgJiM0MzsxLDQ4MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBNaWNyb2JlbmNobWFyayBmb3IgZ2V0X3VzZXJfcGFnZXMgKEdVUCkga2VybmVsIGludGVyZmFjZXMuXG4mIzQzOyAqXG4mIzQzOyAqIEV4ZXJjaXNlcyBHVVBfRkFTVF9CRU5DSE1BUkssIFBJTl9GQVNUX0JFTkNITUFSSywgYW5kXG4mIzQzOyAqIFBJTl9MT05HVEVSTV9CRU5DSE1BUksgdmlhIHRoZSBDT05GSUdfR1VQX1RFU1QgZGVidWdmcyBpbnRlcmZhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIEV4YW1wbGUgdXNlOlxuJiM0MzsgKiAgICMgUnVuIHRoZSBmdWxsIG1hdHJpeCAoYWxsIGNvbW1hbmRzLCBhY2Nlc3MgbW9kZXMsIHBhZ2UgY291bnRzKTpcbiYjNDM7ICogICAuL2d1cF9iZW5jaFxuJiM0MzsgKlxuJiM0MzsgKiAgICMgU2luZ2xlIHJ1bjogcGluX3VzZXJfcGFnZXNfZmFzdCwgNTEyIHBhZ2VzLCB3cml0ZSBhY2Nlc3MsIGh1Z2V0bGI6XG4mIzQzOyAqICAgLi9ndXBfYmVuY2ggLWEgLW4gNTEyIC13IC1IXG4mIzQzOyAqXG4mIzQzOyAqIFJlcXVpcmVzIENPTkZJR19HVVBfVEVTVD15IGFuZCBkZWJ1Z2ZzIG1vdW50ZWQgYXQgL3N5cy9rZXJuZWwvZGVidWcuXG4mIzQzOyAqIE11c3QgYmUgcnVuIGFzIHJvb3QuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGF0b21pYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2d1cF90ZXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBNQiAoMVVMIFx1MDAzY1x1MDAzYyAyMClcbiYjNDM7XG4mIzQzOyNpZm5kZWYgQVJSQVlfU0laRVxuJiM0MzsjZGVmaW5lIEFSUkFZX1NJWkUoYXJyKSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOy8qIEp1c3QgdGhlIGZsYWdzIHdlIG5lZWQsIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgaW50ZXJuYWxzLiAqL1xuJiM0MzsjZGVmaW5lIEZPTExfV1JJVEVcdDB4MDFcdC8qIGNoZWNrIHB0ZSBpcyB3cml0YWJsZSAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBHVVBfVEVTVF9GSUxFIFwmIzM0Oy9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0XCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHBzaXplKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xuJiM0MztcbiYjNDM7XHRpZiAoIV9fcGFnZV9zaXplKVxuJiM0MztcdFx0X19wYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XG4mIzQzO1x0cmV0dXJuIF9fcGFnZV9zaXplO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBjbWQ7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICpiZW5jaF9sYWJlbDtcbiYjNDM7c3RhdGljIGludCBndXBfZmQsIHJlcGVhdHMgPSAxO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7XG4mIzQzO3N0YXRpYyBhdG9taWNfaW50IGJlbmNoX2Vycm9yO1xuJiM0MzsvKiBTZXJpYWxpemUgcHJpbnRzICovXG4mIzQzO3N0YXRpYyBwdGhyZWFkX211dGV4X3QgcHJpbnRfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgYmVuY2hfY21kc1tdID0ge1xuJiM0MztcdEdVUF9GQVNUX0JFTkNITUFSSyxcbiYjNDM7XHRQSU5fRkFTVF9CRU5DSE1BUkssXG4mIzQzO1x0UElOX0xPTkdURVJNX0JFTkNITUFSSyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBpbnQgYmVuY2hfdGhwX21vZGVzW10gPSB7IDEsIDAgfTtcdC8qIG9uLCBvZmYgKi9cbiYjNDM7c3RhdGljIGNvbnN0IGludCBiZW5jaF9ucl9wYWdlc19saXN0W10gPSB7IDEsIDUxMiwgMTIzLCAtMSB9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmNtZF90b19zdHIodW5zaWduZWQgbG9uZyBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGNtZCkge1xuJiM0MztcdGNhc2UgR1VQX0ZBU1RfQkVOQ0hNQVJLOlxuJiM0MztcdFx0cmV0dXJuIFwmIzM0O0dVUF9GQVNUX0JFTkNITUFSS1wmIzM0OztcbiYjNDM7XHRjYXNlIFBJTl9GQVNUX0JFTkNITUFSSzpcbiYjNDM7XHRcdHJldHVybiBcJiMzNDtQSU5fRkFTVF9CRU5DSE1BUktcJiMzNDs7XG4mIzQzO1x0Y2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOlxuJiM0MztcdFx0cmV0dXJuIFwmIzM0O1BJTl9MT05HVEVSTV9CRU5DSE1BUktcJiMzNDs7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBcJiMzNDtVbmtub3duIGNvbW1hbmRcJiMzNDs7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIHBhcnNlX2xvbmdfYXJnX2Jhc2UoY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgYmFzZSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgKmVuZDtcbiYjNDM7XHRsb25nIHZhbDtcbiYjNDM7XG4mIzQzO1x0ZXJybm8gPSAwO1xuJiM0MztcdHZhbCA9IHN0cnRvbChhcmcsIFx1MDAyNmVuZCwgYmFzZSk7XG4mIzQzO1x0aWYgKGVycm5vIHx8IGVuZCA9PSBhcmcgfHwgKmVuZCAhPSAmIzM5O1xcMCYjMzk7KSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7SW52YWxpZCAlcyAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG5hbWUsIGFyZyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gdmFsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBwYXJzZV9sb25nX2FyZyhjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGFyc2VfbG9uZ19hcmdfYmFzZShhcmcsIG5hbWUsIDEwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcoY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0bG9uZyB2YWwgPSBwYXJzZV9sb25nX2FyZyhhcmcsIG5hbWUpO1xuJiM0MztcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAxKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7SW52YWxpZCAlcyAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG5hbWUsIGFyZyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IGJlbmNoX3J1biB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBjbWQ7XG4mIzQzO1x0aW50IHRocDtcdFx0LyogLTE6IGRlZmF1bHQsIDA6IG9mZiwgMTogb24gKi9cbiYjNDM7XHRib29sIGh1Z2V0bGI7XG4mIzQzO1x0Ym9vbCB3cml0ZTtcdFx0Lyogd2hldGhlciB0byBzZXQgRk9MTF9XUklURSAqL1xuJiM0MztcdGJvb2wgc2hhcmVkO1xuJiM0MztcdGludCBucl9wYWdlcztcdFx0LyogLTEgbWVhbnMgYWxsIHBhZ2VzIChzaXplIC8gcHNpemUoKSkgKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemU7XG4mIzQzO1x0Y2hhciAqZmlsZTtcbiYjNDM7XHRpbnQgbnRocmVhZHM7XG4mIzQzO1x0dW5zaWduZWQgaW50IGd1cF9mbGFncztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7XG4mIzQzO1x0aW50IGksIHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVwZWF0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGd1cC5zaXplID0gc2l6ZTtcbiYjNDM7XHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuJiM0MztcdFx0aWYgKHN0YXR1cykge1xuJiM0MztcdFx0XHRiZW5jaF9lcnJvciA9IDE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXMgdGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcJiMzNDssXG4mIzQzO1x0XHQgICAgICAgYmVuY2hfbGFiZWwsIGd1cC5nZXRfZGVsdGFfdXNlYyxcbiYjNDM7XHRcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xuJiM0MztcdFx0aWYgKGd1cC5zaXplICE9IHNpemUpXG4mIzQzO1x0XHRcdHByaW50ZihcJiMzNDssIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcJiMzNDssIGd1cC5zaXplKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDtcXG5cJiMzNDspO1xuJiM0MztcdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnVuX2JlbmNoKHN0cnVjdCBiZW5jaF9ydW4gKnJ1bilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbiYjNDM7XHRpbnQgemVyb19mZCwgaSwgcmV0LCBzdGFydGVkX3RocmVhZHMgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXNfcGVyX2NhbGw7XG4mIzQzO1x0aW50IGZsYWdzID0gTUFQX1BSSVZBVEU7XG4mIzQzO1x0cHRocmVhZF90ICp0aWQ7XG4mIzQzO1x0Y2hhciBsYWJlbFsxMjhdO1xuJiM0MztcdGNoYXIgKnA7XG4mIzQzO1x0Ym9vbCByZXN0b3JlX2h1Z2V0bGIgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGdsb2JhbHMgY29uc3VtZWQgYnkgZ3VwX3RocmVhZCAqL1xuJiM0MztcdGNtZCA9IHJ1bi1cdTAwM2VjbWQ7XG4mIzQzO1x0c2l6ZSA9IHJ1bi1cdTAwM2VzaXplO1xuJiM0MztcdGJlbmNoX2Vycm9yID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bi1cdTAwM2VodWdldGxiKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFocF9zaXplKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtDb3VsZCBub3QgZGV0ZXJtaW5lIGh1Z2UgcGFnZSBzaXplXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNpemUgXHUwMDNlIFVMT05HX01BWCAtIChocF9zaXplIC0gMSkpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0h1Z2VUTEIgbWFwcGluZyBzaXplIGlzIHRvbyBsYXJnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHNpemUgPSAoc2l6ZSAmIzQzOyBocF9zaXplIC0gMSkgXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xuJiM0MztcdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbiYjNDM7XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXN0b3JlX2h1Z2V0bGIgPSB0cnVlO1xuJiM0MztcdFx0ZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocnVuLVx1MDAzZXNoYXJlZCkge1xuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+TUFQX1BSSVZBVEU7XG4mIzQzO1x0XHRmbGFncyB8PSBNQVBfU0hBUkVEO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bnJfcGFnZXNfcGVyX2NhbGwgPSBydW4tXHUwMDNlbnJfcGFnZXMgXHUwMDNjIDAgPyBzaXplIC8gcHNpemUoKSA6XG4mIzQzO1x0XHQodW5zaWduZWQgbG9uZylydW4tXHUwMDNlbnJfcGFnZXM7XG4mIzQzO1xuJiM0MztcdGlmIChucl9wYWdlc19wZXJfY2FsbCBcdTAwM2UgVUlOVF9NQVgpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtQYWdlIGNvdW50IGlzIHRvbyBsYXJnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAocmVzdG9yZV9odWdldGxiKVxuJiM0MztcdFx0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19wZXJfY2FsbDtcbiYjNDM7XG4mIzQzO1x0Z3VwLmd1cF9mbGFncyA9IHJ1bi1cdTAwM2VndXBfZmxhZ3M7XG4mIzQzO1x0aWYgKHJ1bi1cdTAwM2V3cml0ZSlcbiYjNDM7XHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYobGFiZWwsIHNpemVvZihsYWJlbCksIFwmIzM0OyVzIChucl9wYWdlcz0lLTR1ICVzICVzICVzICVzKVwmIzM0OyxcbiYjNDM7XHRcdCBjbWRfdG9fc3RyKHJ1bi1cdTAwM2VjbWQpLFxuJiM0MztcdFx0IGd1cC5ucl9wYWdlc19wZXJfY2FsbCxcbiYjNDM7XHRcdCBydW4tXHUwMDNld3JpdGUgID8gXCYjMzQ7d3JpdGVcJiMzNDsgICA6IFwmIzM0O3JlYWRcJiMzNDssXG4mIzQzO1x0XHQgcnVuLVx1MDAzZXNoYXJlZCA/IFwmIzM0O3NoYXJlZFwmIzM0OyAgOiBcJiMzNDtwcml2YXRlXCYjMzQ7LFxuJiM0MztcdFx0IHJ1bi1cdTAwM2VodWdldGxiID8gXCYjMzQ7aHVnZXRsYj1vblwmIzM0OyA6IFwmIzM0O2h1Z2V0bGI9b2ZmXCYjMzQ7LFxuJiM0MztcdFx0IHJ1bi1cdTAwM2VodWdldGxiID8gXCYjMzQ7dGhwPW9mZlwmIzM0OyA6XG4mIzQzO1x0XHQgKHJ1bi1cdTAwM2V0aHAgPT0gMSA/IFwmIzM0O3RocD1vblwmIzM0OyA6XG4mIzQzO1x0XHQgKHJ1bi1cdTAwM2V0aHAgPT0gMCA/IFwmIzM0O3RocD1vZmZcJiMzNDsgOiBcJiMzNDt0aHA9ZGVmYXVsdFwmIzM0OykpKTtcbiYjNDM7XHRiZW5jaF9sYWJlbCA9IGxhYmVsO1xuJiM0MztcbiYjNDM7XHR6ZXJvX2ZkID0gb3BlbihydW4tXHUwMDNlZmlsZSwgT19SRFdSKTtcbiYjNDM7XHRpZiAoemVyb19mZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1VuYWJsZSB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgcnVuLVx1MDAzZWZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0XHRpZiAocmVzdG9yZV9odWdldGxiKVxuJiM0MztcdFx0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIHplcm9fZmQsIDApO1xuJiM0MztcdGNsb3NlKHplcm9fZmQpO1xuJiM0MztcdGlmIChwID09IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDttbWFwOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdGlmIChyZXN0b3JlX2h1Z2V0bGIpXG4mIzQzO1x0XHRcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bi1cdTAwM2V0aHAgPT0gMSlcbiYjNDM7XHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4mIzQzO1x0ZWxzZSBpZiAocnVuLVx1MDAzZXRocCA9PSAwKVxuJiM0MztcdFx0bWFkdmlzZShwLCBzaXplLCBNQURWX05PSFVHRVBBR0UpO1xuJiM0MztcbiYjNDM7XHQvKiBGYXVsdCB0aGVtIGluIGhlcmUsIGZyb20gdXNlciBzcGFjZS4gKi9cbiYjNDM7XHRmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgZ3VwLmFkZHIgJiM0Mzsgc2l6ZTsgcCAmIzQzOz0gcHNpemUoKSlcbiYjNDM7XHRcdHBbMF0gPSAwO1xuJiM0MztcbiYjNDM7XHR0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBydW4tXHUwMDNlbnRocmVhZHMpO1xuJiM0MztcdGlmICghdGlkKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlICVkIHRocmVhZHM6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRydW4tXHUwMDNlbnRocmVhZHMsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0XHRtdW5tYXAoKHZvaWQgKilndXAuYWRkciwgc2l6ZSk7XG4mIzQzO1x0XHRpZiAocmVzdG9yZV9odWdldGxiKVxuJiM0MztcdFx0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcnVuLVx1MDAzZW50aHJlYWRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCBcdTAwMjZndXApO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7cHRocmVhZF9jcmVhdGUgZmFpbGVkOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IocmV0KSk7XG4mIzQzO1x0XHRcdGJlbmNoX2Vycm9yID0gMTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzdGFydGVkX3RocmVhZHMmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdGFydGVkX3RocmVhZHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXQgPSBwdGhyZWFkX2pvaW4odGlkW2ldLCBOVUxMKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3B0aHJlYWRfam9pbiBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihyZXQpKTtcbiYjNDM7XHRcdFx0YmVuY2hfZXJyb3IgPSAxO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZnJlZSh0aWQpO1xuJiM0MztcdG11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTtcbiYjNDM7XHRpZiAocmVzdG9yZV9odWdldGxiKVxuJiM0MztcdFx0aHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBiZW5jaF9lcnJvciA/IDEgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ1bl9tYXRyaXgodm9pZClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBjLCB0LCB3LCBzLCBuO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGMgPSAwOyBjIFx1MDAzYyBBUlJBWV9TSVpFKGJlbmNoX2NtZHMpOyBjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yICh3ID0gMDsgdyBcdTAwM2M9IDE7IHcmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGZvciAocyA9IDA7IHMgXHUwMDNjPSAxOyBzJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdGZvciAodCA9IDA7IHQgXHUwMDNjIEFSUkFZX1NJWkUoYmVuY2hfdGhwX21vZGVzKTsgdCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0XHRcdGZvciAobiA9IDA7IG4gXHUwMDNjIEFSUkFZX1NJWkUoYmVuY2hfbnJfcGFnZXNfbGlzdCk7IG4mIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdFx0XHRcdHN0cnVjdCBiZW5jaF9ydW4gcnVuID0ge1xuJiM0MztcdFx0XHRcdFx0XHRcdC5jbWRcdCAgPSBiZW5jaF9jbWRzW2NdLFxuJiM0MztcdFx0XHRcdFx0XHRcdC50aHBcdCAgPSBiZW5jaF90aHBfbW9kZXNbdF0sXG4mIzQzO1x0XHRcdFx0XHRcdFx0Lmh1Z2V0bGIgID0gZmFsc2UsXG4mIzQzO1x0XHRcdFx0XHRcdFx0LndyaXRlXHQgID0gdyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQuc2hhcmVkXHQgID0gcyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQubnJfcGFnZXMgPSBiZW5jaF9ucl9wYWdlc19saXN0W25dLFxuJiM0MztcdFx0XHRcdFx0XHRcdC5zaXplXHQgID0gMTI4ICogTUIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0LmZpbGVcdCAgPSBcJiMzNDsvZGV2L3plcm9cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFx0Lm50aHJlYWRzID0gMSxcbiYjNDM7XHRcdFx0XHRcdFx0fTtcbiYjNDM7XHRcdFx0XHRcdFx0cmV0IHw9IHJ1bl9iZW5jaChcdTAwMjZydW4pO1xuJiM0MztcdFx0XHRcdFx0fVxuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHQvKiBodWdldGxiOiAyNTZNIHRvIG1hdGNoIHJ1bl9ndXBfbWF0cml4KCkgaW4gcnVuX3ZtdGVzdHMuc2ggKi9cbiYjNDM7XHRcdFx0XHRmb3IgKG4gPSAwOyBuIFx1MDAzYyBBUlJBWV9TSVpFKGJlbmNoX25yX3BhZ2VzX2xpc3QpOyBuJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdFx0c3RydWN0IGJlbmNoX3J1biBydW4gPSB7XG4mIzQzO1x0XHRcdFx0XHRcdC5jbWRcdCAgPSBiZW5jaF9jbWRzW2NdLFxuJiM0MztcdFx0XHRcdFx0XHQudGhwXHQgID0gLTEsXG4mIzQzO1x0XHRcdFx0XHRcdC5odWdldGxiICA9IHRydWUsXG4mIzQzO1x0XHRcdFx0XHRcdC53cml0ZVx0ICA9IHcsXG4mIzQzO1x0XHRcdFx0XHRcdC5zaGFyZWRcdCAgPSBzLFxuJiM0MztcdFx0XHRcdFx0XHQubnJfcGFnZXMgPSBiZW5jaF9ucl9wYWdlc19saXN0W25dLFxuJiM0MztcdFx0XHRcdFx0XHQuc2l6ZVx0ICA9IDI1NiAqIE1CLFxuJiM0MztcdFx0XHRcdFx0XHQuZmlsZVx0ICA9IFwmIzM0Oy9kZXYvemVyb1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0Lm50aHJlYWRzID0gMSxcbiYjNDM7XHRcdFx0XHRcdH07XG4mIzQzO1x0XHRcdFx0XHRyZXQgfD0gcnVuX2JlbmNoKFx1MDAyNnJ1bik7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiZW5jaF9ydW4gcnVuID0ge1xuJiM0MztcdFx0LmNtZFx0ICA9IEdVUF9GQVNUX0JFTkNITUFSSyxcbiYjNDM7XHRcdC50aHBcdCAgPSAtMSxcbiYjNDM7XHRcdC5odWdldGxiICA9IGZhbHNlLFxuJiM0MztcdFx0LndyaXRlXHQgID0gdHJ1ZSxcbiYjNDM7XHRcdC5zaGFyZWRcdCAgPSBmYWxzZSxcbiYjNDM7XHRcdC5ucl9wYWdlcyA9IDEsXG4mIzQzO1x0XHQuc2l6ZVx0ICA9IDEyOCAqIE1CLFxuJiM0MztcdFx0LmZpbGVcdCAgPSBcJiMzNDsvZGV2L3plcm9cJiMzNDssXG4mIzQzO1x0XHQubnRocmVhZHMgPSAxLFxuJiM0MztcdH07XG4mIzQzO1x0aW50IG9wdCwgcmVzdWx0O1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDttOnI6bjpGOmY6YWo6dFRMdXdXU0hcJiMzNDspKSAhPSAtMSkge1xuJiM0MztcdFx0c3dpdGNoIChvcHQpIHtcbiYjNDM7XHRcdC8qIENvbW1hbmQgc2VsZWN0aW9uICovXG4mIzQzO1x0XHRjYXNlICYjMzk7dSYjMzk7OlxuJiM0MztcdFx0XHRydW4uY21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTthJiMzOTs6XG4mIzQzO1x0XHRcdHJ1bi5jbWQgPSBQSU5fRkFTVF9CRU5DSE1BUks7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O0wmIzM5OzpcbiYjNDM7XHRcdFx0cnVuLmNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIE1lbW9yeSB0eXBlICovXG4mIzQzO1x0XHRjYXNlICYjMzk7SCYjMzk7OlxuJiM0MztcdFx0XHRydW4uaHVnZXRsYiA9IHRydWU7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O3QmIzM5OzpcbiYjNDM7XHRcdFx0cnVuLnRocCA9IDE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O1QmIzM5OzpcbiYjNDM7XHRcdFx0cnVuLnRocCA9IDA7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIEFjY2VzcyBtb2RlICovXG4mIzQzO1x0XHRjYXNlICYjMzk7dyYjMzk7OlxuJiM0MztcdFx0XHRydW4ud3JpdGUgPSB0cnVlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtXJiMzOTs6XG4mIzQzO1x0XHRcdHJ1bi53cml0ZSA9IGZhbHNlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtTJiMzOTs6XG4mIzQzO1x0XHRcdHJ1bi5zaGFyZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiBNYXBwaW5nICovXG4mIzQzO1x0XHRjYXNlICYjMzk7ZiYjMzk7OlxuJiM0MztcdFx0XHRydW4uZmlsZSA9IG9wdGFyZztcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0LyogU2l6aW5nIGFuZCBpdGVyYXRpb24gKi9cbiYjNDM7XHRcdGNhc2UgJiMzOTttJiMzOTs6XG4mIzQzO1x0XHRcdHJ1bi5zaXplID0gcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcob3B0YXJnLCBcJiMzNDtzaXplXCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKHJ1bi5zaXplIFx1MDAzZSBVTE9OR19NQVggLyBNQikge1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtJbnZhbGlkIHNpemUgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBvcHRhcmcpO1xuJiM0MztcdFx0XHRcdGV4aXQoMSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cnVuLnNpemUgKj0gTUI7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O24mIzM5Ozoge1xuJiM0MztcdFx0XHRsb25nIHZhbDtcbiYjNDM7XG4mIzQzO1x0XHRcdHZhbCA9IHBhcnNlX2xvbmdfYXJnKG9wdGFyZywgXCYjMzQ7cGFnZSBjb3VudFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmICh2YWwgIT0gLTEgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDNjIDEgfHwgdmFsIFx1MDAzZSBJTlRfTUFYKSkge1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtJbnZhbGlkIHBhZ2UgY291bnQgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBvcHRhcmcpO1xuJiM0MztcdFx0XHRcdGV4aXQoMSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cnVuLm5yX3BhZ2VzID0gdmFsO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhc2UgJiMzOTtyJiMzOTs6IHtcbiYjNDM7XHRcdFx0bG9uZyB2YWw7XG4mIzQzO1xuJiM0MztcdFx0XHR2YWwgPSBwYXJzZV9wb3NpdGl2ZV9sb25nX2FyZyhvcHRhcmcsIFwmIzM0O3JlcGVhdCBjb3VudFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmICh2YWwgXHUwMDNlIElOVF9NQVgpIHtcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7SW52YWxpZCByZXBlYXQgY291bnQgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBvcHRhcmcpO1xuJiM0MztcdFx0XHRcdGV4aXQoMSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmVwZWF0cyA9IHZhbDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRjYXNlICYjMzk7aiYjMzk7OiB7XG4mIzQzO1x0XHRcdGxvbmcgdmFsO1xuJiM0MztcbiYjNDM7XHRcdFx0dmFsID0gcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcob3B0YXJnLCBcJiMzNDt0aHJlYWQgY291bnRcJiMzNDspO1xuJiM0MztcdFx0XHRpZiAodmFsIFx1MDAzZSBJTlRfTUFYIHx8XG4mIzQzO1x0XHRcdCAgICAoc2l6ZV90KXZhbCBcdTAwM2UgU0laRV9NQVggLyBzaXplb2YocHRocmVhZF90KSkge1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtJbnZhbGlkIHRocmVhZCBjb3VudCAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG9wdGFyZyk7XG4mIzQzO1x0XHRcdFx0ZXhpdCgxKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRydW4ubnRocmVhZHMgPSB2YWw7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIEFkdmFuY2VkICovXG4mIzQzO1x0XHRjYXNlICYjMzk7RiYjMzk7OiB7XG4mIzQzO1x0XHRcdGxvbmcgdmFsO1xuJiM0MztcbiYjNDM7XHRcdFx0dmFsID0gcGFyc2VfbG9uZ19hcmdfYmFzZShvcHRhcmcsIFwmIzM0O0dVUCBmbGFnc1wmIzM0OywgMCk7XG4mIzQzO1x0XHRcdGlmICh2YWwgXHUwMDNjIDAgfHwgdmFsIFx1MDAzZSBVSU5UX01BWCkge1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtJbnZhbGlkIEdVUCBmbGFncyAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG9wdGFyZyk7XG4mIzQzO1x0XHRcdFx0ZXhpdCgxKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cnVuLmd1cF9mbGFncyA9IHZhbDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1dyb25nIGFyZ3VtZW50XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZXhpdCgxKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvcHRpbmQgIT0gYXJnYykge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1VuZXhwZWN0ZWQgYXJndW1lbnQgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBhcmd2W29wdGluZF0pO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbiYjNDM7XHRpZiAoZ3VwX2ZkID09IC0xKSB7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRUFDQ0VTKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtQbGVhc2UgcnVuIGFzIHJvb3RcXG5cJiMzNDspO1xuJiM0MztcdFx0fSBlbHNlIGlmIChlcnJubyA9PSBFTk9FTlQpIHtcbiYjNDM7XHRcdFx0RElSICpkZWJ1Z2ZzID0gb3BlbmRpcihcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Z1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIWRlYnVnZnMpIHtcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7TW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0Y2xvc2VkaXIoZGVidWdmcyk7XG4mIzQzO1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0NoZWNrIENPTkZJR19HVVBfVEVTVCBpbiBrZXJuZWwgY29uZmlnXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0ZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgR1VQX1RFU1RfRklMRSxcbiYjNDM7XHRcdFx0XHRzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlc3VsdCA9IChhcmdjID09IDEpID8gcnVuX21hdHJpeCgpIDogcnVuX2JlbmNoKFx1MDAyNnJ1bik7XG4mIzQzO1x0Y2xvc2UoZ3VwX2ZkKTtcbiYjNDM7XHRyZXR1cm4gcmVzdWx0O1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggZTZkZjk2OGYwOTcxYzguLmU3N2M0Y2M0MWI0NzAzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMzcsNyAmIzQzOzM3LDggQEAgZW5kaWZcbiAjIExETElCUy5cbiBNQUtFRkxBR1MgJiM0Mzs9IC0tbm8tYnVpbHRpbi1ydWxlc1xuIFxuLUNGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXG4mIzQzO0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliXG4mIzQzO0NGTEFHUyAmIzQzOz0gJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUylcbiBDRkxBR1MgJiM0Mzs9IC1XdW5yZWFjaGFibGUtY29kZVxuIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbVxuIFxuQEAgLTE4Nyw4ICYjNDM7MTg4LDEwIEBAIFRFU1RfRklMRVMgJiM0Mzs9IHdyaXRlX2h1Z2V0bGJfbWVtb3J5LnNoXG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbiBcbi0kKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbiYjNDM7JChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXG4mIzQzO1x0XHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbiYjNDM7JChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXG4mIzQzO1x0XHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbiBcbiAkKE9VVFBVVCkvdWZmZC1zdHJlc3M6IHVmZmQtY29tbW9uLmNcbiAkKE9VVFBVVCkvdWZmZC11bml0LXRlc3RzOiB1ZmZkLWNvbW1vbi5jXG5AQCAtMjE3LDcgJiM0MzsyMjAsNyBAQCAkKEJJTkFSSUVTXzMyKTogQ0ZMQUdTICYjNDM7PSAtbTMyIC1teHNhdmVcbiAkKEJJTkFSSUVTXzMyKTogTERMSUJTICYjNDM7PSAtbHJ0IC1sZGwgLWxtXG4gJChCSU5BUklFU18zMik6ICQoT1VUUFVUKS8lXzMyOiAlLmNcbiBcdCQoY2FsbCBtc2csQ0MsLCRAKVxuLVx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxuJiM0MztcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQFxuICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS0zMiwkKHQpKSkpXG4gZW5kaWZcbiBcbkBAIC0yMjYsNyAmIzQzOzIyOSw3IEBAICQoQklOQVJJRVNfNjQpOiBDRkxBR1MgJiM0Mzs9IC1tNjQgLW14c2F2ZVxuICQoQklOQVJJRVNfNjQpOiBMRExJQlMgJiM0Mzs9IC1scnQgLWxkbFxuICQoQklOQVJJRVNfNjQpOiAkKE9VVFBVVCkvJV82NDogJS5jXG4gXHQkKGNhbGwgbXNnLENDLCwkQClcbi1cdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEBcbiYjNDM7XHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtNjQsJCh0KSkpKVxuIGVuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuaW5kZXggNWI1ODI1ODhlMDE1ZDQuLmIyZWFhNDkwZTdjMjUzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG5AQCAtMTUsOSAmIzQzOzE1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBNQVBfU0laRV9NQlx0MTAwXG4gI2RlZmluZSBNQVBfU0laRVx0KE1BUF9TSVpFX01CICogMTAyNCAqIDEwMjQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuaW5kZXggMGM2MjdlYTg5ZmY3YjIuLjNjM2QxMjljOTFiMjlkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5AQCAtMjksNyAmIzQzOzI5LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xuaW5kZXggNjMyOWUzN2ZmZjRjOTQuLjQ5NmI3NGIzNzQ3NmIzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMjUsNyAmIzQzOzI1LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIHVpbnQ2NF90IHBhZ2Vfc2l6ZTtcbiB1aW50NjRfdCBwbWRfcGFnZXNpemU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5pbmRleCBiMjFkZjMwNDBiMWM3Yy4uZWQ5NjdiM2M3ZjM3MDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuQEAgLTIxLDcgJiM0MzsyMSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3Vpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4vcGlkZmQvcGlkZmQuaFwmIzM0O1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbmluZGV4IGViODk2M2U5ZDk4ZjA2Li42OGM4NDBiYWUwODIwOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuQEAgLTI5LDcgJiM0MzsyOSw2IEBAXG4gI2luY2x1ZGUgXCYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XG4gc3RhdGljIGludCBucl9odWdldGxic2l6ZXM7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbmluZGV4IDNmODQxYTk2Zjg3MDY4Li5kOWNhYTlmYjhiNzg1NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbkBAIC0xLDI3NSAmIzQzOzEsNDQzIEBAXG4gI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcbiAjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2RpcmVudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYXNzZXJ0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NtbS9ndXBfdGVzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIE1CICgxVUwgXHUwMDNjXHUwMDNjIDIwKVxuIFxuJiM0MzsjaWZuZGVmIEFSUkFZX1NJWkVcbiYjNDM7I2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSlcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qIEp1c3QgdGhlIGZsYWdzIHdlIG5lZWQsIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgaW50ZXJuYWxzLiAqL1xuICNkZWZpbmUgRk9MTF9XUklURVx0MHgwMVx0LyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovXG4gXG4mIzQzOy8qIFBhZ2UgY291bnRzIGV4ZXJjaXNpbmcgc2luZ2xlLCBUSFAtYmF0Y2gsIHBhcnRpYWwsIGFuZCBmdWxsLW1hcHBpbmcgR1VQLiAqL1xuJiM0MztzdGF0aWMgY29uc3QgaW50IG5yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07XG4mIzQzO1xuICNkZWZpbmUgR1VQX1RFU1RfRklMRSBcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdFwmIzM0O1xuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSztcbi1zdGF0aWMgaW50IGd1cF9mZCwgcmVwZWF0cyA9IDE7XG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDEyOCAqIE1CO1xuLS8qIFNlcmlhbGl6ZSBwcmludHMgKi9cbi1zdGF0aWMgcHRocmVhZF9tdXRleF90IHByaW50X211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjtcbiYjNDM7RklYVFVSRShndXBfdGVzdClcbiYjNDM7e1xuJiM0MztcdGludCBndXBfZmQ7XG4mIzQzO1x0Y2hhciAqYWRkcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRib29sIHRocDtcbiYjNDM7XHRib29sIGh1Z2V0bGI7XG4mIzQzO1x0Ym9vbCB3cml0ZTtcbiYjNDM7XHRib29sIHNoYXJlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGUpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZG9ubHkpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSB0cnVlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRvbmx5X3RocClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSB0cnVlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV9odWdldGxiKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gdHJ1ZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZG9ubHlfaHVnZXRsYilcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IHRydWUsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkb25seSlcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSB0cnVlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiBcbi1zdGF0aWMgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZClcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRvbmx5X3RocClcbiB7XG4tXHRzd2l0Y2ggKGNtZCkge1xuLVx0Y2FzZSBHVVBfRkFTVF9CRU5DSE1BUks6XG4tXHRcdHJldHVybiBcJiMzNDtHVVBfRkFTVF9CRU5DSE1BUktcJiMzNDs7XG4tXHRjYXNlIFBJTl9GQVNUX0JFTkNITUFSSzpcbi1cdFx0cmV0dXJuIFwmIzM0O1BJTl9GQVNUX0JFTkNITUFSS1wmIzM0Oztcbi1cdGNhc2UgUElOX0xPTkdURVJNX0JFTkNITUFSSzpcbi1cdFx0cmV0dXJuIFwmIzM0O1BJTl9MT05HVEVSTV9CRU5DSE1BUktcJiMzNDs7XG4tXHRjYXNlIEdVUF9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCYjMzQ7R1VQX0JBU0lDX1RFU1RcJiMzNDs7XG4tXHRjYXNlIFBJTl9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCYjMzQ7UElOX0JBU0lDX1RFU1RcJiMzNDs7XG4tXHRjYXNlIERVTVBfVVNFUl9QQUdFU19URVNUOlxuLVx0XHRyZXR1cm4gXCYjMzQ7RFVNUF9VU0VSX1BBR0VTX1RFU1RcJiMzNDs7XG4mIzQzO1x0LnRocCA9IHRydWUsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV9odWdldGxiKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gdHJ1ZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRvbmx5X2h1Z2V0bGIpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSB0cnVlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChndXBfdGVzdClcbiYjNDM7e1xuJiM0MztcdGludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEU7XG4mIzQzO1x0aW50IHplcm9fZmQ7XG4mIzQzO1x0Y2hhciAqcDtcbiYjNDM7XG4mIzQzO1x0LyogemVyb19mZCBoYXMgdG8gYmUgXHUwMDNlPSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovXG4mIzQzO1x0emVyb19mZCA9IG9wZW4oXCYjMzQ7L2Rldi96ZXJvXCYjMzQ7LCBPX1JEV1IpO1xuJiM0MztcdEFTU0VSVF9HRSh6ZXJvX2ZkLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogZ3VwX2ZkIGhhcyB0byBiZSBcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cbiYjNDM7XHRzZWxmLVx1MDAzZWd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbiYjNDM7XHRBU1NFUlRfR0Uoc2VsZi1cdTAwM2VndXBfZmQsIDApO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZXNpemUgPSB2YXJpYW50LVx1MDAzZWh1Z2V0bGIgPyAyNTYgKiBNQiA6IDEyOCAqIE1CO1xuJiM0MztcbiYjNDM7XHQvKiBDaGVjayBmb3IgaHVnZXRsYiAqL1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZWh1Z2V0bGIpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWhwX3NpemUpIHtcbiYjNDM7XHRcdFx0Y2xvc2UoemVyb19mZCk7XG4mIzQzO1x0XHRcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbiYjNDM7XHRcdFx0U0tJUChyZXR1cm4sIFwmIzM0O0h1Z2VUTEIgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0c2VsZi1cdTAwM2VzaXplID0gKHNlbGYtXHUwMDNlc2l6ZSAmIzQzOyBocF9zaXplIC0gMSkgXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xuJiM0MztcdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2VsZi1cdTAwM2VzaXplIC8gaHBfc2l6ZSkpIHtcbiYjNDM7XHRcdFx0aHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7XG4mIzQzO1x0XHRcdGNsb3NlKHplcm9fZmQpO1xuJiM0MztcdFx0XHRjbG9zZShzZWxmLVx1MDAzZWd1cF9mZCk7XG4mIzQzO1x0XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG1tYXBfZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmFyaWFudC1cdTAwM2VzaGFyZWQpXG4mIzQzO1x0XHRtbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgXHUwMDI2IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZWFkZHIgPSBtbWFwKE5VTEwsIHNlbGYtXHUwMDNlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdFx0ICBtbWFwX2ZsYWdzLCB6ZXJvX2ZkLCAwKTtcbiYjNDM7XG4mIzQzO1x0Y2xvc2UoemVyb19mZCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9ORShzZWxmLVx1MDAzZWFkZHIsIE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGludCBlcnIgPSBlcnJubztcbiYjNDM7XG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZWd1cF9mZCk7XG4mIzQzO1x0XHRpZiAodmFyaWFudC1cdTAwM2VodWdldGxiKVxuJiM0MztcdFx0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbiYjNDM7XHRcdFRIX0xPRyhcJiMzNDttbWFwIGZhaWxlZDogJXNcJiMzNDssIHN0cmVycm9yKGVycikpO1xuIFx0fVxuLVx0cmV0dXJuIFwmIzM0O1Vua25vd24gY29tbWFuZFwmIzM0OztcbiYjNDM7XG4mIzQzO1x0aWYgKHZhcmlhbnQtXHUwMDNldGhwKVxuJiM0MztcdFx0bWFkdmlzZShzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bWFkdmlzZShzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChwID0gc2VsZi1cdTAwM2VhZGRyOyAodW5zaWduZWQgbG9uZylwIFx1MDAzYyAodW5zaWduZWQgbG9uZylzZWxmLVx1MDAzZWFkZHJcbiYjNDM7XHRcdFx0JiM0Mzsgc2VsZi1cdTAwM2VzaXplOyBwICYjNDM7PSBwc2l6ZSgpKVxuJiM0MztcdFx0cFswXSA9IDA7XG4gfVxuIFxuLXZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcbiYjNDM7RklYVFVSRV9URUFSRE9XTihndXBfdGVzdClcbiB7XG4tXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0gKihzdHJ1Y3QgZ3VwX3Rlc3QgKilkYXRhO1xuLVx0aW50IGksIHN0YXR1cztcbi1cbi1cdC8qIE9ubHkgcmVwb3J0IHRpbWluZyBpbmZvcm1hdGlvbiBvbiB0aGUgKl9CRU5DSE1BUksgY29tbWFuZHM6ICovXG4tXHRpZiAoKGNtZCA9PSBQSU5fRkFTVF9CRU5DSE1BUkspIHx8IChjbWQgPT0gR1VQX0ZBU1RfQkVOQ0hNQVJLKSB8fFxuLVx0ICAgICAoY21kID09IFBJTl9MT05HVEVSTV9CRU5DSE1BUkspKSB7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlcGVhdHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0Z3VwLnNpemUgPSBzaXplO1xuLVx0XHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuLVx0XHRcdGlmIChzdGF0dXMpXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0OyVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1wmIzM0Oyxcbi1cdFx0XHRcdCAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbi1cdFx0XHRcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xuLVx0XHRcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7LCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXCYjMzQ7LCBndXAuc2l6ZSk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7XFxuXCYjMzQ7KTtcbi1cdFx0XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGd1cC5zaXplID0gc2l6ZTtcbi1cdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4tXHRcdGlmIChzdGF0dXMpXG4tXHRcdFx0Z290byByZXR1cm5fO1xuLVxuLVx0XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDslczogZG9uZVxcblwmIzM0OywgY21kX3RvX3N0cihjbWQpKTtcbi1cdFx0aWYgKGd1cC5zaXplICE9IHNpemUpXG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7VHJ1bmNhdGVkIChzaXplOiAlbGxkKVxcblwmIzM0OywgZ3VwLnNpemUpO1xuLVx0XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4mIzQzO1x0bXVubWFwKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplKTtcbiYjNDM7XHRjbG9zZShzZWxmLVx1MDAzZWd1cF9mZCk7XG4mIzQzO1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZWh1Z2V0bGIpXG4mIzQzO1x0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdC8qIFRlc3RzIHRoZSBnZXRfdXNlcl9wYWdlcyBwYXRoICovXG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbiYjNDM7XG4mIzQzO1x0XHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkcjtcbiYjNDM7XHRcdGd1cC5zaXplID0gc2VsZi1cdTAwM2VzaXplO1xuJiM0MztcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4mIzQzO1x0XHRcdHNlbGYtXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuJiM0MztcdFx0XHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XG4mIzQzO1xuJiM0MztcdFx0VEhfTE9HKFwmIzM0O25yX3BhZ2VzX3Blcl9jYWxsPSV1XCYjMzQ7LCBndXAubnJfcGFnZXNfcGVyX2NhbGwpO1xuJiM0MztcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBHVVBfQkFTSUNfVEVTVCwgXHUwMDI2Z3VwKSwgMCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0LyogVGVzdHMgdGhlIHBpbl91c2VyX3BhZ2VzIHBhdGggKi9cbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuJiM0MztcbiYjNDM7XHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuJiM0MztcdFx0Z3VwLnNpemUgPSBzZWxmLVx1MDAzZXNpemU7XG4mIzQzO1x0XHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFx1MDAzYyAwID9cbiYjNDM7XHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKHZhcmlhbnQtXHUwMDNld3JpdGUpXG4mIzQzO1x0XHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbiYjNDM7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXVcJiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIFBJTl9CQVNJQ19URVNULCBcdTAwMjZndXApLCAwKTtcbiBcdH1cbiYjNDM7fVxuIFxuLXJldHVybl86XG4tXHRrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsIFwmIzM0O2lvY3RsIHN0YXR1cyAlZFxcblwmIzM0Oywgc3RhdHVzKTtcbi1cdHJldHVybiBOVUxMO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIGR1bXBfdXNlcl9wYWdlc193aXRoX2dldClcbiYjNDM7e1xuJiM0MztcdC8qIFRlc3RzIERVTVBfVVNFUl9QQUdFU19URVNUIHVzaW5nIGdldF91c2VyX3BhZ2VzICovXG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbiYjNDM7XG4mIzQzO1x0XHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkcjtcbiYjNDM7XHRcdGd1cC5zaXplID0gc2VsZi1cdTAwM2VzaXplO1xuJiM0MztcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4mIzQzO1x0XHRcdHNlbGYtXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuJiM0MztcdFx0XHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XG4mIzQzO1xuJiM0MztcdFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbiYjNDM7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXVcJiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIERVTVBfVVNFUl9QQUdFU19URVNULCBcdTAwMjZndXApLCAwKTtcbiYjNDM7XHR9XG4gfVxuIFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBkdW1wX3VzZXJfcGFnZXNfd2l0aF9waW4pXG4ge1xuLVx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuLVx0aW50IGZpbGVkLCBpLCBvcHQsIG5yX3BhZ2VzID0gMSwgdGhwID0gLTEsIHdyaXRlID0gMSwgbnRocmVhZHMgPSAxLCByZXQ7XG4tXHRpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURTtcbi1cdGNoYXIgKmZpbGUgPSBcJiMzNDsvZGV2L3plcm9cJiMzNDs7XG4tXHRib29sIGh1Z2V0bGIgPSBmYWxzZTtcbi1cdHB0aHJlYWRfdCAqdGlkO1xuLVx0Y2hhciAqcDtcbiYjNDM7XHQvKiBUZXN0cyBEVU1QX1VTRVJfUEFHRVNfVEVTVCB1c2luZyBwaW5fdXNlcl9wYWdlcyAqL1xuJiM0MztcdGludCBpO1xuIFxuLVx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCYjMzQ7bTpyOm46RjpmOmFiY2o6dFRMVXV3V1NIcHpcJiMzNDspKSAhPSAtMSkge1xuLVx0XHRzd2l0Y2ggKG9wdCkge1xuLVx0XHRjYXNlICYjMzk7YSYjMzk7OlxuLVx0XHRcdGNtZCA9IFBJTl9GQVNUX0JFTkNITUFSSztcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O2ImIzM5Ozpcbi1cdFx0XHRjbWQgPSBQSU5fQkFTSUNfVEVTVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O0wmIzM5Ozpcbi1cdFx0XHRjbWQgPSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7YyYjMzk7OlxuLVx0XHRcdGNtZCA9IERVTVBfVVNFUl9QQUdFU19URVNUO1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRHVtcCBwYWdlIDAgKGluZGV4IDEpLiBNYXkgYmUgb3ZlcnJpZGRlbiBsYXRlciwgYnlcbi1cdFx0XHQgKiB1c2VyJiMzOTtzIG5vbi1vcHRpb24gYXJndW1lbnRzLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogLndoaWNoX3BhZ2VzIGlzIHplcm8tYmFzZWQsIHNvIHRoYXQgemVybyBjYW4gbWVhbiBcJiMzNDtkb1xuLVx0XHRcdCAqIG5vdGhpbmdcJiMzNDsuXG4tXHRcdFx0ICovXG4tXHRcdFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O3AmIzM5Ozpcbi1cdFx0XHQvKiB3b3JrcyBvbmx5IHdpdGggRFVNUF9VU0VSX1BBR0VTX1RFU1QgKi9cbi1cdFx0XHRndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O0YmIzM5Ozpcbi1cdFx0XHQvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqL1xuLVx0XHRcdGd1cC5ndXBfZmxhZ3MgPSBzdHJ0b2wob3B0YXJnLCAwLCAwKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O2omIzM5Ozpcbi1cdFx0XHRudGhyZWFkcyA9IGF0b2kob3B0YXJnKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O20mIzM5Ozpcbi1cdFx0XHRzaXplID0gYXRvaShvcHRhcmcpICogTUI7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTtyJiMzOTs6XG4tXHRcdFx0cmVwZWF0cyA9IGF0b2kob3B0YXJnKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O24mIzM5Ozpcbi1cdFx0XHRucl9wYWdlcyA9IGF0b2kob3B0YXJnKTtcbi1cdFx0XHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdFx0XHRucl9wYWdlcyA9IHNpemUgLyBwc2l6ZSgpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7dCYjMzk7OlxuLVx0XHRcdHRocCA9IDE7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTtUJiMzOTs6XG4tXHRcdFx0dGhwID0gMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O1UmIzM5Ozpcbi1cdFx0XHRjbWQgPSBHVVBfQkFTSUNfVEVTVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O3UmIzM5Ozpcbi1cdFx0XHRjbWQgPSBHVVBfRkFTVF9CRU5DSE1BUks7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTt3JiMzOTs6XG4tXHRcdFx0d3JpdGUgPSAxO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7VyYjMzk7OlxuLVx0XHRcdHdyaXRlID0gMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O2YmIzM5Ozpcbi1cdFx0XHRmaWxlID0gb3B0YXJnO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7UyYjMzk7OlxuLVx0XHRcdGZsYWdzIFx1MDAyNj0gfk1BUF9QUklWQVRFO1xuLVx0XHRcdGZsYWdzIHw9IE1BUF9TSEFSRUQ7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTtIJiMzOTs6XG4tXHRcdFx0ZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XG4tXHRcdFx0aHVnZXRsYiA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1dyb25nIGFyZ3VtZW50XFxuXCYjMzQ7KTtcbi1cdFx0fVxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbiYjNDM7XG4mIzQzO1x0XHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkcjtcbiYjNDM7XHRcdGd1cC5zaXplID0gc2VsZi1cdTAwM2VzaXplO1xuJiM0MztcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4mIzQzO1x0XHRcdHNlbGYtXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuJiM0MztcdFx0XHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XG4mIzQzO1xuJiM0MztcdFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbiYjNDM7XHRcdGd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOO1xuJiM0MztcbiYjNDM7XHRcdFRIX0xPRyhcJiMzNDtucl9wYWdlc19wZXJfY2FsbD0ldVwmIzM0OywgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShpb2N0bChzZWxmLVx1MDAzZWd1cF9mZCwgRFVNUF9VU0VSX1BBR0VTX1RFU1QsIFx1MDAyNmd1cCksIDApO1xuIFx0fVxuJiM0Mzt9XG4gXG4tXHRpZiAob3B0aW5kIFx1MDAzYyBhcmdjKSB7XG4tXHRcdGludCBleHRyYV9hcmdfY291bnQgPSAwO1xuLVx0XHQvKlxuLVx0XHQgKiBGb3IgZXhhbXBsZTpcbi1cdFx0ICpcbi1cdFx0ICogICAuL2d1cF90ZXN0IC1jIDAgMSAweDEwMDFcbi1cdFx0ICpcbi1cdFx0ICogLi4udG8gZHVtcCBwYWdlcyAwLCAxLCBhbmQgNDA5N1xuLVx0XHQgKi9cbi1cbi1cdFx0d2hpbGUgKChvcHRpbmQgXHUwMDNjIGFyZ2MpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgICAgKGV4dHJhX2FyZ19jb3VudCBcdTAwM2MgR1VQX1RFU1RfTUFYX1BBR0VTX1RPX0RVTVApKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBEbyB0aGUgMS1iYXNlZCBpbmRleGluZyBoZXJlLCBzbyB0aGF0IHRoZSB1c2VyIGNhblxuLVx0XHRcdCAqIHVzZSBub3JtYWwgMC1iYXNlZCBpbmRleGluZyBvbiB0aGUgY29tbWFuZCBsaW5lLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGxvbmcgcGFnZV9pbmRleCA9IHN0cnRvbChhcmd2W29wdGluZF0sIDAsIDApICYjNDM7IDE7XG4tXG4tXHRcdFx0Z3VwLndoaWNoX3BhZ2VzW2V4dHJhX2FyZ19jb3VudF0gPSBwYWdlX2luZGV4O1xuLVx0XHRcdGV4dHJhX2FyZ19jb3VudCYjNDM7JiM0Mzs7XG4tXHRcdFx0b3B0aW5kJiM0MzsmIzQzOztcbi1cdFx0fVxuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzX2Zhc3QpXG4mIzQzO3tcbiYjNDM7XHQvKiBUZXN0cyB0aGUgbG9ja2xlc3MgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIHBhdGggKi9cbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuJiM0MztcbiYjNDM7XHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuJiM0MztcdFx0Z3VwLnNpemUgPSBzZWxmLVx1MDAzZXNpemU7XG4mIzQzO1x0XHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFx1MDAzYyAwID9cbiYjNDM7XHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKHZhcmlhbnQtXHUwMDNld3JpdGUpXG4mIzQzO1x0XHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbiYjNDM7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXVcJiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIEdVUF9GQVNUX0JFTkNITUFSSywgXHUwMDI2Z3VwKSwgMCk7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfZmFzdClcbiYjNDM7e1xuJiM0MztcdC8qIFRlc3RzIHRoZSBsb2NrbGVzcyBwaW5fdXNlcl9wYWdlc19mYXN0KCkgcGF0aCAqL1xuJiM0MztcdGludCBpO1xuIFxuLVx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4gXG4tXHRpZiAoaHVnZXRsYikge1xuLVx0XHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4mIzQzO1x0XHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkcjtcbiYjNDM7XHRcdGd1cC5zaXplID0gc2VsZi1cdTAwM2VzaXplO1xuJiM0MztcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4mIzQzO1x0XHRcdHNlbGYtXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldO1xuIFxuLVx0XHRpZiAoIWhwX3NpemUpXG4tXHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7SHVnZVRMQiBpcyB1bmF2YWlsYWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAodmFyaWFudC1cdTAwM2V3cml0ZSlcbiYjNDM7XHRcdFx0Z3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFO1xuIFxuLVx0XHRzaXplID0gKHNpemUgJiM0MzsgaHBfc2l6ZSAtIDEpIFx1MDAyNiB+KGhwX3NpemUgLSAxKTtcbi1cdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKVxuLVx0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXVcJiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIFBJTl9GQVNUX0JFTkNITUFSSywgXHUwMDI2Z3VwKSwgMCk7XG4gXHR9XG4mIzQzO31cbiBcbi1cdGtzZnRfc2V0X3BsYW4obnRocmVhZHMpO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtKVxuJiM0Mzt7XG4mIzQzO1x0LyogVGVzdHMgcGluX3VzZXJfcGFnZXMoKSB3aXRoIEZPTExfTE9OR1RFUk0gKi9cbiYjNDM7XHRpbnQgaTtcbiBcbi1cdGZpbGVkID0gb3BlbihmaWxlLCBPX1JEV1J8T19DUkVBVCwgMDY2NCk7XG4tXHRpZiAoZmlsZWQgXHUwMDNjIDApXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cJiMzNDssIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuIFxuLVx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXM7XG4tXHRpZiAod3JpdGUpXG4tXHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbiYjNDM7XHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuJiM0MztcdFx0Z3VwLnNpemUgPSBzZWxmLVx1MDAzZXNpemU7XG4mIzQzO1x0XHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFx1MDAzYyAwID9cbiYjNDM7XHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4gXG4tXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4tXHRpZiAoZ3VwX2ZkID09IC0xKSB7XG4tXHRcdHN3aXRjaCAoZXJybm8pIHtcbi1cdFx0Y2FzZSBFQUNDRVM6XG4tXHRcdFx0aWYgKGdldHVpZCgpKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwmIzM0Oyk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgRU5PRU5UOlxuLVx0XHRcdGlmIChvcGVuZGlyKFwmIzM0Oy9zeXMva2VybmVsL2RlYnVnXCYjMzQ7KSA9PSBOVUxMKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcblwmIzM0Oyk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xcblwmIzM0Oyk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCYjMzQ7KTtcbi1cdFx0a3NmdF9leGl0X3Bhc3MoKTtcbiYjNDM7XHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuJiM0MztcdFx0XHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XG4mIzQzO1xuJiM0MztcdFx0VEhfTE9HKFwmIzM0O25yX3BhZ2VzX3Blcl9jYWxsPSV1XCYjMzQ7LCBndXAubnJfcGFnZXNfcGVyX2NhbGwpO1xuJiM0MztcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLLCBcdTAwMjZndXApLCAwKTtcbiBcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChkdW1wX3VzZXJfcGFnZXNfc3BhcnNlX2luZGljZXMpXG4mIzQzO3tcbiYjNDM7XHQvKiBUZXN0cyBzcGFyc2UgbXVsdGktaW5kZXggd2hpY2hfcGFnZXNbXSBpbnB1dHMuICovXG4mIzQzO1x0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDEyOCAqIE1CO1xuJiM0MztcdGludCB6ZXJvX2ZkLCBndXBfZmQ7XG4mIzQzO1x0Y2hhciAqYWRkciwgKnA7XG4mIzQzO1xuJiM0MztcdHplcm9fZmQgPSBvcGVuKFwmIzM0Oy9kZXYvemVyb1wmIzM0OywgT19SRFdSKTtcbiYjNDM7XHRBU1NFUlRfR0UoemVyb19mZCwgMCk7XG4gXG4tXHRwID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncywgZmlsZWQsIDApO1xuLVx0aWYgKHAgPT0gTUFQX0ZBSUxFRClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O21tYXA6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuLVx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylwO1xuJiM0MztcdGd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbiYjNDM7XHRBU1NFUlRfR0UoZ3VwX2ZkLCAwKTtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIHplcm9fZmQsIDApO1xuJiM0MztcdGNsb3NlKHplcm9fZmQpO1xuJiM0MztcdEFTU0VSVF9ORShhZGRyLCBNQVBfRkFJTEVEKTtcbiBcbi1cdGlmICh0aHAgPT0gMSlcbi1cdFx0bWFkdmlzZShwLCBzaXplLCBNQURWX0hVR0VQQUdFKTtcbi1cdGVsc2UgaWYgKHRocCA9PSAwKVxuLVx0XHRtYWR2aXNlKHAsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4mIzQzO1x0bWFkdmlzZShhZGRyLCBzaXplLCBNQURWX0hVR0VQQUdFKTtcbiBcbi1cdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xuLVx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IHBzaXplKCkpXG4mIzQzO1x0Zm9yIChwID0gYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpYWRkciAmIzQzOyBzaXplO1xuJiM0MztcdCAgICAgcCAmIzQzOz0gcHNpemUoKSlcbiBcdFx0cFswXSA9IDA7XG4gXG4tXHR0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7XG4tXHRhc3NlcnQodGlkKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG50aHJlYWRzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsIFx1MDAyNmd1cCk7XG4tXHRcdGFzc2VydChyZXQgPT0gMCk7XG4tXHR9XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudGhyZWFkczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgTlVMTCk7XG4tXHRcdGFzc2VydChyZXQgPT0gMCk7XG4mIzQzO1x0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylhZGRyO1xuJiM0MztcdGd1cC5zaXplID0gc2l6ZTtcbiYjNDM7XHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBzaXplIC8gcHNpemUoKTtcbiYjNDM7XHRndXAuZ3VwX2ZsYWdzID0gRk9MTF9XUklURTtcbiYjNDM7XHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xuJiM0MztcdGd1cC53aGljaF9wYWdlc1sxXSA9IDIwO1xuJiM0MztcdGd1cC53aGljaF9wYWdlc1syXSA9IDB4MTAwMTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcmVzZXJ2ZSB0aGUgb2xkIFwmIzM0Oy4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMFwmIzM0OyBzcGFyc2UgZHVtcFxuJiM0MztcdCAqIGNvdmVyYWdlIGFmdGVyIHJlbW92aW5nIGNvbW1hbmQtbGluZSBwYXJzaW5nIGZyb20gdGhpcyBiaW5hcnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0QVNTRVJUX0VRKGlvY3RsKGd1cF9mZCwgRFVNUF9VU0VSX1BBR0VTX1RFU1QsIFx1MDAyNmd1cCksIDApO1xuJiM0MztcbiYjNDM7XHRtdW5tYXAoYWRkciwgc2l6ZSk7XG4mIzQzO1x0Y2xvc2UoZ3VwX2ZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcdGNoYXIgKmZpbGUgPSBcJiMzNDsvZGV2L3plcm9cJiMzNDs7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihmaWxlLCBPX1JEV1IpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cJiMzNDssIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4gXHR9XG4mIzQzO1x0Y2xvc2UoZmQpO1xuIFxuLVx0ZnJlZSh0aWQpO1xuJiM0MztcdGZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuJiM0MztcdGlmIChmZCA9PSAtMSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFQUNDRVMpXG4mIzQzO1x0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKGVycm5vID09IEVOT0VOVCkge1xuJiM0MztcdFx0XHRESVIgKmRlYnVnZnMgPSBvcGVuZGlyKFwmIzM0Oy9zeXMva2VybmVsL2RlYnVnXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghZGVidWdmcykge1xuJiM0MztcdFx0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O01vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGNsb3NlZGlyKGRlYnVnZnMpO1xuJiM0MztcdFx0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O0NoZWNrIENPTkZJR19HVVBfVEVTVCBpbiBrZXJuZWwgY29uZmlnXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShmZCk7XG4gXG4tXHRrc2Z0X2V4aXRfcGFzcygpO1xuJiM0MztcdHJldHVybiB0ZXN0X2hhcm5lc3NfcnVuKGFyZ2MsIGFyZ3YpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG5pbmRleCAyZjJiOTg3OWQxMDA1MS4uZTFiYjAzMTAxOWYyYWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbkBAIC0xMCw5ICYjNDM7MTAsNiBAQFxuICAqIGJ1Z3MuXG4gICovXG4gXG4tI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbi1cbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbkBAIC0yOSw2ICYjNDM7MjYsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvaW9jdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuIFxuIC8qXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbiYjMzk7dCBleHBvcnRlZFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbmluZGV4IDU1NWI0YjNkMTQzMDdlLi41N2NmNzkwY2E0NzhkNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuY1xuQEAgLTE0LDcgJiM0MzsxNCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgTUlOX0ZSRUVfUEFHRVNcdDIwXG4gI2RlZmluZSBOUl9IVUdFX1BBR0VTXHQxMFx0LyogY29tbW9uIG51bWJlciBvZiBwYWdlcyB0byBtYXAvYWxsb2NhdGUgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXG5pbmRleCAwZjJhYWQxYjdkYmQ2Zi4uYTQ1OGJlY2Y1ODMyN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcbkBAIC0xOCw3ICYjNDM7MTgsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxuICNkZWZpbmUgUFJPVEVDVElPTiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuaW5kZXggZWQzZDkyZTg2MmQ4NzYuLjliNzI0YWY2NmU5Mzg4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuQEAgLTI2LDcgJiM0MzsyNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBERUZBVUxUX0xFTkdUSF9NQiAxMFVMXG4gI2RlZmluZSBNQl9UT19CWVRFUyh4KSAoeCAqIDEwMjQgKiAxMDI0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXG5pbmRleCAzZmY3ZjA2MmI3ZWI0NS4uZjQ1MTRkYTQ5ZTFkZjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXG5AQCAtMjksNyAmIzQzOzI5LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbmluZGV4IGJjMjAyZTRlZDJiZGE3Li4yMDg2NGU3ZDRlMGM3MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbkBAIC0yMSw5ICYjNDM7MjEsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdGZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORVxuICNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi12bWVtbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXZtZW1tYXAuY1xuaW5kZXggNTA3ZGY3OGExNThkOGQuLmM0NmE2NTZjMjVhMDRlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi12bWVtbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItdm1lbW1hcC5jXG5AQCAtMTEsNyAmIzQzOzExLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFBBR0VfQ09NUE9VTkRfSEVBRFx0KDFVTCBcdTAwM2NcdTAwM2MgMTUpXG4gI2RlZmluZSBQQUdFX0NPTVBPVU5EX1RBSUxcdCgxVUwgXHUwMDNjXHUwMDNjIDE2KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG5pbmRleCBmYjQ2MDA1NzBlMTMxOS4uOTQ5NTk3NGVjY2JlYTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG5AQCAtMjAsNyAmIzQzOzIwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2lmbmRlZiBTVEFUWF9ESU9BTElHTlxuICNkZWZpbmUgU1RBVFhfRElPQUxJR05cdFx0MHgwMDAwMjAwMFVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5pbmRleCAyZGMxNTgwNTRmNjY2Yi4uNTZjNWE4NTMzZTlkOTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbkBAIC0xMCw3ICYjNDM7MTAsNiBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5pbmRleCBmOTQ1NDllZmNjNmZmMy4uMjUzMmE0MmI5OGRmZjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xuQEAgLTI1LDcgJiM0MzsyNSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBJTkxPT1BfSVRFUiAxMDBcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDEwZThkZWRjYjA4N2RjLi4yMzgyOTczYjJmNTUyYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjIsNyAmIzQzOzIyLDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtsaW51eC9tYWdpYy5oXCYjMzQ7XG4gXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgQkFTRV9BRERSICgodm9pZCAqKSgxVUwgXHUwMDNjXHUwMDNjIDMwKSlcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBocGFnZV9wbWRfc2l6ZTtcbkBAIC0xMTksNiAmIzQzOzExOCw3IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRjaGFyIGJ1ZlsxIFx1MDAzY1x1MDAzYyAxMF07XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuIFx0Y2hhciAqc3RyLCAqZW5kO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRmaW5mby5kaXIgPSBkaXI7XG4gXHRzdGF0KGZpbmZvLmRpciwgXHUwMDI2cGF0aF9zdGF0KTtcbkBAIC0xMzgsOCAmIzQzOzEzOCw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRcdCAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKVxuIFx0ICAgIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tXHRpZiAocmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIFx1MDAzYyAwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7cmVhZF9maWxlKHJlYWRfbnVtKVwmIzM0Oyk7XG4mIzQzO1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuIFx0aWYgKHN0cnN0cihidWYsIFwmIzM0O0RFVlRZUEU9ZGlza1wmIzM0OykpIHtcbiBcdFx0LyogRm91bmQgaXQgKi9cbiBcdFx0aWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG5AQCAtMzE5LDcgJiM0MzszMjAsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIHtcbiBcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XG4gXHRjb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7XG4tXHRpbnQgZmQ7XG4mIzQzO1x0aW50IGZkLCByZXQ7XG4gXHR2b2lkICpwO1xuIFx0dW5zaWduZWQgbG9uZyBzaXplO1xuIFxuQEAgLTM2Myw3ICYjNDM7MzY0LDEwIEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttbWFwKClcJiMzNDspO1xuIFxuIFx0LyogRHJvcCBwYWdlIGNhY2hlICovXG4tXHR3cml0ZV9maWxlKFwmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1wmIzM0OywgXCYjMzQ7M1wmIzM0OywgMik7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShcJiMzNDsvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNcJiMzNDssIFwmIzM0OzNcJiMzNDssIDIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuJiM0MztcbiBcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0cmV0dXJuIHA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbmluZGV4IGEwNTBmNDg0MGNmYTNhLi5jYzM3NDkyY2YzMmMzZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xuQEAgLTE1LDcgJiM0MzsxNSw2IEBAXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcdTAwM2NpbmNsdWRlL3Zkc28vdGltZTY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBLU01fU1lTRlNfUEFUSCBcJiMzNDsvc3lzL2tlcm5lbC9tbS9rc20vXCYjMzQ7XG4gI2RlZmluZSBLU01fRlAocykgKEtTTV9TWVNGU19QQVRIIHMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xuaW5kZXggMjlmNzQ5MjQ1M2Q0MzkuLjRmZTk3YzAzMzI2MTI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5AQCAtNCw5ICYjNDM7NCw2IEBAXG4gICogcGF0aHMgaW4gdGhlIGtlcm5lbC5cbiAgKi9cbiBcbi0jaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuLVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY251bWEuaFx1MDAzZVxuQEAgLTE2LDYgJiM0MzsxMyw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuIFxuICNkZWZpbmUgVFdPTUVHXHRcdCgyXHUwMDNjXHUwMDNjMjApXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCA2Zjg5NzFkNWIzY2U0My4uODA0MzcyODAzMDgwY2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuQEAgLTIzLDcgJiM0MzsyMyw2IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBQQUdFTUFQX0JJVFNfQUxMXHRcdChQQUdFX0lTX1dQQUxMT1dFRCB8IFBBR0VfSVNfV1JJVFRFTiB8XHRcXFxuIFx0XHRcdFx0XHQgUEFHRV9JU19GSUxFIHwgUEFHRV9JU19QUkVTRU5UIHxcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbmluZGV4IGQ4ZDlkMWRlNTdiOGIwLi5hNGY4NDUxNzkxY2JkYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbkBAIC0xNCw3ICYjNDM7MTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuIFxuICNpZm5kZWYgUFJfVEhQX0RJU0FCTEVfRVhDRVBUX0FEVklTRURcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5pbmRleCA5YTZkOTU0ZWUzNzEyNi4uNWJhMjAzM2U4YTA5Y2QgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbkBAIC00NSw4ICYjNDM7NDUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3B0cmFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2V0am1wLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtwa2V5LWhlbHBlcnMuaFwmIzM0O1xuIFxuIGludCBpdGVyYXRpb25fbnIgPSAxO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IDhjMjk2ZGVkZjA0NzRkLi41NmRmMGRjYzk2NDBjMCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTEzMCwzMCAmIzQzOzEzMCw2IEBAIHRlc3Rfc2VsZWN0ZWQoKSB7XG4gXHRmaVxuIH1cbiBcbi1ydW5fZ3VwX21hdHJpeCgpIHtcbi0gICAgIyAtdDogdGhwPW9uLCAtVDogdGhwPW9mZiwgLUg6IGh1Z2V0bGI9b25cbi0gICAgbG9jYWwgaHVnZXRsYl9tYj0yNTZcbi1cbi0gICAgZm9yIGh1Z2UgaW4gLXQgLVQgXCYjMzQ7LUggLW0gJGh1Z2V0bGJfbWJcJiMzNDs7IGRvXG4tICAgICAgICAjIC11OiBndXAtZmFzdCwgLVU6IGd1cC1iYXNpYywgLWE6IHBpbi1mYXN0LCAtYjogcGluLWJhc2ljLCAtTDogcGluLWxvbmd0ZXJtXG4tICAgICAgICBmb3IgdGVzdF9jbWQgaW4gLXUgLVUgLWEgLWIgLUw7IGRvXG4tICAgICAgICAgICAgIyAtdzogd3JpdGU9MSwgLVc6IHdyaXRlPTBcbi0gICAgICAgICAgICBmb3Igd3JpdGUgaW4gLXcgLVc7IGRvXG4tICAgICAgICAgICAgICAgICMgLVM6IHNoYXJlZFxuLSAgICAgICAgICAgICAgICBmb3Igc2hhcmUgaW4gLVMgXCYjMzQ7IFwmIzM0OzsgZG9cbi0gICAgICAgICAgICAgICAgICAgICMgLW46IEhvdyBtYW55IHBhZ2VzIHRvIGZldGNoIHRvZ2V0aGVyPyAgNTEyIGlzIHNwZWNpYWxcbi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCYjMzk7cyBkZWZhdWx0IHRocCBzaXplIChvciAyTSBvbiB4ODYpLCAxMjMgdG9cbi0gICAgICAgICAgICAgICAgICAgICMganVzdCB0ZXN0IHBhcnRpYWwgZ3VwIHdoZW4gaGl0IGEgaHVnZSBpbiB3aGF0ZXZlciBmb3JtXG4tICAgICAgICAgICAgICAgICAgICBmb3IgbnVtIGluIFwmIzM0Oy1uIDFcJiMzNDsgXCYjMzQ7LW4gNTEyXCYjMzQ7IFwmIzM0Oy1uIDEyM1wmIzM0OyBcJiMzNDstbiAtMVwmIzM0OzsgZG9cbi0gICAgICAgICAgICAgICAgICAgICAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IFxcXG4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHVnZSAkdGVzdF9jbWQgJHdyaXRlICRzaGFyZSAkbnVtXG4tICAgICAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgICAgIGRvbmVcbi0gICAgICAgICAgICBkb25lXG4tICAgICAgICBkb25lXG4tICAgIGRvbmVcbi19XG4tXG4gIyBmaWx0ZXIgNjRiaXQgYXJjaGl0ZWN0dXJlc1xuIEFSQ0g2NFNUUj1cJiMzNDthcm02NCBtaXBzNjQgcGFyaXNjNjQgcHBjNjQgcHBjNjRsZSByaXNjdjY0IHMzOTB4IHNwYXJjNjQgeDg2XzY0XCYjMzQ7XG4gaWYgWyAteiBcJiMzNDskQVJDSFwmIzM0OyBdOyB0aGVuXG5AQCAtMjc2LDE4ICYjNDM7MjUyLDcgQEAgZmlcbiBcbiBDQVRFR09SWT1cJiMzNDttbWFwXCYjMzQ7IHJ1bl90ZXN0IC4vbWFwX2ZpeGVkX25vcmVwbGFjZVxuIFxuLWlmICRSVU5fQUxMOyB0aGVuXG4tICAgIHJ1bl9ndXBfbWF0cml4XG4tZWxzZVxuLSAgICAjIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcbi0gICAgQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAxXG4tICAgIENBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gLTFcbi0gICAgIyBwaW5fdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXG4tICAgIENBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gMVxuLSAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIC0xXG4tZmlcbi0jIER1bXAgcGFnZXMgMCwgMTksIGFuZCA0MDk2LCB1c2luZyBwaW5fdXNlcl9wYWdlczpcbi1DQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1jdCAtRiAweDEgMCAxOSAweDEwMDBcbiYjNDM7Q0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdFxuIENBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX2xvbmd0ZXJtXG4gXG4gQ0FURUdPUlk9XCYjMzQ7dXNlcmZhdWx0ZmRcJiMzNDsgcnVuX3Rlc3QgLi91ZmZkLXVuaXQtdGVzdHNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbmluZGV4IGZiMTg2NGE2OGUxYzZiLi42YzIyYWM5ZTkzZGIwNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtOSw3ICYjNDM7OSw2IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCBcJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXBcJiMzNDtcbiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCAzMmI5OTE0NzJmNzQ0Zi4uZTc0NGM5NDM0ZTdkMDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5AQCAtMjEsNyAmIzQzOzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiB1aW50NjRfdCBwYWdlc2l6ZTtcbiB1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0O1xuQEAgLTI2OSw3ICYjNDM7MjY4LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVfZGVidWdmcyhjb25zdCBjaGFyICpmbXQsIC4uLilcbiBcdGlmIChyZXQgXHUwMDNlPSBJTlBVVF9NQVgpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslczogRGVidWdmcyBpbnB1dCBpcyB0b28gbG9uZ1xcblwmIzM0OywgX19mdW5jX18pO1xuIFxuLVx0d3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpO1xuJiM0MztcdHJldCA9IHdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCAmIzQzOyAxKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiB9XG4gXG4gc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuaW5kZXggMjJiOWMyZjFjMzVkMjMuLjBkYTE1ZDUzMGExZmM4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG5AQCAtMTQsNyAmIzQzOzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQilcbiAjZGVmaW5lIE1BUF9IVUdFVExCXHQweDQwMDAwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5pbmRleCA4ZWIwYzU2MzBlN2UzMS4uOTZmNzI4OThlYmUwYTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuQEAgLTE3LDcgJiM0MzsxNyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIGludCBiYWNraW5nX2ZkID0gLTE7XG4gaW50IG1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5pbmRleCA5MmEyMWI5N2Y3NDVhZi4uMDcyMzg0M2E3NjI2YjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5AQCAtMzcsNyAmIzQzOzM3LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFVGRkRfRkxBR1NcdChPX0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSlcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuaW5kZXggYzk3M2Q2NzIyNzIwYzMuLmViNGIyNDMzYjAwZTYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuQEAgLTcsOCAmIzQzOzcsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dWZmZC1jb21tb24uaFwmIzM0O1xuIFxuIHN0YXRpYyBpbnQgcGFnZW1hcF9mZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcbmluZGV4IGUyNGQ3YmEwMGI0NDE3Li41YTM1NGE2NjRkMWY3ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG5AQCAtMTEsNyAmIzQzOzExLDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAvKlxuICAqIFRoZSBoaW50IGFkZHIgdmFsdWUgaXMgdXNlZCB0byBhbGxvY2F0ZSBhZGRyZXNzZXNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbmluZGV4IDMxMWZjNWI0NTEzZWI0Li5mMjc2ZWVlNTc2ODA0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtNjk4LDkzICYjNDM7Njk4LDM5IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRyZXR1cm4gcmV0IFx1MDAzZSAwID8gMCA6IC1lcnJubztcbiB9XG4gXG4taW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4te1xuLVx0aW50IGZkO1xuLVx0c3NpemVfdCBudW1yZWFkO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdGlmIChudW1yZWFkIFx1MDAzYyAxKSB7XG4tXHRcdGNsb3NlKGZkKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRidWZbbnVtcmVhZF0gPSAmIzM5O1xcMCYjMzk7O1xuLVx0Y2xvc2UoZmQpO1xuLVxuLVx0cmV0dXJuICh1bnNpZ25lZCBpbnQpIG51bXJlYWQ7XG4tfVxuLVxuLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4te1xuLVx0aW50IGZkLCBzYXZlZF9lcnJubztcbi1cdHNzaXplX3QgbnVtd3JpdHRlbjtcbi1cbi1cdGlmIChidWZsZW4gXHUwMDNjIDIpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtJbmNvcnJlY3QgYnVmZmVyIGxlbjogJXp1XFxuXCYjMzQ7LCBidWZsZW4pO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIG9wZW4gZmFpbGVkOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbi1cbi1cdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdHNhdmVkX2Vycm5vID0gZXJybm87XG4tXHRjbG9zZShmZCk7XG4tXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuLVx0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBwYXRoLCAoaW50KShidWZsZW4gLSAxKSxcbi1cdFx0XHRcdGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdGlmIChudW13cml0dGVuICE9IGJ1ZmxlbiAtIDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcblwmIzM0Oyxcbi1cdFx0XHRcdHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLCBidWYsIGJ1ZmxlbiAtIDEsIG51bXdyaXR0ZW4pO1xuLX1cbi1cbi11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpXG4te1xuLVx0Y2hhciBidWZbMjFdO1xuLVxuLVx0aWYgKHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSBcdTAwM2MgMClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3JlYWRfZmlsZSgpXCYjMzQ7KTtcbi1cbi1cdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbi17XG4tXHRjaGFyIGJ1ZlsyMV07XG4tXG4tXHRzcHJpbnRmKGJ1ZiwgXCYjMzQ7JWx1XCYjMzQ7LCBudW0pO1xuLVx0d3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEpO1xuLX1cbi1cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1hbGwsIHNobW1heDtcbiBcbiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpXG4ge1xuLVx0aWYgKHNobW1heClcbi1cdFx0d3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7LCBzaG1tYXgpO1xuLVx0aWYgKHNobWFsbClcbi1cdFx0d3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBzaG1hbGwpO1xuJiM0MztcdGlmIChzaG1tYXggXHUwMDI2XHUwMDI2IHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heFwmIzM0Oywgc2htbWF4KSlcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsKCk7XG4mIzQzO1x0aWYgKHNobWFsbCBcdTAwMjZcdTAwMjYgd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBzaG1hbGwpKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiB9XG4gXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuciA9IGxlbmd0aCAvIHBzaXplKCk7XG4gXHR1bnNpZ25lZCBsb25nIHZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuLVx0dmFsID0gcmVhZF9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDspO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7LCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuIFx0aWYgKHZhbCBcdTAwM2MgbGVuZ3RoKSB7XG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heFwmIzM0OywgbGVuZ3RoKTtcbiYjNDM7XHRcdHJldCA9IHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heFwmIzM0OywgbGVuZ3RoKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGtzZnRfZXhpdF9mYWlsKCk7XG4gXHRcdHNobW1heCA9IHZhbDtcbiBcdH1cbiBcbi1cdHZhbCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7KTtcbiYjNDM7XHRyZXQgPSByZWFkX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0OywgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiBcdGlmICh2YWwgXHUwMDNjIG5yKSB7XG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0OywgbnIpO1xuJiM0MztcdFx0cmV0ID0gd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBucik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuIFx0XHRzaG1hbGwgPSB2YWw7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuaW5kZXggZWE4ZmM4ZmRmMGViMGIuLmFhODU2ZjBkMzJkNjRlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC04LDYgJiM0Mzs4LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZSAvKiBfU0NfUEFHRVNJWkUgKi9cbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vZmlsZV91dGlscy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjZGVmaW5lIEJJVF9VTEwobnIpICAgICAgICAgICAgICAgICAgICgxVUxMIFx1MDAzY1x1MDAzYyAobnIpKVxuICNkZWZpbmUgUE1fU09GVF9ESVJUWSAgICAgICAgICAgICAgICAgQklUX1VMTCg1NSlcbkBAIC0xNjQsMTEgJiM0MzsxNjYsNiBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTtcbiAjZGVmaW5lIFBBR0VNQVBfUFJFU0VOVChlbnQpXHQoKChlbnQpIFx1MDAyNiAoMXVsbCBcdTAwM2NcdTAwM2MgNjMpKSAhPSAwKVxuICNkZWZpbmUgUEFHRU1BUF9QRk4oZW50KVx0KChlbnQpIFx1MDAyNiAoKDF1bGwgXHUwMDNjXHUwMDNjIDU1KSAtIDEpKVxuIFxuLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpO1xuLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcbi1cbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aCk7XG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbHMgKHRvb2xzL21tL2d1cF9iZW5jaC5jLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBEb2N1bWVudGF0aW9uLCBhbmQgTUFJTlRBSU5FUlMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMGEyM2U5OTc5ZWVkZjRhNmZiNThlYTFiMzc2Y2E1Mjc1NzJjNGZjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMjA6Mjk6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CmluZGV4IGMxNmNhMTYzYjU1ZTNjLi5lYTcyMmFkZjIyY2NhYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QKQEAgLTIzMCwxMCAmIzQzOzIzMCwxNiBAQCBUaGlzIGZpbGU6OgogCiAgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYwogCi1oYXMgdGhlIGZvbGxvd2luZyBuZXcgY2FsbHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBwaW4qKCkgd3JhcHBlciBmdW5jdGlvbnM6CiYjNDM7Y29udGFpbnMgdGhlIGZvbGxvd2luZyB0ZXN0IGNhc2VzIHRvIGV4ZXJjaXNlIHBpbl91c2VyX3BhZ2VzKigpOgogCi0qIFBJTl9GQVNUX0JFTkNITUFSSyAoLi9ndXBfdGVzdCAtYSkKLSogUElOX0JBU0lDX1RFU1QgKC4vZ3VwX3Rlc3QgLWIpCiYjNDM7KiBwaW5fdXNlcl9wYWdlcyB2aWEgUElOX0JBU0lDX1RFU1QKJiM0MzsqIHBpbl91c2VyX3BhZ2VzX2Zhc3QgdmlhIFBJTl9GQVNUX0JFTkNITUFSSwomIzQzOyogcGluX3VzZXJfcGFnZXNfbG9uZ3Rlcm0gdmlhIFBJTl9MT05HVEVSTV9CRU5DSE1BUksKJiM0MzsKJiM0MztSdW4gd2l0aDo6CiYjNDM7CiYjNDM7ICBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tCiYjNDM7ICAuL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0CiAKIFlvdSBjYW4gbW9uaXRvciBob3cgbWFueSB0b3RhbCBkbWEtcGlubmVkIHBhZ2VzIGhhdmUgYmVlbiBhY3F1aXJlZCBhbmQgcmVsZWFzZWQKIHNpbmNlIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCwgdmlhIHR3byBuZXcgL3Byb2Mvdm1zdGF0IGVudHJpZXM6IDo6CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDgwNmJkMmQ4MGQxNTM1Li43ZDEyMWRlZTlmMGYyYyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE3MDI0LDYgJiM0MzsxNzAyNCw3IEBAIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbQogRjoJbW0vZ3VwLmMKIEY6CW1tL2d1cF90ZXN0LmMKIEY6CW1tL2d1cF90ZXN0LmgKJiM0MztGOgl0b29scy9tbS9ndXBfYmVuY2guYwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMKIEY6CXRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKIApAQCAtMTcxMjgsNiAmIzQzOzE3MTI5LDcgQEAgRjoJbW0vbWVtb3J5LXRpZXJzLmMKIEY6CW1tL3BhZ2VfaWRsZS5jCiBGOgltbS9wZ2FsbG9jLXRyYWNrLmgKIEY6CW1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmMKJiM0MztGOgl0b29scy9saWIvbW0vCiBGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8KIAogTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT04KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi43OTJmNGI0ZGI2MjUyZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMKQEAgLTAsMCAmIzQzOzEsMTE5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2ZpbGVfdXRpbHMuaCYjMzQ7CiYjNDM7CiYjNDM7aW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CXNzaXplX3QgbnVtcmVhZDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKJiM0MzsJaWYgKGZkID09IC0xKSB7CiYjNDM7CQlpbnQgZXJyID0gZXJybm87CiYjNDM7CiYjNDM7CQlwcmludGYoJiMzNDsjICVzOiAlcyAoJWQpXG4mIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTsKJiM0MzsJCXJldHVybiAtZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CW51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOwomIzQzOwlpZiAobnVtcmVhZCAmbHQ7IDEpIHsKJiM0MzsJCWludCBlcnIgPSBudW1yZWFkID8gZXJybm8gOiBFTk9EQVRBOwomIzQzOwomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcHJpbnRmKCYjMzQ7IyAlczogJXMgKCVkKVxuJiMzNDssIHBhdGgsIHN0cmVycm9yKGVyciksIGVycik7CiYjNDM7CQlyZXR1cm4gLWVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlidWZbbnVtcmVhZF0gPSAmIzM5O1wwJiMzOTs7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIChpbnQpbnVtcmVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQomIzQzO3sKJiM0MzsJaW50IGZkLCBzYXZlZF9lcnJubzsKJiM0MzsJc3NpemVfdCBudW13cml0dGVuOwomIzQzOwomIzQzOwlpZiAoYnVmbGVuICZsdDsgMikgewomIzQzOwkJcHJpbnRmKCYjMzQ7IyAlczogJXMgKCVkKVxuJiMzNDssIHBhdGgsIHN0cmVycm9yKEVJTlZBTCksIEVJTlZBTCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpOwomIzQzOwlpZiAoZmQgPT0gLTEpIHsKJiM0MzsJCWludCBlcnIgPSBlcnJubzsKJiM0MzsKJiM0MzsJCXByaW50ZigmIzM0OyMgJXM6ICVzICglZClcbiYjMzQ7LCBwYXRoLCBzdHJlcnJvcihlcnIpLCBlcnIpOwomIzQzOwkJcmV0dXJuIC1lcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOwomIzQzOwlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CWlmIChudW13cml0dGVuICZsdDsgMCkgewomIzQzOwkJcHJpbnRmKCYjMzQ7IyAlczogJXMgKCVkKVxuJiMzNDssIHBhdGgsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSwKJiM0MzsJCSAgICAgICBzYXZlZF9lcnJubyk7CiYjNDM7CQlyZXR1cm4gLXNhdmVkX2Vycm5vOwomIzQzOwl9CiYjNDM7CWlmIChudW13cml0dGVuICE9IChzc2l6ZV90KShidWZsZW4gLSAxKSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7IyAlcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xuJiMzNDssCiYjNDM7CQkgICAgICAgcGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdmFsOwomIzQzOwlpbnQgZXJyLCByZXQ7CiYjNDM7CWNoYXIgYnVmWzIxXTsKJiM0MzsJY2hhciAqZW5kOwomIzQzOwomIzQzOwlpZiAoIW51bSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJZXJybm8gPSAwOwomIzQzOwl2YWwgPSBzdHJ0b3VsKGJ1ZiwgJmFtcDtlbmQsIDEwKTsKJiM0MzsJaWYgKGVycm5vKSB7CiYjNDM7CQllcnIgPSBlcnJubzsKJiM0MzsJCXByaW50ZigmIzM0OyMgJXM6ICVzICglZClcbiYjMzQ7LCBwYXRoLCBzdHJlcnJvcihlcnIpLCBlcnIpOwomIzQzOwkJcmV0dXJuIC1lcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGVuZCA9PSBidWYgfHwgYnVmWzBdID09ICYjMzk7LSYjMzk7KSB7CiYjNDM7CQlwcmludGYoJiMzNDsjICVzOiBpbnZhbGlkIG51bWVyaWMgdmFsdWVcbiYjMzQ7LCBwYXRoKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICgqZW5kID09ICYjMzk7XG4mIzM5OykKJiM0MzsJCWVuZCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CWlmICgqZW5kICE9ICYjMzk7XDAmIzM5OykgewomIzQzOwkJcHJpbnRmKCYjMzQ7IyAlczogaW52YWxpZCBudW1lcmljIHZhbHVlXG4mIzM0OywgcGF0aCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwkqbnVtID0gdmFsOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzIxXTsKJiM0MzsKJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslbHUmIzM0OywgbnVtKTsKJiM0MzsJcmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSAmIzQzOyAxKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzg1NzY3OTBhMzQyNDQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oCkBAIC0wLDAgJiM0MzsxLDEyIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX18KJiM0MzsjZGVmaW5lIF9fTU1fRklMRV9VVElMU19IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkZGVmLmgmZ3Q7CiYjNDM7CiYjNDM7aW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwomIzQzO2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CiYjNDM7aW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSk7CiYjNDM7aW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7CiYjNDM7CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYwpyZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMKaW5kZXggMmVhYjIxMTBhYzZhNDYuLjhkOWU0NDcyN2VkYmY1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jCkBAIC05LDExICYjNDM7OSwxNiBAQAogI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogCi0jaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtmaWxlX3V0aWxzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBUSFBfU1lTRlMgJiMzNDsvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS8mIzM0OwogI2RlZmluZSBNQVhfU0VUVElOR1NfREVQVEggNAomIzQzOwomIzQzOyNpZm5kZWYgQVJSQVlfU0laRQomIzQzOyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpCiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5nc19zdGFja1tNQVhfU0VUVElOR1NfREVQVEhdOwogc3RhdGljIGludCBzZXR0aW5nc19pbmRleDsKIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNhdmVkX3NldHRpbmdzOwpAQCAtNjEsMTAgJiM0Mzs2Niw5IEBAIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSkKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCX0KIAotCWlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7Ci0JCXBlcnJvcihwYXRoKTsKJiM0MzsJcmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KIAogCWMgPSBzdHJjaHIoYnVmLCAmIzM5O1smIzM5Oyk7CiAJaWYgKCFjKSB7CkBAIC0xMDMsMTIgJiM0MzsxMDcsMTUgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbCkKIAkJcHJpbnRmKCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXG4mIzM0OywgX19mdW5jX18pOwogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQotCXdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSAmIzQzOyAxKTsKJiM0MzsJcmV0ID0gd3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICYjNDM7IDEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKIH0KIAogdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSkKIHsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwl1bnNpZ25lZCBsb25nIG51bTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFRIUF9TWVNGUyAmIzM0OyVzJiMzNDssIG5hbWUpOwpAQCAtMTE2LDcgJiM0MzsxMjMsMTEgQEAgdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSkKIAkJcHJpbnRmKCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXG4mIzM0OywgX19mdW5jX18pOwogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQotCXJldHVybiByZWFkX251bShwYXRoKTsKJiM0MzsJcmV0ID0gcmVhZF9udW0ocGF0aCwgJmFtcDtudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG51bTsKIH0KIAogdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKQpAQCAtMTI5LDcgJiM0MzsxNDAsOSBAQCB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pCiAJCXByaW50ZigmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xuJiMzNDssIF9fZnVuY19fKTsKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCX0KLQl3cml0ZV9udW0ocGF0aCwgbnVtKTsKJiM0MzsJcmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwogfQogCiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKQpAQCAtMTU3LDggJiM0MzsxNzAsMTMgQEAgdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncykKIAkJLm1heF9wdGVzX3NoYXJlZCA9IHRocF9yZWFkX251bSgmIzM0O2todWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkJiMzNDspLAogCQkucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bSgmIzM0O2todWdlcGFnZWQvcGFnZXNfdG9fc2NhbiYjMzQ7KSwKIAl9OwotCWlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKQotCQlzZXR0aW5ncy0mZ3Q7cmVhZF9haGVhZF9rYiA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgpOwomIzQzOwlpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkgewomIzQzOwkJaW50IHJldCA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsCiYjNDM7CQkJCSAgICZhbXA7c2V0dGluZ3MtJmd0O3JlYWRfYWhlYWRfa2IpOwomIzQzOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgTlJfT1JERVJTOyBpJiM0MzsmIzQzOykgewogCQlpZiAoISgoMSAmbHQ7Jmx0OyBpKSAmYW1wOyBvcmRlcnMpKSB7CkBAIC0yMDgsOCAmIzQzOzIyNiwxMyBAQCB2b2lkIHRocF93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncykKIAl0aHBfd3JpdGVfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWQmIzM0Oywga2h1Z2VwYWdlZC0mZ3Q7bWF4X3B0ZXNfc2hhcmVkKTsKIAl0aHBfd3JpdGVfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9wYWdlc190b19zY2FuJiMzNDssIGtodWdlcGFnZWQtJmd0O3BhZ2VzX3RvX3NjYW4pOwogCi0JaWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pCi0JCXdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCBzZXR0aW5ncy0mZ3Q7cmVhZF9haGVhZF9rYik7CiYjNDM7CWlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7CiYjNDM7CQlpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsCiYjNDM7CQkJCSAgICBzZXR0aW5ncy0mZ3Q7cmVhZF9haGVhZF9rYik7CiYjNDM7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBOUl9PUkRFUlM7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICghKCgxICZsdDsmbHQ7IGkpICZhbXA7IG9yZGVycykpCkBAIC0zMDYsOCAmIzQzOzMyOSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9zdXBwb3J0ZWRfb3JkZXJzKGJvb2wgaXNfc2htZW0pCiAJCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJCX0KIAomIzQzOwkJaWYgKGFjY2VzcyhwYXRoLCBGX09LKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJcmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCQlpZiAocmV0KQomIzQzOwkJaWYgKHJldCAmZ3Q7IDApCiAJCQlvcmRlcnMgfD0gMVVMICZsdDsmbHQ7IGk7CiAJfQogCkBAIC0zODIsOCAmIzQzOzQwOCw3IEBAIGludCBkZXRlY3RfaHVnZXRsYl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwgaW50IG1heCkKIAkJaWYgKHNzY2FuZihlbnRyeS0mZ3Q7ZF9uYW1lLCAmIzM0O2h1Z2VwYWdlcy0lenVrQiYjMzQ7LCAmYW1wO2tiKSAhPSAxKQogCQkJY29udGludWU7CiAJCXNpemVzW2NvdW50JiM0MzsmIzQzO10gPSBrYiAqIDEwMjQ7Ci0JCWtzZnRfcHJpbnRfbXNnKCYjMzQ7W0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXG4mIzM0OywKLQkJCSAgICAgICBrYik7CiYjNDM7CQlwcmludGYoJiMzNDsjIFtJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxuJiMzNDssIGtiKTsKIAl9CiAJY2xvc2VkaXIoZGlyKTsKIAlyZXR1cm4gY291bnQ7CkBAIC00MjUsMjggJiM0Mzs0NTAsNDMgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl9zeXNmc19wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsJdW5zaWduZWQgbG9uZyBucjsKJiM0MzsJaW50IHJldDsKIAogCWh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwogCi0JcmV0dXJuIHJlYWRfbnVtKHBhdGgpOwomIzQzOwlyZXQgPSByZWFkX251bShwYXRoLCAmYW1wO25yKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CiYjNDM7CXJldHVybiBucjsKIH0KIAogdm9pZCBodWdldGxiX3NldF9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsJaW50IHJldDsKIAogCWh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwogCi0Jd3JpdGVfbnVtKHBhdGgsIG5yKTsKJiM0MzsJcmV0ID0gd3JpdGVfbnVtKHBhdGgsIG5yKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yOwomIzQzOwlpbnQgcmV0OwogCiAJaHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgJiMzNDtmcmVlX2h1Z2VwYWdlcyYjMzQ7KTsKIAotCXJldHVybiByZWFkX251bShwYXRoKTsKJiM0MzsJcmV0ID0gcmVhZF9udW0ocGF0aCwgJmFtcDtucik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwomIzQzOwlyZXR1cm4gbnI7CiB9CiAKIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpCkBAIC01MDIsNyAmIzQzOzU0Miw4IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHNpemVzW10sCiAJCXJldHVybiAwOwogCiAJaWYgKG5yX2VuYWJsZWQgJmd0OyBtYXgpIHsKLQkJa3NmdF9wcmludF9tc2coJiMzNDtkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXG4mIzM0OywgbnJfZW5hYmxlZCwgbWF4KTsKJiM0MzsJCXByaW50ZigmIzM0OyMgZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxuJiMzNDssCiYjNDM7CQkgICAgICAgbnJfZW5hYmxlZCwgbWF4KTsKIAkJbnJfZW5hYmxlZCA9IG1heDsKIAl9CiAKQEAgLTU3NCw4ICYjNDM7NjE1LDEwIEBAIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0KHZvaWQpCiAKIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3Nfc2lnaGFuZGxlcihpbnQgc2lnKQogewomIzQzOwkodm9pZClzaWc7CiYjNDM7CiAJLyogZXhpdCgpIHdpbGwgaW52b2tlIHRoZSBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCBoYW5kbGVyLiAqLwotCWV4aXQoS1NGVF9GQUlMKTsKJiM0MzsJZXhpdChFWElUX0ZBSUxVUkUpOwogfQogCiB2b2lkIGh1Z2VwYWdlX3NhdmVfc2V0dGluZ3MoYm9vbCB0aHAsIGJvb2wgaHVnZXRsYikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmggYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaApyZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmgKZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlCmluZGV4IDkyMjg3OWY5M2ZjODQ5Li4xNTRkNzQwYmUwMmU4MiAxMDA2NDQKLS0tIGEvdG9vbHMvbW0vLmdpdGlnbm9yZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS8uZ2l0aWdub3JlCkBAIC0yLDMgJiM0MzsyLDUgQEAKIHNsYWJpbmZvCiBwYWdlLXR5cGVzCiBwYWdlX293bmVyX3NvcnQKJiM0Mzt0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzO2d1cF9iZW5jaApkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZQppbmRleCBmNTcyNWI1YzIzYWEyNi4uZDgyY2M4YzQzZWUwMmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL01ha2VmaWxlCkBAIC0zLDEzICYjNDM7MywxNCBAQAogIwogaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGUKIAotQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzO0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoCiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHMKIAogTElCX0RJUiA9IC4uL2xpYi9hcGkKIExJQlMgPSAkKExJQl9ESVIpL2xpYmFwaS5hCiYjNDM7R1VQX0JFTkNIX09CSlMgPSBndXBfYmVuY2guYyAuLi9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyAuLi9saWIvbW0vZmlsZV91dGlscy5jCiAKLUNGTEFHUyAmIzQzOz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWQKJiM0MztDRkxBR1MgJiM0Mzs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1JLi4vLi4gLXB0aHJlYWQKIExERkxBR1MgJiM0Mzs9ICQoTElCUykgLXB0aHJlYWQKIAogYWxsOiAkKEJVSUxEX1RBUkdFVFMpCkBAIC0yMiw4ICYjNDM7MjMsMTEgQEAgJChMSUJTKToKICU6ICUuYwogCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkJmx0OyAkKExERkxBR1MpCiAKJiM0MztndXBfYmVuY2g6ICQoR1VQX0JFTkNIX09CSlMpICQoTElCUykKJiM0MzsJJChDQykgJChDRkxBR1MpIC1vICRAICQoR1VQX0JFTkNIX09CSlMpICQoTERGTEFHUykKJiM0MzsKIGNsZWFuOgotCSQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7CSQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaAogCW1ha2UgLUMgJChMSUJfRElSKSBjbGVhbgogCiBzYmluZGlyID89IC91c3Ivc2JpbgpkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vZ3VwX2JlbmNoLmMgYi90b29scy9tbS9ndXBfYmVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNDk3YjhmM2Y2YWM0YjQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9ndXBfYmVuY2guYwpAQCAtMCwwICYjNDM7MSw0ODIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogTWljcm9iZW5jaG1hcmsgZm9yIGdldF91c2VyX3BhZ2VzIChHVVApIGtlcm5lbCBpbnRlcmZhY2VzLgomIzQzOyAqCiYjNDM7ICogRXhlcmNpc2VzIEdVUF9GQVNUX0JFTkNITUFSSywgUElOX0ZBU1RfQkVOQ0hNQVJLLCBhbmQKJiM0MzsgKiBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLIHZpYSB0aGUgQ09ORklHX0dVUF9URVNUIGRlYnVnZnMgaW50ZXJmYWNlLgomIzQzOyAqCiYjNDM7ICogRXhhbXBsZSB1c2U6CiYjNDM7ICogICAjIFJ1biB0aGUgZnVsbCBtYXRyaXggKGFsbCBjb21tYW5kcywgYWNjZXNzIG1vZGVzLCBwYWdlIGNvdW50cyk6CiYjNDM7ICogICAuL2d1cF9iZW5jaAomIzQzOyAqCiYjNDM7ICogICAjIFNpbmdsZSBydW46IHBpbl91c2VyX3BhZ2VzX2Zhc3QsIDUxMiBwYWdlcywgd3JpdGUgYWNjZXNzLCBodWdldGxiOgomIzQzOyAqICAgLi9ndXBfYmVuY2ggLWEgLW4gNTEyIC13IC1ICiYjNDM7ICoKJiM0MzsgKiBSZXF1aXJlcyBDT05GSUdfR1VQX1RFU1Q9eSBhbmQgZGVidWdmcyBtb3VudGVkIGF0IC9zeXMva2VybmVsL2RlYnVnLgomIzQzOyAqIE11c3QgYmUgcnVuIGFzIHJvb3QuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjQKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtkaXJlbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYXRvbWljLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2d1cF90ZXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBNQiAoMVVMICZsdDsmbHQ7IDIwKQomIzQzOwomIzQzOyNpZm5kZWYgQVJSQVlfU0laRQomIzQzOyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7LyogSnVzdCB0aGUgZmxhZ3Mgd2UgbmVlZCwgY29waWVkIGZyb20gdGhlIGtlcm5lbCBpbnRlcm5hbHMuICovCiYjNDM7I2RlZmluZSBGT0xMX1dSSVRFCTB4MDEJLyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovCiYjNDM7CiYjNDM7I2RlZmluZSBHVVBfVEVTVF9GSUxFICYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QmIzM0OwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgcHNpemUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0YXRpYyB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7CiYjNDM7CiYjNDM7CWlmICghX19wYWdlX3NpemUpCiYjNDM7CQlfX3BhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKJiM0MzsJcmV0dXJuIF9fcGFnZV9zaXplOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBjbWQ7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmJlbmNoX2xhYmVsOwomIzQzO3N0YXRpYyBpbnQgZ3VwX2ZkLCByZXBlYXRzID0gMTsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7CiYjNDM7c3RhdGljIGF0b21pY19pbnQgYmVuY2hfZXJyb3I7CiYjNDM7LyogU2VyaWFsaXplIHByaW50cyAqLwomIzQzO3N0YXRpYyBwdGhyZWFkX211dGV4X3QgcHJpbnRfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGJlbmNoX2NtZHNbXSA9IHsKJiM0MzsJR1VQX0ZBU1RfQkVOQ0hNQVJLLAomIzQzOwlQSU5fRkFTVF9CRU5DSE1BUkssCiYjNDM7CVBJTl9MT05HVEVSTV9CRU5DSE1BUkssCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgaW50IGJlbmNoX3RocF9tb2Rlc1tdID0geyAxLCAwIH07CS8qIG9uLCBvZmYgKi8KJiM0MztzdGF0aWMgY29uc3QgaW50IGJlbmNoX25yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmNtZF90b19zdHIodW5zaWduZWQgbG9uZyBjbWQpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGNtZCkgewomIzQzOwljYXNlIEdVUF9GQVNUX0JFTkNITUFSSzoKJiM0MzsJCXJldHVybiAmIzM0O0dVUF9GQVNUX0JFTkNITUFSSyYjMzQ7OwomIzQzOwljYXNlIFBJTl9GQVNUX0JFTkNITUFSSzoKJiM0MzsJCXJldHVybiAmIzM0O1BJTl9GQVNUX0JFTkNITUFSSyYjMzQ7OwomIzQzOwljYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6CiYjNDM7CQlyZXR1cm4gJiMzNDtQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLJiMzNDs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuICYjMzQ7VW5rbm93biBjb21tYW5kJiMzNDs7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIHBhcnNlX2xvbmdfYXJnX2Jhc2UoY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgYmFzZSkKJiM0Mzt7CiYjNDM7CWNoYXIgKmVuZDsKJiM0MzsJbG9uZyB2YWw7CiYjNDM7CiYjNDM7CWVycm5vID0gMDsKJiM0MzsJdmFsID0gc3RydG9sKGFyZywgJmFtcDtlbmQsIGJhc2UpOwomIzQzOwlpZiAoZXJybm8gfHwgZW5kID09IGFyZyB8fCAqZW5kICE9ICYjMzk7XDAmIzM5OykgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7SW52YWxpZCAlcyAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBuYW1lLCBhcmcpOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gdmFsOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBwYXJzZV9sb25nX2FyZyhjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gcGFyc2VfbG9uZ19hcmdfYmFzZShhcmcsIG5hbWUsIDEwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcoY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJbG9uZyB2YWwgPSBwYXJzZV9sb25nX2FyZyhhcmcsIG5hbWUpOwomIzQzOwomIzQzOwlpZiAodmFsICZsdDsgMSkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7SW52YWxpZCAlcyAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBuYW1lLCBhcmcpOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdmFsOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgYmVuY2hfcnVuIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBjbWQ7CiYjNDM7CWludCB0aHA7CQkvKiAtMTogZGVmYXVsdCwgMDogb2ZmLCAxOiBvbiAqLwomIzQzOwlib29sIGh1Z2V0bGI7CiYjNDM7CWJvb2wgd3JpdGU7CQkvKiB3aGV0aGVyIHRvIHNldCBGT0xMX1dSSVRFICovCiYjNDM7CWJvb2wgc2hhcmVkOwomIzQzOwlpbnQgbnJfcGFnZXM7CQkvKiAtMSBtZWFucyBhbGwgcGFnZXMgKHNpemUgLyBwc2l6ZSgpKSAqLwomIzQzOwl1bnNpZ25lZCBsb25nIHNpemU7CiYjNDM7CWNoYXIgKmZpbGU7CiYjNDM7CWludCBudGhyZWFkczsKJiM0MzsJdW5zaWduZWQgaW50IGd1cF9mbGFnczsKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7CiYjNDM7CWludCBpLCBzdGF0dXM7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyByZXBlYXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZ3VwLnNpemUgPSBzaXplOwomIzQzOwkJc3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsICZhbXA7Z3VwKTsKJiM0MzsJCWlmIChzdGF0dXMpIHsKJiM0MzsJCQliZW5jaF9lcnJvciA9IDE7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwdGhyZWFkX211dGV4X2xvY2soJmFtcDtwcmludF9tdXRleCk7CiYjNDM7CQlwcmludGYoJiMzNDslcyB0aW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1cyYjMzQ7LAomIzQzOwkJICAgICAgIGJlbmNoX2xhYmVsLCBndXAuZ2V0X2RlbHRhX3VzZWMsCiYjNDM7CQkgICAgICAgZ3VwLnB1dF9kZWx0YV91c2VjKTsKJiM0MzsJCWlmIChndXAuc2l6ZSAhPSBzaXplKQomIzQzOwkJCXByaW50ZigmIzM0OywgdHJ1bmNhdGVkIChzaXplOiAlbGxkKSYjMzQ7LCBndXAuc2l6ZSk7CiYjNDM7CQlwcmludGYoJiMzNDtcbiYjMzQ7KTsKJiM0MzsJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhbXA7cHJpbnRfbXV0ZXgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ1bl9iZW5jaChzdHJ1Y3QgYmVuY2hfcnVuICpydW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07CiYjNDM7CWludCB6ZXJvX2ZkLCBpLCByZXQsIHN0YXJ0ZWRfdGhyZWFkcyA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXNfcGVyX2NhbGw7CiYjNDM7CWludCBmbGFncyA9IE1BUF9QUklWQVRFOwomIzQzOwlwdGhyZWFkX3QgKnRpZDsKJiM0MzsJY2hhciBsYWJlbFsxMjhdOwomIzQzOwljaGFyICpwOwomIzQzOwlib29sIHJlc3RvcmVfaHVnZXRsYiA9IGZhbHNlOwomIzQzOwomIzQzOwkvKiBTZXQgZ2xvYmFscyBjb25zdW1lZCBieSBndXBfdGhyZWFkICovCiYjNDM7CWNtZCA9IHJ1bi0mZ3Q7Y21kOwomIzQzOwlzaXplID0gcnVuLSZndDtzaXplOwomIzQzOwliZW5jaF9lcnJvciA9IDA7CiYjNDM7CiYjNDM7CWlmIChydW4tJmd0O2h1Z2V0bGIpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTsKJiM0MzsKJiM0MzsJCWlmICghaHBfc2l6ZSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0NvdWxkIG5vdCBkZXRlcm1pbmUgaHVnZSBwYWdlIHNpemVcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gMTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChzaXplICZndDsgVUxPTkdfTUFYIC0gKGhwX3NpemUgLSAxKSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0h1Z2VUTEIgbWFwcGluZyBzaXplIGlzIHRvbyBsYXJnZVxuJiMzNDspOwomIzQzOwkJCXJldHVybiAxOwomIzQzOwkJfQomIzQzOwomIzQzOwkJc2l6ZSA9IChzaXplICYjNDM7IGhwX3NpemUgLSAxKSAmYW1wOyB+KGhwX3NpemUgLSAxKTsKJiM0MzsJCWlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xuJiMzNDspOwomIzQzOwkJCWh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpOwomIzQzOwkJCXJldHVybiAxOwomIzQzOwkJfQomIzQzOwkJcmVzdG9yZV9odWdldGxiID0gdHJ1ZTsKJiM0MzsJCWZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChydW4tJmd0O3NoYXJlZCkgewomIzQzOwkJZmxhZ3MgJmFtcDs9IH5NQVBfUFJJVkFURTsKJiM0MzsJCWZsYWdzIHw9IE1BUF9TSEFSRUQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbnJfcGFnZXNfcGVyX2NhbGwgPSBydW4tJmd0O25yX3BhZ2VzICZsdDsgMCA/IHNpemUgLyBwc2l6ZSgpIDoKJiM0MzsJCSh1bnNpZ25lZCBsb25nKXJ1bi0mZ3Q7bnJfcGFnZXM7CiYjNDM7CiYjNDM7CWlmIChucl9wYWdlc19wZXJfY2FsbCAmZ3Q7IFVJTlRfTUFYKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtQYWdlIGNvdW50IGlzIHRvbyBsYXJnZVxuJiMzNDspOwomIzQzOwkJaWYgKHJlc3RvcmVfaHVnZXRsYikKJiM0MzsJCQlodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CWd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX3Blcl9jYWxsOwomIzQzOwomIzQzOwlndXAuZ3VwX2ZsYWdzID0gcnVuLSZndDtndXBfZmxhZ3M7CiYjNDM7CWlmIChydW4tJmd0O3dyaXRlKQomIzQzOwkJZ3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFOwomIzQzOwomIzQzOwlzbnByaW50ZihsYWJlbCwgc2l6ZW9mKGxhYmVsKSwgJiMzNDslcyAobnJfcGFnZXM9JS00dSAlcyAlcyAlcyAlcykmIzM0OywKJiM0MzsJCSBjbWRfdG9fc3RyKHJ1bi0mZ3Q7Y21kKSwKJiM0MzsJCSBndXAubnJfcGFnZXNfcGVyX2NhbGwsCiYjNDM7CQkgcnVuLSZndDt3cml0ZSAgPyAmIzM0O3dyaXRlJiMzNDsgICA6ICYjMzQ7cmVhZCYjMzQ7LAomIzQzOwkJIHJ1bi0mZ3Q7c2hhcmVkID8gJiMzNDtzaGFyZWQmIzM0OyAgOiAmIzM0O3ByaXZhdGUmIzM0OywKJiM0MzsJCSBydW4tJmd0O2h1Z2V0bGIgPyAmIzM0O2h1Z2V0bGI9b24mIzM0OyA6ICYjMzQ7aHVnZXRsYj1vZmYmIzM0OywKJiM0MzsJCSBydW4tJmd0O2h1Z2V0bGIgPyAmIzM0O3RocD1vZmYmIzM0OyA6CiYjNDM7CQkgKHJ1bi0mZ3Q7dGhwID09IDEgPyAmIzM0O3RocD1vbiYjMzQ7IDoKJiM0MzsJCSAocnVuLSZndDt0aHAgPT0gMCA/ICYjMzQ7dGhwPW9mZiYjMzQ7IDogJiMzNDt0aHA9ZGVmYXVsdCYjMzQ7KSkpOwomIzQzOwliZW5jaF9sYWJlbCA9IGxhYmVsOwomIzQzOwomIzQzOwl6ZXJvX2ZkID0gb3BlbihydW4tJmd0O2ZpbGUsIE9fUkRXUik7CiYjNDM7CWlmICh6ZXJvX2ZkICZsdDsgMCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7VW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgcnVuLSZndDtmaWxlLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwkJaWYgKHJlc3RvcmVfaHVnZXRsYikKJiM0MzsJCQlodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCB6ZXJvX2ZkLCAwKTsKJiM0MzsJY2xvc2UoemVyb19mZCk7CiYjNDM7CWlmIChwID09IE1BUF9GQUlMRUQpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O21tYXA6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJCWlmIChyZXN0b3JlX2h1Z2V0bGIpCiYjNDM7CQkJaHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwlndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7CiYjNDM7CiYjNDM7CWlmIChydW4tJmd0O3RocCA9PSAxKQomIzQzOwkJbWFkdmlzZShwLCBzaXplLCBNQURWX0hVR0VQQUdFKTsKJiM0MzsJZWxzZSBpZiAocnVuLSZndDt0aHAgPT0gMCkKJiM0MzsJCW1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKJiM0MzsKJiM0MzsJLyogRmF1bHQgdGhlbSBpbiBoZXJlLCBmcm9tIHVzZXIgc3BhY2UuICovCiYjNDM7CWZvciAoOyAodW5zaWduZWQgbG9uZylwICZsdDsgZ3VwLmFkZHIgJiM0Mzsgc2l6ZTsgcCAmIzQzOz0gcHNpemUoKSkKJiM0MzsJCXBbMF0gPSAwOwomIzQzOwomIzQzOwl0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBydW4tJmd0O250aHJlYWRzKTsKJiM0MzsJaWYgKCF0aWQpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSAlZCB0aHJlYWRzOiAlc1xuJiMzNDssCiYjNDM7CQkJcnVuLSZndDtudGhyZWFkcywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJCW11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTsKJiM0MzsJCWlmIChyZXN0b3JlX2h1Z2V0bGIpCiYjNDM7CQkJaHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcnVuLSZndDtudGhyZWFkczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJldCA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCAmYW1wO2d1cCk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7cHRocmVhZF9jcmVhdGUgZmFpbGVkOiAlc1xuJiMzNDssIHN0cmVycm9yKHJldCkpOwomIzQzOwkJCWJlbmNoX2Vycm9yID0gMTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCXN0YXJ0ZWRfdGhyZWFkcyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHN0YXJ0ZWRfdGhyZWFkczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O3B0aHJlYWRfam9pbiBmYWlsZWQ6ICVzXG4mIzM0Oywgc3RyZXJyb3IocmV0KSk7CiYjNDM7CQkJYmVuY2hfZXJyb3IgPSAxOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWZyZWUodGlkKTsKJiM0MzsJbXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpOwomIzQzOwlpZiAocmVzdG9yZV9odWdldGxiKQomIzQzOwkJaHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7CiYjNDM7CiYjNDM7CXJldHVybiBiZW5jaF9lcnJvciA/IDEgOiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ1bl9tYXRyaXgodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBjLCB0LCB3LCBzLCBuOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJZm9yIChjID0gMDsgYyAmbHQ7IEFSUkFZX1NJWkUoYmVuY2hfY21kcyk7IGMmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKHcgPSAwOyB3ICZsdDs9IDE7IHcmIzQzOyYjNDM7KSB7CiYjNDM7CQkJZm9yIChzID0gMDsgcyAmbHQ7PSAxOyBzJiM0MzsmIzQzOykgewomIzQzOwkJCQlmb3IgKHQgPSAwOyB0ICZsdDsgQVJSQVlfU0laRShiZW5jaF90aHBfbW9kZXMpOyB0JiM0MzsmIzQzOykgewomIzQzOwkJCQkJZm9yIChuID0gMDsgbiAmbHQ7IEFSUkFZX1NJWkUoYmVuY2hfbnJfcGFnZXNfbGlzdCk7IG4mIzQzOyYjNDM7KSB7CiYjNDM7CQkJCQkJc3RydWN0IGJlbmNoX3J1biBydW4gPSB7CiYjNDM7CQkJCQkJCS5jbWQJICA9IGJlbmNoX2NtZHNbY10sCiYjNDM7CQkJCQkJCS50aHAJICA9IGJlbmNoX3RocF9tb2Rlc1t0XSwKJiM0MzsJCQkJCQkJLmh1Z2V0bGIgID0gZmFsc2UsCiYjNDM7CQkJCQkJCS53cml0ZQkgID0gdywKJiM0MzsJCQkJCQkJLnNoYXJlZAkgID0gcywKJiM0MzsJCQkJCQkJLm5yX3BhZ2VzID0gYmVuY2hfbnJfcGFnZXNfbGlzdFtuXSwKJiM0MzsJCQkJCQkJLnNpemUJICA9IDEyOCAqIE1CLAomIzQzOwkJCQkJCQkuZmlsZQkgID0gJiMzNDsvZGV2L3plcm8mIzM0OywKJiM0MzsJCQkJCQkJLm50aHJlYWRzID0gMSwKJiM0MzsJCQkJCQl9OwomIzQzOwkJCQkJCXJldCB8PSBydW5fYmVuY2goJmFtcDtydW4pOwomIzQzOwkJCQkJfQomIzQzOwkJCQl9CiYjNDM7CQkJCS8qIGh1Z2V0bGI6IDI1Nk0gdG8gbWF0Y2ggcnVuX2d1cF9tYXRyaXgoKSBpbiBydW5fdm10ZXN0cy5zaCAqLwomIzQzOwkJCQlmb3IgKG4gPSAwOyBuICZsdDsgQVJSQVlfU0laRShiZW5jaF9ucl9wYWdlc19saXN0KTsgbiYjNDM7JiM0MzspIHsKJiM0MzsJCQkJCXN0cnVjdCBiZW5jaF9ydW4gcnVuID0gewomIzQzOwkJCQkJCS5jbWQJICA9IGJlbmNoX2NtZHNbY10sCiYjNDM7CQkJCQkJLnRocAkgID0gLTEsCiYjNDM7CQkJCQkJLmh1Z2V0bGIgID0gdHJ1ZSwKJiM0MzsJCQkJCQkud3JpdGUJICA9IHcsCiYjNDM7CQkJCQkJLnNoYXJlZAkgID0gcywKJiM0MzsJCQkJCQkubnJfcGFnZXMgPSBiZW5jaF9ucl9wYWdlc19saXN0W25dLAomIzQzOwkJCQkJCS5zaXplCSAgPSAyNTYgKiBNQiwKJiM0MzsJCQkJCQkuZmlsZQkgID0gJiMzNDsvZGV2L3plcm8mIzM0OywKJiM0MzsJCQkJCQkubnRocmVhZHMgPSAxLAomIzQzOwkJCQkJfTsKJiM0MzsJCQkJCXJldCB8PSBydW5fYmVuY2goJmFtcDtydW4pOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiZW5jaF9ydW4gcnVuID0gewomIzQzOwkJLmNtZAkgID0gR1VQX0ZBU1RfQkVOQ0hNQVJLLAomIzQzOwkJLnRocAkgID0gLTEsCiYjNDM7CQkuaHVnZXRsYiAgPSBmYWxzZSwKJiM0MzsJCS53cml0ZQkgID0gdHJ1ZSwKJiM0MzsJCS5zaGFyZWQJICA9IGZhbHNlLAomIzQzOwkJLm5yX3BhZ2VzID0gMSwKJiM0MzsJCS5zaXplCSAgPSAxMjggKiBNQiwKJiM0MzsJCS5maWxlCSAgPSAmIzM0Oy9kZXYvemVybyYjMzQ7LAomIzQzOwkJLm50aHJlYWRzID0gMSwKJiM0MzsJfTsKJiM0MzsJaW50IG9wdCwgcmVzdWx0OwomIzQzOwomIzQzOwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O206cjpuOkY6Zjphajp0VEx1d1dTSCYjMzQ7KSkgIT0gLTEpIHsKJiM0MzsJCXN3aXRjaCAob3B0KSB7CiYjNDM7CQkvKiBDb21tYW5kIHNlbGVjdGlvbiAqLwomIzQzOwkJY2FzZSAmIzM5O3UmIzM5OzoKJiM0MzsJCQlydW4uY21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O2EmIzM5OzoKJiM0MzsJCQlydW4uY21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O0wmIzM5OzoKJiM0MzsJCQlydW4uY21kID0gUElOX0xPTkdURVJNX0JFTkNITUFSSzsKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIE1lbW9yeSB0eXBlICovCiYjNDM7CQljYXNlICYjMzk7SCYjMzk7OgomIzQzOwkJCXJ1bi5odWdldGxiID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTt0JiMzOTs6CiYjNDM7CQkJcnVuLnRocCA9IDE7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7VCYjMzk7OgomIzQzOwkJCXJ1bi50aHAgPSAwOwomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJLyogQWNjZXNzIG1vZGUgKi8KJiM0MzsJCWNhc2UgJiMzOTt3JiMzOTs6CiYjNDM7CQkJcnVuLndyaXRlID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtXJiMzOTs6CiYjNDM7CQkJcnVuLndyaXRlID0gZmFsc2U7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7UyYjMzk7OgomIzQzOwkJCXJ1bi5zaGFyZWQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJLyogTWFwcGluZyAqLwomIzQzOwkJY2FzZSAmIzM5O2YmIzM5OzoKJiM0MzsJCQlydW4uZmlsZSA9IG9wdGFyZzsKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIFNpemluZyBhbmQgaXRlcmF0aW9uICovCiYjNDM7CQljYXNlICYjMzk7bSYjMzk7OgomIzQzOwkJCXJ1bi5zaXplID0gcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcob3B0YXJnLCAmIzM0O3NpemUmIzM0Oyk7CiYjNDM7CQkJaWYgKHJ1bi5zaXplICZndDsgVUxPTkdfTUFYIC8gTUIpIHsKJiM0MzsJCQkJZnByaW50ZihzdGRlcnIsICYjMzQ7SW52YWxpZCBzaXplICYjMzk7JXMmIzM5O1xuJiMzNDssIG9wdGFyZyk7CiYjNDM7CQkJCWV4aXQoMSk7CiYjNDM7CQkJfQomIzQzOwkJCXJ1bi5zaXplICo9IE1COwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O24mIzM5OzogewomIzQzOwkJCWxvbmcgdmFsOwomIzQzOwomIzQzOwkJCXZhbCA9IHBhcnNlX2xvbmdfYXJnKG9wdGFyZywgJiMzNDtwYWdlIGNvdW50JiMzNDspOwomIzQzOwkJCWlmICh2YWwgIT0gLTEgJmFtcDsmYW1wOyAodmFsICZsdDsgMSB8fCB2YWwgJmd0OyBJTlRfTUFYKSkgewomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtJbnZhbGlkIHBhZ2UgY291bnQgJiMzOTslcyYjMzk7XG4mIzM0Oywgb3B0YXJnKTsKJiM0MzsJCQkJZXhpdCgxKTsKJiM0MzsJCQl9CiYjNDM7CQkJcnVuLm5yX3BhZ2VzID0gdmFsOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJY2FzZSAmIzM5O3ImIzM5OzogewomIzQzOwkJCWxvbmcgdmFsOwomIzQzOwomIzQzOwkJCXZhbCA9IHBhcnNlX3Bvc2l0aXZlX2xvbmdfYXJnKG9wdGFyZywgJiMzNDtyZXBlYXQgY291bnQmIzM0Oyk7CiYjNDM7CQkJaWYgKHZhbCAmZ3Q7IElOVF9NQVgpIHsKJiM0MzsJCQkJZnByaW50ZihzdGRlcnIsICYjMzQ7SW52YWxpZCByZXBlYXQgY291bnQgJiMzOTslcyYjMzk7XG4mIzM0Oywgb3B0YXJnKTsKJiM0MzsJCQkJZXhpdCgxKTsKJiM0MzsJCQl9CiYjNDM7CQkJcmVwZWF0cyA9IHZhbDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCWNhc2UgJiMzOTtqJiMzOTs6IHsKJiM0MzsJCQlsb25nIHZhbDsKJiM0MzsKJiM0MzsJCQl2YWwgPSBwYXJzZV9wb3NpdGl2ZV9sb25nX2FyZyhvcHRhcmcsICYjMzQ7dGhyZWFkIGNvdW50JiMzNDspOwomIzQzOwkJCWlmICh2YWwgJmd0OyBJTlRfTUFYIHx8CiYjNDM7CQkJICAgIChzaXplX3QpdmFsICZndDsgU0laRV9NQVggLyBzaXplb2YocHRocmVhZF90KSkgewomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtJbnZhbGlkIHRocmVhZCBjb3VudCAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBvcHRhcmcpOwomIzQzOwkJCQlleGl0KDEpOwomIzQzOwkJCX0KJiM0MzsJCQlydW4ubnRocmVhZHMgPSB2YWw7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBBZHZhbmNlZCAqLwomIzQzOwkJY2FzZSAmIzM5O0YmIzM5OzogewomIzQzOwkJCWxvbmcgdmFsOwomIzQzOwomIzQzOwkJCXZhbCA9IHBhcnNlX2xvbmdfYXJnX2Jhc2Uob3B0YXJnLCAmIzM0O0dVUCBmbGFncyYjMzQ7LCAwKTsKJiM0MzsJCQlpZiAodmFsICZsdDsgMCB8fCB2YWwgJmd0OyBVSU5UX01BWCkgewomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtJbnZhbGlkIEdVUCBmbGFncyAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBvcHRhcmcpOwomIzQzOwkJCQlleGl0KDEpOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlydW4uZ3VwX2ZsYWdzID0gdmFsOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXcm9uZyBhcmd1bWVudFxuJiMzNDspOwomIzQzOwkJCWV4aXQoMSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG9wdGluZCAhPSBhcmdjKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtVbmV4cGVjdGVkIGFyZ3VtZW50ICYjMzk7JXMmIzM5O1xuJiMzNDssIGFyZ3Zbb3B0aW5kXSk7CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTsKJiM0MzsJaWYgKGd1cF9mZCA9PSAtMSkgewomIzQzOwkJaWYgKGVycm5vID09IEVBQ0NFUykgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1BsZWFzZSBydW4gYXMgcm9vdFxuJiMzNDspOwomIzQzOwkJfSBlbHNlIGlmIChlcnJubyA9PSBFTk9FTlQpIHsKJiM0MzsJCQlESVIgKmRlYnVnZnMgPSBvcGVuZGlyKCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcmIzM0Oyk7CiYjNDM7CiYjNDM7CQkJaWYgKCFkZWJ1Z2ZzKSB7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O01vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcbiYjMzQ7KTsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQljbG9zZWRpcihkZWJ1Z2ZzKTsKJiM0MzsJCQkJZnByaW50ZihzdGRlcnIsICYjMzQ7Q2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcbiYjMzQ7KTsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0ZhaWxlZCB0byBvcGVuICVzOiAlc1xuJiMzNDssIEdVUF9URVNUX0ZJTEUsCiYjNDM7CQkJCXN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQl9CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlc3VsdCA9IChhcmdjID09IDEpID8gcnVuX21hdHJpeCgpIDogcnVuX2JlbmNoKCZhbXA7cnVuKTsKJiM0MzsJY2xvc2UoZ3VwX2ZkKTsKJiM0MzsJcmV0dXJuIHJlc3VsdDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCmluZGV4IGU2ZGY5NjhmMDk3MWM4Li5lNzdjNGNjNDFiNDcwMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKQEAgLTM3LDcgJiM0MzszNyw4IEBAIGVuZGlmCiAjIExETElCUy4KIE1BS0VGTEFHUyAmIzQzOz0gLS1uby1idWlsdGluLXJ1bGVzCiAKLUNGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpCiYjNDM7Q0ZMQUdTID0gLVdhbGwgLU8yIC1JICQodG9wX3NyY2RpcikgLUkgJCh0b3Bfc3JjZGlyKS90b29scy9saWIKJiM0MztDRkxBR1MgJiM0Mzs9ICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpCiBDRkxBR1MgJiM0Mzs9IC1XdW5yZWFjaGFibGUtY29kZQogTERMSUJTID0gLWxydCAtbHB0aHJlYWQgLWxtCiAKQEAgLTE4Nyw4ICYjNDM7MTg4LDEwIEBAIFRFU1RfRklMRVMgJiM0Mzs9IHdyaXRlX2h1Z2V0bGJfbWVtb3J5LnNoCiAKIGluY2x1ZGUgLi4vbGliLm1rCiAKLSQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuYwotJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jCiYjNDM7JChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFwKJiM0MzsJCSAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYwomIzQzOyQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcCiYjNDM7CQkgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMKIAogJChPVVRQVVQpL3VmZmQtc3RyZXNzOiB1ZmZkLWNvbW1vbi5jCiAkKE9VVFBVVCkvdWZmZC11bml0LXRlc3RzOiB1ZmZkLWNvbW1vbi5jCkBAIC0yMTcsNyAmIzQzOzIyMCw3IEBAICQoQklOQVJJRVNfMzIpOiBDRkxBR1MgJiM0Mzs9IC1tMzIgLW14c2F2ZQogJChCSU5BUklFU18zMik6IExETElCUyAmIzQzOz0gLWxydCAtbGRsIC1sbQogJChCSU5BUklFU18zMik6ICQoT1VUUFVUKS8lXzMyOiAlLmMKIAkkKGNhbGwgbXNnLENDLCwkQCkKLQkkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRACiYjNDM7CSQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQAogJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTMyLCQodCkpKSkKIGVuZGlmCiAKQEAgLTIyNiw3ICYjNDM7MjI5LDcgQEAgJChCSU5BUklFU182NCk6IENGTEFHUyAmIzQzOz0gLW02NCAtbXhzYXZlCiAkKEJJTkFSSUVTXzY0KTogTERMSUJTICYjNDM7PSAtbHJ0IC1sZGwKICQoQklOQVJJRVNfNjQpOiAkKE9VVFBVVCkvJV82NDogJS5jCiAJJChjYWxsIG1zZyxDQywsJEApCi0JJChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQAomIzQzOwkkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEAKICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS02NCwkKHQpKSkpCiBlbmRpZgogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jCmluZGV4IDViNTgyNTg4ZTAxNWQ0Li5iMmVhYTQ5MGU3YzI1MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKQEAgLTE1LDkgJiM0MzsxNSw5IEBACiAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIE1BUF9TSVpFX01CCTEwMAogI2RlZmluZSBNQVBfU0laRQkoTUFQX1NJWkVfTUIgKiAxMDI0ICogMTAyNCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKaW5kZXggMGM2MjdlYTg5ZmY3YjIuLjNjM2QxMjljOTFiMjlkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7CiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jCmluZGV4IDYzMjllMzdmZmY0Yzk0Li40OTZiNzRiMzc0NzZiMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKQEAgLTI1LDcgJiM0MzsyNSw2IEBACiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIHVpbnQ2NF90IHBhZ2Vfc2l6ZTsKIHVpbnQ2NF90IHBtZF9wYWdlc2l6ZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwppbmRleCBiMjFkZjMwNDBiMWM3Yy4uZWQ5NjdiM2M3ZjM3MDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMKQEAgLTIxLDcgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3Vpby5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2luY2x1ZGUgJiMzNDsuLi9waWRmZC9waWRmZC5oJiMzNDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwppbmRleCBlYjg5NjNlOWQ5OGYwNi4uNjhjODQwYmFlMDgyMDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jCkBAIC0yOSw3ICYjNDM7MjksNiBAQAogI2luY2x1ZGUgJiMzNDsuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogc3RhdGljIHNpemVfdCBwYWdlc2l6ZTsKIHN0YXRpYyBpbnQgbnJfaHVnZXRsYnNpemVzOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKaW5kZXggM2Y4NDFhOTZmODcwNjguLmQ5Y2FhOWZiOGI3ODU2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKQEAgLTEsMjc1ICYjNDM7MSw0NDMgQEAKICNkZWZpbmUgX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fIC8vIFVzZSBsbDY0CiAjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKICNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7ZGlyZW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKICNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwotI2luY2x1ZGUgJmx0O3B0aHJlYWQuaCZndDsKLSNpbmNsdWRlICZsdDthc3NlcnQuaCZndDsKICNpbmNsdWRlICZsdDttbS9ndXBfdGVzdC5oJmd0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiAKICNkZWZpbmUgTUIgKDFVTCAmbHQ7Jmx0OyAyMCkKIAomIzQzOyNpZm5kZWYgQVJSQVlfU0laRQomIzQzOyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpCiYjNDM7I2VuZGlmCiYjNDM7CiAvKiBKdXN0IHRoZSBmbGFncyB3ZSBuZWVkLCBjb3BpZWQgZnJvbSB0aGUga2VybmVsIGludGVybmFscy4gKi8KICNkZWZpbmUgRk9MTF9XUklURQkweDAxCS8qIGNoZWNrIHB0ZSBpcyB3cml0YWJsZSAqLwogCiYjNDM7LyogUGFnZSBjb3VudHMgZXhlcmNpc2luZyBzaW5nbGUsIFRIUC1iYXRjaCwgcGFydGlhbCwgYW5kIGZ1bGwtbWFwcGluZyBHVVAuICovCiYjNDM7c3RhdGljIGNvbnN0IGludCBucl9wYWdlc19saXN0W10gPSB7IDEsIDUxMiwgMTIzLCAtMSB9OwomIzQzOwogI2RlZmluZSBHVVBfVEVTVF9GSUxFICYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QmIzM0OwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbWQgPSBHVVBfRkFTVF9CRU5DSE1BUks7Ci1zdGF0aWMgaW50IGd1cF9mZCwgcmVwZWF0cyA9IDE7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7Ci0vKiBTZXJpYWxpemUgcHJpbnRzICovCi1zdGF0aWMgcHRocmVhZF9tdXRleF90IHByaW50X211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKJiM0MztGSVhUVVJFKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJaW50IGd1cF9mZDsKJiM0MzsJY2hhciAqYWRkcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJYm9vbCB0aHA7CiYjNDM7CWJvb2wgaHVnZXRsYjsKJiM0MzsJYm9vbCB3cml0ZTsKJiM0MzsJYm9vbCBzaGFyZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRvbmx5KQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSBmYWxzZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV90aHApCiYjNDM7ewomIzQzOwkudGhwID0gdHJ1ZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkb25seV90aHApCiYjNDM7ewomIzQzOwkudGhwID0gdHJ1ZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSBmYWxzZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGVfaHVnZXRsYikKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSB0cnVlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRvbmx5X2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSBmYWxzZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZSkKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZG9ubHkpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gZmFsc2UsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV90aHApCiYjNDM7ewomIzQzOwkudGhwID0gdHJ1ZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKIAotc3RhdGljIGNoYXIgKmNtZF90b19zdHIodW5zaWduZWQgbG9uZyBjbWQpCiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRvbmx5X3RocCkKIHsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgR1VQX0ZBU1RfQkVOQ0hNQVJLOgotCQlyZXR1cm4gJiMzNDtHVVBfRkFTVF9CRU5DSE1BUksmIzM0OzsKLQljYXNlIFBJTl9GQVNUX0JFTkNITUFSSzoKLQkJcmV0dXJuICYjMzQ7UElOX0ZBU1RfQkVOQ0hNQVJLJiMzNDs7Ci0JY2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOgotCQlyZXR1cm4gJiMzNDtQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLJiMzNDs7Ci0JY2FzZSBHVVBfQkFTSUNfVEVTVDoKLQkJcmV0dXJuICYjMzQ7R1VQX0JBU0lDX1RFU1QmIzM0OzsKLQljYXNlIFBJTl9CQVNJQ19URVNUOgotCQlyZXR1cm4gJiMzNDtQSU5fQkFTSUNfVEVTVCYjMzQ7OwotCWNhc2UgRFVNUF9VU0VSX1BBR0VTX1RFU1Q6Ci0JCXJldHVybiAmIzM0O0RVTVBfVVNFUl9QQUdFU19URVNUJiMzNDs7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSBmYWxzZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYikKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSB0cnVlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkb25seV9odWdldGxiKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IHRydWUsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoZ3VwX3Rlc3QpCiYjNDM7ewomIzQzOwlpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFOwomIzQzOwlpbnQgemVyb19mZDsKJiM0MzsJY2hhciAqcDsKJiM0MzsKJiM0MzsJLyogemVyb19mZCBoYXMgdG8gYmUgJmd0Oz0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqLwomIzQzOwl6ZXJvX2ZkID0gb3BlbigmIzM0Oy9kZXYvemVybyYjMzQ7LCBPX1JEV1IpOwomIzQzOwlBU1NFUlRfR0UoemVyb19mZCwgMCk7CiYjNDM7CiYjNDM7CS8qIGd1cF9mZCBoYXMgdG8gYmUgJmd0Oz0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqLwomIzQzOwlzZWxmLSZndDtndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7CiYjNDM7CUFTU0VSVF9HRShzZWxmLSZndDtndXBfZmQsIDApOwomIzQzOwomIzQzOwlzZWxmLSZndDtzaXplID0gdmFyaWFudC0mZ3Q7aHVnZXRsYiA/IDI1NiAqIE1CIDogMTI4ICogTUI7CiYjNDM7CiYjNDM7CS8qIENoZWNrIGZvciBodWdldGxiICovCiYjNDM7CWlmICh2YXJpYW50LSZndDtodWdldGxiKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7CiYjNDM7CiYjNDM7CQlpZiAoIWhwX3NpemUpIHsKJiM0MzsJCQljbG9zZSh6ZXJvX2ZkKTsKJiM0MzsJCQljbG9zZShzZWxmLSZndDtndXBfZmQpOwomIzQzOwkJCVNLSVAocmV0dXJuLCAmIzM0O0h1Z2VUTEIgbm90IGF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwkJfQomIzQzOwomIzQzOwkJc2VsZi0mZ3Q7c2l6ZSA9IChzZWxmLSZndDtzaXplICYjNDM7IGhwX3NpemUgLSAxKSAmYW1wOyB+KGhwX3NpemUgLSAxKTsKJiM0MzsJCWlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNlbGYtJmd0O3NpemUgLyBocF9zaXplKSkgewomIzQzOwkJCWh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpOwomIzQzOwkJCWNsb3NlKHplcm9fZmQpOwomIzQzOwkJCWNsb3NlKHNlbGYtJmd0O2d1cF9mZCk7CiYjNDM7CQkJU0tJUChyZXR1cm4sICYjMzQ7Tm90IGVub3VnaCBodWdlIHBhZ2VzXG4mIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQltbWFwX2ZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDtzaGFyZWQpCiYjNDM7CQltbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgJmFtcDsgfk1BUF9QUklWQVRFKSB8IE1BUF9TSEFSRUQ7CiYjNDM7CiYjNDM7CXNlbGYtJmd0O2FkZHIgPSBtbWFwKE5VTEwsIHNlbGYtJmd0O3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkJICBtbWFwX2ZsYWdzLCB6ZXJvX2ZkLCAwKTsKJiM0MzsKJiM0MzsJY2xvc2UoemVyb19mZCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9ORShzZWxmLSZndDthZGRyLCBNQVBfRkFJTEVEKSB7CiYjNDM7CQlpbnQgZXJyID0gZXJybm87CiYjNDM7CiYjNDM7CQljbG9zZShzZWxmLSZndDtndXBfZmQpOwomIzQzOwkJaWYgKHZhcmlhbnQtJmd0O2h1Z2V0bGIpCiYjNDM7CQkJaHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7CiYjNDM7CQlUSF9MT0coJiMzNDttbWFwIGZhaWxlZDogJXMmIzM0Oywgc3RyZXJyb3IoZXJyKSk7CiAJfQotCXJldHVybiAmIzM0O1Vua25vd24gY29tbWFuZCYjMzQ7OwomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7dGhwKQomIzQzOwkJbWFkdmlzZShzZWxmLSZndDthZGRyLCBzZWxmLSZndDtzaXplLCBNQURWX0hVR0VQQUdFKTsKJiM0MzsJZWxzZQomIzQzOwkJbWFkdmlzZShzZWxmLSZndDthZGRyLCBzZWxmLSZndDtzaXplLCBNQURWX05PSFVHRVBBR0UpOwomIzQzOwomIzQzOwlmb3IgKHAgPSBzZWxmLSZndDthZGRyOyAodW5zaWduZWQgbG9uZylwICZsdDsgKHVuc2lnbmVkIGxvbmcpc2VsZi0mZ3Q7YWRkcgomIzQzOwkJCSYjNDM7IHNlbGYtJmd0O3NpemU7IHAgJiM0Mzs9IHBzaXplKCkpCiYjNDM7CQlwWzBdID0gMDsKIH0KIAotdm9pZCAqZ3VwX3RocmVhZCh2b2lkICpkYXRhKQomIzQzO0ZJWFRVUkVfVEVBUkRPV04oZ3VwX3Rlc3QpCiB7Ci0Jc3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTsKLQlpbnQgaSwgc3RhdHVzOwotCi0JLyogT25seSByZXBvcnQgdGltaW5nIGluZm9ybWF0aW9uIG9uIHRoZSAqX0JFTkNITUFSSyBjb21tYW5kczogKi8KLQlpZiAoKGNtZCA9PSBQSU5fRkFTVF9CRU5DSE1BUkspIHx8IChjbWQgPT0gR1VQX0ZBU1RfQkVOQ0hNQVJLKSB8fAotCSAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkgewotCQlmb3IgKGkgPSAwOyBpICZsdDsgcmVwZWF0czsgaSYjNDM7JiM0MzspIHsKLQkJCWd1cC5zaXplID0gc2l6ZTsKLQkJCXN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCAmYW1wO2d1cCk7Ci0JCQlpZiAoc3RhdHVzKQotCQkJCWJyZWFrOwotCi0JCQlwdGhyZWFkX211dGV4X2xvY2soJmFtcDtwcmludF9tdXRleCk7Ci0JCQlrc2Z0X3ByaW50X21zZygmIzM0OyVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1cyYjMzQ7LAotCQkJCSAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYywKLQkJCQkgICAgICAgZ3VwLnB1dF9kZWx0YV91c2VjKTsKLQkJCWlmIChndXAuc2l6ZSAhPSBzaXplKQotCQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7LCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpJiMzNDssIGd1cC5zaXplKTsKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7XG4mIzM0Oyk7Ci0JCQlwdGhyZWFkX211dGV4X3VubG9jaygmYW1wO3ByaW50X211dGV4KTsKLQkJfQotCX0gZWxzZSB7Ci0JCWd1cC5zaXplID0gc2l6ZTsKLQkJc3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsICZhbXA7Z3VwKTsKLQkJaWYgKHN0YXR1cykKLQkJCWdvdG8gcmV0dXJuXzsKLQotCQlwdGhyZWFkX211dGV4X2xvY2soJmFtcDtwcmludF9tdXRleCk7Ci0JCWtzZnRfcHJpbnRfbXNnKCYjMzQ7JXM6IGRvbmVcbiYjMzQ7LCBjbWRfdG9fc3RyKGNtZCkpOwotCQlpZiAoZ3VwLnNpemUgIT0gc2l6ZSkKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7VHJ1bmNhdGVkIChzaXplOiAlbGxkKVxuJiMzNDssIGd1cC5zaXplKTsKLQkJcHRocmVhZF9tdXRleF91bmxvY2soJmFtcDtwcmludF9tdXRleCk7CiYjNDM7CW11bm1hcChzZWxmLSZndDthZGRyLCBzZWxmLSZndDtzaXplKTsKJiM0MzsJY2xvc2Uoc2VsZi0mZ3Q7Z3VwX2ZkKTsKJiM0MzsKJiM0MzsJaWYgKHZhcmlhbnQtJmd0O2h1Z2V0bGIpCiYjNDM7CQlodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlcykKJiM0Mzt7CiYjNDM7CS8qIFRlc3RzIHRoZSBnZXRfdXNlcl9wYWdlcyBwYXRoICovCiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9OwomIzQzOwomIzQzOwkJZ3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLSZndDthZGRyOwomIzQzOwkJZ3VwLnNpemUgPSBzZWxmLSZndDtzaXplOwomIzQzOwkJZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSAmbHQ7IDAgPwomIzQzOwkJCXNlbGYtJmd0O3NpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTsKJiM0MzsKJiM0MzsJCWlmICh2YXJpYW50LSZndDt3cml0ZSkKJiM0MzsJCQlndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7CiYjNDM7CiYjNDM7CQlUSF9MT0coJiMzNDtucl9wYWdlc19wZXJfY2FsbD0ldSYjMzQ7LCBndXAubnJfcGFnZXNfcGVyX2NhbGwpOwomIzQzOwkJQVNTRVJUX0VRKGlvY3RsKHNlbGYtJmd0O2d1cF9mZCwgR1VQX0JBU0lDX1RFU1QsICZhbXA7Z3VwKSwgMCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlcykKJiM0Mzt7CiYjNDM7CS8qIFRlc3RzIHRoZSBwaW5fdXNlcl9wYWdlcyBwYXRoICovCiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9OwomIzQzOwomIzQzOwkJZ3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLSZndDthZGRyOwomIzQzOwkJZ3VwLnNpemUgPSBzZWxmLSZndDtzaXplOwomIzQzOwkJZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSAmbHQ7IDAgPwomIzQzOwkJCXNlbGYtJmd0O3NpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTsKJiM0MzsKJiM0MzsJCWlmICh2YXJpYW50LSZndDt3cml0ZSkKJiM0MzsJCQlndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7CiYjNDM7CiYjNDM7CQlUSF9MT0coJiMzNDtucl9wYWdlc19wZXJfY2FsbD0ldSYjMzQ7LCBndXAubnJfcGFnZXNfcGVyX2NhbGwpOwomIzQzOwkJQVNTRVJUX0VRKGlvY3RsKHNlbGYtJmd0O2d1cF9mZCwgUElOX0JBU0lDX1RFU1QsICZhbXA7Z3VwKSwgMCk7CiAJfQomIzQzO30KIAotcmV0dXJuXzoKLQlrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsICYjMzQ7aW9jdGwgc3RhdHVzICVkXG4mIzM0Oywgc3RhdHVzKTsKLQlyZXR1cm4gTlVMTDsKJiM0MztURVNUX0YoZ3VwX3Rlc3QsIGR1bXBfdXNlcl9wYWdlc193aXRoX2dldCkKJiM0Mzt7CiYjNDM7CS8qIFRlc3RzIERVTVBfVVNFUl9QQUdFU19URVNUIHVzaW5nIGdldF91c2VyX3BhZ2VzICovCiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9OwomIzQzOwomIzQzOwkJZ3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLSZndDthZGRyOwomIzQzOwkJZ3VwLnNpemUgPSBzZWxmLSZndDtzaXplOwomIzQzOwkJZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSAmbHQ7IDAgPwomIzQzOwkJCXNlbGYtJmd0O3NpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTsKJiM0MzsKJiM0MzsJCWlmICh2YXJpYW50LSZndDt3cml0ZSkKJiM0MzsJCQlndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7CiYjNDM7CiYjNDM7CQlndXAud2hpY2hfcGFnZXNbMF0gPSAxOwomIzQzOwomIzQzOwkJVEhfTE9HKCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXUmIzM0OywgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTsKJiM0MzsJCUFTU0VSVF9FUShpb2N0bChzZWxmLSZndDtndXBfZmQsIERVTVBfVVNFUl9QQUdFU19URVNULCAmYW1wO2d1cCksIDApOwomIzQzOwl9CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0MztURVNUX0YoZ3VwX3Rlc3QsIGR1bXBfdXNlcl9wYWdlc193aXRoX3BpbikKIHsKLQlzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07Ci0JaW50IGZpbGVkLCBpLCBvcHQsIG5yX3BhZ2VzID0gMSwgdGhwID0gLTEsIHdyaXRlID0gMSwgbnRocmVhZHMgPSAxLCByZXQ7Ci0JaW50IGZsYWdzID0gTUFQX1BSSVZBVEU7Ci0JY2hhciAqZmlsZSA9ICYjMzQ7L2Rldi96ZXJvJiMzNDs7Ci0JYm9vbCBodWdldGxiID0gZmFsc2U7Ci0JcHRocmVhZF90ICp0aWQ7Ci0JY2hhciAqcDsKJiM0MzsJLyogVGVzdHMgRFVNUF9VU0VSX1BBR0VTX1RFU1QgdXNpbmcgcGluX3VzZXJfcGFnZXMgKi8KJiM0MzsJaW50IGk7CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O206cjpuOkY6ZjphYmNqOnRUTFV1d1dTSHB6JiMzNDspKSAhPSAtMSkgewotCQlzd2l0Y2ggKG9wdCkgewotCQljYXNlICYjMzk7YSYjMzk7OgotCQkJY21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTtiJiMzOTs6Ci0JCQljbWQgPSBQSU5fQkFTSUNfVEVTVDsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7TCYjMzk7OgotCQkJY21kID0gUElOX0xPTkdURVJNX0JFTkNITUFSSzsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7YyYjMzk7OgotCQkJY21kID0gRFVNUF9VU0VSX1BBR0VTX1RFU1Q7Ci0JCQkvKgotCQkJICogRHVtcCBwYWdlIDAgKGluZGV4IDEpLiBNYXkgYmUgb3ZlcnJpZGRlbiBsYXRlciwgYnkKLQkJCSAqIHVzZXImIzM5O3Mgbm9uLW9wdGlvbiBhcmd1bWVudHMuCi0JCQkgKgotCQkJICogLndoaWNoX3BhZ2VzIGlzIHplcm8tYmFzZWQsIHNvIHRoYXQgemVybyBjYW4gbWVhbiAmIzM0O2RvCi0JCQkgKiBub3RoaW5nJiMzNDsuCi0JCQkgKi8KLQkJCWd1cC53aGljaF9wYWdlc1swXSA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O3AmIzM5OzoKLQkJCS8qIHdvcmtzIG9ubHkgd2l0aCBEVU1QX1VTRVJfUEFHRVNfVEVTVCAqLwotCQkJZ3VwLnRlc3RfZmxhZ3MgfD0gR1VQX1RFU1RfRkxBR19EVU1QX1BBR0VTX1VTRV9QSU47Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O0YmIzM5OzoKLQkJCS8qIHN0cnRvbCwgc28geW91IGNhbiBwYXNzIGZsYWdzIGluIGhleCBmb3JtICovCi0JCQlndXAuZ3VwX2ZsYWdzID0gc3RydG9sKG9wdGFyZywgMCwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O2omIzM5OzoKLQkJCW50aHJlYWRzID0gYXRvaShvcHRhcmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTttJiMzOTs6Ci0JCQlzaXplID0gYXRvaShvcHRhcmcpICogTUI7Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O3ImIzM5OzoKLQkJCXJlcGVhdHMgPSBhdG9pKG9wdGFyZyk7Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O24mIzM5OzoKLQkJCW5yX3BhZ2VzID0gYXRvaShvcHRhcmcpOwotCQkJaWYgKG5yX3BhZ2VzICZsdDsgMCkKLQkJCQlucl9wYWdlcyA9IHNpemUgLyBwc2l6ZSgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTt0JiMzOTs6Ci0JCQl0aHAgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTtUJiMzOTs6Ci0JCQl0aHAgPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTtVJiMzOTs6Ci0JCQljbWQgPSBHVVBfQkFTSUNfVEVTVDsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7dSYjMzk7OgotCQkJY21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTt3JiMzOTs6Ci0JCQl3cml0ZSA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O1cmIzM5OzoKLQkJCXdyaXRlID0gMDsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7ZiYjMzk7OgotCQkJZmlsZSA9IG9wdGFyZzsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7UyYjMzk7OgotCQkJZmxhZ3MgJmFtcDs9IH5NQVBfUFJJVkFURTsKLQkJCWZsYWdzIHw9IE1BUF9TSEFSRUQ7Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O0gmIzM5OzoKLQkJCWZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpOwotCQkJaHVnZXRsYiA9IHRydWU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O1dyb25nIGFyZ3VtZW50XG4mIzM0Oyk7Ci0JCX0KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTsKJiM0MzsKJiM0MzsJCWd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi0mZ3Q7YWRkcjsKJiM0MzsJCWd1cC5zaXplID0gc2VsZi0mZ3Q7c2l6ZTsKJiM0MzsJCWd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gJmx0OyAwID8KJiM0MzsJCQlzZWxmLSZndDtzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07CiYjNDM7CiYjNDM7CQlpZiAodmFyaWFudC0mZ3Q7d3JpdGUpCiYjNDM7CQkJZ3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFOwomIzQzOwomIzQzOwkJZ3VwLndoaWNoX3BhZ2VzWzBdID0gMTsKJiM0MzsJCWd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOOwomIzQzOwomIzQzOwkJVEhfTE9HKCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXUmIzM0OywgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTsKJiM0MzsJCUFTU0VSVF9FUShpb2N0bChzZWxmLSZndDtndXBfZmQsIERVTVBfVVNFUl9QQUdFU19URVNULCAmYW1wO2d1cCksIDApOwogCX0KJiM0Mzt9CiAKLQlpZiAob3B0aW5kICZsdDsgYXJnYykgewotCQlpbnQgZXh0cmFfYXJnX2NvdW50ID0gMDsKLQkJLyoKLQkJICogRm9yIGV4YW1wbGU6Ci0JCSAqCi0JCSAqICAgLi9ndXBfdGVzdCAtYyAwIDEgMHgxMDAxCi0JCSAqCi0JCSAqIC4uLnRvIGR1bXAgcGFnZXMgMCwgMSwgYW5kIDQwOTcKLQkJICovCi0KLQkJd2hpbGUgKChvcHRpbmQgJmx0OyBhcmdjKSAmYW1wOyZhbXA7Ci0JCSAgICAgICAoZXh0cmFfYXJnX2NvdW50ICZsdDsgR1VQX1RFU1RfTUFYX1BBR0VTX1RPX0RVTVApKSB7Ci0JCQkvKgotCQkJICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW4KLQkJCSAqIHVzZSBub3JtYWwgMC1iYXNlZCBpbmRleGluZyBvbiB0aGUgY29tbWFuZCBsaW5lLgotCQkJICovCi0JCQlsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSAmIzQzOyAxOwotCi0JCQlndXAud2hpY2hfcGFnZXNbZXh0cmFfYXJnX2NvdW50XSA9IHBhZ2VfaW5kZXg7Ci0JCQlleHRyYV9hcmdfY291bnQmIzQzOyYjNDM7OwotCQkJb3B0aW5kJiM0MzsmIzQzOzsKLQkJfQomIzQzO1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdCkKJiM0Mzt7CiYjNDM7CS8qIFRlc3RzIHRoZSBsb2NrbGVzcyBnZXRfdXNlcl9wYWdlc19mYXN0KCkgcGF0aCAqLwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTsKJiM0MzsKJiM0MzsJCWd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi0mZ3Q7YWRkcjsKJiM0MzsJCWd1cC5zaXplID0gc2VsZi0mZ3Q7c2l6ZTsKJiM0MzsJCWd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gJmx0OyAwID8KJiM0MzsJCQlzZWxmLSZndDtzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07CiYjNDM7CiYjNDM7CQlpZiAodmFyaWFudC0mZ3Q7d3JpdGUpCiYjNDM7CQkJZ3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFOwomIzQzOwomIzQzOwkJVEhfTE9HKCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXUmIzM0OywgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTsKJiM0MzsJCUFTU0VSVF9FUShpb2N0bChzZWxmLSZndDtndXBfZmQsIEdVUF9GQVNUX0JFTkNITUFSSywgJmFtcDtndXApLCAwKTsKIAl9CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfZmFzdCkKJiM0Mzt7CiYjNDM7CS8qIFRlc3RzIHRoZSBsb2NrbGVzcyBwaW5fdXNlcl9wYWdlc19mYXN0KCkgcGF0aCAqLwomIzQzOwlpbnQgaTsKIAotCWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07CiAKLQlpZiAoaHVnZXRsYikgewotCQl1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7CiYjNDM7CQlndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtJmd0O2FkZHI7CiYjNDM7CQlndXAuc2l6ZSA9IHNlbGYtJmd0O3NpemU7CiYjNDM7CQlndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldICZsdDsgMCA/CiYjNDM7CQkJc2VsZi0mZ3Q7c2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldOwogCi0JCWlmICghaHBfc2l6ZSkKLQkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7SHVnZVRMQiBpcyB1bmF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwkJaWYgKHZhcmlhbnQtJmd0O3dyaXRlKQomIzQzOwkJCWd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTsKIAotCQlzaXplID0gKHNpemUgJiM0MzsgaHBfc2l6ZSAtIDEpICZhbXA7IH4oaHBfc2l6ZSAtIDEpOwotCQlpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpCi0JCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xuJiMzNDspOwomIzQzOwkJVEhfTE9HKCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXUmIzM0OywgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTsKJiM0MzsJCUFTU0VSVF9FUShpb2N0bChzZWxmLSZndDtndXBfZmQsIFBJTl9GQVNUX0JFTkNITUFSSywgJmFtcDtndXApLCAwKTsKIAl9CiYjNDM7fQogCi0Ja3NmdF9zZXRfcGxhbihudGhyZWFkcyk7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19sb25ndGVybSkKJiM0Mzt7CiYjNDM7CS8qIFRlc3RzIHBpbl91c2VyX3BhZ2VzKCkgd2l0aCBGT0xMX0xPTkdURVJNICovCiYjNDM7CWludCBpOwogCi0JZmlsZWQgPSBvcGVuKGZpbGUsIE9fUkRXUnxPX0NSRUFULCAwNjY0KTsKLQlpZiAoZmlsZWQgJmx0OyAwKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBmaWxlLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9OwogCi0JZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXM7Ci0JaWYgKHdyaXRlKQotCQlndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7CiYjNDM7CQlndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtJmd0O2FkZHI7CiYjNDM7CQlndXAuc2l6ZSA9IHNlbGYtJmd0O3NpemU7CiYjNDM7CQlndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldICZsdDsgMCA/CiYjNDM7CQkJc2VsZi0mZ3Q7c2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldOwogCi0JZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwotCWlmIChndXBfZmQgPT0gLTEpIHsKLQkJc3dpdGNoIChlcnJubykgewotCQljYXNlIEVBQ0NFUzoKLQkJCWlmIChnZXR1aWQoKSkKLQkJCQlrc2Z0X3ByaW50X21zZygmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcbiYjMzQ7KTsKLQkJCWJyZWFrOwotCQljYXNlIEVOT0VOVDoKLQkJCWlmIChvcGVuZGlyKCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcmIzM0OykgPT0gTlVMTCkKLQkJCQlrc2Z0X3ByaW50X21zZygmIzM0O21vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcbiYjMzQ7KTsKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xuJiMzNDspOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlrc2Z0X3ByaW50X21zZygmIzM0O2ZhaWxlZCB0byBvcGVuICVzOiAlc1xuJiMzNDssIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7Ci0JCQlicmVhazsKLQkJfQotCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XG4mIzM0Oyk7Ci0JCWtzZnRfZXhpdF9wYXNzKCk7CiYjNDM7CQlpZiAodmFyaWFudC0mZ3Q7d3JpdGUpCiYjNDM7CQkJZ3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFOwomIzQzOwomIzQzOwkJVEhfTE9HKCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXUmIzM0OywgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTsKJiM0MzsJCUFTU0VSVF9FUShpb2N0bChzZWxmLSZndDtndXBfZmQsIFBJTl9MT05HVEVSTV9CRU5DSE1BUkssICZhbXA7Z3VwKSwgMCk7CiAJfQomIzQzO30KJiM0MzsKJiM0MztURVNUKGR1bXBfdXNlcl9wYWdlc19zcGFyc2VfaW5kaWNlcykKJiM0Mzt7CiYjNDM7CS8qIFRlc3RzIHNwYXJzZSBtdWx0aS1pbmRleCB3aGljaF9wYWdlc1tdIGlucHV0cy4gKi8KJiM0MzsJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9OwomIzQzOwl1bnNpZ25lZCBsb25nIHNpemUgPSAxMjggKiBNQjsKJiM0MzsJaW50IHplcm9fZmQsIGd1cF9mZDsKJiM0MzsJY2hhciAqYWRkciwgKnA7CiYjNDM7CiYjNDM7CXplcm9fZmQgPSBvcGVuKCYjMzQ7L2Rldi96ZXJvJiMzNDssIE9fUkRXUik7CiYjNDM7CUFTU0VSVF9HRSh6ZXJvX2ZkLCAwKTsKIAotCXAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCBmaWxlZCwgMCk7Ci0JaWYgKHAgPT0gTUFQX0ZBSUxFRCkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7bW1hcDogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwotCWd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDsKJiM0MzsJZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwomIzQzOwlBU1NFUlRfR0UoZ3VwX2ZkLCAwKTsKJiM0MzsKJiM0MzsJYWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIHplcm9fZmQsIDApOwomIzQzOwljbG9zZSh6ZXJvX2ZkKTsKJiM0MzsJQVNTRVJUX05FKGFkZHIsIE1BUF9GQUlMRUQpOwogCi0JaWYgKHRocCA9PSAxKQotCQltYWR2aXNlKHAsIHNpemUsIE1BRFZfSFVHRVBBR0UpOwotCWVsc2UgaWYgKHRocCA9PSAwKQotCQltYWR2aXNlKHAsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSk7CiYjNDM7CW1hZHZpc2UoYWRkciwgc2l6ZSwgTUFEVl9IVUdFUEFHRSk7CiAKLQkvKiBGYXVsdCB0aGVtIGluIGhlcmUsIGZyb20gdXNlciBzcGFjZS4gKi8KLQlmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCAmbHQ7IGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IHBzaXplKCkpCiYjNDM7CWZvciAocCA9IGFkZHI7ICh1bnNpZ25lZCBsb25nKXAgJmx0OyAodW5zaWduZWQgbG9uZylhZGRyICYjNDM7IHNpemU7CiYjNDM7CSAgICAgcCAmIzQzOz0gcHNpemUoKSkKIAkJcFswXSA9IDA7CiAKLQl0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7Ci0JYXNzZXJ0KHRpZCk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IG50aHJlYWRzOyBpJiM0MzsmIzQzOykgewotCQlyZXQgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3RpZFtpXSwgTlVMTCwgZ3VwX3RocmVhZCwgJmFtcDtndXApOwotCQlhc3NlcnQocmV0ID09IDApOwotCX0KLQlmb3IgKGkgPSAwOyBpICZsdDsgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7Ci0JCXJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpOwotCQlhc3NlcnQocmV0ID09IDApOwomIzQzOwlndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CiYjNDM7CWd1cC5zaXplID0gc2l6ZTsKJiM0MzsJZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gc2l6ZSAvIHBzaXplKCk7CiYjNDM7CWd1cC5ndXBfZmxhZ3MgPSBGT0xMX1dSSVRFOwomIzQzOwlndXAud2hpY2hfcGFnZXNbMF0gPSAxOwomIzQzOwlndXAud2hpY2hfcGFnZXNbMV0gPSAyMDsKJiM0MzsJZ3VwLndoaWNoX3BhZ2VzWzJdID0gMHgxMDAxOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcmVzZXJ2ZSB0aGUgb2xkICYjMzQ7Li9ndXBfdGVzdCAtY3QgLUYgMHgxIDAgMTkgMHgxMDAwJiMzNDsgc3BhcnNlIGR1bXAKJiM0MzsJICogY292ZXJhZ2UgYWZ0ZXIgcmVtb3ZpbmcgY29tbWFuZC1saW5lIHBhcnNpbmcgZnJvbSB0aGlzIGJpbmFyeS4KJiM0MzsJICovCiYjNDM7CUFTU0VSVF9FUShpb2N0bChndXBfZmQsIERVTVBfVVNFUl9QQUdFU19URVNULCAmYW1wO2d1cCksIDApOwomIzQzOwomIzQzOwltdW5tYXAoYWRkciwgc2l6ZSk7CiYjNDM7CWNsb3NlKGd1cF9mZCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJY2hhciAqZmlsZSA9ICYjMzQ7L2Rldi96ZXJvJiMzNDs7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihmaWxlLCBPX1JEV1IpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKIAl9CiYjNDM7CWNsb3NlKGZkKTsKIAotCWZyZWUodGlkKTsKJiM0MzsJZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7CiYjNDM7CWlmIChmZCA9PSAtMSkgewomIzQzOwkJa3NmdF9wcmludF9oZWFkZXIoKTsKJiM0MzsJCWlmIChlcnJubyA9PSBFQUNDRVMpCiYjNDM7CQkJa3NmdF9leGl0X3NraXAoJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XG4mIzM0Oyk7CiYjNDM7CQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CiYjNDM7CQkJRElSICpkZWJ1Z2ZzID0gb3BlbmRpcigmIzM0Oy9zeXMva2VybmVsL2RlYnVnJiMzNDspOwomIzQzOwomIzQzOwkJCWlmICghZGVidWdmcykgewomIzQzOwkJCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O01vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcbiYjMzQ7KTsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQljbG9zZWRpcihkZWJ1Z2ZzKTsKJiM0MzsJCQkJa3NmdF9leGl0X3NraXAoJiMzNDtDaGVjayBDT05GSUdfR1VQX1RFU1QgaW4ga2VybmVsIGNvbmZpZ1xuJiMzNDspOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJfQomIzQzOwljbG9zZShmZCk7CiAKLQlrc2Z0X2V4aXRfcGFzcygpOwomIzQzOwlyZXR1cm4gdGVzdF9oYXJuZXNzX3J1bihhcmdjLCBhcmd2KTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKaW5kZXggMmYyYjk4NzlkMTAwNTEuLmUxYmIwMzEwMTlmMmFjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYwpAQCAtMTAsOSAmIzQzOzEwLDYgQEAKICAqIGJ1Z3MuCiAgKi8KIAotI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7Ci0KICNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwogI2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKQEAgLTI5LDYgJiM0MzsyNiw5IEBACiAjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKICNpbmNsdWRlICZsdDtzeXMvaW9jdGwuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdGltZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDttbS9odWdlcGFnZV9zZXR0aW5ncy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiAKIC8qCiAgKiBUaGlzIGlzIGEgcHJpdmF0ZSBVQVBJIHRvIHRoZSBrZXJuZWwgdGVzdCBtb2R1bGUgc28gaXQgaXNuJiMzOTt0IGV4cG9ydGVkCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jCmluZGV4IDU1NWI0YjNkMTQzMDdlLi41N2NmNzkwY2E0NzhkNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKQEAgLTE0LDcgJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBNSU5fRlJFRV9QQUdFUwkyMAogI2RlZmluZSBOUl9IVUdFX1BBR0VTCTEwCS8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCmluZGV4IDBmMmFhZDFiN2RiZDZmLi5hNDU4YmVjZjU4MzI3ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMKQEAgLTE4LDcgJiM0MzsxOCw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtZmQuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNCkKICNkZWZpbmUgUFJPVEVDVElPTiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jCmluZGV4IGVkM2Q5MmU4NjJkODc2Li45YjcyNGFmNjZlOTM4OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jCkBAIC0yNiw3ICYjNDM7MjYsNiBAQAogI2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBERUZBVUxUX0xFTkdUSF9NQiAxMFVMCiAjZGVmaW5lIE1CX1RPX0JZVEVTKHgpICh4ICogMTAyNCAqIDEwMjQpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uYwppbmRleCAzZmY3ZjA2MmI3ZWI0NS4uZjQ1MTRkYTQ5ZTFkZjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYwppbmRleCBiYzIwMmU0ZWQyYmRhNy4uMjA4NjRlN2Q0ZTBjNzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYwpAQCAtMjEsOSAmIzQzOzIxLDkgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zdGF0ZnMuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjaWZuZGVmIE1BRFZfU09GVF9PRkZMSU5FCiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi12bWVtbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXZtZW1tYXAuYwppbmRleCA1MDdkZjc4YTE1OGQ4ZC4uYzQ2YTY1NmMyNWEwNGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItdm1lbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItdm1lbW1hcC5jCkBAIC0xMSw3ICYjNDM7MTEsNiBAQAogI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgUEFHRV9DT01QT1VORF9IRUFECSgxVUwgJmx0OyZsdDsgMTUpCiAjZGVmaW5lIFBBR0VfQ09NUE9VTkRfVEFJTAkoMVVMICZsdDsmbHQ7IDE2KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMKaW5kZXggZmI0NjAwNTcwZTEzMTkuLjk0OTU5NzRlY2NiZWE1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMKQEAgLTIwLDcgJiM0MzsyMCw2IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2lmbmRlZiBTVEFUWF9ESU9BTElHTgogI2RlZmluZSBTVEFUWF9ESU9BTElHTgkJMHgwMDAwMjAwMFUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmMKaW5kZXggMmRjMTU4MDU0ZjY2NmIuLjU2YzVhODUzM2U5ZDkwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwpAQCAtMTAsNyAmIzQzOzEwLDYgQEAKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMAogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMKaW5kZXggZjk0NTQ5ZWZjYzZmZjMuLjI1MzJhNDJiOThkZmYxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jCkBAIC0yNSw3ICYjNDM7MjUsNiBAQAogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMAogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKaW5kZXggMTBlOGRlZGNiMDg3ZGMuLjIzODI5NzNiMmY1NTJjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCkBAIC0yMiw3ICYjNDM7MjIsNiBAQAogI2luY2x1ZGUgJiMzNDtsaW51eC9tYWdpYy5oJiMzNDsKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCAmbHQ7Jmx0OyAzMCkpCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBocGFnZV9wbWRfc2l6ZTsKQEAgLTExOSw2ICYjNDM7MTE4LDcgQEAgc3RhdGljIHZvaWQgZ2V0X2ZpbmZvKGNvbnN0IGNoYXIgKmRpcikKIAljaGFyIGJ1ZlsxICZsdDsmbHQ7IDEwXTsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwogCWNoYXIgKnN0ciwgKmVuZDsKJiM0MzsJaW50IHJldDsKIAogCWZpbmZvLmRpciA9IGRpcjsKIAlzdGF0KGZpbmZvLmRpciwgJmFtcDtwYXRoX3N0YXQpOwpAQCAtMTM4LDggJiM0MzsxMzgsOSBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKQogCQkgICAgIG1ham9yKHBhdGhfc3RhdC5zdF9kZXYpLCBtaW5vcihwYXRoX3N0YXQuc3RfZGV2KSkKIAkgICAgJmd0Oz0gc2l6ZW9mKHBhdGgpKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcbiYjMzQ7LCBfX2Z1bmNfXyk7Ci0JaWYgKHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSAmbHQ7IDApCi0JCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3JlYWRfZmlsZShyZWFkX251bSkmIzM0Oyk7CiYjNDM7CXJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbCgpOwogCWlmIChzdHJzdHIoYnVmLCAmIzM0O0RFVlRZUEU9ZGlzayYjMzQ7KSkgewogCQkvKiBGb3VuZCBpdCAqLwogCQlpZiAoc25wcmludGYoZmluZm8uZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwKQEAgLTMxOSw3ICYjNDM7MzIwLDcgQEAgc3RhdGljIHZvaWQgKmZpbGVfc2V0dXBfYXJlYV9jb21tb24oaW50IG5yX2hwYWdlcywgZW51bSBmaWxlX3NldHVwX29wcyBzZXR1cCkKIHsKIAljb25zdCBpbnQgb3Blbl9vcHQgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IE9fUkRPTkxZIDogT19SRFdSOwogCWNvbnN0IGludCBtbWFwX3Byb3QgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IFBST1RfUkVBRCA6IChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLQlpbnQgZmQ7CiYjNDM7CWludCBmZCwgcmV0OwogCXZvaWQgKnA7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCkBAIC0zNjMsNyAmIzQzOzM2NCwxMCBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKQogCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDttbWFwKCkmIzM0Oyk7CiAKIAkvKiBEcm9wIHBhZ2UgY2FjaGUgKi8KLQl3cml0ZV9maWxlKCYjMzQ7L3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzJiMzNDssICYjMzQ7MyYjMzQ7LCAyKTsKJiM0MzsJcmV0ID0gd3JpdGVfZmlsZSgmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcyYjMzQ7LCAmIzM0OzMmIzM0OywgMik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbCgpOwomIzQzOwogCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAlyZXR1cm4gcDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKaW5kZXggYTA1MGY0ODQwY2ZhM2EuLmNjMzc0OTJjZjMyYzNkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYwpAQCAtMTUsNyAmIzQzOzE1LDYgQEAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJmx0O2luY2x1ZGUvdmRzby90aW1lNjQuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgS1NNX1NZU0ZTX1BBVEggJiMzNDsvc3lzL2tlcm5lbC9tbS9rc20vJiMzNDsKICNkZWZpbmUgS1NNX0ZQKHMpIChLU01fU1lTRlNfUEFUSCBzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwppbmRleCAyOWY3NDkyNDUzZDQzOS4uNGZlOTdjMDMzMjYxMjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jCkBAIC00LDkgJiM0Mzs0LDYgQEAKICAqIHBhdGhzIGluIHRoZSBrZXJuZWwuCiAgKi8KIAotI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7Ci0KICNpbmNsdWRlICZsdDtzdHJpbmdzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwogI2luY2x1ZGUgJmx0O251bWEuaCZndDsKQEAgLTE2LDYgJiM0MzsxMyw4IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAKICNkZWZpbmUgVFdPTUVHCQkoMiZsdDsmbHQ7MjApCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKaW5kZXggNmY4OTcxZDViM2NlNDMuLjgwNDM3MjgwMzA4MGNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCkBAIC0yMyw3ICYjNDM7MjMsNiBAQAogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgUEFHRU1BUF9CSVRTX0FMTAkJKFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHwJXAogCQkJCQkgUEFHRV9JU19GSUxFIHwgUEFHRV9JU19QUkVTRU5UIHwJXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKaW5kZXggZDhkOWQxZGU1N2I4YjAuLmE0Zjg0NTE3OTFjYmRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKQEAgLTE0LDcgJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAKICNpZm5kZWYgUFJfVEhQX0RJU0FCTEVfRVhDRVBUX0FEVklTRUQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMKaW5kZXggOWE2ZDk1NGVlMzcxMjYuLjViYTIwMzNlOGEwOWNkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwpAQCAtNDUsOCAmIzQzOzQ1LDggQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvcHRyYWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c2V0am1wLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3BrZXktaGVscGVycy5oJiMzNDsKIAogaW50IGl0ZXJhdGlvbl9uciA9IDE7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCmluZGV4IDhjMjk2ZGVkZjA0NzRkLi41NmRmMGRjYzk2NDBjMCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKQEAgLTEzMCwzMCAmIzQzOzEzMCw2IEBAIHRlc3Rfc2VsZWN0ZWQoKSB7CiAJZmkKIH0KIAotcnVuX2d1cF9tYXRyaXgoKSB7Ci0gICAgIyAtdDogdGhwPW9uLCAtVDogdGhwPW9mZiwgLUg6IGh1Z2V0bGI9b24KLSAgICBsb2NhbCBodWdldGxiX21iPTI1NgotCi0gICAgZm9yIGh1Z2UgaW4gLXQgLVQgJiMzNDstSCAtbSAkaHVnZXRsYl9tYiYjMzQ7OyBkbwotICAgICAgICAjIC11OiBndXAtZmFzdCwgLVU6IGd1cC1iYXNpYywgLWE6IHBpbi1mYXN0LCAtYjogcGluLWJhc2ljLCAtTDogcGluLWxvbmd0ZXJtCi0gICAgICAgIGZvciB0ZXN0X2NtZCBpbiAtdSAtVSAtYSAtYiAtTDsgZG8KLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wCi0gICAgICAgICAgICBmb3Igd3JpdGUgaW4gLXcgLVc7IGRvCi0gICAgICAgICAgICAgICAgIyAtUzogc2hhcmVkCi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TICYjMzQ7ICYjMzQ7OyBkbwotICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsCi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCYjMzk7cyBkZWZhdWx0IHRocCBzaXplIChvciAyTSBvbiB4ODYpLCAxMjMgdG8KLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm0KLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiAmIzM0Oy1uIDEmIzM0OyAmIzM0Oy1uIDUxMiYjMzQ7ICYjMzQ7LW4gMTIzJiMzNDsgJiMzNDstbiAtMSYjMzQ7OyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHVnZSAkdGVzdF9jbWQgJHdyaXRlICRzaGFyZSAkbnVtCi0gICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICBkb25lCi0gICAgICAgIGRvbmUKLSAgICBkb25lCi19Ci0KICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXMKIEFSQ0g2NFNUUj0mIzM0O2FybTY0IG1pcHM2NCBwYXJpc2M2NCBwcGM2NCBwcGM2NGxlIHJpc2N2NjQgczM5MHggc3BhcmM2NCB4ODZfNjQmIzM0OwogaWYgWyAteiAmIzM0OyRBUkNIJiMzNDsgXTsgdGhlbgpAQCAtMjc2LDE4ICYjNDM7MjUyLDcgQEAgZmkKIAogQ0FURUdPUlk9JiMzNDttbWFwJiMzNDsgcnVuX3Rlc3QgLi9tYXBfZml4ZWRfbm9yZXBsYWNlCiAKLWlmICRSVU5fQUxMOyB0aGVuCi0gICAgcnVuX2d1cF9tYXRyaXgKLWVsc2UKLSAgICAjIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmsKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAxCi0gICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gLTEKLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmsKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAxCi0gICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gLTEKLWZpCi0jIER1bXAgcGFnZXMgMCwgMTksIGFuZCA0MDk2LCB1c2luZyBwaW5fdXNlcl9wYWdlczoKLUNBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1jdCAtRiAweDEgMCAxOSAweDEwMDAKJiM0MztDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdAogQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX2xvbmd0ZXJtCiAKIENBVEVHT1JZPSYjMzQ7dXNlcmZhdWx0ZmQmIzM0OyBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0cwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCmluZGV4IGZiMTg2NGE2OGUxYzZiLi42YzIyYWM5ZTkzZGIwNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwpAQCAtOSw3ICYjNDM7OSw2IEBACiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCAmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcCYjMzQ7CiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAwMApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKaW5kZXggMzJiOTkxNDcyZjc0NGYuLmU3NDRjOTQzNGU3ZDA1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKQEAgLTIxLDcgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiB1aW50NjRfdCBwYWdlc2l6ZTsKIHVuc2lnbmVkIGludCBwYWdlc2hpZnQ7CkBAIC0yNjksNyAmIzQzOzI2OCw5IEBAIHN0YXRpYyB2b2lkIHdyaXRlX2RlYnVnZnMoY29uc3QgY2hhciAqZm10LCAuLi4pCiAJaWYgKHJldCAmZ3Q7PSBJTlBVVF9NQVgpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0OyVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXG4mIzM0OywgX19mdW5jX18pOwogCi0Jd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpOwomIzQzOwlyZXQgPSB3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgJiM0MzsgMSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbCgpOwogfQogCiBzdGF0aWMgY2hhciAqYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2Uoc2l6ZV90IGxlbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMKaW5kZXggMjJiOWMyZjFjMzVkMjMuLjBkYTE1ZDUzMGExZmM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uYwpAQCAtMTQsNyAmIzQzOzE0LDYgQEAKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2lmICFkZWZpbmVkKE1BUF9IVUdFVExCKQogI2RlZmluZSBNQVBfSFVHRVRMQgkweDQwMDAwCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMKaW5kZXggOGViMGM1NjMwZTdlMzEuLjk2ZjcyODk4ZWJlMGE1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jCkBAIC0xNyw3ICYjNDM7MTcsNiBAQAogI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIGludCBiYWNraW5nX2ZkID0gLTE7CiBpbnQgbW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEU7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaAppbmRleCA5MmEyMWI5N2Y3NDVhZi4uMDcyMzg0M2E3NjI2YjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaApAQCAtMzcsNyAmIzQzOzM3LDYgQEAKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFVGRkRfRkxBR1MJKE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0sgfCBVRkZEX1VTRVJfTU9ERV9PTkxZKQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYwppbmRleCBjOTczZDY3MjI3MjBjMy4uZWI0YjI0MzNiMDBlNjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYwpAQCAtNyw4ICYjNDM7Nyw4IEBACiAjaW5jbHVkZSAmbHQ7YXNzZXJ0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3VmZmQtY29tbW9uLmgmIzM0OwogCiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMKaW5kZXggZTI0ZDdiYTAwYjQ0MTcuLjVhMzU0YTY2NGQxZjdkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jCkBAIC0xMSw3ICYjNDM7MTEsNiBAQAogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIC8qCiAgKiBUaGUgaGludCBhZGRyIHZhbHVlIGlzIHVzZWQgdG8gYWxsb2NhdGUgYWRkcmVzc2VzCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKaW5kZXggMzExZmM1YjQ1MTNlYjQuLmYyNzZlZWU1NzY4MDRhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCkBAIC02OTgsOTMgJiM0Mzs2OTgsMzkgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKIAlyZXR1cm4gcmV0ICZndDsgMCA/IDAgOiAtZXJybm87CiB9CiAKLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQotewotCWludCBmZDsKLQlzc2l6ZV90IG51bXJlYWQ7Ci0KLQlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOwotCWlmIChmZCA9PSAtMSkKLQkJcmV0dXJuIDA7Ci0KLQludW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTsKLQlpZiAobnVtcmVhZCAmbHQ7IDEpIHsKLQkJY2xvc2UoZmQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlidWZbbnVtcmVhZF0gPSAmIzM5O1wwJiMzOTs7Ci0JY2xvc2UoZmQpOwotCi0JcmV0dXJuICh1bnNpZ25lZCBpbnQpIG51bXJlYWQ7Ci19Ci0KLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCi17Ci0JaW50IGZkLCBzYXZlZF9lcnJubzsKLQlzc2l6ZV90IG51bXdyaXR0ZW47Ci0KLQlpZiAoYnVmbGVuICZsdDsgMikKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7SW5jb3JyZWN0IGJ1ZmZlciBsZW46ICV6dVxuJiMzNDssIGJ1Zmxlbik7Ci0KLQlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpOwotCWlmIChmZCA9PSAtMSkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgb3BlbiBmYWlsZWQ6ICVzXG4mIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKLQotCW51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTsKLQlzYXZlZF9lcnJubyA9IGVycm5vOwotCWNsb3NlKGZkKTsKLQllcnJubyA9IHNhdmVkX2Vycm5vOwotCWlmIChudW13cml0dGVuICZsdDsgMCkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgd3JpdGUoJS4qcykgZmFpbGVkOiAlc1xuJiMzNDssIHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLAotCQkJCWJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKLQlpZiAobnVtd3JpdHRlbiAhPSBidWZsZW4gLSAxKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xuJiMzNDssCi0JCQkJcGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCkKLXsKLQljaGFyIGJ1ZlsyMV07Ci0KLQlpZiAocmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpICZsdDsgMCkKLQkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7cmVhZF9maWxlKCkmIzM0Oyk7Ci0KLQlyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDEwKTsKLX0KLQotdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pCi17Ci0JY2hhciBidWZbMjFdOwotCi0Jc3ByaW50ZihidWYsICYjMzQ7JWx1JiMzNDssIG51bSk7Ci0Jd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEpOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1hbGwsIHNobW1heDsKIAogdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKQogewotCWlmIChzaG1tYXgpCi0JCXdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4JiMzNDssIHNobW1heCk7Ci0JaWYgKHNobWFsbCkKLQkJd3JpdGVfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGwmIzM0Oywgc2htYWxsKTsKJiM0MzsJaWYgKHNobW1heCAmYW1wOyZhbXA7IHdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4JiMzNDssIHNobW1heCkpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbCgpOwomIzQzOwlpZiAoc2htYWxsICZhbXA7JmFtcDsgd3JpdGVfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGwmIzM0Oywgc2htYWxsKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsKCk7CiB9CiAKIHZvaWQgc2htX2xpbWl0c19wcmVwYXJlKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKQogewogCXVuc2lnbmVkIGxvbmcgbnIgPSBsZW5ndGggLyBwc2l6ZSgpOwogCXVuc2lnbmVkIGxvbmcgdmFsOwomIzQzOwlpbnQgcmV0OwogCi0JdmFsID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7KTsKJiM0MzsJcmV0ID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7LCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbCgpOwogCWlmICh2YWwgJmx0OyBsZW5ndGgpIHsKLQkJd3JpdGVfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0OywgbGVuZ3RoKTsKJiM0MzsJCXJldCA9IHdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4JiMzNDssIGxlbmd0aCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWtzZnRfZXhpdF9mYWlsKCk7CiAJCXNobW1heCA9IHZhbDsKIAl9CiAKLQl2YWwgPSByZWFkX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDspOwomIzQzOwlyZXQgPSByZWFkX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsKCk7CiAJaWYgKHZhbCAmbHQ7IG5yKSB7Ci0JCXdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssIG5yKTsKJiM0MzsJCXJldCA9IHdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssIG5yKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJa3NmdF9leGl0X2ZhaWwoKTsKIAkJc2htYWxsID0gdmFsOwogCX0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAppbmRleCBlYThmYzhmZGYwZWIwYi4uYWE4NTZmMGQzMmQ2NGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKQEAgLTgsNiAmIzQzOzgsOCBAQAogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OyAvKiBfU0NfUEFHRVNJWkUgKi8KICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2ZpbGVfdXRpbHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCAmbHQ7Jmx0OyAobnIpKQogI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KQpAQCAtMTY0LDExICYjNDM7MTY2LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7CiAjZGVmaW5lIFBBR0VNQVBfUFJFU0VOVChlbnQpCSgoKGVudCkgJmFtcDsgKDF1bGwgJmx0OyZsdDsgNjMpKSAhPSAwKQogI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpCSgoZW50KSAmYW1wOyAoKDF1bGwgJmx0OyZsdDsgNTUpIC0gMSkpCiAKLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwotaW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwotdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTsKLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTsKLQogdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpOwogdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTAzMgoJCQkJCQkJb3V0cHV0OiA4NgoJCQkJCQkJdGhvdWdodHM6IDk4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllczogQSBGb2N1c2VkIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBzZWVtcyBwcmV0dHkgY29udGFpbmVkLCB3aGljaCBpcyBnb29kLiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBvbiByZWZhY3RvcmluZyBhbmQgYWRkaW5nIHNvbWUgbmV3IHRvb2xpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBndXBfdGVzdC5jYCBjb2RlLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnZvbHZlcyBzcGxpdHRpbmcgb3V0IHV0aWxpdHkgZnVuY3Rpb25zIGZyb20gYGd1cF90ZXN0LmNgIGludG8gYGZpbGVfdXRpbHMuY2AgYW5kIGBodWdlcGFnZV9zZXR0aW5ncy5jYC4gTWFrZXMgc2Vuc2U7IHRoYXQgc2hvdWxkIGltcHJvdmUgbWFpbnRhaW5hYmlsaXR5IGFuZCBwb3RlbnRpYWxseSByZXVzYWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIEEgbmV3IHRvb2wsIGBndXBfYmVuY2guY2AsIGhhcyBiZWVuIGludHJvZHVjZWQsIHdoaWNoIEkgYXNzdW1lIGlzIGZvciBiZW5jaG1hcmtpbmcgdGhlIEdVUCAoR2V0IFVzZXIgUGFnZXMpIG9wZXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBvbmUgaW4gbW9yZSBkZXRhaWwgdG8gdW5kZXJzdGFuZCB3aGF0IG1ldHJpY3MgdGhleSYjMzk7cmUgbG9va2luZyBhdC4KCkZyb20gdGhlIGZpbGUgbGlzdCwgSSBjYW4gc2VlIHRoZSBzY29wZSBpcyBmYWlybHkgbmFycm93OiBtb3N0bHkgd2l0aGluIHRoZSBgdG9vbHMvYCwgYERvY3VtZW50YXRpb24vYCwgYW5kIGBNQUlOVEFJTkVSU2AgZGlyZWN0b3JpZXMuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdGVkLiBUaGUgZGlmZiBjb25maXJtcyBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmc6IHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgbm8gZHJpdmVycywgbm8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUuIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgdXNlci1zcGFjZSB0b29scyBhbmQgdGVzdHMuIFRoaXMgaXMgZnVydGhlciBiYWNrZWQgdXAgYnkgdGhlIGZpbGUgcGF0aHMgd2hpY2ggSSB3aWxsIHVzZSB0byBhc3Nlc3MgY2hhbmdlcy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGNoYW5nZXMgdG8gdGhlIGBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdGAgZmlsZSB3aGljaCBsaWtlbHkgbWVhbnMgdGhlIGRvY3VtZW50YXRpb24gYXJvdW5kIHRoZSBgcGluX3VzZXJfcGFnZXNgIEFQSSBoYXMgYmVlbiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNoYW5nZXMuIEkgYWxzbyB3YW50IHRvIGFzc2VzcyB0aGUgYE1BSU5UQUlORVJTYCBmaWxlIHRvIHNlZSBpZiBhbnkgbWFpbnRhaW5lcnNoaXAgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZS4KCkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCBhbmQgdGhlIGZhY3QgdGhhdCB0aGVyZSBhcmUgbm8gYWN0dWFsIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiwgSSBiZWxpZXZlIHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIHJlZmFjdG9yIGFuZCBhIG5ldyB0b29sOyB0aGVyZSYjMzk7cyBub3RoaW5nIGhlcmUgdGhhdCYjMzk7cyBkaXJlY3RseSBpbXBhY3RpbmcgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IHdvdWxkIG1ha2UgaXQgYSBwcmlvcml0eSB0YXJnZXQgZm9yIGZ1enppbmcuIEhvd2V2ZXIsIHRoYXQgZG9lcyBub3QgbWVhbiB0aGF0IHRoZSBjb2RlIGlzIGZyZWUgb2YgYnVncywgc28gSSB3aWxsIGhhdmUgYSBtb3JlIGRldGFpbGVkIGFzc2Vzc21lbnQgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbHMgKHRvb2xzL21tL2d1cF9iZW5jaC5jLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBEb2N1bWVudGF0aW9uLCBhbmQgTUFJTlRBSU5FUlMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbHMgKHRvb2xzL21tL2d1cF9iZW5jaC5jLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBEb2N1bWVudGF0aW9uLCBhbmQgTUFJTlRBSU5FUlMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6Mjk6MDguMzMzMjE2NjY1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMjQwMzI2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29scyAodG9vbHMvbW0vZ3VwX2JlbmNoLmMsIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyksIERvY3VtZW50YXRpb24sIGFuZCBNQUlOVEFJTkVSUy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjI5OjA4LjMzMzIyMjczNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwODIyNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjBhMjNlOTk3OWVlZGY0YTZmYjU4ZWExYjM3NmNhNTI3NTcyYzRmY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAxNiAyMDoyOTowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XFxuaW5kZXggYzE2Y2ExNjNiNTVlM2MuLmVhNzIyYWRmMjJjY2FjIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcXG5AQCAtMjMwLDEwICsyMzAsMTYgQEAgVGhpcyBmaWxlOjpcXG4gXFxuICB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxuIFxcbi1oYXMgdGhlIGZvbGxvd2luZyBuZXcgY2FsbHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBwaW4qKCkgd3JhcHBlciBmdW5jdGlvbnM6XFxuK2NvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdGVzdCBjYXNlcyB0byBleGVyY2lzZSBwaW5fdXNlcl9wYWdlcyooKTpcXG4gXFxuLSogUElOX0ZBU1RfQkVOQ0hNQVJLICguL2d1cF90ZXN0IC1hKVxcbi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKVxcbisqIHBpbl91c2VyX3BhZ2VzIHZpYSBQSU5fQkFTSUNfVEVTVFxcbisqIHBpbl91c2VyX3BhZ2VzX2Zhc3QgdmlhIFBJTl9GQVNUX0JFTkNITUFSS1xcbisqIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtIHZpYSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXFxuK1xcbitSdW4gd2l0aDo6XFxuK1xcbisgIG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW1cXG4rICAuL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0XFxuIFxcbiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkXFxuIHNpbmNlIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCwgdmlhIHR3byBuZXcgL3Byb2Mvdm1zdGF0IGVudHJpZXM6IDo6XFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCA4MDZiZDJkODBkMTUzNS4uN2QxMjFkZWU5ZjBmMmMgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xNzAyNCw2ICsxNzAyNCw3IEBAIFQ6XFx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ha3BtL21tXFxuIEY6XFx0bW0vZ3VwLmNcXG4gRjpcXHRtbS9ndXBfdGVzdC5jXFxuIEY6XFx0bW0vZ3VwX3Rlc3QuaFxcbitGOlxcdHRvb2xzL21tL2d1cF9iZW5jaC5jXFxuIEY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG4gRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxuIFxcbkBAIC0xNzEyOCw2ICsxNzEyOSw3IEBAIEY6XFx0bW0vbWVtb3J5LXRpZXJzLmNcXG4gRjpcXHRtbS9wYWdlX2lkbGUuY1xcbiBGOlxcdG1tL3BnYWxsb2MtdHJhY2suaFxcbiBGOlxcdG1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmNcXG4rRjpcXHR0b29scy9saWIvbW0vXFxuIEY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXFxuIFxcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIE5VTUEgTUVNQkxPQ0tTIEFORCBOVU1BIEVNVUxBVElPTlxcbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5jIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjc5MmY0YjRkYjYyNTJlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcXG5AQCAtMCwwICsxLDExOSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImZpbGVfdXRpbHMuaFxcXCJcXG4rXFxuK2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0c3NpemVfdCBudW1yZWFkO1xcbitcXG4rXFx0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKGZkID09IC0xKSB7XFxuK1xcdFxcdGludCBlcnIgPSBlcnJubztcXG4rXFxuK1xcdFxcdHByaW50ZihcXFwiIyAlczogJXMgKCVkKVxcXFxuXFxcIiwgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTtcXG4rXFx0XFx0cmV0dXJuIC1lcnI7XFxuK1xcdH1cXG4rXFxuK1xcdG51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xcbitcXHRpZiAobnVtcmVhZCBcXHUwMDNjIDEpIHtcXG4rXFx0XFx0aW50IGVyciA9IG51bXJlYWQgPyBlcnJubyA6IEVOT0RBVEE7XFxuK1xcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdHByaW50ZihcXFwiIyAlczogJXMgKCVkKVxcXFxuXFxcIiwgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTtcXG4rXFx0XFx0cmV0dXJuIC1lcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGJ1ZltudW1yZWFkXSA9ICdcXFxcMCc7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFxuK1xcdHJldHVybiAoaW50KW51bXJlYWQ7XFxuK31cXG4rXFxuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcXG4re1xcbitcXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xcbitcXHRzc2l6ZV90IG51bXdyaXR0ZW47XFxuK1xcbitcXHRpZiAoYnVmbGVuIFxcdTAwM2MgMikge1xcbitcXHRcXHRwcmludGYoXFxcIiMgJXM6ICVzICglZClcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKEVJTlZBTCksIEVJTlZBTCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xcbitcXHRpZiAoZmQgPT0gLTEpIHtcXG4rXFx0XFx0aW50IGVyciA9IGVycm5vO1xcbitcXG4rXFx0XFx0cHJpbnRmKFxcXCIjICVzOiAlcyAoJWQpXFxcXG5cXFwiLCBwYXRoLCBzdHJlcnJvcihlcnIpLCBlcnIpO1xcbitcXHRcXHRyZXR1cm4gLWVycjtcXG4rXFx0fVxcbitcXG4rXFx0bnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xcbitcXHRzYXZlZF9lcnJubyA9IGVycm5vO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcdGlmIChudW13cml0dGVuIFxcdTAwM2MgMCkge1xcbitcXHRcXHRwcmludGYoXFxcIiMgJXM6ICVzICglZClcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSxcXG4rXFx0XFx0ICAgICAgIHNhdmVkX2Vycm5vKTtcXG4rXFx0XFx0cmV0dXJuIC1zYXZlZF9lcnJubztcXG4rXFx0fVxcbitcXHRpZiAobnVtd3JpdHRlbiAhPSAoc3NpemVfdCkoYnVmbGVuIC0gMSkpIHtcXG4rXFx0XFx0cHJpbnRmKFxcXCIjICVzIHdyaXRlKCUuKnMpIGlzIHRydW5jYXRlZCwgZXhwZWN0ZWQgJXp1IGJ5dGVzLCBnb3QgJXpkIGJ5dGVzXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgcGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHZhbDtcXG4rXFx0aW50IGVyciwgcmV0O1xcbitcXHRjaGFyIGJ1ZlsyMV07XFxuK1xcdGNoYXIgKmVuZDtcXG4rXFxuK1xcdGlmICghbnVtKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRlcnJubyA9IDA7XFxuK1xcdHZhbCA9IHN0cnRvdWwoYnVmLCBcXHUwMDI2ZW5kLCAxMCk7XFxuK1xcdGlmIChlcnJubykge1xcbitcXHRcXHRlcnIgPSBlcnJubztcXG4rXFx0XFx0cHJpbnRmKFxcXCIjICVzOiAlcyAoJWQpXFxcXG5cXFwiLCBwYXRoLCBzdHJlcnJvcihlcnIpLCBlcnIpO1xcbitcXHRcXHRyZXR1cm4gLWVycjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGVuZCA9PSBidWYgfHwgYnVmWzBdID09ICctJykge1xcbitcXHRcXHRwcmludGYoXFxcIiMgJXM6IGludmFsaWQgbnVtZXJpYyB2YWx1ZVxcXFxuXFxcIiwgcGF0aCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoKmVuZCA9PSAnXFxcXG4nKVxcbitcXHRcXHRlbmQrKztcXG4rXFxuK1xcdGlmICgqZW5kICE9ICdcXFxcMCcpIHtcXG4rXFx0XFx0cHJpbnRmKFxcXCIjICVzOiBpbnZhbGlkIG51bWVyaWMgdmFsdWVcXFxcblxcXCIsIHBhdGgpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Km51bSA9IHZhbDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXFxuK3tcXG4rXFx0Y2hhciBidWZbMjFdO1xcbitcXG4rXFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIiVsdVxcXCIsIG51bSk7XFxuK1xcdHJldHVybiB3cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgKyAxKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM4NTc2NzkwYTM0MjQ0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmhcXG5AQCAtMCwwICsxLDEyIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKyNpZm5kZWYgX19NTV9GSUxFX1VUSUxTX0hfX1xcbisjZGVmaW5lIF9fTU1fRklMRV9VVElMU19IX19cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRkZWYuaFxcdTAwM2VcXG4rXFxuK2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcXG4raW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcXG4raW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSk7XFxuK2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xcbitcXG4rI2VuZGlmXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbnNpbWlsYXJpdHkgaW5kZXggOTElXFxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbnJlbmFtZSB0byB0b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbmluZGV4IDJlYWIyMTEwYWM2YTQ2Li44ZDllNDQ3MjdlZGJmNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXFxuKysrIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5AQCAtOSwxMSArOSwxNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJmaWxlX3V0aWxzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBUSFBfU1lTRlMgXFxcIi9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL1xcXCJcXG4gI2RlZmluZSBNQVhfU0VUVElOR1NfREVQVEggNFxcbitcXG4rI2lmbmRlZiBBUlJBWV9TSVpFXFxuKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpXFxuKyNlbmRpZlxcbitcXG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3Nfc3RhY2tbTUFYX1NFVFRJTkdTX0RFUFRIXTtcXG4gc3RhdGljIGludCBzZXR0aW5nc19pbmRleDtcXG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2F2ZWRfc2V0dGluZ3M7XFxuQEAgLTYxLDEwICs2Niw5IEBAIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkge1xcbi1cXHRcXHRwZXJyb3IocGF0aCk7XFxuK1xcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4tXFx0fVxcbiBcXG4gXFx0YyA9IHN0cmNocihidWYsICdbJyk7XFxuIFxcdGlmICghYykge1xcbkBAIC0xMDMsMTIgKzEwNywxNSBAQCB2b2lkIHRocF93cml0ZV9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsKVxcbiBcXHRcXHRwcmludGYoXFxcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIFxcdH1cXG4tXFx0d3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICsgMSk7XFxuK1xcdHJldCA9IHdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSArIDEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiB9XFxuIFxcbiB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnVtO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmV0ID0gc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFRIUF9TWVNGUyBcXFwiJXNcXFwiLCBuYW1lKTtcXG5AQCAtMTE2LDcgKzEyMywxMSBAQCB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxcbiBcXHRcXHRwcmludGYoXFxcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIFxcdH1cXG4tXFx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xcbitcXHRyZXQgPSByZWFkX251bShwYXRoLCBcXHUwMDI2bnVtKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFxuK1xcdHJldHVybiBudW07XFxuIH1cXG4gXFxuIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcXG5AQCAtMTI5LDcgKzE0MCw5IEBAIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcXG4gXFx0XFx0cHJpbnRmKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuLVxcdHdyaXRlX251bShwYXRoLCBudW0pO1xcbitcXHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gfVxcbiBcXG4gdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcXG5AQCAtMTU3LDggKzE3MCwxMyBAQCB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxcbiBcXHRcXHQubWF4X3B0ZXNfc2hhcmVkID0gdGhwX3JlYWRfbnVtKFxcXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFxcXCIpLFxcbiBcXHRcXHQucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bShcXFwia2h1Z2VwYWdlZC9wYWdlc190b19zY2FuXFxcIiksXFxuIFxcdH07XFxuLVxcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxcbi1cXHRcXHRzZXR0aW5ncy1cXHUwMDNlcmVhZF9haGVhZF9rYiA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgpO1xcbitcXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xcbitcXHRcXHRpbnQgcmV0ID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcXG4rXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNldHRpbmdzLVxcdTAwM2VyZWFkX2FoZWFkX2tiKTtcXG4rXFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9PUkRFUlM7IGkrKykge1xcbiBcXHRcXHRpZiAoISgoMSBcXHUwMDNjXFx1MDAzYyBpKSBcXHUwMDI2IG9yZGVycykpIHtcXG5AQCAtMjA4LDggKzIyNiwxMyBAQCB2b2lkIHRocF93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcXG4gXFx0dGhwX3dyaXRlX251bShcXFwia2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWRcXFwiLCBraHVnZXBhZ2VkLVxcdTAwM2VtYXhfcHRlc19zaGFyZWQpO1xcbiBcXHR0aHBfd3JpdGVfbnVtKFxcXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cXFwiLCBraHVnZXBhZ2VkLVxcdTAwM2VwYWdlc190b19zY2FuKTtcXG4gXFxuLVxcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxcbi1cXHRcXHR3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgc2V0dGluZ3MtXFx1MDAzZXJlYWRfYWhlYWRfa2IpO1xcbitcXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xcbitcXHRcXHRpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXFxuK1xcdFxcdFxcdFxcdCAgICBzZXR0aW5ncy1cXHUwMDNlcmVhZF9haGVhZF9rYik7XFxuK1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfT1JERVJTOyBpKyspIHtcXG4gXFx0XFx0aWYgKCEoKDEgXFx1MDAzY1xcdTAwM2MgaSkgXFx1MDAyNiBvcmRlcnMpKVxcbkBAIC0zMDYsOCArMzI5LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX3N1cHBvcnRlZF9vcmRlcnMoYm9vbCBpc19zaG1lbSlcXG4gXFx0XFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRpZiAoYWNjZXNzKHBhdGgsIEZfT0spKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcXG4tXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuIFxcdFxcdFxcdG9yZGVycyB8PSAxVUwgXFx1MDAzY1xcdTAwM2MgaTtcXG4gXFx0fVxcbiBcXG5AQCAtMzgyLDggKzQwOCw3IEBAIGludCBkZXRlY3RfaHVnZXRsYl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwgaW50IG1heClcXG4gXFx0XFx0aWYgKHNzY2FuZihlbnRyeS1cXHUwMDNlZF9uYW1lLCBcXFwiaHVnZXBhZ2VzLSV6dWtCXFxcIiwgXFx1MDAyNmtiKSAhPSAxKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0c2l6ZXNbY291bnQrK10gPSBrYiAqIDEwMjQ7XFxuLVxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBrYik7XFxuK1xcdFxcdHByaW50ZihcXFwiIyBbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcXFxcblxcXCIsIGtiKTtcXG4gXFx0fVxcbiBcXHRjbG9zZWRpcihkaXIpO1xcbiBcXHRyZXR1cm4gY291bnQ7XFxuQEAgLTQyNSwyOCArNDUwLDQzIEBAIHN0YXRpYyB2b2lkIGh1Z2V0bGJfc3lzZnNfcGF0aChjaGFyICpidWYsIHNpemVfdCBidWZsZW4sXFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUpXFxuIHtcXG4gXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFx0dW5zaWduZWQgbG9uZyBucjtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFxcXCJucl9odWdlcGFnZXNcXFwiKTtcXG4gXFxuLVxcdHJldHVybiByZWFkX251bShwYXRoKTtcXG4rXFx0cmV0ID0gcmVhZF9udW0ocGF0aCwgXFx1MDAyNm5yKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFxuK1xcdHJldHVybiBucjtcXG4gfVxcbiBcXG4gdm9pZCBodWdldGxiX3NldF9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXFxuIHtcXG4gXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFxcXCJucl9odWdlcGFnZXNcXFwiKTtcXG4gXFxuLVxcdHdyaXRlX251bShwYXRoLCBucik7XFxuK1xcdHJldCA9IHdyaXRlX251bShwYXRoLCBucik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIH1cXG4gXFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4ge1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXFxcImZyZWVfaHVnZXBhZ2VzXFxcIik7XFxuIFxcbi1cXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XFxuK1xcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFxcdTAwMjZucik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcbitcXHRyZXR1cm4gbnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXFxuQEAgLTUwMiw3ICs1NDIsOCBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyBzaXplc1tdLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmIChucl9lbmFibGVkIFxcdTAwM2UgbWF4KSB7XFxuLVxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxcXG5cXFwiLCBucl9lbmFibGVkLCBtYXgpO1xcbitcXHRcXHRwcmludGYoXFxcIiMgZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIG5yX2VuYWJsZWQsIG1heCk7XFxuIFxcdFxcdG5yX2VuYWJsZWQgPSBtYXg7XFxuIFxcdH1cXG4gXFxuQEAgLTU3NCw4ICs2MTUsMTAgQEAgc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQodm9pZClcXG4gXFxuIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3Nfc2lnaGFuZGxlcihpbnQgc2lnKVxcbiB7XFxuK1xcdCh2b2lkKXNpZztcXG4rXFxuIFxcdC8qIGV4aXQoKSB3aWxsIGludm9rZSB0aGUgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQgaGFuZGxlci4gKi9cXG4tXFx0ZXhpdChLU0ZUX0ZBSUwpO1xcbitcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIH1cXG4gXFxuIHZvaWQgaHVnZXBhZ2Vfc2F2ZV9zZXR0aW5ncyhib29sIHRocCwgYm9vbCBodWdldGxiKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXG5zaW1pbGFyaXR5IGluZGV4IDEwMCVcXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXFxucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlXFxuaW5kZXggOTIyODc5ZjkzZmM4NDkuLjE1NGQ3NDBiZTAyZTgyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcXG4rKysgYi90b29scy9tbS8uZ2l0aWdub3JlXFxuQEAgLTIsMyArMiw1IEBAXFxuIHNsYWJpbmZvXFxuIHBhZ2UtdHlwZXNcXG4gcGFnZV9vd25lcl9zb3J0XFxuK3RocF9zd2FwX2FsbG9jYXRvcl90ZXN0XFxuK2d1cF9iZW5jaFxcbmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlXFxuaW5kZXggZjU3MjViNWMyM2FhMjYuLmQ4MmNjOGM0M2VlMDJkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvbW0vTWFrZWZpbGVcXG5AQCAtMywxMyArMywxNCBAQFxcbiAjXFxuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXFxuIFxcbi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XFxuK0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xcbiBcXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcXG4rR1VQX0JFTkNIX09CSlMgPSBndXBfYmVuY2guYyAuLi9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyAuLi9saWIvbW0vZmlsZV91dGlscy5jXFxuIFxcbi1DRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWRcXG4rQ0ZMQUdTICs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1JLi4vLi4gLXB0aHJlYWRcXG4gTERGTEFHUyArPSAkKExJQlMpIC1wdGhyZWFkXFxuIFxcbiBhbGw6ICQoQlVJTERfVEFSR0VUUylcXG5AQCAtMjIsOCArMjMsMTEgQEAgJChMSUJTKTpcXG4gJTogJS5jXFxuIFxcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXFx1MDAzYyAkKExERkxBR1MpXFxuIFxcbitndXBfYmVuY2g6ICQoR1VQX0JFTkNIX09CSlMpICQoTElCUylcXG4rXFx0JChDQykgJChDRkxBR1MpIC1vICRAICQoR1VQX0JFTkNIX09CSlMpICQoTERGTEFHUylcXG4rXFxuIGNsZWFuOlxcbi1cXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitcXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2hcXG4gXFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXFxuIFxcbiBzYmluZGlyID89IC91c3Ivc2JpblxcbmRpZmYgLS1naXQgYS90b29scy9tbS9ndXBfYmVuY2guYyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNDk3YjhmM2Y2YWM0YjRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcXG5AQCAtMCwwICsxLDQ4MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBNaWNyb2JlbmNobWFyayBmb3IgZ2V0X3VzZXJfcGFnZXMgKEdVUCkga2VybmVsIGludGVyZmFjZXMuXFxuKyAqXFxuKyAqIEV4ZXJjaXNlcyBHVVBfRkFTVF9CRU5DSE1BUkssIFBJTl9GQVNUX0JFTkNITUFSSywgYW5kXFxuKyAqIFBJTl9MT05HVEVSTV9CRU5DSE1BUksgdmlhIHRoZSBDT05GSUdfR1VQX1RFU1QgZGVidWdmcyBpbnRlcmZhY2UuXFxuKyAqXFxuKyAqIEV4YW1wbGUgdXNlOlxcbisgKiAgICMgUnVuIHRoZSBmdWxsIG1hdHJpeCAoYWxsIGNvbW1hbmRzLCBhY2Nlc3MgbW9kZXMsIHBhZ2UgY291bnRzKTpcXG4rICogICAuL2d1cF9iZW5jaFxcbisgKlxcbisgKiAgICMgU2luZ2xlIHJ1bjogcGluX3VzZXJfcGFnZXNfZmFzdCwgNTEyIHBhZ2VzLCB3cml0ZSBhY2Nlc3MsIGh1Z2V0bGI6XFxuKyAqICAgLi9ndXBfYmVuY2ggLWEgLW4gNTEyIC13IC1IXFxuKyAqXFxuKyAqIFJlcXVpcmVzIENPTkZJR19HVVBfVEVTVD15IGFuZCBkZWJ1Z2ZzIG1vdW50ZWQgYXQgL3N5cy9rZXJuZWwvZGVidWcuXFxuKyAqIE11c3QgYmUgcnVuIGFzIHJvb3QuXFxuKyAqL1xcbitcXG4rI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NkaXJlbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9pb2N0bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYXRvbWljLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NtbS9ndXBfdGVzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgTUIgKDFVTCBcXHUwMDNjXFx1MDAzYyAyMClcXG4rXFxuKyNpZm5kZWYgQVJSQVlfU0laRVxcbisjZGVmaW5lIEFSUkFZX1NJWkUoYXJyKSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKVxcbisjZW5kaWZcXG4rXFxuKy8qIEp1c3QgdGhlIGZsYWdzIHdlIG5lZWQsIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgaW50ZXJuYWxzLiAqL1xcbisjZGVmaW5lIEZPTExfV1JJVEVcXHQweDAxXFx0LyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovXFxuK1xcbisjZGVmaW5lIEdVUF9URVNUX0ZJTEUgXFxcIi9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0XFxcIlxcbitcXG4rc3RhdGljIHVuc2lnbmVkIGludCBwc2l6ZSh2b2lkKVxcbit7XFxuK1xcdHN0YXRpYyB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7XFxuK1xcbitcXHRpZiAoIV9fcGFnZV9zaXplKVxcbitcXHRcXHRfX3BhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTtcXG4rXFx0cmV0dXJuIF9fcGFnZV9zaXplO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbWQ7XFxuK3N0YXRpYyBjb25zdCBjaGFyICpiZW5jaF9sYWJlbDtcXG4rc3RhdGljIGludCBndXBfZmQsIHJlcGVhdHMgPSAxO1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7XFxuK3N0YXRpYyBhdG9taWNfaW50IGJlbmNoX2Vycm9yO1xcbisvKiBTZXJpYWxpemUgcHJpbnRzICovXFxuK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgcHJpbnRfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xcbitcXG4rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgYmVuY2hfY21kc1tdID0ge1xcbitcXHRHVVBfRkFTVF9CRU5DSE1BUkssXFxuK1xcdFBJTl9GQVNUX0JFTkNITUFSSyxcXG4rXFx0UElOX0xPTkdURVJNX0JFTkNITUFSSyxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBpbnQgYmVuY2hfdGhwX21vZGVzW10gPSB7IDEsIDAgfTtcXHQvKiBvbiwgb2ZmICovXFxuK3N0YXRpYyBjb25zdCBpbnQgYmVuY2hfbnJfcGFnZXNfbGlzdFtdID0geyAxLCA1MTIsIDEyMywgLTEgfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICpjbWRfdG9fc3RyKHVuc2lnbmVkIGxvbmcgY21kKVxcbit7XFxuK1xcdHN3aXRjaCAoY21kKSB7XFxuK1xcdGNhc2UgR1VQX0ZBU1RfQkVOQ0hNQVJLOlxcbitcXHRcXHRyZXR1cm4gXFxcIkdVUF9GQVNUX0JFTkNITUFSS1xcXCI7XFxuK1xcdGNhc2UgUElOX0ZBU1RfQkVOQ0hNQVJLOlxcbitcXHRcXHRyZXR1cm4gXFxcIlBJTl9GQVNUX0JFTkNITUFSS1xcXCI7XFxuK1xcdGNhc2UgUElOX0xPTkdURVJNX0JFTkNITUFSSzpcXG4rXFx0XFx0cmV0dXJuIFxcXCJQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXFxcIjtcXG4rXFx0fVxcbitcXHRyZXR1cm4gXFxcIlVua25vd24gY29tbWFuZFxcXCI7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIHBhcnNlX2xvbmdfYXJnX2Jhc2UoY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgYmFzZSlcXG4re1xcbitcXHRjaGFyICplbmQ7XFxuK1xcdGxvbmcgdmFsO1xcbitcXG4rXFx0ZXJybm8gPSAwO1xcbitcXHR2YWwgPSBzdHJ0b2woYXJnLCBcXHUwMDI2ZW5kLCBiYXNlKTtcXG4rXFx0aWYgKGVycm5vIHx8IGVuZCA9PSBhcmcgfHwgKmVuZCAhPSAnXFxcXDAnKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiSW52YWxpZCAlcyAnJXMnXFxcXG5cXFwiLCBuYW1lLCBhcmcpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK1xcdHJldHVybiB2YWw7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIHBhcnNlX2xvbmdfYXJnKGNvbnN0IGNoYXIgKmFyZywgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRyZXR1cm4gcGFyc2VfbG9uZ19hcmdfYmFzZShhcmcsIG5hbWUsIDEwKTtcXG4rfVxcbitcXG4rc3RhdGljIGxvbmcgcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcoY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGxvbmcgdmFsID0gcGFyc2VfbG9uZ19hcmcoYXJnLCBuYW1lKTtcXG4rXFxuK1xcdGlmICh2YWwgXFx1MDAzYyAxKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiSW52YWxpZCAlcyAnJXMnXFxcXG5cXFwiLCBuYW1lLCBhcmcpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdmFsO1xcbit9XFxuK1xcbitzdHJ1Y3QgYmVuY2hfcnVuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBjbWQ7XFxuK1xcdGludCB0aHA7XFx0XFx0LyogLTE6IGRlZmF1bHQsIDA6IG9mZiwgMTogb24gKi9cXG4rXFx0Ym9vbCBodWdldGxiO1xcbitcXHRib29sIHdyaXRlO1xcdFxcdC8qIHdoZXRoZXIgdG8gc2V0IEZPTExfV1JJVEUgKi9cXG4rXFx0Ym9vbCBzaGFyZWQ7XFxuK1xcdGludCBucl9wYWdlcztcXHRcXHQvKiAtMSBtZWFucyBhbGwgcGFnZXMgKHNpemUgLyBwc2l6ZSgpKSAqL1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuK1xcdGNoYXIgKmZpbGU7XFxuK1xcdGludCBudGhyZWFkcztcXG4rXFx0dW5zaWduZWQgaW50IGd1cF9mbGFncztcXG4rfTtcXG4rXFxuK3ZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0gKihzdHJ1Y3QgZ3VwX3Rlc3QgKilkYXRhO1xcbitcXHRpbnQgaSwgc3RhdHVzO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJlcGVhdHM7IGkrKykge1xcbitcXHRcXHRndXAuc2l6ZSA9IHNpemU7XFxuK1xcdFxcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcXHUwMDI2Z3VwKTtcXG4rXFx0XFx0aWYgKHN0YXR1cykge1xcbitcXHRcXHRcXHRiZW5jaF9lcnJvciA9IDE7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNnByaW50X211dGV4KTtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlcyB0aW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1xcXCIsXFxuK1xcdFxcdCAgICAgICBiZW5jaF9sYWJlbCwgZ3VwLmdldF9kZWx0YV91c2VjLFxcbitcXHRcXHQgICAgICAgZ3VwLnB1dF9kZWx0YV91c2VjKTtcXG4rXFx0XFx0aWYgKGd1cC5zaXplICE9IHNpemUpXFxuK1xcdFxcdFxcdHByaW50ZihcXFwiLCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxcIiwgZ3VwLnNpemUpO1xcbitcXHRcXHRwcmludGYoXFxcIlxcXFxuXFxcIik7XFxuK1xcdFxcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFxcdTAwMjZwcmludF9tdXRleCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ1bl9iZW5jaChzdHJ1Y3QgYmVuY2hfcnVuICpydW4pXFxuK3tcXG4rXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xcbitcXHRpbnQgemVyb19mZCwgaSwgcmV0LCBzdGFydGVkX3RocmVhZHMgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzX3Blcl9jYWxsO1xcbitcXHRpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURTtcXG4rXFx0cHRocmVhZF90ICp0aWQ7XFxuK1xcdGNoYXIgbGFiZWxbMTI4XTtcXG4rXFx0Y2hhciAqcDtcXG4rXFx0Ym9vbCByZXN0b3JlX2h1Z2V0bGIgPSBmYWxzZTtcXG4rXFxuK1xcdC8qIFNldCBnbG9iYWxzIGNvbnN1bWVkIGJ5IGd1cF90aHJlYWQgKi9cXG4rXFx0Y21kID0gcnVuLVxcdTAwM2VjbWQ7XFxuK1xcdHNpemUgPSBydW4tXFx1MDAzZXNpemU7XFxuK1xcdGJlbmNoX2Vycm9yID0gMDtcXG4rXFxuK1xcdGlmIChydW4tXFx1MDAzZWh1Z2V0bGIpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xcbitcXG4rXFx0XFx0aWYgKCFocF9zaXplKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiQ291bGQgbm90IGRldGVybWluZSBodWdlIHBhZ2Ugc2l6ZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIFVMT05HX01BWCAtIChocF9zaXplIC0gMSkpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJIdWdlVExCIG1hcHBpbmcgc2l6ZSBpcyB0b28gbGFyZ2VcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0c2l6ZSA9IChzaXplICsgaHBfc2l6ZSAtIDEpIFxcdTAwMjYgfihocF9zaXplIC0gMSk7XFxuK1xcdFxcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXN0b3JlX2h1Z2V0bGIgPSB0cnVlO1xcbitcXHRcXHRmbGFncyB8PSAoTUFQX0hVR0VUTEIgfCBNQVBfQU5PTllNT1VTKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJ1bi1cXHUwMDNlc2hhcmVkKSB7XFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5NQVBfUFJJVkFURTtcXG4rXFx0XFx0ZmxhZ3MgfD0gTUFQX1NIQVJFRDtcXG4rXFx0fVxcbitcXG4rXFx0bnJfcGFnZXNfcGVyX2NhbGwgPSBydW4tXFx1MDAzZW5yX3BhZ2VzIFxcdTAwM2MgMCA/IHNpemUgLyBwc2l6ZSgpIDpcXG4rXFx0XFx0KHVuc2lnbmVkIGxvbmcpcnVuLVxcdTAwM2Vucl9wYWdlcztcXG4rXFxuK1xcdGlmIChucl9wYWdlc19wZXJfY2FsbCBcXHUwMDNlIFVJTlRfTUFYKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiUGFnZSBjb3VudCBpcyB0b28gbGFyZ2VcXFxcblxcXCIpO1xcbitcXHRcXHRpZiAocmVzdG9yZV9odWdldGxiKVxcbitcXHRcXHRcXHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfcGVyX2NhbGw7XFxuK1xcbitcXHRndXAuZ3VwX2ZsYWdzID0gcnVuLVxcdTAwM2VndXBfZmxhZ3M7XFxuK1xcdGlmIChydW4tXFx1MDAzZXdyaXRlKVxcbitcXHRcXHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XFxuK1xcbitcXHRzbnByaW50ZihsYWJlbCwgc2l6ZW9mKGxhYmVsKSwgXFxcIiVzIChucl9wYWdlcz0lLTR1ICVzICVzICVzICVzKVxcXCIsXFxuK1xcdFxcdCBjbWRfdG9fc3RyKHJ1bi1cXHUwMDNlY21kKSxcXG4rXFx0XFx0IGd1cC5ucl9wYWdlc19wZXJfY2FsbCxcXG4rXFx0XFx0IHJ1bi1cXHUwMDNld3JpdGUgID8gXFxcIndyaXRlXFxcIiAgIDogXFxcInJlYWRcXFwiLFxcbitcXHRcXHQgcnVuLVxcdTAwM2VzaGFyZWQgPyBcXFwic2hhcmVkXFxcIiAgOiBcXFwicHJpdmF0ZVxcXCIsXFxuK1xcdFxcdCBydW4tXFx1MDAzZWh1Z2V0bGIgPyBcXFwiaHVnZXRsYj1vblxcXCIgOiBcXFwiaHVnZXRsYj1vZmZcXFwiLFxcbitcXHRcXHQgcnVuLVxcdTAwM2VodWdldGxiID8gXFxcInRocD1vZmZcXFwiIDpcXG4rXFx0XFx0IChydW4tXFx1MDAzZXRocCA9PSAxID8gXFxcInRocD1vblxcXCIgOlxcbitcXHRcXHQgKHJ1bi1cXHUwMDNldGhwID09IDAgPyBcXFwidGhwPW9mZlxcXCIgOiBcXFwidGhwPWRlZmF1bHRcXFwiKSkpO1xcbitcXHRiZW5jaF9sYWJlbCA9IGxhYmVsO1xcbitcXG4rXFx0emVyb19mZCA9IG9wZW4ocnVuLVxcdTAwM2VmaWxlLCBPX1JEV1IpO1xcbitcXHRpZiAoemVyb19mZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIHJ1bi1cXHUwMDNlZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0XFx0aWYgKHJlc3RvcmVfaHVnZXRsYilcXG4rXFx0XFx0XFx0aHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuK1xcbitcXHRwID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncywgemVyb19mZCwgMCk7XFxuK1xcdGNsb3NlKHplcm9fZmQpO1xcbitcXHRpZiAocCA9PSBNQVBfRkFJTEVEKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibW1hcDogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdGlmIChyZXN0b3JlX2h1Z2V0bGIpXFxuK1xcdFxcdFxcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7XFxuK1xcbitcXHRpZiAocnVuLVxcdTAwM2V0aHAgPT0gMSlcXG4rXFx0XFx0bWFkdmlzZShwLCBzaXplLCBNQURWX0hVR0VQQUdFKTtcXG4rXFx0ZWxzZSBpZiAocnVuLVxcdTAwM2V0aHAgPT0gMClcXG4rXFx0XFx0bWFkdmlzZShwLCBzaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbitcXG4rXFx0LyogRmF1bHQgdGhlbSBpbiBoZXJlLCBmcm9tIHVzZXIgc3BhY2UuICovXFxuK1xcdGZvciAoOyAodW5zaWduZWQgbG9uZylwIFxcdTAwM2MgZ3VwLmFkZHIgKyBzaXplOyBwICs9IHBzaXplKCkpXFxuK1xcdFxcdHBbMF0gPSAwO1xcbitcXG4rXFx0dGlkID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogcnVuLVxcdTAwM2VudGhyZWFkcyk7XFxuK1xcdGlmICghdGlkKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlICVkIHRocmVhZHM6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRydW4tXFx1MDAzZW50aHJlYWRzLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHRtdW5tYXAoKHZvaWQgKilndXAuYWRkciwgc2l6ZSk7XFxuK1xcdFxcdGlmIChyZXN0b3JlX2h1Z2V0bGIpXFxuK1xcdFxcdFxcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJ1bi1cXHUwMDNlbnRocmVhZHM7IGkrKykge1xcbitcXHRcXHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCBcXHUwMDI2Z3VwKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInB0aHJlYWRfY3JlYXRlIGZhaWxlZDogJXNcXFxcblxcXCIsIHN0cmVycm9yKHJldCkpO1xcbitcXHRcXHRcXHRiZW5jaF9lcnJvciA9IDE7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdHN0YXJ0ZWRfdGhyZWFkcysrO1xcbitcXHR9XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzdGFydGVkX3RocmVhZHM7IGkrKykge1xcbitcXHRcXHRyZXQgPSBwdGhyZWFkX2pvaW4odGlkW2ldLCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInB0aHJlYWRfam9pbiBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihyZXQpKTtcXG4rXFx0XFx0XFx0YmVuY2hfZXJyb3IgPSAxO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGZyZWUodGlkKTtcXG4rXFx0bXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpO1xcbitcXHRpZiAocmVzdG9yZV9odWdldGxiKVxcbitcXHRcXHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcXG4rXFxuK1xcdHJldHVybiBiZW5jaF9lcnJvciA/IDEgOiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ1bl9tYXRyaXgodm9pZClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgYywgdCwgdywgcywgbjtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRmb3IgKGMgPSAwOyBjIFxcdTAwM2MgQVJSQVlfU0laRShiZW5jaF9jbWRzKTsgYysrKSB7XFxuK1xcdFxcdGZvciAodyA9IDA7IHcgXFx1MDAzYz0gMTsgdysrKSB7XFxuK1xcdFxcdFxcdGZvciAocyA9IDA7IHMgXFx1MDAzYz0gMTsgcysrKSB7XFxuK1xcdFxcdFxcdFxcdGZvciAodCA9IDA7IHQgXFx1MDAzYyBBUlJBWV9TSVpFKGJlbmNoX3RocF9tb2Rlcyk7IHQrKykge1xcbitcXHRcXHRcXHRcXHRcXHRmb3IgKG4gPSAwOyBuIFxcdTAwM2MgQVJSQVlfU0laRShiZW5jaF9ucl9wYWdlc19saXN0KTsgbisrKSB7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBiZW5jaF9ydW4gcnVuID0ge1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQuY21kXFx0ICA9IGJlbmNoX2NtZHNbY10sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdC50aHBcXHQgID0gYmVuY2hfdGhwX21vZGVzW3RdLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQuaHVnZXRsYiAgPSBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0LndyaXRlXFx0ICA9IHcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdC5zaGFyZWRcXHQgID0gcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0Lm5yX3BhZ2VzID0gYmVuY2hfbnJfcGFnZXNfbGlzdFtuXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0LnNpemVcXHQgID0gMTI4ICogTUIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdC5maWxlXFx0ICA9IFxcXCIvZGV2L3plcm9cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQubnRocmVhZHMgPSAxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR9O1xcbitcXHRcXHRcXHRcXHRcXHRcXHRyZXQgfD0gcnVuX2JlbmNoKFxcdTAwMjZydW4pO1xcbitcXHRcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0LyogaHVnZXRsYjogMjU2TSB0byBtYXRjaCBydW5fZ3VwX21hdHJpeCgpIGluIHJ1bl92bXRlc3RzLnNoICovXFxuK1xcdFxcdFxcdFxcdGZvciAobiA9IDA7IG4gXFx1MDAzYyBBUlJBWV9TSVpFKGJlbmNoX25yX3BhZ2VzX2xpc3QpOyBuKyspIHtcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJlbmNoX3J1biBydW4gPSB7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdC5jbWRcXHQgID0gYmVuY2hfY21kc1tjXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0LnRocFxcdCAgPSAtMSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Lmh1Z2V0bGIgID0gdHJ1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0LndyaXRlXFx0ICA9IHcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdC5zaGFyZWRcXHQgID0gcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Lm5yX3BhZ2VzID0gYmVuY2hfbnJfcGFnZXNfbGlzdFtuXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0LnNpemVcXHQgID0gMjU2ICogTUIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdC5maWxlXFx0ICA9IFxcXCIvZGV2L3plcm9cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQubnRocmVhZHMgPSAxLFxcbitcXHRcXHRcXHRcXHRcXHR9O1xcbitcXHRcXHRcXHRcXHRcXHRyZXQgfD0gcnVuX2JlbmNoKFxcdTAwMjZydW4pO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4re1xcbitcXHRzdHJ1Y3QgYmVuY2hfcnVuIHJ1biA9IHtcXG4rXFx0XFx0LmNtZFxcdCAgPSBHVVBfRkFTVF9CRU5DSE1BUkssXFxuK1xcdFxcdC50aHBcXHQgID0gLTEsXFxuK1xcdFxcdC5odWdldGxiICA9IGZhbHNlLFxcbitcXHRcXHQud3JpdGVcXHQgID0gdHJ1ZSxcXG4rXFx0XFx0LnNoYXJlZFxcdCAgPSBmYWxzZSxcXG4rXFx0XFx0Lm5yX3BhZ2VzID0gMSxcXG4rXFx0XFx0LnNpemVcXHQgID0gMTI4ICogTUIsXFxuK1xcdFxcdC5maWxlXFx0ICA9IFxcXCIvZGV2L3plcm9cXFwiLFxcbitcXHRcXHQubnRocmVhZHMgPSAxLFxcbitcXHR9O1xcbitcXHRpbnQgb3B0LCByZXN1bHQ7XFxuK1xcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwibTpyOm46RjpmOmFqOnRUTHV3V1NIXFxcIikpICE9IC0xKSB7XFxuK1xcdFxcdHN3aXRjaCAob3B0KSB7XFxuK1xcdFxcdC8qIENvbW1hbmQgc2VsZWN0aW9uICovXFxuK1xcdFxcdGNhc2UgJ3UnOlxcbitcXHRcXHRcXHRydW4uY21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnYSc6XFxuK1xcdFxcdFxcdHJ1bi5jbWQgPSBQSU5fRkFTVF9CRU5DSE1BUks7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdMJzpcXG4rXFx0XFx0XFx0cnVuLmNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LyogTWVtb3J5IHR5cGUgKi9cXG4rXFx0XFx0Y2FzZSAnSCc6XFxuK1xcdFxcdFxcdHJ1bi5odWdldGxiID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ3QnOlxcbitcXHRcXHRcXHRydW4udGhwID0gMTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ1QnOlxcbitcXHRcXHRcXHRydW4udGhwID0gMDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHQvKiBBY2Nlc3MgbW9kZSAqL1xcbitcXHRcXHRjYXNlICd3JzpcXG4rXFx0XFx0XFx0cnVuLndyaXRlID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ1cnOlxcbitcXHRcXHRcXHRydW4ud3JpdGUgPSBmYWxzZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ1MnOlxcbitcXHRcXHRcXHRydW4uc2hhcmVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHQvKiBNYXBwaW5nICovXFxuK1xcdFxcdGNhc2UgJ2YnOlxcbitcXHRcXHRcXHRydW4uZmlsZSA9IG9wdGFyZztcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHQvKiBTaXppbmcgYW5kIGl0ZXJhdGlvbiAqL1xcbitcXHRcXHRjYXNlICdtJzpcXG4rXFx0XFx0XFx0cnVuLnNpemUgPSBwYXJzZV9wb3NpdGl2ZV9sb25nX2FyZyhvcHRhcmcsIFxcXCJzaXplXFxcIik7XFxuK1xcdFxcdFxcdGlmIChydW4uc2l6ZSBcXHUwMDNlIFVMT05HX01BWCAvIE1CKSB7XFxuK1xcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiSW52YWxpZCBzaXplICclcydcXFxcblxcXCIsIG9wdGFyZyk7XFxuK1xcdFxcdFxcdFxcdGV4aXQoMSk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cnVuLnNpemUgKj0gTUI7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICduJzoge1xcbitcXHRcXHRcXHRsb25nIHZhbDtcXG4rXFxuK1xcdFxcdFxcdHZhbCA9IHBhcnNlX2xvbmdfYXJnKG9wdGFyZywgXFxcInBhZ2UgY291bnRcXFwiKTtcXG4rXFx0XFx0XFx0aWYgKHZhbCAhPSAtMSBcXHUwMDI2XFx1MDAyNiAodmFsIFxcdTAwM2MgMSB8fCB2YWwgXFx1MDAzZSBJTlRfTUFYKSkge1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkludmFsaWQgcGFnZSBjb3VudCAnJXMnXFxcXG5cXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRcXHRleGl0KDEpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJ1bi5ucl9wYWdlcyA9IHZhbDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y2FzZSAncic6IHtcXG4rXFx0XFx0XFx0bG9uZyB2YWw7XFxuK1xcbitcXHRcXHRcXHR2YWwgPSBwYXJzZV9wb3NpdGl2ZV9sb25nX2FyZyhvcHRhcmcsIFxcXCJyZXBlYXQgY291bnRcXFwiKTtcXG4rXFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNlIElOVF9NQVgpIHtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJJbnZhbGlkIHJlcGVhdCBjb3VudCAnJXMnXFxcXG5cXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRcXHRleGl0KDEpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJlcGVhdHMgPSB2YWw7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNhc2UgJ2onOiB7XFxuK1xcdFxcdFxcdGxvbmcgdmFsO1xcbitcXG4rXFx0XFx0XFx0dmFsID0gcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcob3B0YXJnLCBcXFwidGhyZWFkIGNvdW50XFxcIik7XFxuK1xcdFxcdFxcdGlmICh2YWwgXFx1MDAzZSBJTlRfTUFYIHx8XFxuK1xcdFxcdFxcdCAgICAoc2l6ZV90KXZhbCBcXHUwMDNlIFNJWkVfTUFYIC8gc2l6ZW9mKHB0aHJlYWRfdCkpIHtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJJbnZhbGlkIHRocmVhZCBjb3VudCAnJXMnXFxcXG5cXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRcXHRleGl0KDEpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJ1bi5udGhyZWFkcyA9IHZhbDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIEFkdmFuY2VkICovXFxuK1xcdFxcdGNhc2UgJ0YnOiB7XFxuK1xcdFxcdFxcdGxvbmcgdmFsO1xcbitcXG4rXFx0XFx0XFx0dmFsID0gcGFyc2VfbG9uZ19hcmdfYmFzZShvcHRhcmcsIFxcXCJHVVAgZmxhZ3NcXFwiLCAwKTtcXG4rXFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNjIDAgfHwgdmFsIFxcdTAwM2UgVUlOVF9NQVgpIHtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJJbnZhbGlkIEdVUCBmbGFncyAnJXMnXFxcXG5cXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRcXHRleGl0KDEpO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRydW4uZ3VwX2ZsYWdzID0gdmFsO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJXcm9uZyBhcmd1bWVudFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGV4aXQoMSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9wdGluZCAhPSBhcmdjKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiVW5leHBlY3RlZCBhcmd1bWVudCAnJXMnXFxcXG5cXFwiLCBhcmd2W29wdGluZF0pO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK1xcbitcXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XFxuK1xcdGlmIChndXBfZmQgPT0gLTEpIHtcXG4rXFx0XFx0aWYgKGVycm5vID09IEVBQ0NFUykge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlBsZWFzZSBydW4gYXMgcm9vdFxcXFxuXFxcIik7XFxuK1xcdFxcdH0gZWxzZSBpZiAoZXJybm8gPT0gRU5PRU5UKSB7XFxuK1xcdFxcdFxcdERJUiAqZGVidWdmcyA9IG9wZW5kaXIoXFxcIi9zeXMva2VybmVsL2RlYnVnXFxcIik7XFxuK1xcbitcXHRcXHRcXHRpZiAoIWRlYnVnZnMpIHtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0Y2xvc2VkaXIoZGVidWdmcyk7XFxuK1xcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiQ2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxcXG5cXFwiLCBHVVBfVEVTVF9GSUxFLFxcbitcXHRcXHRcXHRcXHRzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGV4aXQoMSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJlc3VsdCA9IChhcmdjID09IDEpID8gcnVuX21hdHJpeCgpIDogcnVuX2JlbmNoKFxcdTAwMjZydW4pO1xcbitcXHRjbG9zZShndXBfZmQpO1xcbitcXHRyZXR1cm4gcmVzdWx0O1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5pbmRleCBlNmRmOTY4ZjA5NzFjOC4uZTc3YzRjYzQxYjQ3MDMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbkBAIC0zNyw3ICszNyw4IEBAIGVuZGlmXFxuICMgTERMSUJTLlxcbiBNQUtFRkxBR1MgKz0gLS1uby1idWlsdGluLXJ1bGVzXFxuIFxcbi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxcbitDRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAtSSAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYlxcbitDRkxBR1MgKz0gJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUylcXG4gQ0ZMQUdTICs9IC1XdW5yZWFjaGFibGUtY29kZVxcbiBMRExJQlMgPSAtbHJ0IC1scHRocmVhZCAtbG1cXG4gXFxuQEAgLTE4Nyw4ICsxODgsMTAgQEAgVEVTVF9GSUxFUyArPSB3cml0ZV9odWdldGxiX21lbW9yeS5zaFxcbiBcXG4gaW5jbHVkZSAuLi9saWIubWtcXG4gXFxuLSQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcXG4rJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXFxcXG4rXFx0XFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXFxuKyQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcXFxcXFxuK1xcdFxcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xcbiBcXG4gJChPVVRQVVQpL3VmZmQtc3RyZXNzOiB1ZmZkLWNvbW1vbi5jXFxuICQoT1VUUFVUKS91ZmZkLXVuaXQtdGVzdHM6IHVmZmQtY29tbW9uLmNcXG5AQCAtMjE3LDcgKzIyMCw3IEBAICQoQklOQVJJRVNfMzIpOiBDRkxBR1MgKz0gLW0zMiAtbXhzYXZlXFxuICQoQklOQVJJRVNfMzIpOiBMRExJQlMgKz0gLWxydCAtbGRsIC1sbVxcbiAkKEJJTkFSSUVTXzMyKTogJChPVVRQVVQpLyVfMzI6ICUuY1xcbiBcXHQkKGNhbGwgbXNnLENDLCwkQClcXG4tXFx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxcbitcXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTMyLCQodCkpKSlcXG4gZW5kaWZcXG4gXFxuQEAgLTIyNiw3ICsyMjksNyBAQCAkKEJJTkFSSUVTXzY0KTogQ0ZMQUdTICs9IC1tNjQgLW14c2F2ZVxcbiAkKEJJTkFSSUVTXzY0KTogTERMSUJTICs9IC1scnQgLWxkbFxcbiAkKEJJTkFSSUVTXzY0KTogJChPVVRQVVQpLyVfNjQ6ICUuY1xcbiBcXHQkKGNhbGwgbXNnLENDLCwkQClcXG4tXFx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxcbitcXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTY0LCQodCkpKSlcXG4gZW5kaWZcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcXG5pbmRleCA1YjU4MjU4OGUwMTVkNC4uYjJlYWE0OTBlN2MyNTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xcbkBAIC0xNSw5ICsxNSw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBNQVBfU0laRV9NQlxcdDEwMFxcbiAjZGVmaW5lIE1BUF9TSVpFXFx0KE1BUF9TSVpFX01CICogMTAyNCAqIDEwMjQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG5pbmRleCAwYzYyN2VhODlmZjdiMi4uM2MzZDEyOWM5MWIyOWQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xcbkBAIC0yOSw3ICsyOSw2IEBAXFxuICNpbmNsdWRlIFxcXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXFxuaW5kZXggNjMyOWUzN2ZmZjRjOTQuLjQ5NmI3NGIzNzQ3NmIzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG5AQCAtMjUsNyArMjUsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiB1aW50NjRfdCBwYWdlX3NpemU7XFxuIHVpbnQ2NF90IHBtZF9wYWdlc2l6ZTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXFxuaW5kZXggYjIxZGYzMDQwYjFjN2MuLmVkOTY3YjNjN2YzNzA0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xcbkBAIC0yMSw3ICsyMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdWlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXFwiLi4vcGlkZmQvcGlkZmQuaFxcXCJcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG5pbmRleCBlYjg5NjNlOWQ5OGYwNi4uNjhjODQwYmFlMDgyMDggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xcbkBAIC0yOSw3ICsyOSw2IEBAXFxuICNpbmNsdWRlIFxcXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcXG4gc3RhdGljIGludCBucl9odWdldGxic2l6ZXM7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxuaW5kZXggM2Y4NDFhOTZmODcwNjguLmQ5Y2FhOWZiOGI3ODU2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxuQEAgLTEsMjc1ICsxLDQ0MyBAQFxcbiAjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyAvLyBVc2UgbGw2NFxcbiAjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRib29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZGlyZW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvaW9jdGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2Nhc3NlcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY21tL2d1cF90ZXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiBcXG4gI2RlZmluZSBNQiAoMVVMIFxcdTAwM2NcXHUwMDNjIDIwKVxcbiBcXG4rI2lmbmRlZiBBUlJBWV9TSVpFXFxuKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpXFxuKyNlbmRpZlxcbitcXG4gLyogSnVzdCB0aGUgZmxhZ3Mgd2UgbmVlZCwgY29waWVkIGZyb20gdGhlIGtlcm5lbCBpbnRlcm5hbHMuICovXFxuICNkZWZpbmUgRk9MTF9XUklURVxcdDB4MDFcXHQvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi9cXG4gXFxuKy8qIFBhZ2UgY291bnRzIGV4ZXJjaXNpbmcgc2luZ2xlLCBUSFAtYmF0Y2gsIHBhcnRpYWwsIGFuZCBmdWxsLW1hcHBpbmcgR1VQLiAqL1xcbitzdGF0aWMgY29uc3QgaW50IG5yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07XFxuK1xcbiAjZGVmaW5lIEdVUF9URVNUX0ZJTEUgXFxcIi9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0XFxcIlxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgY21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xcbi1zdGF0aWMgaW50IGd1cF9mZCwgcmVwZWF0cyA9IDE7XFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNpemUgPSAxMjggKiBNQjtcXG4tLyogU2VyaWFsaXplIHByaW50cyAqL1xcbi1zdGF0aWMgcHRocmVhZF9tdXRleF90IHByaW50X211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjtcXG4rRklYVFVSRShndXBfdGVzdClcXG4re1xcbitcXHRpbnQgZ3VwX2ZkO1xcbitcXHRjaGFyICphZGRyO1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpXFxuK3tcXG4rXFx0Ym9vbCB0aHA7XFxuK1xcdGJvb2wgaHVnZXRsYjtcXG4rXFx0Ym9vbCB3cml0ZTtcXG4rXFx0Ym9vbCBzaGFyZWQ7XFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkb25seSlcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocClcXG4re1xcbitcXHQudGhwID0gdHJ1ZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkb25seV90aHApXFxuK3tcXG4rXFx0LnRocCA9IHRydWUsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IHRydWUsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZG9ubHlfaHVnZXRsYilcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gdHJ1ZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZSlcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRvbmx5KVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocClcXG4re1xcbitcXHQudGhwID0gdHJ1ZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuIFxcbi1zdGF0aWMgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZClcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRvbmx5X3RocClcXG4ge1xcbi1cXHRzd2l0Y2ggKGNtZCkge1xcbi1cXHRjYXNlIEdVUF9GQVNUX0JFTkNITUFSSzpcXG4tXFx0XFx0cmV0dXJuIFxcXCJHVVBfRkFTVF9CRU5DSE1BUktcXFwiO1xcbi1cXHRjYXNlIFBJTl9GQVNUX0JFTkNITUFSSzpcXG4tXFx0XFx0cmV0dXJuIFxcXCJQSU5fRkFTVF9CRU5DSE1BUktcXFwiO1xcbi1cXHRjYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6XFxuLVxcdFxcdHJldHVybiBcXFwiUElOX0xPTkdURVJNX0JFTkNITUFSS1xcXCI7XFxuLVxcdGNhc2UgR1VQX0JBU0lDX1RFU1Q6XFxuLVxcdFxcdHJldHVybiBcXFwiR1VQX0JBU0lDX1RFU1RcXFwiO1xcbi1cXHRjYXNlIFBJTl9CQVNJQ19URVNUOlxcbi1cXHRcXHRyZXR1cm4gXFxcIlBJTl9CQVNJQ19URVNUXFxcIjtcXG4tXFx0Y2FzZSBEVU1QX1VTRVJfUEFHRVNfVEVTVDpcXG4tXFx0XFx0cmV0dXJuIFxcXCJEVU1QX1VTRVJfUEFHRVNfVEVTVFxcXCI7XFxuK1xcdC50aHAgPSB0cnVlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSBmYWxzZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYilcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gdHJ1ZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZG9ubHlfaHVnZXRsYilcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gdHJ1ZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChndXBfdGVzdClcXG4re1xcbitcXHRpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFO1xcbitcXHRpbnQgemVyb19mZDtcXG4rXFx0Y2hhciAqcDtcXG4rXFxuK1xcdC8qIHplcm9fZmQgaGFzIHRvIGJlIFxcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cXG4rXFx0emVyb19mZCA9IG9wZW4oXFxcIi9kZXYvemVyb1xcXCIsIE9fUkRXUik7XFxuK1xcdEFTU0VSVF9HRSh6ZXJvX2ZkLCAwKTtcXG4rXFxuK1xcdC8qIGd1cF9mZCBoYXMgdG8gYmUgXFx1MDAzZT0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqL1xcbitcXHRzZWxmLVxcdTAwM2VndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XFxuK1xcdEFTU0VSVF9HRShzZWxmLVxcdTAwM2VndXBfZmQsIDApO1xcbitcXG4rXFx0c2VsZi1cXHUwMDNlc2l6ZSA9IHZhcmlhbnQtXFx1MDAzZWh1Z2V0bGIgPyAyNTYgKiBNQiA6IDEyOCAqIE1CO1xcbitcXG4rXFx0LyogQ2hlY2sgZm9yIGh1Z2V0bGIgKi9cXG4rXFx0aWYgKHZhcmlhbnQtXFx1MDAzZWh1Z2V0bGIpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xcbitcXG4rXFx0XFx0aWYgKCFocF9zaXplKSB7XFxuK1xcdFxcdFxcdGNsb3NlKHplcm9fZmQpO1xcbitcXHRcXHRcXHRjbG9zZShzZWxmLVxcdTAwM2VndXBfZmQpO1xcbitcXHRcXHRcXHRTS0lQKHJldHVybiwgXFxcIkh1Z2VUTEIgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHNlbGYtXFx1MDAzZXNpemUgPSAoc2VsZi1cXHUwMDNlc2l6ZSArIGhwX3NpemUgLSAxKSBcXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xcbitcXHRcXHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzZWxmLVxcdTAwM2VzaXplIC8gaHBfc2l6ZSkpIHtcXG4rXFx0XFx0XFx0aHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7XFxuK1xcdFxcdFxcdGNsb3NlKHplcm9fZmQpO1xcbitcXHRcXHRcXHRjbG9zZShzZWxmLVxcdTAwM2VndXBfZmQpO1xcbitcXHRcXHRcXHRTS0lQKHJldHVybiwgXFxcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcXFxuXFxcIik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG1tYXBfZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2YXJpYW50LVxcdTAwM2VzaGFyZWQpXFxuK1xcdFxcdG1tYXBfZmxhZ3MgPSAobW1hcF9mbGFncyBcXHUwMDI2IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEO1xcbitcXG4rXFx0c2VsZi1cXHUwMDNlYWRkciA9IG1tYXAoTlVMTCwgc2VsZi1cXHUwMDNlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0XFx0ICBtbWFwX2ZsYWdzLCB6ZXJvX2ZkLCAwKTtcXG4rXFxuK1xcdGNsb3NlKHplcm9fZmQpO1xcbitcXG4rXFx0QVNTRVJUX05FKHNlbGYtXFx1MDAzZWFkZHIsIE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0aW50IGVyciA9IGVycm5vO1xcbitcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZ3VwX2ZkKTtcXG4rXFx0XFx0aWYgKHZhcmlhbnQtXFx1MDAzZWh1Z2V0bGIpXFxuK1xcdFxcdFxcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xcbitcXHRcXHRUSF9MT0coXFxcIm1tYXAgZmFpbGVkOiAlc1xcXCIsIHN0cmVycm9yKGVycikpO1xcbiBcXHR9XFxuLVxcdHJldHVybiBcXFwiVW5rbm93biBjb21tYW5kXFxcIjtcXG4rXFxuK1xcdGlmICh2YXJpYW50LVxcdTAwM2V0aHApXFxuK1xcdFxcdG1hZHZpc2Uoc2VsZi1cXHUwMDNlYWRkciwgc2VsZi1cXHUwMDNlc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bWFkdmlzZShzZWxmLVxcdTAwM2VhZGRyLCBzZWxmLVxcdTAwM2VzaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbitcXG4rXFx0Zm9yIChwID0gc2VsZi1cXHUwMDNlYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcXHUwMDNjICh1bnNpZ25lZCBsb25nKXNlbGYtXFx1MDAzZWFkZHJcXG4rXFx0XFx0XFx0KyBzZWxmLVxcdTAwM2VzaXplOyBwICs9IHBzaXplKCkpXFxuK1xcdFxcdHBbMF0gPSAwO1xcbiB9XFxuIFxcbi12b2lkICpndXBfdGhyZWFkKHZvaWQgKmRhdGEpXFxuK0ZJWFRVUkVfVEVBUkRPV04oZ3VwX3Rlc3QpXFxuIHtcXG4tXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTtcXG4tXFx0aW50IGksIHN0YXR1cztcXG4tXFxuLVxcdC8qIE9ubHkgcmVwb3J0IHRpbWluZyBpbmZvcm1hdGlvbiBvbiB0aGUgKl9CRU5DSE1BUksgY29tbWFuZHM6ICovXFxuLVxcdGlmICgoY21kID09IFBJTl9GQVNUX0JFTkNITUFSSykgfHwgKGNtZCA9PSBHVVBfRkFTVF9CRU5DSE1BUkspIHx8XFxuLVxcdCAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkge1xcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmVwZWF0czsgaSsrKSB7XFxuLVxcdFxcdFxcdGd1cC5zaXplID0gc2l6ZTtcXG4tXFx0XFx0XFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFxcdTAwMjZndXApO1xcbi1cXHRcXHRcXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdFxcdHB0aHJlYWRfbXV0ZXhfbG9jayhcXHUwMDI2cHJpbnRfbXV0ZXgpO1xcbi1cXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiJXM6IFRpbWU6IGdldDolbGxkIHB1dDolbGxkIHVzXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNtZF90b19zdHIoY21kKSwgZ3VwLmdldF9kZWx0YV91c2VjLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgZ3VwLnB1dF9kZWx0YV91c2VjKTtcXG4tXFx0XFx0XFx0aWYgKGd1cC5zaXplICE9IHNpemUpXFxuLVxcdFxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCIsIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcXFwiLCBndXAuc2l6ZSk7XFxuLVxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2cHJpbnRfbXV0ZXgpO1xcbi1cXHRcXHR9XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGd1cC5zaXplID0gc2l6ZTtcXG4tXFx0XFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFxcdTAwMjZndXApO1xcbi1cXHRcXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRcXHRnb3RvIHJldHVybl87XFxuLVxcbi1cXHRcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNnByaW50X211dGV4KTtcXG4tXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIiVzOiBkb25lXFxcXG5cXFwiLCBjbWRfdG9fc3RyKGNtZCkpO1xcbi1cXHRcXHRpZiAoZ3VwLnNpemUgIT0gc2l6ZSlcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlRydW5jYXRlZCAoc2l6ZTogJWxsZClcXFxcblxcXCIsIGd1cC5zaXplKTtcXG4tXFx0XFx0cHRocmVhZF9tdXRleF91bmxvY2soXFx1MDAyNnByaW50X211dGV4KTtcXG4rXFx0bXVubWFwKHNlbGYtXFx1MDAzZWFkZHIsIHNlbGYtXFx1MDAzZXNpemUpO1xcbitcXHRjbG9zZShzZWxmLVxcdTAwM2VndXBfZmQpO1xcbitcXG4rXFx0aWYgKHZhcmlhbnQtXFx1MDAzZWh1Z2V0bGIpXFxuK1xcdFxcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xcbit9XFxuK1xcbitURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzKVxcbit7XFxuK1xcdC8qIFRlc3RzIHRoZSBnZXRfdXNlcl9wYWdlcyBwYXRoICovXFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcXG4rXFxuK1xcdFxcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cXHUwMDNlYWRkcjtcXG4rXFx0XFx0Z3VwLnNpemUgPSBzZWxmLVxcdTAwM2VzaXplO1xcbitcXHRcXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdHNlbGYtXFx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTtcXG4rXFxuK1xcdFxcdGlmICh2YXJpYW50LVxcdTAwM2V3cml0ZSlcXG4rXFx0XFx0XFx0Z3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFO1xcbitcXG4rXFx0XFx0VEhfTE9HKFxcXCJucl9wYWdlc19wZXJfY2FsbD0ldVxcXCIsIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XFxuK1xcdFxcdEFTU0VSVF9FUShpb2N0bChzZWxmLVxcdTAwM2VndXBfZmQsIEdVUF9CQVNJQ19URVNULCBcXHUwMDI2Z3VwKSwgMCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlcylcXG4re1xcbitcXHQvKiBUZXN0cyB0aGUgcGluX3VzZXJfcGFnZXMgcGF0aCAqL1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XFxuK1xcbitcXHRcXHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXFx1MDAzZWFkZHI7XFxuK1xcdFxcdGd1cC5zaXplID0gc2VsZi1cXHUwMDNlc2l6ZTtcXG4rXFx0XFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcXHUwMDNjIDAgP1xcbitcXHRcXHRcXHRzZWxmLVxcdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XFxuK1xcbitcXHRcXHRpZiAodmFyaWFudC1cXHUwMDNld3JpdGUpXFxuK1xcdFxcdFxcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcXG4rXFxuK1xcdFxcdFRIX0xPRyhcXFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcXFwiLCBndXAubnJfcGFnZXNfcGVyX2NhbGwpO1xcbitcXHRcXHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cXHUwMDNlZ3VwX2ZkLCBQSU5fQkFTSUNfVEVTVCwgXFx1MDAyNmd1cCksIDApO1xcbiBcXHR9XFxuK31cXG4gXFxuLXJldHVybl86XFxuLVxcdGtzZnRfdGVzdF9yZXN1bHQoIXN0YXR1cywgXFxcImlvY3RsIHN0YXR1cyAlZFxcXFxuXFxcIiwgc3RhdHVzKTtcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1RFU1RfRihndXBfdGVzdCwgZHVtcF91c2VyX3BhZ2VzX3dpdGhfZ2V0KVxcbit7XFxuK1xcdC8qIFRlc3RzIERVTVBfVVNFUl9QQUdFU19URVNUIHVzaW5nIGdldF91c2VyX3BhZ2VzICovXFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcXG4rXFxuK1xcdFxcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cXHUwMDNlYWRkcjtcXG4rXFx0XFx0Z3VwLnNpemUgPSBzZWxmLVxcdTAwM2VzaXplO1xcbitcXHRcXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdHNlbGYtXFx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTtcXG4rXFxuK1xcdFxcdGlmICh2YXJpYW50LVxcdTAwM2V3cml0ZSlcXG4rXFx0XFx0XFx0Z3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFO1xcbitcXG4rXFx0XFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcXG4rXFxuK1xcdFxcdFRIX0xPRyhcXFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcXFwiLCBndXAubnJfcGFnZXNfcGVyX2NhbGwpO1xcbitcXHRcXHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cXHUwMDNlZ3VwX2ZkLCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgXFx1MDAyNmd1cCksIDApO1xcbitcXHR9XFxuIH1cXG4gXFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4rVEVTVF9GKGd1cF90ZXN0LCBkdW1wX3VzZXJfcGFnZXNfd2l0aF9waW4pXFxuIHtcXG4tXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xcbi1cXHRpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDtcXG4tXFx0aW50IGZsYWdzID0gTUFQX1BSSVZBVEU7XFxuLVxcdGNoYXIgKmZpbGUgPSBcXFwiL2Rldi96ZXJvXFxcIjtcXG4tXFx0Ym9vbCBodWdldGxiID0gZmFsc2U7XFxuLVxcdHB0aHJlYWRfdCAqdGlkO1xcbi1cXHRjaGFyICpwO1xcbitcXHQvKiBUZXN0cyBEVU1QX1VTRVJfUEFHRVNfVEVTVCB1c2luZyBwaW5fdXNlcl9wYWdlcyAqL1xcbitcXHRpbnQgaTtcXG4gXFxuLVxcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFxcXCJtOnI6bjpGOmY6YWJjajp0VExVdXdXU0hwelxcXCIpKSAhPSAtMSkge1xcbi1cXHRcXHRzd2l0Y2ggKG9wdCkge1xcbi1cXHRcXHRjYXNlICdhJzpcXG4tXFx0XFx0XFx0Y21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnYic6XFxuLVxcdFxcdFxcdGNtZCA9IFBJTl9CQVNJQ19URVNUO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnTCc6XFxuLVxcdFxcdFxcdGNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdjJzpcXG4tXFx0XFx0XFx0Y21kID0gRFVNUF9VU0VSX1BBR0VTX1RFU1Q7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIER1bXAgcGFnZSAwIChpbmRleCAxKS4gTWF5IGJlIG92ZXJyaWRkZW4gbGF0ZXIsIGJ5XFxuLVxcdFxcdFxcdCAqIHVzZXIncyBub24tb3B0aW9uIGFyZ3VtZW50cy5cXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogLndoaWNoX3BhZ2VzIGlzIHplcm8tYmFzZWQsIHNvIHRoYXQgemVybyBjYW4gbWVhbiBcXFwiZG9cXG4tXFx0XFx0XFx0ICogbm90aGluZ1xcXCIuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAncCc6XFxuLVxcdFxcdFxcdC8qIHdvcmtzIG9ubHkgd2l0aCBEVU1QX1VTRVJfUEFHRVNfVEVTVCAqL1xcbi1cXHRcXHRcXHRndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ0YnOlxcbi1cXHRcXHRcXHQvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqL1xcbi1cXHRcXHRcXHRndXAuZ3VwX2ZsYWdzID0gc3RydG9sKG9wdGFyZywgMCwgMCk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdqJzpcXG4tXFx0XFx0XFx0bnRocmVhZHMgPSBhdG9pKG9wdGFyZyk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdtJzpcXG4tXFx0XFx0XFx0c2l6ZSA9IGF0b2kob3B0YXJnKSAqIE1CO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAncic6XFxuLVxcdFxcdFxcdHJlcGVhdHMgPSBhdG9pKG9wdGFyZyk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICduJzpcXG4tXFx0XFx0XFx0bnJfcGFnZXMgPSBhdG9pKG9wdGFyZyk7XFxuLVxcdFxcdFxcdGlmIChucl9wYWdlcyBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdFxcdG5yX3BhZ2VzID0gc2l6ZSAvIHBzaXplKCk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICd0JzpcXG4tXFx0XFx0XFx0dGhwID0gMTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ1QnOlxcbi1cXHRcXHRcXHR0aHAgPSAwO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnVSc6XFxuLVxcdFxcdFxcdGNtZCA9IEdVUF9CQVNJQ19URVNUO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAndSc6XFxuLVxcdFxcdFxcdGNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSztcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ3cnOlxcbi1cXHRcXHRcXHR3cml0ZSA9IDE7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdXJzpcXG4tXFx0XFx0XFx0d3JpdGUgPSAwO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnZic6XFxuLVxcdFxcdFxcdGZpbGUgPSBvcHRhcmc7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdTJzpcXG4tXFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfk1BUF9QUklWQVRFO1xcbi1cXHRcXHRcXHRmbGFncyB8PSBNQVBfU0hBUkVEO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnSCc6XFxuLVxcdFxcdFxcdGZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpO1xcbi1cXHRcXHRcXHRodWdldGxiID0gdHJ1ZTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiV3JvbmcgYXJndW1lbnRcXFxcblxcXCIpO1xcbi1cXHRcXHR9XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XFxuK1xcbitcXHRcXHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXFx1MDAzZWFkZHI7XFxuK1xcdFxcdGd1cC5zaXplID0gc2VsZi1cXHUwMDNlc2l6ZTtcXG4rXFx0XFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcXHUwMDNjIDAgP1xcbitcXHRcXHRcXHRzZWxmLVxcdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XFxuK1xcbitcXHRcXHRpZiAodmFyaWFudC1cXHUwMDNld3JpdGUpXFxuK1xcdFxcdFxcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcXG4rXFxuK1xcdFxcdGd1cC53aGljaF9wYWdlc1swXSA9IDE7XFxuK1xcdFxcdGd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOO1xcbitcXG4rXFx0XFx0VEhfTE9HKFxcXCJucl9wYWdlc19wZXJfY2FsbD0ldVxcXCIsIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XFxuK1xcdFxcdEFTU0VSVF9FUShpb2N0bChzZWxmLVxcdTAwM2VndXBfZmQsIERVTVBfVVNFUl9QQUdFU19URVNULCBcXHUwMDI2Z3VwKSwgMCk7XFxuIFxcdH1cXG4rfVxcbiBcXG4tXFx0aWYgKG9wdGluZCBcXHUwMDNjIGFyZ2MpIHtcXG4tXFx0XFx0aW50IGV4dHJhX2FyZ19jb3VudCA9IDA7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIEZvciBleGFtcGxlOlxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiAgIC4vZ3VwX3Rlc3QgLWMgMCAxIDB4MTAwMVxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiAuLi50byBkdW1wIHBhZ2VzIDAsIDEsIGFuZCA0MDk3XFxuLVxcdFxcdCAqL1xcbi1cXG4tXFx0XFx0d2hpbGUgKChvcHRpbmQgXFx1MDAzYyBhcmdjKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgICAgKGV4dHJhX2FyZ19jb3VudCBcXHUwMDNjIEdVUF9URVNUX01BWF9QQUdFU19UT19EVU1QKSkge1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBEbyB0aGUgMS1iYXNlZCBpbmRleGluZyBoZXJlLCBzbyB0aGF0IHRoZSB1c2VyIGNhblxcbi1cXHRcXHRcXHQgKiB1c2Ugbm9ybWFsIDAtYmFzZWQgaW5kZXhpbmcgb24gdGhlIGNvbW1hbmQgbGluZS5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGxvbmcgcGFnZV9pbmRleCA9IHN0cnRvbChhcmd2W29wdGluZF0sIDAsIDApICsgMTtcXG4tXFxuLVxcdFxcdFxcdGd1cC53aGljaF9wYWdlc1tleHRyYV9hcmdfY291bnRdID0gcGFnZV9pbmRleDtcXG4tXFx0XFx0XFx0ZXh0cmFfYXJnX2NvdW50Kys7XFxuLVxcdFxcdFxcdG9wdGluZCsrO1xcbi1cXHRcXHR9XFxuK1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdClcXG4re1xcbitcXHQvKiBUZXN0cyB0aGUgbG9ja2xlc3MgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIHBhdGggKi9cXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xcbitcXG4rXFx0XFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLVxcdTAwM2VhZGRyO1xcbitcXHRcXHRndXAuc2l6ZSA9IHNlbGYtXFx1MDAzZXNpemU7XFxuK1xcdFxcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gXFx1MDAzYyAwID9cXG4rXFx0XFx0XFx0c2VsZi1cXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldO1xcbitcXG4rXFx0XFx0aWYgKHZhcmlhbnQtXFx1MDAzZXdyaXRlKVxcbitcXHRcXHRcXHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XFxuK1xcbitcXHRcXHRUSF9MT0coXFxcIm5yX3BhZ2VzX3Blcl9jYWxsPSV1XFxcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXFx1MDAzZWd1cF9mZCwgR1VQX0ZBU1RfQkVOQ0hNQVJLLCBcXHUwMDI2Z3VwKSwgMCk7XFxuIFxcdH1cXG4rfVxcbitcXG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19mYXN0KVxcbit7XFxuK1xcdC8qIFRlc3RzIHRoZSBsb2NrbGVzcyBwaW5fdXNlcl9wYWdlc19mYXN0KCkgcGF0aCAqL1xcbitcXHRpbnQgaTtcXG4gXFxuLVxcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XFxuIFxcbi1cXHRpZiAoaHVnZXRsYikge1xcbi1cXHRcXHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XFxuK1xcdFxcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cXHUwMDNlYWRkcjtcXG4rXFx0XFx0Z3VwLnNpemUgPSBzZWxmLVxcdTAwM2VzaXplO1xcbitcXHRcXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdHNlbGYtXFx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTtcXG4gXFxuLVxcdFxcdGlmICghaHBfc2l6ZSlcXG4tXFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIkh1Z2VUTEIgaXMgdW5hdmFpbGFibGVcXFxcblxcXCIpO1xcbitcXHRcXHRpZiAodmFyaWFudC1cXHUwMDNld3JpdGUpXFxuK1xcdFxcdFxcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcXG4gXFxuLVxcdFxcdHNpemUgPSAoc2l6ZSArIGhwX3NpemUgLSAxKSBcXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xcbi1cXHRcXHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpXFxuLVxcdFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXFxcblxcXCIpO1xcbitcXHRcXHRUSF9MT0coXFxcIm5yX3BhZ2VzX3Blcl9jYWxsPSV1XFxcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXFx1MDAzZWd1cF9mZCwgUElOX0ZBU1RfQkVOQ0hNQVJLLCBcXHUwMDI2Z3VwKSwgMCk7XFxuIFxcdH1cXG4rfVxcbiBcXG4tXFx0a3NmdF9zZXRfcGxhbihudGhyZWFkcyk7XFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfbG9uZ3Rlcm0pXFxuK3tcXG4rXFx0LyogVGVzdHMgcGluX3VzZXJfcGFnZXMoKSB3aXRoIEZPTExfTE9OR1RFUk0gKi9cXG4rXFx0aW50IGk7XFxuIFxcbi1cXHRmaWxlZCA9IG9wZW4oZmlsZSwgT19SRFdSfE9fQ1JFQVQsIDA2NjQpO1xcbi1cXHRpZiAoZmlsZWQgXFx1MDAzYyAwKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlVuYWJsZSB0byBvcGVuICVzOiAlc1xcXFxuXFxcIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcXG4gXFxuLVxcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzO1xcbi1cXHRpZiAod3JpdGUpXFxuLVxcdFxcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcXG4rXFx0XFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLVxcdTAwM2VhZGRyO1xcbitcXHRcXHRndXAuc2l6ZSA9IHNlbGYtXFx1MDAzZXNpemU7XFxuK1xcdFxcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gXFx1MDAzYyAwID9cXG4rXFx0XFx0XFx0c2VsZi1cXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldO1xcbiBcXG4tXFx0Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xcbi1cXHRpZiAoZ3VwX2ZkID09IC0xKSB7XFxuLVxcdFxcdHN3aXRjaCAoZXJybm8pIHtcXG4tXFx0XFx0Y2FzZSBFQUNDRVM6XFxuLVxcdFxcdFxcdGlmIChnZXR1aWQoKSlcXG4tXFx0XFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBFTk9FTlQ6XFxuLVxcdFxcdFxcdGlmIChvcGVuZGlyKFxcXCIvc3lzL2tlcm5lbC9kZWJ1Z1xcXCIpID09IE5VTEwpXFxuLVxcdFxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJtb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNoZWNrIGlmIENPTkZJR19HVVBfVEVTVCBpcyBlbmFibGVkIGluIGtlcm5lbCBjb25maWdcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImZhaWxlZCB0byBvcGVuICVzOiAlc1xcXFxuXFxcIiwgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxcXG5cXFwiKTtcXG4tXFx0XFx0a3NmdF9leGl0X3Bhc3MoKTtcXG4rXFx0XFx0aWYgKHZhcmlhbnQtXFx1MDAzZXdyaXRlKVxcbitcXHRcXHRcXHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XFxuK1xcbitcXHRcXHRUSF9MT0coXFxcIm5yX3BhZ2VzX3Blcl9jYWxsPSV1XFxcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXFx1MDAzZWd1cF9mZCwgUElOX0xPTkdURVJNX0JFTkNITUFSSywgXFx1MDAyNmd1cCksIDApO1xcbiBcXHR9XFxuK31cXG4rXFxuK1RFU1QoZHVtcF91c2VyX3BhZ2VzX3NwYXJzZV9pbmRpY2VzKVxcbit7XFxuK1xcdC8qIFRlc3RzIHNwYXJzZSBtdWx0aS1pbmRleCB3aGljaF9wYWdlc1tdIGlucHV0cy4gKi9cXG4rXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemUgPSAxMjggKiBNQjtcXG4rXFx0aW50IHplcm9fZmQsIGd1cF9mZDtcXG4rXFx0Y2hhciAqYWRkciwgKnA7XFxuK1xcbitcXHR6ZXJvX2ZkID0gb3BlbihcXFwiL2Rldi96ZXJvXFxcIiwgT19SRFdSKTtcXG4rXFx0QVNTRVJUX0dFKHplcm9fZmQsIDApO1xcbiBcXG4tXFx0cCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIGZpbGVkLCAwKTtcXG4tXFx0aWYgKHAgPT0gTUFQX0ZBSUxFRClcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJtbWFwOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4tXFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylwO1xcbitcXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XFxuK1xcdEFTU0VSVF9HRShndXBfZmQsIDApO1xcbitcXG4rXFx0YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIHplcm9fZmQsIDApO1xcbitcXHRjbG9zZSh6ZXJvX2ZkKTtcXG4rXFx0QVNTRVJUX05FKGFkZHIsIE1BUF9GQUlMRUQpO1xcbiBcXG4tXFx0aWYgKHRocCA9PSAxKVxcbi1cXHRcXHRtYWR2aXNlKHAsIHNpemUsIE1BRFZfSFVHRVBBR0UpO1xcbi1cXHRlbHNlIGlmICh0aHAgPT0gMClcXG4tXFx0XFx0bWFkdmlzZShwLCBzaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbitcXHRtYWR2aXNlKGFkZHIsIHNpemUsIE1BRFZfSFVHRVBBR0UpO1xcbiBcXG4tXFx0LyogRmF1bHQgdGhlbSBpbiBoZXJlLCBmcm9tIHVzZXIgc3BhY2UuICovXFxuLVxcdGZvciAoOyAodW5zaWduZWQgbG9uZylwIFxcdTAwM2MgZ3VwLmFkZHIgKyBzaXplOyBwICs9IHBzaXplKCkpXFxuK1xcdGZvciAocCA9IGFkZHI7ICh1bnNpZ25lZCBsb25nKXAgXFx1MDAzYyAodW5zaWduZWQgbG9uZylhZGRyICsgc2l6ZTtcXG4rXFx0ICAgICBwICs9IHBzaXplKCkpXFxuIFxcdFxcdHBbMF0gPSAwO1xcbiBcXG4tXFx0dGlkID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocmVhZHMpO1xcbi1cXHRhc3NlcnQodGlkKTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG50aHJlYWRzOyBpKyspIHtcXG4tXFx0XFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRpZFtpXSwgTlVMTCwgZ3VwX3RocmVhZCwgXFx1MDAyNmd1cCk7XFxuLVxcdFxcdGFzc2VydChyZXQgPT0gMCk7XFxuLVxcdH1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG50aHJlYWRzOyBpKyspIHtcXG4tXFx0XFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgTlVMTCk7XFxuLVxcdFxcdGFzc2VydChyZXQgPT0gMCk7XFxuK1xcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjtcXG4rXFx0Z3VwLnNpemUgPSBzaXplO1xcbitcXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBzaXplIC8gcHNpemUoKTtcXG4rXFx0Z3VwLmd1cF9mbGFncyA9IEZPTExfV1JJVEU7XFxuK1xcdGd1cC53aGljaF9wYWdlc1swXSA9IDE7XFxuK1xcdGd1cC53aGljaF9wYWdlc1sxXSA9IDIwO1xcbitcXHRndXAud2hpY2hfcGFnZXNbMl0gPSAweDEwMDE7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcmVzZXJ2ZSB0aGUgb2xkIFxcXCIuL2d1cF90ZXN0IC1jdCAtRiAweDEgMCAxOSAweDEwMDBcXFwiIHNwYXJzZSBkdW1wXFxuK1xcdCAqIGNvdmVyYWdlIGFmdGVyIHJlbW92aW5nIGNvbW1hbmQtbGluZSBwYXJzaW5nIGZyb20gdGhpcyBiaW5hcnkuXFxuK1xcdCAqL1xcbitcXHRBU1NFUlRfRVEoaW9jdGwoZ3VwX2ZkLCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgXFx1MDAyNmd1cCksIDApO1xcbitcXG4rXFx0bXVubWFwKGFkZHIsIHNpemUpO1xcbitcXHRjbG9zZShndXBfZmQpO1xcbit9XFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuK3tcXG4rXFx0aW50IGZkO1xcbitcXHRjaGFyICpmaWxlID0gXFxcIi9kZXYvemVyb1xcXCI7XFxuK1xcbitcXHRmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlVuYWJsZSB0byBvcGVuICVzOiAlc1xcXFxuXFxcIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcXG4gXFx0fVxcbitcXHRjbG9zZShmZCk7XFxuIFxcbi1cXHRmcmVlKHRpZCk7XFxuK1xcdGZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xcbitcXHRpZiAoZmQgPT0gLTEpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4rXFx0XFx0aWYgKGVycm5vID09IEVBQ0NFUylcXG4rXFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXFxcblxcXCIpO1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRU5PRU5UKSB7XFxuK1xcdFxcdFxcdERJUiAqZGVidWdmcyA9IG9wZW5kaXIoXFxcIi9zeXMva2VybmVsL2RlYnVnXFxcIik7XFxuK1xcbitcXHRcXHRcXHRpZiAoIWRlYnVnZnMpIHtcXG4rXFx0XFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIk1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRjbG9zZWRpcihkZWJ1Z2ZzKTtcXG4rXFx0XFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIkNoZWNrIENPTkZJR19HVVBfVEVTVCBpbiBrZXJuZWwgY29uZmlnXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJmYWlsZWQgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZmQpO1xcbiBcXG4tXFx0a3NmdF9leGl0X3Bhc3MoKTtcXG4rXFx0cmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbmluZGV4IDJmMmI5ODc5ZDEwMDUxLi5lMWJiMDMxMDE5ZjJhYyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXFxuQEAgLTEwLDkgKzEwLDYgQEBcXG4gICogYnVncy5cXG4gICovXFxuIFxcbi0jaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuLVxcbiAjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbkBAIC0yOSw2ICsyNiw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL2lvY3RsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdGltZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiBcXG4gLypcXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcXG5pbmRleCA1NTViNGIzZDE0MzA3ZS4uNTdjZjc5MGNhNDc4ZDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuY1xcbkBAIC0xNCw3ICsxNCw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBNSU5fRlJFRV9QQUdFU1xcdDIwXFxuICNkZWZpbmUgTlJfSFVHRV9QQUdFU1xcdDEwXFx0LyogY29tbW9uIG51bWJlciBvZiBwYWdlcyB0byBtYXAvYWxsb2NhdGUgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xcbmluZGV4IDBmMmFhZDFiN2RiZDZmLi5hNDU4YmVjZjU4MzI3ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXFxuQEAgLTE4LDcgKzE4LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWZkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxcbiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXFxuaW5kZXggZWQzZDkyZTg2MmQ4NzYuLjliNzI0YWY2NmU5Mzg4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXFxuQEAgLTI2LDcgKzI2LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgREVGQVVMVF9MRU5HVEhfTUIgMTBVTFxcbiAjZGVmaW5lIE1CX1RPX0JZVEVTKHgpICh4ICogMTAyNCAqIDEwMjQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXFxuaW5kZXggM2ZmN2YwNjJiN2ViNDUuLmY0NTE0ZGE0OWUxZGY3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXFxuQEAgLTI5LDcgKzI5LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xcbmluZGV4IGJjMjAyZTRlZDJiZGE3Li4yMDg2NGU3ZDRlMGM3MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xcbkBAIC0yMSw5ICsyMSw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N0YXRmcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpZm5kZWYgTUFEVl9TT0ZUX09GRkxJTkVcXG4gI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi12bWVtbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXZtZW1tYXAuY1xcbmluZGV4IDUwN2RmNzhhMTU4ZDhkLi5jNDZhNjU2YzI1YTA0ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXZtZW1tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItdm1lbW1hcC5jXFxuQEAgLTExLDcgKzExLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgUEFHRV9DT01QT1VORF9IRUFEXFx0KDFVTCBcXHUwMDNjXFx1MDAzYyAxNSlcXG4gI2RlZmluZSBQQUdFX0NPTVBPVU5EX1RBSUxcXHQoMVVMIFxcdTAwM2NcXHUwMDNjIDE2KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbmluZGV4IGZiNDYwMDU3MGUxMzE5Li45NDk1OTc0ZWNjYmVhNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbkBAIC0yMCw3ICsyMCw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3lzY2FsbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2lmbmRlZiBTVEFUWF9ESU9BTElHTlxcbiAjZGVmaW5lIFNUQVRYX0RJT0FMSUdOXFx0XFx0MHgwMDAwMjAwMFVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuY1xcbmluZGV4IDJkYzE1ODA1NGY2NjZiLi41NmM1YTg1MzNlOWQ5MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXFxuQEAgLTEwLDcgKzEwLDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMFxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXFxuaW5kZXggZjk0NTQ5ZWZjYzZmZjMuLjI1MzJhNDJiOThkZmYxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbkBAIC0yNSw3ICsyNSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBJTkxPT1BfSVRFUiAxMDBcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbmluZGV4IDEwZThkZWRjYjA4N2RjLi4yMzgyOTczYjJmNTUyYyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG5AQCAtMjIsNyArMjIsNiBAQFxcbiAjaW5jbHVkZSBcXFwibGludXgvbWFnaWMuaFxcXCJcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcXHUwMDNjXFx1MDAzYyAzMCkpXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xcbkBAIC0xMTksNiArMTE4LDcgQEAgc3RhdGljIHZvaWQgZ2V0X2ZpbmZvKGNvbnN0IGNoYXIgKmRpcilcXG4gXFx0Y2hhciBidWZbMSBcXHUwMDNjXFx1MDAzYyAxMF07XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuIFxcdGNoYXIgKnN0ciwgKmVuZDtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGZpbmZvLmRpciA9IGRpcjtcXG4gXFx0c3RhdChmaW5mby5kaXIsIFxcdTAwMjZwYXRoX3N0YXQpO1xcbkBAIC0xMzgsOCArMTM4LDkgQEAgc3RhdGljIHZvaWQgZ2V0X2ZpbmZvKGNvbnN0IGNoYXIgKmRpcilcXG4gXFx0XFx0ICAgICBtYWpvcihwYXRoX3N0YXQuc3RfZGV2KSwgbWlub3IocGF0aF9zdGF0LnN0X2RldikpXFxuIFxcdCAgICBcXHUwMDNlPSBzaXplb2YocGF0aCkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuLVxcdGlmIChyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkgXFx1MDAzYyAwKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcInJlYWRfZmlsZShyZWFkX251bSlcXFwiKTtcXG4rXFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWwoKTtcXG4gXFx0aWYgKHN0cnN0cihidWYsIFxcXCJERVZUWVBFPWRpc2tcXFwiKSkge1xcbiBcXHRcXHQvKiBGb3VuZCBpdCAqL1xcbiBcXHRcXHRpZiAoc25wcmludGYoZmluZm8uZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcXG5AQCAtMzE5LDcgKzMyMCw3IEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXFxuIHtcXG4gXFx0Y29uc3QgaW50IG9wZW5fb3B0ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBPX1JET05MWSA6IE9fUkRXUjtcXG4gXFx0Y29uc3QgaW50IG1tYXBfcHJvdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gUFJPVF9SRUFEIDogKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpO1xcbi1cXHRpbnQgZmQ7XFxuK1xcdGludCBmZCwgcmV0O1xcbiBcXHR2b2lkICpwO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuIFxcbkBAIC0zNjMsNyArMzY0LDEwIEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibW1hcCgpXFxcIik7XFxuIFxcbiBcXHQvKiBEcm9wIHBhZ2UgY2FjaGUgKi9cXG4tXFx0d3JpdGVfZmlsZShcXFwiL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzXFxcIiwgXFxcIjNcXFwiLCAyKTtcXG4rXFx0cmV0ID0gd3JpdGVfZmlsZShcXFwiL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzXFxcIiwgXFxcIjNcXFwiLCAyKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWwoKTtcXG4rXFxuIFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdHJldHVybiBwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcXG5pbmRleCBhMDUwZjQ4NDBjZmEzYS4uY2MzNzQ5MmNmMzJjM2QgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xcbkBAIC0xNSw3ICsxNSw2IEBAXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFx1MDAzY2luY2x1ZGUvdmRzby90aW1lNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIEtTTV9TWVNGU19QQVRIIFxcXCIvc3lzL2tlcm5lbC9tbS9rc20vXFxcIlxcbiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xcbmluZGV4IDI5Zjc0OTI0NTNkNDM5Li40ZmU5N2MwMzMyNjEyNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuQEAgLTQsOSArNCw2IEBAXFxuICAqIHBhdGhzIGluIHRoZSBrZXJuZWwuXFxuICAqL1xcbiBcXG4tI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbi1cXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZ3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3B0aHJlYWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY251bWEuaFxcdTAwM2VcXG5AQCAtMTYsNiArMTMsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzaWduYWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3RpbWUuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiBcXG4gI2RlZmluZSBUV09NRUdcXHRcXHQoMlxcdTAwM2NcXHUwMDNjMjApXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbmluZGV4IDZmODk3MWQ1YjNjZTQzLi44MDQzNzI4MDMwODBjYyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5AQCAtMjMsNyArMjMsNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgUEFHRU1BUF9CSVRTX0FMTFxcdFxcdChQQUdFX0lTX1dQQUxMT1dFRCB8IFBBR0VfSVNfV1JJVFRFTiB8XFx0XFxcXFxcbiBcXHRcXHRcXHRcXHRcXHQgUEFHRV9JU19GSUxFIHwgUEFHRV9JU19QUkVTRU5UIHxcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuaW5kZXggZDhkOWQxZGU1N2I4YjAuLmE0Zjg0NTE3OTFjYmRiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuQEAgLTE0LDcgKzE0LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuIFxcbiAjaWZuZGVmIFBSX1RIUF9ESVNBQkxFX0VYQ0VQVF9BRFZJU0VEXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG5pbmRleCA5YTZkOTU0ZWUzNzEyNi4uNWJhMjAzM2U4YTA5Y2QgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xcbkBAIC00NSw4ICs0NSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9wdHJhY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3NldGptcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicGtleS1oZWxwZXJzLmhcXFwiXFxuIFxcbiBpbnQgaXRlcmF0aW9uX25yID0gMTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbmluZGV4IDhjMjk2ZGVkZjA0NzRkLi41NmRmMGRjYzk2NDBjMCAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuQEAgLTEzMCwzMCArMTMwLDYgQEAgdGVzdF9zZWxlY3RlZCgpIHtcXG4gXFx0ZmlcXG4gfVxcbiBcXG4tcnVuX2d1cF9tYXRyaXgoKSB7XFxuLSAgICAjIC10OiB0aHA9b24sIC1UOiB0aHA9b2ZmLCAtSDogaHVnZXRsYj1vblxcbi0gICAgbG9jYWwgaHVnZXRsYl9tYj0yNTZcXG4tXFxuLSAgICBmb3IgaHVnZSBpbiAtdCAtVCBcXFwiLUggLW0gJGh1Z2V0bGJfbWJcXFwiOyBkb1xcbi0gICAgICAgICMgLXU6IGd1cC1mYXN0LCAtVTogZ3VwLWJhc2ljLCAtYTogcGluLWZhc3QsIC1iOiBwaW4tYmFzaWMsIC1MOiBwaW4tbG9uZ3Rlcm1cXG4tICAgICAgICBmb3IgdGVzdF9jbWQgaW4gLXUgLVUgLWEgLWIgLUw7IGRvXFxuLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wXFxuLSAgICAgICAgICAgIGZvciB3cml0ZSBpbiAtdyAtVzsgZG9cXG4tICAgICAgICAgICAgICAgICMgLVM6IHNoYXJlZFxcbi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TIFxcXCIgXFxcIjsgZG9cXG4tICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsXFxuLSAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGl0J3MgZGVmYXVsdCB0aHAgc2l6ZSAob3IgMk0gb24geDg2KSwgMTIzIHRvXFxuLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm1cXG4tICAgICAgICAgICAgICAgICAgICBmb3IgbnVtIGluIFxcXCItbiAxXFxcIiBcXFwiLW4gNTEyXFxcIiBcXFwiLW4gMTIzXFxcIiBcXFwiLW4gLTFcXFwiOyBkb1xcbi0gICAgICAgICAgICAgICAgICAgICAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgXFxcXFxcbi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRodWdlICR0ZXN0X2NtZCAkd3JpdGUgJHNoYXJlICRudW1cXG4tICAgICAgICAgICAgICAgICAgICBkb25lXFxuLSAgICAgICAgICAgICAgICBkb25lXFxuLSAgICAgICAgICAgIGRvbmVcXG4tICAgICAgICBkb25lXFxuLSAgICBkb25lXFxuLX1cXG4tXFxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcXG4gQVJDSDY0U1RSPVxcXCJhcm02NCBtaXBzNjQgcGFyaXNjNjQgcHBjNjQgcHBjNjRsZSByaXNjdjY0IHMzOTB4IHNwYXJjNjQgeDg2XzY0XFxcIlxcbiBpZiBbIC16IFxcXCIkQVJDSFxcXCIgXTsgdGhlblxcbkBAIC0yNzYsMTggKzI1Miw3IEBAIGZpXFxuIFxcbiBDQVRFR09SWT1cXFwibW1hcFxcXCIgcnVuX3Rlc3QgLi9tYXBfZml4ZWRfbm9yZXBsYWNlXFxuIFxcbi1pZiAkUlVOX0FMTDsgdGhlblxcbi0gICAgcnVuX2d1cF9tYXRyaXhcXG4tZWxzZVxcbi0gICAgIyBnZXRfdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXFxuLSAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxcbi0gICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIC0xXFxuLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcXG4tICAgIENBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAxXFxuLSAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gLTFcXG4tZmlcXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XFxuLUNBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtY3QgLUYgMHgxIDAgMTkgMHgxMDAwXFxuK0NBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfdGVzdFxcbiBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX2xvbmd0ZXJtXFxuIFxcbiBDQVRFR09SWT1cXFwidXNlcmZhdWx0ZmRcXFwiIHJ1bl90ZXN0IC4vdWZmZC11bml0LXRlc3RzXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xcbmluZGV4IGZiMTg2NGE2OGUxYzZiLi42YzIyYWM5ZTkzZGIwNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG5AQCAtOSw3ICs5LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIIFxcXCIvcHJvYy9zZWxmL3BhZ2VtYXBcXFwiXFxuICNkZWZpbmUgVEVTVF9JVEVSQVRJT05TIDEwMDAwXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuaW5kZXggMzJiOTkxNDcyZjc0NGYuLmU3NDRjOTQzNGU3ZDA1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuQEAgLTIxLDcgKzIxLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3RpbWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuIHVpbnQ2NF90IHBhZ2VzaXplO1xcbiB1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0O1xcbkBAIC0yNjksNyArMjY4LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVfZGVidWdmcyhjb25zdCBjaGFyICpmbXQsIC4uLilcXG4gXFx0aWYgKHJldCBcXHUwMDNlPSBJTlBVVF9NQVgpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXM6IERlYnVnZnMgaW5wdXQgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFxuLVxcdHdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCArIDEpO1xcbitcXHRyZXQgPSB3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgKyAxKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWwoKTtcXG4gfVxcbiBcXG4gc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmNcXG5pbmRleCAyMmI5YzJmMWMzNWQyMy4uMGRhMTVkNTMwYTFmYzggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xcbkBAIC0xNCw3ICsxNCw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQilcXG4gI2RlZmluZSBNQVBfSFVHRVRMQlxcdDB4NDAwMDBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXFxuaW5kZXggOGViMGM1NjMwZTdlMzEuLjk2ZjcyODk4ZWJlMGE1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xcbkBAIC0xNyw3ICsxNyw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gaW50IGJhY2tpbmdfZmQgPSAtMTtcXG4gaW50IG1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxcbmluZGV4IDkyYTIxYjk3Zjc0NWFmLi4wNzIzODQzYTc2MjZiMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxcbkBAIC0zNyw3ICszNyw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBVRkZEX0ZMQUdTXFx0KE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0sgfCBVRkZEX1VTRVJfTU9ERV9PTkxZKVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcXG5pbmRleCBjOTczZDY3MjI3MjBjMy4uZWI0YjI0MzNiMDBlNjEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcXG5AQCAtNyw4ICs3LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2Fzc2VydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ1ZmZkLWNvbW1vbi5oXFxcIlxcbiBcXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcXG5pbmRleCBlMjRkN2JhMDBiNDQxNy4uNWEzNTRhNjY0ZDFmN2QgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXFxuQEAgLTExLDcgKzExLDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAvKlxcbiAgKiBUaGUgaGludCBhZGRyIHZhbHVlIGlzIHVzZWQgdG8gYWxsb2NhdGUgYWRkcmVzc2VzXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbmluZGV4IDMxMWZjNWI0NTEzZWI0Li5mMjc2ZWVlNTc2ODA0YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5AQCAtNjk4LDkzICs2OTgsMzkgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcXG4gXFx0cmV0dXJuIHJldCBcXHUwMDNlIDAgPyAwIDogLWVycm5vO1xcbiB9XFxuIFxcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcXG4te1xcbi1cXHRpbnQgZmQ7XFxuLVxcdHNzaXplX3QgbnVtcmVhZDtcXG4tXFxuLVxcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XFxuLVxcdGlmIChmZCA9PSAtMSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcXG4tXFx0aWYgKG51bXJlYWQgXFx1MDAzYyAxKSB7XFxuLVxcdFxcdGNsb3NlKGZkKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuLVxcdGJ1ZltudW1yZWFkXSA9ICdcXFxcMCc7XFxuLVxcdGNsb3NlKGZkKTtcXG4tXFxuLVxcdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xcbi19XFxuLVxcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxcbi17XFxuLVxcdGludCBmZCwgc2F2ZWRfZXJybm87XFxuLVxcdHNzaXplX3QgbnVtd3JpdHRlbjtcXG4tXFxuLVxcdGlmIChidWZsZW4gXFx1MDAzYyAyKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkluY29ycmVjdCBidWZmZXIgbGVuOiAlenVcXFxcblxcXCIsIGJ1Zmxlbik7XFxuLVxcbi1cXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xcbi1cXHRpZiAoZmQgPT0gLTEpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXMgb3BlbiBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpO1xcbi1cXG4tXFx0bnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xcbi1cXHRzYXZlZF9lcnJubyA9IGVycm5vO1xcbi1cXHRjbG9zZShmZCk7XFxuLVxcdGVycm5vID0gc2F2ZWRfZXJybm87XFxuLVxcdGlmIChudW13cml0dGVuIFxcdTAwM2MgMClcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlcyB3cml0ZSglLipzKSBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBwYXRoLCAoaW50KShidWZsZW4gLSAxKSxcXG4tXFx0XFx0XFx0XFx0YnVmLCBzdHJlcnJvcihlcnJubykpO1xcbi1cXHRpZiAobnVtd3JpdHRlbiAhPSBidWZsZW4gLSAxKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIHdyaXRlKCUuKnMpIGlzIHRydW5jYXRlZCwgZXhwZWN0ZWQgJXp1IGJ5dGVzLCBnb3QgJXpkIGJ5dGVzXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRwYXRoLCAoaW50KShidWZsZW4gLSAxKSwgYnVmLCBidWZsZW4gLSAxLCBudW13cml0dGVuKTtcXG4tfVxcbi1cXG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKVxcbi17XFxuLVxcdGNoYXIgYnVmWzIxXTtcXG4tXFxuLVxcdGlmIChyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkgXFx1MDAzYyAwKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcInJlYWRfZmlsZSgpXFxcIik7XFxuLVxcbi1cXHRyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDEwKTtcXG4tfVxcbi1cXG4tdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXFxuLXtcXG4tXFx0Y2hhciBidWZbMjFdO1xcbi1cXG4tXFx0c3ByaW50ZihidWYsIFxcXCIlbHVcXFwiLCBudW0pO1xcbi1cXHR3cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgKyAxKTtcXG4tfVxcbi1cXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htYWxsLCBzaG1tYXg7XFxuIFxcbiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpXFxuIHtcXG4tXFx0aWYgKHNobW1heClcXG4tXFx0XFx0d3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIHNobW1heCk7XFxuLVxcdGlmIChzaG1hbGwpXFxuLVxcdFxcdHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBzaG1hbGwpO1xcbitcXHRpZiAoc2htbWF4IFxcdTAwMjZcXHUwMDI2IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiLCBzaG1tYXgpKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbCgpO1xcbitcXHRpZiAoc2htYWxsIFxcdTAwMjZcXHUwMDI2IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBzaG1hbGwpKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbCgpO1xcbiB9XFxuIFxcbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTtcXG4gXFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuK1xcdGludCByZXQ7XFxuIFxcbi1cXHR2YWwgPSByZWFkX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiKTtcXG4rXFx0cmV0ID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XFxcIiwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsKCk7XFxuIFxcdGlmICh2YWwgXFx1MDAzYyBsZW5ndGgpIHtcXG4tXFx0XFx0d3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIGxlbmd0aCk7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiLCBsZW5ndGgpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbCgpO1xcbiBcXHRcXHRzaG1tYXggPSB2YWw7XFxuIFxcdH1cXG4gXFxuLVxcdHZhbCA9IHJlYWRfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFxcXCIpO1xcbitcXHRyZXQgPSByZWFkX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWwoKTtcXG4gXFx0aWYgKHZhbCBcXHUwMDNjIG5yKSB7XFxuLVxcdFxcdHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBucik7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBucik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9mYWlsKCk7XFxuIFxcdFxcdHNobWFsbCA9IHZhbDtcXG4gXFx0fVxcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbmluZGV4IGVhOGZjOGZkZjBlYjBiLi5hYTg1NmYwZDMyZDY0ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG5AQCAtOCw2ICs4LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZSAvKiBfU0NfUEFHRVNJWkUgKi9cXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2ZpbGVfdXRpbHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIEJJVF9VTEwobnIpICAgICAgICAgICAgICAgICAgICgxVUxMIFxcdTAwM2NcXHUwMDNjIChucikpXFxuICNkZWZpbmUgUE1fU09GVF9ESVJUWSAgICAgICAgICAgICAgICAgQklUX1VMTCg1NSlcXG5AQCAtMTY0LDExICsxNjYsNiBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTtcXG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVxcdCgoKGVudCkgXFx1MDAyNiAoMXVsbCBcXHUwMDNjXFx1MDAzYyA2MykpICE9IDApXFxuICNkZWZpbmUgUEFHRU1BUF9QRk4oZW50KVxcdCgoZW50KSBcXHUwMDI2ICgoMXVsbCBcXHUwMDNjXFx1MDAzYyA1NSkgLSAxKSlcXG4gXFxuLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XFxuLXVuc2lnbmVkIGxvbmcgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCk7XFxuLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcXG4tXFxuIHZvaWQgc2htX2xpbWl0c19wcmVwYXJlKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTtcXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjI5OjA4LjgyNTA0NTU0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY4MzIxOTc4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29scyAodG9vbHMvbW0vZ3VwX2JlbmNoLmMsIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyksIERvY3VtZW50YXRpb24sIGFuZCBNQUlOVEFJTkVSUy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjBhMjNlOTk3OWVlZGY0YTZmYjU4ZWExYjM3NmNhNTI3NTcyYzRmY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDIwOjI5OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuaW5kZXggYzE2Y2ExNjNiNTVlM2MuLmVhNzIyYWRmMjJjY2FjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG5AQCAtMjMwLDEwICsyMzAsMTYgQEAgVGhpcyBmaWxlOjpcbiBcbiAgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuIFxuLWhhcyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFwcGVyIGZ1bmN0aW9uczpcbitjb250YWlucyB0aGUgZm9sbG93aW5nIHRlc3QgY2FzZXMgdG8gZXhlcmNpc2UgcGluX3VzZXJfcGFnZXMqKCk6XG4gXG4tKiBQSU5fRkFTVF9CRU5DSE1BUksgKC4vZ3VwX3Rlc3QgLWEpXG4tKiBQSU5fQkFTSUNfVEVTVCAoLi9ndXBfdGVzdCAtYilcbisqIHBpbl91c2VyX3BhZ2VzIHZpYSBQSU5fQkFTSUNfVEVTVFxuKyogcGluX3VzZXJfcGFnZXNfZmFzdCB2aWEgUElOX0ZBU1RfQkVOQ0hNQVJLXG4rKiBwaW5fdXNlcl9wYWdlc19sb25ndGVybSB2aWEgUElOX0xPTkdURVJNX0JFTkNITUFSS1xuK1xuK1J1biB3aXRoOjpcbitcbisgIG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW1cbisgIC4vdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3RcbiBcbiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkXG4gc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCB2aWEgdHdvIG5ldyAvcHJvYy92bXN0YXQgZW50cmllczogOjpcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA4MDZiZDJkODBkMTUzNS4uN2QxMjFkZWU5ZjBmMmMgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xNzAyNCw2ICsxNzAyNCw3IEBAIFQ6XHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW1cbiBGOlx0bW0vZ3VwLmNcbiBGOlx0bW0vZ3VwX3Rlc3QuY1xuIEY6XHRtbS9ndXBfdGVzdC5oXG4rRjpcdHRvb2xzL21tL2d1cF9iZW5jaC5jXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiBcbkBAIC0xNzEyOCw2ICsxNzEyOSw3IEBAIEY6XHRtbS9tZW1vcnktdGllcnMuY1xuIEY6XHRtbS9wYWdlX2lkbGUuY1xuIEY6XHRtbS9wZ2FsbG9jLXRyYWNrLmhcbiBGOlx0bW0vcHJvY2Vzc192bV9hY2Nlc3MuY1xuK0Y6XHR0b29scy9saWIvbW0vXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL1xuIFxuIE1FTU9SWSBNQU5BR0VNRU5UIC0gTlVNQSBNRU1CTE9DS1MgQU5EIE5VTUEgRU1VTEFUSU9OXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzkyZjRiNGRiNjI1MmVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbkBAIC0wLDAgKzEsMTE5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImZpbGVfdXRpbHMuaFwiXG4rXG4raW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4re1xuK1x0aW50IGZkO1xuK1x0c3NpemVfdCBudW1yZWFkO1xuK1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbitcdGlmIChmZCA9PSAtMSkge1xuK1x0XHRpbnQgZXJyID0gZXJybm87XG4rXG4rXHRcdHByaW50ZihcIiMgJXM6ICVzICglZClcXG5cIiwgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTtcbitcdFx0cmV0dXJuIC1lcnI7XG4rXHR9XG4rXG4rXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbitcdGlmIChudW1yZWFkIFx1MDAzYyAxKSB7XG4rXHRcdGludCBlcnIgPSBudW1yZWFkID8gZXJybm8gOiBFTk9EQVRBO1xuK1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHByaW50ZihcIiMgJXM6ICVzICglZClcXG5cIiwgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTtcbitcdFx0cmV0dXJuIC1lcnI7XG4rXHR9XG4rXG4rXHRidWZbbnVtcmVhZF0gPSAnXFwwJztcbitcdGNsb3NlKGZkKTtcbitcbitcdHJldHVybiAoaW50KW51bXJlYWQ7XG4rfVxuK1xuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbilcbit7XG4rXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xuK1x0c3NpemVfdCBudW13cml0dGVuO1xuK1xuK1x0aWYgKGJ1ZmxlbiBcdTAwM2MgMikge1xuK1x0XHRwcmludGYoXCIjICVzOiAlcyAoJWQpXFxuXCIsIHBhdGgsIHN0cmVycm9yKEVJTlZBTCksIEVJTlZBTCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbitcdGlmIChmZCA9PSAtMSkge1xuK1x0XHRpbnQgZXJyID0gZXJybm87XG4rXG4rXHRcdHByaW50ZihcIiMgJXM6ICVzICglZClcXG5cIiwgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTtcbitcdFx0cmV0dXJuIC1lcnI7XG4rXHR9XG4rXG4rXHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4rXHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0Y2xvc2UoZmQpO1xuK1x0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApIHtcbitcdFx0cHJpbnRmKFwiIyAlczogJXMgKCVkKVxcblwiLCBwYXRoLCBzdHJlcnJvcihzYXZlZF9lcnJubyksXG4rXHRcdCAgICAgICBzYXZlZF9lcnJubyk7XG4rXHRcdHJldHVybiAtc2F2ZWRfZXJybm87XG4rXHR9XG4rXHRpZiAobnVtd3JpdHRlbiAhPSAoc3NpemVfdCkoYnVmbGVuIC0gMSkpIHtcbitcdFx0cHJpbnRmKFwiIyAlcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcblwiLFxuK1x0XHQgICAgICAgcGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7XG4rXHRcdHJldHVybiAtRUlPO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pXG4re1xuK1x0dW5zaWduZWQgbG9uZyB2YWw7XG4rXHRpbnQgZXJyLCByZXQ7XG4rXHRjaGFyIGJ1ZlsyMV07XG4rXHRjaGFyICplbmQ7XG4rXG4rXHRpZiAoIW51bSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0ZXJybm8gPSAwO1xuK1x0dmFsID0gc3RydG91bChidWYsIFx1MDAyNmVuZCwgMTApO1xuK1x0aWYgKGVycm5vKSB7XG4rXHRcdGVyciA9IGVycm5vO1xuK1x0XHRwcmludGYoXCIjICVzOiAlcyAoJWQpXFxuXCIsIHBhdGgsIHN0cmVycm9yKGVyciksIGVycik7XG4rXHRcdHJldHVybiAtZXJyO1xuK1x0fVxuK1xuK1x0aWYgKGVuZCA9PSBidWYgfHwgYnVmWzBdID09ICctJykge1xuK1x0XHRwcmludGYoXCIjICVzOiBpbnZhbGlkIG51bWVyaWMgdmFsdWVcXG5cIiwgcGF0aCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCplbmQgPT0gJ1xcbicpXG4rXHRcdGVuZCsrO1xuK1xuK1x0aWYgKCplbmQgIT0gJ1xcMCcpIHtcbitcdFx0cHJpbnRmKFwiIyAlczogaW52YWxpZCBudW1lcmljIHZhbHVlXFxuXCIsIHBhdGgpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdCpudW0gPSB2YWw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbit7XG4rXHRjaGFyIGJ1ZlsyMV07XG4rXG4rXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiVsdVwiLCBudW0pO1xuK1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSArIDEpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zODU3Njc5MGEzNDI0NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxuQEAgLTAsMCArMSwxMiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmbmRlZiBfX01NX0ZJTEVfVVRJTFNfSF9fXG4rI2RlZmluZSBfX01NX0ZJTEVfVVRJTFNfSF9fXG4rXG4rI2luY2x1ZGUgXHUwMDNjc3RkZGVmLmhcdTAwM2VcbitcbitpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4raW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbitpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKTtcbitpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbnNpbWlsYXJpdHkgaW5kZXggOTElXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbmluZGV4IDJlYWIyMTEwYWM2YTQ2Li44ZDllNDQ3MjdlZGJmNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbisrKyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5AQCAtOSwxMSArOSwxNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJmaWxlX3V0aWxzLmhcIlxuICNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBUSFBfU1lTRlMgXCIvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS9cIlxuICNkZWZpbmUgTUFYX1NFVFRJTkdTX0RFUFRIIDRcbitcbisjaWZuZGVmIEFSUkFZX1NJWkVcbisjZGVmaW5lIEFSUkFZX1NJWkUoYXJyKSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKVxuKyNlbmRpZlxuK1xuIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNldHRpbmdzX3N0YWNrW01BWF9TRVRUSU5HU19ERVBUSF07XG4gc3RhdGljIGludCBzZXR0aW5nc19pbmRleDtcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzYXZlZF9zZXR0aW5ncztcbkBAIC02MSwxMCArNjYsOSBAQCBpbnQgdGhwX3JlYWRfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10pXG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbiBcbi1cdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7XG4tXHRcdHBlcnJvcihwYXRoKTtcbitcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbiBcbiBcdGMgPSBzdHJjaHIoYnVmLCAnWycpO1xuIFx0aWYgKCFjKSB7XG5AQCAtMTAzLDEyICsxMDcsMTUgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbClcbiBcdFx0cHJpbnRmKFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0d3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICsgMSk7XG4rXHRyZXQgPSB3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgKyAxKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiB9XG4gXG4gdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0dW5zaWduZWQgbG9uZyBudW07XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFRIUF9TWVNGUyBcIiVzXCIsIG5hbWUpO1xuQEAgLTExNiw3ICsxMjMsMTEgQEAgdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcbiBcdFx0cHJpbnRmKFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcbitcdHJldHVybiBudW07XG4gfVxuIFxuIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcbkBAIC0xMjksNyArMTQwLDkgQEAgdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKVxuIFx0XHRwcmludGYoXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHR3cml0ZV9udW0ocGF0aCwgbnVtKTtcbitcdHJldCA9IHdyaXRlX251bShwYXRoLCBudW0pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIH1cbiBcbiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuQEAgLTE1Nyw4ICsxNzAsMTMgQEAgdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbiBcdFx0Lm1heF9wdGVzX3NoYXJlZCA9IHRocF9yZWFkX251bShcImtodWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXCIpLFxuIFx0XHQucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bShcImtodWdlcGFnZWQvcGFnZXNfdG9fc2NhblwiKSxcbiBcdH07XG4tXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSlcbi1cdFx0c2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYiA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgpO1xuK1x0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHtcbitcdFx0aW50IHJldCA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG4rXHRcdFx0XHQgICBcdTAwMjZzZXR0aW5ncy1cdTAwM2VyZWFkX2FoZWFkX2tiKTtcbitcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9PUkRFUlM7IGkrKykge1xuIFx0XHRpZiAoISgoMSBcdTAwM2NcdTAwM2MgaSkgXHUwMDI2IG9yZGVycykpIHtcbkBAIC0yMDgsOCArMjI2LDEzIEBAIHZvaWQgdGhwX3dyaXRlX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuIFx0dGhwX3dyaXRlX251bShcImtodWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXCIsIGtodWdlcGFnZWQtXHUwMDNlbWF4X3B0ZXNfc2hhcmVkKTtcbiBcdHRocF93cml0ZV9udW0oXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cIiwga2h1Z2VwYWdlZC1cdTAwM2VwYWdlc190b19zY2FuKTtcbiBcbi1cdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxuLVx0XHR3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgc2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4rXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xuK1x0XHRpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG4rXHRcdFx0XHQgICAgc2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4rXG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfT1JERVJTOyBpKyspIHtcbiBcdFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNiBvcmRlcnMpKVxuQEAgLTMwNiw4ICszMjksMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX190aHBfc3VwcG9ydGVkX29yZGVycyhib29sIGlzX3NobWVtKVxuIFx0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdFx0fVxuIFxuK1x0XHRpZiAoYWNjZXNzKHBhdGgsIEZfT0spKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4tXHRcdGlmIChyZXQpXG4rXHRcdGlmIChyZXQgXHUwMDNlIDApXG4gXHRcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbiBcdH1cbiBcbkBAIC0zODIsOCArNDA4LDcgQEAgaW50IGRldGVjdF9odWdldGxiX3BhZ2Vfc2l6ZXModW5zaWduZWQgbG9uZyBzaXplc1tdLCBpbnQgbWF4KVxuIFx0XHRpZiAoc3NjYW5mKGVudHJ5LVx1MDAzZWRfbmFtZSwgXCJodWdlcGFnZXMtJXp1a0JcIiwgXHUwMDI2a2IpICE9IDEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdHNpemVzW2NvdW50KytdID0ga2IgKiAxMDI0O1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcIltJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcblwiLFxuLVx0XHRcdCAgICAgICBrYik7XG4rXHRcdHByaW50ZihcIiMgW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxuXCIsIGtiKTtcbiBcdH1cbiBcdGNsb3NlZGlyKGRpcik7XG4gXHRyZXR1cm4gY291bnQ7XG5AQCAtNDI1LDI4ICs0NTAsNDMgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl9zeXNmc19wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbixcbiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHR1bnNpZ25lZCBsb25nIG5yO1xuK1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwibnJfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnIpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1xuK1x0cmV0dXJuIG5yO1xuIH1cbiBcbiB2b2lkIGh1Z2V0bGJfc2V0X25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwibnJfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0d3JpdGVfbnVtKHBhdGgsIG5yKTtcbitcdHJldCA9IHdyaXRlX251bShwYXRoLCBucik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0dW5zaWduZWQgbG9uZyBucjtcbitcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcImZyZWVfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnIpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1xuK1x0cmV0dXJuIG5yO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBfX2h1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKVxuQEAgLTUwMiw3ICs1NDIsOCBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyBzaXplc1tdLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmIChucl9lbmFibGVkIFx1MDAzZSBtYXgpIHtcbi1cdFx0a3NmdF9wcmludF9tc2coXCJkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxuXCIsIG5yX2VuYWJsZWQsIG1heCk7XG4rXHRcdHByaW50ZihcIiMgZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxcblwiLFxuK1x0XHQgICAgICAgbnJfZW5hYmxlZCwgbWF4KTtcbiBcdFx0bnJfZW5hYmxlZCA9IG1heDtcbiBcdH1cbiBcbkBAIC01NzQsOCArNjE1LDEwIEBAIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0KHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19zaWdoYW5kbGVyKGludCBzaWcpXG4ge1xuK1x0KHZvaWQpc2lnO1xuK1xuIFx0LyogZXhpdCgpIHdpbGwgaW52b2tlIHRoZSBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCBoYW5kbGVyLiAqL1xuLVx0ZXhpdChLU0ZUX0ZBSUwpO1xuK1x0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIH1cbiBcbiB2b2lkIGh1Z2VwYWdlX3NhdmVfc2V0dGluZ3MoYm9vbCB0aHAsIGJvb2wgaHVnZXRsYilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbnNpbWlsYXJpdHkgaW5kZXggMTAwJVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbmluZGV4IDkyMjg3OWY5M2ZjODQ5Li4xNTRkNzQwYmUwMmU4MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbkBAIC0yLDMgKzIsNSBAQFxuIHNsYWJpbmZvXG4gcGFnZS10eXBlc1xuIHBhZ2Vfb3duZXJfc29ydFxuK3RocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4rZ3VwX2JlbmNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxuaW5kZXggZjU3MjViNWMyM2FhMjYuLmQ4MmNjOGM0M2VlMDJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL21tL01ha2VmaWxlXG5AQCAtMywxMyArMywxNCBAQFxuICNcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxuIFxuLUJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbitCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xuIFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcbitHVVBfQkVOQ0hfT0JKUyA9IGd1cF9iZW5jaC5jIC4uL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIC4uL2xpYi9tbS9maWxlX3V0aWxzLmNcbiBcbi1DRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWRcbitDRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLUkuLi8uLiAtcHRocmVhZFxuIExERkxBR1MgKz0gJChMSUJTKSAtcHRocmVhZFxuIFxuIGFsbDogJChCVUlMRF9UQVJHRVRTKVxuQEAgLTIyLDggKzIzLDExIEBAICQoTElCUyk6XG4gJTogJS5jXG4gXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFx1MDAzYyAkKExERkxBR1MpXG4gXG4rZ3VwX2JlbmNoOiAkKEdVUF9CRU5DSF9PQkpTKSAkKExJQlMpXG4rXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJChHVVBfQkVOQ0hfT0JKUykgJChMREZMQUdTKVxuK1xuIGNsZWFuOlxuLVx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbitcdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXG4gXG4gc2JpbmRpciA/PSAvdXNyL3NiaW5cbmRpZmYgLS1naXQgYS90b29scy9tbS9ndXBfYmVuY2guYyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ5N2I4ZjNmNmFjNGI0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9tbS9ndXBfYmVuY2guY1xuQEAgLTAsMCArMSw0ODIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogTWljcm9iZW5jaG1hcmsgZm9yIGdldF91c2VyX3BhZ2VzIChHVVApIGtlcm5lbCBpbnRlcmZhY2VzLlxuKyAqXG4rICogRXhlcmNpc2VzIEdVUF9GQVNUX0JFTkNITUFSSywgUElOX0ZBU1RfQkVOQ0hNQVJLLCBhbmRcbisgKiBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLIHZpYSB0aGUgQ09ORklHX0dVUF9URVNUIGRlYnVnZnMgaW50ZXJmYWNlLlxuKyAqXG4rICogRXhhbXBsZSB1c2U6XG4rICogICAjIFJ1biB0aGUgZnVsbCBtYXRyaXggKGFsbCBjb21tYW5kcywgYWNjZXNzIG1vZGVzLCBwYWdlIGNvdW50cyk6XG4rICogICAuL2d1cF9iZW5jaFxuKyAqXG4rICogICAjIFNpbmdsZSBydW46IHBpbl91c2VyX3BhZ2VzX2Zhc3QsIDUxMiBwYWdlcywgd3JpdGUgYWNjZXNzLCBodWdldGxiOlxuKyAqICAgLi9ndXBfYmVuY2ggLWEgLW4gNTEyIC13IC1IXG4rICpcbisgKiBSZXF1aXJlcyBDT05GSUdfR1VQX1RFU1Q9eSBhbmQgZGVidWdmcyBtb3VudGVkIGF0IC9zeXMva2VybmVsL2RlYnVnLlxuKyAqIE11c3QgYmUgcnVuIGFzIHJvb3QuXG4rICovXG4rXG4rI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvaW9jdGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGF0b21pYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vZ3VwX3Rlc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbitcbisjZGVmaW5lIE1CICgxVUwgXHUwMDNjXHUwMDNjIDIwKVxuK1xuKyNpZm5kZWYgQVJSQVlfU0laRVxuKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpXG4rI2VuZGlmXG4rXG4rLyogSnVzdCB0aGUgZmxhZ3Mgd2UgbmVlZCwgY29waWVkIGZyb20gdGhlIGtlcm5lbCBpbnRlcm5hbHMuICovXG4rI2RlZmluZSBGT0xMX1dSSVRFXHQweDAxXHQvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi9cbitcbisjZGVmaW5lIEdVUF9URVNUX0ZJTEUgXCIvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdFwiXG4rXG4rc3RhdGljIHVuc2lnbmVkIGludCBwc2l6ZSh2b2lkKVxuK3tcbitcdHN0YXRpYyB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7XG4rXG4rXHRpZiAoIV9fcGFnZV9zaXplKVxuK1x0XHRfX3BhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTtcbitcdHJldHVybiBfX3BhZ2Vfc2l6ZTtcbit9XG4rXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgY21kO1xuK3N0YXRpYyBjb25zdCBjaGFyICpiZW5jaF9sYWJlbDtcbitzdGF0aWMgaW50IGd1cF9mZCwgcmVwZWF0cyA9IDE7XG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDEyOCAqIE1CO1xuK3N0YXRpYyBhdG9taWNfaW50IGJlbmNoX2Vycm9yO1xuKy8qIFNlcmlhbGl6ZSBwcmludHMgKi9cbitzdGF0aWMgcHRocmVhZF9tdXRleF90IHByaW50X211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjtcbitcbitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBiZW5jaF9jbWRzW10gPSB7XG4rXHRHVVBfRkFTVF9CRU5DSE1BUkssXG4rXHRQSU5fRkFTVF9CRU5DSE1BUkssXG4rXHRQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IGludCBiZW5jaF90aHBfbW9kZXNbXSA9IHsgMSwgMCB9O1x0Lyogb24sIG9mZiAqL1xuK3N0YXRpYyBjb25zdCBpbnQgYmVuY2hfbnJfcGFnZXNfbGlzdFtdID0geyAxLCA1MTIsIDEyMywgLTEgfTtcbitcbitzdGF0aWMgY29uc3QgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZClcbit7XG4rXHRzd2l0Y2ggKGNtZCkge1xuK1x0Y2FzZSBHVVBfRkFTVF9CRU5DSE1BUks6XG4rXHRcdHJldHVybiBcIkdVUF9GQVNUX0JFTkNITUFSS1wiO1xuK1x0Y2FzZSBQSU5fRkFTVF9CRU5DSE1BUks6XG4rXHRcdHJldHVybiBcIlBJTl9GQVNUX0JFTkNITUFSS1wiO1xuK1x0Y2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOlxuK1x0XHRyZXR1cm4gXCJQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXCI7XG4rXHR9XG4rXHRyZXR1cm4gXCJVbmtub3duIGNvbW1hbmRcIjtcbit9XG4rXG4rc3RhdGljIGxvbmcgcGFyc2VfbG9uZ19hcmdfYmFzZShjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBiYXNlKVxuK3tcbitcdGNoYXIgKmVuZDtcbitcdGxvbmcgdmFsO1xuK1xuK1x0ZXJybm8gPSAwO1xuK1x0dmFsID0gc3RydG9sKGFyZywgXHUwMDI2ZW5kLCBiYXNlKTtcbitcdGlmIChlcnJubyB8fCBlbmQgPT0gYXJnIHx8ICplbmQgIT0gJ1xcMCcpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiSW52YWxpZCAlcyAnJXMnXFxuXCIsIG5hbWUsIGFyZyk7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rXHRyZXR1cm4gdmFsO1xuK31cbitcbitzdGF0aWMgbG9uZyBwYXJzZV9sb25nX2FyZyhjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0cmV0dXJuIHBhcnNlX2xvbmdfYXJnX2Jhc2UoYXJnLCBuYW1lLCAxMCk7XG4rfVxuK1xuK3N0YXRpYyBsb25nIHBhcnNlX3Bvc2l0aXZlX2xvbmdfYXJnKGNvbnN0IGNoYXIgKmFyZywgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRsb25nIHZhbCA9IHBhcnNlX2xvbmdfYXJnKGFyZywgbmFtZSk7XG4rXG4rXHRpZiAodmFsIFx1MDAzYyAxKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIkludmFsaWQgJXMgJyVzJ1xcblwiLCBuYW1lLCBhcmcpO1xuK1x0XHRleGl0KDEpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHZhbDtcbit9XG4rXG4rc3RydWN0IGJlbmNoX3J1biB7XG4rXHR1bnNpZ25lZCBsb25nIGNtZDtcbitcdGludCB0aHA7XHRcdC8qIC0xOiBkZWZhdWx0LCAwOiBvZmYsIDE6IG9uICovXG4rXHRib29sIGh1Z2V0bGI7XG4rXHRib29sIHdyaXRlO1x0XHQvKiB3aGV0aGVyIHRvIHNldCBGT0xMX1dSSVRFICovXG4rXHRib29sIHNoYXJlZDtcbitcdGludCBucl9wYWdlcztcdFx0LyogLTEgbWVhbnMgYWxsIHBhZ2VzIChzaXplIC8gcHNpemUoKSkgKi9cbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbitcdGNoYXIgKmZpbGU7XG4rXHRpbnQgbnRocmVhZHM7XG4rXHR1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzO1xuK307XG4rXG4rdm9pZCAqZ3VwX3RocmVhZCh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7XG4rXHRpbnQgaSwgc3RhdHVzO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVwZWF0czsgaSsrKSB7XG4rXHRcdGd1cC5zaXplID0gc2l6ZTtcbitcdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4rXHRcdGlmIChzdGF0dXMpIHtcbitcdFx0XHRiZW5jaF9lcnJvciA9IDE7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbitcdFx0cHJpbnRmKFwiJXMgdGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcIixcbitcdFx0ICAgICAgIGJlbmNoX2xhYmVsLCBndXAuZ2V0X2RlbHRhX3VzZWMsXG4rXHRcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xuK1x0XHRpZiAoZ3VwLnNpemUgIT0gc2l6ZSlcbitcdFx0XHRwcmludGYoXCIsIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcIiwgZ3VwLnNpemUpO1xuK1x0XHRwcmludGYoXCJcXG5cIik7XG4rXHRcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbitcdH1cbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IHJ1bl9iZW5jaChzdHJ1Y3QgYmVuY2hfcnVuICpydW4pXG4re1xuK1x0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuK1x0aW50IHplcm9fZmQsIGksIHJldCwgc3RhcnRlZF90aHJlYWRzID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXNfcGVyX2NhbGw7XG4rXHRpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURTtcbitcdHB0aHJlYWRfdCAqdGlkO1xuK1x0Y2hhciBsYWJlbFsxMjhdO1xuK1x0Y2hhciAqcDtcbitcdGJvb2wgcmVzdG9yZV9odWdldGxiID0gZmFsc2U7XG4rXG4rXHQvKiBTZXQgZ2xvYmFscyBjb25zdW1lZCBieSBndXBfdGhyZWFkICovXG4rXHRjbWQgPSBydW4tXHUwMDNlY21kO1xuK1x0c2l6ZSA9IHJ1bi1cdTAwM2VzaXplO1xuK1x0YmVuY2hfZXJyb3IgPSAwO1xuK1xuK1x0aWYgKHJ1bi1cdTAwM2VodWdldGxiKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcbitcbitcdFx0aWYgKCFocF9zaXplKSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiQ291bGQgbm90IGRldGVybWluZSBodWdlIHBhZ2Ugc2l6ZVxcblwiKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoc2l6ZSBcdTAwM2UgVUxPTkdfTUFYIC0gKGhwX3NpemUgLSAxKSkge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIkh1Z2VUTEIgbWFwcGluZyBzaXplIGlzIHRvbyBsYXJnZVxcblwiKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuK1xuK1x0XHRzaXplID0gKHNpemUgKyBocF9zaXplIC0gMSkgXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xuK1x0XHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cIik7XG4rXHRcdFx0aHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7XG4rXHRcdFx0cmV0dXJuIDE7XG4rXHRcdH1cbitcdFx0cmVzdG9yZV9odWdldGxiID0gdHJ1ZTtcbitcdFx0ZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XG4rXHR9XG4rXG4rXHRpZiAocnVuLVx1MDAzZXNoYXJlZCkge1xuK1x0XHRmbGFncyBcdTAwMjY9IH5NQVBfUFJJVkFURTtcbitcdFx0ZmxhZ3MgfD0gTUFQX1NIQVJFRDtcbitcdH1cbitcbitcdG5yX3BhZ2VzX3Blcl9jYWxsID0gcnVuLVx1MDAzZW5yX3BhZ2VzIFx1MDAzYyAwID8gc2l6ZSAvIHBzaXplKCkgOlxuK1x0XHQodW5zaWduZWQgbG9uZylydW4tXHUwMDNlbnJfcGFnZXM7XG4rXG4rXHRpZiAobnJfcGFnZXNfcGVyX2NhbGwgXHUwMDNlIFVJTlRfTUFYKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIlBhZ2UgY291bnQgaXMgdG9vIGxhcmdlXFxuXCIpO1xuK1x0XHRpZiAocmVzdG9yZV9odWdldGxiKVxuK1x0XHRcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX3Blcl9jYWxsO1xuK1xuK1x0Z3VwLmd1cF9mbGFncyA9IHJ1bi1cdTAwM2VndXBfZmxhZ3M7XG4rXHRpZiAocnVuLVx1MDAzZXdyaXRlKVxuK1x0XHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XG4rXG4rXHRzbnByaW50ZihsYWJlbCwgc2l6ZW9mKGxhYmVsKSwgXCIlcyAobnJfcGFnZXM9JS00dSAlcyAlcyAlcyAlcylcIixcbitcdFx0IGNtZF90b19zdHIocnVuLVx1MDAzZWNtZCksXG4rXHRcdCBndXAubnJfcGFnZXNfcGVyX2NhbGwsXG4rXHRcdCBydW4tXHUwMDNld3JpdGUgID8gXCJ3cml0ZVwiICAgOiBcInJlYWRcIixcbitcdFx0IHJ1bi1cdTAwM2VzaGFyZWQgPyBcInNoYXJlZFwiICA6IFwicHJpdmF0ZVwiLFxuK1x0XHQgcnVuLVx1MDAzZWh1Z2V0bGIgPyBcImh1Z2V0bGI9b25cIiA6IFwiaHVnZXRsYj1vZmZcIixcbitcdFx0IHJ1bi1cdTAwM2VodWdldGxiID8gXCJ0aHA9b2ZmXCIgOlxuK1x0XHQgKHJ1bi1cdTAwM2V0aHAgPT0gMSA/IFwidGhwPW9uXCIgOlxuK1x0XHQgKHJ1bi1cdTAwM2V0aHAgPT0gMCA/IFwidGhwPW9mZlwiIDogXCJ0aHA9ZGVmYXVsdFwiKSkpO1xuK1x0YmVuY2hfbGFiZWwgPSBsYWJlbDtcbitcbitcdHplcm9fZmQgPSBvcGVuKHJ1bi1cdTAwM2VmaWxlLCBPX1JEV1IpO1xuK1x0aWYgKHplcm9fZmQgXHUwMDNjIDApIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiVW5hYmxlIHRvIG9wZW4gJXM6ICVzXFxuXCIsIHJ1bi1cdTAwM2VmaWxlLCBzdHJlcnJvcihlcnJubykpO1xuK1x0XHRpZiAocmVzdG9yZV9odWdldGxiKVxuK1x0XHRcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcbitcdHAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCB6ZXJvX2ZkLCAwKTtcbitcdGNsb3NlKHplcm9fZmQpO1xuK1x0aWYgKHAgPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJtbWFwOiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0XHRpZiAocmVzdG9yZV9odWdldGxiKVxuK1x0XHRcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDtcbitcbitcdGlmIChydW4tXHUwMDNldGhwID09IDEpXG4rXHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4rXHRlbHNlIGlmIChydW4tXHUwMDNldGhwID09IDApXG4rXHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbitcbitcdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xuK1x0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBwc2l6ZSgpKVxuK1x0XHRwWzBdID0gMDtcbitcbitcdHRpZCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIHJ1bi1cdTAwM2VudGhyZWFkcyk7XG4rXHRpZiAoIXRpZCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJGYWlsZWQgdG8gYWxsb2NhdGUgJWQgdGhyZWFkczogJXNcXG5cIixcbitcdFx0XHRydW4tXHUwMDNlbnRocmVhZHMsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdG11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTtcbitcdFx0aWYgKHJlc3RvcmVfaHVnZXRsYilcbitcdFx0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBydW4tXHUwMDNlbnRocmVhZHM7IGkrKykge1xuK1x0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsIFx1MDAyNmd1cCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6ICVzXFxuXCIsIHN0cmVycm9yKHJldCkpO1xuK1x0XHRcdGJlbmNoX2Vycm9yID0gMTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRzdGFydGVkX3RocmVhZHMrKztcbitcdH1cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YXJ0ZWRfdGhyZWFkczsgaSsrKSB7XG4rXHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwicHRocmVhZF9qb2luIGZhaWxlZDogJXNcXG5cIiwgc3RyZXJyb3IocmV0KSk7XG4rXHRcdFx0YmVuY2hfZXJyb3IgPSAxO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRmcmVlKHRpZCk7XG4rXHRtdW5tYXAoKHZvaWQgKilndXAuYWRkciwgc2l6ZSk7XG4rXHRpZiAocmVzdG9yZV9odWdldGxiKVxuK1x0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbitcbitcdHJldHVybiBiZW5jaF9lcnJvciA/IDEgOiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ1bl9tYXRyaXgodm9pZClcbit7XG4rXHR1bnNpZ25lZCBpbnQgYywgdCwgdywgcywgbjtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0Zm9yIChjID0gMDsgYyBcdTAwM2MgQVJSQVlfU0laRShiZW5jaF9jbWRzKTsgYysrKSB7XG4rXHRcdGZvciAodyA9IDA7IHcgXHUwMDNjPSAxOyB3KyspIHtcbitcdFx0XHRmb3IgKHMgPSAwOyBzIFx1MDAzYz0gMTsgcysrKSB7XG4rXHRcdFx0XHRmb3IgKHQgPSAwOyB0IFx1MDAzYyBBUlJBWV9TSVpFKGJlbmNoX3RocF9tb2Rlcyk7IHQrKykge1xuK1x0XHRcdFx0XHRmb3IgKG4gPSAwOyBuIFx1MDAzYyBBUlJBWV9TSVpFKGJlbmNoX25yX3BhZ2VzX2xpc3QpOyBuKyspIHtcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgYmVuY2hfcnVuIHJ1biA9IHtcbitcdFx0XHRcdFx0XHRcdC5jbWRcdCAgPSBiZW5jaF9jbWRzW2NdLFxuK1x0XHRcdFx0XHRcdFx0LnRocFx0ICA9IGJlbmNoX3RocF9tb2Rlc1t0XSxcbitcdFx0XHRcdFx0XHRcdC5odWdldGxiICA9IGZhbHNlLFxuK1x0XHRcdFx0XHRcdFx0LndyaXRlXHQgID0gdyxcbitcdFx0XHRcdFx0XHRcdC5zaGFyZWRcdCAgPSBzLFxuK1x0XHRcdFx0XHRcdFx0Lm5yX3BhZ2VzID0gYmVuY2hfbnJfcGFnZXNfbGlzdFtuXSxcbitcdFx0XHRcdFx0XHRcdC5zaXplXHQgID0gMTI4ICogTUIsXG4rXHRcdFx0XHRcdFx0XHQuZmlsZVx0ICA9IFwiL2Rldi96ZXJvXCIsXG4rXHRcdFx0XHRcdFx0XHQubnRocmVhZHMgPSAxLFxuK1x0XHRcdFx0XHRcdH07XG4rXHRcdFx0XHRcdFx0cmV0IHw9IHJ1bl9iZW5jaChcdTAwMjZydW4pO1xuK1x0XHRcdFx0XHR9XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHQvKiBodWdldGxiOiAyNTZNIHRvIG1hdGNoIHJ1bl9ndXBfbWF0cml4KCkgaW4gcnVuX3ZtdGVzdHMuc2ggKi9cbitcdFx0XHRcdGZvciAobiA9IDA7IG4gXHUwMDNjIEFSUkFZX1NJWkUoYmVuY2hfbnJfcGFnZXNfbGlzdCk7IG4rKykge1xuK1x0XHRcdFx0XHRzdHJ1Y3QgYmVuY2hfcnVuIHJ1biA9IHtcbitcdFx0XHRcdFx0XHQuY21kXHQgID0gYmVuY2hfY21kc1tjXSxcbitcdFx0XHRcdFx0XHQudGhwXHQgID0gLTEsXG4rXHRcdFx0XHRcdFx0Lmh1Z2V0bGIgID0gdHJ1ZSxcbitcdFx0XHRcdFx0XHQud3JpdGVcdCAgPSB3LFxuK1x0XHRcdFx0XHRcdC5zaGFyZWRcdCAgPSBzLFxuK1x0XHRcdFx0XHRcdC5ucl9wYWdlcyA9IGJlbmNoX25yX3BhZ2VzX2xpc3Rbbl0sXG4rXHRcdFx0XHRcdFx0LnNpemVcdCAgPSAyNTYgKiBNQixcbitcdFx0XHRcdFx0XHQuZmlsZVx0ICA9IFwiL2Rldi96ZXJvXCIsXG4rXHRcdFx0XHRcdFx0Lm50aHJlYWRzID0gMSxcbitcdFx0XHRcdFx0fTtcbitcdFx0XHRcdFx0cmV0IHw9IHJ1bl9iZW5jaChcdTAwMjZydW4pO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuK3tcbitcdHN0cnVjdCBiZW5jaF9ydW4gcnVuID0ge1xuK1x0XHQuY21kXHQgID0gR1VQX0ZBU1RfQkVOQ0hNQVJLLFxuK1x0XHQudGhwXHQgID0gLTEsXG4rXHRcdC5odWdldGxiICA9IGZhbHNlLFxuK1x0XHQud3JpdGVcdCAgPSB0cnVlLFxuK1x0XHQuc2hhcmVkXHQgID0gZmFsc2UsXG4rXHRcdC5ucl9wYWdlcyA9IDEsXG4rXHRcdC5zaXplXHQgID0gMTI4ICogTUIsXG4rXHRcdC5maWxlXHQgID0gXCIvZGV2L3plcm9cIixcbitcdFx0Lm50aHJlYWRzID0gMSxcbitcdH07XG4rXHRpbnQgb3B0LCByZXN1bHQ7XG4rXG4rXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcIm06cjpuOkY6Zjphajp0VEx1d1dTSFwiKSkgIT0gLTEpIHtcbitcdFx0c3dpdGNoIChvcHQpIHtcbitcdFx0LyogQ29tbWFuZCBzZWxlY3Rpb24gKi9cbitcdFx0Y2FzZSAndSc6XG4rXHRcdFx0cnVuLmNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSztcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnYSc6XG4rXHRcdFx0cnVuLmNtZCA9IFBJTl9GQVNUX0JFTkNITUFSSztcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnTCc6XG4rXHRcdFx0cnVuLmNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIE1lbW9yeSB0eXBlICovXG4rXHRcdGNhc2UgJ0gnOlxuK1x0XHRcdHJ1bi5odWdldGxiID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAndCc6XG4rXHRcdFx0cnVuLnRocCA9IDE7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ1QnOlxuK1x0XHRcdHJ1bi50aHAgPSAwO1xuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBBY2Nlc3MgbW9kZSAqL1xuK1x0XHRjYXNlICd3JzpcbitcdFx0XHRydW4ud3JpdGUgPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdXJzpcbitcdFx0XHRydW4ud3JpdGUgPSBmYWxzZTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnUyc6XG4rXHRcdFx0cnVuLnNoYXJlZCA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIE1hcHBpbmcgKi9cbitcdFx0Y2FzZSAnZic6XG4rXHRcdFx0cnVuLmZpbGUgPSBvcHRhcmc7XG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIFNpemluZyBhbmQgaXRlcmF0aW9uICovXG4rXHRcdGNhc2UgJ20nOlxuK1x0XHRcdHJ1bi5zaXplID0gcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcob3B0YXJnLCBcInNpemVcIik7XG4rXHRcdFx0aWYgKHJ1bi5zaXplIFx1MDAzZSBVTE9OR19NQVggLyBNQikge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiSW52YWxpZCBzaXplICclcydcXG5cIiwgb3B0YXJnKTtcbitcdFx0XHRcdGV4aXQoMSk7XG4rXHRcdFx0fVxuK1x0XHRcdHJ1bi5zaXplICo9IE1CO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICduJzoge1xuK1x0XHRcdGxvbmcgdmFsO1xuK1xuK1x0XHRcdHZhbCA9IHBhcnNlX2xvbmdfYXJnKG9wdGFyZywgXCJwYWdlIGNvdW50XCIpO1xuK1x0XHRcdGlmICh2YWwgIT0gLTEgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDNjIDEgfHwgdmFsIFx1MDAzZSBJTlRfTUFYKSkge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiSW52YWxpZCBwYWdlIGNvdW50ICclcydcXG5cIiwgb3B0YXJnKTtcbitcdFx0XHRcdGV4aXQoMSk7XG4rXHRcdFx0fVxuK1x0XHRcdHJ1bi5ucl9wYWdlcyA9IHZhbDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRjYXNlICdyJzoge1xuK1x0XHRcdGxvbmcgdmFsO1xuK1xuK1x0XHRcdHZhbCA9IHBhcnNlX3Bvc2l0aXZlX2xvbmdfYXJnKG9wdGFyZywgXCJyZXBlYXQgY291bnRcIik7XG4rXHRcdFx0aWYgKHZhbCBcdTAwM2UgSU5UX01BWCkge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiSW52YWxpZCByZXBlYXQgY291bnQgJyVzJ1xcblwiLCBvcHRhcmcpO1xuK1x0XHRcdFx0ZXhpdCgxKTtcbitcdFx0XHR9XG4rXHRcdFx0cmVwZWF0cyA9IHZhbDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRjYXNlICdqJzoge1xuK1x0XHRcdGxvbmcgdmFsO1xuK1xuK1x0XHRcdHZhbCA9IHBhcnNlX3Bvc2l0aXZlX2xvbmdfYXJnKG9wdGFyZywgXCJ0aHJlYWQgY291bnRcIik7XG4rXHRcdFx0aWYgKHZhbCBcdTAwM2UgSU5UX01BWCB8fFxuK1x0XHRcdCAgICAoc2l6ZV90KXZhbCBcdTAwM2UgU0laRV9NQVggLyBzaXplb2YocHRocmVhZF90KSkge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiSW52YWxpZCB0aHJlYWQgY291bnQgJyVzJ1xcblwiLCBvcHRhcmcpO1xuK1x0XHRcdFx0ZXhpdCgxKTtcbitcdFx0XHR9XG4rXHRcdFx0cnVuLm50aHJlYWRzID0gdmFsO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdC8qIEFkdmFuY2VkICovXG4rXHRcdGNhc2UgJ0YnOiB7XG4rXHRcdFx0bG9uZyB2YWw7XG4rXG4rXHRcdFx0dmFsID0gcGFyc2VfbG9uZ19hcmdfYmFzZShvcHRhcmcsIFwiR1VQIGZsYWdzXCIsIDApO1xuK1x0XHRcdGlmICh2YWwgXHUwMDNjIDAgfHwgdmFsIFx1MDAzZSBVSU5UX01BWCkge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiSW52YWxpZCBHVVAgZmxhZ3MgJyVzJ1xcblwiLCBvcHRhcmcpO1xuK1x0XHRcdFx0ZXhpdCgxKTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0cnVuLmd1cF9mbGFncyA9IHZhbDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIldyb25nIGFyZ3VtZW50XFxuXCIpO1xuK1x0XHRcdGV4aXQoMSk7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChvcHRpbmQgIT0gYXJnYykge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJVbmV4cGVjdGVkIGFyZ3VtZW50ICclcydcXG5cIiwgYXJndltvcHRpbmRdKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbitcbitcdGd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbitcdGlmIChndXBfZmQgPT0gLTEpIHtcbitcdFx0aWYgKGVycm5vID09IEVBQ0NFUykge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIlBsZWFzZSBydW4gYXMgcm9vdFxcblwiKTtcbitcdFx0fSBlbHNlIGlmIChlcnJubyA9PSBFTk9FTlQpIHtcbitcdFx0XHRESVIgKmRlYnVnZnMgPSBvcGVuZGlyKFwiL3N5cy9rZXJuZWwvZGVidWdcIik7XG4rXG4rXHRcdFx0aWYgKCFkZWJ1Z2ZzKSB7XG4rXHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxuXCIpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRjbG9zZWRpcihkZWJ1Z2ZzKTtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIkNoZWNrIENPTkZJR19HVVBfVEVTVCBpbiBrZXJuZWwgY29uZmlnXFxuXCIpO1xuK1x0XHRcdH1cbitcdFx0fSBlbHNlIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJGYWlsZWQgdG8gb3BlbiAlczogJXNcXG5cIiwgR1VQX1RFU1RfRklMRSxcbitcdFx0XHRcdHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdH1cbitcdFx0ZXhpdCgxKTtcbitcdH1cbitcbitcdHJlc3VsdCA9IChhcmdjID09IDEpID8gcnVuX21hdHJpeCgpIDogcnVuX2JlbmNoKFx1MDAyNnJ1bik7XG4rXHRjbG9zZShndXBfZmQpO1xuK1x0cmV0dXJuIHJlc3VsdDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggZTZkZjk2OGYwOTcxYzguLmU3N2M0Y2M0MWI0NzAzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMzcsNyArMzcsOCBAQCBlbmRpZlxuICMgTERMSUJTLlxuIE1BS0VGTEFHUyArPSAtLW5vLWJ1aWx0aW4tcnVsZXNcbiBcbi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxuK0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliXG4rQ0ZMQUdTICs9ICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXG4gQ0ZMQUdTICs9IC1XdW5yZWFjaGFibGUtY29kZVxuIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbVxuIFxuQEAgLTE4Nyw4ICsxODgsMTAgQEAgVEVTVF9GSUxFUyArPSB3cml0ZV9odWdldGxiX21lbW9yeS5zaFxuIFxuIGluY2x1ZGUgLi4vbGliLm1rXG4gXG4tJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jXG4tJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jXG4rJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXG4rXHRcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xuKyQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcXFxuK1x0XHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbiBcbiAkKE9VVFBVVCkvdWZmZC1zdHJlc3M6IHVmZmQtY29tbW9uLmNcbiAkKE9VVFBVVCkvdWZmZC11bml0LXRlc3RzOiB1ZmZkLWNvbW1vbi5jXG5AQCAtMjE3LDcgKzIyMCw3IEBAICQoQklOQVJJRVNfMzIpOiBDRkxBR1MgKz0gLW0zMiAtbXhzYXZlXG4gJChCSU5BUklFU18zMik6IExETElCUyArPSAtbHJ0IC1sZGwgLWxtXG4gJChCSU5BUklFU18zMik6ICQoT1VUUFVUKS8lXzMyOiAlLmNcbiBcdCQoY2FsbCBtc2csQ0MsLCRAKVxuLVx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxuK1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRAXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTMyLCQodCkpKSlcbiBlbmRpZlxuIFxuQEAgLTIyNiw3ICsyMjksNyBAQCAkKEJJTkFSSUVTXzY0KTogQ0ZMQUdTICs9IC1tNjQgLW14c2F2ZVxuICQoQklOQVJJRVNfNjQpOiBMRExJQlMgKz0gLWxydCAtbGRsXG4gJChCSU5BUklFU182NCk6ICQoT1VUUFVUKS8lXzY0OiAlLmNcbiBcdCQoY2FsbCBtc2csQ0MsLCRAKVxuLVx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxuK1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRAXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTY0LCQodCkpKSlcbiBlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcbmluZGV4IDViNTgyNTg4ZTAxNWQ0Li5iMmVhYTQ5MGU3YzI1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuQEAgLTE1LDkgKzE1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgTUFQX1NJWkVfTUJcdDEwMFxuICNkZWZpbmUgTUFQX1NJWkVcdChNQVBfU0laRV9NQiAqIDEwMjQgKiAxMDI0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbmluZGV4IDBjNjI3ZWE4OWZmN2IyLi4zYzNkMTI5YzkxYjI5ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuQEAgLTI5LDcgKzI5LDYgQEBcbiAjaW5jbHVkZSBcIi4uLy4uLy4uLy4uL21tL2d1cF90ZXN0LmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbmluZGV4IDYzMjllMzdmZmY0Yzk0Li40OTZiNzRiMzc0NzZiMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xuQEAgLTI1LDcgKzI1LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIHVpbnQ2NF90IHBhZ2Vfc2l6ZTtcbiB1aW50NjRfdCBwbWRfcGFnZXNpemU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5pbmRleCBiMjFkZjMwNDBiMWM3Yy4uZWQ5NjdiM2M3ZjM3MDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuQEAgLTIxLDcgKzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpbmNsdWRlIFwiLi4vcGlkZmQvcGlkZmQuaFwiXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuaW5kZXggZWI4OTYzZTlkOThmMDYuLjY4Yzg0MGJhZTA4MjA4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG5AQCAtMjksNyArMjksNiBAQFxuICNpbmNsdWRlIFwiLi4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcbiBzdGF0aWMgaW50IG5yX2h1Z2V0bGJzaXplcztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuaW5kZXggM2Y4NDFhOTZmODcwNjguLmQ5Y2FhOWZiOGI3ODU2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuQEAgLTEsMjc1ICsxLDQ0MyBAQFxuICNkZWZpbmUgX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fIC8vIFVzZSBsbDY0XG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvaW9jdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2Nhc3NlcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY21tL2d1cF90ZXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuIFxuICNkZWZpbmUgTUIgKDFVTCBcdTAwM2NcdTAwM2MgMjApXG4gXG4rI2lmbmRlZiBBUlJBWV9TSVpFXG4rI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSlcbisjZW5kaWZcbitcbiAvKiBKdXN0IHRoZSBmbGFncyB3ZSBuZWVkLCBjb3BpZWQgZnJvbSB0aGUga2VybmVsIGludGVybmFscy4gKi9cbiAjZGVmaW5lIEZPTExfV1JJVEVcdDB4MDFcdC8qIGNoZWNrIHB0ZSBpcyB3cml0YWJsZSAqL1xuIFxuKy8qIFBhZ2UgY291bnRzIGV4ZXJjaXNpbmcgc2luZ2xlLCBUSFAtYmF0Y2gsIHBhcnRpYWwsIGFuZCBmdWxsLW1hcHBpbmcgR1VQLiAqL1xuK3N0YXRpYyBjb25zdCBpbnQgbnJfcGFnZXNfbGlzdFtdID0geyAxLCA1MTIsIDEyMywgLTEgfTtcbitcbiAjZGVmaW5lIEdVUF9URVNUX0ZJTEUgXCIvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdFwiXG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgY21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xuLXN0YXRpYyBpbnQgZ3VwX2ZkLCByZXBlYXRzID0gMTtcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7XG4tLyogU2VyaWFsaXplIHByaW50cyAqL1xuLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgcHJpbnRfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xuK0ZJWFRVUkUoZ3VwX3Rlc3QpXG4re1xuK1x0aW50IGd1cF9mZDtcbitcdGNoYXIgKmFkZHI7XG4rXHR1bnNpZ25lZCBsb25nIHNpemU7XG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpXG4re1xuK1x0Ym9vbCB0aHA7XG4rXHRib29sIGh1Z2V0bGI7XG4rXHRib29sIHdyaXRlO1xuK1x0Ym9vbCBzaGFyZWQ7XG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkb25seSlcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocClcbit7XG4rXHQudGhwID0gdHJ1ZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkb25seV90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSB0cnVlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZG9ubHlfaHVnZXRsYilcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IHRydWUsXG4rXHQud3JpdGUgPSBmYWxzZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZSlcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSB0cnVlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRvbmx5KVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSBmYWxzZSxcbitcdC5zaGFyZWQgPSB0cnVlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocClcbit7XG4rXHQudGhwID0gdHJ1ZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbiBcbi1zdGF0aWMgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZClcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZG9ubHlfdGhwKVxuIHtcbi1cdHN3aXRjaCAoY21kKSB7XG4tXHRjYXNlIEdVUF9GQVNUX0JFTkNITUFSSzpcbi1cdFx0cmV0dXJuIFwiR1VQX0ZBU1RfQkVOQ0hNQVJLXCI7XG4tXHRjYXNlIFBJTl9GQVNUX0JFTkNITUFSSzpcbi1cdFx0cmV0dXJuIFwiUElOX0ZBU1RfQkVOQ0hNQVJLXCI7XG4tXHRjYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6XG4tXHRcdHJldHVybiBcIlBJTl9MT05HVEVSTV9CRU5DSE1BUktcIjtcbi1cdGNhc2UgR1VQX0JBU0lDX1RFU1Q6XG4tXHRcdHJldHVybiBcIkdVUF9CQVNJQ19URVNUXCI7XG4tXHRjYXNlIFBJTl9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCJQSU5fQkFTSUNfVEVTVFwiO1xuLVx0Y2FzZSBEVU1QX1VTRVJfUEFHRVNfVEVTVDpcbi1cdFx0cmV0dXJuIFwiRFVNUF9VU0VSX1BBR0VTX1RFU1RcIjtcbitcdC50aHAgPSB0cnVlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYilcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IHRydWUsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZG9ubHlfaHVnZXRsYilcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IHRydWUsXG4rXHQud3JpdGUgPSBmYWxzZSxcbitcdC5zaGFyZWQgPSB0cnVlLFxuK307XG4rXG4rRklYVFVSRV9TRVRVUChndXBfdGVzdClcbit7XG4rXHRpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFO1xuK1x0aW50IHplcm9fZmQ7XG4rXHRjaGFyICpwO1xuK1xuK1x0LyogemVyb19mZCBoYXMgdG8gYmUgXHUwMDNlPSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovXG4rXHR6ZXJvX2ZkID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKHplcm9fZmQsIDApO1xuK1xuK1x0LyogZ3VwX2ZkIGhhcyB0byBiZSBcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cbitcdHNlbGYtXHUwMDNlZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZ3VwX2ZkLCAwKTtcbitcbitcdHNlbGYtXHUwMDNlc2l6ZSA9IHZhcmlhbnQtXHUwMDNlaHVnZXRsYiA/IDI1NiAqIE1CIDogMTI4ICogTUI7XG4rXG4rXHQvKiBDaGVjayBmb3IgaHVnZXRsYiAqL1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNlaHVnZXRsYikge1xuK1x0XHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4rXG4rXHRcdGlmICghaHBfc2l6ZSkge1xuK1x0XHRcdGNsb3NlKHplcm9fZmQpO1xuK1x0XHRcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbitcdFx0XHRTS0lQKHJldHVybiwgXCJIdWdlVExCIG5vdCBhdmFpbGFibGVcXG5cIik7XG4rXHRcdH1cbitcbitcdFx0c2VsZi1cdTAwM2VzaXplID0gKHNlbGYtXHUwMDNlc2l6ZSArIGhwX3NpemUgLSAxKSBcdTAwMjYgfihocF9zaXplIC0gMSk7XG4rXHRcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNlbGYtXHUwMDNlc2l6ZSAvIGhwX3NpemUpKSB7XG4rXHRcdFx0aHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7XG4rXHRcdFx0Y2xvc2UoemVyb19mZCk7XG4rXHRcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VndXBfZmQpO1xuK1x0XHRcdFNLSVAocmV0dXJuLCBcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwiKTtcbitcdFx0fVxuK1xuK1x0XHRtbWFwX2ZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpO1xuK1x0fVxuK1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNlc2hhcmVkKVxuK1x0XHRtbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgXHUwMDI2IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEO1xuK1xuK1x0c2VsZi1cdTAwM2VhZGRyID0gbW1hcChOVUxMLCBzZWxmLVx1MDAzZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdFx0ICBtbWFwX2ZsYWdzLCB6ZXJvX2ZkLCAwKTtcbitcbitcdGNsb3NlKHplcm9fZmQpO1xuK1xuK1x0QVNTRVJUX05FKHNlbGYtXHUwMDNlYWRkciwgTUFQX0ZBSUxFRCkge1xuK1x0XHRpbnQgZXJyID0gZXJybm87XG4rXG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbitcdFx0aWYgKHZhcmlhbnQtXHUwMDNlaHVnZXRsYilcbitcdFx0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbitcdFx0VEhfTE9HKFwibW1hcCBmYWlsZWQ6ICVzXCIsIHN0cmVycm9yKGVycikpO1xuIFx0fVxuLVx0cmV0dXJuIFwiVW5rbm93biBjb21tYW5kXCI7XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2V0aHApXG4rXHRcdG1hZHZpc2Uoc2VsZi1cdTAwM2VhZGRyLCBzZWxmLVx1MDAzZXNpemUsIE1BRFZfSFVHRVBBR0UpO1xuK1x0ZWxzZVxuK1x0XHRtYWR2aXNlKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplLCBNQURWX05PSFVHRVBBR0UpO1xuK1xuK1x0Zm9yIChwID0gc2VsZi1cdTAwM2VhZGRyOyAodW5zaWduZWQgbG9uZylwIFx1MDAzYyAodW5zaWduZWQgbG9uZylzZWxmLVx1MDAzZWFkZHJcbitcdFx0XHQrIHNlbGYtXHUwMDNlc2l6ZTsgcCArPSBwc2l6ZSgpKVxuK1x0XHRwWzBdID0gMDtcbiB9XG4gXG4tdm9pZCAqZ3VwX3RocmVhZCh2b2lkICpkYXRhKVxuK0ZJWFRVUkVfVEVBUkRPV04oZ3VwX3Rlc3QpXG4ge1xuLVx0c3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTtcbi1cdGludCBpLCBzdGF0dXM7XG4tXG4tXHQvKiBPbmx5IHJlcG9ydCB0aW1pbmcgaW5mb3JtYXRpb24gb24gdGhlICpfQkVOQ0hNQVJLIGNvbW1hbmRzOiAqL1xuLVx0aWYgKChjbWQgPT0gUElOX0ZBU1RfQkVOQ0hNQVJLKSB8fCAoY21kID09IEdVUF9GQVNUX0JFTkNITUFSSykgfHxcbi1cdCAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXBlYXRzOyBpKyspIHtcbi1cdFx0XHRndXAuc2l6ZSA9IHNpemU7XG4tXHRcdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4tXHRcdFx0aWYgKHN0YXR1cylcbi1cdFx0XHRcdGJyZWFrO1xuLVxuLVx0XHRcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcIixcbi1cdFx0XHRcdCAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbi1cdFx0XHRcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xuLVx0XHRcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCIsIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcIiwgZ3VwLnNpemUpO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiXFxuXCIpO1xuLVx0XHRcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbi1cdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0Z3VwLnNpemUgPSBzaXplO1xuLVx0XHRzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgXHUwMDI2Z3VwKTtcbi1cdFx0aWYgKHN0YXR1cylcbi1cdFx0XHRnb3RvIHJldHVybl87XG4tXG4tXHRcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwiJXM6IGRvbmVcXG5cIiwgY21kX3RvX3N0cihjbWQpKTtcbi1cdFx0aWYgKGd1cC5zaXplICE9IHNpemUpXG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCJUcnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxuXCIsIGd1cC5zaXplKTtcbi1cdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuK1x0bXVubWFwKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplKTtcbitcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbitcbitcdGlmICh2YXJpYW50LVx1MDAzZWh1Z2V0bGIpXG4rXHRcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xuK31cbitcbitURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzKVxuK3tcbitcdC8qIFRlc3RzIHRoZSBnZXRfdXNlcl9wYWdlcyBwYXRoICovXG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbitcbitcdFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLVx1MDAzZWFkZHI7XG4rXHRcdGd1cC5zaXplID0gc2VsZi1cdTAwM2VzaXplO1xuK1x0XHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFx1MDAzYyAwID9cbitcdFx0XHRzZWxmLVx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTtcbitcbitcdFx0aWYgKHZhcmlhbnQtXHUwMDNld3JpdGUpXG4rXHRcdFx0Z3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFO1xuK1xuK1x0XHRUSF9MT0coXCJucl9wYWdlc19wZXJfY2FsbD0ldVwiLCBndXAubnJfcGFnZXNfcGVyX2NhbGwpO1xuK1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIEdVUF9CQVNJQ19URVNULCBcdTAwMjZndXApLCAwKTtcbitcdH1cbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlcylcbit7XG4rXHQvKiBUZXN0cyB0aGUgcGluX3VzZXJfcGFnZXMgcGF0aCAqL1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4rXG4rXHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuK1x0XHRndXAuc2l6ZSA9IHNlbGYtXHUwMDNlc2l6ZTtcbitcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4rXHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4rXG4rXHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuK1x0XHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbitcbitcdFx0VEhfTE9HKFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbitcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBQSU5fQkFTSUNfVEVTVCwgXHUwMDI2Z3VwKSwgMCk7XG4gXHR9XG4rfVxuIFxuLXJldHVybl86XG4tXHRrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsIFwiaW9jdGwgc3RhdHVzICVkXFxuXCIsIHN0YXR1cyk7XG4tXHRyZXR1cm4gTlVMTDtcbitURVNUX0YoZ3VwX3Rlc3QsIGR1bXBfdXNlcl9wYWdlc193aXRoX2dldClcbit7XG4rXHQvKiBUZXN0cyBEVU1QX1VTRVJfUEFHRVNfVEVTVCB1c2luZyBnZXRfdXNlcl9wYWdlcyAqL1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4rXG4rXHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuK1x0XHRndXAuc2l6ZSA9IHNlbGYtXHUwMDNlc2l6ZTtcbitcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4rXHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4rXG4rXHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuK1x0XHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbitcbitcdFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbitcbitcdFx0VEhfTE9HKFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbitcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgXHUwMDI2Z3VwKSwgMCk7XG4rXHR9XG4gfVxuIFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbitURVNUX0YoZ3VwX3Rlc3QsIGR1bXBfdXNlcl9wYWdlc193aXRoX3BpbilcbiB7XG4tXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4tXHRpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDtcbi1cdGludCBmbGFncyA9IE1BUF9QUklWQVRFO1xuLVx0Y2hhciAqZmlsZSA9IFwiL2Rldi96ZXJvXCI7XG4tXHRib29sIGh1Z2V0bGIgPSBmYWxzZTtcbi1cdHB0aHJlYWRfdCAqdGlkO1xuLVx0Y2hhciAqcDtcbitcdC8qIFRlc3RzIERVTVBfVVNFUl9QQUdFU19URVNUIHVzaW5nIHBpbl91c2VyX3BhZ2VzICovXG4rXHRpbnQgaTtcbiBcbi1cdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwibTpyOm46RjpmOmFiY2o6dFRMVXV3V1NIcHpcIikpICE9IC0xKSB7XG4tXHRcdHN3aXRjaCAob3B0KSB7XG4tXHRcdGNhc2UgJ2EnOlxuLVx0XHRcdGNtZCA9IFBJTl9GQVNUX0JFTkNITUFSSztcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnYic6XG4tXHRcdFx0Y21kID0gUElOX0JBU0lDX1RFU1Q7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ0wnOlxuLVx0XHRcdGNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ2MnOlxuLVx0XHRcdGNtZCA9IERVTVBfVVNFUl9QQUdFU19URVNUO1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRHVtcCBwYWdlIDAgKGluZGV4IDEpLiBNYXkgYmUgb3ZlcnJpZGRlbiBsYXRlciwgYnlcbi1cdFx0XHQgKiB1c2VyJ3Mgbm9uLW9wdGlvbiBhcmd1bWVudHMuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAud2hpY2hfcGFnZXMgaXMgemVyby1iYXNlZCwgc28gdGhhdCB6ZXJvIGNhbiBtZWFuIFwiZG9cbi1cdFx0XHQgKiBub3RoaW5nXCIuXG4tXHRcdFx0ICovXG4tXHRcdFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAncCc6XG4tXHRcdFx0Lyogd29ya3Mgb25seSB3aXRoIERVTVBfVVNFUl9QQUdFU19URVNUICovXG4tXHRcdFx0Z3VwLnRlc3RfZmxhZ3MgfD0gR1VQX1RFU1RfRkxBR19EVU1QX1BBR0VTX1VTRV9QSU47XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ0YnOlxuLVx0XHRcdC8qIHN0cnRvbCwgc28geW91IGNhbiBwYXNzIGZsYWdzIGluIGhleCBmb3JtICovXG4tXHRcdFx0Z3VwLmd1cF9mbGFncyA9IHN0cnRvbChvcHRhcmcsIDAsIDApO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdqJzpcbi1cdFx0XHRudGhyZWFkcyA9IGF0b2kob3B0YXJnKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnbSc6XG4tXHRcdFx0c2l6ZSA9IGF0b2kob3B0YXJnKSAqIE1CO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdyJzpcbi1cdFx0XHRyZXBlYXRzID0gYXRvaShvcHRhcmcpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICduJzpcbi1cdFx0XHRucl9wYWdlcyA9IGF0b2kob3B0YXJnKTtcbi1cdFx0XHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdFx0XHRucl9wYWdlcyA9IHNpemUgLyBwc2l6ZSgpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICd0Jzpcbi1cdFx0XHR0aHAgPSAxO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdUJzpcbi1cdFx0XHR0aHAgPSAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdVJzpcbi1cdFx0XHRjbWQgPSBHVVBfQkFTSUNfVEVTVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAndSc6XG4tXHRcdFx0Y21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICd3Jzpcbi1cdFx0XHR3cml0ZSA9IDE7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ1cnOlxuLVx0XHRcdHdyaXRlID0gMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnZic6XG4tXHRcdFx0ZmlsZSA9IG9wdGFyZztcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnUyc6XG4tXHRcdFx0ZmxhZ3MgXHUwMDI2PSB+TUFQX1BSSVZBVEU7XG4tXHRcdFx0ZmxhZ3MgfD0gTUFQX1NIQVJFRDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnSCc6XG4tXHRcdFx0ZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XG4tXHRcdFx0aHVnZXRsYiA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiV3JvbmcgYXJndW1lbnRcXG5cIik7XG4tXHRcdH1cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbitcbitcdFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLVx1MDAzZWFkZHI7XG4rXHRcdGd1cC5zaXplID0gc2VsZi1cdTAwM2VzaXplO1xuK1x0XHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFx1MDAzYyAwID9cbitcdFx0XHRzZWxmLVx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTtcbitcbitcdFx0aWYgKHZhcmlhbnQtXHUwMDNld3JpdGUpXG4rXHRcdFx0Z3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFO1xuK1xuK1x0XHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xuK1x0XHRndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjtcbitcbitcdFx0VEhfTE9HKFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbitcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgXHUwMDI2Z3VwKSwgMCk7XG4gXHR9XG4rfVxuIFxuLVx0aWYgKG9wdGluZCBcdTAwM2MgYXJnYykge1xuLVx0XHRpbnQgZXh0cmFfYXJnX2NvdW50ID0gMDtcbi1cdFx0Lypcbi1cdFx0ICogRm9yIGV4YW1wbGU6XG4tXHRcdCAqXG4tXHRcdCAqICAgLi9ndXBfdGVzdCAtYyAwIDEgMHgxMDAxXG4tXHRcdCAqXG4tXHRcdCAqIC4uLnRvIGR1bXAgcGFnZXMgMCwgMSwgYW5kIDQwOTdcbi1cdFx0ICovXG4tXG4tXHRcdHdoaWxlICgob3B0aW5kIFx1MDAzYyBhcmdjKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICAgIChleHRyYV9hcmdfY291bnQgXHUwMDNjIEdVUF9URVNUX01BWF9QQUdFU19UT19EVU1QKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW5cbi1cdFx0XHQgKiB1c2Ugbm9ybWFsIDAtYmFzZWQgaW5kZXhpbmcgb24gdGhlIGNvbW1hbmQgbGluZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSArIDE7XG4tXG4tXHRcdFx0Z3VwLndoaWNoX3BhZ2VzW2V4dHJhX2FyZ19jb3VudF0gPSBwYWdlX2luZGV4O1xuLVx0XHRcdGV4dHJhX2FyZ19jb3VudCsrO1xuLVx0XHRcdG9wdGluZCsrO1xuLVx0XHR9XG4rVEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlc19mYXN0KVxuK3tcbitcdC8qIFRlc3RzIHRoZSBsb2NrbGVzcyBnZXRfdXNlcl9wYWdlc19mYXN0KCkgcGF0aCAqL1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4rXG4rXHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuK1x0XHRndXAuc2l6ZSA9IHNlbGYtXHUwMDNlc2l6ZTtcbitcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4rXHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4rXG4rXHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuK1x0XHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbitcbitcdFx0VEhfTE9HKFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbitcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBHVVBfRkFTVF9CRU5DSE1BUkssIFx1MDAyNmd1cCksIDApO1xuIFx0fVxuK31cbitcbitURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2Zhc3QpXG4re1xuK1x0LyogVGVzdHMgdGhlIGxvY2tsZXNzIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBwYXRoICovXG4rXHRpbnQgaTtcbiBcbi1cdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4gXG4tXHRpZiAoaHVnZXRsYikge1xuLVx0XHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4rXHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuK1x0XHRndXAuc2l6ZSA9IHNlbGYtXHUwMDNlc2l6ZTtcbitcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4rXHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4gXG4tXHRcdGlmICghaHBfc2l6ZSlcbi1cdFx0XHRrc2Z0X2V4aXRfc2tpcChcIkh1Z2VUTEIgaXMgdW5hdmFpbGFibGVcXG5cIik7XG4rXHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuK1x0XHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbiBcbi1cdFx0c2l6ZSA9IChzaXplICsgaHBfc2l6ZSAtIDEpIFx1MDAyNiB+KGhwX3NpemUgLSAxKTtcbi1cdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKVxuLVx0XHRcdGtzZnRfZXhpdF9za2lwKFwiTm90IGVub3VnaCBodWdlIHBhZ2VzXFxuXCIpO1xuK1x0XHRUSF9MT0coXCJucl9wYWdlc19wZXJfY2FsbD0ldVwiLCBndXAubnJfcGFnZXNfcGVyX2NhbGwpO1xuK1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIFBJTl9GQVNUX0JFTkNITUFSSywgXHUwMDI2Z3VwKSwgMCk7XG4gXHR9XG4rfVxuIFxuLVx0a3NmdF9zZXRfcGxhbihudGhyZWFkcyk7XG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19sb25ndGVybSlcbit7XG4rXHQvKiBUZXN0cyBwaW5fdXNlcl9wYWdlcygpIHdpdGggRk9MTF9MT05HVEVSTSAqL1xuK1x0aW50IGk7XG4gXG4tXHRmaWxlZCA9IG9wZW4oZmlsZSwgT19SRFdSfE9fQ1JFQVQsIDA2NjQpO1xuLVx0aWYgKGZpbGVkIFx1MDAzYyAwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbiBcbi1cdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzO1xuLVx0aWYgKHdyaXRlKVxuLVx0XHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XG4rXHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuK1x0XHRndXAuc2l6ZSA9IHNlbGYtXHUwMDNlc2l6ZTtcbitcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4rXHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4gXG4tXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4tXHRpZiAoZ3VwX2ZkID09IC0xKSB7XG4tXHRcdHN3aXRjaCAoZXJybm8pIHtcbi1cdFx0Y2FzZSBFQUNDRVM6XG4tXHRcdFx0aWYgKGdldHVpZCgpKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCIpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIEVOT0VOVDpcbi1cdFx0XHRpZiAob3BlbmRpcihcIi9zeXMva2VybmVsL2RlYnVnXCIpID09IE5VTEwpXG4tXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcIm1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cIik7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCJjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXFxuXCIpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwiKTtcbi1cdFx0a3NmdF9leGl0X3Bhc3MoKTtcbitcdFx0aWYgKHZhcmlhbnQtXHUwMDNld3JpdGUpXG4rXHRcdFx0Z3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFO1xuK1xuK1x0XHRUSF9MT0coXCJucl9wYWdlc19wZXJfY2FsbD0ldVwiLCBndXAubnJfcGFnZXNfcGVyX2NhbGwpO1xuK1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIFBJTl9MT05HVEVSTV9CRU5DSE1BUkssIFx1MDAyNmd1cCksIDApO1xuIFx0fVxuK31cbitcbitURVNUKGR1bXBfdXNlcl9wYWdlc19zcGFyc2VfaW5kaWNlcylcbit7XG4rXHQvKiBUZXN0cyBzcGFyc2UgbXVsdGktaW5kZXggd2hpY2hfcGFnZXNbXSBpbnB1dHMuICovXG4rXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4rXHR1bnNpZ25lZCBsb25nIHNpemUgPSAxMjggKiBNQjtcbitcdGludCB6ZXJvX2ZkLCBndXBfZmQ7XG4rXHRjaGFyICphZGRyLCAqcDtcbitcbitcdHplcm9fZmQgPSBvcGVuKFwiL2Rldi96ZXJvXCIsIE9fUkRXUik7XG4rXHRBU1NFUlRfR0UoemVyb19mZCwgMCk7XG4gXG4tXHRwID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncywgZmlsZWQsIDApO1xuLVx0aWYgKHAgPT0gTUFQX0ZBSUxFRClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwibW1hcDogJXNcXG5cIiwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDtcbitcdGd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbitcdEFTU0VSVF9HRShndXBfZmQsIDApO1xuK1xuK1x0YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIHplcm9fZmQsIDApO1xuK1x0Y2xvc2UoemVyb19mZCk7XG4rXHRBU1NFUlRfTkUoYWRkciwgTUFQX0ZBSUxFRCk7XG4gXG4tXHRpZiAodGhwID09IDEpXG4tXHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4tXHRlbHNlIGlmICh0aHAgPT0gMClcbi1cdFx0bWFkdmlzZShwLCBzaXplLCBNQURWX05PSFVHRVBBR0UpO1xuK1x0bWFkdmlzZShhZGRyLCBzaXplLCBNQURWX0hVR0VQQUdFKTtcbiBcbi1cdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xuLVx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBwc2l6ZSgpKVxuK1x0Zm9yIChwID0gYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpYWRkciArIHNpemU7XG4rXHQgICAgIHAgKz0gcHNpemUoKSlcbiBcdFx0cFswXSA9IDA7XG4gXG4tXHR0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7XG4tXHRhc3NlcnQodGlkKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG50aHJlYWRzOyBpKyspIHtcbi1cdFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCBcdTAwMjZndXApO1xuLVx0XHRhc3NlcnQocmV0ID09IDApO1xuLVx0fVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRocmVhZHM7IGkrKykge1xuLVx0XHRyZXQgPSBwdGhyZWFkX2pvaW4odGlkW2ldLCBOVUxMKTtcbi1cdFx0YXNzZXJ0KHJldCA9PSAwKTtcbitcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjtcbitcdGd1cC5zaXplID0gc2l6ZTtcbitcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IHNpemUgLyBwc2l6ZSgpO1xuK1x0Z3VwLmd1cF9mbGFncyA9IEZPTExfV1JJVEU7XG4rXHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xuK1x0Z3VwLndoaWNoX3BhZ2VzWzFdID0gMjA7XG4rXHRndXAud2hpY2hfcGFnZXNbMl0gPSAweDEwMDE7XG4rXG4rXHQvKlxuK1x0ICogUHJlc2VydmUgdGhlIG9sZCBcIi4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMFwiIHNwYXJzZSBkdW1wXG4rXHQgKiBjb3ZlcmFnZSBhZnRlciByZW1vdmluZyBjb21tYW5kLWxpbmUgcGFyc2luZyBmcm9tIHRoaXMgYmluYXJ5LlxuK1x0ICovXG4rXHRBU1NFUlRfRVEoaW9jdGwoZ3VwX2ZkLCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgXHUwMDI2Z3VwKSwgMCk7XG4rXG4rXHRtdW5tYXAoYWRkciwgc2l6ZSk7XG4rXHRjbG9zZShndXBfZmQpO1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4re1xuK1x0aW50IGZkO1xuK1x0Y2hhciAqZmlsZSA9IFwiL2Rldi96ZXJvXCI7XG4rXG4rXHRmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbiBcdH1cbitcdGNsb3NlKGZkKTtcbiBcbi1cdGZyZWUodGlkKTtcbitcdGZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuK1x0aWYgKGZkID09IC0xKSB7XG4rXHRcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRcdGlmIChlcnJubyA9PSBFQUNDRVMpXG4rXHRcdFx0a3NmdF9leGl0X3NraXAoXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCIpO1xuK1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKSB7XG4rXHRcdFx0RElSICpkZWJ1Z2ZzID0gb3BlbmRpcihcIi9zeXMva2VybmVsL2RlYnVnXCIpO1xuK1xuK1x0XHRcdGlmICghZGVidWdmcykge1xuK1x0XHRcdFx0a3NmdF9leGl0X3NraXAoXCJNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxuXCIpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRjbG9zZWRpcihkZWJ1Z2ZzKTtcbitcdFx0XHRcdGtzZnRfZXhpdF9za2lwKFwiQ2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcXG5cIik7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdGtzZnRfZXhpdF9za2lwKFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XG4rXHR9XG4rXHRjbG9zZShmZCk7XG4gXG4tXHRrc2Z0X2V4aXRfcGFzcygpO1xuK1x0cmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IDJmMmI5ODc5ZDEwMDUxLi5lMWJiMDMxMDE5ZjJhYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuQEAgLTEwLDkgKzEwLDYgQEBcbiAgKiBidWdzLlxuICAqL1xuIFxuLSNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbi1cbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbkBAIC0yOSw2ICsyNiw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuIFxuIC8qXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuY1xuaW5kZXggNTU1YjRiM2QxNDMwN2UuLjU3Y2Y3OTBjYTQ3OGQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5AQCAtMTQsNyArMTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIE1JTl9GUkVFX1BBR0VTXHQyMFxuICNkZWZpbmUgTlJfSFVHRV9QQUdFU1x0MTBcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuaW5kZXggMGYyYWFkMWI3ZGJkNmYuLmE0NThiZWNmNTgzMjdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXG5AQCAtMTgsNyArMTgsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxuICNkZWZpbmUgUFJPVEVDVElPTiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuaW5kZXggZWQzZDkyZTg2MmQ4NzYuLjliNzI0YWY2NmU5Mzg4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuQEAgLTI2LDcgKzI2LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIERFRkFVTFRfTEVOR1RIX01CIDEwVUxcbiAjZGVmaW5lIE1CX1RPX0JZVEVTKHgpICh4ICogMTAyNCAqIDEwMjQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbmluZGV4IDNmZjdmMDYyYjdlYjQ1Li5mNDUxNGRhNDllMWRmNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbmluZGV4IGJjMjAyZTRlZDJiZGE3Li4yMDg2NGU3ZDRlMGM3MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbkBAIC0yMSw5ICsyMSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0ZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORVxuICNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi12bWVtbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXZtZW1tYXAuY1xuaW5kZXggNTA3ZGY3OGExNThkOGQuLmM0NmE2NTZjMjVhMDRlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi12bWVtbWFwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItdm1lbW1hcC5jXG5AQCAtMTEsNyArMTEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBQQUdFX0NPTVBPVU5EX0hFQURcdCgxVUwgXHUwMDNjXHUwMDNjIDE1KVxuICNkZWZpbmUgUEFHRV9DT01QT1VORF9UQUlMXHQoMVVMIFx1MDAzY1x1MDAzYyAxNilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuaW5kZXggZmI0NjAwNTcwZTEzMTkuLjk0OTU5NzRlY2NiZWE1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuQEAgLTIwLDcgKzIwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2lmbmRlZiBTVEFUWF9ESU9BTElHTlxuICNkZWZpbmUgU1RBVFhfRElPQUxJR05cdFx0MHgwMDAwMjAwMFVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5pbmRleCAyZGMxNTgwNTRmNjY2Yi4uNTZjNWE4NTMzZTlkOTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbkBAIC0xMCw3ICsxMCw2IEBAXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBJTkxPT1BfSVRFUiAxMDBcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcbmluZGV4IGY5NDU0OWVmY2M2ZmYzLi4yNTMyYTQyYjk4ZGZmMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5AQCAtMjUsNyArMjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBJTkxPT1BfSVRFUiAxMDBcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDEwZThkZWRjYjA4N2RjLi4yMzgyOTczYjJmNTUyYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjIsNyArMjIsNiBAQFxuICNpbmNsdWRlIFwibGludXgvbWFnaWMuaFwiXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuQEAgLTExOSw2ICsxMTgsNyBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKVxuIFx0Y2hhciBidWZbMSBcdTAwM2NcdTAwM2MgMTBdO1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiBcdGNoYXIgKnN0ciwgKmVuZDtcbitcdGludCByZXQ7XG4gXG4gXHRmaW5mby5kaXIgPSBkaXI7XG4gXHRzdGF0KGZpbmZvLmRpciwgXHUwMDI2cGF0aF9zdGF0KTtcbkBAIC0xMzgsOCArMTM4LDkgQEAgc3RhdGljIHZvaWQgZ2V0X2ZpbmZvKGNvbnN0IGNoYXIgKmRpcilcbiBcdFx0ICAgICBtYWpvcihwYXRoX3N0YXQuc3RfZGV2KSwgbWlub3IocGF0aF9zdGF0LnN0X2RldikpXG4gXHQgICAgXHUwMDNlPSBzaXplb2YocGF0aCkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwiLCBfX2Z1bmNfXyk7XG4tXHRpZiAocmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIFx1MDAzYyAwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJyZWFkX2ZpbGUocmVhZF9udW0pXCIpO1xuK1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiBcdGlmIChzdHJzdHIoYnVmLCBcIkRFVlRZUEU9ZGlza1wiKSkge1xuIFx0XHQvKiBGb3VuZCBpdCAqL1xuIFx0XHRpZiAoc25wcmludGYoZmluZm8uZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcbkBAIC0zMTksNyArMzIwLDcgQEAgc3RhdGljIHZvaWQgKmZpbGVfc2V0dXBfYXJlYV9jb21tb24oaW50IG5yX2hwYWdlcywgZW51bSBmaWxlX3NldHVwX29wcyBzZXR1cClcbiB7XG4gXHRjb25zdCBpbnQgb3Blbl9vcHQgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IE9fUkRPTkxZIDogT19SRFdSO1xuIFx0Y29uc3QgaW50IG1tYXBfcHJvdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gUFJPVF9SRUFEIDogKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpO1xuLVx0aW50IGZkO1xuK1x0aW50IGZkLCByZXQ7XG4gXHR2b2lkICpwO1xuIFx0dW5zaWduZWQgbG9uZyBzaXplO1xuIFxuQEAgLTM2Myw3ICszNjQsMTAgQEAgc3RhdGljIHZvaWQgKmZpbGVfc2V0dXBfYXJlYV9jb21tb24oaW50IG5yX2hwYWdlcywgZW51bSBmaWxlX3NldHVwX29wcyBzZXR1cClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwibW1hcCgpXCIpO1xuIFxuIFx0LyogRHJvcCBwYWdlIGNhY2hlICovXG4tXHR3cml0ZV9maWxlKFwiL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzXCIsIFwiM1wiLCAyKTtcbitcdHJldCA9IHdyaXRlX2ZpbGUoXCIvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNcIiwgXCIzXCIsIDIpO1xuK1x0aWYgKHJldClcbitcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbitcbiBcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdHJldHVybiBwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCBhMDUwZjQ4NDBjZmEzYS4uY2MzNzQ5MmNmMzJjM2QgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbkBAIC0xNSw3ICsxNSw2IEBAXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4gI2luY2x1ZGUgXHUwMDNjaW5jbHVkZS92ZHNvL3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBLU01fU1lTRlNfUEFUSCBcIi9zeXMva2VybmVsL21tL2tzbS9cIlxuICNkZWZpbmUgS1NNX0ZQKHMpIChLU01fU1lTRlNfUEFUSCBzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbmluZGV4IDI5Zjc0OTI0NTNkNDM5Li40ZmU5N2MwMzMyNjEyNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xuQEAgLTQsOSArNCw2IEBAXG4gICogcGF0aHMgaW4gdGhlIGtlcm5lbC5cbiAgKi9cbiBcbi0jaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4tXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbnVtYS5oXHUwMDNlXG5AQCAtMTYsNiArMTMsOCBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiBcbiAjZGVmaW5lIFRXT01FR1x0XHQoMlx1MDAzY1x1MDAzYzIwKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggNmY4OTcxZDViM2NlNDMuLjgwNDM3MjgwMzA4MGNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0yMyw3ICsyMyw2IEBAXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBQQUdFTUFQX0JJVFNfQUxMXHRcdChQQUdFX0lTX1dQQUxMT1dFRCB8IFBBR0VfSVNfV1JJVFRFTiB8XHRcXFxuIFx0XHRcdFx0XHQgUEFHRV9JU19GSUxFIHwgUEFHRV9JU19QUkVTRU5UIHxcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbmluZGV4IGQ4ZDlkMWRlNTdiOGIwLi5hNGY4NDUxNzkxY2JkYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbkBAIC0xNCw3ICsxNCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gXG4gI2lmbmRlZiBQUl9USFBfRElTQUJMRV9FWENFUFRfQURWSVNFRFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbmluZGV4IDlhNmQ5NTRlZTM3MTI2Li41YmEyMDMzZThhMDljZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuQEAgLTQ1LDggKzQ1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gI2luY2x1ZGUgXCJwa2V5LWhlbHBlcnMuaFwiXG4gXG4gaW50IGl0ZXJhdGlvbl9uciA9IDE7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggOGMyOTZkZWRmMDQ3NGQuLjU2ZGYwZGNjOTY0MGMwIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5AQCAtMTMwLDMwICsxMzAsNiBAQCB0ZXN0X3NlbGVjdGVkKCkge1xuIFx0ZmlcbiB9XG4gXG4tcnVuX2d1cF9tYXRyaXgoKSB7XG4tICAgICMgLXQ6IHRocD1vbiwgLVQ6IHRocD1vZmYsIC1IOiBodWdldGxiPW9uXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XG4tXG4tICAgIGZvciBodWdlIGluIC10IC1UIFwiLUggLW0gJGh1Z2V0bGJfbWJcIjsgZG9cbi0gICAgICAgICMgLXU6IGd1cC1mYXN0LCAtVTogZ3VwLWJhc2ljLCAtYTogcGluLWZhc3QsIC1iOiBwaW4tYmFzaWMsIC1MOiBwaW4tbG9uZ3Rlcm1cbi0gICAgICAgIGZvciB0ZXN0X2NtZCBpbiAtdSAtVSAtYSAtYiAtTDsgZG9cbi0gICAgICAgICAgICAjIC13OiB3cml0ZT0xLCAtVzogd3JpdGU9MFxuLSAgICAgICAgICAgIGZvciB3cml0ZSBpbiAtdyAtVzsgZG9cbi0gICAgICAgICAgICAgICAgIyAtUzogc2hhcmVkXG4tICAgICAgICAgICAgICAgIGZvciBzaGFyZSBpbiAtUyBcIiBcIjsgZG9cbi0gICAgICAgICAgICAgICAgICAgICMgLW46IEhvdyBtYW55IHBhZ2VzIHRvIGZldGNoIHRvZ2V0aGVyPyAgNTEyIGlzIHNwZWNpYWxcbi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCdzIGRlZmF1bHQgdGhwIHNpemUgKG9yIDJNIG9uIHg4NiksIDEyMyB0b1xuLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm1cbi0gICAgICAgICAgICAgICAgICAgIGZvciBudW0gaW4gXCItbiAxXCIgXCItbiA1MTJcIiBcIi1uIDEyM1wiIFwiLW4gLTFcIjsgZG9cbi0gICAgICAgICAgICAgICAgICAgICAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCBcXFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGh1Z2UgJHRlc3RfY21kICR3cml0ZSAkc2hhcmUgJG51bVxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgZG9uZVxuLSAgICBkb25lXG4tfVxuLVxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcbiBBUkNINjRTVFI9XCJhcm02NCBtaXBzNjQgcGFyaXNjNjQgcHBjNjQgcHBjNjRsZSByaXNjdjY0IHMzOTB4IHNwYXJjNjQgeDg2XzY0XCJcbiBpZiBbIC16IFwiJEFSQ0hcIiBdOyB0aGVuXG5AQCAtMjc2LDE4ICsyNTIsNyBAQCBmaVxuIFxuIENBVEVHT1JZPVwibW1hcFwiIHJ1bl90ZXN0IC4vbWFwX2ZpeGVkX25vcmVwbGFjZVxuIFxuLWlmICRSVU5fQUxMOyB0aGVuXG4tICAgIHJ1bl9ndXBfbWF0cml4XG4tZWxzZVxuLSAgICAjIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcbi0gICAgQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAtMVxuLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcbi0gICAgQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gMVxuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAtMVxuLWZpXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XG4tQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMFxuK0NBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cF90ZXN0XG4gQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX2xvbmd0ZXJtXG4gXG4gQ0FURUdPUlk9XCJ1c2VyZmF1bHRmZFwiIHJ1bl90ZXN0IC4vdWZmZC11bml0LXRlc3RzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5pbmRleCBmYjE4NjRhNjhlMWM2Yi4uNmMyMmFjOWU5M2RiMDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuQEAgLTksNyArOSw2IEBAXG4gXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCBcIi9wcm9jL3NlbGYvcGFnZW1hcFwiXG4gI2RlZmluZSBURVNUX0lURVJBVElPTlMgMTAwMDBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuaW5kZXggMzJiOTkxNDcyZjc0NGYuLmU3NDRjOTQzNGU3ZDA1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTIxLDcgKzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiB1aW50NjRfdCBwYWdlc2l6ZTtcbiB1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0O1xuQEAgLTI2OSw3ICsyNjgsOSBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0aWYgKHJldCBcdTAwM2U9IElOUFVUX01BWClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXM6IERlYnVnZnMgaW5wdXQgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuIFxuLVx0d3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICsgMSk7XG4rXHRyZXQgPSB3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgKyAxKTtcbitcdGlmIChyZXQpXG4rXHRcdGtzZnRfZXhpdF9mYWlsKCk7XG4gfVxuIFxuIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmNcbmluZGV4IDIyYjljMmYxYzM1ZDIzLi4wZGExNWQ1MzBhMWZjOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuQEAgLTE0LDcgKzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQilcbiAjZGVmaW5lIE1BUF9IVUdFVExCXHQweDQwMDAwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5pbmRleCA4ZWIwYzU2MzBlN2UzMS4uOTZmNzI4OThlYmUwYTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuQEAgLTE3LDcgKzE3LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gaW50IGJhY2tpbmdfZmQgPSAtMTtcbiBpbnQgbW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcbmluZGV4IDkyYTIxYjk3Zjc0NWFmLi4wNzIzODQzYTc2MjZiMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcbkBAIC0zNyw3ICszNyw2IEBAXG4gXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBVRkZEX0ZMQUdTXHQoT19DTE9FWEVDIHwgT19OT05CTE9DSyB8IFVGRkRfVVNFUl9NT0RFX09OTFkpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbmluZGV4IGM5NzNkNjcyMjcyMGMzLi5lYjRiMjQzM2IwMGU2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbkBAIC03LDggKzcsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuICNpbmNsdWRlIFwidWZmZC1jb21tb24uaFwiXG4gXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xuaW5kZXggZTI0ZDdiYTAwYjQ0MTcuLjVhMzU0YTY2NGQxZjdkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcbkBAIC0xMSw3ICsxMSw2IEBAXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gLypcbiAgKiBUaGUgaGludCBhZGRyIHZhbHVlIGlzIHVzZWQgdG8gYWxsb2NhdGUgYWRkcmVzc2VzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5pbmRleCAzMTFmYzViNDUxM2ViNC4uZjI3NmVlZTU3NjgwNGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuQEAgLTY5OCw5MyArNjk4LDM5IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRyZXR1cm4gcmV0IFx1MDAzZSAwID8gMCA6IC1lcnJubztcbiB9XG4gXG4taW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4te1xuLVx0aW50IGZkO1xuLVx0c3NpemVfdCBudW1yZWFkO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdGlmIChudW1yZWFkIFx1MDAzYyAxKSB7XG4tXHRcdGNsb3NlKGZkKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRidWZbbnVtcmVhZF0gPSAnXFwwJztcbi1cdGNsb3NlKGZkKTtcbi1cbi1cdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xuLX1cbi1cbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdGludCBmZCwgc2F2ZWRfZXJybm87XG4tXHRzc2l6ZV90IG51bXdyaXR0ZW47XG4tXG4tXHRpZiAoYnVmbGVuIFx1MDAzYyAyKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJJbmNvcnJlY3QgYnVmZmVyIGxlbjogJXp1XFxuXCIsIGJ1Zmxlbik7XG4tXG4tXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xuLVx0aWYgKGZkID09IC0xKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlcyBvcGVuIGZhaWxlZDogJXNcXG5cIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbi1cbi1cdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdHNhdmVkX2Vycm5vID0gZXJybm87XG4tXHRjbG9zZShmZCk7XG4tXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuLVx0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzIHdyaXRlKCUuKnMpIGZhaWxlZDogJXNcXG5cIiwgcGF0aCwgKGludCkoYnVmbGVuIC0gMSksXG4tXHRcdFx0XHRidWYsIHN0cmVycm9yKGVycm5vKSk7XG4tXHRpZiAobnVtd3JpdHRlbiAhPSBidWZsZW4gLSAxKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcblwiLFxuLVx0XHRcdFx0cGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7XG4tfVxuLVxuLXVuc2lnbmVkIGxvbmcgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aClcbi17XG4tXHRjaGFyIGJ1ZlsyMV07XG4tXG4tXHRpZiAocmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIFx1MDAzYyAwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJyZWFkX2ZpbGUoKVwiKTtcbi1cbi1cdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbi17XG4tXHRjaGFyIGJ1ZlsyMV07XG4tXG4tXHRzcHJpbnRmKGJ1ZiwgXCIlbHVcIiwgbnVtKTtcbi1cdHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSArIDEpO1xuLX1cbi1cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1hbGwsIHNobW1heDtcbiBcbiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpXG4ge1xuLVx0aWYgKHNobW1heClcbi1cdFx0d3JpdGVfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcIiwgc2htbWF4KTtcbi1cdGlmIChzaG1hbGwpXG4tXHRcdHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIHNobWFsbCk7XG4rXHRpZiAoc2htbWF4IFx1MDAyNlx1MDAyNiB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBzaG1tYXgpKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuK1x0aWYgKHNobWFsbCBcdTAwMjZcdTAwMjYgd3JpdGVfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcIiwgc2htYWxsKSlcbitcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiB9XG4gXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuciA9IGxlbmd0aCAvIHBzaXplKCk7XG4gXHR1bnNpZ25lZCBsb25nIHZhbDtcbitcdGludCByZXQ7XG4gXG4tXHR2YWwgPSByZWFkX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCIpO1xuK1x0cmV0ID0gcmVhZF9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiBcdGlmICh2YWwgXHUwMDNjIGxlbmd0aCkge1xuLVx0XHR3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBsZW5ndGgpO1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBsZW5ndGgpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsKCk7XG4gXHRcdHNobW1heCA9IHZhbDtcbiBcdH1cbiBcbi1cdHZhbCA9IHJlYWRfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcIik7XG4rXHRyZXQgPSByZWFkX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmV0KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuIFx0aWYgKHZhbCBcdTAwM2MgbnIpIHtcbi1cdFx0d3JpdGVfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcIiwgbnIpO1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFwiLCBucik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiBcdFx0c2htYWxsID0gdmFsO1xuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IGVhOGZjOGZkZjBlYjBiLi5hYTg1NmYwZDMyZDY0ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5AQCAtOCw2ICs4LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZSAvKiBfU0NfUEFHRVNJWkUgKi9cbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vZmlsZV91dGlscy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNkZWZpbmUgQklUX1VMTChucikgICAgICAgICAgICAgICAgICAgKDFVTEwgXHUwMDNjXHUwMDNjIChucikpXG4gI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KVxuQEAgLTE2NCwxMSArMTY2LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVx0KCgoZW50KSBcdTAwMjYgKDF1bGwgXHUwMDNjXHUwMDNjIDYzKSkgIT0gMClcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcdCgoZW50KSBcdTAwMjYgKCgxdWxsIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSlcbiBcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpO1xuIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDoyOTowOC44MjUwNDc1NzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjgzMjE3NTEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllczogQSBGb2N1c2VkIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgc2VlbXMgcHJldHR5IGNvbnRhaW5lZCwgd2hpY2ggaXMgZ29vZC4gVGhlIHByaW1hcnkgZm9jdXMgaXMgb24gcmVmYWN0b3JpbmcgYW5kIGFkZGluZyBzb21lIG5ldyB0b29saW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgZ3VwX3Rlc3QuY2AgY29kZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgc3BsaXR0aW5nIG91dCB1dGlsaXR5IGZ1bmN0aW9ucyBmcm9tIGBndXBfdGVzdC5jYCBpbnRvIGBmaWxlX3V0aWxzLmNgIGFuZCBgaHVnZXBhZ2Vfc2V0dGluZ3MuY2AuIE1ha2VzIHNlbnNlOyB0aGF0IHNob3VsZCBpbXByb3ZlIG1haW50YWluYWJpbGl0eSBhbmQgcG90ZW50aWFsbHkgcmV1c2FiaWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zLiBBIG5ldyB0b29sLCBgZ3VwX2JlbmNoLmNgLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLCB3aGljaCBJIGFzc3VtZSBpcyBmb3IgYmVuY2htYXJraW5nIHRoZSBHVVAgKEdldCBVc2VyIFBhZ2VzKSBvcGVyYXRpb25zLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBvbmUgaW4gbW9yZSBkZXRhaWwgdG8gdW5kZXJzdGFuZCB3aGF0IG1ldHJpY3MgdGhleSdyZSBsb29raW5nIGF0LlxuXG5Gcm9tIHRoZSBmaWxlIGxpc3QsIEkgY2FuIHNlZSB0aGUgc2NvcGUgaXMgZmFpcmx5IG5hcnJvdzogbW9zdGx5IHdpdGhpbiB0aGUgYHRvb2xzL2AsIGBEb2N1bWVudGF0aW9uL2AsIGFuZCBgTUFJTlRBSU5FUlNgIGRpcmVjdG9yaWVzLiBUaGlzIGlzIHdoYXQgSSBleHBlY3RlZC4gVGhlIGRpZmYgY29uZmlybXMgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nOiB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBhbnkgY29yZSBrZXJuZWwgbG9naWMsIG5vIGRyaXZlcnMsIG5vIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlLiBFdmVyeXRoaW5nIHNlZW1zIHRvIGJlIHVzZXItc3BhY2UgdG9vbHMgYW5kIHRlc3RzLiBUaGlzIGlzIGZ1cnRoZXIgYmFja2VkIHVwIGJ5IHRoZSBmaWxlIHBhdGhzIHdoaWNoIEkgd2lsbCB1c2UgdG8gYXNzZXNzIGNoYW5nZXMuXG5cblNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGUgY2hhbmdlcyB0byB0aGUgYERvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0YCBmaWxlIHdoaWNoIGxpa2VseSBtZWFucyB0aGUgZG9jdW1lbnRhdGlvbiBhcm91bmQgdGhlIGBwaW5fdXNlcl9wYWdlc2AgQVBJIGhhcyBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY2hhbmdlcy4gSSBhbHNvIHdhbnQgdG8gYXNzZXNzIHRoZSBgTUFJTlRBSU5FUlNgIGZpbGUgdG8gc2VlIGlmIGFueSBtYWludGFpbmVyc2hpcCBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlLlxuXG5HaXZlbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgYW5kIHRoZSBmYWN0IHRoYXQgdGhlcmUgYXJlIG5vIGFjdHVhbCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYsIEkgYmVsaWV2ZSB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYCBmb3IgdGhpcyBwYXRjaC4gSXQncyBlc3NlbnRpYWxseSBhIHJlZmFjdG9yIGFuZCBhIG5ldyB0b29sOyB0aGVyZSdzIG5vdGhpbmcgaGVyZSB0aGF0J3MgZGlyZWN0bHkgaW1wYWN0aW5nIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgdGhhdCB3b3VsZCBtYWtlIGl0IGEgcHJpb3JpdHkgdGFyZ2V0IGZvciBmdXp6aW5nLiBIb3dldmVyLCB0aGF0IGRvZXMgbm90IG1lYW4gdGhhdCB0aGUgY29kZSBpcyBmcmVlIG9mIGJ1Z3MsIHNvIEkgd2lsbCBoYXZlIGEgbW9yZSBkZXRhaWxlZCBhc3Nlc3NtZW50IG9mIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAzMiwiT3V0cHV0VG9rZW5zIjo4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjI5OjI1LjY1NzIyNDMyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xzICh0b29scy9tbS9ndXBfYmVuY2guYywgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vKSwgRG9jdW1lbnRhdGlvbiwgYW5kIE1BSU5UQUlORVJTLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xzICh0b29scy9tbS9ndXBfYmVuY2guYywgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vKSwgRG9jdW1lbnRhdGlvbiwgYW5kIE1BSU5UQUlORVJTLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow87vs5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 20:19:25 +0000 UTC FinishedAt: 2026-07-16 20:29:27 +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+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29scyAodG9vbHMvbW0vZ3VwX2JlbmNoLmMsIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyksIERvY3VtZW50YXRpb24sIGFuZCBNQUlOVEFJTkVSUy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiMGEyM2U5OTc5ZWVkZjRhNmZiNThlYTFiMzc2Y2E1Mjc1NzJjNGZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMjA6Mjk6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuaW5kZXggYzE2Y2ExNjNiNTVlM2MuLmVhNzIyYWRmMjJjY2FjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG5AQCAtMjMwLDEwICYjNDM7MjMwLDE2IEBAIFRoaXMgZmlsZTo6XG4gXG4gIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiBcbi1oYXMgdGhlIGZvbGxvd2luZyBuZXcgY2FsbHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBwaW4qKCkgd3JhcHBlciBmdW5jdGlvbnM6XG4mIzQzO2NvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdGVzdCBjYXNlcyB0byBleGVyY2lzZSBwaW5fdXNlcl9wYWdlcyooKTpcbiBcbi0qIFBJTl9GQVNUX0JFTkNITUFSSyAoLi9ndXBfdGVzdCAtYSlcbi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKVxuJiM0MzsqIHBpbl91c2VyX3BhZ2VzIHZpYSBQSU5fQkFTSUNfVEVTVFxuJiM0MzsqIHBpbl91c2VyX3BhZ2VzX2Zhc3QgdmlhIFBJTl9GQVNUX0JFTkNITUFSS1xuJiM0MzsqIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtIHZpYSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXG4mIzQzO1xuJiM0MztSdW4gd2l0aDo6XG4mIzQzO1xuJiM0MzsgIG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW1cbiYjNDM7ICAuL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0XG4gXG4gWW91IGNhbiBtb25pdG9yIGhvdyBtYW55IHRvdGFsIGRtYS1waW5uZWQgcGFnZXMgaGF2ZSBiZWVuIGFjcXVpcmVkIGFuZCByZWxlYXNlZFxuIHNpbmNlIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCwgdmlhIHR3byBuZXcgL3Byb2Mvdm1zdGF0IGVudHJpZXM6IDo6XG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggODA2YmQyZDgwZDE1MzUuLjdkMTIxZGVlOWYwZjJjIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTcwMjQsNiAmIzQzOzE3MDI0LDcgQEAgVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbVxuIEY6XHRtbS9ndXAuY1xuIEY6XHRtbS9ndXBfdGVzdC5jXG4gRjpcdG1tL2d1cF90ZXN0LmhcbiYjNDM7RjpcdHRvb2xzL21tL2d1cF9iZW5jaC5jXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiBcbkBAIC0xNzEyOCw2ICYjNDM7MTcxMjksNyBAQCBGOlx0bW0vbWVtb3J5LXRpZXJzLmNcbiBGOlx0bW0vcGFnZV9pZGxlLmNcbiBGOlx0bW0vcGdhbGxvYy10cmFjay5oXG4gRjpcdG1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmNcbiYjNDM7RjpcdHRvb2xzL2xpYi9tbS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT05cbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5jIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43OTJmNGI0ZGI2MjUyZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xuQEAgLTAsMCAmIzQzOzEsMTE5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtmaWxlX3V0aWxzLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcdHNzaXplX3QgbnVtcmVhZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAoZmQgPT0gLTEpIHtcbiYjNDM7XHRcdGludCBlcnIgPSBlcnJubztcbiYjNDM7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7IyAlczogJXMgKCVkKVxcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTtcbiYjNDM7XHRcdHJldHVybiAtZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4mIzQzO1x0aWYgKG51bXJlYWQgXHUwMDNjIDEpIHtcbiYjNDM7XHRcdGludCBlcnIgPSBudW1yZWFkID8gZXJybm8gOiBFTk9EQVRBO1xuJiM0MztcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjICVzOiAlcyAoJWQpXFxuXCYjMzQ7LCBwYXRoLCBzdHJlcnJvcihlcnIpLCBlcnIpO1xuJiM0MztcdFx0cmV0dXJuIC1lcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidWZbbnVtcmVhZF0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIChpbnQpbnVtcmVhZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkLCBzYXZlZF9lcnJubztcbiYjNDM7XHRzc2l6ZV90IG51bXdyaXR0ZW47XG4mIzQzO1xuJiM0MztcdGlmIChidWZsZW4gXHUwMDNjIDIpIHtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjICVzOiAlcyAoJWQpXFxuXCYjMzQ7LCBwYXRoLCBzdHJlcnJvcihFSU5WQUwpLCBFSU5WQUwpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xuJiM0MztcdGlmIChmZCA9PSAtMSkge1xuJiM0MztcdFx0aW50IGVyciA9IGVycm5vO1xuJiM0MztcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjICVzOiAlcyAoJWQpXFxuXCYjMzQ7LCBwYXRoLCBzdHJlcnJvcihlcnIpLCBlcnIpO1xuJiM0MztcdFx0cmV0dXJuIC1lcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4mIzQzO1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApIHtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjICVzOiAlcyAoJWQpXFxuXCYjMzQ7LCBwYXRoLCBzdHJlcnJvcihzYXZlZF9lcnJubyksXG4mIzQzO1x0XHQgICAgICAgc2F2ZWRfZXJybm8pO1xuJiM0MztcdFx0cmV0dXJuIC1zYXZlZF9lcnJubztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKG51bXdyaXR0ZW4gIT0gKHNzaXplX3QpKGJ1ZmxlbiAtIDEpKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7IyAlcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBwYXRoLCAoaW50KShidWZsZW4gLSAxKSwgYnVmLCBidWZsZW4gLSAxLCBudW13cml0dGVuKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZhbDtcbiYjNDM7XHRpbnQgZXJyLCByZXQ7XG4mIzQzO1x0Y2hhciBidWZbMjFdO1xuJiM0MztcdGNoYXIgKmVuZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFudW0pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRlcnJubyA9IDA7XG4mIzQzO1x0dmFsID0gc3RydG91bChidWYsIFx1MDAyNmVuZCwgMTApO1xuJiM0MztcdGlmIChlcnJubykge1xuJiM0MztcdFx0ZXJyID0gZXJybm87XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7IyAlczogJXMgKCVkKVxcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTtcbiYjNDM7XHRcdHJldHVybiAtZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVuZCA9PSBidWYgfHwgYnVmWzBdID09ICYjMzk7LSYjMzk7KSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7IyAlczogaW52YWxpZCBudW1lcmljIHZhbHVlXFxuXCYjMzQ7LCBwYXRoKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCplbmQgPT0gJiMzOTtcXG4mIzM5OylcbiYjNDM7XHRcdGVuZCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdGlmICgqZW5kICE9ICYjMzk7XFwwJiMzOTspIHtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjICVzOiBpbnZhbGlkIG51bWVyaWMgdmFsdWVcXG5cJiMzNDssIHBhdGgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqbnVtID0gdmFsO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMjFdO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslbHVcJiMzNDssIG51bSk7XG4mIzQzO1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSAmIzQzOyAxKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmggYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM4NTc2NzkwYTM0MjQ0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXG5AQCAtMCwwICYjNDM7MSwxMiBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX19cbiYjNDM7I2RlZmluZSBfX01NX0ZJTEVfVVRJTFNfSF9fXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRkZWYuaFx1MDAzZVxuJiM0MztcbiYjNDM7aW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuJiM0MztpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuJiM0MztpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKTtcbiYjNDM7aW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbnNpbWlsYXJpdHkgaW5kZXggOTElXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbmluZGV4IDJlYWIyMTEwYWM2YTQ2Li44ZDllNDQ3MjdlZGJmNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5AQCAtOSwxMSAmIzQzOzksMTYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ZpbGVfdXRpbHMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFRIUF9TWVNGUyBcJiMzNDsvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS9cJiMzNDtcbiAjZGVmaW5lIE1BWF9TRVRUSU5HU19ERVBUSCA0XG4mIzQzO1xuJiM0MzsjaWZuZGVmIEFSUkFZX1NJWkVcbiYjNDM7I2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSlcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNldHRpbmdzX3N0YWNrW01BWF9TRVRUSU5HU19ERVBUSF07XG4gc3RhdGljIGludCBzZXR0aW5nc19pbmRleDtcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzYXZlZF9zZXR0aW5ncztcbkBAIC02MSwxMCAmIzQzOzY2LDkgQEAgaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4gXG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkge1xuLVx0XHRwZXJyb3IocGF0aCk7XG4mIzQzO1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbiBcbiBcdGMgPSBzdHJjaHIoYnVmLCAmIzM5O1smIzM5Oyk7XG4gXHRpZiAoIWMpIHtcbkBAIC0xMDMsMTIgJiM0MzsxMDcsMTUgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbClcbiBcdFx0cHJpbnRmKFwmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHR3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgJiM0MzsgMSk7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICYjNDM7IDEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG51bTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgVEhQX1NZU0ZTIFwmIzM0OyVzXCYjMzQ7LCBuYW1lKTtcbkBAIC0xMTYsNyAmIzQzOzEyMywxMSBAQCB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxuIFx0XHRwcmludGYoXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbi1cdHJldHVybiByZWFkX251bShwYXRoKTtcbiYjNDM7XHRyZXQgPSByZWFkX251bShwYXRoLCBcdTAwMjZudW0pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBudW07XG4gfVxuIFxuIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcbkBAIC0xMjksNyAmIzQzOzE0MCw5IEBAIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcbiBcdFx0cHJpbnRmKFwmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHR3cml0ZV9udW0ocGF0aCwgbnVtKTtcbiYjNDM7XHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIH1cbiBcbiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuQEAgLTE1Nyw4ICYjNDM7MTcwLDEzIEBAIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXG4gXHRcdC5tYXhfcHRlc19zaGFyZWQgPSB0aHBfcmVhZF9udW0oXCYjMzQ7a2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWRcJiMzNDspLFxuIFx0XHQucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bShcJiMzNDtraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cJiMzNDspLFxuIFx0fTtcbi1cdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxuLVx0XHRzZXR0aW5ncy1cdTAwM2VyZWFkX2FoZWFkX2tiID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCk7XG4mIzQzO1x0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHtcbiYjNDM7XHRcdGludCByZXQgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuJiM0MztcdFx0XHRcdCAgIFx1MDAyNnNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9PUkRFUlM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICghKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgb3JkZXJzKSkge1xuQEAgLTIwOCw4ICYjNDM7MjI2LDEzIEBAIHZvaWQgdGhwX3dyaXRlX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuIFx0dGhwX3dyaXRlX251bShcJiMzNDtraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFwmIzM0Oywga2h1Z2VwYWdlZC1cdTAwM2VtYXhfcHRlc19zaGFyZWQpO1xuIFx0dGhwX3dyaXRlX251bShcJiMzNDtraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cJiMzNDssIGtodWdlcGFnZWQtXHUwMDNlcGFnZXNfdG9fc2Nhbik7XG4gXG4tXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSlcbi1cdFx0d3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuJiM0MztcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XG4mIzQzO1x0XHRpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG4mIzQzO1x0XHRcdFx0ICAgIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9PUkRFUlM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICghKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgb3JkZXJzKSlcbkBAIC0zMDYsOCAmIzQzOzMyOSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9zdXBwb3J0ZWRfb3JkZXJzKGJvb2wgaXNfc2htZW0pXG4gXHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoYWNjZXNzKHBhdGgsIEZfT0spKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbi1cdFx0aWYgKHJldClcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlIDApXG4gXHRcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbiBcdH1cbiBcbkBAIC0zODIsOCAmIzQzOzQwOCw3IEBAIGludCBkZXRlY3RfaHVnZXRsYl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwgaW50IG1heClcbiBcdFx0aWYgKHNzY2FuZihlbnRyeS1cdTAwM2VkX25hbWUsIFwmIzM0O2h1Z2VwYWdlcy0lenVrQlwmIzM0OywgXHUwMDI2a2IpICE9IDEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdHNpemVzW2NvdW50JiM0MzsmIzQzO10gPSBrYiAqIDEwMjQ7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1tJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICAga2IpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0OyMgW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxuXCYjMzQ7LCBrYik7XG4gXHR9XG4gXHRjbG9zZWRpcihkaXIpO1xuIFx0cmV0dXJuIGNvdW50O1xuQEAgLTQyNSwyOCAmIzQzOzQ1MCw0MyBAQCBzdGF0aWMgdm9pZCBodWdldGxiX3N5c2ZzX3BhdGgoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUpXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcJiMzNDtucl9odWdlcGFnZXNcJiMzNDspO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm5yKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnI7XG4gfVxuIFxuIHZvaWQgaHVnZXRsYl9zZXRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwmIzM0O25yX2h1Z2VwYWdlc1wmIzM0Oyk7XG4gXG4tXHR3cml0ZV9udW0ocGF0aCwgbnIpO1xuJiM0MztcdHJldCA9IHdyaXRlX251bShwYXRoLCBucik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiB9XG4gXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXCYjMzQ7ZnJlZV9odWdlcGFnZXNcJiMzNDspO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm5yKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnI7XG4gfVxuIFxuIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXG5AQCAtNTAyLDcgJiM0Mzs1NDIsOCBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyBzaXplc1tdLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmIChucl9lbmFibGVkIFx1MDAzZSBtYXgpIHtcbi1cdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7ZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxcblwmIzM0OywgbnJfZW5hYmxlZCwgbWF4KTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjIGRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgbnJfZW5hYmxlZCwgbWF4KTtcbiBcdFx0bnJfZW5hYmxlZCA9IG1heDtcbiBcdH1cbiBcbkBAIC01NzQsOCAmIzQzOzYxNSwxMCBAQCBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3Nfc2lnaGFuZGxlcihpbnQgc2lnKVxuIHtcbiYjNDM7XHQodm9pZClzaWc7XG4mIzQzO1xuIFx0LyogZXhpdCgpIHdpbGwgaW52b2tlIHRoZSBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCBoYW5kbGVyLiAqL1xuLVx0ZXhpdChLU0ZUX0ZBSUwpO1xuJiM0MztcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiB9XG4gXG4gdm9pZCBodWdlcGFnZV9zYXZlX3NldHRpbmdzKGJvb2wgdGhwLCBib29sIGh1Z2V0bGIpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5zaW1pbGFyaXR5IGluZGV4IDEwMCVcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbnJlbmFtZSB0byB0b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlXG5pbmRleCA5MjI4NzlmOTNmYzg0OS4uMTU0ZDc0MGJlMDJlODIgMTAwNjQ0XG4tLS0gYS90b29scy9tbS8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS8uZ2l0aWdub3JlXG5AQCAtMiwzICYjNDM7Miw1IEBAXG4gc2xhYmluZm9cbiBwYWdlLXR5cGVzXG4gcGFnZV9vd25lcl9zb3J0XG4mIzQzO3RocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4mIzQzO2d1cF9iZW5jaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcbmluZGV4IGY1NzI1YjVjMjNhYTI2Li5kODJjYzhjNDNlZTAyZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9NYWtlZmlsZVxuQEAgLTMsMTMgJiM0MzszLDE0IEBAXG4gI1xuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXG4gXG4tQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MztCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xuIFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcbiYjNDM7R1VQX0JFTkNIX09CSlMgPSBndXBfYmVuY2guYyAuLi9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyAuLi9saWIvbW0vZmlsZV91dGlscy5jXG4gXG4tQ0ZMQUdTICYjNDM7PSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtcHRocmVhZFxuJiM0MztDRkxBR1MgJiM0Mzs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1JLi4vLi4gLXB0aHJlYWRcbiBMREZMQUdTICYjNDM7PSAkKExJQlMpIC1wdGhyZWFkXG4gXG4gYWxsOiAkKEJVSUxEX1RBUkdFVFMpXG5AQCAtMjIsOCAmIzQzOzIzLDExIEBAICQoTElCUyk6XG4gJTogJS5jXG4gXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFx1MDAzYyAkKExERkxBR1MpXG4gXG4mIzQzO2d1cF9iZW5jaDogJChHVVBfQkVOQ0hfT0JKUykgJChMSUJTKVxuJiM0MztcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKEdVUF9CRU5DSF9PQkpTKSAkKExERkxBR1MpXG4mIzQzO1xuIGNsZWFuOlxuLVx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiYjNDM7XHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2hcbiBcdG1ha2UgLUMgJChMSUJfRElSKSBjbGVhblxuIFxuIHNiaW5kaXIgPz0gL3Vzci9zYmluXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vZ3VwX2JlbmNoLmMgYi90b29scy9tbS9ndXBfYmVuY2guY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40OTdiOGYzZjZhYzRiNFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbkBAIC0wLDAgJiM0MzsxLDQ4MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBNaWNyb2JlbmNobWFyayBmb3IgZ2V0X3VzZXJfcGFnZXMgKEdVUCkga2VybmVsIGludGVyZmFjZXMuXG4mIzQzOyAqXG4mIzQzOyAqIEV4ZXJjaXNlcyBHVVBfRkFTVF9CRU5DSE1BUkssIFBJTl9GQVNUX0JFTkNITUFSSywgYW5kXG4mIzQzOyAqIFBJTl9MT05HVEVSTV9CRU5DSE1BUksgdmlhIHRoZSBDT05GSUdfR1VQX1RFU1QgZGVidWdmcyBpbnRlcmZhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIEV4YW1wbGUgdXNlOlxuJiM0MzsgKiAgICMgUnVuIHRoZSBmdWxsIG1hdHJpeCAoYWxsIGNvbW1hbmRzLCBhY2Nlc3MgbW9kZXMsIHBhZ2UgY291bnRzKTpcbiYjNDM7ICogICAuL2d1cF9iZW5jaFxuJiM0MzsgKlxuJiM0MzsgKiAgICMgU2luZ2xlIHJ1bjogcGluX3VzZXJfcGFnZXNfZmFzdCwgNTEyIHBhZ2VzLCB3cml0ZSBhY2Nlc3MsIGh1Z2V0bGI6XG4mIzQzOyAqICAgLi9ndXBfYmVuY2ggLWEgLW4gNTEyIC13IC1IXG4mIzQzOyAqXG4mIzQzOyAqIFJlcXVpcmVzIENPTkZJR19HVVBfVEVTVD15IGFuZCBkZWJ1Z2ZzIG1vdW50ZWQgYXQgL3N5cy9rZXJuZWwvZGVidWcuXG4mIzQzOyAqIE11c3QgYmUgcnVuIGFzIHJvb3QuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGF0b21pYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2d1cF90ZXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBNQiAoMVVMIFx1MDAzY1x1MDAzYyAyMClcbiYjNDM7XG4mIzQzOyNpZm5kZWYgQVJSQVlfU0laRVxuJiM0MzsjZGVmaW5lIEFSUkFZX1NJWkUoYXJyKSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOy8qIEp1c3QgdGhlIGZsYWdzIHdlIG5lZWQsIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgaW50ZXJuYWxzLiAqL1xuJiM0MzsjZGVmaW5lIEZPTExfV1JJVEVcdDB4MDFcdC8qIGNoZWNrIHB0ZSBpcyB3cml0YWJsZSAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBHVVBfVEVTVF9GSUxFIFwmIzM0Oy9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0XCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHBzaXplKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xuJiM0MztcbiYjNDM7XHRpZiAoIV9fcGFnZV9zaXplKVxuJiM0MztcdFx0X19wYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XG4mIzQzO1x0cmV0dXJuIF9fcGFnZV9zaXplO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBjbWQ7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICpiZW5jaF9sYWJlbDtcbiYjNDM7c3RhdGljIGludCBndXBfZmQsIHJlcGVhdHMgPSAxO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7XG4mIzQzO3N0YXRpYyBhdG9taWNfaW50IGJlbmNoX2Vycm9yO1xuJiM0MzsvKiBTZXJpYWxpemUgcHJpbnRzICovXG4mIzQzO3N0YXRpYyBwdGhyZWFkX211dGV4X3QgcHJpbnRfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgYmVuY2hfY21kc1tdID0ge1xuJiM0MztcdEdVUF9GQVNUX0JFTkNITUFSSyxcbiYjNDM7XHRQSU5fRkFTVF9CRU5DSE1BUkssXG4mIzQzO1x0UElOX0xPTkdURVJNX0JFTkNITUFSSyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBpbnQgYmVuY2hfdGhwX21vZGVzW10gPSB7IDEsIDAgfTtcdC8qIG9uLCBvZmYgKi9cbiYjNDM7c3RhdGljIGNvbnN0IGludCBiZW5jaF9ucl9wYWdlc19saXN0W10gPSB7IDEsIDUxMiwgMTIzLCAtMSB9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmNtZF90b19zdHIodW5zaWduZWQgbG9uZyBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGNtZCkge1xuJiM0MztcdGNhc2UgR1VQX0ZBU1RfQkVOQ0hNQVJLOlxuJiM0MztcdFx0cmV0dXJuIFwmIzM0O0dVUF9GQVNUX0JFTkNITUFSS1wmIzM0OztcbiYjNDM7XHRjYXNlIFBJTl9GQVNUX0JFTkNITUFSSzpcbiYjNDM7XHRcdHJldHVybiBcJiMzNDtQSU5fRkFTVF9CRU5DSE1BUktcJiMzNDs7XG4mIzQzO1x0Y2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOlxuJiM0MztcdFx0cmV0dXJuIFwmIzM0O1BJTl9MT05HVEVSTV9CRU5DSE1BUktcJiMzNDs7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBcJiMzNDtVbmtub3duIGNvbW1hbmRcJiMzNDs7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIHBhcnNlX2xvbmdfYXJnX2Jhc2UoY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgYmFzZSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgKmVuZDtcbiYjNDM7XHRsb25nIHZhbDtcbiYjNDM7XG4mIzQzO1x0ZXJybm8gPSAwO1xuJiM0MztcdHZhbCA9IHN0cnRvbChhcmcsIFx1MDAyNmVuZCwgYmFzZSk7XG4mIzQzO1x0aWYgKGVycm5vIHx8IGVuZCA9PSBhcmcgfHwgKmVuZCAhPSAmIzM5O1xcMCYjMzk7KSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7SW52YWxpZCAlcyAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG5hbWUsIGFyZyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gdmFsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBwYXJzZV9sb25nX2FyZyhjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGFyc2VfbG9uZ19hcmdfYmFzZShhcmcsIG5hbWUsIDEwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcoY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0bG9uZyB2YWwgPSBwYXJzZV9sb25nX2FyZyhhcmcsIG5hbWUpO1xuJiM0MztcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAxKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7SW52YWxpZCAlcyAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG5hbWUsIGFyZyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IGJlbmNoX3J1biB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBjbWQ7XG4mIzQzO1x0aW50IHRocDtcdFx0LyogLTE6IGRlZmF1bHQsIDA6IG9mZiwgMTogb24gKi9cbiYjNDM7XHRib29sIGh1Z2V0bGI7XG4mIzQzO1x0Ym9vbCB3cml0ZTtcdFx0Lyogd2hldGhlciB0byBzZXQgRk9MTF9XUklURSAqL1xuJiM0MztcdGJvb2wgc2hhcmVkO1xuJiM0MztcdGludCBucl9wYWdlcztcdFx0LyogLTEgbWVhbnMgYWxsIHBhZ2VzIChzaXplIC8gcHNpemUoKSkgKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemU7XG4mIzQzO1x0Y2hhciAqZmlsZTtcbiYjNDM7XHRpbnQgbnRocmVhZHM7XG4mIzQzO1x0dW5zaWduZWQgaW50IGd1cF9mbGFncztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7XG4mIzQzO1x0aW50IGksIHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVwZWF0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGd1cC5zaXplID0gc2l6ZTtcbiYjNDM7XHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuJiM0MztcdFx0aWYgKHN0YXR1cykge1xuJiM0MztcdFx0XHRiZW5jaF9lcnJvciA9IDE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXMgdGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcJiMzNDssXG4mIzQzO1x0XHQgICAgICAgYmVuY2hfbGFiZWwsIGd1cC5nZXRfZGVsdGFfdXNlYyxcbiYjNDM7XHRcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xuJiM0MztcdFx0aWYgKGd1cC5zaXplICE9IHNpemUpXG4mIzQzO1x0XHRcdHByaW50ZihcJiMzNDssIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcJiMzNDssIGd1cC5zaXplKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDtcXG5cJiMzNDspO1xuJiM0MztcdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnVuX2JlbmNoKHN0cnVjdCBiZW5jaF9ydW4gKnJ1bilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbiYjNDM7XHRpbnQgemVyb19mZCwgaSwgcmV0LCBzdGFydGVkX3RocmVhZHMgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXNfcGVyX2NhbGw7XG4mIzQzO1x0aW50IGZsYWdzID0gTUFQX1BSSVZBVEU7XG4mIzQzO1x0cHRocmVhZF90ICp0aWQ7XG4mIzQzO1x0Y2hhciBsYWJlbFsxMjhdO1xuJiM0MztcdGNoYXIgKnA7XG4mIzQzO1x0Ym9vbCByZXN0b3JlX2h1Z2V0bGIgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGdsb2JhbHMgY29uc3VtZWQgYnkgZ3VwX3RocmVhZCAqL1xuJiM0MztcdGNtZCA9IHJ1bi1cdTAwM2VjbWQ7XG4mIzQzO1x0c2l6ZSA9IHJ1bi1cdTAwM2VzaXplO1xuJiM0MztcdGJlbmNoX2Vycm9yID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bi1cdTAwM2VodWdldGxiKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFocF9zaXplKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtDb3VsZCBub3QgZGV0ZXJtaW5lIGh1Z2UgcGFnZSBzaXplXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNpemUgXHUwMDNlIFVMT05HX01BWCAtIChocF9zaXplIC0gMSkpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0h1Z2VUTEIgbWFwcGluZyBzaXplIGlzIHRvbyBsYXJnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHNpemUgPSAoc2l6ZSAmIzQzOyBocF9zaXplIC0gMSkgXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xuJiM0MztcdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbiYjNDM7XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXN0b3JlX2h1Z2V0bGIgPSB0cnVlO1xuJiM0MztcdFx0ZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocnVuLVx1MDAzZXNoYXJlZCkge1xuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+TUFQX1BSSVZBVEU7XG4mIzQzO1x0XHRmbGFncyB8PSBNQVBfU0hBUkVEO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bnJfcGFnZXNfcGVyX2NhbGwgPSBydW4tXHUwMDNlbnJfcGFnZXMgXHUwMDNjIDAgPyBzaXplIC8gcHNpemUoKSA6XG4mIzQzO1x0XHQodW5zaWduZWQgbG9uZylydW4tXHUwMDNlbnJfcGFnZXM7XG4mIzQzO1xuJiM0MztcdGlmIChucl9wYWdlc19wZXJfY2FsbCBcdTAwM2UgVUlOVF9NQVgpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtQYWdlIGNvdW50IGlzIHRvbyBsYXJnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAocmVzdG9yZV9odWdldGxiKVxuJiM0MztcdFx0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19wZXJfY2FsbDtcbiYjNDM7XG4mIzQzO1x0Z3VwLmd1cF9mbGFncyA9IHJ1bi1cdTAwM2VndXBfZmxhZ3M7XG4mIzQzO1x0aWYgKHJ1bi1cdTAwM2V3cml0ZSlcbiYjNDM7XHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYobGFiZWwsIHNpemVvZihsYWJlbCksIFwmIzM0OyVzIChucl9wYWdlcz0lLTR1ICVzICVzICVzICVzKVwmIzM0OyxcbiYjNDM7XHRcdCBjbWRfdG9fc3RyKHJ1bi1cdTAwM2VjbWQpLFxuJiM0MztcdFx0IGd1cC5ucl9wYWdlc19wZXJfY2FsbCxcbiYjNDM7XHRcdCBydW4tXHUwMDNld3JpdGUgID8gXCYjMzQ7d3JpdGVcJiMzNDsgICA6IFwmIzM0O3JlYWRcJiMzNDssXG4mIzQzO1x0XHQgcnVuLVx1MDAzZXNoYXJlZCA/IFwmIzM0O3NoYXJlZFwmIzM0OyAgOiBcJiMzNDtwcml2YXRlXCYjMzQ7LFxuJiM0MztcdFx0IHJ1bi1cdTAwM2VodWdldGxiID8gXCYjMzQ7aHVnZXRsYj1vblwmIzM0OyA6IFwmIzM0O2h1Z2V0bGI9b2ZmXCYjMzQ7LFxuJiM0MztcdFx0IHJ1bi1cdTAwM2VodWdldGxiID8gXCYjMzQ7dGhwPW9mZlwmIzM0OyA6XG4mIzQzO1x0XHQgKHJ1bi1cdTAwM2V0aHAgPT0gMSA/IFwmIzM0O3RocD1vblwmIzM0OyA6XG4mIzQzO1x0XHQgKHJ1bi1cdTAwM2V0aHAgPT0gMCA/IFwmIzM0O3RocD1vZmZcJiMzNDsgOiBcJiMzNDt0aHA9ZGVmYXVsdFwmIzM0OykpKTtcbiYjNDM7XHRiZW5jaF9sYWJlbCA9IGxhYmVsO1xuJiM0MztcbiYjNDM7XHR6ZXJvX2ZkID0gb3BlbihydW4tXHUwMDNlZmlsZSwgT19SRFdSKTtcbiYjNDM7XHRpZiAoemVyb19mZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1VuYWJsZSB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgcnVuLVx1MDAzZWZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0XHRpZiAocmVzdG9yZV9odWdldGxiKVxuJiM0MztcdFx0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIHplcm9fZmQsIDApO1xuJiM0MztcdGNsb3NlKHplcm9fZmQpO1xuJiM0MztcdGlmIChwID09IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDttbWFwOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdGlmIChyZXN0b3JlX2h1Z2V0bGIpXG4mIzQzO1x0XHRcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bi1cdTAwM2V0aHAgPT0gMSlcbiYjNDM7XHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4mIzQzO1x0ZWxzZSBpZiAocnVuLVx1MDAzZXRocCA9PSAwKVxuJiM0MztcdFx0bWFkdmlzZShwLCBzaXplLCBNQURWX05PSFVHRVBBR0UpO1xuJiM0MztcbiYjNDM7XHQvKiBGYXVsdCB0aGVtIGluIGhlcmUsIGZyb20gdXNlciBzcGFjZS4gKi9cbiYjNDM7XHRmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgZ3VwLmFkZHIgJiM0Mzsgc2l6ZTsgcCAmIzQzOz0gcHNpemUoKSlcbiYjNDM7XHRcdHBbMF0gPSAwO1xuJiM0MztcbiYjNDM7XHR0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBydW4tXHUwMDNlbnRocmVhZHMpO1xuJiM0MztcdGlmICghdGlkKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlICVkIHRocmVhZHM6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRydW4tXHUwMDNlbnRocmVhZHMsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0XHRtdW5tYXAoKHZvaWQgKilndXAuYWRkciwgc2l6ZSk7XG4mIzQzO1x0XHRpZiAocmVzdG9yZV9odWdldGxiKVxuJiM0MztcdFx0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcnVuLVx1MDAzZW50aHJlYWRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCBcdTAwMjZndXApO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7cHRocmVhZF9jcmVhdGUgZmFpbGVkOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IocmV0KSk7XG4mIzQzO1x0XHRcdGJlbmNoX2Vycm9yID0gMTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzdGFydGVkX3RocmVhZHMmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdGFydGVkX3RocmVhZHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXQgPSBwdGhyZWFkX2pvaW4odGlkW2ldLCBOVUxMKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3B0aHJlYWRfam9pbiBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihyZXQpKTtcbiYjNDM7XHRcdFx0YmVuY2hfZXJyb3IgPSAxO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZnJlZSh0aWQpO1xuJiM0MztcdG11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTtcbiYjNDM7XHRpZiAocmVzdG9yZV9odWdldGxiKVxuJiM0MztcdFx0aHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBiZW5jaF9lcnJvciA/IDEgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ1bl9tYXRyaXgodm9pZClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBjLCB0LCB3LCBzLCBuO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGMgPSAwOyBjIFx1MDAzYyBBUlJBWV9TSVpFKGJlbmNoX2NtZHMpOyBjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yICh3ID0gMDsgdyBcdTAwM2M9IDE7IHcmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGZvciAocyA9IDA7IHMgXHUwMDNjPSAxOyBzJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdGZvciAodCA9IDA7IHQgXHUwMDNjIEFSUkFZX1NJWkUoYmVuY2hfdGhwX21vZGVzKTsgdCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0XHRcdGZvciAobiA9IDA7IG4gXHUwMDNjIEFSUkFZX1NJWkUoYmVuY2hfbnJfcGFnZXNfbGlzdCk7IG4mIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdFx0XHRcdHN0cnVjdCBiZW5jaF9ydW4gcnVuID0ge1xuJiM0MztcdFx0XHRcdFx0XHRcdC5jbWRcdCAgPSBiZW5jaF9jbWRzW2NdLFxuJiM0MztcdFx0XHRcdFx0XHRcdC50aHBcdCAgPSBiZW5jaF90aHBfbW9kZXNbdF0sXG4mIzQzO1x0XHRcdFx0XHRcdFx0Lmh1Z2V0bGIgID0gZmFsc2UsXG4mIzQzO1x0XHRcdFx0XHRcdFx0LndyaXRlXHQgID0gdyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQuc2hhcmVkXHQgID0gcyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQubnJfcGFnZXMgPSBiZW5jaF9ucl9wYWdlc19saXN0W25dLFxuJiM0MztcdFx0XHRcdFx0XHRcdC5zaXplXHQgID0gMTI4ICogTUIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0LmZpbGVcdCAgPSBcJiMzNDsvZGV2L3plcm9cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFx0Lm50aHJlYWRzID0gMSxcbiYjNDM7XHRcdFx0XHRcdFx0fTtcbiYjNDM7XHRcdFx0XHRcdFx0cmV0IHw9IHJ1bl9iZW5jaChcdTAwMjZydW4pO1xuJiM0MztcdFx0XHRcdFx0fVxuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHQvKiBodWdldGxiOiAyNTZNIHRvIG1hdGNoIHJ1bl9ndXBfbWF0cml4KCkgaW4gcnVuX3ZtdGVzdHMuc2ggKi9cbiYjNDM7XHRcdFx0XHRmb3IgKG4gPSAwOyBuIFx1MDAzYyBBUlJBWV9TSVpFKGJlbmNoX25yX3BhZ2VzX2xpc3QpOyBuJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdFx0c3RydWN0IGJlbmNoX3J1biBydW4gPSB7XG4mIzQzO1x0XHRcdFx0XHRcdC5jbWRcdCAgPSBiZW5jaF9jbWRzW2NdLFxuJiM0MztcdFx0XHRcdFx0XHQudGhwXHQgID0gLTEsXG4mIzQzO1x0XHRcdFx0XHRcdC5odWdldGxiICA9IHRydWUsXG4mIzQzO1x0XHRcdFx0XHRcdC53cml0ZVx0ICA9IHcsXG4mIzQzO1x0XHRcdFx0XHRcdC5zaGFyZWRcdCAgPSBzLFxuJiM0MztcdFx0XHRcdFx0XHQubnJfcGFnZXMgPSBiZW5jaF9ucl9wYWdlc19saXN0W25dLFxuJiM0MztcdFx0XHRcdFx0XHQuc2l6ZVx0ICA9IDI1NiAqIE1CLFxuJiM0MztcdFx0XHRcdFx0XHQuZmlsZVx0ICA9IFwmIzM0Oy9kZXYvemVyb1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0Lm50aHJlYWRzID0gMSxcbiYjNDM7XHRcdFx0XHRcdH07XG4mIzQzO1x0XHRcdFx0XHRyZXQgfD0gcnVuX2JlbmNoKFx1MDAyNnJ1bik7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiZW5jaF9ydW4gcnVuID0ge1xuJiM0MztcdFx0LmNtZFx0ICA9IEdVUF9GQVNUX0JFTkNITUFSSyxcbiYjNDM7XHRcdC50aHBcdCAgPSAtMSxcbiYjNDM7XHRcdC5odWdldGxiICA9IGZhbHNlLFxuJiM0MztcdFx0LndyaXRlXHQgID0gdHJ1ZSxcbiYjNDM7XHRcdC5zaGFyZWRcdCAgPSBmYWxzZSxcbiYjNDM7XHRcdC5ucl9wYWdlcyA9IDEsXG4mIzQzO1x0XHQuc2l6ZVx0ICA9IDEyOCAqIE1CLFxuJiM0MztcdFx0LmZpbGVcdCAgPSBcJiMzNDsvZGV2L3plcm9cJiMzNDssXG4mIzQzO1x0XHQubnRocmVhZHMgPSAxLFxuJiM0MztcdH07XG4mIzQzO1x0aW50IG9wdCwgcmVzdWx0O1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDttOnI6bjpGOmY6YWo6dFRMdXdXU0hcJiMzNDspKSAhPSAtMSkge1xuJiM0MztcdFx0c3dpdGNoIChvcHQpIHtcbiYjNDM7XHRcdC8qIENvbW1hbmQgc2VsZWN0aW9uICovXG4mIzQzO1x0XHRjYXNlICYjMzk7dSYjMzk7OlxuJiM0MztcdFx0XHRydW4uY21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTthJiMzOTs6XG4mIzQzO1x0XHRcdHJ1bi5jbWQgPSBQSU5fRkFTVF9CRU5DSE1BUks7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O0wmIzM5OzpcbiYjNDM7XHRcdFx0cnVuLmNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIE1lbW9yeSB0eXBlICovXG4mIzQzO1x0XHRjYXNlICYjMzk7SCYjMzk7OlxuJiM0MztcdFx0XHRydW4uaHVnZXRsYiA9IHRydWU7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O3QmIzM5OzpcbiYjNDM7XHRcdFx0cnVuLnRocCA9IDE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O1QmIzM5OzpcbiYjNDM7XHRcdFx0cnVuLnRocCA9IDA7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIEFjY2VzcyBtb2RlICovXG4mIzQzO1x0XHRjYXNlICYjMzk7dyYjMzk7OlxuJiM0MztcdFx0XHRydW4ud3JpdGUgPSB0cnVlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtXJiMzOTs6XG4mIzQzO1x0XHRcdHJ1bi53cml0ZSA9IGZhbHNlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtTJiMzOTs6XG4mIzQzO1x0XHRcdHJ1bi5zaGFyZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiBNYXBwaW5nICovXG4mIzQzO1x0XHRjYXNlICYjMzk7ZiYjMzk7OlxuJiM0MztcdFx0XHRydW4uZmlsZSA9IG9wdGFyZztcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0LyogU2l6aW5nIGFuZCBpdGVyYXRpb24gKi9cbiYjNDM7XHRcdGNhc2UgJiMzOTttJiMzOTs6XG4mIzQzO1x0XHRcdHJ1bi5zaXplID0gcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcob3B0YXJnLCBcJiMzNDtzaXplXCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKHJ1bi5zaXplIFx1MDAzZSBVTE9OR19NQVggLyBNQikge1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtJbnZhbGlkIHNpemUgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBvcHRhcmcpO1xuJiM0MztcdFx0XHRcdGV4aXQoMSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cnVuLnNpemUgKj0gTUI7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O24mIzM5Ozoge1xuJiM0MztcdFx0XHRsb25nIHZhbDtcbiYjNDM7XG4mIzQzO1x0XHRcdHZhbCA9IHBhcnNlX2xvbmdfYXJnKG9wdGFyZywgXCYjMzQ7cGFnZSBjb3VudFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmICh2YWwgIT0gLTEgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDNjIDEgfHwgdmFsIFx1MDAzZSBJTlRfTUFYKSkge1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtJbnZhbGlkIHBhZ2UgY291bnQgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBvcHRhcmcpO1xuJiM0MztcdFx0XHRcdGV4aXQoMSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cnVuLm5yX3BhZ2VzID0gdmFsO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhc2UgJiMzOTtyJiMzOTs6IHtcbiYjNDM7XHRcdFx0bG9uZyB2YWw7XG4mIzQzO1xuJiM0MztcdFx0XHR2YWwgPSBwYXJzZV9wb3NpdGl2ZV9sb25nX2FyZyhvcHRhcmcsIFwmIzM0O3JlcGVhdCBjb3VudFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmICh2YWwgXHUwMDNlIElOVF9NQVgpIHtcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7SW52YWxpZCByZXBlYXQgY291bnQgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBvcHRhcmcpO1xuJiM0MztcdFx0XHRcdGV4aXQoMSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmVwZWF0cyA9IHZhbDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRjYXNlICYjMzk7aiYjMzk7OiB7XG4mIzQzO1x0XHRcdGxvbmcgdmFsO1xuJiM0MztcbiYjNDM7XHRcdFx0dmFsID0gcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcob3B0YXJnLCBcJiMzNDt0aHJlYWQgY291bnRcJiMzNDspO1xuJiM0MztcdFx0XHRpZiAodmFsIFx1MDAzZSBJTlRfTUFYIHx8XG4mIzQzO1x0XHRcdCAgICAoc2l6ZV90KXZhbCBcdTAwM2UgU0laRV9NQVggLyBzaXplb2YocHRocmVhZF90KSkge1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtJbnZhbGlkIHRocmVhZCBjb3VudCAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG9wdGFyZyk7XG4mIzQzO1x0XHRcdFx0ZXhpdCgxKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRydW4ubnRocmVhZHMgPSB2YWw7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIEFkdmFuY2VkICovXG4mIzQzO1x0XHRjYXNlICYjMzk7RiYjMzk7OiB7XG4mIzQzO1x0XHRcdGxvbmcgdmFsO1xuJiM0MztcbiYjNDM7XHRcdFx0dmFsID0gcGFyc2VfbG9uZ19hcmdfYmFzZShvcHRhcmcsIFwmIzM0O0dVUCBmbGFnc1wmIzM0OywgMCk7XG4mIzQzO1x0XHRcdGlmICh2YWwgXHUwMDNjIDAgfHwgdmFsIFx1MDAzZSBVSU5UX01BWCkge1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtJbnZhbGlkIEdVUCBmbGFncyAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG9wdGFyZyk7XG4mIzQzO1x0XHRcdFx0ZXhpdCgxKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cnVuLmd1cF9mbGFncyA9IHZhbDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1dyb25nIGFyZ3VtZW50XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZXhpdCgxKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvcHRpbmQgIT0gYXJnYykge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1VuZXhwZWN0ZWQgYXJndW1lbnQgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBhcmd2W29wdGluZF0pO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbiYjNDM7XHRpZiAoZ3VwX2ZkID09IC0xKSB7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRUFDQ0VTKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtQbGVhc2UgcnVuIGFzIHJvb3RcXG5cJiMzNDspO1xuJiM0MztcdFx0fSBlbHNlIGlmIChlcnJubyA9PSBFTk9FTlQpIHtcbiYjNDM7XHRcdFx0RElSICpkZWJ1Z2ZzID0gb3BlbmRpcihcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Z1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIWRlYnVnZnMpIHtcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7TW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0Y2xvc2VkaXIoZGVidWdmcyk7XG4mIzQzO1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0NoZWNrIENPTkZJR19HVVBfVEVTVCBpbiBrZXJuZWwgY29uZmlnXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0ZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgR1VQX1RFU1RfRklMRSxcbiYjNDM7XHRcdFx0XHRzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlc3VsdCA9IChhcmdjID09IDEpID8gcnVuX21hdHJpeCgpIDogcnVuX2JlbmNoKFx1MDAyNnJ1bik7XG4mIzQzO1x0Y2xvc2UoZ3VwX2ZkKTtcbiYjNDM7XHRyZXR1cm4gcmVzdWx0O1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggZTZkZjk2OGYwOTcxYzguLmU3N2M0Y2M0MWI0NzAzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMzcsNyAmIzQzOzM3LDggQEAgZW5kaWZcbiAjIExETElCUy5cbiBNQUtFRkxBR1MgJiM0Mzs9IC0tbm8tYnVpbHRpbi1ydWxlc1xuIFxuLUNGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXG4mIzQzO0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliXG4mIzQzO0NGTEFHUyAmIzQzOz0gJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUylcbiBDRkxBR1MgJiM0Mzs9IC1XdW5yZWFjaGFibGUtY29kZVxuIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbVxuIFxuQEAgLTE4Nyw4ICYjNDM7MTg4LDEwIEBAIFRFU1RfRklMRVMgJiM0Mzs9IHdyaXRlX2h1Z2V0bGJfbWVtb3J5LnNoXG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbiBcbi0kKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbiYjNDM7JChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXG4mIzQzO1x0XHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbiYjNDM7JChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXG4mIzQzO1x0XHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbiBcbiAkKE9VVFBVVCkvdWZmZC1zdHJlc3M6IHVmZmQtY29tbW9uLmNcbiAkKE9VVFBVVCkvdWZmZC11bml0LXRlc3RzOiB1ZmZkLWNvbW1vbi5jXG5AQCAtMjE3LDcgJiM0MzsyMjAsNyBAQCAkKEJJTkFSSUVTXzMyKTogQ0ZMQUdTICYjNDM7PSAtbTMyIC1teHNhdmVcbiAkKEJJTkFSSUVTXzMyKTogTERMSUJTICYjNDM7PSAtbHJ0IC1sZGwgLWxtXG4gJChCSU5BUklFU18zMik6ICQoT1VUUFVUKS8lXzMyOiAlLmNcbiBcdCQoY2FsbCBtc2csQ0MsLCRAKVxuLVx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxuJiM0MztcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQFxuICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS0zMiwkKHQpKSkpXG4gZW5kaWZcbiBcbkBAIC0yMjYsNyAmIzQzOzIyOSw3IEBAICQoQklOQVJJRVNfNjQpOiBDRkxBR1MgJiM0Mzs9IC1tNjQgLW14c2F2ZVxuICQoQklOQVJJRVNfNjQpOiBMRExJQlMgJiM0Mzs9IC1scnQgLWxkbFxuICQoQklOQVJJRVNfNjQpOiAkKE9VVFBVVCkvJV82NDogJS5jXG4gXHQkKGNhbGwgbXNnLENDLCwkQClcbi1cdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEBcbiYjNDM7XHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtNjQsJCh0KSkpKVxuIGVuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuaW5kZXggNWI1ODI1ODhlMDE1ZDQuLmIyZWFhNDkwZTdjMjUzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG5AQCAtMTUsOSAmIzQzOzE1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBNQVBfU0laRV9NQlx0MTAwXG4gI2RlZmluZSBNQVBfU0laRVx0KE1BUF9TSVpFX01CICogMTAyNCAqIDEwMjQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuaW5kZXggMGM2MjdlYTg5ZmY3YjIuLjNjM2QxMjljOTFiMjlkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5AQCAtMjksNyAmIzQzOzI5LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xuaW5kZXggNjMyOWUzN2ZmZjRjOTQuLjQ5NmI3NGIzNzQ3NmIzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMjUsNyAmIzQzOzI1LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIHVpbnQ2NF90IHBhZ2Vfc2l6ZTtcbiB1aW50NjRfdCBwbWRfcGFnZXNpemU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5pbmRleCBiMjFkZjMwNDBiMWM3Yy4uZWQ5NjdiM2M3ZjM3MDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuQEAgLTIxLDcgJiM0MzsyMSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3Vpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4vcGlkZmQvcGlkZmQuaFwmIzM0O1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbmluZGV4IGViODk2M2U5ZDk4ZjA2Li42OGM4NDBiYWUwODIwOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuQEAgLTI5LDcgJiM0MzsyOSw2IEBAXG4gI2luY2x1ZGUgXCYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XG4gc3RhdGljIGludCBucl9odWdldGxic2l6ZXM7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbmluZGV4IDNmODQxYTk2Zjg3MDY4Li5kOWNhYTlmYjhiNzg1NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbkBAIC0xLDI3NSAmIzQzOzEsNDQzIEBAXG4gI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcbiAjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2RpcmVudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYXNzZXJ0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NtbS9ndXBfdGVzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIE1CICgxVUwgXHUwMDNjXHUwMDNjIDIwKVxuIFxuJiM0MzsjaWZuZGVmIEFSUkFZX1NJWkVcbiYjNDM7I2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSlcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qIEp1c3QgdGhlIGZsYWdzIHdlIG5lZWQsIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgaW50ZXJuYWxzLiAqL1xuICNkZWZpbmUgRk9MTF9XUklURVx0MHgwMVx0LyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovXG4gXG4mIzQzOy8qIFBhZ2UgY291bnRzIGV4ZXJjaXNpbmcgc2luZ2xlLCBUSFAtYmF0Y2gsIHBhcnRpYWwsIGFuZCBmdWxsLW1hcHBpbmcgR1VQLiAqL1xuJiM0MztzdGF0aWMgY29uc3QgaW50IG5yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07XG4mIzQzO1xuICNkZWZpbmUgR1VQX1RFU1RfRklMRSBcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdFwmIzM0O1xuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSztcbi1zdGF0aWMgaW50IGd1cF9mZCwgcmVwZWF0cyA9IDE7XG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDEyOCAqIE1CO1xuLS8qIFNlcmlhbGl6ZSBwcmludHMgKi9cbi1zdGF0aWMgcHRocmVhZF9tdXRleF90IHByaW50X211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjtcbiYjNDM7RklYVFVSRShndXBfdGVzdClcbiYjNDM7e1xuJiM0MztcdGludCBndXBfZmQ7XG4mIzQzO1x0Y2hhciAqYWRkcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRib29sIHRocDtcbiYjNDM7XHRib29sIGh1Z2V0bGI7XG4mIzQzO1x0Ym9vbCB3cml0ZTtcbiYjNDM7XHRib29sIHNoYXJlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGUpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZG9ubHkpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSB0cnVlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRvbmx5X3RocClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSB0cnVlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV9odWdldGxiKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gdHJ1ZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZG9ubHlfaHVnZXRsYilcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IHRydWUsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkb25seSlcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSB0cnVlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiBcbi1zdGF0aWMgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZClcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRvbmx5X3RocClcbiB7XG4tXHRzd2l0Y2ggKGNtZCkge1xuLVx0Y2FzZSBHVVBfRkFTVF9CRU5DSE1BUks6XG4tXHRcdHJldHVybiBcJiMzNDtHVVBfRkFTVF9CRU5DSE1BUktcJiMzNDs7XG4tXHRjYXNlIFBJTl9GQVNUX0JFTkNITUFSSzpcbi1cdFx0cmV0dXJuIFwmIzM0O1BJTl9GQVNUX0JFTkNITUFSS1wmIzM0Oztcbi1cdGNhc2UgUElOX0xPTkdURVJNX0JFTkNITUFSSzpcbi1cdFx0cmV0dXJuIFwmIzM0O1BJTl9MT05HVEVSTV9CRU5DSE1BUktcJiMzNDs7XG4tXHRjYXNlIEdVUF9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCYjMzQ7R1VQX0JBU0lDX1RFU1RcJiMzNDs7XG4tXHRjYXNlIFBJTl9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCYjMzQ7UElOX0JBU0lDX1RFU1RcJiMzNDs7XG4tXHRjYXNlIERVTVBfVVNFUl9QQUdFU19URVNUOlxuLVx0XHRyZXR1cm4gXCYjMzQ7RFVNUF9VU0VSX1BBR0VTX1RFU1RcJiMzNDs7XG4mIzQzO1x0LnRocCA9IHRydWUsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV9odWdldGxiKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gdHJ1ZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRvbmx5X2h1Z2V0bGIpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSB0cnVlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChndXBfdGVzdClcbiYjNDM7e1xuJiM0MztcdGludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEU7XG4mIzQzO1x0aW50IHplcm9fZmQ7XG4mIzQzO1x0Y2hhciAqcDtcbiYjNDM7XG4mIzQzO1x0LyogemVyb19mZCBoYXMgdG8gYmUgXHUwMDNlPSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovXG4mIzQzO1x0emVyb19mZCA9IG9wZW4oXCYjMzQ7L2Rldi96ZXJvXCYjMzQ7LCBPX1JEV1IpO1xuJiM0MztcdEFTU0VSVF9HRSh6ZXJvX2ZkLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogZ3VwX2ZkIGhhcyB0byBiZSBcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cbiYjNDM7XHRzZWxmLVx1MDAzZWd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbiYjNDM7XHRBU1NFUlRfR0Uoc2VsZi1cdTAwM2VndXBfZmQsIDApO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZXNpemUgPSB2YXJpYW50LVx1MDAzZWh1Z2V0bGIgPyAyNTYgKiBNQiA6IDEyOCAqIE1CO1xuJiM0MztcbiYjNDM7XHQvKiBDaGVjayBmb3IgaHVnZXRsYiAqL1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZWh1Z2V0bGIpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWhwX3NpemUpIHtcbiYjNDM7XHRcdFx0Y2xvc2UoemVyb19mZCk7XG4mIzQzO1x0XHRcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbiYjNDM7XHRcdFx0U0tJUChyZXR1cm4sIFwmIzM0O0h1Z2VUTEIgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0c2VsZi1cdTAwM2VzaXplID0gKHNlbGYtXHUwMDNlc2l6ZSAmIzQzOyBocF9zaXplIC0gMSkgXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xuJiM0MztcdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2VsZi1cdTAwM2VzaXplIC8gaHBfc2l6ZSkpIHtcbiYjNDM7XHRcdFx0aHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7XG4mIzQzO1x0XHRcdGNsb3NlKHplcm9fZmQpO1xuJiM0MztcdFx0XHRjbG9zZShzZWxmLVx1MDAzZWd1cF9mZCk7XG4mIzQzO1x0XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG1tYXBfZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmFyaWFudC1cdTAwM2VzaGFyZWQpXG4mIzQzO1x0XHRtbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgXHUwMDI2IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZWFkZHIgPSBtbWFwKE5VTEwsIHNlbGYtXHUwMDNlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdFx0ICBtbWFwX2ZsYWdzLCB6ZXJvX2ZkLCAwKTtcbiYjNDM7XG4mIzQzO1x0Y2xvc2UoemVyb19mZCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9ORShzZWxmLVx1MDAzZWFkZHIsIE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGludCBlcnIgPSBlcnJubztcbiYjNDM7XG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZWd1cF9mZCk7XG4mIzQzO1x0XHRpZiAodmFyaWFudC1cdTAwM2VodWdldGxiKVxuJiM0MztcdFx0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbiYjNDM7XHRcdFRIX0xPRyhcJiMzNDttbWFwIGZhaWxlZDogJXNcJiMzNDssIHN0cmVycm9yKGVycikpO1xuIFx0fVxuLVx0cmV0dXJuIFwmIzM0O1Vua25vd24gY29tbWFuZFwmIzM0OztcbiYjNDM7XG4mIzQzO1x0aWYgKHZhcmlhbnQtXHUwMDNldGhwKVxuJiM0MztcdFx0bWFkdmlzZShzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bWFkdmlzZShzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChwID0gc2VsZi1cdTAwM2VhZGRyOyAodW5zaWduZWQgbG9uZylwIFx1MDAzYyAodW5zaWduZWQgbG9uZylzZWxmLVx1MDAzZWFkZHJcbiYjNDM7XHRcdFx0JiM0Mzsgc2VsZi1cdTAwM2VzaXplOyBwICYjNDM7PSBwc2l6ZSgpKVxuJiM0MztcdFx0cFswXSA9IDA7XG4gfVxuIFxuLXZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcbiYjNDM7RklYVFVSRV9URUFSRE9XTihndXBfdGVzdClcbiB7XG4tXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0gKihzdHJ1Y3QgZ3VwX3Rlc3QgKilkYXRhO1xuLVx0aW50IGksIHN0YXR1cztcbi1cbi1cdC8qIE9ubHkgcmVwb3J0IHRpbWluZyBpbmZvcm1hdGlvbiBvbiB0aGUgKl9CRU5DSE1BUksgY29tbWFuZHM6ICovXG4tXHRpZiAoKGNtZCA9PSBQSU5fRkFTVF9CRU5DSE1BUkspIHx8IChjbWQgPT0gR1VQX0ZBU1RfQkVOQ0hNQVJLKSB8fFxuLVx0ICAgICAoY21kID09IFBJTl9MT05HVEVSTV9CRU5DSE1BUkspKSB7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlcGVhdHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0Z3VwLnNpemUgPSBzaXplO1xuLVx0XHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuLVx0XHRcdGlmIChzdGF0dXMpXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0OyVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1wmIzM0Oyxcbi1cdFx0XHRcdCAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbi1cdFx0XHRcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xuLVx0XHRcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7LCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXCYjMzQ7LCBndXAuc2l6ZSk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7XFxuXCYjMzQ7KTtcbi1cdFx0XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGd1cC5zaXplID0gc2l6ZTtcbi1cdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4tXHRcdGlmIChzdGF0dXMpXG4tXHRcdFx0Z290byByZXR1cm5fO1xuLVxuLVx0XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDslczogZG9uZVxcblwmIzM0OywgY21kX3RvX3N0cihjbWQpKTtcbi1cdFx0aWYgKGd1cC5zaXplICE9IHNpemUpXG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7VHJ1bmNhdGVkIChzaXplOiAlbGxkKVxcblwmIzM0OywgZ3VwLnNpemUpO1xuLVx0XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4mIzQzO1x0bXVubWFwKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplKTtcbiYjNDM7XHRjbG9zZShzZWxmLVx1MDAzZWd1cF9mZCk7XG4mIzQzO1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZWh1Z2V0bGIpXG4mIzQzO1x0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdC8qIFRlc3RzIHRoZSBnZXRfdXNlcl9wYWdlcyBwYXRoICovXG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbiYjNDM7XG4mIzQzO1x0XHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkcjtcbiYjNDM7XHRcdGd1cC5zaXplID0gc2VsZi1cdTAwM2VzaXplO1xuJiM0MztcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4mIzQzO1x0XHRcdHNlbGYtXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuJiM0MztcdFx0XHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XG4mIzQzO1xuJiM0MztcdFx0VEhfTE9HKFwmIzM0O25yX3BhZ2VzX3Blcl9jYWxsPSV1XCYjMzQ7LCBndXAubnJfcGFnZXNfcGVyX2NhbGwpO1xuJiM0MztcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBHVVBfQkFTSUNfVEVTVCwgXHUwMDI2Z3VwKSwgMCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0LyogVGVzdHMgdGhlIHBpbl91c2VyX3BhZ2VzIHBhdGggKi9cbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuJiM0MztcbiYjNDM7XHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuJiM0MztcdFx0Z3VwLnNpemUgPSBzZWxmLVx1MDAzZXNpemU7XG4mIzQzO1x0XHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFx1MDAzYyAwID9cbiYjNDM7XHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKHZhcmlhbnQtXHUwMDNld3JpdGUpXG4mIzQzO1x0XHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbiYjNDM7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXVcJiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIFBJTl9CQVNJQ19URVNULCBcdTAwMjZndXApLCAwKTtcbiBcdH1cbiYjNDM7fVxuIFxuLXJldHVybl86XG4tXHRrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsIFwmIzM0O2lvY3RsIHN0YXR1cyAlZFxcblwmIzM0Oywgc3RhdHVzKTtcbi1cdHJldHVybiBOVUxMO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIGR1bXBfdXNlcl9wYWdlc193aXRoX2dldClcbiYjNDM7e1xuJiM0MztcdC8qIFRlc3RzIERVTVBfVVNFUl9QQUdFU19URVNUIHVzaW5nIGdldF91c2VyX3BhZ2VzICovXG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbiYjNDM7XG4mIzQzO1x0XHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkcjtcbiYjNDM7XHRcdGd1cC5zaXplID0gc2VsZi1cdTAwM2VzaXplO1xuJiM0MztcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4mIzQzO1x0XHRcdHNlbGYtXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuJiM0MztcdFx0XHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XG4mIzQzO1xuJiM0MztcdFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbiYjNDM7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXVcJiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIERVTVBfVVNFUl9QQUdFU19URVNULCBcdTAwMjZndXApLCAwKTtcbiYjNDM7XHR9XG4gfVxuIFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBkdW1wX3VzZXJfcGFnZXNfd2l0aF9waW4pXG4ge1xuLVx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuLVx0aW50IGZpbGVkLCBpLCBvcHQsIG5yX3BhZ2VzID0gMSwgdGhwID0gLTEsIHdyaXRlID0gMSwgbnRocmVhZHMgPSAxLCByZXQ7XG4tXHRpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURTtcbi1cdGNoYXIgKmZpbGUgPSBcJiMzNDsvZGV2L3plcm9cJiMzNDs7XG4tXHRib29sIGh1Z2V0bGIgPSBmYWxzZTtcbi1cdHB0aHJlYWRfdCAqdGlkO1xuLVx0Y2hhciAqcDtcbiYjNDM7XHQvKiBUZXN0cyBEVU1QX1VTRVJfUEFHRVNfVEVTVCB1c2luZyBwaW5fdXNlcl9wYWdlcyAqL1xuJiM0MztcdGludCBpO1xuIFxuLVx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCYjMzQ7bTpyOm46RjpmOmFiY2o6dFRMVXV3V1NIcHpcJiMzNDspKSAhPSAtMSkge1xuLVx0XHRzd2l0Y2ggKG9wdCkge1xuLVx0XHRjYXNlICYjMzk7YSYjMzk7OlxuLVx0XHRcdGNtZCA9IFBJTl9GQVNUX0JFTkNITUFSSztcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O2ImIzM5Ozpcbi1cdFx0XHRjbWQgPSBQSU5fQkFTSUNfVEVTVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O0wmIzM5Ozpcbi1cdFx0XHRjbWQgPSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7YyYjMzk7OlxuLVx0XHRcdGNtZCA9IERVTVBfVVNFUl9QQUdFU19URVNUO1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRHVtcCBwYWdlIDAgKGluZGV4IDEpLiBNYXkgYmUgb3ZlcnJpZGRlbiBsYXRlciwgYnlcbi1cdFx0XHQgKiB1c2VyJiMzOTtzIG5vbi1vcHRpb24gYXJndW1lbnRzLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogLndoaWNoX3BhZ2VzIGlzIHplcm8tYmFzZWQsIHNvIHRoYXQgemVybyBjYW4gbWVhbiBcJiMzNDtkb1xuLVx0XHRcdCAqIG5vdGhpbmdcJiMzNDsuXG4tXHRcdFx0ICovXG4tXHRcdFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O3AmIzM5Ozpcbi1cdFx0XHQvKiB3b3JrcyBvbmx5IHdpdGggRFVNUF9VU0VSX1BBR0VTX1RFU1QgKi9cbi1cdFx0XHRndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O0YmIzM5Ozpcbi1cdFx0XHQvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqL1xuLVx0XHRcdGd1cC5ndXBfZmxhZ3MgPSBzdHJ0b2wob3B0YXJnLCAwLCAwKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O2omIzM5Ozpcbi1cdFx0XHRudGhyZWFkcyA9IGF0b2kob3B0YXJnKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O20mIzM5Ozpcbi1cdFx0XHRzaXplID0gYXRvaShvcHRhcmcpICogTUI7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTtyJiMzOTs6XG4tXHRcdFx0cmVwZWF0cyA9IGF0b2kob3B0YXJnKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O24mIzM5Ozpcbi1cdFx0XHRucl9wYWdlcyA9IGF0b2kob3B0YXJnKTtcbi1cdFx0XHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdFx0XHRucl9wYWdlcyA9IHNpemUgLyBwc2l6ZSgpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7dCYjMzk7OlxuLVx0XHRcdHRocCA9IDE7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTtUJiMzOTs6XG4tXHRcdFx0dGhwID0gMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O1UmIzM5Ozpcbi1cdFx0XHRjbWQgPSBHVVBfQkFTSUNfVEVTVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O3UmIzM5Ozpcbi1cdFx0XHRjbWQgPSBHVVBfRkFTVF9CRU5DSE1BUks7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTt3JiMzOTs6XG4tXHRcdFx0d3JpdGUgPSAxO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7VyYjMzk7OlxuLVx0XHRcdHdyaXRlID0gMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O2YmIzM5Ozpcbi1cdFx0XHRmaWxlID0gb3B0YXJnO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7UyYjMzk7OlxuLVx0XHRcdGZsYWdzIFx1MDAyNj0gfk1BUF9QUklWQVRFO1xuLVx0XHRcdGZsYWdzIHw9IE1BUF9TSEFSRUQ7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTtIJiMzOTs6XG4tXHRcdFx0ZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XG4tXHRcdFx0aHVnZXRsYiA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1dyb25nIGFyZ3VtZW50XFxuXCYjMzQ7KTtcbi1cdFx0fVxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbiYjNDM7XG4mIzQzO1x0XHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkcjtcbiYjNDM7XHRcdGd1cC5zaXplID0gc2VsZi1cdTAwM2VzaXplO1xuJiM0MztcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4mIzQzO1x0XHRcdHNlbGYtXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuJiM0MztcdFx0XHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XG4mIzQzO1xuJiM0MztcdFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbiYjNDM7XHRcdGd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOO1xuJiM0MztcbiYjNDM7XHRcdFRIX0xPRyhcJiMzNDtucl9wYWdlc19wZXJfY2FsbD0ldVwmIzM0OywgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShpb2N0bChzZWxmLVx1MDAzZWd1cF9mZCwgRFVNUF9VU0VSX1BBR0VTX1RFU1QsIFx1MDAyNmd1cCksIDApO1xuIFx0fVxuJiM0Mzt9XG4gXG4tXHRpZiAob3B0aW5kIFx1MDAzYyBhcmdjKSB7XG4tXHRcdGludCBleHRyYV9hcmdfY291bnQgPSAwO1xuLVx0XHQvKlxuLVx0XHQgKiBGb3IgZXhhbXBsZTpcbi1cdFx0ICpcbi1cdFx0ICogICAuL2d1cF90ZXN0IC1jIDAgMSAweDEwMDFcbi1cdFx0ICpcbi1cdFx0ICogLi4udG8gZHVtcCBwYWdlcyAwLCAxLCBhbmQgNDA5N1xuLVx0XHQgKi9cbi1cbi1cdFx0d2hpbGUgKChvcHRpbmQgXHUwMDNjIGFyZ2MpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgICAgKGV4dHJhX2FyZ19jb3VudCBcdTAwM2MgR1VQX1RFU1RfTUFYX1BBR0VTX1RPX0RVTVApKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBEbyB0aGUgMS1iYXNlZCBpbmRleGluZyBoZXJlLCBzbyB0aGF0IHRoZSB1c2VyIGNhblxuLVx0XHRcdCAqIHVzZSBub3JtYWwgMC1iYXNlZCBpbmRleGluZyBvbiB0aGUgY29tbWFuZCBsaW5lLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGxvbmcgcGFnZV9pbmRleCA9IHN0cnRvbChhcmd2W29wdGluZF0sIDAsIDApICYjNDM7IDE7XG4tXG4tXHRcdFx0Z3VwLndoaWNoX3BhZ2VzW2V4dHJhX2FyZ19jb3VudF0gPSBwYWdlX2luZGV4O1xuLVx0XHRcdGV4dHJhX2FyZ19jb3VudCYjNDM7JiM0Mzs7XG4tXHRcdFx0b3B0aW5kJiM0MzsmIzQzOztcbi1cdFx0fVxuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzX2Zhc3QpXG4mIzQzO3tcbiYjNDM7XHQvKiBUZXN0cyB0aGUgbG9ja2xlc3MgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIHBhdGggKi9cbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuJiM0MztcbiYjNDM7XHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuJiM0MztcdFx0Z3VwLnNpemUgPSBzZWxmLVx1MDAzZXNpemU7XG4mIzQzO1x0XHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFx1MDAzYyAwID9cbiYjNDM7XHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKHZhcmlhbnQtXHUwMDNld3JpdGUpXG4mIzQzO1x0XHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbiYjNDM7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXVcJiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIEdVUF9GQVNUX0JFTkNITUFSSywgXHUwMDI2Z3VwKSwgMCk7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfZmFzdClcbiYjNDM7e1xuJiM0MztcdC8qIFRlc3RzIHRoZSBsb2NrbGVzcyBwaW5fdXNlcl9wYWdlc19mYXN0KCkgcGF0aCAqL1xuJiM0MztcdGludCBpO1xuIFxuLVx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4gXG4tXHRpZiAoaHVnZXRsYikge1xuLVx0XHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4mIzQzO1x0XHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkcjtcbiYjNDM7XHRcdGd1cC5zaXplID0gc2VsZi1cdTAwM2VzaXplO1xuJiM0MztcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4mIzQzO1x0XHRcdHNlbGYtXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldO1xuIFxuLVx0XHRpZiAoIWhwX3NpemUpXG4tXHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7SHVnZVRMQiBpcyB1bmF2YWlsYWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAodmFyaWFudC1cdTAwM2V3cml0ZSlcbiYjNDM7XHRcdFx0Z3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFO1xuIFxuLVx0XHRzaXplID0gKHNpemUgJiM0MzsgaHBfc2l6ZSAtIDEpIFx1MDAyNiB+KGhwX3NpemUgLSAxKTtcbi1cdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKVxuLVx0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXVcJiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIFBJTl9GQVNUX0JFTkNITUFSSywgXHUwMDI2Z3VwKSwgMCk7XG4gXHR9XG4mIzQzO31cbiBcbi1cdGtzZnRfc2V0X3BsYW4obnRocmVhZHMpO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtKVxuJiM0Mzt7XG4mIzQzO1x0LyogVGVzdHMgcGluX3VzZXJfcGFnZXMoKSB3aXRoIEZPTExfTE9OR1RFUk0gKi9cbiYjNDM7XHRpbnQgaTtcbiBcbi1cdGZpbGVkID0gb3BlbihmaWxlLCBPX1JEV1J8T19DUkVBVCwgMDY2NCk7XG4tXHRpZiAoZmlsZWQgXHUwMDNjIDApXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cJiMzNDssIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuIFxuLVx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXM7XG4tXHRpZiAod3JpdGUpXG4tXHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbiYjNDM7XHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuJiM0MztcdFx0Z3VwLnNpemUgPSBzZWxmLVx1MDAzZXNpemU7XG4mIzQzO1x0XHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFx1MDAzYyAwID9cbiYjNDM7XHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4gXG4tXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4tXHRpZiAoZ3VwX2ZkID09IC0xKSB7XG4tXHRcdHN3aXRjaCAoZXJybm8pIHtcbi1cdFx0Y2FzZSBFQUNDRVM6XG4tXHRcdFx0aWYgKGdldHVpZCgpKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwmIzM0Oyk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgRU5PRU5UOlxuLVx0XHRcdGlmIChvcGVuZGlyKFwmIzM0Oy9zeXMva2VybmVsL2RlYnVnXCYjMzQ7KSA9PSBOVUxMKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcblwmIzM0Oyk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xcblwmIzM0Oyk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCYjMzQ7KTtcbi1cdFx0a3NmdF9leGl0X3Bhc3MoKTtcbiYjNDM7XHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuJiM0MztcdFx0XHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XG4mIzQzO1xuJiM0MztcdFx0VEhfTE9HKFwmIzM0O25yX3BhZ2VzX3Blcl9jYWxsPSV1XCYjMzQ7LCBndXAubnJfcGFnZXNfcGVyX2NhbGwpO1xuJiM0MztcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLLCBcdTAwMjZndXApLCAwKTtcbiBcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChkdW1wX3VzZXJfcGFnZXNfc3BhcnNlX2luZGljZXMpXG4mIzQzO3tcbiYjNDM7XHQvKiBUZXN0cyBzcGFyc2UgbXVsdGktaW5kZXggd2hpY2hfcGFnZXNbXSBpbnB1dHMuICovXG4mIzQzO1x0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDEyOCAqIE1CO1xuJiM0MztcdGludCB6ZXJvX2ZkLCBndXBfZmQ7XG4mIzQzO1x0Y2hhciAqYWRkciwgKnA7XG4mIzQzO1xuJiM0MztcdHplcm9fZmQgPSBvcGVuKFwmIzM0Oy9kZXYvemVyb1wmIzM0OywgT19SRFdSKTtcbiYjNDM7XHRBU1NFUlRfR0UoemVyb19mZCwgMCk7XG4gXG4tXHRwID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncywgZmlsZWQsIDApO1xuLVx0aWYgKHAgPT0gTUFQX0ZBSUxFRClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O21tYXA6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuLVx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylwO1xuJiM0MztcdGd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbiYjNDM7XHRBU1NFUlRfR0UoZ3VwX2ZkLCAwKTtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIHplcm9fZmQsIDApO1xuJiM0MztcdGNsb3NlKHplcm9fZmQpO1xuJiM0MztcdEFTU0VSVF9ORShhZGRyLCBNQVBfRkFJTEVEKTtcbiBcbi1cdGlmICh0aHAgPT0gMSlcbi1cdFx0bWFkdmlzZShwLCBzaXplLCBNQURWX0hVR0VQQUdFKTtcbi1cdGVsc2UgaWYgKHRocCA9PSAwKVxuLVx0XHRtYWR2aXNlKHAsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4mIzQzO1x0bWFkdmlzZShhZGRyLCBzaXplLCBNQURWX0hVR0VQQUdFKTtcbiBcbi1cdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xuLVx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IHBzaXplKCkpXG4mIzQzO1x0Zm9yIChwID0gYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpYWRkciAmIzQzOyBzaXplO1xuJiM0MztcdCAgICAgcCAmIzQzOz0gcHNpemUoKSlcbiBcdFx0cFswXSA9IDA7XG4gXG4tXHR0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7XG4tXHRhc3NlcnQodGlkKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG50aHJlYWRzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsIFx1MDAyNmd1cCk7XG4tXHRcdGFzc2VydChyZXQgPT0gMCk7XG4tXHR9XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudGhyZWFkczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgTlVMTCk7XG4tXHRcdGFzc2VydChyZXQgPT0gMCk7XG4mIzQzO1x0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylhZGRyO1xuJiM0MztcdGd1cC5zaXplID0gc2l6ZTtcbiYjNDM7XHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBzaXplIC8gcHNpemUoKTtcbiYjNDM7XHRndXAuZ3VwX2ZsYWdzID0gRk9MTF9XUklURTtcbiYjNDM7XHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xuJiM0MztcdGd1cC53aGljaF9wYWdlc1sxXSA9IDIwO1xuJiM0MztcdGd1cC53aGljaF9wYWdlc1syXSA9IDB4MTAwMTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcmVzZXJ2ZSB0aGUgb2xkIFwmIzM0Oy4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMFwmIzM0OyBzcGFyc2UgZHVtcFxuJiM0MztcdCAqIGNvdmVyYWdlIGFmdGVyIHJlbW92aW5nIGNvbW1hbmQtbGluZSBwYXJzaW5nIGZyb20gdGhpcyBiaW5hcnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0QVNTRVJUX0VRKGlvY3RsKGd1cF9mZCwgRFVNUF9VU0VSX1BBR0VTX1RFU1QsIFx1MDAyNmd1cCksIDApO1xuJiM0MztcbiYjNDM7XHRtdW5tYXAoYWRkciwgc2l6ZSk7XG4mIzQzO1x0Y2xvc2UoZ3VwX2ZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcdGNoYXIgKmZpbGUgPSBcJiMzNDsvZGV2L3plcm9cJiMzNDs7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihmaWxlLCBPX1JEV1IpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cJiMzNDssIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4gXHR9XG4mIzQzO1x0Y2xvc2UoZmQpO1xuIFxuLVx0ZnJlZSh0aWQpO1xuJiM0MztcdGZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuJiM0MztcdGlmIChmZCA9PSAtMSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFQUNDRVMpXG4mIzQzO1x0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKGVycm5vID09IEVOT0VOVCkge1xuJiM0MztcdFx0XHRESVIgKmRlYnVnZnMgPSBvcGVuZGlyKFwmIzM0Oy9zeXMva2VybmVsL2RlYnVnXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghZGVidWdmcykge1xuJiM0MztcdFx0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O01vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGNsb3NlZGlyKGRlYnVnZnMpO1xuJiM0MztcdFx0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O0NoZWNrIENPTkZJR19HVVBfVEVTVCBpbiBrZXJuZWwgY29uZmlnXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShmZCk7XG4gXG4tXHRrc2Z0X2V4aXRfcGFzcygpO1xuJiM0MztcdHJldHVybiB0ZXN0X2hhcm5lc3NfcnVuKGFyZ2MsIGFyZ3YpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG5pbmRleCAyZjJiOTg3OWQxMDA1MS4uZTFiYjAzMTAxOWYyYWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbkBAIC0xMCw5ICYjNDM7MTAsNiBAQFxuICAqIGJ1Z3MuXG4gICovXG4gXG4tI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbi1cbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbkBAIC0yOSw2ICYjNDM7MjYsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvaW9jdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuIFxuIC8qXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbiYjMzk7dCBleHBvcnRlZFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbmluZGV4IDU1NWI0YjNkMTQzMDdlLi41N2NmNzkwY2E0NzhkNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuY1xuQEAgLTE0LDcgJiM0MzsxNCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgTUlOX0ZSRUVfUEFHRVNcdDIwXG4gI2RlZmluZSBOUl9IVUdFX1BBR0VTXHQxMFx0LyogY29tbW9uIG51bWJlciBvZiBwYWdlcyB0byBtYXAvYWxsb2NhdGUgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXG5pbmRleCAwZjJhYWQxYjdkYmQ2Zi4uYTQ1OGJlY2Y1ODMyN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcbkBAIC0xOCw3ICYjNDM7MTgsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxuICNkZWZpbmUgUFJPVEVDVElPTiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuaW5kZXggZWQzZDkyZTg2MmQ4NzYuLjliNzI0YWY2NmU5Mzg4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuQEAgLTI2LDcgJiM0MzsyNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBERUZBVUxUX0xFTkdUSF9NQiAxMFVMXG4gI2RlZmluZSBNQl9UT19CWVRFUyh4KSAoeCAqIDEwMjQgKiAxMDI0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXG5pbmRleCAzZmY3ZjA2MmI3ZWI0NS4uZjQ1MTRkYTQ5ZTFkZjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXG5AQCAtMjksNyAmIzQzOzI5LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbmluZGV4IGJjMjAyZTRlZDJiZGE3Li4yMDg2NGU3ZDRlMGM3MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbkBAIC0yMSw5ICYjNDM7MjEsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdGZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORVxuICNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi12bWVtbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXZtZW1tYXAuY1xuaW5kZXggNTA3ZGY3OGExNThkOGQuLmM0NmE2NTZjMjVhMDRlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi12bWVtbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItdm1lbW1hcC5jXG5AQCAtMTEsNyAmIzQzOzExLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFBBR0VfQ09NUE9VTkRfSEVBRFx0KDFVTCBcdTAwM2NcdTAwM2MgMTUpXG4gI2RlZmluZSBQQUdFX0NPTVBPVU5EX1RBSUxcdCgxVUwgXHUwMDNjXHUwMDNjIDE2KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG5pbmRleCBmYjQ2MDA1NzBlMTMxOS4uOTQ5NTk3NGVjY2JlYTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG5AQCAtMjAsNyAmIzQzOzIwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2lmbmRlZiBTVEFUWF9ESU9BTElHTlxuICNkZWZpbmUgU1RBVFhfRElPQUxJR05cdFx0MHgwMDAwMjAwMFVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5pbmRleCAyZGMxNTgwNTRmNjY2Yi4uNTZjNWE4NTMzZTlkOTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbkBAIC0xMCw3ICYjNDM7MTAsNiBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5pbmRleCBmOTQ1NDllZmNjNmZmMy4uMjUzMmE0MmI5OGRmZjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xuQEAgLTI1LDcgJiM0MzsyNSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBJTkxPT1BfSVRFUiAxMDBcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDEwZThkZWRjYjA4N2RjLi4yMzgyOTczYjJmNTUyYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjIsNyAmIzQzOzIyLDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtsaW51eC9tYWdpYy5oXCYjMzQ7XG4gXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgQkFTRV9BRERSICgodm9pZCAqKSgxVUwgXHUwMDNjXHUwMDNjIDMwKSlcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBocGFnZV9wbWRfc2l6ZTtcbkBAIC0xMTksNiAmIzQzOzExOCw3IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRjaGFyIGJ1ZlsxIFx1MDAzY1x1MDAzYyAxMF07XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuIFx0Y2hhciAqc3RyLCAqZW5kO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRmaW5mby5kaXIgPSBkaXI7XG4gXHRzdGF0KGZpbmZvLmRpciwgXHUwMDI2cGF0aF9zdGF0KTtcbkBAIC0xMzgsOCAmIzQzOzEzOCw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRcdCAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKVxuIFx0ICAgIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tXHRpZiAocmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIFx1MDAzYyAwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7cmVhZF9maWxlKHJlYWRfbnVtKVwmIzM0Oyk7XG4mIzQzO1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuIFx0aWYgKHN0cnN0cihidWYsIFwmIzM0O0RFVlRZUEU9ZGlza1wmIzM0OykpIHtcbiBcdFx0LyogRm91bmQgaXQgKi9cbiBcdFx0aWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG5AQCAtMzE5LDcgJiM0MzszMjAsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIHtcbiBcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XG4gXHRjb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7XG4tXHRpbnQgZmQ7XG4mIzQzO1x0aW50IGZkLCByZXQ7XG4gXHR2b2lkICpwO1xuIFx0dW5zaWduZWQgbG9uZyBzaXplO1xuIFxuQEAgLTM2Myw3ICYjNDM7MzY0LDEwIEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttbWFwKClcJiMzNDspO1xuIFxuIFx0LyogRHJvcCBwYWdlIGNhY2hlICovXG4tXHR3cml0ZV9maWxlKFwmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1wmIzM0OywgXCYjMzQ7M1wmIzM0OywgMik7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShcJiMzNDsvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNcJiMzNDssIFwmIzM0OzNcJiMzNDssIDIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuJiM0MztcbiBcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0cmV0dXJuIHA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbmluZGV4IGEwNTBmNDg0MGNmYTNhLi5jYzM3NDkyY2YzMmMzZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xuQEAgLTE1LDcgJiM0MzsxNSw2IEBAXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcdTAwM2NpbmNsdWRlL3Zkc28vdGltZTY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBLU01fU1lTRlNfUEFUSCBcJiMzNDsvc3lzL2tlcm5lbC9tbS9rc20vXCYjMzQ7XG4gI2RlZmluZSBLU01fRlAocykgKEtTTV9TWVNGU19QQVRIIHMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xuaW5kZXggMjlmNzQ5MjQ1M2Q0MzkuLjRmZTk3YzAzMzI2MTI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5AQCAtNCw5ICYjNDM7NCw2IEBAXG4gICogcGF0aHMgaW4gdGhlIGtlcm5lbC5cbiAgKi9cbiBcbi0jaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuLVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY251bWEuaFx1MDAzZVxuQEAgLTE2LDYgJiM0MzsxMyw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuIFxuICNkZWZpbmUgVFdPTUVHXHRcdCgyXHUwMDNjXHUwMDNjMjApXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCA2Zjg5NzFkNWIzY2U0My4uODA0MzcyODAzMDgwY2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuQEAgLTIzLDcgJiM0MzsyMyw2IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBQQUdFTUFQX0JJVFNfQUxMXHRcdChQQUdFX0lTX1dQQUxMT1dFRCB8IFBBR0VfSVNfV1JJVFRFTiB8XHRcXFxuIFx0XHRcdFx0XHQgUEFHRV9JU19GSUxFIHwgUEFHRV9JU19QUkVTRU5UIHxcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbmluZGV4IGQ4ZDlkMWRlNTdiOGIwLi5hNGY4NDUxNzkxY2JkYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbkBAIC0xNCw3ICYjNDM7MTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuIFxuICNpZm5kZWYgUFJfVEhQX0RJU0FCTEVfRVhDRVBUX0FEVklTRURcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5pbmRleCA5YTZkOTU0ZWUzNzEyNi4uNWJhMjAzM2U4YTA5Y2QgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbkBAIC00NSw4ICYjNDM7NDUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3B0cmFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2V0am1wLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtwa2V5LWhlbHBlcnMuaFwmIzM0O1xuIFxuIGludCBpdGVyYXRpb25fbnIgPSAxO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IDhjMjk2ZGVkZjA0NzRkLi41NmRmMGRjYzk2NDBjMCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTEzMCwzMCAmIzQzOzEzMCw2IEBAIHRlc3Rfc2VsZWN0ZWQoKSB7XG4gXHRmaVxuIH1cbiBcbi1ydW5fZ3VwX21hdHJpeCgpIHtcbi0gICAgIyAtdDogdGhwPW9uLCAtVDogdGhwPW9mZiwgLUg6IGh1Z2V0bGI9b25cbi0gICAgbG9jYWwgaHVnZXRsYl9tYj0yNTZcbi1cbi0gICAgZm9yIGh1Z2UgaW4gLXQgLVQgXCYjMzQ7LUggLW0gJGh1Z2V0bGJfbWJcJiMzNDs7IGRvXG4tICAgICAgICAjIC11OiBndXAtZmFzdCwgLVU6IGd1cC1iYXNpYywgLWE6IHBpbi1mYXN0LCAtYjogcGluLWJhc2ljLCAtTDogcGluLWxvbmd0ZXJtXG4tICAgICAgICBmb3IgdGVzdF9jbWQgaW4gLXUgLVUgLWEgLWIgLUw7IGRvXG4tICAgICAgICAgICAgIyAtdzogd3JpdGU9MSwgLVc6IHdyaXRlPTBcbi0gICAgICAgICAgICBmb3Igd3JpdGUgaW4gLXcgLVc7IGRvXG4tICAgICAgICAgICAgICAgICMgLVM6IHNoYXJlZFxuLSAgICAgICAgICAgICAgICBmb3Igc2hhcmUgaW4gLVMgXCYjMzQ7IFwmIzM0OzsgZG9cbi0gICAgICAgICAgICAgICAgICAgICMgLW46IEhvdyBtYW55IHBhZ2VzIHRvIGZldGNoIHRvZ2V0aGVyPyAgNTEyIGlzIHNwZWNpYWxcbi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCYjMzk7cyBkZWZhdWx0IHRocCBzaXplIChvciAyTSBvbiB4ODYpLCAxMjMgdG9cbi0gICAgICAgICAgICAgICAgICAgICMganVzdCB0ZXN0IHBhcnRpYWwgZ3VwIHdoZW4gaGl0IGEgaHVnZSBpbiB3aGF0ZXZlciBmb3JtXG4tICAgICAgICAgICAgICAgICAgICBmb3IgbnVtIGluIFwmIzM0Oy1uIDFcJiMzNDsgXCYjMzQ7LW4gNTEyXCYjMzQ7IFwmIzM0Oy1uIDEyM1wmIzM0OyBcJiMzNDstbiAtMVwmIzM0OzsgZG9cbi0gICAgICAgICAgICAgICAgICAgICAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IFxcXG4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHVnZSAkdGVzdF9jbWQgJHdyaXRlICRzaGFyZSAkbnVtXG4tICAgICAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgICAgIGRvbmVcbi0gICAgICAgICAgICBkb25lXG4tICAgICAgICBkb25lXG4tICAgIGRvbmVcbi19XG4tXG4gIyBmaWx0ZXIgNjRiaXQgYXJjaGl0ZWN0dXJlc1xuIEFSQ0g2NFNUUj1cJiMzNDthcm02NCBtaXBzNjQgcGFyaXNjNjQgcHBjNjQgcHBjNjRsZSByaXNjdjY0IHMzOTB4IHNwYXJjNjQgeDg2XzY0XCYjMzQ7XG4gaWYgWyAteiBcJiMzNDskQVJDSFwmIzM0OyBdOyB0aGVuXG5AQCAtMjc2LDE4ICYjNDM7MjUyLDcgQEAgZmlcbiBcbiBDQVRFR09SWT1cJiMzNDttbWFwXCYjMzQ7IHJ1bl90ZXN0IC4vbWFwX2ZpeGVkX25vcmVwbGFjZVxuIFxuLWlmICRSVU5fQUxMOyB0aGVuXG4tICAgIHJ1bl9ndXBfbWF0cml4XG4tZWxzZVxuLSAgICAjIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcbi0gICAgQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAxXG4tICAgIENBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gLTFcbi0gICAgIyBwaW5fdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXG4tICAgIENBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gMVxuLSAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIC0xXG4tZmlcbi0jIER1bXAgcGFnZXMgMCwgMTksIGFuZCA0MDk2LCB1c2luZyBwaW5fdXNlcl9wYWdlczpcbi1DQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1jdCAtRiAweDEgMCAxOSAweDEwMDBcbiYjNDM7Q0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdFxuIENBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX2xvbmd0ZXJtXG4gXG4gQ0FURUdPUlk9XCYjMzQ7dXNlcmZhdWx0ZmRcJiMzNDsgcnVuX3Rlc3QgLi91ZmZkLXVuaXQtdGVzdHNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbmluZGV4IGZiMTg2NGE2OGUxYzZiLi42YzIyYWM5ZTkzZGIwNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtOSw3ICYjNDM7OSw2IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCBcJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXBcJiMzNDtcbiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCAzMmI5OTE0NzJmNzQ0Zi4uZTc0NGM5NDM0ZTdkMDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5AQCAtMjEsNyAmIzQzOzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiB1aW50NjRfdCBwYWdlc2l6ZTtcbiB1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0O1xuQEAgLTI2OSw3ICYjNDM7MjY4LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVfZGVidWdmcyhjb25zdCBjaGFyICpmbXQsIC4uLilcbiBcdGlmIChyZXQgXHUwMDNlPSBJTlBVVF9NQVgpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslczogRGVidWdmcyBpbnB1dCBpcyB0b28gbG9uZ1xcblwmIzM0OywgX19mdW5jX18pO1xuIFxuLVx0d3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpO1xuJiM0MztcdHJldCA9IHdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCAmIzQzOyAxKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiB9XG4gXG4gc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuaW5kZXggMjJiOWMyZjFjMzVkMjMuLjBkYTE1ZDUzMGExZmM4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG5AQCAtMTQsNyAmIzQzOzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQilcbiAjZGVmaW5lIE1BUF9IVUdFVExCXHQweDQwMDAwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5pbmRleCA4ZWIwYzU2MzBlN2UzMS4uOTZmNzI4OThlYmUwYTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuQEAgLTE3LDcgJiM0MzsxNyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIGludCBiYWNraW5nX2ZkID0gLTE7XG4gaW50IG1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5pbmRleCA5MmEyMWI5N2Y3NDVhZi4uMDcyMzg0M2E3NjI2YjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5AQCAtMzcsNyAmIzQzOzM3LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFVGRkRfRkxBR1NcdChPX0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSlcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuaW5kZXggYzk3M2Q2NzIyNzIwYzMuLmViNGIyNDMzYjAwZTYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuQEAgLTcsOCAmIzQzOzcsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dWZmZC1jb21tb24uaFwmIzM0O1xuIFxuIHN0YXRpYyBpbnQgcGFnZW1hcF9mZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcbmluZGV4IGUyNGQ3YmEwMGI0NDE3Li41YTM1NGE2NjRkMWY3ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG5AQCAtMTEsNyAmIzQzOzExLDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAvKlxuICAqIFRoZSBoaW50IGFkZHIgdmFsdWUgaXMgdXNlZCB0byBhbGxvY2F0ZSBhZGRyZXNzZXNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbmluZGV4IDMxMWZjNWI0NTEzZWI0Li5mMjc2ZWVlNTc2ODA0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtNjk4LDkzICYjNDM7Njk4LDM5IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRyZXR1cm4gcmV0IFx1MDAzZSAwID8gMCA6IC1lcnJubztcbiB9XG4gXG4taW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4te1xuLVx0aW50IGZkO1xuLVx0c3NpemVfdCBudW1yZWFkO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdGlmIChudW1yZWFkIFx1MDAzYyAxKSB7XG4tXHRcdGNsb3NlKGZkKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRidWZbbnVtcmVhZF0gPSAmIzM5O1xcMCYjMzk7O1xuLVx0Y2xvc2UoZmQpO1xuLVxuLVx0cmV0dXJuICh1bnNpZ25lZCBpbnQpIG51bXJlYWQ7XG4tfVxuLVxuLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4te1xuLVx0aW50IGZkLCBzYXZlZF9lcnJubztcbi1cdHNzaXplX3QgbnVtd3JpdHRlbjtcbi1cbi1cdGlmIChidWZsZW4gXHUwMDNjIDIpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtJbmNvcnJlY3QgYnVmZmVyIGxlbjogJXp1XFxuXCYjMzQ7LCBidWZsZW4pO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIG9wZW4gZmFpbGVkOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbi1cbi1cdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdHNhdmVkX2Vycm5vID0gZXJybm87XG4tXHRjbG9zZShmZCk7XG4tXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuLVx0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBwYXRoLCAoaW50KShidWZsZW4gLSAxKSxcbi1cdFx0XHRcdGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdGlmIChudW13cml0dGVuICE9IGJ1ZmxlbiAtIDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcblwmIzM0Oyxcbi1cdFx0XHRcdHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLCBidWYsIGJ1ZmxlbiAtIDEsIG51bXdyaXR0ZW4pO1xuLX1cbi1cbi11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpXG4te1xuLVx0Y2hhciBidWZbMjFdO1xuLVxuLVx0aWYgKHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSBcdTAwM2MgMClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3JlYWRfZmlsZSgpXCYjMzQ7KTtcbi1cbi1cdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbi17XG4tXHRjaGFyIGJ1ZlsyMV07XG4tXG4tXHRzcHJpbnRmKGJ1ZiwgXCYjMzQ7JWx1XCYjMzQ7LCBudW0pO1xuLVx0d3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEpO1xuLX1cbi1cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1hbGwsIHNobW1heDtcbiBcbiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpXG4ge1xuLVx0aWYgKHNobW1heClcbi1cdFx0d3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7LCBzaG1tYXgpO1xuLVx0aWYgKHNobWFsbClcbi1cdFx0d3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBzaG1hbGwpO1xuJiM0MztcdGlmIChzaG1tYXggXHUwMDI2XHUwMDI2IHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heFwmIzM0Oywgc2htbWF4KSlcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsKCk7XG4mIzQzO1x0aWYgKHNobWFsbCBcdTAwMjZcdTAwMjYgd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBzaG1hbGwpKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiB9XG4gXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuciA9IGxlbmd0aCAvIHBzaXplKCk7XG4gXHR1bnNpZ25lZCBsb25nIHZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuLVx0dmFsID0gcmVhZF9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDspO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7LCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuIFx0aWYgKHZhbCBcdTAwM2MgbGVuZ3RoKSB7XG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heFwmIzM0OywgbGVuZ3RoKTtcbiYjNDM7XHRcdHJldCA9IHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heFwmIzM0OywgbGVuZ3RoKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGtzZnRfZXhpdF9mYWlsKCk7XG4gXHRcdHNobW1heCA9IHZhbDtcbiBcdH1cbiBcbi1cdHZhbCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7KTtcbiYjNDM7XHRyZXQgPSByZWFkX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0OywgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiBcdGlmICh2YWwgXHUwMDNjIG5yKSB7XG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0OywgbnIpO1xuJiM0MztcdFx0cmV0ID0gd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBucik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuIFx0XHRzaG1hbGwgPSB2YWw7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuaW5kZXggZWE4ZmM4ZmRmMGViMGIuLmFhODU2ZjBkMzJkNjRlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC04LDYgJiM0Mzs4LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZSAvKiBfU0NfUEFHRVNJWkUgKi9cbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vZmlsZV91dGlscy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjZGVmaW5lIEJJVF9VTEwobnIpICAgICAgICAgICAgICAgICAgICgxVUxMIFx1MDAzY1x1MDAzYyAobnIpKVxuICNkZWZpbmUgUE1fU09GVF9ESVJUWSAgICAgICAgICAgICAgICAgQklUX1VMTCg1NSlcbkBAIC0xNjQsMTEgJiM0MzsxNjYsNiBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTtcbiAjZGVmaW5lIFBBR0VNQVBfUFJFU0VOVChlbnQpXHQoKChlbnQpIFx1MDAyNiAoMXVsbCBcdTAwM2NcdTAwM2MgNjMpKSAhPSAwKVxuICNkZWZpbmUgUEFHRU1BUF9QRk4oZW50KVx0KChlbnQpIFx1MDAyNiAoKDF1bGwgXHUwMDNjXHUwMDNjIDU1KSAtIDEpKVxuIFxuLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpO1xuLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcbi1cbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aCk7XG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbHMgKHRvb2xzL21tL2d1cF9iZW5jaC5jLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBEb2N1bWVudGF0aW9uLCBhbmQgTUFJTlRBSU5FUlMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMGEyM2U5OTc5ZWVkZjRhNmZiNThlYTFiMzc2Y2E1Mjc1NzJjNGZjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMjA6Mjk6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CmluZGV4IGMxNmNhMTYzYjU1ZTNjLi5lYTcyMmFkZjIyY2NhYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QKQEAgLTIzMCwxMCAmIzQzOzIzMCwxNiBAQCBUaGlzIGZpbGU6OgogCiAgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYwogCi1oYXMgdGhlIGZvbGxvd2luZyBuZXcgY2FsbHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBwaW4qKCkgd3JhcHBlciBmdW5jdGlvbnM6CiYjNDM7Y29udGFpbnMgdGhlIGZvbGxvd2luZyB0ZXN0IGNhc2VzIHRvIGV4ZXJjaXNlIHBpbl91c2VyX3BhZ2VzKigpOgogCi0qIFBJTl9GQVNUX0JFTkNITUFSSyAoLi9ndXBfdGVzdCAtYSkKLSogUElOX0JBU0lDX1RFU1QgKC4vZ3VwX3Rlc3QgLWIpCiYjNDM7KiBwaW5fdXNlcl9wYWdlcyB2aWEgUElOX0JBU0lDX1RFU1QKJiM0MzsqIHBpbl91c2VyX3BhZ2VzX2Zhc3QgdmlhIFBJTl9GQVNUX0JFTkNITUFSSwomIzQzOyogcGluX3VzZXJfcGFnZXNfbG9uZ3Rlcm0gdmlhIFBJTl9MT05HVEVSTV9CRU5DSE1BUksKJiM0MzsKJiM0MztSdW4gd2l0aDo6CiYjNDM7CiYjNDM7ICBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tCiYjNDM7ICAuL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0CiAKIFlvdSBjYW4gbW9uaXRvciBob3cgbWFueSB0b3RhbCBkbWEtcGlubmVkIHBhZ2VzIGhhdmUgYmVlbiBhY3F1aXJlZCBhbmQgcmVsZWFzZWQKIHNpbmNlIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCwgdmlhIHR3byBuZXcgL3Byb2Mvdm1zdGF0IGVudHJpZXM6IDo6CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDgwNmJkMmQ4MGQxNTM1Li43ZDEyMWRlZTlmMGYyYyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE3MDI0LDYgJiM0MzsxNzAyNCw3IEBAIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbQogRjoJbW0vZ3VwLmMKIEY6CW1tL2d1cF90ZXN0LmMKIEY6CW1tL2d1cF90ZXN0LmgKJiM0MztGOgl0b29scy9tbS9ndXBfYmVuY2guYwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMKIEY6CXRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKIApAQCAtMTcxMjgsNiAmIzQzOzE3MTI5LDcgQEAgRjoJbW0vbWVtb3J5LXRpZXJzLmMKIEY6CW1tL3BhZ2VfaWRsZS5jCiBGOgltbS9wZ2FsbG9jLXRyYWNrLmgKIEY6CW1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmMKJiM0MztGOgl0b29scy9saWIvbW0vCiBGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8KIAogTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT04KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi43OTJmNGI0ZGI2MjUyZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMKQEAgLTAsMCAmIzQzOzEsMTE5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2ZpbGVfdXRpbHMuaCYjMzQ7CiYjNDM7CiYjNDM7aW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CXNzaXplX3QgbnVtcmVhZDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKJiM0MzsJaWYgKGZkID09IC0xKSB7CiYjNDM7CQlpbnQgZXJyID0gZXJybm87CiYjNDM7CiYjNDM7CQlwcmludGYoJiMzNDsjICVzOiAlcyAoJWQpXG4mIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTsKJiM0MzsJCXJldHVybiAtZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CW51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOwomIzQzOwlpZiAobnVtcmVhZCAmbHQ7IDEpIHsKJiM0MzsJCWludCBlcnIgPSBudW1yZWFkID8gZXJybm8gOiBFTk9EQVRBOwomIzQzOwomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcHJpbnRmKCYjMzQ7IyAlczogJXMgKCVkKVxuJiMzNDssIHBhdGgsIHN0cmVycm9yKGVyciksIGVycik7CiYjNDM7CQlyZXR1cm4gLWVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlidWZbbnVtcmVhZF0gPSAmIzM5O1wwJiMzOTs7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIChpbnQpbnVtcmVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQomIzQzO3sKJiM0MzsJaW50IGZkLCBzYXZlZF9lcnJubzsKJiM0MzsJc3NpemVfdCBudW13cml0dGVuOwomIzQzOwomIzQzOwlpZiAoYnVmbGVuICZsdDsgMikgewomIzQzOwkJcHJpbnRmKCYjMzQ7IyAlczogJXMgKCVkKVxuJiMzNDssIHBhdGgsIHN0cmVycm9yKEVJTlZBTCksIEVJTlZBTCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpOwomIzQzOwlpZiAoZmQgPT0gLTEpIHsKJiM0MzsJCWludCBlcnIgPSBlcnJubzsKJiM0MzsKJiM0MzsJCXByaW50ZigmIzM0OyMgJXM6ICVzICglZClcbiYjMzQ7LCBwYXRoLCBzdHJlcnJvcihlcnIpLCBlcnIpOwomIzQzOwkJcmV0dXJuIC1lcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOwomIzQzOwlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CWlmIChudW13cml0dGVuICZsdDsgMCkgewomIzQzOwkJcHJpbnRmKCYjMzQ7IyAlczogJXMgKCVkKVxuJiMzNDssIHBhdGgsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSwKJiM0MzsJCSAgICAgICBzYXZlZF9lcnJubyk7CiYjNDM7CQlyZXR1cm4gLXNhdmVkX2Vycm5vOwomIzQzOwl9CiYjNDM7CWlmIChudW13cml0dGVuICE9IChzc2l6ZV90KShidWZsZW4gLSAxKSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7IyAlcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xuJiMzNDssCiYjNDM7CQkgICAgICAgcGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdmFsOwomIzQzOwlpbnQgZXJyLCByZXQ7CiYjNDM7CWNoYXIgYnVmWzIxXTsKJiM0MzsJY2hhciAqZW5kOwomIzQzOwomIzQzOwlpZiAoIW51bSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJZXJybm8gPSAwOwomIzQzOwl2YWwgPSBzdHJ0b3VsKGJ1ZiwgJmFtcDtlbmQsIDEwKTsKJiM0MzsJaWYgKGVycm5vKSB7CiYjNDM7CQllcnIgPSBlcnJubzsKJiM0MzsJCXByaW50ZigmIzM0OyMgJXM6ICVzICglZClcbiYjMzQ7LCBwYXRoLCBzdHJlcnJvcihlcnIpLCBlcnIpOwomIzQzOwkJcmV0dXJuIC1lcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGVuZCA9PSBidWYgfHwgYnVmWzBdID09ICYjMzk7LSYjMzk7KSB7CiYjNDM7CQlwcmludGYoJiMzNDsjICVzOiBpbnZhbGlkIG51bWVyaWMgdmFsdWVcbiYjMzQ7LCBwYXRoKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICgqZW5kID09ICYjMzk7XG4mIzM5OykKJiM0MzsJCWVuZCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CWlmICgqZW5kICE9ICYjMzk7XDAmIzM5OykgewomIzQzOwkJcHJpbnRmKCYjMzQ7IyAlczogaW52YWxpZCBudW1lcmljIHZhbHVlXG4mIzM0OywgcGF0aCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwkqbnVtID0gdmFsOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzIxXTsKJiM0MzsKJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslbHUmIzM0OywgbnVtKTsKJiM0MzsJcmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSAmIzQzOyAxKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzg1NzY3OTBhMzQyNDQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oCkBAIC0wLDAgJiM0MzsxLDEyIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX18KJiM0MzsjZGVmaW5lIF9fTU1fRklMRV9VVElMU19IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkZGVmLmgmZ3Q7CiYjNDM7CiYjNDM7aW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwomIzQzO2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CiYjNDM7aW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSk7CiYjNDM7aW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7CiYjNDM7CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYwpyZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMKaW5kZXggMmVhYjIxMTBhYzZhNDYuLjhkOWU0NDcyN2VkYmY1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jCkBAIC05LDExICYjNDM7OSwxNiBAQAogI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogCi0jaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtmaWxlX3V0aWxzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBUSFBfU1lTRlMgJiMzNDsvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS8mIzM0OwogI2RlZmluZSBNQVhfU0VUVElOR1NfREVQVEggNAomIzQzOwomIzQzOyNpZm5kZWYgQVJSQVlfU0laRQomIzQzOyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpCiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5nc19zdGFja1tNQVhfU0VUVElOR1NfREVQVEhdOwogc3RhdGljIGludCBzZXR0aW5nc19pbmRleDsKIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNhdmVkX3NldHRpbmdzOwpAQCAtNjEsMTAgJiM0Mzs2Niw5IEBAIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSkKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCX0KIAotCWlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7Ci0JCXBlcnJvcihwYXRoKTsKJiM0MzsJcmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KIAogCWMgPSBzdHJjaHIoYnVmLCAmIzM5O1smIzM5Oyk7CiAJaWYgKCFjKSB7CkBAIC0xMDMsMTIgJiM0MzsxMDcsMTUgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbCkKIAkJcHJpbnRmKCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXG4mIzM0OywgX19mdW5jX18pOwogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQotCXdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSAmIzQzOyAxKTsKJiM0MzsJcmV0ID0gd3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICYjNDM7IDEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKIH0KIAogdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSkKIHsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwl1bnNpZ25lZCBsb25nIG51bTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFRIUF9TWVNGUyAmIzM0OyVzJiMzNDssIG5hbWUpOwpAQCAtMTE2LDcgJiM0MzsxMjMsMTEgQEAgdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSkKIAkJcHJpbnRmKCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXG4mIzM0OywgX19mdW5jX18pOwogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQotCXJldHVybiByZWFkX251bShwYXRoKTsKJiM0MzsJcmV0ID0gcmVhZF9udW0ocGF0aCwgJmFtcDtudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG51bTsKIH0KIAogdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKQpAQCAtMTI5LDcgJiM0MzsxNDAsOSBAQCB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pCiAJCXByaW50ZigmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xuJiMzNDssIF9fZnVuY19fKTsKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCX0KLQl3cml0ZV9udW0ocGF0aCwgbnVtKTsKJiM0MzsJcmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwogfQogCiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKQpAQCAtMTU3LDggJiM0MzsxNzAsMTMgQEAgdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncykKIAkJLm1heF9wdGVzX3NoYXJlZCA9IHRocF9yZWFkX251bSgmIzM0O2todWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkJiMzNDspLAogCQkucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bSgmIzM0O2todWdlcGFnZWQvcGFnZXNfdG9fc2NhbiYjMzQ7KSwKIAl9OwotCWlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKQotCQlzZXR0aW5ncy0mZ3Q7cmVhZF9haGVhZF9rYiA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgpOwomIzQzOwlpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkgewomIzQzOwkJaW50IHJldCA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsCiYjNDM7CQkJCSAgICZhbXA7c2V0dGluZ3MtJmd0O3JlYWRfYWhlYWRfa2IpOwomIzQzOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgTlJfT1JERVJTOyBpJiM0MzsmIzQzOykgewogCQlpZiAoISgoMSAmbHQ7Jmx0OyBpKSAmYW1wOyBvcmRlcnMpKSB7CkBAIC0yMDgsOCAmIzQzOzIyNiwxMyBAQCB2b2lkIHRocF93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncykKIAl0aHBfd3JpdGVfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWQmIzM0Oywga2h1Z2VwYWdlZC0mZ3Q7bWF4X3B0ZXNfc2hhcmVkKTsKIAl0aHBfd3JpdGVfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9wYWdlc190b19zY2FuJiMzNDssIGtodWdlcGFnZWQtJmd0O3BhZ2VzX3RvX3NjYW4pOwogCi0JaWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pCi0JCXdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCBzZXR0aW5ncy0mZ3Q7cmVhZF9haGVhZF9rYik7CiYjNDM7CWlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7CiYjNDM7CQlpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsCiYjNDM7CQkJCSAgICBzZXR0aW5ncy0mZ3Q7cmVhZF9haGVhZF9rYik7CiYjNDM7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBOUl9PUkRFUlM7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICghKCgxICZsdDsmbHQ7IGkpICZhbXA7IG9yZGVycykpCkBAIC0zMDYsOCAmIzQzOzMyOSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9zdXBwb3J0ZWRfb3JkZXJzKGJvb2wgaXNfc2htZW0pCiAJCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJCX0KIAomIzQzOwkJaWYgKGFjY2VzcyhwYXRoLCBGX09LKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJcmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCQlpZiAocmV0KQomIzQzOwkJaWYgKHJldCAmZ3Q7IDApCiAJCQlvcmRlcnMgfD0gMVVMICZsdDsmbHQ7IGk7CiAJfQogCkBAIC0zODIsOCAmIzQzOzQwOCw3IEBAIGludCBkZXRlY3RfaHVnZXRsYl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwgaW50IG1heCkKIAkJaWYgKHNzY2FuZihlbnRyeS0mZ3Q7ZF9uYW1lLCAmIzM0O2h1Z2VwYWdlcy0lenVrQiYjMzQ7LCAmYW1wO2tiKSAhPSAxKQogCQkJY29udGludWU7CiAJCXNpemVzW2NvdW50JiM0MzsmIzQzO10gPSBrYiAqIDEwMjQ7Ci0JCWtzZnRfcHJpbnRfbXNnKCYjMzQ7W0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXG4mIzM0OywKLQkJCSAgICAgICBrYik7CiYjNDM7CQlwcmludGYoJiMzNDsjIFtJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxuJiMzNDssIGtiKTsKIAl9CiAJY2xvc2VkaXIoZGlyKTsKIAlyZXR1cm4gY291bnQ7CkBAIC00MjUsMjggJiM0Mzs0NTAsNDMgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl9zeXNmc19wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsJdW5zaWduZWQgbG9uZyBucjsKJiM0MzsJaW50IHJldDsKIAogCWh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwogCi0JcmV0dXJuIHJlYWRfbnVtKHBhdGgpOwomIzQzOwlyZXQgPSByZWFkX251bShwYXRoLCAmYW1wO25yKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CiYjNDM7CXJldHVybiBucjsKIH0KIAogdm9pZCBodWdldGxiX3NldF9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsJaW50IHJldDsKIAogCWh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwogCi0Jd3JpdGVfbnVtKHBhdGgsIG5yKTsKJiM0MzsJcmV0ID0gd3JpdGVfbnVtKHBhdGgsIG5yKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yOwomIzQzOwlpbnQgcmV0OwogCiAJaHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgJiMzNDtmcmVlX2h1Z2VwYWdlcyYjMzQ7KTsKIAotCXJldHVybiByZWFkX251bShwYXRoKTsKJiM0MzsJcmV0ID0gcmVhZF9udW0ocGF0aCwgJmFtcDtucik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwomIzQzOwlyZXR1cm4gbnI7CiB9CiAKIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpCkBAIC01MDIsNyAmIzQzOzU0Miw4IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHNpemVzW10sCiAJCXJldHVybiAwOwogCiAJaWYgKG5yX2VuYWJsZWQgJmd0OyBtYXgpIHsKLQkJa3NmdF9wcmludF9tc2coJiMzNDtkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXG4mIzM0OywgbnJfZW5hYmxlZCwgbWF4KTsKJiM0MzsJCXByaW50ZigmIzM0OyMgZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxuJiMzNDssCiYjNDM7CQkgICAgICAgbnJfZW5hYmxlZCwgbWF4KTsKIAkJbnJfZW5hYmxlZCA9IG1heDsKIAl9CiAKQEAgLTU3NCw4ICYjNDM7NjE1LDEwIEBAIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0KHZvaWQpCiAKIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3Nfc2lnaGFuZGxlcihpbnQgc2lnKQogewomIzQzOwkodm9pZClzaWc7CiYjNDM7CiAJLyogZXhpdCgpIHdpbGwgaW52b2tlIHRoZSBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCBoYW5kbGVyLiAqLwotCWV4aXQoS1NGVF9GQUlMKTsKJiM0MzsJZXhpdChFWElUX0ZBSUxVUkUpOwogfQogCiB2b2lkIGh1Z2VwYWdlX3NhdmVfc2V0dGluZ3MoYm9vbCB0aHAsIGJvb2wgaHVnZXRsYikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmggYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaApyZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmgKZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlCmluZGV4IDkyMjg3OWY5M2ZjODQ5Li4xNTRkNzQwYmUwMmU4MiAxMDA2NDQKLS0tIGEvdG9vbHMvbW0vLmdpdGlnbm9yZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS8uZ2l0aWdub3JlCkBAIC0yLDMgJiM0MzsyLDUgQEAKIHNsYWJpbmZvCiBwYWdlLXR5cGVzCiBwYWdlX293bmVyX3NvcnQKJiM0Mzt0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzO2d1cF9iZW5jaApkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZQppbmRleCBmNTcyNWI1YzIzYWEyNi4uZDgyY2M4YzQzZWUwMmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL01ha2VmaWxlCkBAIC0zLDEzICYjNDM7MywxNCBAQAogIwogaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGUKIAotQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzO0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoCiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHMKIAogTElCX0RJUiA9IC4uL2xpYi9hcGkKIExJQlMgPSAkKExJQl9ESVIpL2xpYmFwaS5hCiYjNDM7R1VQX0JFTkNIX09CSlMgPSBndXBfYmVuY2guYyAuLi9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyAuLi9saWIvbW0vZmlsZV91dGlscy5jCiAKLUNGTEFHUyAmIzQzOz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWQKJiM0MztDRkxBR1MgJiM0Mzs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1JLi4vLi4gLXB0aHJlYWQKIExERkxBR1MgJiM0Mzs9ICQoTElCUykgLXB0aHJlYWQKIAogYWxsOiAkKEJVSUxEX1RBUkdFVFMpCkBAIC0yMiw4ICYjNDM7MjMsMTEgQEAgJChMSUJTKToKICU6ICUuYwogCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkJmx0OyAkKExERkxBR1MpCiAKJiM0MztndXBfYmVuY2g6ICQoR1VQX0JFTkNIX09CSlMpICQoTElCUykKJiM0MzsJJChDQykgJChDRkxBR1MpIC1vICRAICQoR1VQX0JFTkNIX09CSlMpICQoTERGTEFHUykKJiM0MzsKIGNsZWFuOgotCSQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7CSQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaAogCW1ha2UgLUMgJChMSUJfRElSKSBjbGVhbgogCiBzYmluZGlyID89IC91c3Ivc2JpbgpkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vZ3VwX2JlbmNoLmMgYi90b29scy9tbS9ndXBfYmVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNDk3YjhmM2Y2YWM0YjQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9ndXBfYmVuY2guYwpAQCAtMCwwICYjNDM7MSw0ODIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogTWljcm9iZW5jaG1hcmsgZm9yIGdldF91c2VyX3BhZ2VzIChHVVApIGtlcm5lbCBpbnRlcmZhY2VzLgomIzQzOyAqCiYjNDM7ICogRXhlcmNpc2VzIEdVUF9GQVNUX0JFTkNITUFSSywgUElOX0ZBU1RfQkVOQ0hNQVJLLCBhbmQKJiM0MzsgKiBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLIHZpYSB0aGUgQ09ORklHX0dVUF9URVNUIGRlYnVnZnMgaW50ZXJmYWNlLgomIzQzOyAqCiYjNDM7ICogRXhhbXBsZSB1c2U6CiYjNDM7ICogICAjIFJ1biB0aGUgZnVsbCBtYXRyaXggKGFsbCBjb21tYW5kcywgYWNjZXNzIG1vZGVzLCBwYWdlIGNvdW50cyk6CiYjNDM7ICogICAuL2d1cF9iZW5jaAomIzQzOyAqCiYjNDM7ICogICAjIFNpbmdsZSBydW46IHBpbl91c2VyX3BhZ2VzX2Zhc3QsIDUxMiBwYWdlcywgd3JpdGUgYWNjZXNzLCBodWdldGxiOgomIzQzOyAqICAgLi9ndXBfYmVuY2ggLWEgLW4gNTEyIC13IC1ICiYjNDM7ICoKJiM0MzsgKiBSZXF1aXJlcyBDT05GSUdfR1VQX1RFU1Q9eSBhbmQgZGVidWdmcyBtb3VudGVkIGF0IC9zeXMva2VybmVsL2RlYnVnLgomIzQzOyAqIE11c3QgYmUgcnVuIGFzIHJvb3QuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjQKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtkaXJlbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYXRvbWljLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2d1cF90ZXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBNQiAoMVVMICZsdDsmbHQ7IDIwKQomIzQzOwomIzQzOyNpZm5kZWYgQVJSQVlfU0laRQomIzQzOyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7LyogSnVzdCB0aGUgZmxhZ3Mgd2UgbmVlZCwgY29waWVkIGZyb20gdGhlIGtlcm5lbCBpbnRlcm5hbHMuICovCiYjNDM7I2RlZmluZSBGT0xMX1dSSVRFCTB4MDEJLyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovCiYjNDM7CiYjNDM7I2RlZmluZSBHVVBfVEVTVF9GSUxFICYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QmIzM0OwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgcHNpemUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0YXRpYyB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7CiYjNDM7CiYjNDM7CWlmICghX19wYWdlX3NpemUpCiYjNDM7CQlfX3BhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKJiM0MzsJcmV0dXJuIF9fcGFnZV9zaXplOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBjbWQ7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmJlbmNoX2xhYmVsOwomIzQzO3N0YXRpYyBpbnQgZ3VwX2ZkLCByZXBlYXRzID0gMTsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7CiYjNDM7c3RhdGljIGF0b21pY19pbnQgYmVuY2hfZXJyb3I7CiYjNDM7LyogU2VyaWFsaXplIHByaW50cyAqLwomIzQzO3N0YXRpYyBwdGhyZWFkX211dGV4X3QgcHJpbnRfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGJlbmNoX2NtZHNbXSA9IHsKJiM0MzsJR1VQX0ZBU1RfQkVOQ0hNQVJLLAomIzQzOwlQSU5fRkFTVF9CRU5DSE1BUkssCiYjNDM7CVBJTl9MT05HVEVSTV9CRU5DSE1BUkssCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgaW50IGJlbmNoX3RocF9tb2Rlc1tdID0geyAxLCAwIH07CS8qIG9uLCBvZmYgKi8KJiM0MztzdGF0aWMgY29uc3QgaW50IGJlbmNoX25yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmNtZF90b19zdHIodW5zaWduZWQgbG9uZyBjbWQpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGNtZCkgewomIzQzOwljYXNlIEdVUF9GQVNUX0JFTkNITUFSSzoKJiM0MzsJCXJldHVybiAmIzM0O0dVUF9GQVNUX0JFTkNITUFSSyYjMzQ7OwomIzQzOwljYXNlIFBJTl9GQVNUX0JFTkNITUFSSzoKJiM0MzsJCXJldHVybiAmIzM0O1BJTl9GQVNUX0JFTkNITUFSSyYjMzQ7OwomIzQzOwljYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6CiYjNDM7CQlyZXR1cm4gJiMzNDtQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLJiMzNDs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuICYjMzQ7VW5rbm93biBjb21tYW5kJiMzNDs7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIHBhcnNlX2xvbmdfYXJnX2Jhc2UoY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgYmFzZSkKJiM0Mzt7CiYjNDM7CWNoYXIgKmVuZDsKJiM0MzsJbG9uZyB2YWw7CiYjNDM7CiYjNDM7CWVycm5vID0gMDsKJiM0MzsJdmFsID0gc3RydG9sKGFyZywgJmFtcDtlbmQsIGJhc2UpOwomIzQzOwlpZiAoZXJybm8gfHwgZW5kID09IGFyZyB8fCAqZW5kICE9ICYjMzk7XDAmIzM5OykgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7SW52YWxpZCAlcyAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBuYW1lLCBhcmcpOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gdmFsOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBwYXJzZV9sb25nX2FyZyhjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gcGFyc2VfbG9uZ19hcmdfYmFzZShhcmcsIG5hbWUsIDEwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcoY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJbG9uZyB2YWwgPSBwYXJzZV9sb25nX2FyZyhhcmcsIG5hbWUpOwomIzQzOwomIzQzOwlpZiAodmFsICZsdDsgMSkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7SW52YWxpZCAlcyAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBuYW1lLCBhcmcpOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdmFsOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgYmVuY2hfcnVuIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBjbWQ7CiYjNDM7CWludCB0aHA7CQkvKiAtMTogZGVmYXVsdCwgMDogb2ZmLCAxOiBvbiAqLwomIzQzOwlib29sIGh1Z2V0bGI7CiYjNDM7CWJvb2wgd3JpdGU7CQkvKiB3aGV0aGVyIHRvIHNldCBGT0xMX1dSSVRFICovCiYjNDM7CWJvb2wgc2hhcmVkOwomIzQzOwlpbnQgbnJfcGFnZXM7CQkvKiAtMSBtZWFucyBhbGwgcGFnZXMgKHNpemUgLyBwc2l6ZSgpKSAqLwomIzQzOwl1bnNpZ25lZCBsb25nIHNpemU7CiYjNDM7CWNoYXIgKmZpbGU7CiYjNDM7CWludCBudGhyZWFkczsKJiM0MzsJdW5zaWduZWQgaW50IGd1cF9mbGFnczsKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7CiYjNDM7CWludCBpLCBzdGF0dXM7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyByZXBlYXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZ3VwLnNpemUgPSBzaXplOwomIzQzOwkJc3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsICZhbXA7Z3VwKTsKJiM0MzsJCWlmIChzdGF0dXMpIHsKJiM0MzsJCQliZW5jaF9lcnJvciA9IDE7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwdGhyZWFkX211dGV4X2xvY2soJmFtcDtwcmludF9tdXRleCk7CiYjNDM7CQlwcmludGYoJiMzNDslcyB0aW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1cyYjMzQ7LAomIzQzOwkJICAgICAgIGJlbmNoX2xhYmVsLCBndXAuZ2V0X2RlbHRhX3VzZWMsCiYjNDM7CQkgICAgICAgZ3VwLnB1dF9kZWx0YV91c2VjKTsKJiM0MzsJCWlmIChndXAuc2l6ZSAhPSBzaXplKQomIzQzOwkJCXByaW50ZigmIzM0OywgdHJ1bmNhdGVkIChzaXplOiAlbGxkKSYjMzQ7LCBndXAuc2l6ZSk7CiYjNDM7CQlwcmludGYoJiMzNDtcbiYjMzQ7KTsKJiM0MzsJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhbXA7cHJpbnRfbXV0ZXgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ1bl9iZW5jaChzdHJ1Y3QgYmVuY2hfcnVuICpydW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07CiYjNDM7CWludCB6ZXJvX2ZkLCBpLCByZXQsIHN0YXJ0ZWRfdGhyZWFkcyA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXNfcGVyX2NhbGw7CiYjNDM7CWludCBmbGFncyA9IE1BUF9QUklWQVRFOwomIzQzOwlwdGhyZWFkX3QgKnRpZDsKJiM0MzsJY2hhciBsYWJlbFsxMjhdOwomIzQzOwljaGFyICpwOwomIzQzOwlib29sIHJlc3RvcmVfaHVnZXRsYiA9IGZhbHNlOwomIzQzOwomIzQzOwkvKiBTZXQgZ2xvYmFscyBjb25zdW1lZCBieSBndXBfdGhyZWFkICovCiYjNDM7CWNtZCA9IHJ1bi0mZ3Q7Y21kOwomIzQzOwlzaXplID0gcnVuLSZndDtzaXplOwomIzQzOwliZW5jaF9lcnJvciA9IDA7CiYjNDM7CiYjNDM7CWlmIChydW4tJmd0O2h1Z2V0bGIpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTsKJiM0MzsKJiM0MzsJCWlmICghaHBfc2l6ZSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0NvdWxkIG5vdCBkZXRlcm1pbmUgaHVnZSBwYWdlIHNpemVcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gMTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChzaXplICZndDsgVUxPTkdfTUFYIC0gKGhwX3NpemUgLSAxKSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0h1Z2VUTEIgbWFwcGluZyBzaXplIGlzIHRvbyBsYXJnZVxuJiMzNDspOwomIzQzOwkJCXJldHVybiAxOwomIzQzOwkJfQomIzQzOwomIzQzOwkJc2l6ZSA9IChzaXplICYjNDM7IGhwX3NpemUgLSAxKSAmYW1wOyB+KGhwX3NpemUgLSAxKTsKJiM0MzsJCWlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xuJiMzNDspOwomIzQzOwkJCWh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpOwomIzQzOwkJCXJldHVybiAxOwomIzQzOwkJfQomIzQzOwkJcmVzdG9yZV9odWdldGxiID0gdHJ1ZTsKJiM0MzsJCWZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChydW4tJmd0O3NoYXJlZCkgewomIzQzOwkJZmxhZ3MgJmFtcDs9IH5NQVBfUFJJVkFURTsKJiM0MzsJCWZsYWdzIHw9IE1BUF9TSEFSRUQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbnJfcGFnZXNfcGVyX2NhbGwgPSBydW4tJmd0O25yX3BhZ2VzICZsdDsgMCA/IHNpemUgLyBwc2l6ZSgpIDoKJiM0MzsJCSh1bnNpZ25lZCBsb25nKXJ1bi0mZ3Q7bnJfcGFnZXM7CiYjNDM7CiYjNDM7CWlmIChucl9wYWdlc19wZXJfY2FsbCAmZ3Q7IFVJTlRfTUFYKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtQYWdlIGNvdW50IGlzIHRvbyBsYXJnZVxuJiMzNDspOwomIzQzOwkJaWYgKHJlc3RvcmVfaHVnZXRsYikKJiM0MzsJCQlodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CWd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX3Blcl9jYWxsOwomIzQzOwomIzQzOwlndXAuZ3VwX2ZsYWdzID0gcnVuLSZndDtndXBfZmxhZ3M7CiYjNDM7CWlmIChydW4tJmd0O3dyaXRlKQomIzQzOwkJZ3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFOwomIzQzOwomIzQzOwlzbnByaW50ZihsYWJlbCwgc2l6ZW9mKGxhYmVsKSwgJiMzNDslcyAobnJfcGFnZXM9JS00dSAlcyAlcyAlcyAlcykmIzM0OywKJiM0MzsJCSBjbWRfdG9fc3RyKHJ1bi0mZ3Q7Y21kKSwKJiM0MzsJCSBndXAubnJfcGFnZXNfcGVyX2NhbGwsCiYjNDM7CQkgcnVuLSZndDt3cml0ZSAgPyAmIzM0O3dyaXRlJiMzNDsgICA6ICYjMzQ7cmVhZCYjMzQ7LAomIzQzOwkJIHJ1bi0mZ3Q7c2hhcmVkID8gJiMzNDtzaGFyZWQmIzM0OyAgOiAmIzM0O3ByaXZhdGUmIzM0OywKJiM0MzsJCSBydW4tJmd0O2h1Z2V0bGIgPyAmIzM0O2h1Z2V0bGI9b24mIzM0OyA6ICYjMzQ7aHVnZXRsYj1vZmYmIzM0OywKJiM0MzsJCSBydW4tJmd0O2h1Z2V0bGIgPyAmIzM0O3RocD1vZmYmIzM0OyA6CiYjNDM7CQkgKHJ1bi0mZ3Q7dGhwID09IDEgPyAmIzM0O3RocD1vbiYjMzQ7IDoKJiM0MzsJCSAocnVuLSZndDt0aHAgPT0gMCA/ICYjMzQ7dGhwPW9mZiYjMzQ7IDogJiMzNDt0aHA9ZGVmYXVsdCYjMzQ7KSkpOwomIzQzOwliZW5jaF9sYWJlbCA9IGxhYmVsOwomIzQzOwomIzQzOwl6ZXJvX2ZkID0gb3BlbihydW4tJmd0O2ZpbGUsIE9fUkRXUik7CiYjNDM7CWlmICh6ZXJvX2ZkICZsdDsgMCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7VW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgcnVuLSZndDtmaWxlLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwkJaWYgKHJlc3RvcmVfaHVnZXRsYikKJiM0MzsJCQlodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCB6ZXJvX2ZkLCAwKTsKJiM0MzsJY2xvc2UoemVyb19mZCk7CiYjNDM7CWlmIChwID09IE1BUF9GQUlMRUQpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O21tYXA6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJCWlmIChyZXN0b3JlX2h1Z2V0bGIpCiYjNDM7CQkJaHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwlndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7CiYjNDM7CiYjNDM7CWlmIChydW4tJmd0O3RocCA9PSAxKQomIzQzOwkJbWFkdmlzZShwLCBzaXplLCBNQURWX0hVR0VQQUdFKTsKJiM0MzsJZWxzZSBpZiAocnVuLSZndDt0aHAgPT0gMCkKJiM0MzsJCW1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKJiM0MzsKJiM0MzsJLyogRmF1bHQgdGhlbSBpbiBoZXJlLCBmcm9tIHVzZXIgc3BhY2UuICovCiYjNDM7CWZvciAoOyAodW5zaWduZWQgbG9uZylwICZsdDsgZ3VwLmFkZHIgJiM0Mzsgc2l6ZTsgcCAmIzQzOz0gcHNpemUoKSkKJiM0MzsJCXBbMF0gPSAwOwomIzQzOwomIzQzOwl0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBydW4tJmd0O250aHJlYWRzKTsKJiM0MzsJaWYgKCF0aWQpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSAlZCB0aHJlYWRzOiAlc1xuJiMzNDssCiYjNDM7CQkJcnVuLSZndDtudGhyZWFkcywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJCW11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTsKJiM0MzsJCWlmIChyZXN0b3JlX2h1Z2V0bGIpCiYjNDM7CQkJaHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcnVuLSZndDtudGhyZWFkczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJldCA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCAmYW1wO2d1cCk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7cHRocmVhZF9jcmVhdGUgZmFpbGVkOiAlc1xuJiMzNDssIHN0cmVycm9yKHJldCkpOwomIzQzOwkJCWJlbmNoX2Vycm9yID0gMTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCXN0YXJ0ZWRfdGhyZWFkcyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHN0YXJ0ZWRfdGhyZWFkczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O3B0aHJlYWRfam9pbiBmYWlsZWQ6ICVzXG4mIzM0Oywgc3RyZXJyb3IocmV0KSk7CiYjNDM7CQkJYmVuY2hfZXJyb3IgPSAxOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWZyZWUodGlkKTsKJiM0MzsJbXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpOwomIzQzOwlpZiAocmVzdG9yZV9odWdldGxiKQomIzQzOwkJaHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7CiYjNDM7CiYjNDM7CXJldHVybiBiZW5jaF9lcnJvciA/IDEgOiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ1bl9tYXRyaXgodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBjLCB0LCB3LCBzLCBuOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJZm9yIChjID0gMDsgYyAmbHQ7IEFSUkFZX1NJWkUoYmVuY2hfY21kcyk7IGMmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKHcgPSAwOyB3ICZsdDs9IDE7IHcmIzQzOyYjNDM7KSB7CiYjNDM7CQkJZm9yIChzID0gMDsgcyAmbHQ7PSAxOyBzJiM0MzsmIzQzOykgewomIzQzOwkJCQlmb3IgKHQgPSAwOyB0ICZsdDsgQVJSQVlfU0laRShiZW5jaF90aHBfbW9kZXMpOyB0JiM0MzsmIzQzOykgewomIzQzOwkJCQkJZm9yIChuID0gMDsgbiAmbHQ7IEFSUkFZX1NJWkUoYmVuY2hfbnJfcGFnZXNfbGlzdCk7IG4mIzQzOyYjNDM7KSB7CiYjNDM7CQkJCQkJc3RydWN0IGJlbmNoX3J1biBydW4gPSB7CiYjNDM7CQkJCQkJCS5jbWQJICA9IGJlbmNoX2NtZHNbY10sCiYjNDM7CQkJCQkJCS50aHAJICA9IGJlbmNoX3RocF9tb2Rlc1t0XSwKJiM0MzsJCQkJCQkJLmh1Z2V0bGIgID0gZmFsc2UsCiYjNDM7CQkJCQkJCS53cml0ZQkgID0gdywKJiM0MzsJCQkJCQkJLnNoYXJlZAkgID0gcywKJiM0MzsJCQkJCQkJLm5yX3BhZ2VzID0gYmVuY2hfbnJfcGFnZXNfbGlzdFtuXSwKJiM0MzsJCQkJCQkJLnNpemUJICA9IDEyOCAqIE1CLAomIzQzOwkJCQkJCQkuZmlsZQkgID0gJiMzNDsvZGV2L3plcm8mIzM0OywKJiM0MzsJCQkJCQkJLm50aHJlYWRzID0gMSwKJiM0MzsJCQkJCQl9OwomIzQzOwkJCQkJCXJldCB8PSBydW5fYmVuY2goJmFtcDtydW4pOwomIzQzOwkJCQkJfQomIzQzOwkJCQl9CiYjNDM7CQkJCS8qIGh1Z2V0bGI6IDI1Nk0gdG8gbWF0Y2ggcnVuX2d1cF9tYXRyaXgoKSBpbiBydW5fdm10ZXN0cy5zaCAqLwomIzQzOwkJCQlmb3IgKG4gPSAwOyBuICZsdDsgQVJSQVlfU0laRShiZW5jaF9ucl9wYWdlc19saXN0KTsgbiYjNDM7JiM0MzspIHsKJiM0MzsJCQkJCXN0cnVjdCBiZW5jaF9ydW4gcnVuID0gewomIzQzOwkJCQkJCS5jbWQJICA9IGJlbmNoX2NtZHNbY10sCiYjNDM7CQkJCQkJLnRocAkgID0gLTEsCiYjNDM7CQkJCQkJLmh1Z2V0bGIgID0gdHJ1ZSwKJiM0MzsJCQkJCQkud3JpdGUJICA9IHcsCiYjNDM7CQkJCQkJLnNoYXJlZAkgID0gcywKJiM0MzsJCQkJCQkubnJfcGFnZXMgPSBiZW5jaF9ucl9wYWdlc19saXN0W25dLAomIzQzOwkJCQkJCS5zaXplCSAgPSAyNTYgKiBNQiwKJiM0MzsJCQkJCQkuZmlsZQkgID0gJiMzNDsvZGV2L3plcm8mIzM0OywKJiM0MzsJCQkJCQkubnRocmVhZHMgPSAxLAomIzQzOwkJCQkJfTsKJiM0MzsJCQkJCXJldCB8PSBydW5fYmVuY2goJmFtcDtydW4pOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiZW5jaF9ydW4gcnVuID0gewomIzQzOwkJLmNtZAkgID0gR1VQX0ZBU1RfQkVOQ0hNQVJLLAomIzQzOwkJLnRocAkgID0gLTEsCiYjNDM7CQkuaHVnZXRsYiAgPSBmYWxzZSwKJiM0MzsJCS53cml0ZQkgID0gdHJ1ZSwKJiM0MzsJCS5zaGFyZWQJICA9IGZhbHNlLAomIzQzOwkJLm5yX3BhZ2VzID0gMSwKJiM0MzsJCS5zaXplCSAgPSAxMjggKiBNQiwKJiM0MzsJCS5maWxlCSAgPSAmIzM0Oy9kZXYvemVybyYjMzQ7LAomIzQzOwkJLm50aHJlYWRzID0gMSwKJiM0MzsJfTsKJiM0MzsJaW50IG9wdCwgcmVzdWx0OwomIzQzOwomIzQzOwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O206cjpuOkY6Zjphajp0VEx1d1dTSCYjMzQ7KSkgIT0gLTEpIHsKJiM0MzsJCXN3aXRjaCAob3B0KSB7CiYjNDM7CQkvKiBDb21tYW5kIHNlbGVjdGlvbiAqLwomIzQzOwkJY2FzZSAmIzM5O3UmIzM5OzoKJiM0MzsJCQlydW4uY21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O2EmIzM5OzoKJiM0MzsJCQlydW4uY21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O0wmIzM5OzoKJiM0MzsJCQlydW4uY21kID0gUElOX0xPTkdURVJNX0JFTkNITUFSSzsKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIE1lbW9yeSB0eXBlICovCiYjNDM7CQljYXNlICYjMzk7SCYjMzk7OgomIzQzOwkJCXJ1bi5odWdldGxiID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTt0JiMzOTs6CiYjNDM7CQkJcnVuLnRocCA9IDE7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7VCYjMzk7OgomIzQzOwkJCXJ1bi50aHAgPSAwOwomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJLyogQWNjZXNzIG1vZGUgKi8KJiM0MzsJCWNhc2UgJiMzOTt3JiMzOTs6CiYjNDM7CQkJcnVuLndyaXRlID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtXJiMzOTs6CiYjNDM7CQkJcnVuLndyaXRlID0gZmFsc2U7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7UyYjMzk7OgomIzQzOwkJCXJ1bi5zaGFyZWQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJLyogTWFwcGluZyAqLwomIzQzOwkJY2FzZSAmIzM5O2YmIzM5OzoKJiM0MzsJCQlydW4uZmlsZSA9IG9wdGFyZzsKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIFNpemluZyBhbmQgaXRlcmF0aW9uICovCiYjNDM7CQljYXNlICYjMzk7bSYjMzk7OgomIzQzOwkJCXJ1bi5zaXplID0gcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcob3B0YXJnLCAmIzM0O3NpemUmIzM0Oyk7CiYjNDM7CQkJaWYgKHJ1bi5zaXplICZndDsgVUxPTkdfTUFYIC8gTUIpIHsKJiM0MzsJCQkJZnByaW50ZihzdGRlcnIsICYjMzQ7SW52YWxpZCBzaXplICYjMzk7JXMmIzM5O1xuJiMzNDssIG9wdGFyZyk7CiYjNDM7CQkJCWV4aXQoMSk7CiYjNDM7CQkJfQomIzQzOwkJCXJ1bi5zaXplICo9IE1COwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O24mIzM5OzogewomIzQzOwkJCWxvbmcgdmFsOwomIzQzOwomIzQzOwkJCXZhbCA9IHBhcnNlX2xvbmdfYXJnKG9wdGFyZywgJiMzNDtwYWdlIGNvdW50JiMzNDspOwomIzQzOwkJCWlmICh2YWwgIT0gLTEgJmFtcDsmYW1wOyAodmFsICZsdDsgMSB8fCB2YWwgJmd0OyBJTlRfTUFYKSkgewomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtJbnZhbGlkIHBhZ2UgY291bnQgJiMzOTslcyYjMzk7XG4mIzM0Oywgb3B0YXJnKTsKJiM0MzsJCQkJZXhpdCgxKTsKJiM0MzsJCQl9CiYjNDM7CQkJcnVuLm5yX3BhZ2VzID0gdmFsOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJY2FzZSAmIzM5O3ImIzM5OzogewomIzQzOwkJCWxvbmcgdmFsOwomIzQzOwomIzQzOwkJCXZhbCA9IHBhcnNlX3Bvc2l0aXZlX2xvbmdfYXJnKG9wdGFyZywgJiMzNDtyZXBlYXQgY291bnQmIzM0Oyk7CiYjNDM7CQkJaWYgKHZhbCAmZ3Q7IElOVF9NQVgpIHsKJiM0MzsJCQkJZnByaW50ZihzdGRlcnIsICYjMzQ7SW52YWxpZCByZXBlYXQgY291bnQgJiMzOTslcyYjMzk7XG4mIzM0Oywgb3B0YXJnKTsKJiM0MzsJCQkJZXhpdCgxKTsKJiM0MzsJCQl9CiYjNDM7CQkJcmVwZWF0cyA9IHZhbDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCWNhc2UgJiMzOTtqJiMzOTs6IHsKJiM0MzsJCQlsb25nIHZhbDsKJiM0MzsKJiM0MzsJCQl2YWwgPSBwYXJzZV9wb3NpdGl2ZV9sb25nX2FyZyhvcHRhcmcsICYjMzQ7dGhyZWFkIGNvdW50JiMzNDspOwomIzQzOwkJCWlmICh2YWwgJmd0OyBJTlRfTUFYIHx8CiYjNDM7CQkJICAgIChzaXplX3QpdmFsICZndDsgU0laRV9NQVggLyBzaXplb2YocHRocmVhZF90KSkgewomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtJbnZhbGlkIHRocmVhZCBjb3VudCAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBvcHRhcmcpOwomIzQzOwkJCQlleGl0KDEpOwomIzQzOwkJCX0KJiM0MzsJCQlydW4ubnRocmVhZHMgPSB2YWw7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBBZHZhbmNlZCAqLwomIzQzOwkJY2FzZSAmIzM5O0YmIzM5OzogewomIzQzOwkJCWxvbmcgdmFsOwomIzQzOwomIzQzOwkJCXZhbCA9IHBhcnNlX2xvbmdfYXJnX2Jhc2Uob3B0YXJnLCAmIzM0O0dVUCBmbGFncyYjMzQ7LCAwKTsKJiM0MzsJCQlpZiAodmFsICZsdDsgMCB8fCB2YWwgJmd0OyBVSU5UX01BWCkgewomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtJbnZhbGlkIEdVUCBmbGFncyAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBvcHRhcmcpOwomIzQzOwkJCQlleGl0KDEpOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlydW4uZ3VwX2ZsYWdzID0gdmFsOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXcm9uZyBhcmd1bWVudFxuJiMzNDspOwomIzQzOwkJCWV4aXQoMSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG9wdGluZCAhPSBhcmdjKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtVbmV4cGVjdGVkIGFyZ3VtZW50ICYjMzk7JXMmIzM5O1xuJiMzNDssIGFyZ3Zbb3B0aW5kXSk7CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTsKJiM0MzsJaWYgKGd1cF9mZCA9PSAtMSkgewomIzQzOwkJaWYgKGVycm5vID09IEVBQ0NFUykgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1BsZWFzZSBydW4gYXMgcm9vdFxuJiMzNDspOwomIzQzOwkJfSBlbHNlIGlmIChlcnJubyA9PSBFTk9FTlQpIHsKJiM0MzsJCQlESVIgKmRlYnVnZnMgPSBvcGVuZGlyKCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcmIzM0Oyk7CiYjNDM7CiYjNDM7CQkJaWYgKCFkZWJ1Z2ZzKSB7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O01vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcbiYjMzQ7KTsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQljbG9zZWRpcihkZWJ1Z2ZzKTsKJiM0MzsJCQkJZnByaW50ZihzdGRlcnIsICYjMzQ7Q2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcbiYjMzQ7KTsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0ZhaWxlZCB0byBvcGVuICVzOiAlc1xuJiMzNDssIEdVUF9URVNUX0ZJTEUsCiYjNDM7CQkJCXN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQl9CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlc3VsdCA9IChhcmdjID09IDEpID8gcnVuX21hdHJpeCgpIDogcnVuX2JlbmNoKCZhbXA7cnVuKTsKJiM0MzsJY2xvc2UoZ3VwX2ZkKTsKJiM0MzsJcmV0dXJuIHJlc3VsdDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCmluZGV4IGU2ZGY5NjhmMDk3MWM4Li5lNzdjNGNjNDFiNDcwMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKQEAgLTM3LDcgJiM0MzszNyw4IEBAIGVuZGlmCiAjIExETElCUy4KIE1BS0VGTEFHUyAmIzQzOz0gLS1uby1idWlsdGluLXJ1bGVzCiAKLUNGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpCiYjNDM7Q0ZMQUdTID0gLVdhbGwgLU8yIC1JICQodG9wX3NyY2RpcikgLUkgJCh0b3Bfc3JjZGlyKS90b29scy9saWIKJiM0MztDRkxBR1MgJiM0Mzs9ICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpCiBDRkxBR1MgJiM0Mzs9IC1XdW5yZWFjaGFibGUtY29kZQogTERMSUJTID0gLWxydCAtbHB0aHJlYWQgLWxtCiAKQEAgLTE4Nyw4ICYjNDM7MTg4LDEwIEBAIFRFU1RfRklMRVMgJiM0Mzs9IHdyaXRlX2h1Z2V0bGJfbWVtb3J5LnNoCiAKIGluY2x1ZGUgLi4vbGliLm1rCiAKLSQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuYwotJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jCiYjNDM7JChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFwKJiM0MzsJCSAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYwomIzQzOyQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcCiYjNDM7CQkgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMKIAogJChPVVRQVVQpL3VmZmQtc3RyZXNzOiB1ZmZkLWNvbW1vbi5jCiAkKE9VVFBVVCkvdWZmZC11bml0LXRlc3RzOiB1ZmZkLWNvbW1vbi5jCkBAIC0yMTcsNyAmIzQzOzIyMCw3IEBAICQoQklOQVJJRVNfMzIpOiBDRkxBR1MgJiM0Mzs9IC1tMzIgLW14c2F2ZQogJChCSU5BUklFU18zMik6IExETElCUyAmIzQzOz0gLWxydCAtbGRsIC1sbQogJChCSU5BUklFU18zMik6ICQoT1VUUFVUKS8lXzMyOiAlLmMKIAkkKGNhbGwgbXNnLENDLCwkQCkKLQkkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRACiYjNDM7CSQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQAogJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTMyLCQodCkpKSkKIGVuZGlmCiAKQEAgLTIyNiw3ICYjNDM7MjI5LDcgQEAgJChCSU5BUklFU182NCk6IENGTEFHUyAmIzQzOz0gLW02NCAtbXhzYXZlCiAkKEJJTkFSSUVTXzY0KTogTERMSUJTICYjNDM7PSAtbHJ0IC1sZGwKICQoQklOQVJJRVNfNjQpOiAkKE9VVFBVVCkvJV82NDogJS5jCiAJJChjYWxsIG1zZyxDQywsJEApCi0JJChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQAomIzQzOwkkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEAKICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS02NCwkKHQpKSkpCiBlbmRpZgogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jCmluZGV4IDViNTgyNTg4ZTAxNWQ0Li5iMmVhYTQ5MGU3YzI1MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKQEAgLTE1LDkgJiM0MzsxNSw5IEBACiAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIE1BUF9TSVpFX01CCTEwMAogI2RlZmluZSBNQVBfU0laRQkoTUFQX1NJWkVfTUIgKiAxMDI0ICogMTAyNCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKaW5kZXggMGM2MjdlYTg5ZmY3YjIuLjNjM2QxMjljOTFiMjlkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7CiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jCmluZGV4IDYzMjllMzdmZmY0Yzk0Li40OTZiNzRiMzc0NzZiMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKQEAgLTI1LDcgJiM0MzsyNSw2IEBACiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIHVpbnQ2NF90IHBhZ2Vfc2l6ZTsKIHVpbnQ2NF90IHBtZF9wYWdlc2l6ZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwppbmRleCBiMjFkZjMwNDBiMWM3Yy4uZWQ5NjdiM2M3ZjM3MDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMKQEAgLTIxLDcgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3Vpby5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2luY2x1ZGUgJiMzNDsuLi9waWRmZC9waWRmZC5oJiMzNDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwppbmRleCBlYjg5NjNlOWQ5OGYwNi4uNjhjODQwYmFlMDgyMDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jCkBAIC0yOSw3ICYjNDM7MjksNiBAQAogI2luY2x1ZGUgJiMzNDsuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogc3RhdGljIHNpemVfdCBwYWdlc2l6ZTsKIHN0YXRpYyBpbnQgbnJfaHVnZXRsYnNpemVzOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKaW5kZXggM2Y4NDFhOTZmODcwNjguLmQ5Y2FhOWZiOGI3ODU2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKQEAgLTEsMjc1ICYjNDM7MSw0NDMgQEAKICNkZWZpbmUgX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fIC8vIFVzZSBsbDY0CiAjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKICNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7ZGlyZW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKICNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwotI2luY2x1ZGUgJmx0O3B0aHJlYWQuaCZndDsKLSNpbmNsdWRlICZsdDthc3NlcnQuaCZndDsKICNpbmNsdWRlICZsdDttbS9ndXBfdGVzdC5oJmd0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiAKICNkZWZpbmUgTUIgKDFVTCAmbHQ7Jmx0OyAyMCkKIAomIzQzOyNpZm5kZWYgQVJSQVlfU0laRQomIzQzOyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpCiYjNDM7I2VuZGlmCiYjNDM7CiAvKiBKdXN0IHRoZSBmbGFncyB3ZSBuZWVkLCBjb3BpZWQgZnJvbSB0aGUga2VybmVsIGludGVybmFscy4gKi8KICNkZWZpbmUgRk9MTF9XUklURQkweDAxCS8qIGNoZWNrIHB0ZSBpcyB3cml0YWJsZSAqLwogCiYjNDM7LyogUGFnZSBjb3VudHMgZXhlcmNpc2luZyBzaW5nbGUsIFRIUC1iYXRjaCwgcGFydGlhbCwgYW5kIGZ1bGwtbWFwcGluZyBHVVAuICovCiYjNDM7c3RhdGljIGNvbnN0IGludCBucl9wYWdlc19saXN0W10gPSB7IDEsIDUxMiwgMTIzLCAtMSB9OwomIzQzOwogI2RlZmluZSBHVVBfVEVTVF9GSUxFICYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QmIzM0OwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbWQgPSBHVVBfRkFTVF9CRU5DSE1BUks7Ci1zdGF0aWMgaW50IGd1cF9mZCwgcmVwZWF0cyA9IDE7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7Ci0vKiBTZXJpYWxpemUgcHJpbnRzICovCi1zdGF0aWMgcHRocmVhZF9tdXRleF90IHByaW50X211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKJiM0MztGSVhUVVJFKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJaW50IGd1cF9mZDsKJiM0MzsJY2hhciAqYWRkcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJYm9vbCB0aHA7CiYjNDM7CWJvb2wgaHVnZXRsYjsKJiM0MzsJYm9vbCB3cml0ZTsKJiM0MzsJYm9vbCBzaGFyZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRvbmx5KQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSBmYWxzZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV90aHApCiYjNDM7ewomIzQzOwkudGhwID0gdHJ1ZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkb25seV90aHApCiYjNDM7ewomIzQzOwkudGhwID0gdHJ1ZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSBmYWxzZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGVfaHVnZXRsYikKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSB0cnVlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRvbmx5X2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSBmYWxzZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZSkKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZG9ubHkpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gZmFsc2UsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV90aHApCiYjNDM7ewomIzQzOwkudGhwID0gdHJ1ZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKIAotc3RhdGljIGNoYXIgKmNtZF90b19zdHIodW5zaWduZWQgbG9uZyBjbWQpCiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRvbmx5X3RocCkKIHsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgR1VQX0ZBU1RfQkVOQ0hNQVJLOgotCQlyZXR1cm4gJiMzNDtHVVBfRkFTVF9CRU5DSE1BUksmIzM0OzsKLQljYXNlIFBJTl9GQVNUX0JFTkNITUFSSzoKLQkJcmV0dXJuICYjMzQ7UElOX0ZBU1RfQkVOQ0hNQVJLJiMzNDs7Ci0JY2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOgotCQlyZXR1cm4gJiMzNDtQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLJiMzNDs7Ci0JY2FzZSBHVVBfQkFTSUNfVEVTVDoKLQkJcmV0dXJuICYjMzQ7R1VQX0JBU0lDX1RFU1QmIzM0OzsKLQljYXNlIFBJTl9CQVNJQ19URVNUOgotCQlyZXR1cm4gJiMzNDtQSU5fQkFTSUNfVEVTVCYjMzQ7OwotCWNhc2UgRFVNUF9VU0VSX1BBR0VTX1RFU1Q6Ci0JCXJldHVybiAmIzM0O0RVTVBfVVNFUl9QQUdFU19URVNUJiMzNDs7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSBmYWxzZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYikKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSB0cnVlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkb25seV9odWdldGxiKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IHRydWUsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoZ3VwX3Rlc3QpCiYjNDM7ewomIzQzOwlpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFOwomIzQzOwlpbnQgemVyb19mZDsKJiM0MzsJY2hhciAqcDsKJiM0MzsKJiM0MzsJLyogemVyb19mZCBoYXMgdG8gYmUgJmd0Oz0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqLwomIzQzOwl6ZXJvX2ZkID0gb3BlbigmIzM0Oy9kZXYvemVybyYjMzQ7LCBPX1JEV1IpOwomIzQzOwlBU1NFUlRfR0UoemVyb19mZCwgMCk7CiYjNDM7CiYjNDM7CS8qIGd1cF9mZCBoYXMgdG8gYmUgJmd0Oz0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqLwomIzQzOwlzZWxmLSZndDtndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7CiYjNDM7CUFTU0VSVF9HRShzZWxmLSZndDtndXBfZmQsIDApOwomIzQzOwomIzQzOwlzZWxmLSZndDtzaXplID0gdmFyaWFudC0mZ3Q7aHVnZXRsYiA/IDI1NiAqIE1CIDogMTI4ICogTUI7CiYjNDM7CiYjNDM7CS8qIENoZWNrIGZvciBodWdldGxiICovCiYjNDM7CWlmICh2YXJpYW50LSZndDtodWdldGxiKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7CiYjNDM7CiYjNDM7CQlpZiAoIWhwX3NpemUpIHsKJiM0MzsJCQljbG9zZSh6ZXJvX2ZkKTsKJiM0MzsJCQljbG9zZShzZWxmLSZndDtndXBfZmQpOwomIzQzOwkJCVNLSVAocmV0dXJuLCAmIzM0O0h1Z2VUTEIgbm90IGF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwkJfQomIzQzOwomIzQzOwkJc2VsZi0mZ3Q7c2l6ZSA9IChzZWxmLSZndDtzaXplICYjNDM7IGhwX3NpemUgLSAxKSAmYW1wOyB+KGhwX3NpemUgLSAxKTsKJiM0MzsJCWlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNlbGYtJmd0O3NpemUgLyBocF9zaXplKSkgewomIzQzOwkJCWh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpOwomIzQzOwkJCWNsb3NlKHplcm9fZmQpOwomIzQzOwkJCWNsb3NlKHNlbGYtJmd0O2d1cF9mZCk7CiYjNDM7CQkJU0tJUChyZXR1cm4sICYjMzQ7Tm90IGVub3VnaCBodWdlIHBhZ2VzXG4mIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQltbWFwX2ZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDtzaGFyZWQpCiYjNDM7CQltbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgJmFtcDsgfk1BUF9QUklWQVRFKSB8IE1BUF9TSEFSRUQ7CiYjNDM7CiYjNDM7CXNlbGYtJmd0O2FkZHIgPSBtbWFwKE5VTEwsIHNlbGYtJmd0O3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkJICBtbWFwX2ZsYWdzLCB6ZXJvX2ZkLCAwKTsKJiM0MzsKJiM0MzsJY2xvc2UoemVyb19mZCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9ORShzZWxmLSZndDthZGRyLCBNQVBfRkFJTEVEKSB7CiYjNDM7CQlpbnQgZXJyID0gZXJybm87CiYjNDM7CiYjNDM7CQljbG9zZShzZWxmLSZndDtndXBfZmQpOwomIzQzOwkJaWYgKHZhcmlhbnQtJmd0O2h1Z2V0bGIpCiYjNDM7CQkJaHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7CiYjNDM7CQlUSF9MT0coJiMzNDttbWFwIGZhaWxlZDogJXMmIzM0Oywgc3RyZXJyb3IoZXJyKSk7CiAJfQotCXJldHVybiAmIzM0O1Vua25vd24gY29tbWFuZCYjMzQ7OwomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7dGhwKQomIzQzOwkJbWFkdmlzZShzZWxmLSZndDthZGRyLCBzZWxmLSZndDtzaXplLCBNQURWX0hVR0VQQUdFKTsKJiM0MzsJZWxzZQomIzQzOwkJbWFkdmlzZShzZWxmLSZndDthZGRyLCBzZWxmLSZndDtzaXplLCBNQURWX05PSFVHRVBBR0UpOwomIzQzOwomIzQzOwlmb3IgKHAgPSBzZWxmLSZndDthZGRyOyAodW5zaWduZWQgbG9uZylwICZsdDsgKHVuc2lnbmVkIGxvbmcpc2VsZi0mZ3Q7YWRkcgomIzQzOwkJCSYjNDM7IHNlbGYtJmd0O3NpemU7IHAgJiM0Mzs9IHBzaXplKCkpCiYjNDM7CQlwWzBdID0gMDsKIH0KIAotdm9pZCAqZ3VwX3RocmVhZCh2b2lkICpkYXRhKQomIzQzO0ZJWFRVUkVfVEVBUkRPV04oZ3VwX3Rlc3QpCiB7Ci0Jc3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTsKLQlpbnQgaSwgc3RhdHVzOwotCi0JLyogT25seSByZXBvcnQgdGltaW5nIGluZm9ybWF0aW9uIG9uIHRoZSAqX0JFTkNITUFSSyBjb21tYW5kczogKi8KLQlpZiAoKGNtZCA9PSBQSU5fRkFTVF9CRU5DSE1BUkspIHx8IChjbWQgPT0gR1VQX0ZBU1RfQkVOQ0hNQVJLKSB8fAotCSAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkgewotCQlmb3IgKGkgPSAwOyBpICZsdDsgcmVwZWF0czsgaSYjNDM7JiM0MzspIHsKLQkJCWd1cC5zaXplID0gc2l6ZTsKLQkJCXN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCAmYW1wO2d1cCk7Ci0JCQlpZiAoc3RhdHVzKQotCQkJCWJyZWFrOwotCi0JCQlwdGhyZWFkX211dGV4X2xvY2soJmFtcDtwcmludF9tdXRleCk7Ci0JCQlrc2Z0X3ByaW50X21zZygmIzM0OyVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1cyYjMzQ7LAotCQkJCSAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYywKLQkJCQkgICAgICAgZ3VwLnB1dF9kZWx0YV91c2VjKTsKLQkJCWlmIChndXAuc2l6ZSAhPSBzaXplKQotCQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7LCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpJiMzNDssIGd1cC5zaXplKTsKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7XG4mIzM0Oyk7Ci0JCQlwdGhyZWFkX211dGV4X3VubG9jaygmYW1wO3ByaW50X211dGV4KTsKLQkJfQotCX0gZWxzZSB7Ci0JCWd1cC5zaXplID0gc2l6ZTsKLQkJc3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsICZhbXA7Z3VwKTsKLQkJaWYgKHN0YXR1cykKLQkJCWdvdG8gcmV0dXJuXzsKLQotCQlwdGhyZWFkX211dGV4X2xvY2soJmFtcDtwcmludF9tdXRleCk7Ci0JCWtzZnRfcHJpbnRfbXNnKCYjMzQ7JXM6IGRvbmVcbiYjMzQ7LCBjbWRfdG9fc3RyKGNtZCkpOwotCQlpZiAoZ3VwLnNpemUgIT0gc2l6ZSkKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7VHJ1bmNhdGVkIChzaXplOiAlbGxkKVxuJiMzNDssIGd1cC5zaXplKTsKLQkJcHRocmVhZF9tdXRleF91bmxvY2soJmFtcDtwcmludF9tdXRleCk7CiYjNDM7CW11bm1hcChzZWxmLSZndDthZGRyLCBzZWxmLSZndDtzaXplKTsKJiM0MzsJY2xvc2Uoc2VsZi0mZ3Q7Z3VwX2ZkKTsKJiM0MzsKJiM0MzsJaWYgKHZhcmlhbnQtJmd0O2h1Z2V0bGIpCiYjNDM7CQlodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlcykKJiM0Mzt7CiYjNDM7CS8qIFRlc3RzIHRoZSBnZXRfdXNlcl9wYWdlcyBwYXRoICovCiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9OwomIzQzOwomIzQzOwkJZ3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLSZndDthZGRyOwomIzQzOwkJZ3VwLnNpemUgPSBzZWxmLSZndDtzaXplOwomIzQzOwkJZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSAmbHQ7IDAgPwomIzQzOwkJCXNlbGYtJmd0O3NpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTsKJiM0MzsKJiM0MzsJCWlmICh2YXJpYW50LSZndDt3cml0ZSkKJiM0MzsJCQlndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7CiYjNDM7CiYjNDM7CQlUSF9MT0coJiMzNDtucl9wYWdlc19wZXJfY2FsbD0ldSYjMzQ7LCBndXAubnJfcGFnZXNfcGVyX2NhbGwpOwomIzQzOwkJQVNTRVJUX0VRKGlvY3RsKHNlbGYtJmd0O2d1cF9mZCwgR1VQX0JBU0lDX1RFU1QsICZhbXA7Z3VwKSwgMCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlcykKJiM0Mzt7CiYjNDM7CS8qIFRlc3RzIHRoZSBwaW5fdXNlcl9wYWdlcyBwYXRoICovCiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9OwomIzQzOwomIzQzOwkJZ3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLSZndDthZGRyOwomIzQzOwkJZ3VwLnNpemUgPSBzZWxmLSZndDtzaXplOwomIzQzOwkJZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSAmbHQ7IDAgPwomIzQzOwkJCXNlbGYtJmd0O3NpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTsKJiM0MzsKJiM0MzsJCWlmICh2YXJpYW50LSZndDt3cml0ZSkKJiM0MzsJCQlndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7CiYjNDM7CiYjNDM7CQlUSF9MT0coJiMzNDtucl9wYWdlc19wZXJfY2FsbD0ldSYjMzQ7LCBndXAubnJfcGFnZXNfcGVyX2NhbGwpOwomIzQzOwkJQVNTRVJUX0VRKGlvY3RsKHNlbGYtJmd0O2d1cF9mZCwgUElOX0JBU0lDX1RFU1QsICZhbXA7Z3VwKSwgMCk7CiAJfQomIzQzO30KIAotcmV0dXJuXzoKLQlrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsICYjMzQ7aW9jdGwgc3RhdHVzICVkXG4mIzM0Oywgc3RhdHVzKTsKLQlyZXR1cm4gTlVMTDsKJiM0MztURVNUX0YoZ3VwX3Rlc3QsIGR1bXBfdXNlcl9wYWdlc193aXRoX2dldCkKJiM0Mzt7CiYjNDM7CS8qIFRlc3RzIERVTVBfVVNFUl9QQUdFU19URVNUIHVzaW5nIGdldF91c2VyX3BhZ2VzICovCiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9OwomIzQzOwomIzQzOwkJZ3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLSZndDthZGRyOwomIzQzOwkJZ3VwLnNpemUgPSBzZWxmLSZndDtzaXplOwomIzQzOwkJZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSAmbHQ7IDAgPwomIzQzOwkJCXNlbGYtJmd0O3NpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTsKJiM0MzsKJiM0MzsJCWlmICh2YXJpYW50LSZndDt3cml0ZSkKJiM0MzsJCQlndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7CiYjNDM7CiYjNDM7CQlndXAud2hpY2hfcGFnZXNbMF0gPSAxOwomIzQzOwomIzQzOwkJVEhfTE9HKCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXUmIzM0OywgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTsKJiM0MzsJCUFTU0VSVF9FUShpb2N0bChzZWxmLSZndDtndXBfZmQsIERVTVBfVVNFUl9QQUdFU19URVNULCAmYW1wO2d1cCksIDApOwomIzQzOwl9CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0MztURVNUX0YoZ3VwX3Rlc3QsIGR1bXBfdXNlcl9wYWdlc193aXRoX3BpbikKIHsKLQlzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07Ci0JaW50IGZpbGVkLCBpLCBvcHQsIG5yX3BhZ2VzID0gMSwgdGhwID0gLTEsIHdyaXRlID0gMSwgbnRocmVhZHMgPSAxLCByZXQ7Ci0JaW50IGZsYWdzID0gTUFQX1BSSVZBVEU7Ci0JY2hhciAqZmlsZSA9ICYjMzQ7L2Rldi96ZXJvJiMzNDs7Ci0JYm9vbCBodWdldGxiID0gZmFsc2U7Ci0JcHRocmVhZF90ICp0aWQ7Ci0JY2hhciAqcDsKJiM0MzsJLyogVGVzdHMgRFVNUF9VU0VSX1BBR0VTX1RFU1QgdXNpbmcgcGluX3VzZXJfcGFnZXMgKi8KJiM0MzsJaW50IGk7CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O206cjpuOkY6ZjphYmNqOnRUTFV1d1dTSHB6JiMzNDspKSAhPSAtMSkgewotCQlzd2l0Y2ggKG9wdCkgewotCQljYXNlICYjMzk7YSYjMzk7OgotCQkJY21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTtiJiMzOTs6Ci0JCQljbWQgPSBQSU5fQkFTSUNfVEVTVDsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7TCYjMzk7OgotCQkJY21kID0gUElOX0xPTkdURVJNX0JFTkNITUFSSzsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7YyYjMzk7OgotCQkJY21kID0gRFVNUF9VU0VSX1BBR0VTX1RFU1Q7Ci0JCQkvKgotCQkJICogRHVtcCBwYWdlIDAgKGluZGV4IDEpLiBNYXkgYmUgb3ZlcnJpZGRlbiBsYXRlciwgYnkKLQkJCSAqIHVzZXImIzM5O3Mgbm9uLW9wdGlvbiBhcmd1bWVudHMuCi0JCQkgKgotCQkJICogLndoaWNoX3BhZ2VzIGlzIHplcm8tYmFzZWQsIHNvIHRoYXQgemVybyBjYW4gbWVhbiAmIzM0O2RvCi0JCQkgKiBub3RoaW5nJiMzNDsuCi0JCQkgKi8KLQkJCWd1cC53aGljaF9wYWdlc1swXSA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O3AmIzM5OzoKLQkJCS8qIHdvcmtzIG9ubHkgd2l0aCBEVU1QX1VTRVJfUEFHRVNfVEVTVCAqLwotCQkJZ3VwLnRlc3RfZmxhZ3MgfD0gR1VQX1RFU1RfRkxBR19EVU1QX1BBR0VTX1VTRV9QSU47Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O0YmIzM5OzoKLQkJCS8qIHN0cnRvbCwgc28geW91IGNhbiBwYXNzIGZsYWdzIGluIGhleCBmb3JtICovCi0JCQlndXAuZ3VwX2ZsYWdzID0gc3RydG9sKG9wdGFyZywgMCwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O2omIzM5OzoKLQkJCW50aHJlYWRzID0gYXRvaShvcHRhcmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTttJiMzOTs6Ci0JCQlzaXplID0gYXRvaShvcHRhcmcpICogTUI7Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O3ImIzM5OzoKLQkJCXJlcGVhdHMgPSBhdG9pKG9wdGFyZyk7Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O24mIzM5OzoKLQkJCW5yX3BhZ2VzID0gYXRvaShvcHRhcmcpOwotCQkJaWYgKG5yX3BhZ2VzICZsdDsgMCkKLQkJCQlucl9wYWdlcyA9IHNpemUgLyBwc2l6ZSgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTt0JiMzOTs6Ci0JCQl0aHAgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTtUJiMzOTs6Ci0JCQl0aHAgPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTtVJiMzOTs6Ci0JCQljbWQgPSBHVVBfQkFTSUNfVEVTVDsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7dSYjMzk7OgotCQkJY21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTt3JiMzOTs6Ci0JCQl3cml0ZSA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O1cmIzM5OzoKLQkJCXdyaXRlID0gMDsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7ZiYjMzk7OgotCQkJZmlsZSA9IG9wdGFyZzsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7UyYjMzk7OgotCQkJZmxhZ3MgJmFtcDs9IH5NQVBfUFJJVkFURTsKLQkJCWZsYWdzIHw9IE1BUF9TSEFSRUQ7Ci0JCQlicmVhazsKLQkJY2FzZSAmIzM5O0gmIzM5OzoKLQkJCWZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpOwotCQkJaHVnZXRsYiA9IHRydWU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O1dyb25nIGFyZ3VtZW50XG4mIzM0Oyk7Ci0JCX0KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTsKJiM0MzsKJiM0MzsJCWd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi0mZ3Q7YWRkcjsKJiM0MzsJCWd1cC5zaXplID0gc2VsZi0mZ3Q7c2l6ZTsKJiM0MzsJCWd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gJmx0OyAwID8KJiM0MzsJCQlzZWxmLSZndDtzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07CiYjNDM7CiYjNDM7CQlpZiAodmFyaWFudC0mZ3Q7d3JpdGUpCiYjNDM7CQkJZ3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFOwomIzQzOwomIzQzOwkJZ3VwLndoaWNoX3BhZ2VzWzBdID0gMTsKJiM0MzsJCWd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOOwomIzQzOwomIzQzOwkJVEhfTE9HKCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXUmIzM0OywgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTsKJiM0MzsJCUFTU0VSVF9FUShpb2N0bChzZWxmLSZndDtndXBfZmQsIERVTVBfVVNFUl9QQUdFU19URVNULCAmYW1wO2d1cCksIDApOwogCX0KJiM0Mzt9CiAKLQlpZiAob3B0aW5kICZsdDsgYXJnYykgewotCQlpbnQgZXh0cmFfYXJnX2NvdW50ID0gMDsKLQkJLyoKLQkJICogRm9yIGV4YW1wbGU6Ci0JCSAqCi0JCSAqICAgLi9ndXBfdGVzdCAtYyAwIDEgMHgxMDAxCi0JCSAqCi0JCSAqIC4uLnRvIGR1bXAgcGFnZXMgMCwgMSwgYW5kIDQwOTcKLQkJICovCi0KLQkJd2hpbGUgKChvcHRpbmQgJmx0OyBhcmdjKSAmYW1wOyZhbXA7Ci0JCSAgICAgICAoZXh0cmFfYXJnX2NvdW50ICZsdDsgR1VQX1RFU1RfTUFYX1BBR0VTX1RPX0RVTVApKSB7Ci0JCQkvKgotCQkJICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW4KLQkJCSAqIHVzZSBub3JtYWwgMC1iYXNlZCBpbmRleGluZyBvbiB0aGUgY29tbWFuZCBsaW5lLgotCQkJICovCi0JCQlsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSAmIzQzOyAxOwotCi0JCQlndXAud2hpY2hfcGFnZXNbZXh0cmFfYXJnX2NvdW50XSA9IHBhZ2VfaW5kZXg7Ci0JCQlleHRyYV9hcmdfY291bnQmIzQzOyYjNDM7OwotCQkJb3B0aW5kJiM0MzsmIzQzOzsKLQkJfQomIzQzO1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdCkKJiM0Mzt7CiYjNDM7CS8qIFRlc3RzIHRoZSBsb2NrbGVzcyBnZXRfdXNlcl9wYWdlc19mYXN0KCkgcGF0aCAqLwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTsKJiM0MzsKJiM0MzsJCWd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi0mZ3Q7YWRkcjsKJiM0MzsJCWd1cC5zaXplID0gc2VsZi0mZ3Q7c2l6ZTsKJiM0MzsJCWd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gJmx0OyAwID8KJiM0MzsJCQlzZWxmLSZndDtzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07CiYjNDM7CiYjNDM7CQlpZiAodmFyaWFudC0mZ3Q7d3JpdGUpCiYjNDM7CQkJZ3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFOwomIzQzOwomIzQzOwkJVEhfTE9HKCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXUmIzM0OywgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTsKJiM0MzsJCUFTU0VSVF9FUShpb2N0bChzZWxmLSZndDtndXBfZmQsIEdVUF9GQVNUX0JFTkNITUFSSywgJmFtcDtndXApLCAwKTsKIAl9CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfZmFzdCkKJiM0Mzt7CiYjNDM7CS8qIFRlc3RzIHRoZSBsb2NrbGVzcyBwaW5fdXNlcl9wYWdlc19mYXN0KCkgcGF0aCAqLwomIzQzOwlpbnQgaTsKIAotCWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07CiAKLQlpZiAoaHVnZXRsYikgewotCQl1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7CiYjNDM7CQlndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtJmd0O2FkZHI7CiYjNDM7CQlndXAuc2l6ZSA9IHNlbGYtJmd0O3NpemU7CiYjNDM7CQlndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldICZsdDsgMCA/CiYjNDM7CQkJc2VsZi0mZ3Q7c2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldOwogCi0JCWlmICghaHBfc2l6ZSkKLQkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7SHVnZVRMQiBpcyB1bmF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwkJaWYgKHZhcmlhbnQtJmd0O3dyaXRlKQomIzQzOwkJCWd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTsKIAotCQlzaXplID0gKHNpemUgJiM0MzsgaHBfc2l6ZSAtIDEpICZhbXA7IH4oaHBfc2l6ZSAtIDEpOwotCQlpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpCi0JCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xuJiMzNDspOwomIzQzOwkJVEhfTE9HKCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXUmIzM0OywgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTsKJiM0MzsJCUFTU0VSVF9FUShpb2N0bChzZWxmLSZndDtndXBfZmQsIFBJTl9GQVNUX0JFTkNITUFSSywgJmFtcDtndXApLCAwKTsKIAl9CiYjNDM7fQogCi0Ja3NmdF9zZXRfcGxhbihudGhyZWFkcyk7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19sb25ndGVybSkKJiM0Mzt7CiYjNDM7CS8qIFRlc3RzIHBpbl91c2VyX3BhZ2VzKCkgd2l0aCBGT0xMX0xPTkdURVJNICovCiYjNDM7CWludCBpOwogCi0JZmlsZWQgPSBvcGVuKGZpbGUsIE9fUkRXUnxPX0NSRUFULCAwNjY0KTsKLQlpZiAoZmlsZWQgJmx0OyAwKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBmaWxlLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9OwogCi0JZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXM7Ci0JaWYgKHdyaXRlKQotCQlndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7CiYjNDM7CQlndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtJmd0O2FkZHI7CiYjNDM7CQlndXAuc2l6ZSA9IHNlbGYtJmd0O3NpemU7CiYjNDM7CQlndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldICZsdDsgMCA/CiYjNDM7CQkJc2VsZi0mZ3Q7c2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldOwogCi0JZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwotCWlmIChndXBfZmQgPT0gLTEpIHsKLQkJc3dpdGNoIChlcnJubykgewotCQljYXNlIEVBQ0NFUzoKLQkJCWlmIChnZXR1aWQoKSkKLQkJCQlrc2Z0X3ByaW50X21zZygmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcbiYjMzQ7KTsKLQkJCWJyZWFrOwotCQljYXNlIEVOT0VOVDoKLQkJCWlmIChvcGVuZGlyKCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcmIzM0OykgPT0gTlVMTCkKLQkJCQlrc2Z0X3ByaW50X21zZygmIzM0O21vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcbiYjMzQ7KTsKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xuJiMzNDspOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlrc2Z0X3ByaW50X21zZygmIzM0O2ZhaWxlZCB0byBvcGVuICVzOiAlc1xuJiMzNDssIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7Ci0JCQlicmVhazsKLQkJfQotCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XG4mIzM0Oyk7Ci0JCWtzZnRfZXhpdF9wYXNzKCk7CiYjNDM7CQlpZiAodmFyaWFudC0mZ3Q7d3JpdGUpCiYjNDM7CQkJZ3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFOwomIzQzOwomIzQzOwkJVEhfTE9HKCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXUmIzM0OywgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTsKJiM0MzsJCUFTU0VSVF9FUShpb2N0bChzZWxmLSZndDtndXBfZmQsIFBJTl9MT05HVEVSTV9CRU5DSE1BUkssICZhbXA7Z3VwKSwgMCk7CiAJfQomIzQzO30KJiM0MzsKJiM0MztURVNUKGR1bXBfdXNlcl9wYWdlc19zcGFyc2VfaW5kaWNlcykKJiM0Mzt7CiYjNDM7CS8qIFRlc3RzIHNwYXJzZSBtdWx0aS1pbmRleCB3aGljaF9wYWdlc1tdIGlucHV0cy4gKi8KJiM0MzsJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9OwomIzQzOwl1bnNpZ25lZCBsb25nIHNpemUgPSAxMjggKiBNQjsKJiM0MzsJaW50IHplcm9fZmQsIGd1cF9mZDsKJiM0MzsJY2hhciAqYWRkciwgKnA7CiYjNDM7CiYjNDM7CXplcm9fZmQgPSBvcGVuKCYjMzQ7L2Rldi96ZXJvJiMzNDssIE9fUkRXUik7CiYjNDM7CUFTU0VSVF9HRSh6ZXJvX2ZkLCAwKTsKIAotCXAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCBmaWxlZCwgMCk7Ci0JaWYgKHAgPT0gTUFQX0ZBSUxFRCkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7bW1hcDogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwotCWd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDsKJiM0MzsJZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwomIzQzOwlBU1NFUlRfR0UoZ3VwX2ZkLCAwKTsKJiM0MzsKJiM0MzsJYWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIHplcm9fZmQsIDApOwomIzQzOwljbG9zZSh6ZXJvX2ZkKTsKJiM0MzsJQVNTRVJUX05FKGFkZHIsIE1BUF9GQUlMRUQpOwogCi0JaWYgKHRocCA9PSAxKQotCQltYWR2aXNlKHAsIHNpemUsIE1BRFZfSFVHRVBBR0UpOwotCWVsc2UgaWYgKHRocCA9PSAwKQotCQltYWR2aXNlKHAsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSk7CiYjNDM7CW1hZHZpc2UoYWRkciwgc2l6ZSwgTUFEVl9IVUdFUEFHRSk7CiAKLQkvKiBGYXVsdCB0aGVtIGluIGhlcmUsIGZyb20gdXNlciBzcGFjZS4gKi8KLQlmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCAmbHQ7IGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IHBzaXplKCkpCiYjNDM7CWZvciAocCA9IGFkZHI7ICh1bnNpZ25lZCBsb25nKXAgJmx0OyAodW5zaWduZWQgbG9uZylhZGRyICYjNDM7IHNpemU7CiYjNDM7CSAgICAgcCAmIzQzOz0gcHNpemUoKSkKIAkJcFswXSA9IDA7CiAKLQl0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7Ci0JYXNzZXJ0KHRpZCk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IG50aHJlYWRzOyBpJiM0MzsmIzQzOykgewotCQlyZXQgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3RpZFtpXSwgTlVMTCwgZ3VwX3RocmVhZCwgJmFtcDtndXApOwotCQlhc3NlcnQocmV0ID09IDApOwotCX0KLQlmb3IgKGkgPSAwOyBpICZsdDsgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7Ci0JCXJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpOwotCQlhc3NlcnQocmV0ID09IDApOwomIzQzOwlndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CiYjNDM7CWd1cC5zaXplID0gc2l6ZTsKJiM0MzsJZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gc2l6ZSAvIHBzaXplKCk7CiYjNDM7CWd1cC5ndXBfZmxhZ3MgPSBGT0xMX1dSSVRFOwomIzQzOwlndXAud2hpY2hfcGFnZXNbMF0gPSAxOwomIzQzOwlndXAud2hpY2hfcGFnZXNbMV0gPSAyMDsKJiM0MzsJZ3VwLndoaWNoX3BhZ2VzWzJdID0gMHgxMDAxOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcmVzZXJ2ZSB0aGUgb2xkICYjMzQ7Li9ndXBfdGVzdCAtY3QgLUYgMHgxIDAgMTkgMHgxMDAwJiMzNDsgc3BhcnNlIGR1bXAKJiM0MzsJICogY292ZXJhZ2UgYWZ0ZXIgcmVtb3ZpbmcgY29tbWFuZC1saW5lIHBhcnNpbmcgZnJvbSB0aGlzIGJpbmFyeS4KJiM0MzsJICovCiYjNDM7CUFTU0VSVF9FUShpb2N0bChndXBfZmQsIERVTVBfVVNFUl9QQUdFU19URVNULCAmYW1wO2d1cCksIDApOwomIzQzOwomIzQzOwltdW5tYXAoYWRkciwgc2l6ZSk7CiYjNDM7CWNsb3NlKGd1cF9mZCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJY2hhciAqZmlsZSA9ICYjMzQ7L2Rldi96ZXJvJiMzNDs7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihmaWxlLCBPX1JEV1IpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKIAl9CiYjNDM7CWNsb3NlKGZkKTsKIAotCWZyZWUodGlkKTsKJiM0MzsJZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7CiYjNDM7CWlmIChmZCA9PSAtMSkgewomIzQzOwkJa3NmdF9wcmludF9oZWFkZXIoKTsKJiM0MzsJCWlmIChlcnJubyA9PSBFQUNDRVMpCiYjNDM7CQkJa3NmdF9leGl0X3NraXAoJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XG4mIzM0Oyk7CiYjNDM7CQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CiYjNDM7CQkJRElSICpkZWJ1Z2ZzID0gb3BlbmRpcigmIzM0Oy9zeXMva2VybmVsL2RlYnVnJiMzNDspOwomIzQzOwomIzQzOwkJCWlmICghZGVidWdmcykgewomIzQzOwkJCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O01vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcbiYjMzQ7KTsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQljbG9zZWRpcihkZWJ1Z2ZzKTsKJiM0MzsJCQkJa3NmdF9leGl0X3NraXAoJiMzNDtDaGVjayBDT05GSUdfR1VQX1RFU1QgaW4ga2VybmVsIGNvbmZpZ1xuJiMzNDspOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJfQomIzQzOwljbG9zZShmZCk7CiAKLQlrc2Z0X2V4aXRfcGFzcygpOwomIzQzOwlyZXR1cm4gdGVzdF9oYXJuZXNzX3J1bihhcmdjLCBhcmd2KTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKaW5kZXggMmYyYjk4NzlkMTAwNTEuLmUxYmIwMzEwMTlmMmFjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYwpAQCAtMTAsOSAmIzQzOzEwLDYgQEAKICAqIGJ1Z3MuCiAgKi8KIAotI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7Ci0KICNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwogI2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKQEAgLTI5LDYgJiM0MzsyNiw5IEBACiAjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKICNpbmNsdWRlICZsdDtzeXMvaW9jdGwuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdGltZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDttbS9odWdlcGFnZV9zZXR0aW5ncy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiAKIC8qCiAgKiBUaGlzIGlzIGEgcHJpdmF0ZSBVQVBJIHRvIHRoZSBrZXJuZWwgdGVzdCBtb2R1bGUgc28gaXQgaXNuJiMzOTt0IGV4cG9ydGVkCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jCmluZGV4IDU1NWI0YjNkMTQzMDdlLi41N2NmNzkwY2E0NzhkNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKQEAgLTE0LDcgJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBNSU5fRlJFRV9QQUdFUwkyMAogI2RlZmluZSBOUl9IVUdFX1BBR0VTCTEwCS8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCmluZGV4IDBmMmFhZDFiN2RiZDZmLi5hNDU4YmVjZjU4MzI3ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMKQEAgLTE4LDcgJiM0MzsxOCw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtZmQuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNCkKICNkZWZpbmUgUFJPVEVDVElPTiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jCmluZGV4IGVkM2Q5MmU4NjJkODc2Li45YjcyNGFmNjZlOTM4OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jCkBAIC0yNiw3ICYjNDM7MjYsNiBAQAogI2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBERUZBVUxUX0xFTkdUSF9NQiAxMFVMCiAjZGVmaW5lIE1CX1RPX0JZVEVTKHgpICh4ICogMTAyNCAqIDEwMjQpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uYwppbmRleCAzZmY3ZjA2MmI3ZWI0NS4uZjQ1MTRkYTQ5ZTFkZjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYwppbmRleCBiYzIwMmU0ZWQyYmRhNy4uMjA4NjRlN2Q0ZTBjNzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYwpAQCAtMjEsOSAmIzQzOzIxLDkgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zdGF0ZnMuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjaWZuZGVmIE1BRFZfU09GVF9PRkZMSU5FCiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi12bWVtbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXZtZW1tYXAuYwppbmRleCA1MDdkZjc4YTE1OGQ4ZC4uYzQ2YTY1NmMyNWEwNGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItdm1lbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItdm1lbW1hcC5jCkBAIC0xMSw3ICYjNDM7MTEsNiBAQAogI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgUEFHRV9DT01QT1VORF9IRUFECSgxVUwgJmx0OyZsdDsgMTUpCiAjZGVmaW5lIFBBR0VfQ09NUE9VTkRfVEFJTAkoMVVMICZsdDsmbHQ7IDE2KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMKaW5kZXggZmI0NjAwNTcwZTEzMTkuLjk0OTU5NzRlY2NiZWE1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMKQEAgLTIwLDcgJiM0MzsyMCw2IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2lmbmRlZiBTVEFUWF9ESU9BTElHTgogI2RlZmluZSBTVEFUWF9ESU9BTElHTgkJMHgwMDAwMjAwMFUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmMKaW5kZXggMmRjMTU4MDU0ZjY2NmIuLjU2YzVhODUzM2U5ZDkwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwpAQCAtMTAsNyAmIzQzOzEwLDYgQEAKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMAogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMKaW5kZXggZjk0NTQ5ZWZjYzZmZjMuLjI1MzJhNDJiOThkZmYxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jCkBAIC0yNSw3ICYjNDM7MjUsNiBAQAogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMAogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKaW5kZXggMTBlOGRlZGNiMDg3ZGMuLjIzODI5NzNiMmY1NTJjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCkBAIC0yMiw3ICYjNDM7MjIsNiBAQAogI2luY2x1ZGUgJiMzNDtsaW51eC9tYWdpYy5oJiMzNDsKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCAmbHQ7Jmx0OyAzMCkpCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBocGFnZV9wbWRfc2l6ZTsKQEAgLTExOSw2ICYjNDM7MTE4LDcgQEAgc3RhdGljIHZvaWQgZ2V0X2ZpbmZvKGNvbnN0IGNoYXIgKmRpcikKIAljaGFyIGJ1ZlsxICZsdDsmbHQ7IDEwXTsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwogCWNoYXIgKnN0ciwgKmVuZDsKJiM0MzsJaW50IHJldDsKIAogCWZpbmZvLmRpciA9IGRpcjsKIAlzdGF0KGZpbmZvLmRpciwgJmFtcDtwYXRoX3N0YXQpOwpAQCAtMTM4LDggJiM0MzsxMzgsOSBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKQogCQkgICAgIG1ham9yKHBhdGhfc3RhdC5zdF9kZXYpLCBtaW5vcihwYXRoX3N0YXQuc3RfZGV2KSkKIAkgICAgJmd0Oz0gc2l6ZW9mKHBhdGgpKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcbiYjMzQ7LCBfX2Z1bmNfXyk7Ci0JaWYgKHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSAmbHQ7IDApCi0JCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3JlYWRfZmlsZShyZWFkX251bSkmIzM0Oyk7CiYjNDM7CXJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbCgpOwogCWlmIChzdHJzdHIoYnVmLCAmIzM0O0RFVlRZUEU9ZGlzayYjMzQ7KSkgewogCQkvKiBGb3VuZCBpdCAqLwogCQlpZiAoc25wcmludGYoZmluZm8uZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwKQEAgLTMxOSw3ICYjNDM7MzIwLDcgQEAgc3RhdGljIHZvaWQgKmZpbGVfc2V0dXBfYXJlYV9jb21tb24oaW50IG5yX2hwYWdlcywgZW51bSBmaWxlX3NldHVwX29wcyBzZXR1cCkKIHsKIAljb25zdCBpbnQgb3Blbl9vcHQgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IE9fUkRPTkxZIDogT19SRFdSOwogCWNvbnN0IGludCBtbWFwX3Byb3QgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IFBST1RfUkVBRCA6IChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLQlpbnQgZmQ7CiYjNDM7CWludCBmZCwgcmV0OwogCXZvaWQgKnA7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCkBAIC0zNjMsNyAmIzQzOzM2NCwxMCBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKQogCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDttbWFwKCkmIzM0Oyk7CiAKIAkvKiBEcm9wIHBhZ2UgY2FjaGUgKi8KLQl3cml0ZV9maWxlKCYjMzQ7L3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzJiMzNDssICYjMzQ7MyYjMzQ7LCAyKTsKJiM0MzsJcmV0ID0gd3JpdGVfZmlsZSgmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcyYjMzQ7LCAmIzM0OzMmIzM0OywgMik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbCgpOwomIzQzOwogCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAlyZXR1cm4gcDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKaW5kZXggYTA1MGY0ODQwY2ZhM2EuLmNjMzc0OTJjZjMyYzNkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYwpAQCAtMTUsNyAmIzQzOzE1LDYgQEAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJmx0O2luY2x1ZGUvdmRzby90aW1lNjQuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgS1NNX1NZU0ZTX1BBVEggJiMzNDsvc3lzL2tlcm5lbC9tbS9rc20vJiMzNDsKICNkZWZpbmUgS1NNX0ZQKHMpIChLU01fU1lTRlNfUEFUSCBzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwppbmRleCAyOWY3NDkyNDUzZDQzOS4uNGZlOTdjMDMzMjYxMjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jCkBAIC00LDkgJiM0Mzs0LDYgQEAKICAqIHBhdGhzIGluIHRoZSBrZXJuZWwuCiAgKi8KIAotI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7Ci0KICNpbmNsdWRlICZsdDtzdHJpbmdzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwogI2luY2x1ZGUgJmx0O251bWEuaCZndDsKQEAgLTE2LDYgJiM0MzsxMyw4IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAKICNkZWZpbmUgVFdPTUVHCQkoMiZsdDsmbHQ7MjApCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKaW5kZXggNmY4OTcxZDViM2NlNDMuLjgwNDM3MjgwMzA4MGNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCkBAIC0yMyw3ICYjNDM7MjMsNiBAQAogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgUEFHRU1BUF9CSVRTX0FMTAkJKFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHwJXAogCQkJCQkgUEFHRV9JU19GSUxFIHwgUEFHRV9JU19QUkVTRU5UIHwJXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKaW5kZXggZDhkOWQxZGU1N2I4YjAuLmE0Zjg0NTE3OTFjYmRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKQEAgLTE0LDcgJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAKICNpZm5kZWYgUFJfVEhQX0RJU0FCTEVfRVhDRVBUX0FEVklTRUQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMKaW5kZXggOWE2ZDk1NGVlMzcxMjYuLjViYTIwMzNlOGEwOWNkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwpAQCAtNDUsOCAmIzQzOzQ1LDggQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvcHRyYWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c2V0am1wLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3BrZXktaGVscGVycy5oJiMzNDsKIAogaW50IGl0ZXJhdGlvbl9uciA9IDE7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCmluZGV4IDhjMjk2ZGVkZjA0NzRkLi41NmRmMGRjYzk2NDBjMCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKQEAgLTEzMCwzMCAmIzQzOzEzMCw2IEBAIHRlc3Rfc2VsZWN0ZWQoKSB7CiAJZmkKIH0KIAotcnVuX2d1cF9tYXRyaXgoKSB7Ci0gICAgIyAtdDogdGhwPW9uLCAtVDogdGhwPW9mZiwgLUg6IGh1Z2V0bGI9b24KLSAgICBsb2NhbCBodWdldGxiX21iPTI1NgotCi0gICAgZm9yIGh1Z2UgaW4gLXQgLVQgJiMzNDstSCAtbSAkaHVnZXRsYl9tYiYjMzQ7OyBkbwotICAgICAgICAjIC11OiBndXAtZmFzdCwgLVU6IGd1cC1iYXNpYywgLWE6IHBpbi1mYXN0LCAtYjogcGluLWJhc2ljLCAtTDogcGluLWxvbmd0ZXJtCi0gICAgICAgIGZvciB0ZXN0X2NtZCBpbiAtdSAtVSAtYSAtYiAtTDsgZG8KLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wCi0gICAgICAgICAgICBmb3Igd3JpdGUgaW4gLXcgLVc7IGRvCi0gICAgICAgICAgICAgICAgIyAtUzogc2hhcmVkCi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TICYjMzQ7ICYjMzQ7OyBkbwotICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsCi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCYjMzk7cyBkZWZhdWx0IHRocCBzaXplIChvciAyTSBvbiB4ODYpLCAxMjMgdG8KLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm0KLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiAmIzM0Oy1uIDEmIzM0OyAmIzM0Oy1uIDUxMiYjMzQ7ICYjMzQ7LW4gMTIzJiMzNDsgJiMzNDstbiAtMSYjMzQ7OyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHVnZSAkdGVzdF9jbWQgJHdyaXRlICRzaGFyZSAkbnVtCi0gICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICBkb25lCi0gICAgICAgIGRvbmUKLSAgICBkb25lCi19Ci0KICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXMKIEFSQ0g2NFNUUj0mIzM0O2FybTY0IG1pcHM2NCBwYXJpc2M2NCBwcGM2NCBwcGM2NGxlIHJpc2N2NjQgczM5MHggc3BhcmM2NCB4ODZfNjQmIzM0OwogaWYgWyAteiAmIzM0OyRBUkNIJiMzNDsgXTsgdGhlbgpAQCAtMjc2LDE4ICYjNDM7MjUyLDcgQEAgZmkKIAogQ0FURUdPUlk9JiMzNDttbWFwJiMzNDsgcnVuX3Rlc3QgLi9tYXBfZml4ZWRfbm9yZXBsYWNlCiAKLWlmICRSVU5fQUxMOyB0aGVuCi0gICAgcnVuX2d1cF9tYXRyaXgKLWVsc2UKLSAgICAjIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmsKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAxCi0gICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gLTEKLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmsKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAxCi0gICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gLTEKLWZpCi0jIER1bXAgcGFnZXMgMCwgMTksIGFuZCA0MDk2LCB1c2luZyBwaW5fdXNlcl9wYWdlczoKLUNBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1jdCAtRiAweDEgMCAxOSAweDEwMDAKJiM0MztDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdAogQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX2xvbmd0ZXJtCiAKIENBVEVHT1JZPSYjMzQ7dXNlcmZhdWx0ZmQmIzM0OyBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0cwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCmluZGV4IGZiMTg2NGE2OGUxYzZiLi42YzIyYWM5ZTkzZGIwNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwpAQCAtOSw3ICYjNDM7OSw2IEBACiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCAmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcCYjMzQ7CiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAwMApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKaW5kZXggMzJiOTkxNDcyZjc0NGYuLmU3NDRjOTQzNGU3ZDA1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKQEAgLTIxLDcgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiB1aW50NjRfdCBwYWdlc2l6ZTsKIHVuc2lnbmVkIGludCBwYWdlc2hpZnQ7CkBAIC0yNjksNyAmIzQzOzI2OCw5IEBAIHN0YXRpYyB2b2lkIHdyaXRlX2RlYnVnZnMoY29uc3QgY2hhciAqZm10LCAuLi4pCiAJaWYgKHJldCAmZ3Q7PSBJTlBVVF9NQVgpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0OyVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXG4mIzM0OywgX19mdW5jX18pOwogCi0Jd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpOwomIzQzOwlyZXQgPSB3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgJiM0MzsgMSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbCgpOwogfQogCiBzdGF0aWMgY2hhciAqYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2Uoc2l6ZV90IGxlbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMKaW5kZXggMjJiOWMyZjFjMzVkMjMuLjBkYTE1ZDUzMGExZmM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uYwpAQCAtMTQsNyAmIzQzOzE0LDYgQEAKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2lmICFkZWZpbmVkKE1BUF9IVUdFVExCKQogI2RlZmluZSBNQVBfSFVHRVRMQgkweDQwMDAwCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMKaW5kZXggOGViMGM1NjMwZTdlMzEuLjk2ZjcyODk4ZWJlMGE1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jCkBAIC0xNyw3ICYjNDM7MTcsNiBAQAogI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIGludCBiYWNraW5nX2ZkID0gLTE7CiBpbnQgbW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEU7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaAppbmRleCA5MmEyMWI5N2Y3NDVhZi4uMDcyMzg0M2E3NjI2YjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaApAQCAtMzcsNyAmIzQzOzM3LDYgQEAKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFVGRkRfRkxBR1MJKE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0sgfCBVRkZEX1VTRVJfTU9ERV9PTkxZKQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYwppbmRleCBjOTczZDY3MjI3MjBjMy4uZWI0YjI0MzNiMDBlNjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYwpAQCAtNyw4ICYjNDM7Nyw4IEBACiAjaW5jbHVkZSAmbHQ7YXNzZXJ0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3VmZmQtY29tbW9uLmgmIzM0OwogCiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMKaW5kZXggZTI0ZDdiYTAwYjQ0MTcuLjVhMzU0YTY2NGQxZjdkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jCkBAIC0xMSw3ICYjNDM7MTEsNiBAQAogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIC8qCiAgKiBUaGUgaGludCBhZGRyIHZhbHVlIGlzIHVzZWQgdG8gYWxsb2NhdGUgYWRkcmVzc2VzCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKaW5kZXggMzExZmM1YjQ1MTNlYjQuLmYyNzZlZWU1NzY4MDRhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCkBAIC02OTgsOTMgJiM0Mzs2OTgsMzkgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKIAlyZXR1cm4gcmV0ICZndDsgMCA/IDAgOiAtZXJybm87CiB9CiAKLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQotewotCWludCBmZDsKLQlzc2l6ZV90IG51bXJlYWQ7Ci0KLQlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOwotCWlmIChmZCA9PSAtMSkKLQkJcmV0dXJuIDA7Ci0KLQludW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTsKLQlpZiAobnVtcmVhZCAmbHQ7IDEpIHsKLQkJY2xvc2UoZmQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlidWZbbnVtcmVhZF0gPSAmIzM5O1wwJiMzOTs7Ci0JY2xvc2UoZmQpOwotCi0JcmV0dXJuICh1bnNpZ25lZCBpbnQpIG51bXJlYWQ7Ci19Ci0KLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCi17Ci0JaW50IGZkLCBzYXZlZF9lcnJubzsKLQlzc2l6ZV90IG51bXdyaXR0ZW47Ci0KLQlpZiAoYnVmbGVuICZsdDsgMikKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7SW5jb3JyZWN0IGJ1ZmZlciBsZW46ICV6dVxuJiMzNDssIGJ1Zmxlbik7Ci0KLQlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpOwotCWlmIChmZCA9PSAtMSkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgb3BlbiBmYWlsZWQ6ICVzXG4mIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKLQotCW51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTsKLQlzYXZlZF9lcnJubyA9IGVycm5vOwotCWNsb3NlKGZkKTsKLQllcnJubyA9IHNhdmVkX2Vycm5vOwotCWlmIChudW13cml0dGVuICZsdDsgMCkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgd3JpdGUoJS4qcykgZmFpbGVkOiAlc1xuJiMzNDssIHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLAotCQkJCWJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKLQlpZiAobnVtd3JpdHRlbiAhPSBidWZsZW4gLSAxKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xuJiMzNDssCi0JCQkJcGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCkKLXsKLQljaGFyIGJ1ZlsyMV07Ci0KLQlpZiAocmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpICZsdDsgMCkKLQkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7cmVhZF9maWxlKCkmIzM0Oyk7Ci0KLQlyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDEwKTsKLX0KLQotdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pCi17Ci0JY2hhciBidWZbMjFdOwotCi0Jc3ByaW50ZihidWYsICYjMzQ7JWx1JiMzNDssIG51bSk7Ci0Jd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEpOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1hbGwsIHNobW1heDsKIAogdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKQogewotCWlmIChzaG1tYXgpCi0JCXdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4JiMzNDssIHNobW1heCk7Ci0JaWYgKHNobWFsbCkKLQkJd3JpdGVfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGwmIzM0Oywgc2htYWxsKTsKJiM0MzsJaWYgKHNobW1heCAmYW1wOyZhbXA7IHdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4JiMzNDssIHNobW1heCkpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbCgpOwomIzQzOwlpZiAoc2htYWxsICZhbXA7JmFtcDsgd3JpdGVfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGwmIzM0Oywgc2htYWxsKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsKCk7CiB9CiAKIHZvaWQgc2htX2xpbWl0c19wcmVwYXJlKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKQogewogCXVuc2lnbmVkIGxvbmcgbnIgPSBsZW5ndGggLyBwc2l6ZSgpOwogCXVuc2lnbmVkIGxvbmcgdmFsOwomIzQzOwlpbnQgcmV0OwogCi0JdmFsID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7KTsKJiM0MzsJcmV0ID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7LCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbCgpOwogCWlmICh2YWwgJmx0OyBsZW5ndGgpIHsKLQkJd3JpdGVfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0OywgbGVuZ3RoKTsKJiM0MzsJCXJldCA9IHdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4JiMzNDssIGxlbmd0aCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWtzZnRfZXhpdF9mYWlsKCk7CiAJCXNobW1heCA9IHZhbDsKIAl9CiAKLQl2YWwgPSByZWFkX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDspOwomIzQzOwlyZXQgPSByZWFkX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsKCk7CiAJaWYgKHZhbCAmbHQ7IG5yKSB7Ci0JCXdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssIG5yKTsKJiM0MzsJCXJldCA9IHdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssIG5yKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJa3NmdF9leGl0X2ZhaWwoKTsKIAkJc2htYWxsID0gdmFsOwogCX0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAppbmRleCBlYThmYzhmZGYwZWIwYi4uYWE4NTZmMGQzMmQ2NGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKQEAgLTgsNiAmIzQzOzgsOCBAQAogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OyAvKiBfU0NfUEFHRVNJWkUgKi8KICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2ZpbGVfdXRpbHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCAmbHQ7Jmx0OyAobnIpKQogI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KQpAQCAtMTY0LDExICYjNDM7MTY2LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7CiAjZGVmaW5lIFBBR0VNQVBfUFJFU0VOVChlbnQpCSgoKGVudCkgJmFtcDsgKDF1bGwgJmx0OyZsdDsgNjMpKSAhPSAwKQogI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpCSgoZW50KSAmYW1wOyAoKDF1bGwgJmx0OyZsdDsgNTUpIC0gMSkpCiAKLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwotaW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwotdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTsKLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTsKLQogdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpOwogdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTAzMgoJCQkJCQkJb3V0cHV0OiA4NgoJCQkJCQkJdGhvdWdodHM6IDk4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllczogQSBGb2N1c2VkIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBzZWVtcyBwcmV0dHkgY29udGFpbmVkLCB3aGljaCBpcyBnb29kLiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBvbiByZWZhY3RvcmluZyBhbmQgYWRkaW5nIHNvbWUgbmV3IHRvb2xpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBndXBfdGVzdC5jYCBjb2RlLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnZvbHZlcyBzcGxpdHRpbmcgb3V0IHV0aWxpdHkgZnVuY3Rpb25zIGZyb20gYGd1cF90ZXN0LmNgIGludG8gYGZpbGVfdXRpbHMuY2AgYW5kIGBodWdlcGFnZV9zZXR0aW5ncy5jYC4gTWFrZXMgc2Vuc2U7IHRoYXQgc2hvdWxkIGltcHJvdmUgbWFpbnRhaW5hYmlsaXR5IGFuZCBwb3RlbnRpYWxseSByZXVzYWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIEEgbmV3IHRvb2wsIGBndXBfYmVuY2guY2AsIGhhcyBiZWVuIGludHJvZHVjZWQsIHdoaWNoIEkgYXNzdW1lIGlzIGZvciBiZW5jaG1hcmtpbmcgdGhlIEdVUCAoR2V0IFVzZXIgUGFnZXMpIG9wZXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBvbmUgaW4gbW9yZSBkZXRhaWwgdG8gdW5kZXJzdGFuZCB3aGF0IG1ldHJpY3MgdGhleSYjMzk7cmUgbG9va2luZyBhdC4KCkZyb20gdGhlIGZpbGUgbGlzdCwgSSBjYW4gc2VlIHRoZSBzY29wZSBpcyBmYWlybHkgbmFycm93OiBtb3N0bHkgd2l0aGluIHRoZSBgdG9vbHMvYCwgYERvY3VtZW50YXRpb24vYCwgYW5kIGBNQUlOVEFJTkVSU2AgZGlyZWN0b3JpZXMuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdGVkLiBUaGUgZGlmZiBjb25maXJtcyBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmc6IHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgbm8gZHJpdmVycywgbm8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUuIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgdXNlci1zcGFjZSB0b29scyBhbmQgdGVzdHMuIFRoaXMgaXMgZnVydGhlciBiYWNrZWQgdXAgYnkgdGhlIGZpbGUgcGF0aHMgd2hpY2ggSSB3aWxsIHVzZSB0byBhc3Nlc3MgY2hhbmdlcy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGNoYW5nZXMgdG8gdGhlIGBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdGAgZmlsZSB3aGljaCBsaWtlbHkgbWVhbnMgdGhlIGRvY3VtZW50YXRpb24gYXJvdW5kIHRoZSBgcGluX3VzZXJfcGFnZXNgIEFQSSBoYXMgYmVlbiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNoYW5nZXMuIEkgYWxzbyB3YW50IHRvIGFzc2VzcyB0aGUgYE1BSU5UQUlORVJTYCBmaWxlIHRvIHNlZSBpZiBhbnkgbWFpbnRhaW5lcnNoaXAgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZS4KCkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCBhbmQgdGhlIGZhY3QgdGhhdCB0aGVyZSBhcmUgbm8gYWN0dWFsIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiwgSSBiZWxpZXZlIHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIHJlZmFjdG9yIGFuZCBhIG5ldyB0b29sOyB0aGVyZSYjMzk7cyBub3RoaW5nIGhlcmUgdGhhdCYjMzk7cyBkaXJlY3RseSBpbXBhY3RpbmcgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IHdvdWxkIG1ha2UgaXQgYSBwcmlvcml0eSB0YXJnZXQgZm9yIGZ1enppbmcuIEhvd2V2ZXIsIHRoYXQgZG9lcyBub3QgbWVhbiB0aGF0IHRoZSBjb2RlIGlzIGZyZWUgb2YgYnVncywgc28gSSB3aWxsIGhhdmUgYSBtb3JlIGRldGFpbGVkIGFzc2Vzc21lbnQgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbHMgKHRvb2xzL21tL2d1cF9iZW5jaC5jLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBEb2N1bWVudGF0aW9uLCBhbmQgTUFJTlRBSU5FUlMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbHMgKHRvb2xzL21tL2d1cF9iZW5jaC5jLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBEb2N1bWVudGF0aW9uLCBhbmQgTUFJTlRBSU5FUlMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6Mjk6MDguMzMzMjE2NjY1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMjQwMzI2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29scyAodG9vbHMvbW0vZ3VwX2JlbmNoLmMsIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyksIERvY3VtZW50YXRpb24sIGFuZCBNQUlOVEFJTkVSUy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjI5OjA4LjMzMzIyMjczNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwODIyNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjBhMjNlOTk3OWVlZGY0YTZmYjU4ZWExYjM3NmNhNTI3NTcyYzRmY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAxNiAyMDoyOTowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XFxuaW5kZXggYzE2Y2ExNjNiNTVlM2MuLmVhNzIyYWRmMjJjY2FjIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcXG5AQCAtMjMwLDEwICsyMzAsMTYgQEAgVGhpcyBmaWxlOjpcXG4gXFxuICB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxuIFxcbi1oYXMgdGhlIGZvbGxvd2luZyBuZXcgY2FsbHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBwaW4qKCkgd3JhcHBlciBmdW5jdGlvbnM6XFxuK2NvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdGVzdCBjYXNlcyB0byBleGVyY2lzZSBwaW5fdXNlcl9wYWdlcyooKTpcXG4gXFxuLSogUElOX0ZBU1RfQkVOQ0hNQVJLICguL2d1cF90ZXN0IC1hKVxcbi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKVxcbisqIHBpbl91c2VyX3BhZ2VzIHZpYSBQSU5fQkFTSUNfVEVTVFxcbisqIHBpbl91c2VyX3BhZ2VzX2Zhc3QgdmlhIFBJTl9GQVNUX0JFTkNITUFSS1xcbisqIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtIHZpYSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXFxuK1xcbitSdW4gd2l0aDo6XFxuK1xcbisgIG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW1cXG4rICAuL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0XFxuIFxcbiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkXFxuIHNpbmNlIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCwgdmlhIHR3byBuZXcgL3Byb2Mvdm1zdGF0IGVudHJpZXM6IDo6XFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCA4MDZiZDJkODBkMTUzNS4uN2QxMjFkZWU5ZjBmMmMgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xNzAyNCw2ICsxNzAyNCw3IEBAIFQ6XFx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ha3BtL21tXFxuIEY6XFx0bW0vZ3VwLmNcXG4gRjpcXHRtbS9ndXBfdGVzdC5jXFxuIEY6XFx0bW0vZ3VwX3Rlc3QuaFxcbitGOlxcdHRvb2xzL21tL2d1cF9iZW5jaC5jXFxuIEY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG4gRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxuIFxcbkBAIC0xNzEyOCw2ICsxNzEyOSw3IEBAIEY6XFx0bW0vbWVtb3J5LXRpZXJzLmNcXG4gRjpcXHRtbS9wYWdlX2lkbGUuY1xcbiBGOlxcdG1tL3BnYWxsb2MtdHJhY2suaFxcbiBGOlxcdG1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmNcXG4rRjpcXHR0b29scy9saWIvbW0vXFxuIEY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXFxuIFxcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIE5VTUEgTUVNQkxPQ0tTIEFORCBOVU1BIEVNVUxBVElPTlxcbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5jIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjc5MmY0YjRkYjYyNTJlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcXG5AQCAtMCwwICsxLDExOSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImZpbGVfdXRpbHMuaFxcXCJcXG4rXFxuK2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0c3NpemVfdCBudW1yZWFkO1xcbitcXG4rXFx0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKGZkID09IC0xKSB7XFxuK1xcdFxcdGludCBlcnIgPSBlcnJubztcXG4rXFxuK1xcdFxcdHByaW50ZihcXFwiIyAlczogJXMgKCVkKVxcXFxuXFxcIiwgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTtcXG4rXFx0XFx0cmV0dXJuIC1lcnI7XFxuK1xcdH1cXG4rXFxuK1xcdG51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xcbitcXHRpZiAobnVtcmVhZCBcXHUwMDNjIDEpIHtcXG4rXFx0XFx0aW50IGVyciA9IG51bXJlYWQgPyBlcnJubyA6IEVOT0RBVEE7XFxuK1xcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdHByaW50ZihcXFwiIyAlczogJXMgKCVkKVxcXFxuXFxcIiwgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTtcXG4rXFx0XFx0cmV0dXJuIC1lcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGJ1ZltudW1yZWFkXSA9ICdcXFxcMCc7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFxuK1xcdHJldHVybiAoaW50KW51bXJlYWQ7XFxuK31cXG4rXFxuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcXG4re1xcbitcXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xcbitcXHRzc2l6ZV90IG51bXdyaXR0ZW47XFxuK1xcbitcXHRpZiAoYnVmbGVuIFxcdTAwM2MgMikge1xcbitcXHRcXHRwcmludGYoXFxcIiMgJXM6ICVzICglZClcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKEVJTlZBTCksIEVJTlZBTCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xcbitcXHRpZiAoZmQgPT0gLTEpIHtcXG4rXFx0XFx0aW50IGVyciA9IGVycm5vO1xcbitcXG4rXFx0XFx0cHJpbnRmKFxcXCIjICVzOiAlcyAoJWQpXFxcXG5cXFwiLCBwYXRoLCBzdHJlcnJvcihlcnIpLCBlcnIpO1xcbitcXHRcXHRyZXR1cm4gLWVycjtcXG4rXFx0fVxcbitcXG4rXFx0bnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xcbitcXHRzYXZlZF9lcnJubyA9IGVycm5vO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcdGlmIChudW13cml0dGVuIFxcdTAwM2MgMCkge1xcbitcXHRcXHRwcmludGYoXFxcIiMgJXM6ICVzICglZClcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSxcXG4rXFx0XFx0ICAgICAgIHNhdmVkX2Vycm5vKTtcXG4rXFx0XFx0cmV0dXJuIC1zYXZlZF9lcnJubztcXG4rXFx0fVxcbitcXHRpZiAobnVtd3JpdHRlbiAhPSAoc3NpemVfdCkoYnVmbGVuIC0gMSkpIHtcXG4rXFx0XFx0cHJpbnRmKFxcXCIjICVzIHdyaXRlKCUuKnMpIGlzIHRydW5jYXRlZCwgZXhwZWN0ZWQgJXp1IGJ5dGVzLCBnb3QgJXpkIGJ5dGVzXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgcGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHZhbDtcXG4rXFx0aW50IGVyciwgcmV0O1xcbitcXHRjaGFyIGJ1ZlsyMV07XFxuK1xcdGNoYXIgKmVuZDtcXG4rXFxuK1xcdGlmICghbnVtKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRlcnJubyA9IDA7XFxuK1xcdHZhbCA9IHN0cnRvdWwoYnVmLCBcXHUwMDI2ZW5kLCAxMCk7XFxuK1xcdGlmIChlcnJubykge1xcbitcXHRcXHRlcnIgPSBlcnJubztcXG4rXFx0XFx0cHJpbnRmKFxcXCIjICVzOiAlcyAoJWQpXFxcXG5cXFwiLCBwYXRoLCBzdHJlcnJvcihlcnIpLCBlcnIpO1xcbitcXHRcXHRyZXR1cm4gLWVycjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGVuZCA9PSBidWYgfHwgYnVmWzBdID09ICctJykge1xcbitcXHRcXHRwcmludGYoXFxcIiMgJXM6IGludmFsaWQgbnVtZXJpYyB2YWx1ZVxcXFxuXFxcIiwgcGF0aCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoKmVuZCA9PSAnXFxcXG4nKVxcbitcXHRcXHRlbmQrKztcXG4rXFxuK1xcdGlmICgqZW5kICE9ICdcXFxcMCcpIHtcXG4rXFx0XFx0cHJpbnRmKFxcXCIjICVzOiBpbnZhbGlkIG51bWVyaWMgdmFsdWVcXFxcblxcXCIsIHBhdGgpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Km51bSA9IHZhbDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXFxuK3tcXG4rXFx0Y2hhciBidWZbMjFdO1xcbitcXG4rXFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIiVsdVxcXCIsIG51bSk7XFxuK1xcdHJldHVybiB3cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgKyAxKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM4NTc2NzkwYTM0MjQ0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmhcXG5AQCAtMCwwICsxLDEyIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKyNpZm5kZWYgX19NTV9GSUxFX1VUSUxTX0hfX1xcbisjZGVmaW5lIF9fTU1fRklMRV9VVElMU19IX19cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRkZWYuaFxcdTAwM2VcXG4rXFxuK2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcXG4raW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcXG4raW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSk7XFxuK2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xcbitcXG4rI2VuZGlmXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbnNpbWlsYXJpdHkgaW5kZXggOTElXFxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbnJlbmFtZSB0byB0b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbmluZGV4IDJlYWIyMTEwYWM2YTQ2Li44ZDllNDQ3MjdlZGJmNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXFxuKysrIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5AQCAtOSwxMSArOSwxNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJmaWxlX3V0aWxzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBUSFBfU1lTRlMgXFxcIi9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL1xcXCJcXG4gI2RlZmluZSBNQVhfU0VUVElOR1NfREVQVEggNFxcbitcXG4rI2lmbmRlZiBBUlJBWV9TSVpFXFxuKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpXFxuKyNlbmRpZlxcbitcXG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3Nfc3RhY2tbTUFYX1NFVFRJTkdTX0RFUFRIXTtcXG4gc3RhdGljIGludCBzZXR0aW5nc19pbmRleDtcXG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2F2ZWRfc2V0dGluZ3M7XFxuQEAgLTYxLDEwICs2Niw5IEBAIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkge1xcbi1cXHRcXHRwZXJyb3IocGF0aCk7XFxuK1xcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4tXFx0fVxcbiBcXG4gXFx0YyA9IHN0cmNocihidWYsICdbJyk7XFxuIFxcdGlmICghYykge1xcbkBAIC0xMDMsMTIgKzEwNywxNSBAQCB2b2lkIHRocF93cml0ZV9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsKVxcbiBcXHRcXHRwcmludGYoXFxcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIFxcdH1cXG4tXFx0d3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICsgMSk7XFxuK1xcdHJldCA9IHdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSArIDEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiB9XFxuIFxcbiB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnVtO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmV0ID0gc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFRIUF9TWVNGUyBcXFwiJXNcXFwiLCBuYW1lKTtcXG5AQCAtMTE2LDcgKzEyMywxMSBAQCB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxcbiBcXHRcXHRwcmludGYoXFxcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIFxcdH1cXG4tXFx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xcbitcXHRyZXQgPSByZWFkX251bShwYXRoLCBcXHUwMDI2bnVtKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFxuK1xcdHJldHVybiBudW07XFxuIH1cXG4gXFxuIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcXG5AQCAtMTI5LDcgKzE0MCw5IEBAIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcXG4gXFx0XFx0cHJpbnRmKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuLVxcdHdyaXRlX251bShwYXRoLCBudW0pO1xcbitcXHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gfVxcbiBcXG4gdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcXG5AQCAtMTU3LDggKzE3MCwxMyBAQCB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxcbiBcXHRcXHQubWF4X3B0ZXNfc2hhcmVkID0gdGhwX3JlYWRfbnVtKFxcXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFxcXCIpLFxcbiBcXHRcXHQucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bShcXFwia2h1Z2VwYWdlZC9wYWdlc190b19zY2FuXFxcIiksXFxuIFxcdH07XFxuLVxcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxcbi1cXHRcXHRzZXR0aW5ncy1cXHUwMDNlcmVhZF9haGVhZF9rYiA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgpO1xcbitcXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xcbitcXHRcXHRpbnQgcmV0ID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcXG4rXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNldHRpbmdzLVxcdTAwM2VyZWFkX2FoZWFkX2tiKTtcXG4rXFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9PUkRFUlM7IGkrKykge1xcbiBcXHRcXHRpZiAoISgoMSBcXHUwMDNjXFx1MDAzYyBpKSBcXHUwMDI2IG9yZGVycykpIHtcXG5AQCAtMjA4LDggKzIyNiwxMyBAQCB2b2lkIHRocF93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcXG4gXFx0dGhwX3dyaXRlX251bShcXFwia2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWRcXFwiLCBraHVnZXBhZ2VkLVxcdTAwM2VtYXhfcHRlc19zaGFyZWQpO1xcbiBcXHR0aHBfd3JpdGVfbnVtKFxcXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cXFwiLCBraHVnZXBhZ2VkLVxcdTAwM2VwYWdlc190b19zY2FuKTtcXG4gXFxuLVxcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxcbi1cXHRcXHR3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgc2V0dGluZ3MtXFx1MDAzZXJlYWRfYWhlYWRfa2IpO1xcbitcXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xcbitcXHRcXHRpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXFxuK1xcdFxcdFxcdFxcdCAgICBzZXR0aW5ncy1cXHUwMDNlcmVhZF9haGVhZF9rYik7XFxuK1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfT1JERVJTOyBpKyspIHtcXG4gXFx0XFx0aWYgKCEoKDEgXFx1MDAzY1xcdTAwM2MgaSkgXFx1MDAyNiBvcmRlcnMpKVxcbkBAIC0zMDYsOCArMzI5LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX3N1cHBvcnRlZF9vcmRlcnMoYm9vbCBpc19zaG1lbSlcXG4gXFx0XFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRpZiAoYWNjZXNzKHBhdGgsIEZfT0spKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcXG4tXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuIFxcdFxcdFxcdG9yZGVycyB8PSAxVUwgXFx1MDAzY1xcdTAwM2MgaTtcXG4gXFx0fVxcbiBcXG5AQCAtMzgyLDggKzQwOCw3IEBAIGludCBkZXRlY3RfaHVnZXRsYl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwgaW50IG1heClcXG4gXFx0XFx0aWYgKHNzY2FuZihlbnRyeS1cXHUwMDNlZF9uYW1lLCBcXFwiaHVnZXBhZ2VzLSV6dWtCXFxcIiwgXFx1MDAyNmtiKSAhPSAxKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0c2l6ZXNbY291bnQrK10gPSBrYiAqIDEwMjQ7XFxuLVxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBrYik7XFxuK1xcdFxcdHByaW50ZihcXFwiIyBbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcXFxcblxcXCIsIGtiKTtcXG4gXFx0fVxcbiBcXHRjbG9zZWRpcihkaXIpO1xcbiBcXHRyZXR1cm4gY291bnQ7XFxuQEAgLTQyNSwyOCArNDUwLDQzIEBAIHN0YXRpYyB2b2lkIGh1Z2V0bGJfc3lzZnNfcGF0aChjaGFyICpidWYsIHNpemVfdCBidWZsZW4sXFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUpXFxuIHtcXG4gXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFx0dW5zaWduZWQgbG9uZyBucjtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFxcXCJucl9odWdlcGFnZXNcXFwiKTtcXG4gXFxuLVxcdHJldHVybiByZWFkX251bShwYXRoKTtcXG4rXFx0cmV0ID0gcmVhZF9udW0ocGF0aCwgXFx1MDAyNm5yKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFxuK1xcdHJldHVybiBucjtcXG4gfVxcbiBcXG4gdm9pZCBodWdldGxiX3NldF9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXFxuIHtcXG4gXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFxcXCJucl9odWdlcGFnZXNcXFwiKTtcXG4gXFxuLVxcdHdyaXRlX251bShwYXRoLCBucik7XFxuK1xcdHJldCA9IHdyaXRlX251bShwYXRoLCBucik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIH1cXG4gXFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4ge1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXFxcImZyZWVfaHVnZXBhZ2VzXFxcIik7XFxuIFxcbi1cXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XFxuK1xcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFxcdTAwMjZucik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcbitcXHRyZXR1cm4gbnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXFxuQEAgLTUwMiw3ICs1NDIsOCBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyBzaXplc1tdLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmIChucl9lbmFibGVkIFxcdTAwM2UgbWF4KSB7XFxuLVxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxcXG5cXFwiLCBucl9lbmFibGVkLCBtYXgpO1xcbitcXHRcXHRwcmludGYoXFxcIiMgZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIG5yX2VuYWJsZWQsIG1heCk7XFxuIFxcdFxcdG5yX2VuYWJsZWQgPSBtYXg7XFxuIFxcdH1cXG4gXFxuQEAgLTU3NCw4ICs2MTUsMTAgQEAgc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQodm9pZClcXG4gXFxuIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3Nfc2lnaGFuZGxlcihpbnQgc2lnKVxcbiB7XFxuK1xcdCh2b2lkKXNpZztcXG4rXFxuIFxcdC8qIGV4aXQoKSB3aWxsIGludm9rZSB0aGUgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQgaGFuZGxlci4gKi9cXG4tXFx0ZXhpdChLU0ZUX0ZBSUwpO1xcbitcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIH1cXG4gXFxuIHZvaWQgaHVnZXBhZ2Vfc2F2ZV9zZXR0aW5ncyhib29sIHRocCwgYm9vbCBodWdldGxiKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXG5zaW1pbGFyaXR5IGluZGV4IDEwMCVcXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXFxucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlXFxuaW5kZXggOTIyODc5ZjkzZmM4NDkuLjE1NGQ3NDBiZTAyZTgyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcXG4rKysgYi90b29scy9tbS8uZ2l0aWdub3JlXFxuQEAgLTIsMyArMiw1IEBAXFxuIHNsYWJpbmZvXFxuIHBhZ2UtdHlwZXNcXG4gcGFnZV9vd25lcl9zb3J0XFxuK3RocF9zd2FwX2FsbG9jYXRvcl90ZXN0XFxuK2d1cF9iZW5jaFxcbmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlXFxuaW5kZXggZjU3MjViNWMyM2FhMjYuLmQ4MmNjOGM0M2VlMDJkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvbW0vTWFrZWZpbGVcXG5AQCAtMywxMyArMywxNCBAQFxcbiAjXFxuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXFxuIFxcbi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XFxuK0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xcbiBcXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcXG4rR1VQX0JFTkNIX09CSlMgPSBndXBfYmVuY2guYyAuLi9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyAuLi9saWIvbW0vZmlsZV91dGlscy5jXFxuIFxcbi1DRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWRcXG4rQ0ZMQUdTICs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1JLi4vLi4gLXB0aHJlYWRcXG4gTERGTEFHUyArPSAkKExJQlMpIC1wdGhyZWFkXFxuIFxcbiBhbGw6ICQoQlVJTERfVEFSR0VUUylcXG5AQCAtMjIsOCArMjMsMTEgQEAgJChMSUJTKTpcXG4gJTogJS5jXFxuIFxcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXFx1MDAzYyAkKExERkxBR1MpXFxuIFxcbitndXBfYmVuY2g6ICQoR1VQX0JFTkNIX09CSlMpICQoTElCUylcXG4rXFx0JChDQykgJChDRkxBR1MpIC1vICRAICQoR1VQX0JFTkNIX09CSlMpICQoTERGTEFHUylcXG4rXFxuIGNsZWFuOlxcbi1cXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitcXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2hcXG4gXFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXFxuIFxcbiBzYmluZGlyID89IC91c3Ivc2JpblxcbmRpZmYgLS1naXQgYS90b29scy9tbS9ndXBfYmVuY2guYyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNDk3YjhmM2Y2YWM0YjRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcXG5AQCAtMCwwICsxLDQ4MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBNaWNyb2JlbmNobWFyayBmb3IgZ2V0X3VzZXJfcGFnZXMgKEdVUCkga2VybmVsIGludGVyZmFjZXMuXFxuKyAqXFxuKyAqIEV4ZXJjaXNlcyBHVVBfRkFTVF9CRU5DSE1BUkssIFBJTl9GQVNUX0JFTkNITUFSSywgYW5kXFxuKyAqIFBJTl9MT05HVEVSTV9CRU5DSE1BUksgdmlhIHRoZSBDT05GSUdfR1VQX1RFU1QgZGVidWdmcyBpbnRlcmZhY2UuXFxuKyAqXFxuKyAqIEV4YW1wbGUgdXNlOlxcbisgKiAgICMgUnVuIHRoZSBmdWxsIG1hdHJpeCAoYWxsIGNvbW1hbmRzLCBhY2Nlc3MgbW9kZXMsIHBhZ2UgY291bnRzKTpcXG4rICogICAuL2d1cF9iZW5jaFxcbisgKlxcbisgKiAgICMgU2luZ2xlIHJ1bjogcGluX3VzZXJfcGFnZXNfZmFzdCwgNTEyIHBhZ2VzLCB3cml0ZSBhY2Nlc3MsIGh1Z2V0bGI6XFxuKyAqICAgLi9ndXBfYmVuY2ggLWEgLW4gNTEyIC13IC1IXFxuKyAqXFxuKyAqIFJlcXVpcmVzIENPTkZJR19HVVBfVEVTVD15IGFuZCBkZWJ1Z2ZzIG1vdW50ZWQgYXQgL3N5cy9rZXJuZWwvZGVidWcuXFxuKyAqIE11c3QgYmUgcnVuIGFzIHJvb3QuXFxuKyAqL1xcbitcXG4rI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NkaXJlbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9pb2N0bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYXRvbWljLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NtbS9ndXBfdGVzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgTUIgKDFVTCBcXHUwMDNjXFx1MDAzYyAyMClcXG4rXFxuKyNpZm5kZWYgQVJSQVlfU0laRVxcbisjZGVmaW5lIEFSUkFZX1NJWkUoYXJyKSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKVxcbisjZW5kaWZcXG4rXFxuKy8qIEp1c3QgdGhlIGZsYWdzIHdlIG5lZWQsIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgaW50ZXJuYWxzLiAqL1xcbisjZGVmaW5lIEZPTExfV1JJVEVcXHQweDAxXFx0LyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovXFxuK1xcbisjZGVmaW5lIEdVUF9URVNUX0ZJTEUgXFxcIi9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0XFxcIlxcbitcXG4rc3RhdGljIHVuc2lnbmVkIGludCBwc2l6ZSh2b2lkKVxcbit7XFxuK1xcdHN0YXRpYyB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7XFxuK1xcbitcXHRpZiAoIV9fcGFnZV9zaXplKVxcbitcXHRcXHRfX3BhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTtcXG4rXFx0cmV0dXJuIF9fcGFnZV9zaXplO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbWQ7XFxuK3N0YXRpYyBjb25zdCBjaGFyICpiZW5jaF9sYWJlbDtcXG4rc3RhdGljIGludCBndXBfZmQsIHJlcGVhdHMgPSAxO1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7XFxuK3N0YXRpYyBhdG9taWNfaW50IGJlbmNoX2Vycm9yO1xcbisvKiBTZXJpYWxpemUgcHJpbnRzICovXFxuK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgcHJpbnRfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xcbitcXG4rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgYmVuY2hfY21kc1tdID0ge1xcbitcXHRHVVBfRkFTVF9CRU5DSE1BUkssXFxuK1xcdFBJTl9GQVNUX0JFTkNITUFSSyxcXG4rXFx0UElOX0xPTkdURVJNX0JFTkNITUFSSyxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBpbnQgYmVuY2hfdGhwX21vZGVzW10gPSB7IDEsIDAgfTtcXHQvKiBvbiwgb2ZmICovXFxuK3N0YXRpYyBjb25zdCBpbnQgYmVuY2hfbnJfcGFnZXNfbGlzdFtdID0geyAxLCA1MTIsIDEyMywgLTEgfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICpjbWRfdG9fc3RyKHVuc2lnbmVkIGxvbmcgY21kKVxcbit7XFxuK1xcdHN3aXRjaCAoY21kKSB7XFxuK1xcdGNhc2UgR1VQX0ZBU1RfQkVOQ0hNQVJLOlxcbitcXHRcXHRyZXR1cm4gXFxcIkdVUF9GQVNUX0JFTkNITUFSS1xcXCI7XFxuK1xcdGNhc2UgUElOX0ZBU1RfQkVOQ0hNQVJLOlxcbitcXHRcXHRyZXR1cm4gXFxcIlBJTl9GQVNUX0JFTkNITUFSS1xcXCI7XFxuK1xcdGNhc2UgUElOX0xPTkdURVJNX0JFTkNITUFSSzpcXG4rXFx0XFx0cmV0dXJuIFxcXCJQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXFxcIjtcXG4rXFx0fVxcbitcXHRyZXR1cm4gXFxcIlVua25vd24gY29tbWFuZFxcXCI7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIHBhcnNlX2xvbmdfYXJnX2Jhc2UoY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgYmFzZSlcXG4re1xcbitcXHRjaGFyICplbmQ7XFxuK1xcdGxvbmcgdmFsO1xcbitcXG4rXFx0ZXJybm8gPSAwO1xcbitcXHR2YWwgPSBzdHJ0b2woYXJnLCBcXHUwMDI2ZW5kLCBiYXNlKTtcXG4rXFx0aWYgKGVycm5vIHx8IGVuZCA9PSBhcmcgfHwgKmVuZCAhPSAnXFxcXDAnKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiSW52YWxpZCAlcyAnJXMnXFxcXG5cXFwiLCBuYW1lLCBhcmcpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK1xcdHJldHVybiB2YWw7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIHBhcnNlX2xvbmdfYXJnKGNvbnN0IGNoYXIgKmFyZywgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRyZXR1cm4gcGFyc2VfbG9uZ19hcmdfYmFzZShhcmcsIG5hbWUsIDEwKTtcXG4rfVxcbitcXG4rc3RhdGljIGxvbmcgcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcoY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGxvbmcgdmFsID0gcGFyc2VfbG9uZ19hcmcoYXJnLCBuYW1lKTtcXG4rXFxuK1xcdGlmICh2YWwgXFx1MDAzYyAxKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiSW52YWxpZCAlcyAnJXMnXFxcXG5cXFwiLCBuYW1lLCBhcmcpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdmFsO1xcbit9XFxuK1xcbitzdHJ1Y3QgYmVuY2hfcnVuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBjbWQ7XFxuK1xcdGludCB0aHA7XFx0XFx0LyogLTE6IGRlZmF1bHQsIDA6IG9mZiwgMTogb24gKi9cXG4rXFx0Ym9vbCBodWdldGxiO1xcbitcXHRib29sIHdyaXRlO1xcdFxcdC8qIHdoZXRoZXIgdG8gc2V0IEZPTExfV1JJVEUgKi9cXG4rXFx0Ym9vbCBzaGFyZWQ7XFxuK1xcdGludCBucl9wYWdlcztcXHRcXHQvKiAtMSBtZWFucyBhbGwgcGFnZXMgKHNpemUgLyBwc2l6ZSgpKSAqL1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuK1xcdGNoYXIgKmZpbGU7XFxuK1xcdGludCBudGhyZWFkcztcXG4rXFx0dW5zaWduZWQgaW50IGd1cF9mbGFncztcXG4rfTtcXG4rXFxuK3ZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0gKihzdHJ1Y3QgZ3VwX3Rlc3QgKilkYXRhO1xcbitcXHRpbnQgaSwgc3RhdHVzO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJlcGVhdHM7IGkrKykge1xcbitcXHRcXHRndXAuc2l6ZSA9IHNpemU7XFxuK1xcdFxcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcXHUwMDI2Z3VwKTtcXG4rXFx0XFx0aWYgKHN0YXR1cykge1xcbitcXHRcXHRcXHRiZW5jaF9lcnJvciA9IDE7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNnByaW50X211dGV4KTtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlcyB0aW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1xcXCIsXFxuK1xcdFxcdCAgICAgICBiZW5jaF9sYWJlbCwgZ3VwLmdldF9kZWx0YV91c2VjLFxcbitcXHRcXHQgICAgICAgZ3VwLnB1dF9kZWx0YV91c2VjKTtcXG4rXFx0XFx0aWYgKGd1cC5zaXplICE9IHNpemUpXFxuK1xcdFxcdFxcdHByaW50ZihcXFwiLCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxcIiwgZ3VwLnNpemUpO1xcbitcXHRcXHRwcmludGYoXFxcIlxcXFxuXFxcIik7XFxuK1xcdFxcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFxcdTAwMjZwcmludF9tdXRleCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ1bl9iZW5jaChzdHJ1Y3QgYmVuY2hfcnVuICpydW4pXFxuK3tcXG4rXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xcbitcXHRpbnQgemVyb19mZCwgaSwgcmV0LCBzdGFydGVkX3RocmVhZHMgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzX3Blcl9jYWxsO1xcbitcXHRpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURTtcXG4rXFx0cHRocmVhZF90ICp0aWQ7XFxuK1xcdGNoYXIgbGFiZWxbMTI4XTtcXG4rXFx0Y2hhciAqcDtcXG4rXFx0Ym9vbCByZXN0b3JlX2h1Z2V0bGIgPSBmYWxzZTtcXG4rXFxuK1xcdC8qIFNldCBnbG9iYWxzIGNvbnN1bWVkIGJ5IGd1cF90aHJlYWQgKi9cXG4rXFx0Y21kID0gcnVuLVxcdTAwM2VjbWQ7XFxuK1xcdHNpemUgPSBydW4tXFx1MDAzZXNpemU7XFxuK1xcdGJlbmNoX2Vycm9yID0gMDtcXG4rXFxuK1xcdGlmIChydW4tXFx1MDAzZWh1Z2V0bGIpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xcbitcXG4rXFx0XFx0aWYgKCFocF9zaXplKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiQ291bGQgbm90IGRldGVybWluZSBodWdlIHBhZ2Ugc2l6ZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIFVMT05HX01BWCAtIChocF9zaXplIC0gMSkpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJIdWdlVExCIG1hcHBpbmcgc2l6ZSBpcyB0b28gbGFyZ2VcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0c2l6ZSA9IChzaXplICsgaHBfc2l6ZSAtIDEpIFxcdTAwMjYgfihocF9zaXplIC0gMSk7XFxuK1xcdFxcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXN0b3JlX2h1Z2V0bGIgPSB0cnVlO1xcbitcXHRcXHRmbGFncyB8PSAoTUFQX0hVR0VUTEIgfCBNQVBfQU5PTllNT1VTKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJ1bi1cXHUwMDNlc2hhcmVkKSB7XFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5NQVBfUFJJVkFURTtcXG4rXFx0XFx0ZmxhZ3MgfD0gTUFQX1NIQVJFRDtcXG4rXFx0fVxcbitcXG4rXFx0bnJfcGFnZXNfcGVyX2NhbGwgPSBydW4tXFx1MDAzZW5yX3BhZ2VzIFxcdTAwM2MgMCA/IHNpemUgLyBwc2l6ZSgpIDpcXG4rXFx0XFx0KHVuc2lnbmVkIGxvbmcpcnVuLVxcdTAwM2Vucl9wYWdlcztcXG4rXFxuK1xcdGlmIChucl9wYWdlc19wZXJfY2FsbCBcXHUwMDNlIFVJTlRfTUFYKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiUGFnZSBjb3VudCBpcyB0b28gbGFyZ2VcXFxcblxcXCIpO1xcbitcXHRcXHRpZiAocmVzdG9yZV9odWdldGxiKVxcbitcXHRcXHRcXHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfcGVyX2NhbGw7XFxuK1xcbitcXHRndXAuZ3VwX2ZsYWdzID0gcnVuLVxcdTAwM2VndXBfZmxhZ3M7XFxuK1xcdGlmIChydW4tXFx1MDAzZXdyaXRlKVxcbitcXHRcXHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XFxuK1xcbitcXHRzbnByaW50ZihsYWJlbCwgc2l6ZW9mKGxhYmVsKSwgXFxcIiVzIChucl9wYWdlcz0lLTR1ICVzICVzICVzICVzKVxcXCIsXFxuK1xcdFxcdCBjbWRfdG9fc3RyKHJ1bi1cXHUwMDNlY21kKSxcXG4rXFx0XFx0IGd1cC5ucl9wYWdlc19wZXJfY2FsbCxcXG4rXFx0XFx0IHJ1bi1cXHUwMDNld3JpdGUgID8gXFxcIndyaXRlXFxcIiAgIDogXFxcInJlYWRcXFwiLFxcbitcXHRcXHQgcnVuLVxcdTAwM2VzaGFyZWQgPyBcXFwic2hhcmVkXFxcIiAgOiBcXFwicHJpdmF0ZVxcXCIsXFxuK1xcdFxcdCBydW4tXFx1MDAzZWh1Z2V0bGIgPyBcXFwiaHVnZXRsYj1vblxcXCIgOiBcXFwiaHVnZXRsYj1vZmZcXFwiLFxcbitcXHRcXHQgcnVuLVxcdTAwM2VodWdldGxiID8gXFxcInRocD1vZmZcXFwiIDpcXG4rXFx0XFx0IChydW4tXFx1MDAzZXRocCA9PSAxID8gXFxcInRocD1vblxcXCIgOlxcbitcXHRcXHQgKHJ1bi1cXHUwMDNldGhwID09IDAgPyBcXFwidGhwPW9mZlxcXCIgOiBcXFwidGhwPWRlZmF1bHRcXFwiKSkpO1xcbitcXHRiZW5jaF9sYWJlbCA9IGxhYmVsO1xcbitcXG4rXFx0emVyb19mZCA9IG9wZW4ocnVuLVxcdTAwM2VmaWxlLCBPX1JEV1IpO1xcbitcXHRpZiAoemVyb19mZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIHJ1bi1cXHUwMDNlZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0XFx0aWYgKHJlc3RvcmVfaHVnZXRsYilcXG4rXFx0XFx0XFx0aHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuK1xcbitcXHRwID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncywgemVyb19mZCwgMCk7XFxuK1xcdGNsb3NlKHplcm9fZmQpO1xcbitcXHRpZiAocCA9PSBNQVBfRkFJTEVEKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibW1hcDogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdGlmIChyZXN0b3JlX2h1Z2V0bGIpXFxuK1xcdFxcdFxcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7XFxuK1xcbitcXHRpZiAocnVuLVxcdTAwM2V0aHAgPT0gMSlcXG4rXFx0XFx0bWFkdmlzZShwLCBzaXplLCBNQURWX0hVR0VQQUdFKTtcXG4rXFx0ZWxzZSBpZiAocnVuLVxcdTAwM2V0aHAgPT0gMClcXG4rXFx0XFx0bWFkdmlzZShwLCBzaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbitcXG4rXFx0LyogRmF1bHQgdGhlbSBpbiBoZXJlLCBmcm9tIHVzZXIgc3BhY2UuICovXFxuK1xcdGZvciAoOyAodW5zaWduZWQgbG9uZylwIFxcdTAwM2MgZ3VwLmFkZHIgKyBzaXplOyBwICs9IHBzaXplKCkpXFxuK1xcdFxcdHBbMF0gPSAwO1xcbitcXG4rXFx0dGlkID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogcnVuLVxcdTAwM2VudGhyZWFkcyk7XFxuK1xcdGlmICghdGlkKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlICVkIHRocmVhZHM6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRydW4tXFx1MDAzZW50aHJlYWRzLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHRtdW5tYXAoKHZvaWQgKilndXAuYWRkciwgc2l6ZSk7XFxuK1xcdFxcdGlmIChyZXN0b3JlX2h1Z2V0bGIpXFxuK1xcdFxcdFxcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJ1bi1cXHUwMDNlbnRocmVhZHM7IGkrKykge1xcbitcXHRcXHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCBcXHUwMDI2Z3VwKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInB0aHJlYWRfY3JlYXRlIGZhaWxlZDogJXNcXFxcblxcXCIsIHN0cmVycm9yKHJldCkpO1xcbitcXHRcXHRcXHRiZW5jaF9lcnJvciA9IDE7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdHN0YXJ0ZWRfdGhyZWFkcysrO1xcbitcXHR9XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzdGFydGVkX3RocmVhZHM7IGkrKykge1xcbitcXHRcXHRyZXQgPSBwdGhyZWFkX2pvaW4odGlkW2ldLCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInB0aHJlYWRfam9pbiBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihyZXQpKTtcXG4rXFx0XFx0XFx0YmVuY2hfZXJyb3IgPSAxO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGZyZWUodGlkKTtcXG4rXFx0bXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpO1xcbitcXHRpZiAocmVzdG9yZV9odWdldGxiKVxcbitcXHRcXHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcXG4rXFxuK1xcdHJldHVybiBiZW5jaF9lcnJvciA/IDEgOiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ1bl9tYXRyaXgodm9pZClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgYywgdCwgdywgcywgbjtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRmb3IgKGMgPSAwOyBjIFxcdTAwM2MgQVJSQVlfU0laRShiZW5jaF9jbWRzKTsgYysrKSB7XFxuK1xcdFxcdGZvciAodyA9IDA7IHcgXFx1MDAzYz0gMTsgdysrKSB7XFxuK1xcdFxcdFxcdGZvciAocyA9IDA7IHMgXFx1MDAzYz0gMTsgcysrKSB7XFxuK1xcdFxcdFxcdFxcdGZvciAodCA9IDA7IHQgXFx1MDAzYyBBUlJBWV9TSVpFKGJlbmNoX3RocF9tb2Rlcyk7IHQrKykge1xcbitcXHRcXHRcXHRcXHRcXHRmb3IgKG4gPSAwOyBuIFxcdTAwM2MgQVJSQVlfU0laRShiZW5jaF9ucl9wYWdlc19saXN0KTsgbisrKSB7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBiZW5jaF9ydW4gcnVuID0ge1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQuY21kXFx0ICA9IGJlbmNoX2NtZHNbY10sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdC50aHBcXHQgID0gYmVuY2hfdGhwX21vZGVzW3RdLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQuaHVnZXRsYiAgPSBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0LndyaXRlXFx0ICA9IHcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdC5zaGFyZWRcXHQgID0gcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0Lm5yX3BhZ2VzID0gYmVuY2hfbnJfcGFnZXNfbGlzdFtuXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0LnNpemVcXHQgID0gMTI4ICogTUIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdC5maWxlXFx0ICA9IFxcXCIvZGV2L3plcm9cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQubnRocmVhZHMgPSAxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR9O1xcbitcXHRcXHRcXHRcXHRcXHRcXHRyZXQgfD0gcnVuX2JlbmNoKFxcdTAwMjZydW4pO1xcbitcXHRcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0LyogaHVnZXRsYjogMjU2TSB0byBtYXRjaCBydW5fZ3VwX21hdHJpeCgpIGluIHJ1bl92bXRlc3RzLnNoICovXFxuK1xcdFxcdFxcdFxcdGZvciAobiA9IDA7IG4gXFx1MDAzYyBBUlJBWV9TSVpFKGJlbmNoX25yX3BhZ2VzX2xpc3QpOyBuKyspIHtcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJlbmNoX3J1biBydW4gPSB7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdC5jbWRcXHQgID0gYmVuY2hfY21kc1tjXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0LnRocFxcdCAgPSAtMSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Lmh1Z2V0bGIgID0gdHJ1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0LndyaXRlXFx0ICA9IHcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdC5zaGFyZWRcXHQgID0gcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Lm5yX3BhZ2VzID0gYmVuY2hfbnJfcGFnZXNfbGlzdFtuXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0LnNpemVcXHQgID0gMjU2ICogTUIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdC5maWxlXFx0ICA9IFxcXCIvZGV2L3plcm9cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQubnRocmVhZHMgPSAxLFxcbitcXHRcXHRcXHRcXHRcXHR9O1xcbitcXHRcXHRcXHRcXHRcXHRyZXQgfD0gcnVuX2JlbmNoKFxcdTAwMjZydW4pO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4re1xcbitcXHRzdHJ1Y3QgYmVuY2hfcnVuIHJ1biA9IHtcXG4rXFx0XFx0LmNtZFxcdCAgPSBHVVBfRkFTVF9CRU5DSE1BUkssXFxuK1xcdFxcdC50aHBcXHQgID0gLTEsXFxuK1xcdFxcdC5odWdldGxiICA9IGZhbHNlLFxcbitcXHRcXHQud3JpdGVcXHQgID0gdHJ1ZSxcXG4rXFx0XFx0LnNoYXJlZFxcdCAgPSBmYWxzZSxcXG4rXFx0XFx0Lm5yX3BhZ2VzID0gMSxcXG4rXFx0XFx0LnNpemVcXHQgID0gMTI4ICogTUIsXFxuK1xcdFxcdC5maWxlXFx0ICA9IFxcXCIvZGV2L3plcm9cXFwiLFxcbitcXHRcXHQubnRocmVhZHMgPSAxLFxcbitcXHR9O1xcbitcXHRpbnQgb3B0LCByZXN1bHQ7XFxuK1xcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwibTpyOm46RjpmOmFqOnRUTHV3V1NIXFxcIikpICE9IC0xKSB7XFxuK1xcdFxcdHN3aXRjaCAob3B0KSB7XFxuK1xcdFxcdC8qIENvbW1hbmQgc2VsZWN0aW9uICovXFxuK1xcdFxcdGNhc2UgJ3UnOlxcbitcXHRcXHRcXHRydW4uY21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnYSc6XFxuK1xcdFxcdFxcdHJ1bi5jbWQgPSBQSU5fRkFTVF9CRU5DSE1BUks7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdMJzpcXG4rXFx0XFx0XFx0cnVuLmNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LyogTWVtb3J5IHR5cGUgKi9cXG4rXFx0XFx0Y2FzZSAnSCc6XFxuK1xcdFxcdFxcdHJ1bi5odWdldGxiID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ3QnOlxcbitcXHRcXHRcXHRydW4udGhwID0gMTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ1QnOlxcbitcXHRcXHRcXHRydW4udGhwID0gMDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHQvKiBBY2Nlc3MgbW9kZSAqL1xcbitcXHRcXHRjYXNlICd3JzpcXG4rXFx0XFx0XFx0cnVuLndyaXRlID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ1cnOlxcbitcXHRcXHRcXHRydW4ud3JpdGUgPSBmYWxzZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ1MnOlxcbitcXHRcXHRcXHRydW4uc2hhcmVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHQvKiBNYXBwaW5nICovXFxuK1xcdFxcdGNhc2UgJ2YnOlxcbitcXHRcXHRcXHRydW4uZmlsZSA9IG9wdGFyZztcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHQvKiBTaXppbmcgYW5kIGl0ZXJhdGlvbiAqL1xcbitcXHRcXHRjYXNlICdtJzpcXG4rXFx0XFx0XFx0cnVuLnNpemUgPSBwYXJzZV9wb3NpdGl2ZV9sb25nX2FyZyhvcHRhcmcsIFxcXCJzaXplXFxcIik7XFxuK1xcdFxcdFxcdGlmIChydW4uc2l6ZSBcXHUwMDNlIFVMT05HX01BWCAvIE1CKSB7XFxuK1xcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiSW52YWxpZCBzaXplICclcydcXFxcblxcXCIsIG9wdGFyZyk7XFxuK1xcdFxcdFxcdFxcdGV4aXQoMSk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cnVuLnNpemUgKj0gTUI7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICduJzoge1xcbitcXHRcXHRcXHRsb25nIHZhbDtcXG4rXFxuK1xcdFxcdFxcdHZhbCA9IHBhcnNlX2xvbmdfYXJnKG9wdGFyZywgXFxcInBhZ2UgY291bnRcXFwiKTtcXG4rXFx0XFx0XFx0aWYgKHZhbCAhPSAtMSBcXHUwMDI2XFx1MDAyNiAodmFsIFxcdTAwM2MgMSB8fCB2YWwgXFx1MDAzZSBJTlRfTUFYKSkge1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkludmFsaWQgcGFnZSBjb3VudCAnJXMnXFxcXG5cXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRcXHRleGl0KDEpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJ1bi5ucl9wYWdlcyA9IHZhbDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y2FzZSAncic6IHtcXG4rXFx0XFx0XFx0bG9uZyB2YWw7XFxuK1xcbitcXHRcXHRcXHR2YWwgPSBwYXJzZV9wb3NpdGl2ZV9sb25nX2FyZyhvcHRhcmcsIFxcXCJyZXBlYXQgY291bnRcXFwiKTtcXG4rXFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNlIElOVF9NQVgpIHtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJJbnZhbGlkIHJlcGVhdCBjb3VudCAnJXMnXFxcXG5cXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRcXHRleGl0KDEpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJlcGVhdHMgPSB2YWw7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNhc2UgJ2onOiB7XFxuK1xcdFxcdFxcdGxvbmcgdmFsO1xcbitcXG4rXFx0XFx0XFx0dmFsID0gcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcob3B0YXJnLCBcXFwidGhyZWFkIGNvdW50XFxcIik7XFxuK1xcdFxcdFxcdGlmICh2YWwgXFx1MDAzZSBJTlRfTUFYIHx8XFxuK1xcdFxcdFxcdCAgICAoc2l6ZV90KXZhbCBcXHUwMDNlIFNJWkVfTUFYIC8gc2l6ZW9mKHB0aHJlYWRfdCkpIHtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJJbnZhbGlkIHRocmVhZCBjb3VudCAnJXMnXFxcXG5cXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRcXHRleGl0KDEpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJ1bi5udGhyZWFkcyA9IHZhbDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIEFkdmFuY2VkICovXFxuK1xcdFxcdGNhc2UgJ0YnOiB7XFxuK1xcdFxcdFxcdGxvbmcgdmFsO1xcbitcXG4rXFx0XFx0XFx0dmFsID0gcGFyc2VfbG9uZ19hcmdfYmFzZShvcHRhcmcsIFxcXCJHVVAgZmxhZ3NcXFwiLCAwKTtcXG4rXFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNjIDAgfHwgdmFsIFxcdTAwM2UgVUlOVF9NQVgpIHtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJJbnZhbGlkIEdVUCBmbGFncyAnJXMnXFxcXG5cXFwiLCBvcHRhcmcpO1xcbitcXHRcXHRcXHRcXHRleGl0KDEpO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRydW4uZ3VwX2ZsYWdzID0gdmFsO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJXcm9uZyBhcmd1bWVudFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGV4aXQoMSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9wdGluZCAhPSBhcmdjKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiVW5leHBlY3RlZCBhcmd1bWVudCAnJXMnXFxcXG5cXFwiLCBhcmd2W29wdGluZF0pO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK1xcbitcXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XFxuK1xcdGlmIChndXBfZmQgPT0gLTEpIHtcXG4rXFx0XFx0aWYgKGVycm5vID09IEVBQ0NFUykge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlBsZWFzZSBydW4gYXMgcm9vdFxcXFxuXFxcIik7XFxuK1xcdFxcdH0gZWxzZSBpZiAoZXJybm8gPT0gRU5PRU5UKSB7XFxuK1xcdFxcdFxcdERJUiAqZGVidWdmcyA9IG9wZW5kaXIoXFxcIi9zeXMva2VybmVsL2RlYnVnXFxcIik7XFxuK1xcbitcXHRcXHRcXHRpZiAoIWRlYnVnZnMpIHtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0Y2xvc2VkaXIoZGVidWdmcyk7XFxuK1xcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiQ2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxcXG5cXFwiLCBHVVBfVEVTVF9GSUxFLFxcbitcXHRcXHRcXHRcXHRzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGV4aXQoMSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJlc3VsdCA9IChhcmdjID09IDEpID8gcnVuX21hdHJpeCgpIDogcnVuX2JlbmNoKFxcdTAwMjZydW4pO1xcbitcXHRjbG9zZShndXBfZmQpO1xcbitcXHRyZXR1cm4gcmVzdWx0O1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5pbmRleCBlNmRmOTY4ZjA5NzFjOC4uZTc3YzRjYzQxYjQ3MDMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbkBAIC0zNyw3ICszNyw4IEBAIGVuZGlmXFxuICMgTERMSUJTLlxcbiBNQUtFRkxBR1MgKz0gLS1uby1idWlsdGluLXJ1bGVzXFxuIFxcbi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxcbitDRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAtSSAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYlxcbitDRkxBR1MgKz0gJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUylcXG4gQ0ZMQUdTICs9IC1XdW5yZWFjaGFibGUtY29kZVxcbiBMRExJQlMgPSAtbHJ0IC1scHRocmVhZCAtbG1cXG4gXFxuQEAgLTE4Nyw4ICsxODgsMTAgQEAgVEVTVF9GSUxFUyArPSB3cml0ZV9odWdldGxiX21lbW9yeS5zaFxcbiBcXG4gaW5jbHVkZSAuLi9saWIubWtcXG4gXFxuLSQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcXG4rJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXFxcXG4rXFx0XFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXFxuKyQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcXFxcXFxuK1xcdFxcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xcbiBcXG4gJChPVVRQVVQpL3VmZmQtc3RyZXNzOiB1ZmZkLWNvbW1vbi5jXFxuICQoT1VUUFVUKS91ZmZkLXVuaXQtdGVzdHM6IHVmZmQtY29tbW9uLmNcXG5AQCAtMjE3LDcgKzIyMCw3IEBAICQoQklOQVJJRVNfMzIpOiBDRkxBR1MgKz0gLW0zMiAtbXhzYXZlXFxuICQoQklOQVJJRVNfMzIpOiBMRExJQlMgKz0gLWxydCAtbGRsIC1sbVxcbiAkKEJJTkFSSUVTXzMyKTogJChPVVRQVVQpLyVfMzI6ICUuY1xcbiBcXHQkKGNhbGwgbXNnLENDLCwkQClcXG4tXFx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxcbitcXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTMyLCQodCkpKSlcXG4gZW5kaWZcXG4gXFxuQEAgLTIyNiw3ICsyMjksNyBAQCAkKEJJTkFSSUVTXzY0KTogQ0ZMQUdTICs9IC1tNjQgLW14c2F2ZVxcbiAkKEJJTkFSSUVTXzY0KTogTERMSUJTICs9IC1scnQgLWxkbFxcbiAkKEJJTkFSSUVTXzY0KTogJChPVVRQVVQpLyVfNjQ6ICUuY1xcbiBcXHQkKGNhbGwgbXNnLENDLCwkQClcXG4tXFx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxcbitcXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTY0LCQodCkpKSlcXG4gZW5kaWZcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcXG5pbmRleCA1YjU4MjU4OGUwMTVkNC4uYjJlYWE0OTBlN2MyNTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xcbkBAIC0xNSw5ICsxNSw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBNQVBfU0laRV9NQlxcdDEwMFxcbiAjZGVmaW5lIE1BUF9TSVpFXFx0KE1BUF9TSVpFX01CICogMTAyNCAqIDEwMjQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG5pbmRleCAwYzYyN2VhODlmZjdiMi4uM2MzZDEyOWM5MWIyOWQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xcbkBAIC0yOSw3ICsyOSw2IEBAXFxuICNpbmNsdWRlIFxcXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXFxuaW5kZXggNjMyOWUzN2ZmZjRjOTQuLjQ5NmI3NGIzNzQ3NmIzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG5AQCAtMjUsNyArMjUsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiB1aW50NjRfdCBwYWdlX3NpemU7XFxuIHVpbnQ2NF90IHBtZF9wYWdlc2l6ZTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXFxuaW5kZXggYjIxZGYzMDQwYjFjN2MuLmVkOTY3YjNjN2YzNzA0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xcbkBAIC0yMSw3ICsyMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdWlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXFwiLi4vcGlkZmQvcGlkZmQuaFxcXCJcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG5pbmRleCBlYjg5NjNlOWQ5OGYwNi4uNjhjODQwYmFlMDgyMDggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xcbkBAIC0yOSw3ICsyOSw2IEBAXFxuICNpbmNsdWRlIFxcXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcXG4gc3RhdGljIGludCBucl9odWdldGxic2l6ZXM7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxuaW5kZXggM2Y4NDFhOTZmODcwNjguLmQ5Y2FhOWZiOGI3ODU2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxuQEAgLTEsMjc1ICsxLDQ0MyBAQFxcbiAjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyAvLyBVc2UgbGw2NFxcbiAjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRib29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZGlyZW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvaW9jdGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2Nhc3NlcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY21tL2d1cF90ZXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiBcXG4gI2RlZmluZSBNQiAoMVVMIFxcdTAwM2NcXHUwMDNjIDIwKVxcbiBcXG4rI2lmbmRlZiBBUlJBWV9TSVpFXFxuKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpXFxuKyNlbmRpZlxcbitcXG4gLyogSnVzdCB0aGUgZmxhZ3Mgd2UgbmVlZCwgY29waWVkIGZyb20gdGhlIGtlcm5lbCBpbnRlcm5hbHMuICovXFxuICNkZWZpbmUgRk9MTF9XUklURVxcdDB4MDFcXHQvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi9cXG4gXFxuKy8qIFBhZ2UgY291bnRzIGV4ZXJjaXNpbmcgc2luZ2xlLCBUSFAtYmF0Y2gsIHBhcnRpYWwsIGFuZCBmdWxsLW1hcHBpbmcgR1VQLiAqL1xcbitzdGF0aWMgY29uc3QgaW50IG5yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07XFxuK1xcbiAjZGVmaW5lIEdVUF9URVNUX0ZJTEUgXFxcIi9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0XFxcIlxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgY21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xcbi1zdGF0aWMgaW50IGd1cF9mZCwgcmVwZWF0cyA9IDE7XFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNpemUgPSAxMjggKiBNQjtcXG4tLyogU2VyaWFsaXplIHByaW50cyAqL1xcbi1zdGF0aWMgcHRocmVhZF9tdXRleF90IHByaW50X211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjtcXG4rRklYVFVSRShndXBfdGVzdClcXG4re1xcbitcXHRpbnQgZ3VwX2ZkO1xcbitcXHRjaGFyICphZGRyO1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpXFxuK3tcXG4rXFx0Ym9vbCB0aHA7XFxuK1xcdGJvb2wgaHVnZXRsYjtcXG4rXFx0Ym9vbCB3cml0ZTtcXG4rXFx0Ym9vbCBzaGFyZWQ7XFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkb25seSlcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocClcXG4re1xcbitcXHQudGhwID0gdHJ1ZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkb25seV90aHApXFxuK3tcXG4rXFx0LnRocCA9IHRydWUsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IHRydWUsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZG9ubHlfaHVnZXRsYilcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gdHJ1ZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZSlcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRvbmx5KVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocClcXG4re1xcbitcXHQudGhwID0gdHJ1ZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuIFxcbi1zdGF0aWMgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZClcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRvbmx5X3RocClcXG4ge1xcbi1cXHRzd2l0Y2ggKGNtZCkge1xcbi1cXHRjYXNlIEdVUF9GQVNUX0JFTkNITUFSSzpcXG4tXFx0XFx0cmV0dXJuIFxcXCJHVVBfRkFTVF9CRU5DSE1BUktcXFwiO1xcbi1cXHRjYXNlIFBJTl9GQVNUX0JFTkNITUFSSzpcXG4tXFx0XFx0cmV0dXJuIFxcXCJQSU5fRkFTVF9CRU5DSE1BUktcXFwiO1xcbi1cXHRjYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6XFxuLVxcdFxcdHJldHVybiBcXFwiUElOX0xPTkdURVJNX0JFTkNITUFSS1xcXCI7XFxuLVxcdGNhc2UgR1VQX0JBU0lDX1RFU1Q6XFxuLVxcdFxcdHJldHVybiBcXFwiR1VQX0JBU0lDX1RFU1RcXFwiO1xcbi1cXHRjYXNlIFBJTl9CQVNJQ19URVNUOlxcbi1cXHRcXHRyZXR1cm4gXFxcIlBJTl9CQVNJQ19URVNUXFxcIjtcXG4tXFx0Y2FzZSBEVU1QX1VTRVJfUEFHRVNfVEVTVDpcXG4tXFx0XFx0cmV0dXJuIFxcXCJEVU1QX1VTRVJfUEFHRVNfVEVTVFxcXCI7XFxuK1xcdC50aHAgPSB0cnVlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSBmYWxzZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYilcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gdHJ1ZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZG9ubHlfaHVnZXRsYilcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gdHJ1ZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChndXBfdGVzdClcXG4re1xcbitcXHRpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFO1xcbitcXHRpbnQgemVyb19mZDtcXG4rXFx0Y2hhciAqcDtcXG4rXFxuK1xcdC8qIHplcm9fZmQgaGFzIHRvIGJlIFxcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cXG4rXFx0emVyb19mZCA9IG9wZW4oXFxcIi9kZXYvemVyb1xcXCIsIE9fUkRXUik7XFxuK1xcdEFTU0VSVF9HRSh6ZXJvX2ZkLCAwKTtcXG4rXFxuK1xcdC8qIGd1cF9mZCBoYXMgdG8gYmUgXFx1MDAzZT0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqL1xcbitcXHRzZWxmLVxcdTAwM2VndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XFxuK1xcdEFTU0VSVF9HRShzZWxmLVxcdTAwM2VndXBfZmQsIDApO1xcbitcXG4rXFx0c2VsZi1cXHUwMDNlc2l6ZSA9IHZhcmlhbnQtXFx1MDAzZWh1Z2V0bGIgPyAyNTYgKiBNQiA6IDEyOCAqIE1CO1xcbitcXG4rXFx0LyogQ2hlY2sgZm9yIGh1Z2V0bGIgKi9cXG4rXFx0aWYgKHZhcmlhbnQtXFx1MDAzZWh1Z2V0bGIpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xcbitcXG4rXFx0XFx0aWYgKCFocF9zaXplKSB7XFxuK1xcdFxcdFxcdGNsb3NlKHplcm9fZmQpO1xcbitcXHRcXHRcXHRjbG9zZShzZWxmLVxcdTAwM2VndXBfZmQpO1xcbitcXHRcXHRcXHRTS0lQKHJldHVybiwgXFxcIkh1Z2VUTEIgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHNlbGYtXFx1MDAzZXNpemUgPSAoc2VsZi1cXHUwMDNlc2l6ZSArIGhwX3NpemUgLSAxKSBcXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xcbitcXHRcXHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzZWxmLVxcdTAwM2VzaXplIC8gaHBfc2l6ZSkpIHtcXG4rXFx0XFx0XFx0aHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7XFxuK1xcdFxcdFxcdGNsb3NlKHplcm9fZmQpO1xcbitcXHRcXHRcXHRjbG9zZShzZWxmLVxcdTAwM2VndXBfZmQpO1xcbitcXHRcXHRcXHRTS0lQKHJldHVybiwgXFxcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcXFxuXFxcIik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG1tYXBfZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2YXJpYW50LVxcdTAwM2VzaGFyZWQpXFxuK1xcdFxcdG1tYXBfZmxhZ3MgPSAobW1hcF9mbGFncyBcXHUwMDI2IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEO1xcbitcXG4rXFx0c2VsZi1cXHUwMDNlYWRkciA9IG1tYXAoTlVMTCwgc2VsZi1cXHUwMDNlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0XFx0ICBtbWFwX2ZsYWdzLCB6ZXJvX2ZkLCAwKTtcXG4rXFxuK1xcdGNsb3NlKHplcm9fZmQpO1xcbitcXG4rXFx0QVNTRVJUX05FKHNlbGYtXFx1MDAzZWFkZHIsIE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0aW50IGVyciA9IGVycm5vO1xcbitcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZ3VwX2ZkKTtcXG4rXFx0XFx0aWYgKHZhcmlhbnQtXFx1MDAzZWh1Z2V0bGIpXFxuK1xcdFxcdFxcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xcbitcXHRcXHRUSF9MT0coXFxcIm1tYXAgZmFpbGVkOiAlc1xcXCIsIHN0cmVycm9yKGVycikpO1xcbiBcXHR9XFxuLVxcdHJldHVybiBcXFwiVW5rbm93biBjb21tYW5kXFxcIjtcXG4rXFxuK1xcdGlmICh2YXJpYW50LVxcdTAwM2V0aHApXFxuK1xcdFxcdG1hZHZpc2Uoc2VsZi1cXHUwMDNlYWRkciwgc2VsZi1cXHUwMDNlc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bWFkdmlzZShzZWxmLVxcdTAwM2VhZGRyLCBzZWxmLVxcdTAwM2VzaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbitcXG4rXFx0Zm9yIChwID0gc2VsZi1cXHUwMDNlYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcXHUwMDNjICh1bnNpZ25lZCBsb25nKXNlbGYtXFx1MDAzZWFkZHJcXG4rXFx0XFx0XFx0KyBzZWxmLVxcdTAwM2VzaXplOyBwICs9IHBzaXplKCkpXFxuK1xcdFxcdHBbMF0gPSAwO1xcbiB9XFxuIFxcbi12b2lkICpndXBfdGhyZWFkKHZvaWQgKmRhdGEpXFxuK0ZJWFRVUkVfVEVBUkRPV04oZ3VwX3Rlc3QpXFxuIHtcXG4tXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTtcXG4tXFx0aW50IGksIHN0YXR1cztcXG4tXFxuLVxcdC8qIE9ubHkgcmVwb3J0IHRpbWluZyBpbmZvcm1hdGlvbiBvbiB0aGUgKl9CRU5DSE1BUksgY29tbWFuZHM6ICovXFxuLVxcdGlmICgoY21kID09IFBJTl9GQVNUX0JFTkNITUFSSykgfHwgKGNtZCA9PSBHVVBfRkFTVF9CRU5DSE1BUkspIHx8XFxuLVxcdCAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkge1xcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmVwZWF0czsgaSsrKSB7XFxuLVxcdFxcdFxcdGd1cC5zaXplID0gc2l6ZTtcXG4tXFx0XFx0XFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFxcdTAwMjZndXApO1xcbi1cXHRcXHRcXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdFxcdHB0aHJlYWRfbXV0ZXhfbG9jayhcXHUwMDI2cHJpbnRfbXV0ZXgpO1xcbi1cXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiJXM6IFRpbWU6IGdldDolbGxkIHB1dDolbGxkIHVzXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNtZF90b19zdHIoY21kKSwgZ3VwLmdldF9kZWx0YV91c2VjLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgZ3VwLnB1dF9kZWx0YV91c2VjKTtcXG4tXFx0XFx0XFx0aWYgKGd1cC5zaXplICE9IHNpemUpXFxuLVxcdFxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCIsIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcXFwiLCBndXAuc2l6ZSk7XFxuLVxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2cHJpbnRfbXV0ZXgpO1xcbi1cXHRcXHR9XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGd1cC5zaXplID0gc2l6ZTtcXG4tXFx0XFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFxcdTAwMjZndXApO1xcbi1cXHRcXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRcXHRnb3RvIHJldHVybl87XFxuLVxcbi1cXHRcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNnByaW50X211dGV4KTtcXG4tXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIiVzOiBkb25lXFxcXG5cXFwiLCBjbWRfdG9fc3RyKGNtZCkpO1xcbi1cXHRcXHRpZiAoZ3VwLnNpemUgIT0gc2l6ZSlcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlRydW5jYXRlZCAoc2l6ZTogJWxsZClcXFxcblxcXCIsIGd1cC5zaXplKTtcXG4tXFx0XFx0cHRocmVhZF9tdXRleF91bmxvY2soXFx1MDAyNnByaW50X211dGV4KTtcXG4rXFx0bXVubWFwKHNlbGYtXFx1MDAzZWFkZHIsIHNlbGYtXFx1MDAzZXNpemUpO1xcbitcXHRjbG9zZShzZWxmLVxcdTAwM2VndXBfZmQpO1xcbitcXG4rXFx0aWYgKHZhcmlhbnQtXFx1MDAzZWh1Z2V0bGIpXFxuK1xcdFxcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xcbit9XFxuK1xcbitURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzKVxcbit7XFxuK1xcdC8qIFRlc3RzIHRoZSBnZXRfdXNlcl9wYWdlcyBwYXRoICovXFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcXG4rXFxuK1xcdFxcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cXHUwMDNlYWRkcjtcXG4rXFx0XFx0Z3VwLnNpemUgPSBzZWxmLVxcdTAwM2VzaXplO1xcbitcXHRcXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdHNlbGYtXFx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTtcXG4rXFxuK1xcdFxcdGlmICh2YXJpYW50LVxcdTAwM2V3cml0ZSlcXG4rXFx0XFx0XFx0Z3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFO1xcbitcXG4rXFx0XFx0VEhfTE9HKFxcXCJucl9wYWdlc19wZXJfY2FsbD0ldVxcXCIsIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XFxuK1xcdFxcdEFTU0VSVF9FUShpb2N0bChzZWxmLVxcdTAwM2VndXBfZmQsIEdVUF9CQVNJQ19URVNULCBcXHUwMDI2Z3VwKSwgMCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlcylcXG4re1xcbitcXHQvKiBUZXN0cyB0aGUgcGluX3VzZXJfcGFnZXMgcGF0aCAqL1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XFxuK1xcbitcXHRcXHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXFx1MDAzZWFkZHI7XFxuK1xcdFxcdGd1cC5zaXplID0gc2VsZi1cXHUwMDNlc2l6ZTtcXG4rXFx0XFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcXHUwMDNjIDAgP1xcbitcXHRcXHRcXHRzZWxmLVxcdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XFxuK1xcbitcXHRcXHRpZiAodmFyaWFudC1cXHUwMDNld3JpdGUpXFxuK1xcdFxcdFxcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcXG4rXFxuK1xcdFxcdFRIX0xPRyhcXFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcXFwiLCBndXAubnJfcGFnZXNfcGVyX2NhbGwpO1xcbitcXHRcXHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cXHUwMDNlZ3VwX2ZkLCBQSU5fQkFTSUNfVEVTVCwgXFx1MDAyNmd1cCksIDApO1xcbiBcXHR9XFxuK31cXG4gXFxuLXJldHVybl86XFxuLVxcdGtzZnRfdGVzdF9yZXN1bHQoIXN0YXR1cywgXFxcImlvY3RsIHN0YXR1cyAlZFxcXFxuXFxcIiwgc3RhdHVzKTtcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1RFU1RfRihndXBfdGVzdCwgZHVtcF91c2VyX3BhZ2VzX3dpdGhfZ2V0KVxcbit7XFxuK1xcdC8qIFRlc3RzIERVTVBfVVNFUl9QQUdFU19URVNUIHVzaW5nIGdldF91c2VyX3BhZ2VzICovXFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcXG4rXFxuK1xcdFxcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cXHUwMDNlYWRkcjtcXG4rXFx0XFx0Z3VwLnNpemUgPSBzZWxmLVxcdTAwM2VzaXplO1xcbitcXHRcXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdHNlbGYtXFx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTtcXG4rXFxuK1xcdFxcdGlmICh2YXJpYW50LVxcdTAwM2V3cml0ZSlcXG4rXFx0XFx0XFx0Z3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFO1xcbitcXG4rXFx0XFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcXG4rXFxuK1xcdFxcdFRIX0xPRyhcXFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcXFwiLCBndXAubnJfcGFnZXNfcGVyX2NhbGwpO1xcbitcXHRcXHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cXHUwMDNlZ3VwX2ZkLCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgXFx1MDAyNmd1cCksIDApO1xcbitcXHR9XFxuIH1cXG4gXFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4rVEVTVF9GKGd1cF90ZXN0LCBkdW1wX3VzZXJfcGFnZXNfd2l0aF9waW4pXFxuIHtcXG4tXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xcbi1cXHRpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDtcXG4tXFx0aW50IGZsYWdzID0gTUFQX1BSSVZBVEU7XFxuLVxcdGNoYXIgKmZpbGUgPSBcXFwiL2Rldi96ZXJvXFxcIjtcXG4tXFx0Ym9vbCBodWdldGxiID0gZmFsc2U7XFxuLVxcdHB0aHJlYWRfdCAqdGlkO1xcbi1cXHRjaGFyICpwO1xcbitcXHQvKiBUZXN0cyBEVU1QX1VTRVJfUEFHRVNfVEVTVCB1c2luZyBwaW5fdXNlcl9wYWdlcyAqL1xcbitcXHRpbnQgaTtcXG4gXFxuLVxcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFxcXCJtOnI6bjpGOmY6YWJjajp0VExVdXdXU0hwelxcXCIpKSAhPSAtMSkge1xcbi1cXHRcXHRzd2l0Y2ggKG9wdCkge1xcbi1cXHRcXHRjYXNlICdhJzpcXG4tXFx0XFx0XFx0Y21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnYic6XFxuLVxcdFxcdFxcdGNtZCA9IFBJTl9CQVNJQ19URVNUO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnTCc6XFxuLVxcdFxcdFxcdGNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdjJzpcXG4tXFx0XFx0XFx0Y21kID0gRFVNUF9VU0VSX1BBR0VTX1RFU1Q7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIER1bXAgcGFnZSAwIChpbmRleCAxKS4gTWF5IGJlIG92ZXJyaWRkZW4gbGF0ZXIsIGJ5XFxuLVxcdFxcdFxcdCAqIHVzZXIncyBub24tb3B0aW9uIGFyZ3VtZW50cy5cXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogLndoaWNoX3BhZ2VzIGlzIHplcm8tYmFzZWQsIHNvIHRoYXQgemVybyBjYW4gbWVhbiBcXFwiZG9cXG4tXFx0XFx0XFx0ICogbm90aGluZ1xcXCIuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAncCc6XFxuLVxcdFxcdFxcdC8qIHdvcmtzIG9ubHkgd2l0aCBEVU1QX1VTRVJfUEFHRVNfVEVTVCAqL1xcbi1cXHRcXHRcXHRndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ0YnOlxcbi1cXHRcXHRcXHQvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqL1xcbi1cXHRcXHRcXHRndXAuZ3VwX2ZsYWdzID0gc3RydG9sKG9wdGFyZywgMCwgMCk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdqJzpcXG4tXFx0XFx0XFx0bnRocmVhZHMgPSBhdG9pKG9wdGFyZyk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdtJzpcXG4tXFx0XFx0XFx0c2l6ZSA9IGF0b2kob3B0YXJnKSAqIE1CO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAncic6XFxuLVxcdFxcdFxcdHJlcGVhdHMgPSBhdG9pKG9wdGFyZyk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICduJzpcXG4tXFx0XFx0XFx0bnJfcGFnZXMgPSBhdG9pKG9wdGFyZyk7XFxuLVxcdFxcdFxcdGlmIChucl9wYWdlcyBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdFxcdG5yX3BhZ2VzID0gc2l6ZSAvIHBzaXplKCk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICd0JzpcXG4tXFx0XFx0XFx0dGhwID0gMTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ1QnOlxcbi1cXHRcXHRcXHR0aHAgPSAwO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnVSc6XFxuLVxcdFxcdFxcdGNtZCA9IEdVUF9CQVNJQ19URVNUO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAndSc6XFxuLVxcdFxcdFxcdGNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSztcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ3cnOlxcbi1cXHRcXHRcXHR3cml0ZSA9IDE7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdXJzpcXG4tXFx0XFx0XFx0d3JpdGUgPSAwO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnZic6XFxuLVxcdFxcdFxcdGZpbGUgPSBvcHRhcmc7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdTJzpcXG4tXFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfk1BUF9QUklWQVRFO1xcbi1cXHRcXHRcXHRmbGFncyB8PSBNQVBfU0hBUkVEO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnSCc6XFxuLVxcdFxcdFxcdGZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpO1xcbi1cXHRcXHRcXHRodWdldGxiID0gdHJ1ZTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiV3JvbmcgYXJndW1lbnRcXFxcblxcXCIpO1xcbi1cXHRcXHR9XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XFxuK1xcbitcXHRcXHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXFx1MDAzZWFkZHI7XFxuK1xcdFxcdGd1cC5zaXplID0gc2VsZi1cXHUwMDNlc2l6ZTtcXG4rXFx0XFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcXHUwMDNjIDAgP1xcbitcXHRcXHRcXHRzZWxmLVxcdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XFxuK1xcbitcXHRcXHRpZiAodmFyaWFudC1cXHUwMDNld3JpdGUpXFxuK1xcdFxcdFxcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcXG4rXFxuK1xcdFxcdGd1cC53aGljaF9wYWdlc1swXSA9IDE7XFxuK1xcdFxcdGd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOO1xcbitcXG4rXFx0XFx0VEhfTE9HKFxcXCJucl9wYWdlc19wZXJfY2FsbD0ldVxcXCIsIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XFxuK1xcdFxcdEFTU0VSVF9FUShpb2N0bChzZWxmLVxcdTAwM2VndXBfZmQsIERVTVBfVVNFUl9QQUdFU19URVNULCBcXHUwMDI2Z3VwKSwgMCk7XFxuIFxcdH1cXG4rfVxcbiBcXG4tXFx0aWYgKG9wdGluZCBcXHUwMDNjIGFyZ2MpIHtcXG4tXFx0XFx0aW50IGV4dHJhX2FyZ19jb3VudCA9IDA7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIEZvciBleGFtcGxlOlxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiAgIC4vZ3VwX3Rlc3QgLWMgMCAxIDB4MTAwMVxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiAuLi50byBkdW1wIHBhZ2VzIDAsIDEsIGFuZCA0MDk3XFxuLVxcdFxcdCAqL1xcbi1cXG4tXFx0XFx0d2hpbGUgKChvcHRpbmQgXFx1MDAzYyBhcmdjKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgICAgKGV4dHJhX2FyZ19jb3VudCBcXHUwMDNjIEdVUF9URVNUX01BWF9QQUdFU19UT19EVU1QKSkge1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBEbyB0aGUgMS1iYXNlZCBpbmRleGluZyBoZXJlLCBzbyB0aGF0IHRoZSB1c2VyIGNhblxcbi1cXHRcXHRcXHQgKiB1c2Ugbm9ybWFsIDAtYmFzZWQgaW5kZXhpbmcgb24gdGhlIGNvbW1hbmQgbGluZS5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGxvbmcgcGFnZV9pbmRleCA9IHN0cnRvbChhcmd2W29wdGluZF0sIDAsIDApICsgMTtcXG4tXFxuLVxcdFxcdFxcdGd1cC53aGljaF9wYWdlc1tleHRyYV9hcmdfY291bnRdID0gcGFnZV9pbmRleDtcXG4tXFx0XFx0XFx0ZXh0cmFfYXJnX2NvdW50Kys7XFxuLVxcdFxcdFxcdG9wdGluZCsrO1xcbi1cXHRcXHR9XFxuK1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdClcXG4re1xcbitcXHQvKiBUZXN0cyB0aGUgbG9ja2xlc3MgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIHBhdGggKi9cXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xcbitcXG4rXFx0XFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLVxcdTAwM2VhZGRyO1xcbitcXHRcXHRndXAuc2l6ZSA9IHNlbGYtXFx1MDAzZXNpemU7XFxuK1xcdFxcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gXFx1MDAzYyAwID9cXG4rXFx0XFx0XFx0c2VsZi1cXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldO1xcbitcXG4rXFx0XFx0aWYgKHZhcmlhbnQtXFx1MDAzZXdyaXRlKVxcbitcXHRcXHRcXHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XFxuK1xcbitcXHRcXHRUSF9MT0coXFxcIm5yX3BhZ2VzX3Blcl9jYWxsPSV1XFxcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXFx1MDAzZWd1cF9mZCwgR1VQX0ZBU1RfQkVOQ0hNQVJLLCBcXHUwMDI2Z3VwKSwgMCk7XFxuIFxcdH1cXG4rfVxcbitcXG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19mYXN0KVxcbit7XFxuK1xcdC8qIFRlc3RzIHRoZSBsb2NrbGVzcyBwaW5fdXNlcl9wYWdlc19mYXN0KCkgcGF0aCAqL1xcbitcXHRpbnQgaTtcXG4gXFxuLVxcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XFxuIFxcbi1cXHRpZiAoaHVnZXRsYikge1xcbi1cXHRcXHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XFxuK1xcdFxcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cXHUwMDNlYWRkcjtcXG4rXFx0XFx0Z3VwLnNpemUgPSBzZWxmLVxcdTAwM2VzaXplO1xcbitcXHRcXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdHNlbGYtXFx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTtcXG4gXFxuLVxcdFxcdGlmICghaHBfc2l6ZSlcXG4tXFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIkh1Z2VUTEIgaXMgdW5hdmFpbGFibGVcXFxcblxcXCIpO1xcbitcXHRcXHRpZiAodmFyaWFudC1cXHUwMDNld3JpdGUpXFxuK1xcdFxcdFxcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcXG4gXFxuLVxcdFxcdHNpemUgPSAoc2l6ZSArIGhwX3NpemUgLSAxKSBcXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xcbi1cXHRcXHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpXFxuLVxcdFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXFxcblxcXCIpO1xcbitcXHRcXHRUSF9MT0coXFxcIm5yX3BhZ2VzX3Blcl9jYWxsPSV1XFxcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXFx1MDAzZWd1cF9mZCwgUElOX0ZBU1RfQkVOQ0hNQVJLLCBcXHUwMDI2Z3VwKSwgMCk7XFxuIFxcdH1cXG4rfVxcbiBcXG4tXFx0a3NmdF9zZXRfcGxhbihudGhyZWFkcyk7XFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfbG9uZ3Rlcm0pXFxuK3tcXG4rXFx0LyogVGVzdHMgcGluX3VzZXJfcGFnZXMoKSB3aXRoIEZPTExfTE9OR1RFUk0gKi9cXG4rXFx0aW50IGk7XFxuIFxcbi1cXHRmaWxlZCA9IG9wZW4oZmlsZSwgT19SRFdSfE9fQ1JFQVQsIDA2NjQpO1xcbi1cXHRpZiAoZmlsZWQgXFx1MDAzYyAwKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlVuYWJsZSB0byBvcGVuICVzOiAlc1xcXFxuXFxcIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcXG4gXFxuLVxcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzO1xcbi1cXHRpZiAod3JpdGUpXFxuLVxcdFxcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcXG4rXFx0XFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLVxcdTAwM2VhZGRyO1xcbitcXHRcXHRndXAuc2l6ZSA9IHNlbGYtXFx1MDAzZXNpemU7XFxuK1xcdFxcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gXFx1MDAzYyAwID9cXG4rXFx0XFx0XFx0c2VsZi1cXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldO1xcbiBcXG4tXFx0Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xcbi1cXHRpZiAoZ3VwX2ZkID09IC0xKSB7XFxuLVxcdFxcdHN3aXRjaCAoZXJybm8pIHtcXG4tXFx0XFx0Y2FzZSBFQUNDRVM6XFxuLVxcdFxcdFxcdGlmIChnZXR1aWQoKSlcXG4tXFx0XFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBFTk9FTlQ6XFxuLVxcdFxcdFxcdGlmIChvcGVuZGlyKFxcXCIvc3lzL2tlcm5lbC9kZWJ1Z1xcXCIpID09IE5VTEwpXFxuLVxcdFxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJtb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNoZWNrIGlmIENPTkZJR19HVVBfVEVTVCBpcyBlbmFibGVkIGluIGtlcm5lbCBjb25maWdcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImZhaWxlZCB0byBvcGVuICVzOiAlc1xcXFxuXFxcIiwgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxcXG5cXFwiKTtcXG4tXFx0XFx0a3NmdF9leGl0X3Bhc3MoKTtcXG4rXFx0XFx0aWYgKHZhcmlhbnQtXFx1MDAzZXdyaXRlKVxcbitcXHRcXHRcXHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XFxuK1xcbitcXHRcXHRUSF9MT0coXFxcIm5yX3BhZ2VzX3Blcl9jYWxsPSV1XFxcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXFx1MDAzZWd1cF9mZCwgUElOX0xPTkdURVJNX0JFTkNITUFSSywgXFx1MDAyNmd1cCksIDApO1xcbiBcXHR9XFxuK31cXG4rXFxuK1RFU1QoZHVtcF91c2VyX3BhZ2VzX3NwYXJzZV9pbmRpY2VzKVxcbit7XFxuK1xcdC8qIFRlc3RzIHNwYXJzZSBtdWx0aS1pbmRleCB3aGljaF9wYWdlc1tdIGlucHV0cy4gKi9cXG4rXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemUgPSAxMjggKiBNQjtcXG4rXFx0aW50IHplcm9fZmQsIGd1cF9mZDtcXG4rXFx0Y2hhciAqYWRkciwgKnA7XFxuK1xcbitcXHR6ZXJvX2ZkID0gb3BlbihcXFwiL2Rldi96ZXJvXFxcIiwgT19SRFdSKTtcXG4rXFx0QVNTRVJUX0dFKHplcm9fZmQsIDApO1xcbiBcXG4tXFx0cCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIGZpbGVkLCAwKTtcXG4tXFx0aWYgKHAgPT0gTUFQX0ZBSUxFRClcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJtbWFwOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4tXFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylwO1xcbitcXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XFxuK1xcdEFTU0VSVF9HRShndXBfZmQsIDApO1xcbitcXG4rXFx0YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIHplcm9fZmQsIDApO1xcbitcXHRjbG9zZSh6ZXJvX2ZkKTtcXG4rXFx0QVNTRVJUX05FKGFkZHIsIE1BUF9GQUlMRUQpO1xcbiBcXG4tXFx0aWYgKHRocCA9PSAxKVxcbi1cXHRcXHRtYWR2aXNlKHAsIHNpemUsIE1BRFZfSFVHRVBBR0UpO1xcbi1cXHRlbHNlIGlmICh0aHAgPT0gMClcXG4tXFx0XFx0bWFkdmlzZShwLCBzaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbitcXHRtYWR2aXNlKGFkZHIsIHNpemUsIE1BRFZfSFVHRVBBR0UpO1xcbiBcXG4tXFx0LyogRmF1bHQgdGhlbSBpbiBoZXJlLCBmcm9tIHVzZXIgc3BhY2UuICovXFxuLVxcdGZvciAoOyAodW5zaWduZWQgbG9uZylwIFxcdTAwM2MgZ3VwLmFkZHIgKyBzaXplOyBwICs9IHBzaXplKCkpXFxuK1xcdGZvciAocCA9IGFkZHI7ICh1bnNpZ25lZCBsb25nKXAgXFx1MDAzYyAodW5zaWduZWQgbG9uZylhZGRyICsgc2l6ZTtcXG4rXFx0ICAgICBwICs9IHBzaXplKCkpXFxuIFxcdFxcdHBbMF0gPSAwO1xcbiBcXG4tXFx0dGlkID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocmVhZHMpO1xcbi1cXHRhc3NlcnQodGlkKTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG50aHJlYWRzOyBpKyspIHtcXG4tXFx0XFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRpZFtpXSwgTlVMTCwgZ3VwX3RocmVhZCwgXFx1MDAyNmd1cCk7XFxuLVxcdFxcdGFzc2VydChyZXQgPT0gMCk7XFxuLVxcdH1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG50aHJlYWRzOyBpKyspIHtcXG4tXFx0XFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgTlVMTCk7XFxuLVxcdFxcdGFzc2VydChyZXQgPT0gMCk7XFxuK1xcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjtcXG4rXFx0Z3VwLnNpemUgPSBzaXplO1xcbitcXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBzaXplIC8gcHNpemUoKTtcXG4rXFx0Z3VwLmd1cF9mbGFncyA9IEZPTExfV1JJVEU7XFxuK1xcdGd1cC53aGljaF9wYWdlc1swXSA9IDE7XFxuK1xcdGd1cC53aGljaF9wYWdlc1sxXSA9IDIwO1xcbitcXHRndXAud2hpY2hfcGFnZXNbMl0gPSAweDEwMDE7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcmVzZXJ2ZSB0aGUgb2xkIFxcXCIuL2d1cF90ZXN0IC1jdCAtRiAweDEgMCAxOSAweDEwMDBcXFwiIHNwYXJzZSBkdW1wXFxuK1xcdCAqIGNvdmVyYWdlIGFmdGVyIHJlbW92aW5nIGNvbW1hbmQtbGluZSBwYXJzaW5nIGZyb20gdGhpcyBiaW5hcnkuXFxuK1xcdCAqL1xcbitcXHRBU1NFUlRfRVEoaW9jdGwoZ3VwX2ZkLCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgXFx1MDAyNmd1cCksIDApO1xcbitcXG4rXFx0bXVubWFwKGFkZHIsIHNpemUpO1xcbitcXHRjbG9zZShndXBfZmQpO1xcbit9XFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuK3tcXG4rXFx0aW50IGZkO1xcbitcXHRjaGFyICpmaWxlID0gXFxcIi9kZXYvemVyb1xcXCI7XFxuK1xcbitcXHRmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlVuYWJsZSB0byBvcGVuICVzOiAlc1xcXFxuXFxcIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcXG4gXFx0fVxcbitcXHRjbG9zZShmZCk7XFxuIFxcbi1cXHRmcmVlKHRpZCk7XFxuK1xcdGZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xcbitcXHRpZiAoZmQgPT0gLTEpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4rXFx0XFx0aWYgKGVycm5vID09IEVBQ0NFUylcXG4rXFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXFxcblxcXCIpO1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRU5PRU5UKSB7XFxuK1xcdFxcdFxcdERJUiAqZGVidWdmcyA9IG9wZW5kaXIoXFxcIi9zeXMva2VybmVsL2RlYnVnXFxcIik7XFxuK1xcbitcXHRcXHRcXHRpZiAoIWRlYnVnZnMpIHtcXG4rXFx0XFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIk1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRjbG9zZWRpcihkZWJ1Z2ZzKTtcXG4rXFx0XFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIkNoZWNrIENPTkZJR19HVVBfVEVTVCBpbiBrZXJuZWwgY29uZmlnXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJmYWlsZWQgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZmQpO1xcbiBcXG4tXFx0a3NmdF9leGl0X3Bhc3MoKTtcXG4rXFx0cmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbmluZGV4IDJmMmI5ODc5ZDEwMDUxLi5lMWJiMDMxMDE5ZjJhYyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXFxuQEAgLTEwLDkgKzEwLDYgQEBcXG4gICogYnVncy5cXG4gICovXFxuIFxcbi0jaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuLVxcbiAjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbkBAIC0yOSw2ICsyNiw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL2lvY3RsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdGltZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiBcXG4gLypcXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcXG5pbmRleCA1NTViNGIzZDE0MzA3ZS4uNTdjZjc5MGNhNDc4ZDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuY1xcbkBAIC0xNCw3ICsxNCw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBNSU5fRlJFRV9QQUdFU1xcdDIwXFxuICNkZWZpbmUgTlJfSFVHRV9QQUdFU1xcdDEwXFx0LyogY29tbW9uIG51bWJlciBvZiBwYWdlcyB0byBtYXAvYWxsb2NhdGUgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xcbmluZGV4IDBmMmFhZDFiN2RiZDZmLi5hNDU4YmVjZjU4MzI3ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXFxuQEAgLTE4LDcgKzE4LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWZkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxcbiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXFxuaW5kZXggZWQzZDkyZTg2MmQ4NzYuLjliNzI0YWY2NmU5Mzg4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXFxuQEAgLTI2LDcgKzI2LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgREVGQVVMVF9MRU5HVEhfTUIgMTBVTFxcbiAjZGVmaW5lIE1CX1RPX0JZVEVTKHgpICh4ICogMTAyNCAqIDEwMjQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXFxuaW5kZXggM2ZmN2YwNjJiN2ViNDUuLmY0NTE0ZGE0OWUxZGY3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXFxuQEAgLTI5LDcgKzI5LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xcbmluZGV4IGJjMjAyZTRlZDJiZGE3Li4yMDg2NGU3ZDRlMGM3MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xcbkBAIC0yMSw5ICsyMSw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N0YXRmcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpZm5kZWYgTUFEVl9TT0ZUX09GRkxJTkVcXG4gI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi12bWVtbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXZtZW1tYXAuY1xcbmluZGV4IDUwN2RmNzhhMTU4ZDhkLi5jNDZhNjU2YzI1YTA0ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXZtZW1tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItdm1lbW1hcC5jXFxuQEAgLTExLDcgKzExLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgUEFHRV9DT01QT1VORF9IRUFEXFx0KDFVTCBcXHUwMDNjXFx1MDAzYyAxNSlcXG4gI2RlZmluZSBQQUdFX0NPTVBPVU5EX1RBSUxcXHQoMVVMIFxcdTAwM2NcXHUwMDNjIDE2KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbmluZGV4IGZiNDYwMDU3MGUxMzE5Li45NDk1OTc0ZWNjYmVhNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbkBAIC0yMCw3ICsyMCw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3lzY2FsbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2lmbmRlZiBTVEFUWF9ESU9BTElHTlxcbiAjZGVmaW5lIFNUQVRYX0RJT0FMSUdOXFx0XFx0MHgwMDAwMjAwMFVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuY1xcbmluZGV4IDJkYzE1ODA1NGY2NjZiLi41NmM1YTg1MzNlOWQ5MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXFxuQEAgLTEwLDcgKzEwLDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMFxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXFxuaW5kZXggZjk0NTQ5ZWZjYzZmZjMuLjI1MzJhNDJiOThkZmYxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbkBAIC0yNSw3ICsyNSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBJTkxPT1BfSVRFUiAxMDBcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbmluZGV4IDEwZThkZWRjYjA4N2RjLi4yMzgyOTczYjJmNTUyYyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG5AQCAtMjIsNyArMjIsNiBAQFxcbiAjaW5jbHVkZSBcXFwibGludXgvbWFnaWMuaFxcXCJcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcXHUwMDNjXFx1MDAzYyAzMCkpXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xcbkBAIC0xMTksNiArMTE4LDcgQEAgc3RhdGljIHZvaWQgZ2V0X2ZpbmZvKGNvbnN0IGNoYXIgKmRpcilcXG4gXFx0Y2hhciBidWZbMSBcXHUwMDNjXFx1MDAzYyAxMF07XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuIFxcdGNoYXIgKnN0ciwgKmVuZDtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGZpbmZvLmRpciA9IGRpcjtcXG4gXFx0c3RhdChmaW5mby5kaXIsIFxcdTAwMjZwYXRoX3N0YXQpO1xcbkBAIC0xMzgsOCArMTM4LDkgQEAgc3RhdGljIHZvaWQgZ2V0X2ZpbmZvKGNvbnN0IGNoYXIgKmRpcilcXG4gXFx0XFx0ICAgICBtYWpvcihwYXRoX3N0YXQuc3RfZGV2KSwgbWlub3IocGF0aF9zdGF0LnN0X2RldikpXFxuIFxcdCAgICBcXHUwMDNlPSBzaXplb2YocGF0aCkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuLVxcdGlmIChyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkgXFx1MDAzYyAwKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcInJlYWRfZmlsZShyZWFkX251bSlcXFwiKTtcXG4rXFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWwoKTtcXG4gXFx0aWYgKHN0cnN0cihidWYsIFxcXCJERVZUWVBFPWRpc2tcXFwiKSkge1xcbiBcXHRcXHQvKiBGb3VuZCBpdCAqL1xcbiBcXHRcXHRpZiAoc25wcmludGYoZmluZm8uZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcXG5AQCAtMzE5LDcgKzMyMCw3IEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXFxuIHtcXG4gXFx0Y29uc3QgaW50IG9wZW5fb3B0ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBPX1JET05MWSA6IE9fUkRXUjtcXG4gXFx0Y29uc3QgaW50IG1tYXBfcHJvdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gUFJPVF9SRUFEIDogKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpO1xcbi1cXHRpbnQgZmQ7XFxuK1xcdGludCBmZCwgcmV0O1xcbiBcXHR2b2lkICpwO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuIFxcbkBAIC0zNjMsNyArMzY0LDEwIEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibW1hcCgpXFxcIik7XFxuIFxcbiBcXHQvKiBEcm9wIHBhZ2UgY2FjaGUgKi9cXG4tXFx0d3JpdGVfZmlsZShcXFwiL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzXFxcIiwgXFxcIjNcXFwiLCAyKTtcXG4rXFx0cmV0ID0gd3JpdGVfZmlsZShcXFwiL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzXFxcIiwgXFxcIjNcXFwiLCAyKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWwoKTtcXG4rXFxuIFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdHJldHVybiBwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcXG5pbmRleCBhMDUwZjQ4NDBjZmEzYS4uY2MzNzQ5MmNmMzJjM2QgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xcbkBAIC0xNSw3ICsxNSw2IEBAXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFx1MDAzY2luY2x1ZGUvdmRzby90aW1lNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIEtTTV9TWVNGU19QQVRIIFxcXCIvc3lzL2tlcm5lbC9tbS9rc20vXFxcIlxcbiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xcbmluZGV4IDI5Zjc0OTI0NTNkNDM5Li40ZmU5N2MwMzMyNjEyNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuQEAgLTQsOSArNCw2IEBAXFxuICAqIHBhdGhzIGluIHRoZSBrZXJuZWwuXFxuICAqL1xcbiBcXG4tI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbi1cXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZ3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3B0aHJlYWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY251bWEuaFxcdTAwM2VcXG5AQCAtMTYsNiArMTMsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzaWduYWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3RpbWUuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiBcXG4gI2RlZmluZSBUV09NRUdcXHRcXHQoMlxcdTAwM2NcXHUwMDNjMjApXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbmluZGV4IDZmODk3MWQ1YjNjZTQzLi44MDQzNzI4MDMwODBjYyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5AQCAtMjMsNyArMjMsNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgUEFHRU1BUF9CSVRTX0FMTFxcdFxcdChQQUdFX0lTX1dQQUxMT1dFRCB8IFBBR0VfSVNfV1JJVFRFTiB8XFx0XFxcXFxcbiBcXHRcXHRcXHRcXHRcXHQgUEFHRV9JU19GSUxFIHwgUEFHRV9JU19QUkVTRU5UIHxcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuaW5kZXggZDhkOWQxZGU1N2I4YjAuLmE0Zjg0NTE3OTFjYmRiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuQEAgLTE0LDcgKzE0LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuIFxcbiAjaWZuZGVmIFBSX1RIUF9ESVNBQkxFX0VYQ0VQVF9BRFZJU0VEXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG5pbmRleCA5YTZkOTU0ZWUzNzEyNi4uNWJhMjAzM2U4YTA5Y2QgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xcbkBAIC00NSw4ICs0NSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9wdHJhY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3NldGptcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicGtleS1oZWxwZXJzLmhcXFwiXFxuIFxcbiBpbnQgaXRlcmF0aW9uX25yID0gMTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbmluZGV4IDhjMjk2ZGVkZjA0NzRkLi41NmRmMGRjYzk2NDBjMCAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuQEAgLTEzMCwzMCArMTMwLDYgQEAgdGVzdF9zZWxlY3RlZCgpIHtcXG4gXFx0ZmlcXG4gfVxcbiBcXG4tcnVuX2d1cF9tYXRyaXgoKSB7XFxuLSAgICAjIC10OiB0aHA9b24sIC1UOiB0aHA9b2ZmLCAtSDogaHVnZXRsYj1vblxcbi0gICAgbG9jYWwgaHVnZXRsYl9tYj0yNTZcXG4tXFxuLSAgICBmb3IgaHVnZSBpbiAtdCAtVCBcXFwiLUggLW0gJGh1Z2V0bGJfbWJcXFwiOyBkb1xcbi0gICAgICAgICMgLXU6IGd1cC1mYXN0LCAtVTogZ3VwLWJhc2ljLCAtYTogcGluLWZhc3QsIC1iOiBwaW4tYmFzaWMsIC1MOiBwaW4tbG9uZ3Rlcm1cXG4tICAgICAgICBmb3IgdGVzdF9jbWQgaW4gLXUgLVUgLWEgLWIgLUw7IGRvXFxuLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wXFxuLSAgICAgICAgICAgIGZvciB3cml0ZSBpbiAtdyAtVzsgZG9cXG4tICAgICAgICAgICAgICAgICMgLVM6IHNoYXJlZFxcbi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TIFxcXCIgXFxcIjsgZG9cXG4tICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsXFxuLSAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGl0J3MgZGVmYXVsdCB0aHAgc2l6ZSAob3IgMk0gb24geDg2KSwgMTIzIHRvXFxuLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm1cXG4tICAgICAgICAgICAgICAgICAgICBmb3IgbnVtIGluIFxcXCItbiAxXFxcIiBcXFwiLW4gNTEyXFxcIiBcXFwiLW4gMTIzXFxcIiBcXFwiLW4gLTFcXFwiOyBkb1xcbi0gICAgICAgICAgICAgICAgICAgICAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgXFxcXFxcbi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRodWdlICR0ZXN0X2NtZCAkd3JpdGUgJHNoYXJlICRudW1cXG4tICAgICAgICAgICAgICAgICAgICBkb25lXFxuLSAgICAgICAgICAgICAgICBkb25lXFxuLSAgICAgICAgICAgIGRvbmVcXG4tICAgICAgICBkb25lXFxuLSAgICBkb25lXFxuLX1cXG4tXFxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcXG4gQVJDSDY0U1RSPVxcXCJhcm02NCBtaXBzNjQgcGFyaXNjNjQgcHBjNjQgcHBjNjRsZSByaXNjdjY0IHMzOTB4IHNwYXJjNjQgeDg2XzY0XFxcIlxcbiBpZiBbIC16IFxcXCIkQVJDSFxcXCIgXTsgdGhlblxcbkBAIC0yNzYsMTggKzI1Miw3IEBAIGZpXFxuIFxcbiBDQVRFR09SWT1cXFwibW1hcFxcXCIgcnVuX3Rlc3QgLi9tYXBfZml4ZWRfbm9yZXBsYWNlXFxuIFxcbi1pZiAkUlVOX0FMTDsgdGhlblxcbi0gICAgcnVuX2d1cF9tYXRyaXhcXG4tZWxzZVxcbi0gICAgIyBnZXRfdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXFxuLSAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxcbi0gICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIC0xXFxuLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcXG4tICAgIENBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAxXFxuLSAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gLTFcXG4tZmlcXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XFxuLUNBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtY3QgLUYgMHgxIDAgMTkgMHgxMDAwXFxuK0NBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfdGVzdFxcbiBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX2xvbmd0ZXJtXFxuIFxcbiBDQVRFR09SWT1cXFwidXNlcmZhdWx0ZmRcXFwiIHJ1bl90ZXN0IC4vdWZmZC11bml0LXRlc3RzXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xcbmluZGV4IGZiMTg2NGE2OGUxYzZiLi42YzIyYWM5ZTkzZGIwNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG5AQCAtOSw3ICs5LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIIFxcXCIvcHJvYy9zZWxmL3BhZ2VtYXBcXFwiXFxuICNkZWZpbmUgVEVTVF9JVEVSQVRJT05TIDEwMDAwXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuaW5kZXggMzJiOTkxNDcyZjc0NGYuLmU3NDRjOTQzNGU3ZDA1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuQEAgLTIxLDcgKzIxLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3RpbWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuIHVpbnQ2NF90IHBhZ2VzaXplO1xcbiB1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0O1xcbkBAIC0yNjksNyArMjY4LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVfZGVidWdmcyhjb25zdCBjaGFyICpmbXQsIC4uLilcXG4gXFx0aWYgKHJldCBcXHUwMDNlPSBJTlBVVF9NQVgpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXM6IERlYnVnZnMgaW5wdXQgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFxuLVxcdHdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCArIDEpO1xcbitcXHRyZXQgPSB3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgKyAxKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWwoKTtcXG4gfVxcbiBcXG4gc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmNcXG5pbmRleCAyMmI5YzJmMWMzNWQyMy4uMGRhMTVkNTMwYTFmYzggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xcbkBAIC0xNCw3ICsxNCw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQilcXG4gI2RlZmluZSBNQVBfSFVHRVRMQlxcdDB4NDAwMDBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXFxuaW5kZXggOGViMGM1NjMwZTdlMzEuLjk2ZjcyODk4ZWJlMGE1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xcbkBAIC0xNyw3ICsxNyw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gaW50IGJhY2tpbmdfZmQgPSAtMTtcXG4gaW50IG1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxcbmluZGV4IDkyYTIxYjk3Zjc0NWFmLi4wNzIzODQzYTc2MjZiMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxcbkBAIC0zNyw3ICszNyw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBVRkZEX0ZMQUdTXFx0KE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0sgfCBVRkZEX1VTRVJfTU9ERV9PTkxZKVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcXG5pbmRleCBjOTczZDY3MjI3MjBjMy4uZWI0YjI0MzNiMDBlNjEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcXG5AQCAtNyw4ICs3LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2Fzc2VydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ1ZmZkLWNvbW1vbi5oXFxcIlxcbiBcXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcXG5pbmRleCBlMjRkN2JhMDBiNDQxNy4uNWEzNTRhNjY0ZDFmN2QgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXFxuQEAgLTExLDcgKzExLDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAvKlxcbiAgKiBUaGUgaGludCBhZGRyIHZhbHVlIGlzIHVzZWQgdG8gYWxsb2NhdGUgYWRkcmVzc2VzXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbmluZGV4IDMxMWZjNWI0NTEzZWI0Li5mMjc2ZWVlNTc2ODA0YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5AQCAtNjk4LDkzICs2OTgsMzkgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcXG4gXFx0cmV0dXJuIHJldCBcXHUwMDNlIDAgPyAwIDogLWVycm5vO1xcbiB9XFxuIFxcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcXG4te1xcbi1cXHRpbnQgZmQ7XFxuLVxcdHNzaXplX3QgbnVtcmVhZDtcXG4tXFxuLVxcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XFxuLVxcdGlmIChmZCA9PSAtMSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcXG4tXFx0aWYgKG51bXJlYWQgXFx1MDAzYyAxKSB7XFxuLVxcdFxcdGNsb3NlKGZkKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuLVxcdGJ1ZltudW1yZWFkXSA9ICdcXFxcMCc7XFxuLVxcdGNsb3NlKGZkKTtcXG4tXFxuLVxcdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xcbi19XFxuLVxcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxcbi17XFxuLVxcdGludCBmZCwgc2F2ZWRfZXJybm87XFxuLVxcdHNzaXplX3QgbnVtd3JpdHRlbjtcXG4tXFxuLVxcdGlmIChidWZsZW4gXFx1MDAzYyAyKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkluY29ycmVjdCBidWZmZXIgbGVuOiAlenVcXFxcblxcXCIsIGJ1Zmxlbik7XFxuLVxcbi1cXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xcbi1cXHRpZiAoZmQgPT0gLTEpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXMgb3BlbiBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpO1xcbi1cXG4tXFx0bnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xcbi1cXHRzYXZlZF9lcnJubyA9IGVycm5vO1xcbi1cXHRjbG9zZShmZCk7XFxuLVxcdGVycm5vID0gc2F2ZWRfZXJybm87XFxuLVxcdGlmIChudW13cml0dGVuIFxcdTAwM2MgMClcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlcyB3cml0ZSglLipzKSBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBwYXRoLCAoaW50KShidWZsZW4gLSAxKSxcXG4tXFx0XFx0XFx0XFx0YnVmLCBzdHJlcnJvcihlcnJubykpO1xcbi1cXHRpZiAobnVtd3JpdHRlbiAhPSBidWZsZW4gLSAxKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIHdyaXRlKCUuKnMpIGlzIHRydW5jYXRlZCwgZXhwZWN0ZWQgJXp1IGJ5dGVzLCBnb3QgJXpkIGJ5dGVzXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRwYXRoLCAoaW50KShidWZsZW4gLSAxKSwgYnVmLCBidWZsZW4gLSAxLCBudW13cml0dGVuKTtcXG4tfVxcbi1cXG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKVxcbi17XFxuLVxcdGNoYXIgYnVmWzIxXTtcXG4tXFxuLVxcdGlmIChyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkgXFx1MDAzYyAwKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcInJlYWRfZmlsZSgpXFxcIik7XFxuLVxcbi1cXHRyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDEwKTtcXG4tfVxcbi1cXG4tdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXFxuLXtcXG4tXFx0Y2hhciBidWZbMjFdO1xcbi1cXG4tXFx0c3ByaW50ZihidWYsIFxcXCIlbHVcXFwiLCBudW0pO1xcbi1cXHR3cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgKyAxKTtcXG4tfVxcbi1cXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htYWxsLCBzaG1tYXg7XFxuIFxcbiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpXFxuIHtcXG4tXFx0aWYgKHNobW1heClcXG4tXFx0XFx0d3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIHNobW1heCk7XFxuLVxcdGlmIChzaG1hbGwpXFxuLVxcdFxcdHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBzaG1hbGwpO1xcbitcXHRpZiAoc2htbWF4IFxcdTAwMjZcXHUwMDI2IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiLCBzaG1tYXgpKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbCgpO1xcbitcXHRpZiAoc2htYWxsIFxcdTAwMjZcXHUwMDI2IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBzaG1hbGwpKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbCgpO1xcbiB9XFxuIFxcbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTtcXG4gXFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuK1xcdGludCByZXQ7XFxuIFxcbi1cXHR2YWwgPSByZWFkX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiKTtcXG4rXFx0cmV0ID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XFxcIiwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsKCk7XFxuIFxcdGlmICh2YWwgXFx1MDAzYyBsZW5ndGgpIHtcXG4tXFx0XFx0d3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIGxlbmd0aCk7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiLCBsZW5ndGgpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbCgpO1xcbiBcXHRcXHRzaG1tYXggPSB2YWw7XFxuIFxcdH1cXG4gXFxuLVxcdHZhbCA9IHJlYWRfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFxcXCIpO1xcbitcXHRyZXQgPSByZWFkX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWwoKTtcXG4gXFx0aWYgKHZhbCBcXHUwMDNjIG5yKSB7XFxuLVxcdFxcdHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBucik7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBucik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9mYWlsKCk7XFxuIFxcdFxcdHNobWFsbCA9IHZhbDtcXG4gXFx0fVxcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbmluZGV4IGVhOGZjOGZkZjBlYjBiLi5hYTg1NmYwZDMyZDY0ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG5AQCAtOCw2ICs4LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZSAvKiBfU0NfUEFHRVNJWkUgKi9cXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2ZpbGVfdXRpbHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIEJJVF9VTEwobnIpICAgICAgICAgICAgICAgICAgICgxVUxMIFxcdTAwM2NcXHUwMDNjIChucikpXFxuICNkZWZpbmUgUE1fU09GVF9ESVJUWSAgICAgICAgICAgICAgICAgQklUX1VMTCg1NSlcXG5AQCAtMTY0LDExICsxNjYsNiBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTtcXG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVxcdCgoKGVudCkgXFx1MDAyNiAoMXVsbCBcXHUwMDNjXFx1MDAzYyA2MykpICE9IDApXFxuICNkZWZpbmUgUEFHRU1BUF9QRk4oZW50KVxcdCgoZW50KSBcXHUwMDI2ICgoMXVsbCBcXHUwMDNjXFx1MDAzYyA1NSkgLSAxKSlcXG4gXFxuLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XFxuLXVuc2lnbmVkIGxvbmcgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCk7XFxuLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcXG4tXFxuIHZvaWQgc2htX2xpbWl0c19wcmVwYXJlKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTtcXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjI5OjA4LjgyNTA0NTU0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY4MzIxOTc4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29scyAodG9vbHMvbW0vZ3VwX2JlbmNoLmMsIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyksIERvY3VtZW50YXRpb24sIGFuZCBNQUlOVEFJTkVSUy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjBhMjNlOTk3OWVlZGY0YTZmYjU4ZWExYjM3NmNhNTI3NTcyYzRmY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDIwOjI5OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuaW5kZXggYzE2Y2ExNjNiNTVlM2MuLmVhNzIyYWRmMjJjY2FjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG5AQCAtMjMwLDEwICsyMzAsMTYgQEAgVGhpcyBmaWxlOjpcbiBcbiAgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuIFxuLWhhcyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFwcGVyIGZ1bmN0aW9uczpcbitjb250YWlucyB0aGUgZm9sbG93aW5nIHRlc3QgY2FzZXMgdG8gZXhlcmNpc2UgcGluX3VzZXJfcGFnZXMqKCk6XG4gXG4tKiBQSU5fRkFTVF9CRU5DSE1BUksgKC4vZ3VwX3Rlc3QgLWEpXG4tKiBQSU5fQkFTSUNfVEVTVCAoLi9ndXBfdGVzdCAtYilcbisqIHBpbl91c2VyX3BhZ2VzIHZpYSBQSU5fQkFTSUNfVEVTVFxuKyogcGluX3VzZXJfcGFnZXNfZmFzdCB2aWEgUElOX0ZBU1RfQkVOQ0hNQVJLXG4rKiBwaW5fdXNlcl9wYWdlc19sb25ndGVybSB2aWEgUElOX0xPTkdURVJNX0JFTkNITUFSS1xuK1xuK1J1biB3aXRoOjpcbitcbisgIG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW1cbisgIC4vdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3RcbiBcbiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkXG4gc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCB2aWEgdHdvIG5ldyAvcHJvYy92bXN0YXQgZW50cmllczogOjpcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA4MDZiZDJkODBkMTUzNS4uN2QxMjFkZWU5ZjBmMmMgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xNzAyNCw2ICsxNzAyNCw3IEBAIFQ6XHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW1cbiBGOlx0bW0vZ3VwLmNcbiBGOlx0bW0vZ3VwX3Rlc3QuY1xuIEY6XHRtbS9ndXBfdGVzdC5oXG4rRjpcdHRvb2xzL21tL2d1cF9iZW5jaC5jXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiBcbkBAIC0xNzEyOCw2ICsxNzEyOSw3IEBAIEY6XHRtbS9tZW1vcnktdGllcnMuY1xuIEY6XHRtbS9wYWdlX2lkbGUuY1xuIEY6XHRtbS9wZ2FsbG9jLXRyYWNrLmhcbiBGOlx0bW0vcHJvY2Vzc192bV9hY2Nlc3MuY1xuK0Y6XHR0b29scy9saWIvbW0vXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL1xuIFxuIE1FTU9SWSBNQU5BR0VNRU5UIC0gTlVNQSBNRU1CTE9DS1MgQU5EIE5VTUEgRU1VTEFUSU9OXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzkyZjRiNGRiNjI1MmVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbkBAIC0wLDAgKzEsMTE5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImZpbGVfdXRpbHMuaFwiXG4rXG4raW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4re1xuK1x0aW50IGZkO1xuK1x0c3NpemVfdCBudW1yZWFkO1xuK1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbitcdGlmIChmZCA9PSAtMSkge1xuK1x0XHRpbnQgZXJyID0gZXJybm87XG4rXG4rXHRcdHByaW50ZihcIiMgJXM6ICVzICglZClcXG5cIiwgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTtcbitcdFx0cmV0dXJuIC1lcnI7XG4rXHR9XG4rXG4rXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbitcdGlmIChudW1yZWFkIFx1MDAzYyAxKSB7XG4rXHRcdGludCBlcnIgPSBudW1yZWFkID8gZXJybm8gOiBFTk9EQVRBO1xuK1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHByaW50ZihcIiMgJXM6ICVzICglZClcXG5cIiwgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTtcbitcdFx0cmV0dXJuIC1lcnI7XG4rXHR9XG4rXG4rXHRidWZbbnVtcmVhZF0gPSAnXFwwJztcbitcdGNsb3NlKGZkKTtcbitcbitcdHJldHVybiAoaW50KW51bXJlYWQ7XG4rfVxuK1xuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbilcbit7XG4rXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xuK1x0c3NpemVfdCBudW13cml0dGVuO1xuK1xuK1x0aWYgKGJ1ZmxlbiBcdTAwM2MgMikge1xuK1x0XHRwcmludGYoXCIjICVzOiAlcyAoJWQpXFxuXCIsIHBhdGgsIHN0cmVycm9yKEVJTlZBTCksIEVJTlZBTCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbitcdGlmIChmZCA9PSAtMSkge1xuK1x0XHRpbnQgZXJyID0gZXJybm87XG4rXG4rXHRcdHByaW50ZihcIiMgJXM6ICVzICglZClcXG5cIiwgcGF0aCwgc3RyZXJyb3IoZXJyKSwgZXJyKTtcbitcdFx0cmV0dXJuIC1lcnI7XG4rXHR9XG4rXG4rXHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4rXHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0Y2xvc2UoZmQpO1xuK1x0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApIHtcbitcdFx0cHJpbnRmKFwiIyAlczogJXMgKCVkKVxcblwiLCBwYXRoLCBzdHJlcnJvcihzYXZlZF9lcnJubyksXG4rXHRcdCAgICAgICBzYXZlZF9lcnJubyk7XG4rXHRcdHJldHVybiAtc2F2ZWRfZXJybm87XG4rXHR9XG4rXHRpZiAobnVtd3JpdHRlbiAhPSAoc3NpemVfdCkoYnVmbGVuIC0gMSkpIHtcbitcdFx0cHJpbnRmKFwiIyAlcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcblwiLFxuK1x0XHQgICAgICAgcGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7XG4rXHRcdHJldHVybiAtRUlPO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pXG4re1xuK1x0dW5zaWduZWQgbG9uZyB2YWw7XG4rXHRpbnQgZXJyLCByZXQ7XG4rXHRjaGFyIGJ1ZlsyMV07XG4rXHRjaGFyICplbmQ7XG4rXG4rXHRpZiAoIW51bSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0ZXJybm8gPSAwO1xuK1x0dmFsID0gc3RydG91bChidWYsIFx1MDAyNmVuZCwgMTApO1xuK1x0aWYgKGVycm5vKSB7XG4rXHRcdGVyciA9IGVycm5vO1xuK1x0XHRwcmludGYoXCIjICVzOiAlcyAoJWQpXFxuXCIsIHBhdGgsIHN0cmVycm9yKGVyciksIGVycik7XG4rXHRcdHJldHVybiAtZXJyO1xuK1x0fVxuK1xuK1x0aWYgKGVuZCA9PSBidWYgfHwgYnVmWzBdID09ICctJykge1xuK1x0XHRwcmludGYoXCIjICVzOiBpbnZhbGlkIG51bWVyaWMgdmFsdWVcXG5cIiwgcGF0aCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCplbmQgPT0gJ1xcbicpXG4rXHRcdGVuZCsrO1xuK1xuK1x0aWYgKCplbmQgIT0gJ1xcMCcpIHtcbitcdFx0cHJpbnRmKFwiIyAlczogaW52YWxpZCBudW1lcmljIHZhbHVlXFxuXCIsIHBhdGgpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdCpudW0gPSB2YWw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbit7XG4rXHRjaGFyIGJ1ZlsyMV07XG4rXG4rXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiVsdVwiLCBudW0pO1xuK1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSArIDEpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zODU3Njc5MGEzNDI0NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxuQEAgLTAsMCArMSwxMiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmbmRlZiBfX01NX0ZJTEVfVVRJTFNfSF9fXG4rI2RlZmluZSBfX01NX0ZJTEVfVVRJTFNfSF9fXG4rXG4rI2luY2x1ZGUgXHUwMDNjc3RkZGVmLmhcdTAwM2VcbitcbitpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4raW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbitpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKTtcbitpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbnNpbWlsYXJpdHkgaW5kZXggOTElXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbmluZGV4IDJlYWIyMTEwYWM2YTQ2Li44ZDllNDQ3MjdlZGJmNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbisrKyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5AQCAtOSwxMSArOSwxNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJmaWxlX3V0aWxzLmhcIlxuICNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBUSFBfU1lTRlMgXCIvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS9cIlxuICNkZWZpbmUgTUFYX1NFVFRJTkdTX0RFUFRIIDRcbitcbisjaWZuZGVmIEFSUkFZX1NJWkVcbisjZGVmaW5lIEFSUkFZX1NJWkUoYXJyKSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKVxuKyNlbmRpZlxuK1xuIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNldHRpbmdzX3N0YWNrW01BWF9TRVRUSU5HU19ERVBUSF07XG4gc3RhdGljIGludCBzZXR0aW5nc19pbmRleDtcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzYXZlZF9zZXR0aW5ncztcbkBAIC02MSwxMCArNjYsOSBAQCBpbnQgdGhwX3JlYWRfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10pXG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbiBcbi1cdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7XG4tXHRcdHBlcnJvcihwYXRoKTtcbitcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbiBcbiBcdGMgPSBzdHJjaHIoYnVmLCAnWycpO1xuIFx0aWYgKCFjKSB7XG5AQCAtMTAzLDEyICsxMDcsMTUgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbClcbiBcdFx0cHJpbnRmKFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0d3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICsgMSk7XG4rXHRyZXQgPSB3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgKyAxKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiB9XG4gXG4gdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0dW5zaWduZWQgbG9uZyBudW07XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFRIUF9TWVNGUyBcIiVzXCIsIG5hbWUpO1xuQEAgLTExNiw3ICsxMjMsMTEgQEAgdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcbiBcdFx0cHJpbnRmKFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcbitcdHJldHVybiBudW07XG4gfVxuIFxuIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcbkBAIC0xMjksNyArMTQwLDkgQEAgdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKVxuIFx0XHRwcmludGYoXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHR3cml0ZV9udW0ocGF0aCwgbnVtKTtcbitcdHJldCA9IHdyaXRlX251bShwYXRoLCBudW0pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIH1cbiBcbiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuQEAgLTE1Nyw4ICsxNzAsMTMgQEAgdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbiBcdFx0Lm1heF9wdGVzX3NoYXJlZCA9IHRocF9yZWFkX251bShcImtodWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXCIpLFxuIFx0XHQucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bShcImtodWdlcGFnZWQvcGFnZXNfdG9fc2NhblwiKSxcbiBcdH07XG4tXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSlcbi1cdFx0c2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYiA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgpO1xuK1x0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHtcbitcdFx0aW50IHJldCA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG4rXHRcdFx0XHQgICBcdTAwMjZzZXR0aW5ncy1cdTAwM2VyZWFkX2FoZWFkX2tiKTtcbitcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9PUkRFUlM7IGkrKykge1xuIFx0XHRpZiAoISgoMSBcdTAwM2NcdTAwM2MgaSkgXHUwMDI2IG9yZGVycykpIHtcbkBAIC0yMDgsOCArMjI2LDEzIEBAIHZvaWQgdGhwX3dyaXRlX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuIFx0dGhwX3dyaXRlX251bShcImtodWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXCIsIGtodWdlcGFnZWQtXHUwMDNlbWF4X3B0ZXNfc2hhcmVkKTtcbiBcdHRocF93cml0ZV9udW0oXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cIiwga2h1Z2VwYWdlZC1cdTAwM2VwYWdlc190b19zY2FuKTtcbiBcbi1cdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxuLVx0XHR3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgc2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4rXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xuK1x0XHRpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG4rXHRcdFx0XHQgICAgc2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4rXG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfT1JERVJTOyBpKyspIHtcbiBcdFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNiBvcmRlcnMpKVxuQEAgLTMwNiw4ICszMjksMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX190aHBfc3VwcG9ydGVkX29yZGVycyhib29sIGlzX3NobWVtKVxuIFx0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdFx0fVxuIFxuK1x0XHRpZiAoYWNjZXNzKHBhdGgsIEZfT0spKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4tXHRcdGlmIChyZXQpXG4rXHRcdGlmIChyZXQgXHUwMDNlIDApXG4gXHRcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbiBcdH1cbiBcbkBAIC0zODIsOCArNDA4LDcgQEAgaW50IGRldGVjdF9odWdldGxiX3BhZ2Vfc2l6ZXModW5zaWduZWQgbG9uZyBzaXplc1tdLCBpbnQgbWF4KVxuIFx0XHRpZiAoc3NjYW5mKGVudHJ5LVx1MDAzZWRfbmFtZSwgXCJodWdlcGFnZXMtJXp1a0JcIiwgXHUwMDI2a2IpICE9IDEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdHNpemVzW2NvdW50KytdID0ga2IgKiAxMDI0O1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcIltJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcblwiLFxuLVx0XHRcdCAgICAgICBrYik7XG4rXHRcdHByaW50ZihcIiMgW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxuXCIsIGtiKTtcbiBcdH1cbiBcdGNsb3NlZGlyKGRpcik7XG4gXHRyZXR1cm4gY291bnQ7XG5AQCAtNDI1LDI4ICs0NTAsNDMgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl9zeXNmc19wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbixcbiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHR1bnNpZ25lZCBsb25nIG5yO1xuK1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwibnJfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnIpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1xuK1x0cmV0dXJuIG5yO1xuIH1cbiBcbiB2b2lkIGh1Z2V0bGJfc2V0X25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwibnJfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0d3JpdGVfbnVtKHBhdGgsIG5yKTtcbitcdHJldCA9IHdyaXRlX251bShwYXRoLCBucik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0dW5zaWduZWQgbG9uZyBucjtcbitcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcImZyZWVfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnIpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1xuK1x0cmV0dXJuIG5yO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBfX2h1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKVxuQEAgLTUwMiw3ICs1NDIsOCBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyBzaXplc1tdLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmIChucl9lbmFibGVkIFx1MDAzZSBtYXgpIHtcbi1cdFx0a3NmdF9wcmludF9tc2coXCJkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxuXCIsIG5yX2VuYWJsZWQsIG1heCk7XG4rXHRcdHByaW50ZihcIiMgZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxcblwiLFxuK1x0XHQgICAgICAgbnJfZW5hYmxlZCwgbWF4KTtcbiBcdFx0bnJfZW5hYmxlZCA9IG1heDtcbiBcdH1cbiBcbkBAIC01NzQsOCArNjE1LDEwIEBAIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0KHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19zaWdoYW5kbGVyKGludCBzaWcpXG4ge1xuK1x0KHZvaWQpc2lnO1xuK1xuIFx0LyogZXhpdCgpIHdpbGwgaW52b2tlIHRoZSBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCBoYW5kbGVyLiAqL1xuLVx0ZXhpdChLU0ZUX0ZBSUwpO1xuK1x0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIH1cbiBcbiB2b2lkIGh1Z2VwYWdlX3NhdmVfc2V0dGluZ3MoYm9vbCB0aHAsIGJvb2wgaHVnZXRsYilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbnNpbWlsYXJpdHkgaW5kZXggMTAwJVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbmluZGV4IDkyMjg3OWY5M2ZjODQ5Li4xNTRkNzQwYmUwMmU4MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbkBAIC0yLDMgKzIsNSBAQFxuIHNsYWJpbmZvXG4gcGFnZS10eXBlc1xuIHBhZ2Vfb3duZXJfc29ydFxuK3RocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4rZ3VwX2JlbmNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxuaW5kZXggZjU3MjViNWMyM2FhMjYuLmQ4MmNjOGM0M2VlMDJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL21tL01ha2VmaWxlXG5AQCAtMywxMyArMywxNCBAQFxuICNcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxuIFxuLUJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbitCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xuIFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcbitHVVBfQkVOQ0hfT0JKUyA9IGd1cF9iZW5jaC5jIC4uL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIC4uL2xpYi9tbS9maWxlX3V0aWxzLmNcbiBcbi1DRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWRcbitDRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLUkuLi8uLiAtcHRocmVhZFxuIExERkxBR1MgKz0gJChMSUJTKSAtcHRocmVhZFxuIFxuIGFsbDogJChCVUlMRF9UQVJHRVRTKVxuQEAgLTIyLDggKzIzLDExIEBAICQoTElCUyk6XG4gJTogJS5jXG4gXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFx1MDAzYyAkKExERkxBR1MpXG4gXG4rZ3VwX2JlbmNoOiAkKEdVUF9CRU5DSF9PQkpTKSAkKExJQlMpXG4rXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJChHVVBfQkVOQ0hfT0JKUykgJChMREZMQUdTKVxuK1xuIGNsZWFuOlxuLVx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbitcdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXG4gXG4gc2JpbmRpciA/PSAvdXNyL3NiaW5cbmRpZmYgLS1naXQgYS90b29scy9tbS9ndXBfYmVuY2guYyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ5N2I4ZjNmNmFjNGI0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9tbS9ndXBfYmVuY2guY1xuQEAgLTAsMCArMSw0ODIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogTWljcm9iZW5jaG1hcmsgZm9yIGdldF91c2VyX3BhZ2VzIChHVVApIGtlcm5lbCBpbnRlcmZhY2VzLlxuKyAqXG4rICogRXhlcmNpc2VzIEdVUF9GQVNUX0JFTkNITUFSSywgUElOX0ZBU1RfQkVOQ0hNQVJLLCBhbmRcbisgKiBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLIHZpYSB0aGUgQ09ORklHX0dVUF9URVNUIGRlYnVnZnMgaW50ZXJmYWNlLlxuKyAqXG4rICogRXhhbXBsZSB1c2U6XG4rICogICAjIFJ1biB0aGUgZnVsbCBtYXRyaXggKGFsbCBjb21tYW5kcywgYWNjZXNzIG1vZGVzLCBwYWdlIGNvdW50cyk6XG4rICogICAuL2d1cF9iZW5jaFxuKyAqXG4rICogICAjIFNpbmdsZSBydW46IHBpbl91c2VyX3BhZ2VzX2Zhc3QsIDUxMiBwYWdlcywgd3JpdGUgYWNjZXNzLCBodWdldGxiOlxuKyAqICAgLi9ndXBfYmVuY2ggLWEgLW4gNTEyIC13IC1IXG4rICpcbisgKiBSZXF1aXJlcyBDT05GSUdfR1VQX1RFU1Q9eSBhbmQgZGVidWdmcyBtb3VudGVkIGF0IC9zeXMva2VybmVsL2RlYnVnLlxuKyAqIE11c3QgYmUgcnVuIGFzIHJvb3QuXG4rICovXG4rXG4rI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvaW9jdGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGF0b21pYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vZ3VwX3Rlc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbitcbisjZGVmaW5lIE1CICgxVUwgXHUwMDNjXHUwMDNjIDIwKVxuK1xuKyNpZm5kZWYgQVJSQVlfU0laRVxuKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpXG4rI2VuZGlmXG4rXG4rLyogSnVzdCB0aGUgZmxhZ3Mgd2UgbmVlZCwgY29waWVkIGZyb20gdGhlIGtlcm5lbCBpbnRlcm5hbHMuICovXG4rI2RlZmluZSBGT0xMX1dSSVRFXHQweDAxXHQvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi9cbitcbisjZGVmaW5lIEdVUF9URVNUX0ZJTEUgXCIvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdFwiXG4rXG4rc3RhdGljIHVuc2lnbmVkIGludCBwc2l6ZSh2b2lkKVxuK3tcbitcdHN0YXRpYyB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7XG4rXG4rXHRpZiAoIV9fcGFnZV9zaXplKVxuK1x0XHRfX3BhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTtcbitcdHJldHVybiBfX3BhZ2Vfc2l6ZTtcbit9XG4rXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgY21kO1xuK3N0YXRpYyBjb25zdCBjaGFyICpiZW5jaF9sYWJlbDtcbitzdGF0aWMgaW50IGd1cF9mZCwgcmVwZWF0cyA9IDE7XG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDEyOCAqIE1CO1xuK3N0YXRpYyBhdG9taWNfaW50IGJlbmNoX2Vycm9yO1xuKy8qIFNlcmlhbGl6ZSBwcmludHMgKi9cbitzdGF0aWMgcHRocmVhZF9tdXRleF90IHByaW50X211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjtcbitcbitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBiZW5jaF9jbWRzW10gPSB7XG4rXHRHVVBfRkFTVF9CRU5DSE1BUkssXG4rXHRQSU5fRkFTVF9CRU5DSE1BUkssXG4rXHRQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IGludCBiZW5jaF90aHBfbW9kZXNbXSA9IHsgMSwgMCB9O1x0Lyogb24sIG9mZiAqL1xuK3N0YXRpYyBjb25zdCBpbnQgYmVuY2hfbnJfcGFnZXNfbGlzdFtdID0geyAxLCA1MTIsIDEyMywgLTEgfTtcbitcbitzdGF0aWMgY29uc3QgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZClcbit7XG4rXHRzd2l0Y2ggKGNtZCkge1xuK1x0Y2FzZSBHVVBfRkFTVF9CRU5DSE1BUks6XG4rXHRcdHJldHVybiBcIkdVUF9GQVNUX0JFTkNITUFSS1wiO1xuK1x0Y2FzZSBQSU5fRkFTVF9CRU5DSE1BUks6XG4rXHRcdHJldHVybiBcIlBJTl9GQVNUX0JFTkNITUFSS1wiO1xuK1x0Y2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOlxuK1x0XHRyZXR1cm4gXCJQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXCI7XG4rXHR9XG4rXHRyZXR1cm4gXCJVbmtub3duIGNvbW1hbmRcIjtcbit9XG4rXG4rc3RhdGljIGxvbmcgcGFyc2VfbG9uZ19hcmdfYmFzZShjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBiYXNlKVxuK3tcbitcdGNoYXIgKmVuZDtcbitcdGxvbmcgdmFsO1xuK1xuK1x0ZXJybm8gPSAwO1xuK1x0dmFsID0gc3RydG9sKGFyZywgXHUwMDI2ZW5kLCBiYXNlKTtcbitcdGlmIChlcnJubyB8fCBlbmQgPT0gYXJnIHx8ICplbmQgIT0gJ1xcMCcpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiSW52YWxpZCAlcyAnJXMnXFxuXCIsIG5hbWUsIGFyZyk7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rXHRyZXR1cm4gdmFsO1xuK31cbitcbitzdGF0aWMgbG9uZyBwYXJzZV9sb25nX2FyZyhjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0cmV0dXJuIHBhcnNlX2xvbmdfYXJnX2Jhc2UoYXJnLCBuYW1lLCAxMCk7XG4rfVxuK1xuK3N0YXRpYyBsb25nIHBhcnNlX3Bvc2l0aXZlX2xvbmdfYXJnKGNvbnN0IGNoYXIgKmFyZywgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRsb25nIHZhbCA9IHBhcnNlX2xvbmdfYXJnKGFyZywgbmFtZSk7XG4rXG4rXHRpZiAodmFsIFx1MDAzYyAxKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIkludmFsaWQgJXMgJyVzJ1xcblwiLCBuYW1lLCBhcmcpO1xuK1x0XHRleGl0KDEpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHZhbDtcbit9XG4rXG4rc3RydWN0IGJlbmNoX3J1biB7XG4rXHR1bnNpZ25lZCBsb25nIGNtZDtcbitcdGludCB0aHA7XHRcdC8qIC0xOiBkZWZhdWx0LCAwOiBvZmYsIDE6IG9uICovXG4rXHRib29sIGh1Z2V0bGI7XG4rXHRib29sIHdyaXRlO1x0XHQvKiB3aGV0aGVyIHRvIHNldCBGT0xMX1dSSVRFICovXG4rXHRib29sIHNoYXJlZDtcbitcdGludCBucl9wYWdlcztcdFx0LyogLTEgbWVhbnMgYWxsIHBhZ2VzIChzaXplIC8gcHNpemUoKSkgKi9cbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbitcdGNoYXIgKmZpbGU7XG4rXHRpbnQgbnRocmVhZHM7XG4rXHR1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzO1xuK307XG4rXG4rdm9pZCAqZ3VwX3RocmVhZCh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7XG4rXHRpbnQgaSwgc3RhdHVzO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVwZWF0czsgaSsrKSB7XG4rXHRcdGd1cC5zaXplID0gc2l6ZTtcbitcdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4rXHRcdGlmIChzdGF0dXMpIHtcbitcdFx0XHRiZW5jaF9lcnJvciA9IDE7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbitcdFx0cHJpbnRmKFwiJXMgdGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcIixcbitcdFx0ICAgICAgIGJlbmNoX2xhYmVsLCBndXAuZ2V0X2RlbHRhX3VzZWMsXG4rXHRcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xuK1x0XHRpZiAoZ3VwLnNpemUgIT0gc2l6ZSlcbitcdFx0XHRwcmludGYoXCIsIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcIiwgZ3VwLnNpemUpO1xuK1x0XHRwcmludGYoXCJcXG5cIik7XG4rXHRcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbitcdH1cbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IHJ1bl9iZW5jaChzdHJ1Y3QgYmVuY2hfcnVuICpydW4pXG4re1xuK1x0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuK1x0aW50IHplcm9fZmQsIGksIHJldCwgc3RhcnRlZF90aHJlYWRzID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXNfcGVyX2NhbGw7XG4rXHRpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURTtcbitcdHB0aHJlYWRfdCAqdGlkO1xuK1x0Y2hhciBsYWJlbFsxMjhdO1xuK1x0Y2hhciAqcDtcbitcdGJvb2wgcmVzdG9yZV9odWdldGxiID0gZmFsc2U7XG4rXG4rXHQvKiBTZXQgZ2xvYmFscyBjb25zdW1lZCBieSBndXBfdGhyZWFkICovXG4rXHRjbWQgPSBydW4tXHUwMDNlY21kO1xuK1x0c2l6ZSA9IHJ1bi1cdTAwM2VzaXplO1xuK1x0YmVuY2hfZXJyb3IgPSAwO1xuK1xuK1x0aWYgKHJ1bi1cdTAwM2VodWdldGxiKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcbitcbitcdFx0aWYgKCFocF9zaXplKSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiQ291bGQgbm90IGRldGVybWluZSBodWdlIHBhZ2Ugc2l6ZVxcblwiKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoc2l6ZSBcdTAwM2UgVUxPTkdfTUFYIC0gKGhwX3NpemUgLSAxKSkge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIkh1Z2VUTEIgbWFwcGluZyBzaXplIGlzIHRvbyBsYXJnZVxcblwiKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuK1xuK1x0XHRzaXplID0gKHNpemUgKyBocF9zaXplIC0gMSkgXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xuK1x0XHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cIik7XG4rXHRcdFx0aHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7XG4rXHRcdFx0cmV0dXJuIDE7XG4rXHRcdH1cbitcdFx0cmVzdG9yZV9odWdldGxiID0gdHJ1ZTtcbitcdFx0ZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XG4rXHR9XG4rXG4rXHRpZiAocnVuLVx1MDAzZXNoYXJlZCkge1xuK1x0XHRmbGFncyBcdTAwMjY9IH5NQVBfUFJJVkFURTtcbitcdFx0ZmxhZ3MgfD0gTUFQX1NIQVJFRDtcbitcdH1cbitcbitcdG5yX3BhZ2VzX3Blcl9jYWxsID0gcnVuLVx1MDAzZW5yX3BhZ2VzIFx1MDAzYyAwID8gc2l6ZSAvIHBzaXplKCkgOlxuK1x0XHQodW5zaWduZWQgbG9uZylydW4tXHUwMDNlbnJfcGFnZXM7XG4rXG4rXHRpZiAobnJfcGFnZXNfcGVyX2NhbGwgXHUwMDNlIFVJTlRfTUFYKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIlBhZ2UgY291bnQgaXMgdG9vIGxhcmdlXFxuXCIpO1xuK1x0XHRpZiAocmVzdG9yZV9odWdldGxiKVxuK1x0XHRcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX3Blcl9jYWxsO1xuK1xuK1x0Z3VwLmd1cF9mbGFncyA9IHJ1bi1cdTAwM2VndXBfZmxhZ3M7XG4rXHRpZiAocnVuLVx1MDAzZXdyaXRlKVxuK1x0XHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XG4rXG4rXHRzbnByaW50ZihsYWJlbCwgc2l6ZW9mKGxhYmVsKSwgXCIlcyAobnJfcGFnZXM9JS00dSAlcyAlcyAlcyAlcylcIixcbitcdFx0IGNtZF90b19zdHIocnVuLVx1MDAzZWNtZCksXG4rXHRcdCBndXAubnJfcGFnZXNfcGVyX2NhbGwsXG4rXHRcdCBydW4tXHUwMDNld3JpdGUgID8gXCJ3cml0ZVwiICAgOiBcInJlYWRcIixcbitcdFx0IHJ1bi1cdTAwM2VzaGFyZWQgPyBcInNoYXJlZFwiICA6IFwicHJpdmF0ZVwiLFxuK1x0XHQgcnVuLVx1MDAzZWh1Z2V0bGIgPyBcImh1Z2V0bGI9b25cIiA6IFwiaHVnZXRsYj1vZmZcIixcbitcdFx0IHJ1bi1cdTAwM2VodWdldGxiID8gXCJ0aHA9b2ZmXCIgOlxuK1x0XHQgKHJ1bi1cdTAwM2V0aHAgPT0gMSA/IFwidGhwPW9uXCIgOlxuK1x0XHQgKHJ1bi1cdTAwM2V0aHAgPT0gMCA/IFwidGhwPW9mZlwiIDogXCJ0aHA9ZGVmYXVsdFwiKSkpO1xuK1x0YmVuY2hfbGFiZWwgPSBsYWJlbDtcbitcbitcdHplcm9fZmQgPSBvcGVuKHJ1bi1cdTAwM2VmaWxlLCBPX1JEV1IpO1xuK1x0aWYgKHplcm9fZmQgXHUwMDNjIDApIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiVW5hYmxlIHRvIG9wZW4gJXM6ICVzXFxuXCIsIHJ1bi1cdTAwM2VmaWxlLCBzdHJlcnJvcihlcnJubykpO1xuK1x0XHRpZiAocmVzdG9yZV9odWdldGxiKVxuK1x0XHRcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcbitcdHAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCB6ZXJvX2ZkLCAwKTtcbitcdGNsb3NlKHplcm9fZmQpO1xuK1x0aWYgKHAgPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJtbWFwOiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0XHRpZiAocmVzdG9yZV9odWdldGxiKVxuK1x0XHRcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDtcbitcbitcdGlmIChydW4tXHUwMDNldGhwID09IDEpXG4rXHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4rXHRlbHNlIGlmIChydW4tXHUwMDNldGhwID09IDApXG4rXHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbitcbitcdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xuK1x0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBwc2l6ZSgpKVxuK1x0XHRwWzBdID0gMDtcbitcbitcdHRpZCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIHJ1bi1cdTAwM2VudGhyZWFkcyk7XG4rXHRpZiAoIXRpZCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJGYWlsZWQgdG8gYWxsb2NhdGUgJWQgdGhyZWFkczogJXNcXG5cIixcbitcdFx0XHRydW4tXHUwMDNlbnRocmVhZHMsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdG11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTtcbitcdFx0aWYgKHJlc3RvcmVfaHVnZXRsYilcbitcdFx0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBydW4tXHUwMDNlbnRocmVhZHM7IGkrKykge1xuK1x0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsIFx1MDAyNmd1cCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6ICVzXFxuXCIsIHN0cmVycm9yKHJldCkpO1xuK1x0XHRcdGJlbmNoX2Vycm9yID0gMTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRzdGFydGVkX3RocmVhZHMrKztcbitcdH1cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YXJ0ZWRfdGhyZWFkczsgaSsrKSB7XG4rXHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwicHRocmVhZF9qb2luIGZhaWxlZDogJXNcXG5cIiwgc3RyZXJyb3IocmV0KSk7XG4rXHRcdFx0YmVuY2hfZXJyb3IgPSAxO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRmcmVlKHRpZCk7XG4rXHRtdW5tYXAoKHZvaWQgKilndXAuYWRkciwgc2l6ZSk7XG4rXHRpZiAocmVzdG9yZV9odWdldGxiKVxuK1x0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbitcbitcdHJldHVybiBiZW5jaF9lcnJvciA/IDEgOiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ1bl9tYXRyaXgodm9pZClcbit7XG4rXHR1bnNpZ25lZCBpbnQgYywgdCwgdywgcywgbjtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0Zm9yIChjID0gMDsgYyBcdTAwM2MgQVJSQVlfU0laRShiZW5jaF9jbWRzKTsgYysrKSB7XG4rXHRcdGZvciAodyA9IDA7IHcgXHUwMDNjPSAxOyB3KyspIHtcbitcdFx0XHRmb3IgKHMgPSAwOyBzIFx1MDAzYz0gMTsgcysrKSB7XG4rXHRcdFx0XHRmb3IgKHQgPSAwOyB0IFx1MDAzYyBBUlJBWV9TSVpFKGJlbmNoX3RocF9tb2Rlcyk7IHQrKykge1xuK1x0XHRcdFx0XHRmb3IgKG4gPSAwOyBuIFx1MDAzYyBBUlJBWV9TSVpFKGJlbmNoX25yX3BhZ2VzX2xpc3QpOyBuKyspIHtcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgYmVuY2hfcnVuIHJ1biA9IHtcbitcdFx0XHRcdFx0XHRcdC5jbWRcdCAgPSBiZW5jaF9jbWRzW2NdLFxuK1x0XHRcdFx0XHRcdFx0LnRocFx0ICA9IGJlbmNoX3RocF9tb2Rlc1t0XSxcbitcdFx0XHRcdFx0XHRcdC5odWdldGxiICA9IGZhbHNlLFxuK1x0XHRcdFx0XHRcdFx0LndyaXRlXHQgID0gdyxcbitcdFx0XHRcdFx0XHRcdC5zaGFyZWRcdCAgPSBzLFxuK1x0XHRcdFx0XHRcdFx0Lm5yX3BhZ2VzID0gYmVuY2hfbnJfcGFnZXNfbGlzdFtuXSxcbitcdFx0XHRcdFx0XHRcdC5zaXplXHQgID0gMTI4ICogTUIsXG4rXHRcdFx0XHRcdFx0XHQuZmlsZVx0ICA9IFwiL2Rldi96ZXJvXCIsXG4rXHRcdFx0XHRcdFx0XHQubnRocmVhZHMgPSAxLFxuK1x0XHRcdFx0XHRcdH07XG4rXHRcdFx0XHRcdFx0cmV0IHw9IHJ1bl9iZW5jaChcdTAwMjZydW4pO1xuK1x0XHRcdFx0XHR9XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHQvKiBodWdldGxiOiAyNTZNIHRvIG1hdGNoIHJ1bl9ndXBfbWF0cml4KCkgaW4gcnVuX3ZtdGVzdHMuc2ggKi9cbitcdFx0XHRcdGZvciAobiA9IDA7IG4gXHUwMDNjIEFSUkFZX1NJWkUoYmVuY2hfbnJfcGFnZXNfbGlzdCk7IG4rKykge1xuK1x0XHRcdFx0XHRzdHJ1Y3QgYmVuY2hfcnVuIHJ1biA9IHtcbitcdFx0XHRcdFx0XHQuY21kXHQgID0gYmVuY2hfY21kc1tjXSxcbitcdFx0XHRcdFx0XHQudGhwXHQgID0gLTEsXG4rXHRcdFx0XHRcdFx0Lmh1Z2V0bGIgID0gdHJ1ZSxcbitcdFx0XHRcdFx0XHQud3JpdGVcdCAgPSB3LFxuK1x0XHRcdFx0XHRcdC5zaGFyZWRcdCAgPSBzLFxuK1x0XHRcdFx0XHRcdC5ucl9wYWdlcyA9IGJlbmNoX25yX3BhZ2VzX2xpc3Rbbl0sXG4rXHRcdFx0XHRcdFx0LnNpemVcdCAgPSAyNTYgKiBNQixcbitcdFx0XHRcdFx0XHQuZmlsZVx0ICA9IFwiL2Rldi96ZXJvXCIsXG4rXHRcdFx0XHRcdFx0Lm50aHJlYWRzID0gMSxcbitcdFx0XHRcdFx0fTtcbitcdFx0XHRcdFx0cmV0IHw9IHJ1bl9iZW5jaChcdTAwMjZydW4pO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuK3tcbitcdHN0cnVjdCBiZW5jaF9ydW4gcnVuID0ge1xuK1x0XHQuY21kXHQgID0gR1VQX0ZBU1RfQkVOQ0hNQVJLLFxuK1x0XHQudGhwXHQgID0gLTEsXG4rXHRcdC5odWdldGxiICA9IGZhbHNlLFxuK1x0XHQud3JpdGVcdCAgPSB0cnVlLFxuK1x0XHQuc2hhcmVkXHQgID0gZmFsc2UsXG4rXHRcdC5ucl9wYWdlcyA9IDEsXG4rXHRcdC5zaXplXHQgID0gMTI4ICogTUIsXG4rXHRcdC5maWxlXHQgID0gXCIvZGV2L3plcm9cIixcbitcdFx0Lm50aHJlYWRzID0gMSxcbitcdH07XG4rXHRpbnQgb3B0LCByZXN1bHQ7XG4rXG4rXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcIm06cjpuOkY6Zjphajp0VEx1d1dTSFwiKSkgIT0gLTEpIHtcbitcdFx0c3dpdGNoIChvcHQpIHtcbitcdFx0LyogQ29tbWFuZCBzZWxlY3Rpb24gKi9cbitcdFx0Y2FzZSAndSc6XG4rXHRcdFx0cnVuLmNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSztcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnYSc6XG4rXHRcdFx0cnVuLmNtZCA9IFBJTl9GQVNUX0JFTkNITUFSSztcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnTCc6XG4rXHRcdFx0cnVuLmNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIE1lbW9yeSB0eXBlICovXG4rXHRcdGNhc2UgJ0gnOlxuK1x0XHRcdHJ1bi5odWdldGxiID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAndCc6XG4rXHRcdFx0cnVuLnRocCA9IDE7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ1QnOlxuK1x0XHRcdHJ1bi50aHAgPSAwO1xuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBBY2Nlc3MgbW9kZSAqL1xuK1x0XHRjYXNlICd3JzpcbitcdFx0XHRydW4ud3JpdGUgPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdXJzpcbitcdFx0XHRydW4ud3JpdGUgPSBmYWxzZTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnUyc6XG4rXHRcdFx0cnVuLnNoYXJlZCA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIE1hcHBpbmcgKi9cbitcdFx0Y2FzZSAnZic6XG4rXHRcdFx0cnVuLmZpbGUgPSBvcHRhcmc7XG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIFNpemluZyBhbmQgaXRlcmF0aW9uICovXG4rXHRcdGNhc2UgJ20nOlxuK1x0XHRcdHJ1bi5zaXplID0gcGFyc2VfcG9zaXRpdmVfbG9uZ19hcmcob3B0YXJnLCBcInNpemVcIik7XG4rXHRcdFx0aWYgKHJ1bi5zaXplIFx1MDAzZSBVTE9OR19NQVggLyBNQikge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiSW52YWxpZCBzaXplICclcydcXG5cIiwgb3B0YXJnKTtcbitcdFx0XHRcdGV4aXQoMSk7XG4rXHRcdFx0fVxuK1x0XHRcdHJ1bi5zaXplICo9IE1CO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICduJzoge1xuK1x0XHRcdGxvbmcgdmFsO1xuK1xuK1x0XHRcdHZhbCA9IHBhcnNlX2xvbmdfYXJnKG9wdGFyZywgXCJwYWdlIGNvdW50XCIpO1xuK1x0XHRcdGlmICh2YWwgIT0gLTEgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDNjIDEgfHwgdmFsIFx1MDAzZSBJTlRfTUFYKSkge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiSW52YWxpZCBwYWdlIGNvdW50ICclcydcXG5cIiwgb3B0YXJnKTtcbitcdFx0XHRcdGV4aXQoMSk7XG4rXHRcdFx0fVxuK1x0XHRcdHJ1bi5ucl9wYWdlcyA9IHZhbDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRjYXNlICdyJzoge1xuK1x0XHRcdGxvbmcgdmFsO1xuK1xuK1x0XHRcdHZhbCA9IHBhcnNlX3Bvc2l0aXZlX2xvbmdfYXJnKG9wdGFyZywgXCJyZXBlYXQgY291bnRcIik7XG4rXHRcdFx0aWYgKHZhbCBcdTAwM2UgSU5UX01BWCkge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiSW52YWxpZCByZXBlYXQgY291bnQgJyVzJ1xcblwiLCBvcHRhcmcpO1xuK1x0XHRcdFx0ZXhpdCgxKTtcbitcdFx0XHR9XG4rXHRcdFx0cmVwZWF0cyA9IHZhbDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRjYXNlICdqJzoge1xuK1x0XHRcdGxvbmcgdmFsO1xuK1xuK1x0XHRcdHZhbCA9IHBhcnNlX3Bvc2l0aXZlX2xvbmdfYXJnKG9wdGFyZywgXCJ0aHJlYWQgY291bnRcIik7XG4rXHRcdFx0aWYgKHZhbCBcdTAwM2UgSU5UX01BWCB8fFxuK1x0XHRcdCAgICAoc2l6ZV90KXZhbCBcdTAwM2UgU0laRV9NQVggLyBzaXplb2YocHRocmVhZF90KSkge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiSW52YWxpZCB0aHJlYWQgY291bnQgJyVzJ1xcblwiLCBvcHRhcmcpO1xuK1x0XHRcdFx0ZXhpdCgxKTtcbitcdFx0XHR9XG4rXHRcdFx0cnVuLm50aHJlYWRzID0gdmFsO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdC8qIEFkdmFuY2VkICovXG4rXHRcdGNhc2UgJ0YnOiB7XG4rXHRcdFx0bG9uZyB2YWw7XG4rXG4rXHRcdFx0dmFsID0gcGFyc2VfbG9uZ19hcmdfYmFzZShvcHRhcmcsIFwiR1VQIGZsYWdzXCIsIDApO1xuK1x0XHRcdGlmICh2YWwgXHUwMDNjIDAgfHwgdmFsIFx1MDAzZSBVSU5UX01BWCkge1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiSW52YWxpZCBHVVAgZmxhZ3MgJyVzJ1xcblwiLCBvcHRhcmcpO1xuK1x0XHRcdFx0ZXhpdCgxKTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0cnVuLmd1cF9mbGFncyA9IHZhbDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIldyb25nIGFyZ3VtZW50XFxuXCIpO1xuK1x0XHRcdGV4aXQoMSk7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChvcHRpbmQgIT0gYXJnYykge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJVbmV4cGVjdGVkIGFyZ3VtZW50ICclcydcXG5cIiwgYXJndltvcHRpbmRdKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbitcbitcdGd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbitcdGlmIChndXBfZmQgPT0gLTEpIHtcbitcdFx0aWYgKGVycm5vID09IEVBQ0NFUykge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIlBsZWFzZSBydW4gYXMgcm9vdFxcblwiKTtcbitcdFx0fSBlbHNlIGlmIChlcnJubyA9PSBFTk9FTlQpIHtcbitcdFx0XHRESVIgKmRlYnVnZnMgPSBvcGVuZGlyKFwiL3N5cy9rZXJuZWwvZGVidWdcIik7XG4rXG4rXHRcdFx0aWYgKCFkZWJ1Z2ZzKSB7XG4rXHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxuXCIpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRjbG9zZWRpcihkZWJ1Z2ZzKTtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIkNoZWNrIENPTkZJR19HVVBfVEVTVCBpbiBrZXJuZWwgY29uZmlnXFxuXCIpO1xuK1x0XHRcdH1cbitcdFx0fSBlbHNlIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJGYWlsZWQgdG8gb3BlbiAlczogJXNcXG5cIiwgR1VQX1RFU1RfRklMRSxcbitcdFx0XHRcdHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdH1cbitcdFx0ZXhpdCgxKTtcbitcdH1cbitcbitcdHJlc3VsdCA9IChhcmdjID09IDEpID8gcnVuX21hdHJpeCgpIDogcnVuX2JlbmNoKFx1MDAyNnJ1bik7XG4rXHRjbG9zZShndXBfZmQpO1xuK1x0cmV0dXJuIHJlc3VsdDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggZTZkZjk2OGYwOTcxYzguLmU3N2M0Y2M0MWI0NzAzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMzcsNyArMzcsOCBAQCBlbmRpZlxuICMgTERMSUJTLlxuIE1BS0VGTEFHUyArPSAtLW5vLWJ1aWx0aW4tcnVsZXNcbiBcbi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxuK0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliXG4rQ0ZMQUdTICs9ICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXG4gQ0ZMQUdTICs9IC1XdW5yZWFjaGFibGUtY29kZVxuIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbVxuIFxuQEAgLTE4Nyw4ICsxODgsMTAgQEAgVEVTVF9GSUxFUyArPSB3cml0ZV9odWdldGxiX21lbW9yeS5zaFxuIFxuIGluY2x1ZGUgLi4vbGliLm1rXG4gXG4tJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jXG4tJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jXG4rJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXG4rXHRcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xuKyQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcXFxuK1x0XHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbiBcbiAkKE9VVFBVVCkvdWZmZC1zdHJlc3M6IHVmZmQtY29tbW9uLmNcbiAkKE9VVFBVVCkvdWZmZC11bml0LXRlc3RzOiB1ZmZkLWNvbW1vbi5jXG5AQCAtMjE3LDcgKzIyMCw3IEBAICQoQklOQVJJRVNfMzIpOiBDRkxBR1MgKz0gLW0zMiAtbXhzYXZlXG4gJChCSU5BUklFU18zMik6IExETElCUyArPSAtbHJ0IC1sZGwgLWxtXG4gJChCSU5BUklFU18zMik6ICQoT1VUUFVUKS8lXzMyOiAlLmNcbiBcdCQoY2FsbCBtc2csQ0MsLCRAKVxuLVx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxuK1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRAXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTMyLCQodCkpKSlcbiBlbmRpZlxuIFxuQEAgLTIyNiw3ICsyMjksNyBAQCAkKEJJTkFSSUVTXzY0KTogQ0ZMQUdTICs9IC1tNjQgLW14c2F2ZVxuICQoQklOQVJJRVNfNjQpOiBMRExJQlMgKz0gLWxydCAtbGRsXG4gJChCSU5BUklFU182NCk6ICQoT1VUUFVUKS8lXzY0OiAlLmNcbiBcdCQoY2FsbCBtc2csQ0MsLCRAKVxuLVx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxuK1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRAXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTY0LCQodCkpKSlcbiBlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcbmluZGV4IDViNTgyNTg4ZTAxNWQ0Li5iMmVhYTQ5MGU3YzI1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuQEAgLTE1LDkgKzE1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgTUFQX1NJWkVfTUJcdDEwMFxuICNkZWZpbmUgTUFQX1NJWkVcdChNQVBfU0laRV9NQiAqIDEwMjQgKiAxMDI0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbmluZGV4IDBjNjI3ZWE4OWZmN2IyLi4zYzNkMTI5YzkxYjI5ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuQEAgLTI5LDcgKzI5LDYgQEBcbiAjaW5jbHVkZSBcIi4uLy4uLy4uLy4uL21tL2d1cF90ZXN0LmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbmluZGV4IDYzMjllMzdmZmY0Yzk0Li40OTZiNzRiMzc0NzZiMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xuQEAgLTI1LDcgKzI1LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIHVpbnQ2NF90IHBhZ2Vfc2l6ZTtcbiB1aW50NjRfdCBwbWRfcGFnZXNpemU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5pbmRleCBiMjFkZjMwNDBiMWM3Yy4uZWQ5NjdiM2M3ZjM3MDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuQEAgLTIxLDcgKzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpbmNsdWRlIFwiLi4vcGlkZmQvcGlkZmQuaFwiXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuaW5kZXggZWI4OTYzZTlkOThmMDYuLjY4Yzg0MGJhZTA4MjA4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG5AQCAtMjksNyArMjksNiBAQFxuICNpbmNsdWRlIFwiLi4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcbiBzdGF0aWMgaW50IG5yX2h1Z2V0bGJzaXplcztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuaW5kZXggM2Y4NDFhOTZmODcwNjguLmQ5Y2FhOWZiOGI3ODU2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuQEAgLTEsMjc1ICsxLDQ0MyBAQFxuICNkZWZpbmUgX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fIC8vIFVzZSBsbDY0XG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvaW9jdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2Nhc3NlcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY21tL2d1cF90ZXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuIFxuICNkZWZpbmUgTUIgKDFVTCBcdTAwM2NcdTAwM2MgMjApXG4gXG4rI2lmbmRlZiBBUlJBWV9TSVpFXG4rI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSlcbisjZW5kaWZcbitcbiAvKiBKdXN0IHRoZSBmbGFncyB3ZSBuZWVkLCBjb3BpZWQgZnJvbSB0aGUga2VybmVsIGludGVybmFscy4gKi9cbiAjZGVmaW5lIEZPTExfV1JJVEVcdDB4MDFcdC8qIGNoZWNrIHB0ZSBpcyB3cml0YWJsZSAqL1xuIFxuKy8qIFBhZ2UgY291bnRzIGV4ZXJjaXNpbmcgc2luZ2xlLCBUSFAtYmF0Y2gsIHBhcnRpYWwsIGFuZCBmdWxsLW1hcHBpbmcgR1VQLiAqL1xuK3N0YXRpYyBjb25zdCBpbnQgbnJfcGFnZXNfbGlzdFtdID0geyAxLCA1MTIsIDEyMywgLTEgfTtcbitcbiAjZGVmaW5lIEdVUF9URVNUX0ZJTEUgXCIvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdFwiXG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgY21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xuLXN0YXRpYyBpbnQgZ3VwX2ZkLCByZXBlYXRzID0gMTtcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7XG4tLyogU2VyaWFsaXplIHByaW50cyAqL1xuLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgcHJpbnRfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xuK0ZJWFRVUkUoZ3VwX3Rlc3QpXG4re1xuK1x0aW50IGd1cF9mZDtcbitcdGNoYXIgKmFkZHI7XG4rXHR1bnNpZ25lZCBsb25nIHNpemU7XG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpXG4re1xuK1x0Ym9vbCB0aHA7XG4rXHRib29sIGh1Z2V0bGI7XG4rXHRib29sIHdyaXRlO1xuK1x0Ym9vbCBzaGFyZWQ7XG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkb25seSlcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocClcbit7XG4rXHQudGhwID0gdHJ1ZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkb25seV90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSB0cnVlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZG9ubHlfaHVnZXRsYilcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IHRydWUsXG4rXHQud3JpdGUgPSBmYWxzZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZSlcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSB0cnVlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRvbmx5KVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSBmYWxzZSxcbitcdC5zaGFyZWQgPSB0cnVlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocClcbit7XG4rXHQudGhwID0gdHJ1ZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbiBcbi1zdGF0aWMgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZClcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZG9ubHlfdGhwKVxuIHtcbi1cdHN3aXRjaCAoY21kKSB7XG4tXHRjYXNlIEdVUF9GQVNUX0JFTkNITUFSSzpcbi1cdFx0cmV0dXJuIFwiR1VQX0ZBU1RfQkVOQ0hNQVJLXCI7XG4tXHRjYXNlIFBJTl9GQVNUX0JFTkNITUFSSzpcbi1cdFx0cmV0dXJuIFwiUElOX0ZBU1RfQkVOQ0hNQVJLXCI7XG4tXHRjYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6XG4tXHRcdHJldHVybiBcIlBJTl9MT05HVEVSTV9CRU5DSE1BUktcIjtcbi1cdGNhc2UgR1VQX0JBU0lDX1RFU1Q6XG4tXHRcdHJldHVybiBcIkdVUF9CQVNJQ19URVNUXCI7XG4tXHRjYXNlIFBJTl9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCJQSU5fQkFTSUNfVEVTVFwiO1xuLVx0Y2FzZSBEVU1QX1VTRVJfUEFHRVNfVEVTVDpcbi1cdFx0cmV0dXJuIFwiRFVNUF9VU0VSX1BBR0VTX1RFU1RcIjtcbitcdC50aHAgPSB0cnVlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYilcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IHRydWUsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZG9ubHlfaHVnZXRsYilcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IHRydWUsXG4rXHQud3JpdGUgPSBmYWxzZSxcbitcdC5zaGFyZWQgPSB0cnVlLFxuK307XG4rXG4rRklYVFVSRV9TRVRVUChndXBfdGVzdClcbit7XG4rXHRpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFO1xuK1x0aW50IHplcm9fZmQ7XG4rXHRjaGFyICpwO1xuK1xuK1x0LyogemVyb19mZCBoYXMgdG8gYmUgXHUwMDNlPSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovXG4rXHR6ZXJvX2ZkID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKHplcm9fZmQsIDApO1xuK1xuK1x0LyogZ3VwX2ZkIGhhcyB0byBiZSBcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cbitcdHNlbGYtXHUwMDNlZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZ3VwX2ZkLCAwKTtcbitcbitcdHNlbGYtXHUwMDNlc2l6ZSA9IHZhcmlhbnQtXHUwMDNlaHVnZXRsYiA/IDI1NiAqIE1CIDogMTI4ICogTUI7XG4rXG4rXHQvKiBDaGVjayBmb3IgaHVnZXRsYiAqL1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNlaHVnZXRsYikge1xuK1x0XHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4rXG4rXHRcdGlmICghaHBfc2l6ZSkge1xuK1x0XHRcdGNsb3NlKHplcm9fZmQpO1xuK1x0XHRcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbitcdFx0XHRTS0lQKHJldHVybiwgXCJIdWdlVExCIG5vdCBhdmFpbGFibGVcXG5cIik7XG4rXHRcdH1cbitcbitcdFx0c2VsZi1cdTAwM2VzaXplID0gKHNlbGYtXHUwMDNlc2l6ZSArIGhwX3NpemUgLSAxKSBcdTAwMjYgfihocF9zaXplIC0gMSk7XG4rXHRcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNlbGYtXHUwMDNlc2l6ZSAvIGhwX3NpemUpKSB7XG4rXHRcdFx0aHVnZXRsYl9yZXN0b3JlX3NldHRpbmdzKCk7XG4rXHRcdFx0Y2xvc2UoemVyb19mZCk7XG4rXHRcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VndXBfZmQpO1xuK1x0XHRcdFNLSVAocmV0dXJuLCBcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwiKTtcbitcdFx0fVxuK1xuK1x0XHRtbWFwX2ZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpO1xuK1x0fVxuK1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNlc2hhcmVkKVxuK1x0XHRtbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgXHUwMDI2IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEO1xuK1xuK1x0c2VsZi1cdTAwM2VhZGRyID0gbW1hcChOVUxMLCBzZWxmLVx1MDAzZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdFx0ICBtbWFwX2ZsYWdzLCB6ZXJvX2ZkLCAwKTtcbitcbitcdGNsb3NlKHplcm9fZmQpO1xuK1xuK1x0QVNTRVJUX05FKHNlbGYtXHUwMDNlYWRkciwgTUFQX0ZBSUxFRCkge1xuK1x0XHRpbnQgZXJyID0gZXJybm87XG4rXG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbitcdFx0aWYgKHZhcmlhbnQtXHUwMDNlaHVnZXRsYilcbitcdFx0XHRodWdldGxiX3Jlc3RvcmVfc2V0dGluZ3MoKTtcbitcdFx0VEhfTE9HKFwibW1hcCBmYWlsZWQ6ICVzXCIsIHN0cmVycm9yKGVycikpO1xuIFx0fVxuLVx0cmV0dXJuIFwiVW5rbm93biBjb21tYW5kXCI7XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2V0aHApXG4rXHRcdG1hZHZpc2Uoc2VsZi1cdTAwM2VhZGRyLCBzZWxmLVx1MDAzZXNpemUsIE1BRFZfSFVHRVBBR0UpO1xuK1x0ZWxzZVxuK1x0XHRtYWR2aXNlKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplLCBNQURWX05PSFVHRVBBR0UpO1xuK1xuK1x0Zm9yIChwID0gc2VsZi1cdTAwM2VhZGRyOyAodW5zaWduZWQgbG9uZylwIFx1MDAzYyAodW5zaWduZWQgbG9uZylzZWxmLVx1MDAzZWFkZHJcbitcdFx0XHQrIHNlbGYtXHUwMDNlc2l6ZTsgcCArPSBwc2l6ZSgpKVxuK1x0XHRwWzBdID0gMDtcbiB9XG4gXG4tdm9pZCAqZ3VwX3RocmVhZCh2b2lkICpkYXRhKVxuK0ZJWFRVUkVfVEVBUkRPV04oZ3VwX3Rlc3QpXG4ge1xuLVx0c3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTtcbi1cdGludCBpLCBzdGF0dXM7XG4tXG4tXHQvKiBPbmx5IHJlcG9ydCB0aW1pbmcgaW5mb3JtYXRpb24gb24gdGhlICpfQkVOQ0hNQVJLIGNvbW1hbmRzOiAqL1xuLVx0aWYgKChjbWQgPT0gUElOX0ZBU1RfQkVOQ0hNQVJLKSB8fCAoY21kID09IEdVUF9GQVNUX0JFTkNITUFSSykgfHxcbi1cdCAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXBlYXRzOyBpKyspIHtcbi1cdFx0XHRndXAuc2l6ZSA9IHNpemU7XG4tXHRcdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4tXHRcdFx0aWYgKHN0YXR1cylcbi1cdFx0XHRcdGJyZWFrO1xuLVxuLVx0XHRcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcIixcbi1cdFx0XHRcdCAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbi1cdFx0XHRcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xuLVx0XHRcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCIsIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcIiwgZ3VwLnNpemUpO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiXFxuXCIpO1xuLVx0XHRcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbi1cdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0Z3VwLnNpemUgPSBzaXplO1xuLVx0XHRzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgXHUwMDI2Z3VwKTtcbi1cdFx0aWYgKHN0YXR1cylcbi1cdFx0XHRnb3RvIHJldHVybl87XG4tXG4tXHRcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwiJXM6IGRvbmVcXG5cIiwgY21kX3RvX3N0cihjbWQpKTtcbi1cdFx0aWYgKGd1cC5zaXplICE9IHNpemUpXG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCJUcnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxuXCIsIGd1cC5zaXplKTtcbi1cdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuK1x0bXVubWFwKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplKTtcbitcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbitcbitcdGlmICh2YXJpYW50LVx1MDAzZWh1Z2V0bGIpXG4rXHRcdGh1Z2V0bGJfcmVzdG9yZV9zZXR0aW5ncygpO1xuK31cbitcbitURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzKVxuK3tcbitcdC8qIFRlc3RzIHRoZSBnZXRfdXNlcl9wYWdlcyBwYXRoICovXG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbitcbitcdFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLVx1MDAzZWFkZHI7XG4rXHRcdGd1cC5zaXplID0gc2VsZi1cdTAwM2VzaXplO1xuK1x0XHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFx1MDAzYyAwID9cbitcdFx0XHRzZWxmLVx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTtcbitcbitcdFx0aWYgKHZhcmlhbnQtXHUwMDNld3JpdGUpXG4rXHRcdFx0Z3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFO1xuK1xuK1x0XHRUSF9MT0coXCJucl9wYWdlc19wZXJfY2FsbD0ldVwiLCBndXAubnJfcGFnZXNfcGVyX2NhbGwpO1xuK1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIEdVUF9CQVNJQ19URVNULCBcdTAwMjZndXApLCAwKTtcbitcdH1cbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlcylcbit7XG4rXHQvKiBUZXN0cyB0aGUgcGluX3VzZXJfcGFnZXMgcGF0aCAqL1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4rXG4rXHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuK1x0XHRndXAuc2l6ZSA9IHNlbGYtXHUwMDNlc2l6ZTtcbitcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4rXHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4rXG4rXHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuK1x0XHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbitcbitcdFx0VEhfTE9HKFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbitcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBQSU5fQkFTSUNfVEVTVCwgXHUwMDI2Z3VwKSwgMCk7XG4gXHR9XG4rfVxuIFxuLXJldHVybl86XG4tXHRrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsIFwiaW9jdGwgc3RhdHVzICVkXFxuXCIsIHN0YXR1cyk7XG4tXHRyZXR1cm4gTlVMTDtcbitURVNUX0YoZ3VwX3Rlc3QsIGR1bXBfdXNlcl9wYWdlc193aXRoX2dldClcbit7XG4rXHQvKiBUZXN0cyBEVU1QX1VTRVJfUEFHRVNfVEVTVCB1c2luZyBnZXRfdXNlcl9wYWdlcyAqL1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4rXG4rXHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuK1x0XHRndXAuc2l6ZSA9IHNlbGYtXHUwMDNlc2l6ZTtcbitcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4rXHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4rXG4rXHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuK1x0XHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbitcbitcdFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbitcbitcdFx0VEhfTE9HKFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbitcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgXHUwMDI2Z3VwKSwgMCk7XG4rXHR9XG4gfVxuIFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbitURVNUX0YoZ3VwX3Rlc3QsIGR1bXBfdXNlcl9wYWdlc193aXRoX3BpbilcbiB7XG4tXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4tXHRpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDtcbi1cdGludCBmbGFncyA9IE1BUF9QUklWQVRFO1xuLVx0Y2hhciAqZmlsZSA9IFwiL2Rldi96ZXJvXCI7XG4tXHRib29sIGh1Z2V0bGIgPSBmYWxzZTtcbi1cdHB0aHJlYWRfdCAqdGlkO1xuLVx0Y2hhciAqcDtcbitcdC8qIFRlc3RzIERVTVBfVVNFUl9QQUdFU19URVNUIHVzaW5nIHBpbl91c2VyX3BhZ2VzICovXG4rXHRpbnQgaTtcbiBcbi1cdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwibTpyOm46RjpmOmFiY2o6dFRMVXV3V1NIcHpcIikpICE9IC0xKSB7XG4tXHRcdHN3aXRjaCAob3B0KSB7XG4tXHRcdGNhc2UgJ2EnOlxuLVx0XHRcdGNtZCA9IFBJTl9GQVNUX0JFTkNITUFSSztcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnYic6XG4tXHRcdFx0Y21kID0gUElOX0JBU0lDX1RFU1Q7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ0wnOlxuLVx0XHRcdGNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ2MnOlxuLVx0XHRcdGNtZCA9IERVTVBfVVNFUl9QQUdFU19URVNUO1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRHVtcCBwYWdlIDAgKGluZGV4IDEpLiBNYXkgYmUgb3ZlcnJpZGRlbiBsYXRlciwgYnlcbi1cdFx0XHQgKiB1c2VyJ3Mgbm9uLW9wdGlvbiBhcmd1bWVudHMuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAud2hpY2hfcGFnZXMgaXMgemVyby1iYXNlZCwgc28gdGhhdCB6ZXJvIGNhbiBtZWFuIFwiZG9cbi1cdFx0XHQgKiBub3RoaW5nXCIuXG4tXHRcdFx0ICovXG4tXHRcdFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAncCc6XG4tXHRcdFx0Lyogd29ya3Mgb25seSB3aXRoIERVTVBfVVNFUl9QQUdFU19URVNUICovXG4tXHRcdFx0Z3VwLnRlc3RfZmxhZ3MgfD0gR1VQX1RFU1RfRkxBR19EVU1QX1BBR0VTX1VTRV9QSU47XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ0YnOlxuLVx0XHRcdC8qIHN0cnRvbCwgc28geW91IGNhbiBwYXNzIGZsYWdzIGluIGhleCBmb3JtICovXG4tXHRcdFx0Z3VwLmd1cF9mbGFncyA9IHN0cnRvbChvcHRhcmcsIDAsIDApO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdqJzpcbi1cdFx0XHRudGhyZWFkcyA9IGF0b2kob3B0YXJnKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnbSc6XG4tXHRcdFx0c2l6ZSA9IGF0b2kob3B0YXJnKSAqIE1CO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdyJzpcbi1cdFx0XHRyZXBlYXRzID0gYXRvaShvcHRhcmcpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICduJzpcbi1cdFx0XHRucl9wYWdlcyA9IGF0b2kob3B0YXJnKTtcbi1cdFx0XHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdFx0XHRucl9wYWdlcyA9IHNpemUgLyBwc2l6ZSgpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICd0Jzpcbi1cdFx0XHR0aHAgPSAxO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdUJzpcbi1cdFx0XHR0aHAgPSAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdVJzpcbi1cdFx0XHRjbWQgPSBHVVBfQkFTSUNfVEVTVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAndSc6XG4tXHRcdFx0Y21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICd3Jzpcbi1cdFx0XHR3cml0ZSA9IDE7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ1cnOlxuLVx0XHRcdHdyaXRlID0gMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnZic6XG4tXHRcdFx0ZmlsZSA9IG9wdGFyZztcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnUyc6XG4tXHRcdFx0ZmxhZ3MgXHUwMDI2PSB+TUFQX1BSSVZBVEU7XG4tXHRcdFx0ZmxhZ3MgfD0gTUFQX1NIQVJFRDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnSCc6XG4tXHRcdFx0ZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XG4tXHRcdFx0aHVnZXRsYiA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiV3JvbmcgYXJndW1lbnRcXG5cIik7XG4tXHRcdH1cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbitcbitcdFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLVx1MDAzZWFkZHI7XG4rXHRcdGd1cC5zaXplID0gc2VsZi1cdTAwM2VzaXplO1xuK1x0XHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFx1MDAzYyAwID9cbitcdFx0XHRzZWxmLVx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXTtcbitcbitcdFx0aWYgKHZhcmlhbnQtXHUwMDNld3JpdGUpXG4rXHRcdFx0Z3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFO1xuK1xuK1x0XHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xuK1x0XHRndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjtcbitcbitcdFx0VEhfTE9HKFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbitcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgXHUwMDI2Z3VwKSwgMCk7XG4gXHR9XG4rfVxuIFxuLVx0aWYgKG9wdGluZCBcdTAwM2MgYXJnYykge1xuLVx0XHRpbnQgZXh0cmFfYXJnX2NvdW50ID0gMDtcbi1cdFx0Lypcbi1cdFx0ICogRm9yIGV4YW1wbGU6XG4tXHRcdCAqXG4tXHRcdCAqICAgLi9ndXBfdGVzdCAtYyAwIDEgMHgxMDAxXG4tXHRcdCAqXG4tXHRcdCAqIC4uLnRvIGR1bXAgcGFnZXMgMCwgMSwgYW5kIDQwOTdcbi1cdFx0ICovXG4tXG4tXHRcdHdoaWxlICgob3B0aW5kIFx1MDAzYyBhcmdjKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICAgIChleHRyYV9hcmdfY291bnQgXHUwMDNjIEdVUF9URVNUX01BWF9QQUdFU19UT19EVU1QKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW5cbi1cdFx0XHQgKiB1c2Ugbm9ybWFsIDAtYmFzZWQgaW5kZXhpbmcgb24gdGhlIGNvbW1hbmQgbGluZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSArIDE7XG4tXG4tXHRcdFx0Z3VwLndoaWNoX3BhZ2VzW2V4dHJhX2FyZ19jb3VudF0gPSBwYWdlX2luZGV4O1xuLVx0XHRcdGV4dHJhX2FyZ19jb3VudCsrO1xuLVx0XHRcdG9wdGluZCsrO1xuLVx0XHR9XG4rVEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlc19mYXN0KVxuK3tcbitcdC8qIFRlc3RzIHRoZSBsb2NrbGVzcyBnZXRfdXNlcl9wYWdlc19mYXN0KCkgcGF0aCAqL1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4rXG4rXHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuK1x0XHRndXAuc2l6ZSA9IHNlbGYtXHUwMDNlc2l6ZTtcbitcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4rXHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4rXG4rXHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuK1x0XHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbitcbitcdFx0VEhfTE9HKFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbitcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBHVVBfRkFTVF9CRU5DSE1BUkssIFx1MDAyNmd1cCksIDApO1xuIFx0fVxuK31cbitcbitURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2Zhc3QpXG4re1xuK1x0LyogVGVzdHMgdGhlIGxvY2tsZXNzIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBwYXRoICovXG4rXHRpbnQgaTtcbiBcbi1cdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4gXG4tXHRpZiAoaHVnZXRsYikge1xuLVx0XHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4rXHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuK1x0XHRndXAuc2l6ZSA9IHNlbGYtXHUwMDNlc2l6ZTtcbitcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4rXHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4gXG4tXHRcdGlmICghaHBfc2l6ZSlcbi1cdFx0XHRrc2Z0X2V4aXRfc2tpcChcIkh1Z2VUTEIgaXMgdW5hdmFpbGFibGVcXG5cIik7XG4rXHRcdGlmICh2YXJpYW50LVx1MDAzZXdyaXRlKVxuK1x0XHRcdGd1cC5ndXBfZmxhZ3MgfD0gRk9MTF9XUklURTtcbiBcbi1cdFx0c2l6ZSA9IChzaXplICsgaHBfc2l6ZSAtIDEpIFx1MDAyNiB+KGhwX3NpemUgLSAxKTtcbi1cdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKVxuLVx0XHRcdGtzZnRfZXhpdF9za2lwKFwiTm90IGVub3VnaCBodWdlIHBhZ2VzXFxuXCIpO1xuK1x0XHRUSF9MT0coXCJucl9wYWdlc19wZXJfY2FsbD0ldVwiLCBndXAubnJfcGFnZXNfcGVyX2NhbGwpO1xuK1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIFBJTl9GQVNUX0JFTkNITUFSSywgXHUwMDI2Z3VwKSwgMCk7XG4gXHR9XG4rfVxuIFxuLVx0a3NmdF9zZXRfcGxhbihudGhyZWFkcyk7XG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19sb25ndGVybSlcbit7XG4rXHQvKiBUZXN0cyBwaW5fdXNlcl9wYWdlcygpIHdpdGggRk9MTF9MT05HVEVSTSAqL1xuK1x0aW50IGk7XG4gXG4tXHRmaWxlZCA9IG9wZW4oZmlsZSwgT19SRFdSfE9fQ1JFQVQsIDA2NjQpO1xuLVx0aWYgKGZpbGVkIFx1MDAzYyAwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbiBcbi1cdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzO1xuLVx0aWYgKHdyaXRlKVxuLVx0XHRndXAuZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7XG4rXHRcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyO1xuK1x0XHRndXAuc2l6ZSA9IHNlbGYtXHUwMDNlc2l6ZTtcbitcdFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4rXHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV07XG4gXG4tXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4tXHRpZiAoZ3VwX2ZkID09IC0xKSB7XG4tXHRcdHN3aXRjaCAoZXJybm8pIHtcbi1cdFx0Y2FzZSBFQUNDRVM6XG4tXHRcdFx0aWYgKGdldHVpZCgpKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCIpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIEVOT0VOVDpcbi1cdFx0XHRpZiAob3BlbmRpcihcIi9zeXMva2VybmVsL2RlYnVnXCIpID09IE5VTEwpXG4tXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcIm1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cIik7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCJjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXFxuXCIpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwiKTtcbi1cdFx0a3NmdF9leGl0X3Bhc3MoKTtcbitcdFx0aWYgKHZhcmlhbnQtXHUwMDNld3JpdGUpXG4rXHRcdFx0Z3VwLmd1cF9mbGFncyB8PSBGT0xMX1dSSVRFO1xuK1xuK1x0XHRUSF9MT0coXCJucl9wYWdlc19wZXJfY2FsbD0ldVwiLCBndXAubnJfcGFnZXNfcGVyX2NhbGwpO1xuK1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIFBJTl9MT05HVEVSTV9CRU5DSE1BUkssIFx1MDAyNmd1cCksIDApO1xuIFx0fVxuK31cbitcbitURVNUKGR1bXBfdXNlcl9wYWdlc19zcGFyc2VfaW5kaWNlcylcbit7XG4rXHQvKiBUZXN0cyBzcGFyc2UgbXVsdGktaW5kZXggd2hpY2hfcGFnZXNbXSBpbnB1dHMuICovXG4rXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4rXHR1bnNpZ25lZCBsb25nIHNpemUgPSAxMjggKiBNQjtcbitcdGludCB6ZXJvX2ZkLCBndXBfZmQ7XG4rXHRjaGFyICphZGRyLCAqcDtcbitcbitcdHplcm9fZmQgPSBvcGVuKFwiL2Rldi96ZXJvXCIsIE9fUkRXUik7XG4rXHRBU1NFUlRfR0UoemVyb19mZCwgMCk7XG4gXG4tXHRwID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncywgZmlsZWQsIDApO1xuLVx0aWYgKHAgPT0gTUFQX0ZBSUxFRClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwibW1hcDogJXNcXG5cIiwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDtcbitcdGd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbitcdEFTU0VSVF9HRShndXBfZmQsIDApO1xuK1xuK1x0YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIHplcm9fZmQsIDApO1xuK1x0Y2xvc2UoemVyb19mZCk7XG4rXHRBU1NFUlRfTkUoYWRkciwgTUFQX0ZBSUxFRCk7XG4gXG4tXHRpZiAodGhwID09IDEpXG4tXHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4tXHRlbHNlIGlmICh0aHAgPT0gMClcbi1cdFx0bWFkdmlzZShwLCBzaXplLCBNQURWX05PSFVHRVBBR0UpO1xuK1x0bWFkdmlzZShhZGRyLCBzaXplLCBNQURWX0hVR0VQQUdFKTtcbiBcbi1cdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xuLVx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBwc2l6ZSgpKVxuK1x0Zm9yIChwID0gYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpYWRkciArIHNpemU7XG4rXHQgICAgIHAgKz0gcHNpemUoKSlcbiBcdFx0cFswXSA9IDA7XG4gXG4tXHR0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7XG4tXHRhc3NlcnQodGlkKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG50aHJlYWRzOyBpKyspIHtcbi1cdFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCBcdTAwMjZndXApO1xuLVx0XHRhc3NlcnQocmV0ID09IDApO1xuLVx0fVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRocmVhZHM7IGkrKykge1xuLVx0XHRyZXQgPSBwdGhyZWFkX2pvaW4odGlkW2ldLCBOVUxMKTtcbi1cdFx0YXNzZXJ0KHJldCA9PSAwKTtcbitcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjtcbitcdGd1cC5zaXplID0gc2l6ZTtcbitcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IHNpemUgLyBwc2l6ZSgpO1xuK1x0Z3VwLmd1cF9mbGFncyA9IEZPTExfV1JJVEU7XG4rXHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xuK1x0Z3VwLndoaWNoX3BhZ2VzWzFdID0gMjA7XG4rXHRndXAud2hpY2hfcGFnZXNbMl0gPSAweDEwMDE7XG4rXG4rXHQvKlxuK1x0ICogUHJlc2VydmUgdGhlIG9sZCBcIi4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMFwiIHNwYXJzZSBkdW1wXG4rXHQgKiBjb3ZlcmFnZSBhZnRlciByZW1vdmluZyBjb21tYW5kLWxpbmUgcGFyc2luZyBmcm9tIHRoaXMgYmluYXJ5LlxuK1x0ICovXG4rXHRBU1NFUlRfRVEoaW9jdGwoZ3VwX2ZkLCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgXHUwMDI2Z3VwKSwgMCk7XG4rXG4rXHRtdW5tYXAoYWRkciwgc2l6ZSk7XG4rXHRjbG9zZShndXBfZmQpO1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4re1xuK1x0aW50IGZkO1xuK1x0Y2hhciAqZmlsZSA9IFwiL2Rldi96ZXJvXCI7XG4rXG4rXHRmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbiBcdH1cbitcdGNsb3NlKGZkKTtcbiBcbi1cdGZyZWUodGlkKTtcbitcdGZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuK1x0aWYgKGZkID09IC0xKSB7XG4rXHRcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRcdGlmIChlcnJubyA9PSBFQUNDRVMpXG4rXHRcdFx0a3NmdF9leGl0X3NraXAoXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCIpO1xuK1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKSB7XG4rXHRcdFx0RElSICpkZWJ1Z2ZzID0gb3BlbmRpcihcIi9zeXMva2VybmVsL2RlYnVnXCIpO1xuK1xuK1x0XHRcdGlmICghZGVidWdmcykge1xuK1x0XHRcdFx0a3NmdF9leGl0X3NraXAoXCJNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxuXCIpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRjbG9zZWRpcihkZWJ1Z2ZzKTtcbitcdFx0XHRcdGtzZnRfZXhpdF9za2lwKFwiQ2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcXG5cIik7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdGtzZnRfZXhpdF9za2lwKFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XG4rXHR9XG4rXHRjbG9zZShmZCk7XG4gXG4tXHRrc2Z0X2V4aXRfcGFzcygpO1xuK1x0cmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IDJmMmI5ODc5ZDEwMDUxLi5lMWJiMDMxMDE5ZjJhYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuQEAgLTEwLDkgKzEwLDYgQEBcbiAgKiBidWdzLlxuICAqL1xuIFxuLSNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbi1cbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbkBAIC0yOSw2ICsyNiw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuIFxuIC8qXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuY1xuaW5kZXggNTU1YjRiM2QxNDMwN2UuLjU3Y2Y3OTBjYTQ3OGQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5AQCAtMTQsNyArMTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIE1JTl9GUkVFX1BBR0VTXHQyMFxuICNkZWZpbmUgTlJfSFVHRV9QQUdFU1x0MTBcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuaW5kZXggMGYyYWFkMWI3ZGJkNmYuLmE0NThiZWNmNTgzMjdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXG5AQCAtMTgsNyArMTgsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxuICNkZWZpbmUgUFJPVEVDVElPTiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuaW5kZXggZWQzZDkyZTg2MmQ4NzYuLjliNzI0YWY2NmU5Mzg4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuQEAgLTI2LDcgKzI2LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIERFRkFVTFRfTEVOR1RIX01CIDEwVUxcbiAjZGVmaW5lIE1CX1RPX0JZVEVTKHgpICh4ICogMTAyNCAqIDEwMjQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbmluZGV4IDNmZjdmMDYyYjdlYjQ1Li5mNDUxNGRhNDllMWRmNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbmluZGV4IGJjMjAyZTRlZDJiZGE3Li4yMDg2NGU3ZDRlMGM3MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbkBAIC0yMSw5ICsyMSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0ZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORVxuICNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi12bWVtbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXZtZW1tYXAuY1xuaW5kZXggNTA3ZGY3OGExNThkOGQuLmM0NmE2NTZjMjVhMDRlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi12bWVtbWFwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItdm1lbW1hcC5jXG5AQCAtMTEsNyArMTEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBQQUdFX0NPTVBPVU5EX0hFQURcdCgxVUwgXHUwMDNjXHUwMDNjIDE1KVxuICNkZWZpbmUgUEFHRV9DT01QT1VORF9UQUlMXHQoMVVMIFx1MDAzY1x1MDAzYyAxNilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuaW5kZXggZmI0NjAwNTcwZTEzMTkuLjk0OTU5NzRlY2NiZWE1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuQEAgLTIwLDcgKzIwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2lmbmRlZiBTVEFUWF9ESU9BTElHTlxuICNkZWZpbmUgU1RBVFhfRElPQUxJR05cdFx0MHgwMDAwMjAwMFVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5pbmRleCAyZGMxNTgwNTRmNjY2Yi4uNTZjNWE4NTMzZTlkOTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbkBAIC0xMCw3ICsxMCw2IEBAXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBJTkxPT1BfSVRFUiAxMDBcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcbmluZGV4IGY5NDU0OWVmY2M2ZmYzLi4yNTMyYTQyYjk4ZGZmMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5AQCAtMjUsNyArMjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBJTkxPT1BfSVRFUiAxMDBcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDEwZThkZWRjYjA4N2RjLi4yMzgyOTczYjJmNTUyYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjIsNyArMjIsNiBAQFxuICNpbmNsdWRlIFwibGludXgvbWFnaWMuaFwiXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuQEAgLTExOSw2ICsxMTgsNyBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKVxuIFx0Y2hhciBidWZbMSBcdTAwM2NcdTAwM2MgMTBdO1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiBcdGNoYXIgKnN0ciwgKmVuZDtcbitcdGludCByZXQ7XG4gXG4gXHRmaW5mby5kaXIgPSBkaXI7XG4gXHRzdGF0KGZpbmZvLmRpciwgXHUwMDI2cGF0aF9zdGF0KTtcbkBAIC0xMzgsOCArMTM4LDkgQEAgc3RhdGljIHZvaWQgZ2V0X2ZpbmZvKGNvbnN0IGNoYXIgKmRpcilcbiBcdFx0ICAgICBtYWpvcihwYXRoX3N0YXQuc3RfZGV2KSwgbWlub3IocGF0aF9zdGF0LnN0X2RldikpXG4gXHQgICAgXHUwMDNlPSBzaXplb2YocGF0aCkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwiLCBfX2Z1bmNfXyk7XG4tXHRpZiAocmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIFx1MDAzYyAwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJyZWFkX2ZpbGUocmVhZF9udW0pXCIpO1xuK1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiBcdGlmIChzdHJzdHIoYnVmLCBcIkRFVlRZUEU9ZGlza1wiKSkge1xuIFx0XHQvKiBGb3VuZCBpdCAqL1xuIFx0XHRpZiAoc25wcmludGYoZmluZm8uZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcbkBAIC0zMTksNyArMzIwLDcgQEAgc3RhdGljIHZvaWQgKmZpbGVfc2V0dXBfYXJlYV9jb21tb24oaW50IG5yX2hwYWdlcywgZW51bSBmaWxlX3NldHVwX29wcyBzZXR1cClcbiB7XG4gXHRjb25zdCBpbnQgb3Blbl9vcHQgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IE9fUkRPTkxZIDogT19SRFdSO1xuIFx0Y29uc3QgaW50IG1tYXBfcHJvdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gUFJPVF9SRUFEIDogKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpO1xuLVx0aW50IGZkO1xuK1x0aW50IGZkLCByZXQ7XG4gXHR2b2lkICpwO1xuIFx0dW5zaWduZWQgbG9uZyBzaXplO1xuIFxuQEAgLTM2Myw3ICszNjQsMTAgQEAgc3RhdGljIHZvaWQgKmZpbGVfc2V0dXBfYXJlYV9jb21tb24oaW50IG5yX2hwYWdlcywgZW51bSBmaWxlX3NldHVwX29wcyBzZXR1cClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwibW1hcCgpXCIpO1xuIFxuIFx0LyogRHJvcCBwYWdlIGNhY2hlICovXG4tXHR3cml0ZV9maWxlKFwiL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzXCIsIFwiM1wiLCAyKTtcbitcdHJldCA9IHdyaXRlX2ZpbGUoXCIvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNcIiwgXCIzXCIsIDIpO1xuK1x0aWYgKHJldClcbitcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbitcbiBcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdHJldHVybiBwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCBhMDUwZjQ4NDBjZmEzYS4uY2MzNzQ5MmNmMzJjM2QgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbkBAIC0xNSw3ICsxNSw2IEBAXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4gI2luY2x1ZGUgXHUwMDNjaW5jbHVkZS92ZHNvL3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBLU01fU1lTRlNfUEFUSCBcIi9zeXMva2VybmVsL21tL2tzbS9cIlxuICNkZWZpbmUgS1NNX0ZQKHMpIChLU01fU1lTRlNfUEFUSCBzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbmluZGV4IDI5Zjc0OTI0NTNkNDM5Li40ZmU5N2MwMzMyNjEyNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xuQEAgLTQsOSArNCw2IEBAXG4gICogcGF0aHMgaW4gdGhlIGtlcm5lbC5cbiAgKi9cbiBcbi0jaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4tXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbnVtYS5oXHUwMDNlXG5AQCAtMTYsNiArMTMsOCBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiBcbiAjZGVmaW5lIFRXT01FR1x0XHQoMlx1MDAzY1x1MDAzYzIwKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggNmY4OTcxZDViM2NlNDMuLjgwNDM3MjgwMzA4MGNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0yMyw3ICsyMyw2IEBAXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBQQUdFTUFQX0JJVFNfQUxMXHRcdChQQUdFX0lTX1dQQUxMT1dFRCB8IFBBR0VfSVNfV1JJVFRFTiB8XHRcXFxuIFx0XHRcdFx0XHQgUEFHRV9JU19GSUxFIHwgUEFHRV9JU19QUkVTRU5UIHxcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbmluZGV4IGQ4ZDlkMWRlNTdiOGIwLi5hNGY4NDUxNzkxY2JkYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbkBAIC0xNCw3ICsxNCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gXG4gI2lmbmRlZiBQUl9USFBfRElTQUJMRV9FWENFUFRfQURWSVNFRFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbmluZGV4IDlhNmQ5NTRlZTM3MTI2Li41YmEyMDMzZThhMDljZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuQEAgLTQ1LDggKzQ1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gI2luY2x1ZGUgXCJwa2V5LWhlbHBlcnMuaFwiXG4gXG4gaW50IGl0ZXJhdGlvbl9uciA9IDE7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggOGMyOTZkZWRmMDQ3NGQuLjU2ZGYwZGNjOTY0MGMwIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5AQCAtMTMwLDMwICsxMzAsNiBAQCB0ZXN0X3NlbGVjdGVkKCkge1xuIFx0ZmlcbiB9XG4gXG4tcnVuX2d1cF9tYXRyaXgoKSB7XG4tICAgICMgLXQ6IHRocD1vbiwgLVQ6IHRocD1vZmYsIC1IOiBodWdldGxiPW9uXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XG4tXG4tICAgIGZvciBodWdlIGluIC10IC1UIFwiLUggLW0gJGh1Z2V0bGJfbWJcIjsgZG9cbi0gICAgICAgICMgLXU6IGd1cC1mYXN0LCAtVTogZ3VwLWJhc2ljLCAtYTogcGluLWZhc3QsIC1iOiBwaW4tYmFzaWMsIC1MOiBwaW4tbG9uZ3Rlcm1cbi0gICAgICAgIGZvciB0ZXN0X2NtZCBpbiAtdSAtVSAtYSAtYiAtTDsgZG9cbi0gICAgICAgICAgICAjIC13OiB3cml0ZT0xLCAtVzogd3JpdGU9MFxuLSAgICAgICAgICAgIGZvciB3cml0ZSBpbiAtdyAtVzsgZG9cbi0gICAgICAgICAgICAgICAgIyAtUzogc2hhcmVkXG4tICAgICAgICAgICAgICAgIGZvciBzaGFyZSBpbiAtUyBcIiBcIjsgZG9cbi0gICAgICAgICAgICAgICAgICAgICMgLW46IEhvdyBtYW55IHBhZ2VzIHRvIGZldGNoIHRvZ2V0aGVyPyAgNTEyIGlzIHNwZWNpYWxcbi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCdzIGRlZmF1bHQgdGhwIHNpemUgKG9yIDJNIG9uIHg4NiksIDEyMyB0b1xuLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm1cbi0gICAgICAgICAgICAgICAgICAgIGZvciBudW0gaW4gXCItbiAxXCIgXCItbiA1MTJcIiBcIi1uIDEyM1wiIFwiLW4gLTFcIjsgZG9cbi0gICAgICAgICAgICAgICAgICAgICAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCBcXFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGh1Z2UgJHRlc3RfY21kICR3cml0ZSAkc2hhcmUgJG51bVxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgZG9uZVxuLSAgICBkb25lXG4tfVxuLVxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcbiBBUkNINjRTVFI9XCJhcm02NCBtaXBzNjQgcGFyaXNjNjQgcHBjNjQgcHBjNjRsZSByaXNjdjY0IHMzOTB4IHNwYXJjNjQgeDg2XzY0XCJcbiBpZiBbIC16IFwiJEFSQ0hcIiBdOyB0aGVuXG5AQCAtMjc2LDE4ICsyNTIsNyBAQCBmaVxuIFxuIENBVEVHT1JZPVwibW1hcFwiIHJ1bl90ZXN0IC4vbWFwX2ZpeGVkX25vcmVwbGFjZVxuIFxuLWlmICRSVU5fQUxMOyB0aGVuXG4tICAgIHJ1bl9ndXBfbWF0cml4XG4tZWxzZVxuLSAgICAjIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcbi0gICAgQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAtMVxuLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcbi0gICAgQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gMVxuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAtMVxuLWZpXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XG4tQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMFxuK0NBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cF90ZXN0XG4gQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX2xvbmd0ZXJtXG4gXG4gQ0FURUdPUlk9XCJ1c2VyZmF1bHRmZFwiIHJ1bl90ZXN0IC4vdWZmZC11bml0LXRlc3RzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5pbmRleCBmYjE4NjRhNjhlMWM2Yi4uNmMyMmFjOWU5M2RiMDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuQEAgLTksNyArOSw2IEBAXG4gXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCBcIi9wcm9jL3NlbGYvcGFnZW1hcFwiXG4gI2RlZmluZSBURVNUX0lURVJBVElPTlMgMTAwMDBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuaW5kZXggMzJiOTkxNDcyZjc0NGYuLmU3NDRjOTQzNGU3ZDA1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTIxLDcgKzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiB1aW50NjRfdCBwYWdlc2l6ZTtcbiB1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0O1xuQEAgLTI2OSw3ICsyNjgsOSBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0aWYgKHJldCBcdTAwM2U9IElOUFVUX01BWClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXM6IERlYnVnZnMgaW5wdXQgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuIFxuLVx0d3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICsgMSk7XG4rXHRyZXQgPSB3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgKyAxKTtcbitcdGlmIChyZXQpXG4rXHRcdGtzZnRfZXhpdF9mYWlsKCk7XG4gfVxuIFxuIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmNcbmluZGV4IDIyYjljMmYxYzM1ZDIzLi4wZGExNWQ1MzBhMWZjOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuQEAgLTE0LDcgKzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQilcbiAjZGVmaW5lIE1BUF9IVUdFVExCXHQweDQwMDAwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5pbmRleCA4ZWIwYzU2MzBlN2UzMS4uOTZmNzI4OThlYmUwYTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuQEAgLTE3LDcgKzE3LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gaW50IGJhY2tpbmdfZmQgPSAtMTtcbiBpbnQgbW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcbmluZGV4IDkyYTIxYjk3Zjc0NWFmLi4wNzIzODQzYTc2MjZiMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcbkBAIC0zNyw3ICszNyw2IEBAXG4gXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBVRkZEX0ZMQUdTXHQoT19DTE9FWEVDIHwgT19OT05CTE9DSyB8IFVGRkRfVVNFUl9NT0RFX09OTFkpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbmluZGV4IGM5NzNkNjcyMjcyMGMzLi5lYjRiMjQzM2IwMGU2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbkBAIC03LDggKzcsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuICNpbmNsdWRlIFwidWZmZC1jb21tb24uaFwiXG4gXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xuaW5kZXggZTI0ZDdiYTAwYjQ0MTcuLjVhMzU0YTY2NGQxZjdkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcbkBAIC0xMSw3ICsxMSw2IEBAXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gLypcbiAgKiBUaGUgaGludCBhZGRyIHZhbHVlIGlzIHVzZWQgdG8gYWxsb2NhdGUgYWRkcmVzc2VzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5pbmRleCAzMTFmYzViNDUxM2ViNC4uZjI3NmVlZTU3NjgwNGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuQEAgLTY5OCw5MyArNjk4LDM5IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRyZXR1cm4gcmV0IFx1MDAzZSAwID8gMCA6IC1lcnJubztcbiB9XG4gXG4taW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4te1xuLVx0aW50IGZkO1xuLVx0c3NpemVfdCBudW1yZWFkO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdGlmIChudW1yZWFkIFx1MDAzYyAxKSB7XG4tXHRcdGNsb3NlKGZkKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRidWZbbnVtcmVhZF0gPSAnXFwwJztcbi1cdGNsb3NlKGZkKTtcbi1cbi1cdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xuLX1cbi1cbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdGludCBmZCwgc2F2ZWRfZXJybm87XG4tXHRzc2l6ZV90IG51bXdyaXR0ZW47XG4tXG4tXHRpZiAoYnVmbGVuIFx1MDAzYyAyKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJJbmNvcnJlY3QgYnVmZmVyIGxlbjogJXp1XFxuXCIsIGJ1Zmxlbik7XG4tXG4tXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xuLVx0aWYgKGZkID09IC0xKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlcyBvcGVuIGZhaWxlZDogJXNcXG5cIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbi1cbi1cdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdHNhdmVkX2Vycm5vID0gZXJybm87XG4tXHRjbG9zZShmZCk7XG4tXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuLVx0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzIHdyaXRlKCUuKnMpIGZhaWxlZDogJXNcXG5cIiwgcGF0aCwgKGludCkoYnVmbGVuIC0gMSksXG4tXHRcdFx0XHRidWYsIHN0cmVycm9yKGVycm5vKSk7XG4tXHRpZiAobnVtd3JpdHRlbiAhPSBidWZsZW4gLSAxKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcblwiLFxuLVx0XHRcdFx0cGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7XG4tfVxuLVxuLXVuc2lnbmVkIGxvbmcgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aClcbi17XG4tXHRjaGFyIGJ1ZlsyMV07XG4tXG4tXHRpZiAocmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIFx1MDAzYyAwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJyZWFkX2ZpbGUoKVwiKTtcbi1cbi1cdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbi17XG4tXHRjaGFyIGJ1ZlsyMV07XG4tXG4tXHRzcHJpbnRmKGJ1ZiwgXCIlbHVcIiwgbnVtKTtcbi1cdHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSArIDEpO1xuLX1cbi1cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1hbGwsIHNobW1heDtcbiBcbiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpXG4ge1xuLVx0aWYgKHNobW1heClcbi1cdFx0d3JpdGVfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcIiwgc2htbWF4KTtcbi1cdGlmIChzaG1hbGwpXG4tXHRcdHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIHNobWFsbCk7XG4rXHRpZiAoc2htbWF4IFx1MDAyNlx1MDAyNiB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBzaG1tYXgpKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuK1x0aWYgKHNobWFsbCBcdTAwMjZcdTAwMjYgd3JpdGVfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcIiwgc2htYWxsKSlcbitcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiB9XG4gXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuciA9IGxlbmd0aCAvIHBzaXplKCk7XG4gXHR1bnNpZ25lZCBsb25nIHZhbDtcbitcdGludCByZXQ7XG4gXG4tXHR2YWwgPSByZWFkX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCIpO1xuK1x0cmV0ID0gcmVhZF9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiBcdGlmICh2YWwgXHUwMDNjIGxlbmd0aCkge1xuLVx0XHR3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBsZW5ndGgpO1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBsZW5ndGgpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsKCk7XG4gXHRcdHNobW1heCA9IHZhbDtcbiBcdH1cbiBcbi1cdHZhbCA9IHJlYWRfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcIik7XG4rXHRyZXQgPSByZWFkX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmV0KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuIFx0aWYgKHZhbCBcdTAwM2MgbnIpIHtcbi1cdFx0d3JpdGVfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcIiwgbnIpO1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFwiLCBucik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbiBcdFx0c2htYWxsID0gdmFsO1xuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IGVhOGZjOGZkZjBlYjBiLi5hYTg1NmYwZDMyZDY0ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5AQCAtOCw2ICs4LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZSAvKiBfU0NfUEFHRVNJWkUgKi9cbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vZmlsZV91dGlscy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNkZWZpbmUgQklUX1VMTChucikgICAgICAgICAgICAgICAgICAgKDFVTEwgXHUwMDNjXHUwMDNjIChucikpXG4gI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KVxuQEAgLTE2NCwxMSArMTY2LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVx0KCgoZW50KSBcdTAwMjYgKDF1bGwgXHUwMDNjXHUwMDNjIDYzKSkgIT0gMClcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcdCgoZW50KSBcdTAwMjYgKCgxdWxsIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSlcbiBcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpO1xuIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDoyOTowOC44MjUwNDc1NzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjgzMjE3NTEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllczogQSBGb2N1c2VkIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgc2VlbXMgcHJldHR5IGNvbnRhaW5lZCwgd2hpY2ggaXMgZ29vZC4gVGhlIHByaW1hcnkgZm9jdXMgaXMgb24gcmVmYWN0b3JpbmcgYW5kIGFkZGluZyBzb21lIG5ldyB0b29saW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgZ3VwX3Rlc3QuY2AgY29kZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgc3BsaXR0aW5nIG91dCB1dGlsaXR5IGZ1bmN0aW9ucyBmcm9tIGBndXBfdGVzdC5jYCBpbnRvIGBmaWxlX3V0aWxzLmNgIGFuZCBgaHVnZXBhZ2Vfc2V0dGluZ3MuY2AuIE1ha2VzIHNlbnNlOyB0aGF0IHNob3VsZCBpbXByb3ZlIG1haW50YWluYWJpbGl0eSBhbmQgcG90ZW50aWFsbHkgcmV1c2FiaWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zLiBBIG5ldyB0b29sLCBgZ3VwX2JlbmNoLmNgLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLCB3aGljaCBJIGFzc3VtZSBpcyBmb3IgYmVuY2htYXJraW5nIHRoZSBHVVAgKEdldCBVc2VyIFBhZ2VzKSBvcGVyYXRpb25zLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBvbmUgaW4gbW9yZSBkZXRhaWwgdG8gdW5kZXJzdGFuZCB3aGF0IG1ldHJpY3MgdGhleSdyZSBsb29raW5nIGF0LlxuXG5Gcm9tIHRoZSBmaWxlIGxpc3QsIEkgY2FuIHNlZSB0aGUgc2NvcGUgaXMgZmFpcmx5IG5hcnJvdzogbW9zdGx5IHdpdGhpbiB0aGUgYHRvb2xzL2AsIGBEb2N1bWVudGF0aW9uL2AsIGFuZCBgTUFJTlRBSU5FUlNgIGRpcmVjdG9yaWVzLiBUaGlzIGlzIHdoYXQgSSBleHBlY3RlZC4gVGhlIGRpZmYgY29uZmlybXMgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nOiB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBhbnkgY29yZSBrZXJuZWwgbG9naWMsIG5vIGRyaXZlcnMsIG5vIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlLiBFdmVyeXRoaW5nIHNlZW1zIHRvIGJlIHVzZXItc3BhY2UgdG9vbHMgYW5kIHRlc3RzLiBUaGlzIGlzIGZ1cnRoZXIgYmFja2VkIHVwIGJ5IHRoZSBmaWxlIHBhdGhzIHdoaWNoIEkgd2lsbCB1c2UgdG8gYXNzZXNzIGNoYW5nZXMuXG5cblNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGUgY2hhbmdlcyB0byB0aGUgYERvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0YCBmaWxlIHdoaWNoIGxpa2VseSBtZWFucyB0aGUgZG9jdW1lbnRhdGlvbiBhcm91bmQgdGhlIGBwaW5fdXNlcl9wYWdlc2AgQVBJIGhhcyBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY2hhbmdlcy4gSSBhbHNvIHdhbnQgdG8gYXNzZXNzIHRoZSBgTUFJTlRBSU5FUlNgIGZpbGUgdG8gc2VlIGlmIGFueSBtYWludGFpbmVyc2hpcCBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlLlxuXG5HaXZlbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgYW5kIHRoZSBmYWN0IHRoYXQgdGhlcmUgYXJlIG5vIGFjdHVhbCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYsIEkgYmVsaWV2ZSB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYCBmb3IgdGhpcyBwYXRjaC4gSXQncyBlc3NlbnRpYWxseSBhIHJlZmFjdG9yIGFuZCBhIG5ldyB0b29sOyB0aGVyZSdzIG5vdGhpbmcgaGVyZSB0aGF0J3MgZGlyZWN0bHkgaW1wYWN0aW5nIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgdGhhdCB3b3VsZCBtYWtlIGl0IGEgcHJpb3JpdHkgdGFyZ2V0IGZvciBmdXp6aW5nLiBIb3dldmVyLCB0aGF0IGRvZXMgbm90IG1lYW4gdGhhdCB0aGUgY29kZSBpcyBmcmVlIG9mIGJ1Z3MsIHNvIEkgd2lsbCBoYXZlIGEgbW9yZSBkZXRhaWxlZCBhc3Nlc3NtZW50IG9mIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAzMiwiT3V0cHV0VG9rZW5zIjo4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjI5OjI1LjY1NzIyNDMyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xzICh0b29scy9tbS9ndXBfYmVuY2guYywgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vKSwgRG9jdW1lbnRhdGlvbiwgYW5kIE1BSU5UQUlORVJTLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xzICh0b29scy9tbS9ndXBfYmVuY2guYywgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vKSwgRG9jdW1lbnRhdGlvbiwgYW5kIE1BSU5UQUlORVJTLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow87vs5[1] Phase: Running StartedAt: 2026-07-16 20:29:36 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow87vs5[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-16 20:29:36 +0000 UTC FinishedAt: 2026-07-16 20:29:42 +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,}